Updating to 22.11 from 22.09.1 - SQL error? #3400

Closed
opened 2026-02-05 06:36:20 +03:00 by OVERLORD · 12 comments
Owner

Originally created by @patsyk1 on GitHub (Dec 15, 2022).

Attempted Debugging

  • I have read the debugging page

Searched GitHub Issues

  • I have searched GitHub for the issue.

Describe the Scenario

Updating from 22.09.1 to 22.11 always results in an SQLSTATE[42S22] error on the debug page.

I've tried restoring a SQL database from a backup before the update, but this doesn't help.

I saw there was a similarly completed issue with the update for someone else that was permission-based. Still, the fix of restoring all Bookstack permissions didn't help me (as I assume this is linked to SQL more so than permissions to the directories Bookstack is being served from).

Exact BookStack Version

22.09.1

Log Content

Error
Illuminate\View\ViewException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'view' in 'where clause' (SQL: select count(*) as aggregate from entity_permissions where view = 1 and role_id in (4) and entity_type = bookshelf) (View: /var/www/bookstack/resources/views/common/header.blade.php) (View: /var/www/bookstack/resources/views/common/header.blade.php) (View: /var/www/bookstack/resources/views/common/header.blade.php) (View: /var/www/bookstack/resources/views/common/header.blade.php)

Stack Trace
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(60): Illuminate\View\Engines\CompilerEngine->handleViewException()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Illuminate\View\Engines\PhpEngine->evaluatePath()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(139): Illuminate\View\Engines\CompilerEngine->get()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\View\View->getContents()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\View\View->renderContents()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\View\View->render()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\Http\Response->setContent()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(820): Illuminate\Http\Response->__construct()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(789): Illuminate\Routing\Router::toResponse()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Router->prepareResponse()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing{closure}()
/var/www/bookstack/app/Http/Middleware/Authenticate.php(23): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\Authenticate->handle()
/var/www/bookstack/app/Http/Middleware/Localization.php(45): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\Localization->handle()
/var/www/bookstack/app/Http/Middleware/RunThemeActions.php(26): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\RunThemeActions->handle()
/var/www/bookstack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\CheckEmailConfirmed->handle()
/var/www/bookstack/app/Http/Middleware/PreventAuthenticatedResponseCaching.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\PreventAuthenticatedResponseCaching->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle()
/var/www/bookstack/app/Http/Middleware/ApplyCspRules.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\ApplyCspRules->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/app/Http/Middleware/TrustProxies.php(41): Illuminate\Http\Middleware\TrustProxies->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\TrustProxies->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then()
/var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
/var/www/bookstack/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle()
{main}

PHP Version

7.4.3

Hosting Environment

Ubuntu 20.04 LTS

Originally created by @patsyk1 on GitHub (Dec 15, 2022). ### Attempted Debugging - [X] I have read the debugging page ### Searched GitHub Issues - [X] I have searched GitHub for the issue. ### Describe the Scenario Updating from 22.09.1 to 22.11 always results in an SQLSTATE[42S22] error on the debug page. I've tried restoring a SQL database from a backup before the update, but this doesn't help. I saw there was a similarly completed issue with the update for someone else that was permission-based. Still, the fix of restoring all Bookstack permissions didn't help me (as I assume this is linked to SQL more so than permissions to the directories Bookstack is being served from). ### Exact BookStack Version 22.09.1 ### Log Content Error Illuminate\View\ViewException SQLSTATE[42S22]: Column not found: 1054 Unknown column 'view' in 'where clause' (SQL: select count(*) as aggregate from `entity_permissions` where `view` = 1 and `role_id` in (4) and `entity_type` = bookshelf) (View: /var/www/bookstack/resources/views/common/header.blade.php) (View: /var/www/bookstack/resources/views/common/header.blade.php) (View: /var/www/bookstack/resources/views/common/header.blade.php) (View: /var/www/bookstack/resources/views/common/header.blade.php) Stack Trace /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(60): Illuminate\View\Engines\CompilerEngine->handleViewException() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Illuminate\View\Engines\PhpEngine->evaluatePath() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(139): Illuminate\View\Engines\CompilerEngine->get() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\View\View->getContents() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\View\View->renderContents() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\View\View->render() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\Http\Response->setContent() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(820): Illuminate\Http\Response->__construct() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(789): Illuminate\Routing\Router::toResponse() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Router->prepareResponse() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}() /var/www/bookstack/app/Http/Middleware/Authenticate.php(23): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\Authenticate->handle() /var/www/bookstack/app/Http/Middleware/Localization.php(45): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\Localization->handle() /var/www/bookstack/app/Http/Middleware/RunThemeActions.php(26): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\RunThemeActions->handle() /var/www/bookstack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\CheckEmailConfirmed->handle() /var/www/bookstack/app/Http/Middleware/PreventAuthenticatedResponseCaching.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\PreventAuthenticatedResponseCaching->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle() /var/www/bookstack/app/Http/Middleware/ApplyCspRules.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\ApplyCspRules->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/app/Http/Middleware/TrustProxies.php(41): Illuminate\Http\Middleware\TrustProxies->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BookStack\Http\Middleware\TrustProxies->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then() /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter() /var/www/bookstack/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle() {main} ### PHP Version 7.4.3 ### Hosting Environment Ubuntu 20.04 LTS
OVERLORD added the 🐕 Support label 2026-02-05 06:36:20 +03:00
Author
Owner

@ssddanbrown commented on GitHub (Dec 15, 2022):

Hi @patsyk1,
It sounds like the database is out of sync with the application files.
Could you run each upgrade command, one at a time, and share the command line output observed at each stage?

@ssddanbrown commented on GitHub (Dec 15, 2022): Hi @patsyk1, It sounds like the database is out of sync with the application files. Could you run each upgrade command, one at a time, and share the command line output observed at each stage?
Author
Owner

@patsyk1 commented on GitHub (Dec 15, 2022):

Hi @ssddanbrown,

Sure thing, I had to initially run the below as I was getting "error: Your local changes to the following files would be overwritten by merge:" when completing the initial git.

sudo git stash push --include-untracked
sudo git stash drop

Output observed at each stage after is:
sudo git pull origin release
From https://github.com/BookStackApp/BookStack

  • branch release -> FETCH_HEAD
    Updating ebd6e4d3..bf6a6af6
    Fast-forward
    .github/translators.txt | 18 +
    .github/workflows/analyse-php.yml | 4 +-
    .github/workflows/test-migrations.yml | 6 +-
    .github/workflows/test-php.yml | 6 +-
    LICENSE | 3 +-
    app/Actions/Queries/WebhooksAllPaginatedAndSorted.php | 30 +
    app/Actions/TagRepo.php | 21 +-
    app/Api/ApiEntityListFormatter.php | 107 ++++
    app/Api/ListingResponseBuilder.php | 23 +-
    app/Auth/Access/LoginService.php | 2 +
    app/Auth/Access/Oidc/OidcJwtSigningKey.php | 9 +-
    app/Auth/Access/Oidc/OidcProviderSettings.php | 42 +-
    app/Auth/Access/Oidc/OidcService.php | 1 -
    app/Auth/Access/Saml2Service.php | 19 +-
    app/Auth/Permissions/EntityPermission.php | 31 +-
    app/Auth/Permissions/JointPermissionBuilder.php | 53 +-
    app/Auth/Permissions/PermissionApplicator.php | 48 +-
    app/Auth/Permissions/PermissionFormData.php | 68 +++
    app/Auth/Permissions/PermissionsRepo.php | 1 +
    app/Auth/Permissions/SimpleEntityData.php | 1 -
    app/Auth/Queries/RolesAllPaginatedAndSorted.php | 35 ++
    .../{AllUsersPaginatedAndSorted.php => UsersAllPaginatedAndSorted.php} | 19 +-
    app/Auth/Role.php | 28 +-
    app/Auth/UserRepo.php | 8 +-
    app/Config/app.php | 21 +-
    app/Config/setting-defaults.php | 2 +
    app/Console/Commands/CopyShelfPermissions.php | 17 +-
    app/Entities/Models/Book.php | 12 +-
    app/Entities/Models/Bookshelf.php | 11 +-
    app/Entities/Models/Chapter.php | 11 +-
    app/Entities/Models/Entity.php | 8 +-
    app/Entities/Models/Page.php | 13 +-
    app/Entities/Models/PageRevision.php | 2 +-
    app/Entities/Repos/BaseRepo.php | 4 +-
    app/Entities/Repos/BookshelfRepo.php | 25 -
    app/Entities/Tools/BookContents.php | 15 +-
    app/Entities/Tools/Cloner.php | 23 +-
    app/Entities/Tools/HierarchyTransformer.php | 2 +-
    app/Entities/Tools/PermissionsUpdater.php | 54 +-
    app/Http/Controllers/Api/BookApiController.php | 20 +-
    app/Http/Controllers/Api/BookshelfApiController.php | 3 -
    app/Http/Controllers/Api/SearchApiController.php | 30 +-
    app/Http/Controllers/AuditLogController.php | 46 +-
    app/Http/Controllers/Auth/ConfirmEmailController.php | 22 +-
    app/Http/Controllers/Auth/ForgotPasswordController.php | 23 +-
    app/Http/Controllers/Auth/LoginController.php | 167 ++----
    app/Http/Controllers/Auth/RegisterController.php | 59 +-
    app/Http/Controllers/Auth/ResetPasswordController.php | 92 +--
    app/Http/Controllers/Auth/Saml2Controller.php | 2 +-
    app/Http/Controllers/Auth/SocialController.php | 8 +-
    app/Http/Controllers/Auth/ThrottlesLogins.php | 92 +++
    app/Http/Controllers/Auth/UserInviteController.php | 7 +-
    app/Http/Controllers/BookController.php | 46 +-
    app/Http/Controllers/BookshelfController.php | 74 +--
    app/Http/Controllers/ChapterController.php | 33 --
    app/Http/Controllers/FavouriteController.php | 2 +-
    app/Http/Controllers/HomeController.php | 22 +-
    app/Http/Controllers/PageController.php | 34 --
    app/Http/Controllers/PageRevisionController.php | 26 +-
    app/Http/Controllers/PermissionsController.php | 174 ++++++
    app/Http/Controllers/ReferenceController.php | 10 +-
    app/Http/Controllers/RoleController.php | 31 +-
    app/Http/Controllers/SearchController.php | 24 +-
    app/Http/Controllers/TagController.php | 31 +-
    app/Http/Controllers/UserController.php | 164 +----
    app/Http/Controllers/UserPreferencesController.php | 142 +++++
    app/Http/Controllers/WebhookController.php | 23 +-
    app/Providers/AppServiceProvider.php | 55 +-
    app/Providers/AuthServiceProvider.php | 4 +-
    app/Providers/BroadcastServiceProvider.php | 25 -
    app/Providers/CustomFacadeProvider.php | 36 --
    app/Providers/EventServiceProvider.php | 2 +-
    app/Providers/PaginationServiceProvider.php | 35 --
    app/Providers/RouteServiceProvider.php | 8 -
    app/Providers/ThemeServiceProvider.php | 6 +-
    ...ustomValidationServiceProvider.php => ValidationRuleServiceProvider.php} | 2 +-
    app/Providers/ViewTweaksServiceProvider.php | 31 +
    app/Search/SearchRunner.php | 6 +-
    app/Settings/SettingService.php | 12 +
    app/Settings/UserShortcutMap.php | 82 +++
    app/Uploads/ImageService.php | 9 +-
    app/Util/LanguageManager.php | 1 +
    app/Util/SimpleListOptions.php | 104 ++++
    composer.json | 4 +-
    composer.lock | 946 ++++++++++++++++-------------
    database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php | 105 ++++
    database/migrations/2022_10_08_104202_drop_entity_restricted_field.php | 93 +++
    dev/api/responses/books-read.json | 42 +-
    dev/docs/components.md | 99 ----
    dev/docs/development.md | 98 +++
    dev/docs/javascript-code.md | 156 +++++
    dev/docs/release-process.md | 24 +
    package-lock.json | 1122 +++++++++++++++++++++--------------
    package.json | 4 +-
    public/dist/app.js | 60 +-
    public/dist/code.js | 42 +-
    public/dist/export-styles.css | 2 +-
    public/dist/print-styles.css | 2 +-
    public/dist/styles.css | 2 +-
    readme.md | 127 +---
    resources/icons/groups.svg | 1 +
    resources/icons/image.svg | 5 +-
    resources/icons/role.svg | 4 +
    resources/icons/shortcuts.svg | 1 +
    resources/js/app.js | 7 +-
    resources/js/code.mjs | 9 +-
    resources/js/components/add-remove-rows.js | 10 +-
    resources/js/components/ajax-delete-row.js | 11 +-
    resources/js/components/ajax-form.js | 11 +-
    resources/js/components/attachments-list.js | 9 +-
    resources/js/components/attachments.js | 19 +-
    resources/js/components/auto-submit.js | 11 +
    resources/js/components/auto-suggest.js | 23 +-
    resources/js/components/back-to-top.js | 23 +-
    resources/js/components/book-sort.js | 26 +-
    resources/js/components/chapter-contents.js | 9 +-
    resources/js/components/code-editor.js | 25 +-
    resources/js/components/code-highlighter.js | 16 +-
    resources/js/components/code-textarea.js | 9 +-
    resources/js/components/collapsible.js | 28 +-
    resources/js/components/component.js | 58 ++
    resources/js/components/confirm-dialog.js | 10 +-
    resources/js/components/custom-checkbox.js | 21 +-
    resources/js/components/details-highlighter.js | 19 +-
    resources/js/components/dropdown-search.js | 7 +-
    resources/js/components/dropdown.js | 86 +--
    resources/js/components/dropzone.js | 11 +-
    resources/js/components/editor-toolbox.js | 65 +-
    resources/js/components/entity-permissions-editor.js | 20 -
    resources/js/components/entity-permissions.js | 75 +++
    resources/js/components/entity-search.js | 11 +-
    resources/js/components/entity-selector-popup.js | 32 +-
    resources/js/components/entity-selector.js | 10 +-
    resources/js/components/event-emit-select.js | 9 +-
    resources/js/components/expand-toggle.js | 22 +-
    resources/js/components/global-search.js | 82 +++
    resources/js/components/header-mobile-toggle.js | 7 +-
    resources/js/components/image-manager.js | 29 +-
    resources/js/components/image-picker.js | 34 +-
    resources/js/components/index.js | 333 ++---------
    resources/js/components/list-sort-control.js | 27 +-
    resources/js/components/markdown-editor.js | 647 +++-----------------
    resources/js/components/new-user-password.js | 22 +-
    resources/js/components/notification.js | 40 +-
    resources/js/components/optional-input.js | 7 +-
    resources/js/components/page-comments.js | 19 +-
    resources/js/components/page-display.js | 144 +----
    resources/js/components/page-editor.js | 16 +-
    resources/js/components/page-picker.js | 31 +-
    resources/js/components/permissions-table.js | 30 +-
    resources/js/components/pointer.js | 128 ++++
    resources/js/components/popup.js | 8 +-
    resources/js/components/setting-app-color-picker.js | 26 +-
    resources/js/components/setting-color-picker.js | 30 +-
    .../js/components/{homepage-control.js => setting-homepage-control.js} | 17 +-
    resources/js/components/shelf-sort.js | 10 +-
    resources/js/components/shortcut-input.js | 54 ++
    resources/js/components/shortcuts.js | 162 +++++
    resources/js/components/sidebar.js | 16 -
    resources/js/components/sortable-list.js | 9 +-
    resources/js/components/submit-on-change.js | 9 +-
    resources/js/components/tabs.js | 12 +-
    resources/js/components/tag-manager.js | 15 +-
    resources/js/components/template-manager.js | 90 ++-
    resources/js/components/toggle-switch.js | 14 +-
    resources/js/components/tri-layout.js | 7 +-
    resources/js/components/user-select.js | 19 +-
    resources/js/components/webhook-events.js | 10 +-
    resources/js/components/wysiwyg-editor.js | 7 +-
    resources/js/markdown/actions.js | 448 ++++++++++++++
    resources/js/markdown/codemirror.js | 70 +++
    resources/js/markdown/common-events.js | 33 ++
    resources/js/markdown/display.js | 109 ++++
    resources/js/markdown/editor.js | 54 ++
    resources/js/markdown/markdown.js | 30 +
    resources/js/markdown/settings.js | 62 ++
    resources/js/markdown/shortcuts.js | 48 ++
    resources/js/services/components.js | 165 ++++++
    resources/js/services/dom.js | 13 +
    resources/js/services/keyboard-navigation.js | 89 +++
    resources/js/services/text.js | 19 +
    resources/js/services/util.js | 6 +-
    resources/js/wysiwyg/config.js | 12 +-
    resources/js/wysiwyg/icons.js | 21 +
    resources/js/wysiwyg/plugin-codeeditor.js | 27 +-
    resources/js/wysiwyg/plugin-drawio.js | 6 +-
    resources/js/wysiwyg/plugins-customhr.js | 2 +-
    resources/js/wysiwyg/plugins-imagemanager.js | 5 +-
    resources/js/wysiwyg/shortcuts.js | 4 +-
    resources/js/wysiwyg/toolbars.js | 2 +-
    resources/lang/ar/auth.php | 2 +
    resources/lang/ar/common.php | 3 +
    resources/lang/ar/editor.php | 5 +-
    resources/lang/ar/entities.php | 14 +-
    resources/lang/ar/preferences.php | 18 +
    resources/lang/ar/settings.php | 9 +
    resources/lang/bg/auth.php | 2 +
    resources/lang/bg/common.php | 3 +
    resources/lang/bg/editor.php | 5 +-
    resources/lang/bg/entities.php | 14 +-
    resources/lang/bg/preferences.php | 18 +
    resources/lang/bg/settings.php | 9 +
    resources/lang/bs/auth.php | 2 +
    resources/lang/bs/common.php | 3 +
    resources/lang/bs/editor.php | 5 +-
    resources/lang/bs/entities.php | 14 +-
    resources/lang/bs/preferences.php | 18 +
    resources/lang/bs/settings.php | 9 +
    resources/lang/ca/auth.php | 2 +
    resources/lang/ca/common.php | 3 +
    resources/lang/ca/editor.php | 5 +-
    resources/lang/ca/entities.php | 14 +-
    resources/lang/ca/preferences.php | 18 +
    resources/lang/ca/settings.php | 9 +
    resources/lang/cs/activities.php | 22 +-
    resources/lang/cs/auth.php | 18 +-
    resources/lang/cs/common.php | 9 +-
    resources/lang/cs/editor.php | 305 +++++-----
    resources/lang/cs/entities.php | 100 ++--
    resources/lang/cs/errors.php | 10 +-
    resources/lang/cs/passwords.php | 4 +-
    resources/lang/cs/preferences.php | 18 +
    resources/lang/cs/settings.php | 51 +-
    resources/lang/cs/validation.php | 2 +-
    resources/lang/cy/auth.php | 2 +
    resources/lang/cy/common.php | 3 +
    resources/lang/cy/editor.php | 5 +-
    resources/lang/cy/entities.php | 14 +-
    resources/lang/cy/preferences.php | 18 +
    resources/lang/cy/settings.php | 9 +
    resources/lang/da/auth.php | 2 +
    resources/lang/da/common.php | 3 +
    resources/lang/da/editor.php | 5 +-
    resources/lang/da/entities.php | 14 +-
    resources/lang/da/preferences.php | 18 +
    resources/lang/da/settings.php | 9 +
    resources/lang/de/activities.php | 2 +-
    resources/lang/de/auth.php | 10 +-
    resources/lang/de/common.php | 3 +
    resources/lang/de/components.php | 2 +-
    resources/lang/de/editor.php | 5 +-
    resources/lang/de/entities.php | 14 +-
    resources/lang/de/errors.php | 12 +-
    resources/lang/de/preferences.php | 18 +
    resources/lang/de/settings.php | 21 +-
    resources/lang/de/validation.php | 4 +-
    resources/lang/de_informal/activities.php | 10 +-
    resources/lang/de_informal/auth.php | 18 +-
    resources/lang/de_informal/common.php | 5 +-
    resources/lang/de_informal/editor.php | 21 +-
    resources/lang/de_informal/entities.php | 14 +-
    resources/lang/de_informal/preferences.php | 18 +
    resources/lang/de_informal/settings.php | 15 +-
    resources/lang/el/activities.php | 73 +++
    resources/lang/el/auth.php | 117 ++++
    resources/lang/el/common.php | 107 ++++
    resources/lang/el/components.php | 34 ++
    resources/lang/el/editor.php | 174 ++++++
    resources/lang/el/entities.php | 388 ++++++++++++
    resources/lang/el/errors.php | 109 ++++
    resources/lang/el/pagination.php | 12 +
    resources/lang/el/passwords.php | 15 +
    resources/lang/el/preferences.php | 18 +
    resources/lang/el/settings.php | 324 ++++++++++
    resources/lang/el/validation.php | 117 ++++
    resources/lang/en/auth.php | 2 +
    resources/lang/en/common.php | 3 +
    resources/lang/en/editor.php | 5 +-
    resources/lang/en/entities.php | 14 +-
    resources/lang/en/preferences.php | 18 +
    resources/lang/en/settings.php | 9 +
    resources/lang/es/auth.php | 10 +-
    resources/lang/es/common.php | 3 +
    resources/lang/es/editor.php | 5 +-
    resources/lang/es/entities.php | 14 +-
    resources/lang/es/preferences.php | 18 +
    resources/lang/es/settings.php | 9 +
    resources/lang/es_AR/auth.php | 2 +
    resources/lang/es_AR/common.php | 3 +
    resources/lang/es_AR/editor.php | 5 +-
    resources/lang/es_AR/entities.php | 14 +-
    resources/lang/es_AR/preferences.php | 18 +
    resources/lang/es_AR/settings.php | 9 +
    resources/lang/et/auth.php | 2 +
    resources/lang/et/common.php | 3 +
    resources/lang/et/editor.php | 5 +-
    resources/lang/et/entities.php | 14 +-
    resources/lang/et/preferences.php | 18 +
    resources/lang/et/settings.php | 9 +
    resources/lang/eu/auth.php | 2 +
    resources/lang/eu/common.php | 3 +
    resources/lang/eu/editor.php | 5 +-
    resources/lang/eu/entities.php | 20 +-
    resources/lang/eu/preferences.php | 18 +
    resources/lang/eu/settings.php | 9 +
    resources/lang/fa/activities.php | 4 +-
    resources/lang/fa/auth.php | 2 +
    resources/lang/fa/common.php | 3 +
    resources/lang/fa/editor.php | 5 +-
    resources/lang/fa/entities.php | 16 +-
    resources/lang/fa/preferences.php | 18 +
    resources/lang/fa/settings.php | 9 +
    resources/lang/fr/auth.php | 2 +
    resources/lang/fr/common.php | 3 +
    resources/lang/fr/editor.php | 5 +-
    resources/lang/fr/entities.php | 14 +-
    resources/lang/fr/preferences.php | 18 +
    resources/lang/fr/settings.php | 9 +
    resources/lang/he/auth.php | 2 +
    resources/lang/he/common.php | 3 +
    resources/lang/he/editor.php | 5 +-
    resources/lang/he/entities.php | 14 +-
    resources/lang/he/preferences.php | 18 +
    resources/lang/he/settings.php | 9 +
    resources/lang/hr/auth.php | 2 +
    resources/lang/hr/common.php | 3 +
    resources/lang/hr/editor.php | 5 +-
    resources/lang/hr/entities.php | 14 +-
    resources/lang/hr/preferences.php | 18 +
    resources/lang/hr/settings.php | 9 +
    resources/lang/hu/auth.php | 2 +
    resources/lang/hu/common.php | 3 +
    resources/lang/hu/editor.php | 5 +-
    resources/lang/hu/entities.php | 14 +-
    resources/lang/hu/preferences.php | 18 +
    resources/lang/hu/settings.php | 9 +
    resources/lang/id/auth.php | 2 +
    resources/lang/id/common.php | 3 +
    resources/lang/id/editor.php | 17 +-
    resources/lang/id/entities.php | 14 +-
    resources/lang/id/preferences.php | 18 +
    resources/lang/id/settings.php | 9 +
    resources/lang/it/auth.php | 2 +
    resources/lang/it/common.php | 3 +
    resources/lang/it/editor.php | 5 +-
    resources/lang/it/entities.php | 14 +-
    resources/lang/it/preferences.php | 18 +
    resources/lang/it/settings.php | 9 +
    resources/lang/ja/auth.php | 2 +
    resources/lang/ja/common.php | 3 +
    resources/lang/ja/editor.php | 5 +-
    resources/lang/ja/entities.php | 14 +-
    resources/lang/ja/preferences.php | 18 +
    resources/lang/ja/settings.php | 9 +
    resources/lang/ka/activities.php | 73 +++
    resources/lang/ka/auth.php | 117 ++++
    resources/lang/ka/common.php | 107 ++++
    resources/lang/ka/components.php | 34 ++
    resources/lang/ka/editor.php | 174 ++++++
    resources/lang/ka/entities.php | 388 ++++++++++++
    resources/lang/ka/errors.php | 109 ++++
    resources/lang/ka/pagination.php | 12 +
    resources/lang/ka/passwords.php | 15 +
    resources/lang/ka/preferences.php | 18 +
    resources/lang/ka/settings.php | 324 ++++++++++
    resources/lang/ka/validation.php | 117 ++++
    resources/lang/ko/activities.php | 14 +-
    resources/lang/ko/auth.php | 2 +
    resources/lang/ko/common.php | 3 +
    resources/lang/ko/editor.php | 115 ++--
    resources/lang/ko/entities.php | 14 +-
    resources/lang/ko/preferences.php | 18 +
    resources/lang/ko/settings.php | 9 +
    resources/lang/lt/auth.php | 2 +
    resources/lang/lt/common.php | 3 +
    resources/lang/lt/editor.php | 5 +-
    resources/lang/lt/entities.php | 14 +-
    resources/lang/lt/preferences.php | 18 +
    resources/lang/lt/settings.php | 9 +
    resources/lang/lv/auth.php | 2 +
    resources/lang/lv/common.php | 3 +
    resources/lang/lv/editor.php | 5 +-
    resources/lang/lv/entities.php | 14 +-
    resources/lang/lv/preferences.php | 18 +
    resources/lang/lv/settings.php | 9 +
    resources/lang/nb/auth.php | 2 +
    resources/lang/nb/common.php | 3 +
    resources/lang/nb/editor.php | 5 +-
    resources/lang/nb/entities.php | 14 +-
    resources/lang/nb/preferences.php | 18 +
    resources/lang/nb/settings.php | 9 +
    resources/lang/nl/auth.php | 2 +
    resources/lang/nl/common.php | 3 +
    resources/lang/nl/editor.php | 5 +-
    resources/lang/nl/entities.php | 40 +-
    resources/lang/nl/preferences.php | 18 +
    resources/lang/nl/settings.php | 11 +-
    resources/lang/pl/activities.php | 14 +-
    resources/lang/pl/auth.php | 2 +
    resources/lang/pl/common.php | 3 +
    resources/lang/pl/editor.php | 5 +-
    resources/lang/pl/entities.php | 48 +-
    resources/lang/pl/errors.php | 2 +-
    resources/lang/pl/preferences.php | 18 +
    resources/lang/pl/settings.php | 21 +-
    resources/lang/pt/auth.php | 2 +
    resources/lang/pt/common.php | 3 +
    resources/lang/pt/editor.php | 5 +-
    resources/lang/pt/entities.php | 14 +-
    resources/lang/pt/preferences.php | 18 +
    resources/lang/pt/settings.php | 9 +
    resources/lang/pt_BR/activities.php | 16 +-
    resources/lang/pt_BR/auth.php | 8 +-
    resources/lang/pt_BR/common.php | 3 +
    resources/lang/pt_BR/editor.php | 7 +-
    resources/lang/pt_BR/entities.php | 74 ++-
    resources/lang/pt_BR/errors.php | 2 +-
    resources/lang/pt_BR/preferences.php | 18 +
    resources/lang/pt_BR/settings.php | 21 +-
    resources/lang/ro/auth.php | 2 +
    resources/lang/ro/common.php | 3 +
    resources/lang/ro/editor.php | 5 +-
    resources/lang/ro/entities.php | 14 +-
    resources/lang/ro/preferences.php | 18 +
    resources/lang/ro/settings.php | 19 +-
    resources/lang/ru/auth.php | 2 +
    resources/lang/ru/common.php | 3 +
    resources/lang/ru/editor.php | 5 +-
    resources/lang/ru/entities.php | 14 +-
    resources/lang/ru/preferences.php | 18 +
    resources/lang/ru/settings.php | 9 +
    resources/lang/sk/auth.php | 2 +
    resources/lang/sk/common.php | 3 +
    resources/lang/sk/editor.php | 5 +-
    resources/lang/sk/entities.php | 14 +-
    resources/lang/sk/preferences.php | 18 +
    resources/lang/sk/settings.php | 9 +
    resources/lang/sl/auth.php | 2 +
    resources/lang/sl/common.php | 3 +
    resources/lang/sl/editor.php | 5 +-
    resources/lang/sl/entities.php | 14 +-
    resources/lang/sl/preferences.php | 18 +
    resources/lang/sl/settings.php | 9 +
    resources/lang/sv/activities.php | 62 +-
    resources/lang/sv/auth.php | 82 +--
    resources/lang/sv/common.php | 21 +-
    resources/lang/sv/editor.php | 295 ++++-----
    resources/lang/sv/entities.php | 140 +++--
    resources/lang/sv/errors.php | 12 +-
    resources/lang/sv/preferences.php | 18 +
    resources/lang/sv/settings.php | 133 +++--
    resources/lang/sv/validation.php | 6 +-
    resources/lang/tr/activities.php | 4 +-
    resources/lang/tr/auth.php | 2 +
    resources/lang/tr/common.php | 3 +
    resources/lang/tr/editor.php | 5 +-
    resources/lang/tr/entities.php | 14 +-
    resources/lang/tr/preferences.php | 18 +
    resources/lang/tr/settings.php | 9 +
    resources/lang/uk/auth.php | 2 +
    resources/lang/uk/common.php | 3 +
    resources/lang/uk/editor.php | 5 +-
    resources/lang/uk/entities.php | 14 +-
    resources/lang/uk/preferences.php | 18 +
    resources/lang/uk/settings.php | 9 +
    resources/lang/uz/auth.php | 2 +
    resources/lang/uz/common.php | 3 +
    resources/lang/uz/editor.php | 5 +-
    resources/lang/uz/entities.php | 14 +-
    resources/lang/uz/preferences.php | 18 +
    resources/lang/uz/settings.php | 9 +
    resources/lang/vi/auth.php | 2 +
    resources/lang/vi/common.php | 3 +
    resources/lang/vi/editor.php | 5 +-
    resources/lang/vi/entities.php | 14 +-
    resources/lang/vi/preferences.php | 18 +
    resources/lang/vi/settings.php | 9 +
    resources/lang/zh_CN/auth.php | 2 +
    resources/lang/zh_CN/common.php | 3 +
    resources/lang/zh_CN/editor.php | 5 +-
    resources/lang/zh_CN/entities.php | 14 +-
    resources/lang/zh_CN/preferences.php | 18 +
    resources/lang/zh_CN/settings.php | 9 +
    resources/lang/zh_TW/activities.php | 20 +-
    resources/lang/zh_TW/auth.php | 46 +-
    resources/lang/zh_TW/common.php | 7 +-
    resources/lang/zh_TW/editor.php | 97 +--
    resources/lang/zh_TW/entities.php | 22 +-
    resources/lang/zh_TW/errors.php | 10 +-
    resources/lang/zh_TW/preferences.php | 18 +
    resources/lang/zh_TW/settings.php | 23 +-
    resources/lang/zh_TW/validation.php | 6 +-
    resources/sass/_animations.scss | 16 +-
    resources/sass/_blocks.scss | 41 +-
    resources/sass/_buttons.scss | 18 +-
    resources/sass/_components.scss | 132 ++++-
    resources/sass/_forms.scss | 98 +--
    resources/sass/_header.scss | 74 ++-
    resources/sass/_layout.scss | 58 +-
    resources/sass/_lists.scss | 3 +-
    resources/sass/_opacity.scss | 28 +
    resources/sass/_pages.scss | 15 +-
    resources/sass/_spacing.scss | 14 +-
    resources/sass/_tables.scss | 2 +-
    resources/sass/_text.scss | 2 +-
    resources/sass/_variables.scss | 4 +
    resources/sass/styles.scss | 101 ++--
    resources/views/api-docs/index.blade.php | 2 +-
    resources/views/api-docs/parts/endpoint.blade.php | 4 +-
    resources/views/api-docs/parts/getting-started.blade.php | 13 +-
    resources/views/attachments/manager.blade.php | 7 +-
    resources/views/auth/login.blade.php | 2 +
    resources/views/auth/parts/login-message.blade.php | 2 +
    resources/views/auth/parts/register-message.blade.php | 2 +
    resources/views/auth/register-confirm-accept.blade.php | 27 +
    resources/views/auth/register.blade.php | 2 +
    resources/views/books/index.blade.php | 4 +-
    resources/views/books/parts/form.blade.php | 12 +-
    resources/views/books/parts/list.blade.php | 12 +-
    resources/views/books/parts/sort-box.blade.php | 10 +-
    resources/views/books/permissions.blade.php | 5 +-
    resources/views/books/show.blade.php | 16 +-
    resources/views/books/sort.blade.php | 6 +-
    resources/views/chapters/parts/form.blade.php | 6 +-
    resources/views/chapters/permissions.blade.php | 5 +-
    resources/views/chapters/show.blade.php | 18 +-
    resources/views/common/dark-mode-toggle.blade.php | 2 +-
    resources/views/common/header.blade.php | 44 +-
    resources/views/common/notifications.blade.php | 26 +-
    resources/views/{entities => common}/sort.blade.php | 31 +-
    resources/views/common/status-indicator.blade.php | 3 +
    resources/views/entities/export-menu.blade.php | 9 +-
    resources/views/entities/favourite-action.blade.php | 2 +-
    resources/views/entities/search-form.blade.php | 2 +-
    resources/views/entities/sibling-navigation.blade.php | 4 +-
    resources/views/entities/view-toggle.blade.php | 8 +-
    resources/views/form/custom-checkbox.blade.php | 4 +-
    resources/views/form/entity-permissions-row.blade.php | 88 +++
    resources/views/form/entity-permissions.blade.php | 93 +--
    resources/views/form/image-picker.blade.php | 21 +-
    resources/views/form/restriction-checkbox.blade.php | 13 -
    resources/views/form/toggle-switch.blade.php | 2 +-
    resources/views/home/parts/expand-toggle.blade.php | 10 +-
    resources/views/home/shelves.blade.php | 2 +-
    resources/views/home/specific-page.blade.php | 4 +-
    resources/views/layouts/base.blade.php | 9 +-
    resources/views/pages/parts/code-editor.blade.php | 8 +-
    resources/views/pages/parts/editor-toolbox.blade.php | 14 +-
    resources/views/pages/parts/markdown-editor.blade.php | 46 +-
    resources/views/pages/parts/pointer.blade.php | 5 +-
    resources/views/pages/parts/revision-table-row.blade.php | 69 ---
    resources/views/pages/parts/revisions-index-row.blade.php | 80 +++
    resources/views/pages/parts/template-manager.blade.php | 16 +-
    resources/views/pages/permissions.blade.php | 5 +-
    resources/views/pages/revisions.blade.php | 38 +-
    resources/views/pages/show.blade.php | 24 +-
    resources/views/search/all.blade.php | 4 +-
    .../parts/{entity-ajax-list.blade.php => entity-selector-list.blade.php} | 0
    resources/views/search/parts/entity-suggestion-list.blade.php | 21 +
    resources/views/search/parts/term-list.blade.php | 35 +-
    resources/views/settings/audit.blade.php | 94 +--
    resources/views/settings/customization.blade.php | 21 +-
    resources/views/settings/parts/page-picker.blade.php | 14 +-
    resources/views/settings/parts/setting-entity-color-picker.blade.php | 12 +-
    resources/views/settings/parts/table-user.blade.php | 6 +-
    resources/views/settings/recycle-bin/index.blade.php | 92 +--
    resources/views/settings/recycle-bin/parts/recycle-bin-list-item.blade.php | 48 ++
    resources/views/settings/roles/index.blade.php | 43 +-
    resources/views/settings/roles/parts/asset-permissions-row.blade.php | 32 +
    resources/views/settings/roles/parts/form.blade.php | 192 +-----
    .../views/settings/roles/parts/related-asset-permissions-row.blade.php | 26 +
    resources/views/settings/roles/parts/roles-list-item.blade.php | 14 +
    resources/views/settings/webhooks/index.blade.php | 52 +-
    resources/views/settings/webhooks/parts/webhooks-list-item.blade.php | 18 +
    resources/views/shelves/index.blade.php | 6 +-
    resources/views/shelves/parts/form.blade.php | 12 +-
    resources/views/shelves/parts/list.blade.php | 6 +-
    resources/views/shelves/permissions.blade.php | 15 +-
    resources/views/shelves/show.blade.php | 19 +-
    resources/views/tags/index.blade.php | 41 +-
    resources/views/tags/parts/table-row.blade.php | 37 --
    resources/views/tags/parts/tags-list-item.blade.php | 31 +
    resources/views/users/api-tokens/parts/list.blade.php | 36 +-
    resources/views/users/index.blade.php | 59 +-
    resources/views/users/parts/form.blade.php | 5 +-
    resources/views/users/parts/users-list-item.blade.php | 27 +
    resources/views/users/preferences/parts/shortcut-control.blade.php | 12 +
    resources/views/users/preferences/shortcuts.blade.php | 75 +++
    routes/web.php | 48 +-
    tests/Actions/AuditLogTest.php | 33 +-
    tests/Actions/WebhookCallTest.php | 4 +-
    tests/Actions/WebhookFormatTesting.php | 12 +-
    tests/Api/AttachmentsApiTest.php | 50 +-
    tests/Api/BooksApiTest.php | 49 +-
    tests/Api/ChaptersApiTest.php | 19 +-
    tests/Api/PagesApiTest.php | 39 +-
    tests/Api/RecycleBinApiTest.php | 11 +-
    tests/Api/SearchApiTest.php | 6 +-
    tests/Api/UsersApiTest.php | 2 +-
    tests/Auth/AuthTest.php | 277 +--------
    tests/Auth/OidcTest.php | 31 +
    tests/Auth/RegistrationTest.php | 187 ++++++
    tests/Auth/ResetPasswordTest.php | 101 ++++
    tests/Auth/Saml2Test.php | 14 +
    tests/Auth/UserInviteTest.php | 2 +-
    tests/Commands/ClearActivityCommandTest.php | 4 +-
    tests/Commands/CopyShelfPermissionsCommandTest.php | 36 +-
    tests/Commands/RegenerateReferencesCommandTest.php | 4 +-
    tests/Commands/UpdateUrlCommandTest.php | 3 +-
    tests/Entity/BookShelfTest.php | 41 +-
    tests/Entity/BookTest.php | 67 ++-
    tests/Entity/ChapterTest.php | 22 +-
    tests/Entity/CommentSettingTest.php | 15 +-
    tests/Entity/CommentTest.php | 10 +-
    tests/Entity/ConvertTest.php | 14 +-
    tests/Entity/EntityAccessTest.php | 9 +-
    tests/Entity/EntitySearchTest.php | 131 ++--
    tests/Entity/ExportTest.php | 61 +-
    tests/Entity/PageContentTest.php | 75 ++-
    tests/Entity/PageDraftTest.php | 35 +-
    tests/Entity/PageEditorTest.php | 27 +-
    tests/Entity/PageRevisionTest.php | 162 ++---
    tests/Entity/PageTemplateTest.php | 6 +-
    tests/Entity/PageTest.php | 44 +-
    tests/Entity/SortTest.php | 102 ++--
    tests/Entity/TagTest.php | 32 +-
    tests/ErrorTest.php | 3 +-
    tests/FavouriteTest.php | 26 +-
    tests/Helpers/EntityProvider.php | 240 ++++++++
    tests/Helpers/TestServiceProvider.php | 26 +
    tests/HomepageTest.php | 22 +-
    tests/OpenGraphTest.php | 12 +-
    tests/Permissions/EntityOwnerChangeTest.php | 12 +-
    tests/Permissions/EntityPermissionsTest.php | 117 ++--
    tests/Permissions/ExportPermissionsTest.php | 10 +-
    tests/Permissions/RolesTest.php | 89 +--
    tests/PublicActionTest.php | 18 +-
    tests/References/CrossLinkParserTest.php | 7 +-
    tests/References/ReferencesTest.php | 62 +-
    tests/Settings/RecycleBinTest.php | 42 +-
    tests/TestCase.php | 147 ++---
    tests/ThemeTest.php | 38 +-
    tests/Uploads/AttachmentTest.php | 30 +-
    tests/Uploads/ImageTest.php | 59 +-
    tests/Uploads/UsesImages.php | 2 +-
    tests/UrlTest.php | 3 -
    tests/User/UserManagementTest.php | 20 +-
    tests/User/UserPreferencesTest.php | 81 ++-
    tests/User/UserProfileTest.php | 8 +-
    version | 2 +-
    640 files changed, 14779 insertions(+), 7154 deletions(-)
    create mode 100644 app/Actions/Queries/WebhooksAllPaginatedAndSorted.php
    create mode 100644 app/Api/ApiEntityListFormatter.php
    create mode 100644 app/Auth/Permissions/PermissionFormData.php
    create mode 100644 app/Auth/Queries/RolesAllPaginatedAndSorted.php
    rename app/Auth/Queries/{AllUsersPaginatedAndSorted.php => UsersAllPaginatedAndSorted.php} (63%)
    create mode 100644 app/Http/Controllers/Auth/ThrottlesLogins.php
    create mode 100644 app/Http/Controllers/PermissionsController.php
    create mode 100644 app/Http/Controllers/UserPreferencesController.php
    delete mode 100644 app/Providers/BroadcastServiceProvider.php
    delete mode 100644 app/Providers/CustomFacadeProvider.php
    delete mode 100644 app/Providers/PaginationServiceProvider.php
    rename app/Providers/{CustomValidationServiceProvider.php => ValidationRuleServiceProvider.php} (93%)
    create mode 100644 app/Providers/ViewTweaksServiceProvider.php
    create mode 100644 app/Settings/UserShortcutMap.php
    create mode 100644 app/Util/SimpleListOptions.php
    create mode 100644 database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php
    create mode 100644 database/migrations/2022_10_08_104202_drop_entity_restricted_field.php
    delete mode 100644 dev/docs/components.md
    create mode 100644 dev/docs/development.md
    create mode 100644 dev/docs/javascript-code.md
    create mode 100644 dev/docs/release-process.md
    create mode 100644 resources/icons/groups.svg
    create mode 100644 resources/icons/role.svg
    create mode 100644 resources/icons/shortcuts.svg
    create mode 100644 resources/js/components/auto-submit.js
    create mode 100644 resources/js/components/component.js
    delete mode 100644 resources/js/components/entity-permissions-editor.js
    create mode 100644 resources/js/components/entity-permissions.js
    create mode 100644 resources/js/components/global-search.js
    create mode 100644 resources/js/components/pointer.js
    rename resources/js/components/{homepage-control.js => setting-homepage-control.js} (55%)
    create mode 100644 resources/js/components/shortcut-input.js
    create mode 100644 resources/js/components/shortcuts.js
    delete mode 100644 resources/js/components/sidebar.js
    create mode 100644 resources/js/markdown/actions.js
    create mode 100644 resources/js/markdown/codemirror.js
    create mode 100644 resources/js/markdown/common-events.js
    create mode 100644 resources/js/markdown/display.js
    create mode 100644 resources/js/markdown/editor.js
    create mode 100644 resources/js/markdown/markdown.js
    create mode 100644 resources/js/markdown/settings.js
    create mode 100644 resources/js/markdown/shortcuts.js
    create mode 100644 resources/js/services/components.js
    create mode 100644 resources/js/services/keyboard-navigation.js
    create mode 100644 resources/js/services/text.js
    create mode 100644 resources/js/wysiwyg/icons.js
    create mode 100644 resources/lang/ar/preferences.php
    create mode 100644 resources/lang/bg/preferences.php
    create mode 100644 resources/lang/bs/preferences.php
    create mode 100644 resources/lang/ca/preferences.php
    create mode 100644 resources/lang/cs/preferences.php
    create mode 100644 resources/lang/cy/preferences.php
    create mode 100644 resources/lang/da/preferences.php
    create mode 100644 resources/lang/de/preferences.php
    create mode 100644 resources/lang/de_informal/preferences.php
    create mode 100644 resources/lang/el/activities.php
    create mode 100644 resources/lang/el/auth.php
    create mode 100644 resources/lang/el/common.php
    create mode 100644 resources/lang/el/components.php
    create mode 100644 resources/lang/el/editor.php
    create mode 100644 resources/lang/el/entities.php
    create mode 100644 resources/lang/el/errors.php
    create mode 100644 resources/lang/el/pagination.php
    create mode 100644 resources/lang/el/passwords.php
    create mode 100644 resources/lang/el/preferences.php
    create mode 100644 resources/lang/el/settings.php
    create mode 100644 resources/lang/el/validation.php
    create mode 100644 resources/lang/en/preferences.php
    create mode 100644 resources/lang/es/preferences.php
    create mode 100644 resources/lang/es_AR/preferences.php
    create mode 100644 resources/lang/et/preferences.php
    create mode 100644 resources/lang/eu/preferences.php
    create mode 100644 resources/lang/fa/preferences.php
    create mode 100644 resources/lang/fr/preferences.php
    create mode 100644 resources/lang/he/preferences.php
    create mode 100644 resources/lang/hr/preferences.php
    create mode 100644 resources/lang/hu/preferences.php
    create mode 100644 resources/lang/id/preferences.php
    create mode 100644 resources/lang/it/preferences.php
    create mode 100644 resources/lang/ja/preferences.php
    create mode 100644 resources/lang/ka/activities.php
    create mode 100644 resources/lang/ka/auth.php
    create mode 100644 resources/lang/ka/common.php
    create mode 100644 resources/lang/ka/components.php
    create mode 100644 resources/lang/ka/editor.php
    create mode 100644 resources/lang/ka/entities.php
    create mode 100644 resources/lang/ka/errors.php
    create mode 100644 resources/lang/ka/pagination.php
    create mode 100644 resources/lang/ka/passwords.php
    create mode 100644 resources/lang/ka/preferences.php
    create mode 100644 resources/lang/ka/settings.php
    create mode 100644 resources/lang/ka/validation.php
    create mode 100644 resources/lang/ko/preferences.php
    create mode 100644 resources/lang/lt/preferences.php
    create mode 100644 resources/lang/lv/preferences.php
    create mode 100644 resources/lang/nb/preferences.php
    create mode 100644 resources/lang/nl/preferences.php
    create mode 100644 resources/lang/pl/preferences.php
    create mode 100644 resources/lang/pt/preferences.php
    create mode 100644 resources/lang/pt_BR/preferences.php
    create mode 100644 resources/lang/ro/preferences.php
    create mode 100644 resources/lang/ru/preferences.php
    create mode 100644 resources/lang/sk/preferences.php
    create mode 100644 resources/lang/sl/preferences.php
    create mode 100644 resources/lang/sv/preferences.php
    create mode 100644 resources/lang/tr/preferences.php
    create mode 100644 resources/lang/uk/preferences.php
    create mode 100644 resources/lang/uz/preferences.php
    create mode 100644 resources/lang/vi/preferences.php
    create mode 100644 resources/lang/zh_CN/preferences.php
    create mode 100644 resources/lang/zh_TW/preferences.php
    create mode 100644 resources/sass/_opacity.scss
    create mode 100644 resources/views/auth/parts/login-message.blade.php
    create mode 100644 resources/views/auth/parts/register-message.blade.php
    create mode 100644 resources/views/auth/register-confirm-accept.blade.php
    rename resources/views/{entities => common}/sort.blade.php (52%)
    create mode 100644 resources/views/common/status-indicator.blade.php
    create mode 100644 resources/views/form/entity-permissions-row.blade.php
    delete mode 100644 resources/views/form/restriction-checkbox.blade.php
    delete mode 100644 resources/views/pages/parts/revision-table-row.blade.php
    create mode 100644 resources/views/pages/parts/revisions-index-row.blade.php
    rename resources/views/search/parts/{entity-ajax-list.blade.php => entity-selector-list.blade.php} (100%)
    create mode 100644 resources/views/search/parts/entity-suggestion-list.blade.php
    create mode 100644 resources/views/settings/recycle-bin/parts/recycle-bin-list-item.blade.php
    create mode 100644 resources/views/settings/roles/parts/asset-permissions-row.blade.php
    create mode 100644 resources/views/settings/roles/parts/related-asset-permissions-row.blade.php
    create mode 100644 resources/views/settings/roles/parts/roles-list-item.blade.php
    create mode 100644 resources/views/settings/webhooks/parts/webhooks-list-item.blade.php
    delete mode 100644 resources/views/tags/parts/table-row.blade.php
    create mode 100644 resources/views/tags/parts/tags-list-item.blade.php
    create mode 100644 resources/views/users/parts/users-list-item.blade.php
    create mode 100644 resources/views/users/preferences/parts/shortcut-control.blade.php
    create mode 100644 resources/views/users/preferences/shortcuts.blade.php
    create mode 100644 tests/Auth/RegistrationTest.php
    create mode 100644 tests/Auth/ResetPasswordTest.php
    create mode 100644 tests/Helpers/EntityProvider.php
    create mode 100644 tests/Helpers/TestServiceProvider.php
@patsyk1 commented on GitHub (Dec 15, 2022): Hi @ssddanbrown, Sure thing, I had to initially run the below as I was getting "error: Your local changes to the following files would be overwritten by merge:" when completing the initial git. **sudo git stash push --include-untracked sudo git stash drop** Output observed at each stage after is: **sudo git pull origin release** From https://github.com/BookStackApp/BookStack * branch release -> FETCH_HEAD Updating ebd6e4d3..bf6a6af6 Fast-forward .github/translators.txt | 18 + .github/workflows/analyse-php.yml | 4 +- .github/workflows/test-migrations.yml | 6 +- .github/workflows/test-php.yml | 6 +- LICENSE | 3 +- app/Actions/Queries/WebhooksAllPaginatedAndSorted.php | 30 + app/Actions/TagRepo.php | 21 +- app/Api/ApiEntityListFormatter.php | 107 ++++ app/Api/ListingResponseBuilder.php | 23 +- app/Auth/Access/LoginService.php | 2 + app/Auth/Access/Oidc/OidcJwtSigningKey.php | 9 +- app/Auth/Access/Oidc/OidcProviderSettings.php | 42 +- app/Auth/Access/Oidc/OidcService.php | 1 - app/Auth/Access/Saml2Service.php | 19 +- app/Auth/Permissions/EntityPermission.php | 31 +- app/Auth/Permissions/JointPermissionBuilder.php | 53 +- app/Auth/Permissions/PermissionApplicator.php | 48 +- app/Auth/Permissions/PermissionFormData.php | 68 +++ app/Auth/Permissions/PermissionsRepo.php | 1 + app/Auth/Permissions/SimpleEntityData.php | 1 - app/Auth/Queries/RolesAllPaginatedAndSorted.php | 35 ++ .../{AllUsersPaginatedAndSorted.php => UsersAllPaginatedAndSorted.php} | 19 +- app/Auth/Role.php | 28 +- app/Auth/UserRepo.php | 8 +- app/Config/app.php | 21 +- app/Config/setting-defaults.php | 2 + app/Console/Commands/CopyShelfPermissions.php | 17 +- app/Entities/Models/Book.php | 12 +- app/Entities/Models/Bookshelf.php | 11 +- app/Entities/Models/Chapter.php | 11 +- app/Entities/Models/Entity.php | 8 +- app/Entities/Models/Page.php | 13 +- app/Entities/Models/PageRevision.php | 2 +- app/Entities/Repos/BaseRepo.php | 4 +- app/Entities/Repos/BookshelfRepo.php | 25 - app/Entities/Tools/BookContents.php | 15 +- app/Entities/Tools/Cloner.php | 23 +- app/Entities/Tools/HierarchyTransformer.php | 2 +- app/Entities/Tools/PermissionsUpdater.php | 54 +- app/Http/Controllers/Api/BookApiController.php | 20 +- app/Http/Controllers/Api/BookshelfApiController.php | 3 - app/Http/Controllers/Api/SearchApiController.php | 30 +- app/Http/Controllers/AuditLogController.php | 46 +- app/Http/Controllers/Auth/ConfirmEmailController.php | 22 +- app/Http/Controllers/Auth/ForgotPasswordController.php | 23 +- app/Http/Controllers/Auth/LoginController.php | 167 ++---- app/Http/Controllers/Auth/RegisterController.php | 59 +- app/Http/Controllers/Auth/ResetPasswordController.php | 92 +-- app/Http/Controllers/Auth/Saml2Controller.php | 2 +- app/Http/Controllers/Auth/SocialController.php | 8 +- app/Http/Controllers/Auth/ThrottlesLogins.php | 92 +++ app/Http/Controllers/Auth/UserInviteController.php | 7 +- app/Http/Controllers/BookController.php | 46 +- app/Http/Controllers/BookshelfController.php | 74 +-- app/Http/Controllers/ChapterController.php | 33 -- app/Http/Controllers/FavouriteController.php | 2 +- app/Http/Controllers/HomeController.php | 22 +- app/Http/Controllers/PageController.php | 34 -- app/Http/Controllers/PageRevisionController.php | 26 +- app/Http/Controllers/PermissionsController.php | 174 ++++++ app/Http/Controllers/ReferenceController.php | 10 +- app/Http/Controllers/RoleController.php | 31 +- app/Http/Controllers/SearchController.php | 24 +- app/Http/Controllers/TagController.php | 31 +- app/Http/Controllers/UserController.php | 164 +---- app/Http/Controllers/UserPreferencesController.php | 142 +++++ app/Http/Controllers/WebhookController.php | 23 +- app/Providers/AppServiceProvider.php | 55 +- app/Providers/AuthServiceProvider.php | 4 +- app/Providers/BroadcastServiceProvider.php | 25 - app/Providers/CustomFacadeProvider.php | 36 -- app/Providers/EventServiceProvider.php | 2 +- app/Providers/PaginationServiceProvider.php | 35 -- app/Providers/RouteServiceProvider.php | 8 - app/Providers/ThemeServiceProvider.php | 6 +- ...ustomValidationServiceProvider.php => ValidationRuleServiceProvider.php} | 2 +- app/Providers/ViewTweaksServiceProvider.php | 31 + app/Search/SearchRunner.php | 6 +- app/Settings/SettingService.php | 12 + app/Settings/UserShortcutMap.php | 82 +++ app/Uploads/ImageService.php | 9 +- app/Util/LanguageManager.php | 1 + app/Util/SimpleListOptions.php | 104 ++++ composer.json | 4 +- composer.lock | 946 ++++++++++++++++------------- database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php | 105 ++++ database/migrations/2022_10_08_104202_drop_entity_restricted_field.php | 93 +++ dev/api/responses/books-read.json | 42 +- dev/docs/components.md | 99 ---- dev/docs/development.md | 98 +++ dev/docs/javascript-code.md | 156 +++++ dev/docs/release-process.md | 24 + package-lock.json | 1122 +++++++++++++++++++++-------------- package.json | 4 +- public/dist/app.js | 60 +- public/dist/code.js | 42 +- public/dist/export-styles.css | 2 +- public/dist/print-styles.css | 2 +- public/dist/styles.css | 2 +- readme.md | 127 +--- resources/icons/groups.svg | 1 + resources/icons/image.svg | 5 +- resources/icons/role.svg | 4 + resources/icons/shortcuts.svg | 1 + resources/js/app.js | 7 +- resources/js/code.mjs | 9 +- resources/js/components/add-remove-rows.js | 10 +- resources/js/components/ajax-delete-row.js | 11 +- resources/js/components/ajax-form.js | 11 +- resources/js/components/attachments-list.js | 9 +- resources/js/components/attachments.js | 19 +- resources/js/components/auto-submit.js | 11 + resources/js/components/auto-suggest.js | 23 +- resources/js/components/back-to-top.js | 23 +- resources/js/components/book-sort.js | 26 +- resources/js/components/chapter-contents.js | 9 +- resources/js/components/code-editor.js | 25 +- resources/js/components/code-highlighter.js | 16 +- resources/js/components/code-textarea.js | 9 +- resources/js/components/collapsible.js | 28 +- resources/js/components/component.js | 58 ++ resources/js/components/confirm-dialog.js | 10 +- resources/js/components/custom-checkbox.js | 21 +- resources/js/components/details-highlighter.js | 19 +- resources/js/components/dropdown-search.js | 7 +- resources/js/components/dropdown.js | 86 +-- resources/js/components/dropzone.js | 11 +- resources/js/components/editor-toolbox.js | 65 +- resources/js/components/entity-permissions-editor.js | 20 - resources/js/components/entity-permissions.js | 75 +++ resources/js/components/entity-search.js | 11 +- resources/js/components/entity-selector-popup.js | 32 +- resources/js/components/entity-selector.js | 10 +- resources/js/components/event-emit-select.js | 9 +- resources/js/components/expand-toggle.js | 22 +- resources/js/components/global-search.js | 82 +++ resources/js/components/header-mobile-toggle.js | 7 +- resources/js/components/image-manager.js | 29 +- resources/js/components/image-picker.js | 34 +- resources/js/components/index.js | 333 ++--------- resources/js/components/list-sort-control.js | 27 +- resources/js/components/markdown-editor.js | 647 +++----------------- resources/js/components/new-user-password.js | 22 +- resources/js/components/notification.js | 40 +- resources/js/components/optional-input.js | 7 +- resources/js/components/page-comments.js | 19 +- resources/js/components/page-display.js | 144 +---- resources/js/components/page-editor.js | 16 +- resources/js/components/page-picker.js | 31 +- resources/js/components/permissions-table.js | 30 +- resources/js/components/pointer.js | 128 ++++ resources/js/components/popup.js | 8 +- resources/js/components/setting-app-color-picker.js | 26 +- resources/js/components/setting-color-picker.js | 30 +- .../js/components/{homepage-control.js => setting-homepage-control.js} | 17 +- resources/js/components/shelf-sort.js | 10 +- resources/js/components/shortcut-input.js | 54 ++ resources/js/components/shortcuts.js | 162 +++++ resources/js/components/sidebar.js | 16 - resources/js/components/sortable-list.js | 9 +- resources/js/components/submit-on-change.js | 9 +- resources/js/components/tabs.js | 12 +- resources/js/components/tag-manager.js | 15 +- resources/js/components/template-manager.js | 90 ++- resources/js/components/toggle-switch.js | 14 +- resources/js/components/tri-layout.js | 7 +- resources/js/components/user-select.js | 19 +- resources/js/components/webhook-events.js | 10 +- resources/js/components/wysiwyg-editor.js | 7 +- resources/js/markdown/actions.js | 448 ++++++++++++++ resources/js/markdown/codemirror.js | 70 +++ resources/js/markdown/common-events.js | 33 ++ resources/js/markdown/display.js | 109 ++++ resources/js/markdown/editor.js | 54 ++ resources/js/markdown/markdown.js | 30 + resources/js/markdown/settings.js | 62 ++ resources/js/markdown/shortcuts.js | 48 ++ resources/js/services/components.js | 165 ++++++ resources/js/services/dom.js | 13 + resources/js/services/keyboard-navigation.js | 89 +++ resources/js/services/text.js | 19 + resources/js/services/util.js | 6 +- resources/js/wysiwyg/config.js | 12 +- resources/js/wysiwyg/icons.js | 21 + resources/js/wysiwyg/plugin-codeeditor.js | 27 +- resources/js/wysiwyg/plugin-drawio.js | 6 +- resources/js/wysiwyg/plugins-customhr.js | 2 +- resources/js/wysiwyg/plugins-imagemanager.js | 5 +- resources/js/wysiwyg/shortcuts.js | 4 +- resources/js/wysiwyg/toolbars.js | 2 +- resources/lang/ar/auth.php | 2 + resources/lang/ar/common.php | 3 + resources/lang/ar/editor.php | 5 +- resources/lang/ar/entities.php | 14 +- resources/lang/ar/preferences.php | 18 + resources/lang/ar/settings.php | 9 + resources/lang/bg/auth.php | 2 + resources/lang/bg/common.php | 3 + resources/lang/bg/editor.php | 5 +- resources/lang/bg/entities.php | 14 +- resources/lang/bg/preferences.php | 18 + resources/lang/bg/settings.php | 9 + resources/lang/bs/auth.php | 2 + resources/lang/bs/common.php | 3 + resources/lang/bs/editor.php | 5 +- resources/lang/bs/entities.php | 14 +- resources/lang/bs/preferences.php | 18 + resources/lang/bs/settings.php | 9 + resources/lang/ca/auth.php | 2 + resources/lang/ca/common.php | 3 + resources/lang/ca/editor.php | 5 +- resources/lang/ca/entities.php | 14 +- resources/lang/ca/preferences.php | 18 + resources/lang/ca/settings.php | 9 + resources/lang/cs/activities.php | 22 +- resources/lang/cs/auth.php | 18 +- resources/lang/cs/common.php | 9 +- resources/lang/cs/editor.php | 305 +++++----- resources/lang/cs/entities.php | 100 ++-- resources/lang/cs/errors.php | 10 +- resources/lang/cs/passwords.php | 4 +- resources/lang/cs/preferences.php | 18 + resources/lang/cs/settings.php | 51 +- resources/lang/cs/validation.php | 2 +- resources/lang/cy/auth.php | 2 + resources/lang/cy/common.php | 3 + resources/lang/cy/editor.php | 5 +- resources/lang/cy/entities.php | 14 +- resources/lang/cy/preferences.php | 18 + resources/lang/cy/settings.php | 9 + resources/lang/da/auth.php | 2 + resources/lang/da/common.php | 3 + resources/lang/da/editor.php | 5 +- resources/lang/da/entities.php | 14 +- resources/lang/da/preferences.php | 18 + resources/lang/da/settings.php | 9 + resources/lang/de/activities.php | 2 +- resources/lang/de/auth.php | 10 +- resources/lang/de/common.php | 3 + resources/lang/de/components.php | 2 +- resources/lang/de/editor.php | 5 +- resources/lang/de/entities.php | 14 +- resources/lang/de/errors.php | 12 +- resources/lang/de/preferences.php | 18 + resources/lang/de/settings.php | 21 +- resources/lang/de/validation.php | 4 +- resources/lang/de_informal/activities.php | 10 +- resources/lang/de_informal/auth.php | 18 +- resources/lang/de_informal/common.php | 5 +- resources/lang/de_informal/editor.php | 21 +- resources/lang/de_informal/entities.php | 14 +- resources/lang/de_informal/preferences.php | 18 + resources/lang/de_informal/settings.php | 15 +- resources/lang/el/activities.php | 73 +++ resources/lang/el/auth.php | 117 ++++ resources/lang/el/common.php | 107 ++++ resources/lang/el/components.php | 34 ++ resources/lang/el/editor.php | 174 ++++++ resources/lang/el/entities.php | 388 ++++++++++++ resources/lang/el/errors.php | 109 ++++ resources/lang/el/pagination.php | 12 + resources/lang/el/passwords.php | 15 + resources/lang/el/preferences.php | 18 + resources/lang/el/settings.php | 324 ++++++++++ resources/lang/el/validation.php | 117 ++++ resources/lang/en/auth.php | 2 + resources/lang/en/common.php | 3 + resources/lang/en/editor.php | 5 +- resources/lang/en/entities.php | 14 +- resources/lang/en/preferences.php | 18 + resources/lang/en/settings.php | 9 + resources/lang/es/auth.php | 10 +- resources/lang/es/common.php | 3 + resources/lang/es/editor.php | 5 +- resources/lang/es/entities.php | 14 +- resources/lang/es/preferences.php | 18 + resources/lang/es/settings.php | 9 + resources/lang/es_AR/auth.php | 2 + resources/lang/es_AR/common.php | 3 + resources/lang/es_AR/editor.php | 5 +- resources/lang/es_AR/entities.php | 14 +- resources/lang/es_AR/preferences.php | 18 + resources/lang/es_AR/settings.php | 9 + resources/lang/et/auth.php | 2 + resources/lang/et/common.php | 3 + resources/lang/et/editor.php | 5 +- resources/lang/et/entities.php | 14 +- resources/lang/et/preferences.php | 18 + resources/lang/et/settings.php | 9 + resources/lang/eu/auth.php | 2 + resources/lang/eu/common.php | 3 + resources/lang/eu/editor.php | 5 +- resources/lang/eu/entities.php | 20 +- resources/lang/eu/preferences.php | 18 + resources/lang/eu/settings.php | 9 + resources/lang/fa/activities.php | 4 +- resources/lang/fa/auth.php | 2 + resources/lang/fa/common.php | 3 + resources/lang/fa/editor.php | 5 +- resources/lang/fa/entities.php | 16 +- resources/lang/fa/preferences.php | 18 + resources/lang/fa/settings.php | 9 + resources/lang/fr/auth.php | 2 + resources/lang/fr/common.php | 3 + resources/lang/fr/editor.php | 5 +- resources/lang/fr/entities.php | 14 +- resources/lang/fr/preferences.php | 18 + resources/lang/fr/settings.php | 9 + resources/lang/he/auth.php | 2 + resources/lang/he/common.php | 3 + resources/lang/he/editor.php | 5 +- resources/lang/he/entities.php | 14 +- resources/lang/he/preferences.php | 18 + resources/lang/he/settings.php | 9 + resources/lang/hr/auth.php | 2 + resources/lang/hr/common.php | 3 + resources/lang/hr/editor.php | 5 +- resources/lang/hr/entities.php | 14 +- resources/lang/hr/preferences.php | 18 + resources/lang/hr/settings.php | 9 + resources/lang/hu/auth.php | 2 + resources/lang/hu/common.php | 3 + resources/lang/hu/editor.php | 5 +- resources/lang/hu/entities.php | 14 +- resources/lang/hu/preferences.php | 18 + resources/lang/hu/settings.php | 9 + resources/lang/id/auth.php | 2 + resources/lang/id/common.php | 3 + resources/lang/id/editor.php | 17 +- resources/lang/id/entities.php | 14 +- resources/lang/id/preferences.php | 18 + resources/lang/id/settings.php | 9 + resources/lang/it/auth.php | 2 + resources/lang/it/common.php | 3 + resources/lang/it/editor.php | 5 +- resources/lang/it/entities.php | 14 +- resources/lang/it/preferences.php | 18 + resources/lang/it/settings.php | 9 + resources/lang/ja/auth.php | 2 + resources/lang/ja/common.php | 3 + resources/lang/ja/editor.php | 5 +- resources/lang/ja/entities.php | 14 +- resources/lang/ja/preferences.php | 18 + resources/lang/ja/settings.php | 9 + resources/lang/ka/activities.php | 73 +++ resources/lang/ka/auth.php | 117 ++++ resources/lang/ka/common.php | 107 ++++ resources/lang/ka/components.php | 34 ++ resources/lang/ka/editor.php | 174 ++++++ resources/lang/ka/entities.php | 388 ++++++++++++ resources/lang/ka/errors.php | 109 ++++ resources/lang/ka/pagination.php | 12 + resources/lang/ka/passwords.php | 15 + resources/lang/ka/preferences.php | 18 + resources/lang/ka/settings.php | 324 ++++++++++ resources/lang/ka/validation.php | 117 ++++ resources/lang/ko/activities.php | 14 +- resources/lang/ko/auth.php | 2 + resources/lang/ko/common.php | 3 + resources/lang/ko/editor.php | 115 ++-- resources/lang/ko/entities.php | 14 +- resources/lang/ko/preferences.php | 18 + resources/lang/ko/settings.php | 9 + resources/lang/lt/auth.php | 2 + resources/lang/lt/common.php | 3 + resources/lang/lt/editor.php | 5 +- resources/lang/lt/entities.php | 14 +- resources/lang/lt/preferences.php | 18 + resources/lang/lt/settings.php | 9 + resources/lang/lv/auth.php | 2 + resources/lang/lv/common.php | 3 + resources/lang/lv/editor.php | 5 +- resources/lang/lv/entities.php | 14 +- resources/lang/lv/preferences.php | 18 + resources/lang/lv/settings.php | 9 + resources/lang/nb/auth.php | 2 + resources/lang/nb/common.php | 3 + resources/lang/nb/editor.php | 5 +- resources/lang/nb/entities.php | 14 +- resources/lang/nb/preferences.php | 18 + resources/lang/nb/settings.php | 9 + resources/lang/nl/auth.php | 2 + resources/lang/nl/common.php | 3 + resources/lang/nl/editor.php | 5 +- resources/lang/nl/entities.php | 40 +- resources/lang/nl/preferences.php | 18 + resources/lang/nl/settings.php | 11 +- resources/lang/pl/activities.php | 14 +- resources/lang/pl/auth.php | 2 + resources/lang/pl/common.php | 3 + resources/lang/pl/editor.php | 5 +- resources/lang/pl/entities.php | 48 +- resources/lang/pl/errors.php | 2 +- resources/lang/pl/preferences.php | 18 + resources/lang/pl/settings.php | 21 +- resources/lang/pt/auth.php | 2 + resources/lang/pt/common.php | 3 + resources/lang/pt/editor.php | 5 +- resources/lang/pt/entities.php | 14 +- resources/lang/pt/preferences.php | 18 + resources/lang/pt/settings.php | 9 + resources/lang/pt_BR/activities.php | 16 +- resources/lang/pt_BR/auth.php | 8 +- resources/lang/pt_BR/common.php | 3 + resources/lang/pt_BR/editor.php | 7 +- resources/lang/pt_BR/entities.php | 74 ++- resources/lang/pt_BR/errors.php | 2 +- resources/lang/pt_BR/preferences.php | 18 + resources/lang/pt_BR/settings.php | 21 +- resources/lang/ro/auth.php | 2 + resources/lang/ro/common.php | 3 + resources/lang/ro/editor.php | 5 +- resources/lang/ro/entities.php | 14 +- resources/lang/ro/preferences.php | 18 + resources/lang/ro/settings.php | 19 +- resources/lang/ru/auth.php | 2 + resources/lang/ru/common.php | 3 + resources/lang/ru/editor.php | 5 +- resources/lang/ru/entities.php | 14 +- resources/lang/ru/preferences.php | 18 + resources/lang/ru/settings.php | 9 + resources/lang/sk/auth.php | 2 + resources/lang/sk/common.php | 3 + resources/lang/sk/editor.php | 5 +- resources/lang/sk/entities.php | 14 +- resources/lang/sk/preferences.php | 18 + resources/lang/sk/settings.php | 9 + resources/lang/sl/auth.php | 2 + resources/lang/sl/common.php | 3 + resources/lang/sl/editor.php | 5 +- resources/lang/sl/entities.php | 14 +- resources/lang/sl/preferences.php | 18 + resources/lang/sl/settings.php | 9 + resources/lang/sv/activities.php | 62 +- resources/lang/sv/auth.php | 82 +-- resources/lang/sv/common.php | 21 +- resources/lang/sv/editor.php | 295 ++++----- resources/lang/sv/entities.php | 140 +++-- resources/lang/sv/errors.php | 12 +- resources/lang/sv/preferences.php | 18 + resources/lang/sv/settings.php | 133 +++-- resources/lang/sv/validation.php | 6 +- resources/lang/tr/activities.php | 4 +- resources/lang/tr/auth.php | 2 + resources/lang/tr/common.php | 3 + resources/lang/tr/editor.php | 5 +- resources/lang/tr/entities.php | 14 +- resources/lang/tr/preferences.php | 18 + resources/lang/tr/settings.php | 9 + resources/lang/uk/auth.php | 2 + resources/lang/uk/common.php | 3 + resources/lang/uk/editor.php | 5 +- resources/lang/uk/entities.php | 14 +- resources/lang/uk/preferences.php | 18 + resources/lang/uk/settings.php | 9 + resources/lang/uz/auth.php | 2 + resources/lang/uz/common.php | 3 + resources/lang/uz/editor.php | 5 +- resources/lang/uz/entities.php | 14 +- resources/lang/uz/preferences.php | 18 + resources/lang/uz/settings.php | 9 + resources/lang/vi/auth.php | 2 + resources/lang/vi/common.php | 3 + resources/lang/vi/editor.php | 5 +- resources/lang/vi/entities.php | 14 +- resources/lang/vi/preferences.php | 18 + resources/lang/vi/settings.php | 9 + resources/lang/zh_CN/auth.php | 2 + resources/lang/zh_CN/common.php | 3 + resources/lang/zh_CN/editor.php | 5 +- resources/lang/zh_CN/entities.php | 14 +- resources/lang/zh_CN/preferences.php | 18 + resources/lang/zh_CN/settings.php | 9 + resources/lang/zh_TW/activities.php | 20 +- resources/lang/zh_TW/auth.php | 46 +- resources/lang/zh_TW/common.php | 7 +- resources/lang/zh_TW/editor.php | 97 +-- resources/lang/zh_TW/entities.php | 22 +- resources/lang/zh_TW/errors.php | 10 +- resources/lang/zh_TW/preferences.php | 18 + resources/lang/zh_TW/settings.php | 23 +- resources/lang/zh_TW/validation.php | 6 +- resources/sass/_animations.scss | 16 +- resources/sass/_blocks.scss | 41 +- resources/sass/_buttons.scss | 18 +- resources/sass/_components.scss | 132 ++++- resources/sass/_forms.scss | 98 +-- resources/sass/_header.scss | 74 ++- resources/sass/_layout.scss | 58 +- resources/sass/_lists.scss | 3 +- resources/sass/_opacity.scss | 28 + resources/sass/_pages.scss | 15 +- resources/sass/_spacing.scss | 14 +- resources/sass/_tables.scss | 2 +- resources/sass/_text.scss | 2 +- resources/sass/_variables.scss | 4 + resources/sass/styles.scss | 101 ++-- resources/views/api-docs/index.blade.php | 2 +- resources/views/api-docs/parts/endpoint.blade.php | 4 +- resources/views/api-docs/parts/getting-started.blade.php | 13 +- resources/views/attachments/manager.blade.php | 7 +- resources/views/auth/login.blade.php | 2 + resources/views/auth/parts/login-message.blade.php | 2 + resources/views/auth/parts/register-message.blade.php | 2 + resources/views/auth/register-confirm-accept.blade.php | 27 + resources/views/auth/register.blade.php | 2 + resources/views/books/index.blade.php | 4 +- resources/views/books/parts/form.blade.php | 12 +- resources/views/books/parts/list.blade.php | 12 +- resources/views/books/parts/sort-box.blade.php | 10 +- resources/views/books/permissions.blade.php | 5 +- resources/views/books/show.blade.php | 16 +- resources/views/books/sort.blade.php | 6 +- resources/views/chapters/parts/form.blade.php | 6 +- resources/views/chapters/permissions.blade.php | 5 +- resources/views/chapters/show.blade.php | 18 +- resources/views/common/dark-mode-toggle.blade.php | 2 +- resources/views/common/header.blade.php | 44 +- resources/views/common/notifications.blade.php | 26 +- resources/views/{entities => common}/sort.blade.php | 31 +- resources/views/common/status-indicator.blade.php | 3 + resources/views/entities/export-menu.blade.php | 9 +- resources/views/entities/favourite-action.blade.php | 2 +- resources/views/entities/search-form.blade.php | 2 +- resources/views/entities/sibling-navigation.blade.php | 4 +- resources/views/entities/view-toggle.blade.php | 8 +- resources/views/form/custom-checkbox.blade.php | 4 +- resources/views/form/entity-permissions-row.blade.php | 88 +++ resources/views/form/entity-permissions.blade.php | 93 +-- resources/views/form/image-picker.blade.php | 21 +- resources/views/form/restriction-checkbox.blade.php | 13 - resources/views/form/toggle-switch.blade.php | 2 +- resources/views/home/parts/expand-toggle.blade.php | 10 +- resources/views/home/shelves.blade.php | 2 +- resources/views/home/specific-page.blade.php | 4 +- resources/views/layouts/base.blade.php | 9 +- resources/views/pages/parts/code-editor.blade.php | 8 +- resources/views/pages/parts/editor-toolbox.blade.php | 14 +- resources/views/pages/parts/markdown-editor.blade.php | 46 +- resources/views/pages/parts/pointer.blade.php | 5 +- resources/views/pages/parts/revision-table-row.blade.php | 69 --- resources/views/pages/parts/revisions-index-row.blade.php | 80 +++ resources/views/pages/parts/template-manager.blade.php | 16 +- resources/views/pages/permissions.blade.php | 5 +- resources/views/pages/revisions.blade.php | 38 +- resources/views/pages/show.blade.php | 24 +- resources/views/search/all.blade.php | 4 +- .../parts/{entity-ajax-list.blade.php => entity-selector-list.blade.php} | 0 resources/views/search/parts/entity-suggestion-list.blade.php | 21 + resources/views/search/parts/term-list.blade.php | 35 +- resources/views/settings/audit.blade.php | 94 +-- resources/views/settings/customization.blade.php | 21 +- resources/views/settings/parts/page-picker.blade.php | 14 +- resources/views/settings/parts/setting-entity-color-picker.blade.php | 12 +- resources/views/settings/parts/table-user.blade.php | 6 +- resources/views/settings/recycle-bin/index.blade.php | 92 +-- resources/views/settings/recycle-bin/parts/recycle-bin-list-item.blade.php | 48 ++ resources/views/settings/roles/index.blade.php | 43 +- resources/views/settings/roles/parts/asset-permissions-row.blade.php | 32 + resources/views/settings/roles/parts/form.blade.php | 192 +----- .../views/settings/roles/parts/related-asset-permissions-row.blade.php | 26 + resources/views/settings/roles/parts/roles-list-item.blade.php | 14 + resources/views/settings/webhooks/index.blade.php | 52 +- resources/views/settings/webhooks/parts/webhooks-list-item.blade.php | 18 + resources/views/shelves/index.blade.php | 6 +- resources/views/shelves/parts/form.blade.php | 12 +- resources/views/shelves/parts/list.blade.php | 6 +- resources/views/shelves/permissions.blade.php | 15 +- resources/views/shelves/show.blade.php | 19 +- resources/views/tags/index.blade.php | 41 +- resources/views/tags/parts/table-row.blade.php | 37 -- resources/views/tags/parts/tags-list-item.blade.php | 31 + resources/views/users/api-tokens/parts/list.blade.php | 36 +- resources/views/users/index.blade.php | 59 +- resources/views/users/parts/form.blade.php | 5 +- resources/views/users/parts/users-list-item.blade.php | 27 + resources/views/users/preferences/parts/shortcut-control.blade.php | 12 + resources/views/users/preferences/shortcuts.blade.php | 75 +++ routes/web.php | 48 +- tests/Actions/AuditLogTest.php | 33 +- tests/Actions/WebhookCallTest.php | 4 +- tests/Actions/WebhookFormatTesting.php | 12 +- tests/Api/AttachmentsApiTest.php | 50 +- tests/Api/BooksApiTest.php | 49 +- tests/Api/ChaptersApiTest.php | 19 +- tests/Api/PagesApiTest.php | 39 +- tests/Api/RecycleBinApiTest.php | 11 +- tests/Api/SearchApiTest.php | 6 +- tests/Api/UsersApiTest.php | 2 +- tests/Auth/AuthTest.php | 277 +-------- tests/Auth/OidcTest.php | 31 + tests/Auth/RegistrationTest.php | 187 ++++++ tests/Auth/ResetPasswordTest.php | 101 ++++ tests/Auth/Saml2Test.php | 14 + tests/Auth/UserInviteTest.php | 2 +- tests/Commands/ClearActivityCommandTest.php | 4 +- tests/Commands/CopyShelfPermissionsCommandTest.php | 36 +- tests/Commands/RegenerateReferencesCommandTest.php | 4 +- tests/Commands/UpdateUrlCommandTest.php | 3 +- tests/Entity/BookShelfTest.php | 41 +- tests/Entity/BookTest.php | 67 ++- tests/Entity/ChapterTest.php | 22 +- tests/Entity/CommentSettingTest.php | 15 +- tests/Entity/CommentTest.php | 10 +- tests/Entity/ConvertTest.php | 14 +- tests/Entity/EntityAccessTest.php | 9 +- tests/Entity/EntitySearchTest.php | 131 ++-- tests/Entity/ExportTest.php | 61 +- tests/Entity/PageContentTest.php | 75 ++- tests/Entity/PageDraftTest.php | 35 +- tests/Entity/PageEditorTest.php | 27 +- tests/Entity/PageRevisionTest.php | 162 ++--- tests/Entity/PageTemplateTest.php | 6 +- tests/Entity/PageTest.php | 44 +- tests/Entity/SortTest.php | 102 ++-- tests/Entity/TagTest.php | 32 +- tests/ErrorTest.php | 3 +- tests/FavouriteTest.php | 26 +- tests/Helpers/EntityProvider.php | 240 ++++++++ tests/Helpers/TestServiceProvider.php | 26 + tests/HomepageTest.php | 22 +- tests/OpenGraphTest.php | 12 +- tests/Permissions/EntityOwnerChangeTest.php | 12 +- tests/Permissions/EntityPermissionsTest.php | 117 ++-- tests/Permissions/ExportPermissionsTest.php | 10 +- tests/Permissions/RolesTest.php | 89 +-- tests/PublicActionTest.php | 18 +- tests/References/CrossLinkParserTest.php | 7 +- tests/References/ReferencesTest.php | 62 +- tests/Settings/RecycleBinTest.php | 42 +- tests/TestCase.php | 147 ++--- tests/ThemeTest.php | 38 +- tests/Uploads/AttachmentTest.php | 30 +- tests/Uploads/ImageTest.php | 59 +- tests/Uploads/UsesImages.php | 2 +- tests/UrlTest.php | 3 - tests/User/UserManagementTest.php | 20 +- tests/User/UserPreferencesTest.php | 81 ++- tests/User/UserProfileTest.php | 8 +- version | 2 +- 640 files changed, 14779 insertions(+), 7154 deletions(-) create mode 100644 app/Actions/Queries/WebhooksAllPaginatedAndSorted.php create mode 100644 app/Api/ApiEntityListFormatter.php create mode 100644 app/Auth/Permissions/PermissionFormData.php create mode 100644 app/Auth/Queries/RolesAllPaginatedAndSorted.php rename app/Auth/Queries/{AllUsersPaginatedAndSorted.php => UsersAllPaginatedAndSorted.php} (63%) create mode 100644 app/Http/Controllers/Auth/ThrottlesLogins.php create mode 100644 app/Http/Controllers/PermissionsController.php create mode 100644 app/Http/Controllers/UserPreferencesController.php delete mode 100644 app/Providers/BroadcastServiceProvider.php delete mode 100644 app/Providers/CustomFacadeProvider.php delete mode 100644 app/Providers/PaginationServiceProvider.php rename app/Providers/{CustomValidationServiceProvider.php => ValidationRuleServiceProvider.php} (93%) create mode 100644 app/Providers/ViewTweaksServiceProvider.php create mode 100644 app/Settings/UserShortcutMap.php create mode 100644 app/Util/SimpleListOptions.php create mode 100644 database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php create mode 100644 database/migrations/2022_10_08_104202_drop_entity_restricted_field.php delete mode 100644 dev/docs/components.md create mode 100644 dev/docs/development.md create mode 100644 dev/docs/javascript-code.md create mode 100644 dev/docs/release-process.md create mode 100644 resources/icons/groups.svg create mode 100644 resources/icons/role.svg create mode 100644 resources/icons/shortcuts.svg create mode 100644 resources/js/components/auto-submit.js create mode 100644 resources/js/components/component.js delete mode 100644 resources/js/components/entity-permissions-editor.js create mode 100644 resources/js/components/entity-permissions.js create mode 100644 resources/js/components/global-search.js create mode 100644 resources/js/components/pointer.js rename resources/js/components/{homepage-control.js => setting-homepage-control.js} (55%) create mode 100644 resources/js/components/shortcut-input.js create mode 100644 resources/js/components/shortcuts.js delete mode 100644 resources/js/components/sidebar.js create mode 100644 resources/js/markdown/actions.js create mode 100644 resources/js/markdown/codemirror.js create mode 100644 resources/js/markdown/common-events.js create mode 100644 resources/js/markdown/display.js create mode 100644 resources/js/markdown/editor.js create mode 100644 resources/js/markdown/markdown.js create mode 100644 resources/js/markdown/settings.js create mode 100644 resources/js/markdown/shortcuts.js create mode 100644 resources/js/services/components.js create mode 100644 resources/js/services/keyboard-navigation.js create mode 100644 resources/js/services/text.js create mode 100644 resources/js/wysiwyg/icons.js create mode 100644 resources/lang/ar/preferences.php create mode 100644 resources/lang/bg/preferences.php create mode 100644 resources/lang/bs/preferences.php create mode 100644 resources/lang/ca/preferences.php create mode 100644 resources/lang/cs/preferences.php create mode 100644 resources/lang/cy/preferences.php create mode 100644 resources/lang/da/preferences.php create mode 100644 resources/lang/de/preferences.php create mode 100644 resources/lang/de_informal/preferences.php create mode 100644 resources/lang/el/activities.php create mode 100644 resources/lang/el/auth.php create mode 100644 resources/lang/el/common.php create mode 100644 resources/lang/el/components.php create mode 100644 resources/lang/el/editor.php create mode 100644 resources/lang/el/entities.php create mode 100644 resources/lang/el/errors.php create mode 100644 resources/lang/el/pagination.php create mode 100644 resources/lang/el/passwords.php create mode 100644 resources/lang/el/preferences.php create mode 100644 resources/lang/el/settings.php create mode 100644 resources/lang/el/validation.php create mode 100644 resources/lang/en/preferences.php create mode 100644 resources/lang/es/preferences.php create mode 100644 resources/lang/es_AR/preferences.php create mode 100644 resources/lang/et/preferences.php create mode 100644 resources/lang/eu/preferences.php create mode 100644 resources/lang/fa/preferences.php create mode 100644 resources/lang/fr/preferences.php create mode 100644 resources/lang/he/preferences.php create mode 100644 resources/lang/hr/preferences.php create mode 100644 resources/lang/hu/preferences.php create mode 100644 resources/lang/id/preferences.php create mode 100644 resources/lang/it/preferences.php create mode 100644 resources/lang/ja/preferences.php create mode 100644 resources/lang/ka/activities.php create mode 100644 resources/lang/ka/auth.php create mode 100644 resources/lang/ka/common.php create mode 100644 resources/lang/ka/components.php create mode 100644 resources/lang/ka/editor.php create mode 100644 resources/lang/ka/entities.php create mode 100644 resources/lang/ka/errors.php create mode 100644 resources/lang/ka/pagination.php create mode 100644 resources/lang/ka/passwords.php create mode 100644 resources/lang/ka/preferences.php create mode 100644 resources/lang/ka/settings.php create mode 100644 resources/lang/ka/validation.php create mode 100644 resources/lang/ko/preferences.php create mode 100644 resources/lang/lt/preferences.php create mode 100644 resources/lang/lv/preferences.php create mode 100644 resources/lang/nb/preferences.php create mode 100644 resources/lang/nl/preferences.php create mode 100644 resources/lang/pl/preferences.php create mode 100644 resources/lang/pt/preferences.php create mode 100644 resources/lang/pt_BR/preferences.php create mode 100644 resources/lang/ro/preferences.php create mode 100644 resources/lang/ru/preferences.php create mode 100644 resources/lang/sk/preferences.php create mode 100644 resources/lang/sl/preferences.php create mode 100644 resources/lang/sv/preferences.php create mode 100644 resources/lang/tr/preferences.php create mode 100644 resources/lang/uk/preferences.php create mode 100644 resources/lang/uz/preferences.php create mode 100644 resources/lang/vi/preferences.php create mode 100644 resources/lang/zh_CN/preferences.php create mode 100644 resources/lang/zh_TW/preferences.php create mode 100644 resources/sass/_opacity.scss create mode 100644 resources/views/auth/parts/login-message.blade.php create mode 100644 resources/views/auth/parts/register-message.blade.php create mode 100644 resources/views/auth/register-confirm-accept.blade.php rename resources/views/{entities => common}/sort.blade.php (52%) create mode 100644 resources/views/common/status-indicator.blade.php create mode 100644 resources/views/form/entity-permissions-row.blade.php delete mode 100644 resources/views/form/restriction-checkbox.blade.php delete mode 100644 resources/views/pages/parts/revision-table-row.blade.php create mode 100644 resources/views/pages/parts/revisions-index-row.blade.php rename resources/views/search/parts/{entity-ajax-list.blade.php => entity-selector-list.blade.php} (100%) create mode 100644 resources/views/search/parts/entity-suggestion-list.blade.php create mode 100644 resources/views/settings/recycle-bin/parts/recycle-bin-list-item.blade.php create mode 100644 resources/views/settings/roles/parts/asset-permissions-row.blade.php create mode 100644 resources/views/settings/roles/parts/related-asset-permissions-row.blade.php create mode 100644 resources/views/settings/roles/parts/roles-list-item.blade.php create mode 100644 resources/views/settings/webhooks/parts/webhooks-list-item.blade.php delete mode 100644 resources/views/tags/parts/table-row.blade.php create mode 100644 resources/views/tags/parts/tags-list-item.blade.php create mode 100644 resources/views/users/parts/users-list-item.blade.php create mode 100644 resources/views/users/preferences/parts/shortcut-control.blade.php create mode 100644 resources/views/users/preferences/shortcuts.blade.php create mode 100644 tests/Auth/RegistrationTest.php create mode 100644 tests/Auth/ResetPasswordTest.php create mode 100644 tests/Helpers/EntityProvider.php create mode 100644 tests/Helpers/TestServiceProvider.php
Author
Owner

@patsyk1 commented on GitHub (Dec 15, 2022):

@ssddanbrown
composer install --no-dev

@php -r "!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');"
Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Package operations: 0 installs, 39 updates, 1 removal

  • Downloading symfony/polyfill-iconv (v1.27.0)
  • Downloading symfony/polyfill-iconv (v1.27.0)
  • Downloading symfony/polyfill-iconv (v1.27.0)
  • Downloading symfony/polyfill-iconv (v1.27.0)
    Failed to download symfony/polyfill-iconv from dist: The "927013f3aa" file could not be written to /var/www/bookstack/vendor/composer/tmp-b79732bd58347c2b5a38f88c7406d586: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-iconv (v1.27.0) into cache
  • Downloading symfony/polyfill-php80 (v1.27.0)
  • Downloading symfony/polyfill-php80 (v1.27.0)
  • Downloading symfony/polyfill-php80 (v1.27.0)
  • Downloading symfony/polyfill-php80 (v1.27.0)
    Failed to download symfony/polyfill-php80 from dist: The "7a6ff3f195" file could not be written to /var/www/bookstack/vendor/composer/tmp-297c8a4ca7e1999d2cc5e65a97990260: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-php80 (v1.27.0) into cache
  • Downloading symfony/polyfill-mbstring (v1.27.0)
  • Downloading symfony/polyfill-mbstring (v1.27.0)
  • Downloading symfony/polyfill-mbstring (v1.27.0)
  • Downloading symfony/polyfill-mbstring (v1.27.0)
    Failed to download symfony/polyfill-mbstring from dist: The "8ad114f6b3" file could not be written to /var/www/bookstack/vendor/composer/tmp-9307a74084204f6e44d970bab99a61bd: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-mbstring (v1.27.0) into cache
  • Downloading symfony/polyfill-ctype (v1.27.0)
  • Downloading symfony/polyfill-ctype (v1.27.0)
  • Downloading symfony/polyfill-ctype (v1.27.0)
  • Downloading symfony/polyfill-ctype (v1.27.0)
    Failed to download symfony/polyfill-ctype from dist: The "5bbc823ade" file could not be written to /var/www/bookstack/vendor/composer/tmp-19fb76dce87e0c018a009ca2e50b8536: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-ctype (v1.27.0) into cache
  • Downloading vlucas/phpdotenv (v5.5.0)
  • Downloading vlucas/phpdotenv (v5.5.0)
  • Downloading vlucas/phpdotenv (v5.5.0)
  • Downloading vlucas/phpdotenv (v5.5.0)
    Failed to download vlucas/phpdotenv from dist: The "1a7ea2afc4" file could not be written to /var/www/bookstack/vendor/composer/tmp-01a3a92add3cfa7b29e67b3bab8ed1d9: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing vlucas/phpdotenv (v5.5.0) into cache
  • Downloading tijsverkoyen/css-to-inline-styles (2.2.5)
  • Downloading tijsverkoyen/css-to-inline-styles (2.2.5)
  • Downloading tijsverkoyen/css-to-inline-styles (2.2.5)
  • Downloading tijsverkoyen/css-to-inline-styles (2.2.5)
    Failed to download tijsverkoyen/css-to-inline-styles from dist: The "4348a3a066" file could not be written to /var/www/bookstack/vendor/composer/tmp-94526baf440403a809b4b48d4ecce599: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing tijsverkoyen/css-to-inline-styles (2.2.5) into cache
  • Downloading symfony/var-dumper (v5.4.14)
  • Downloading symfony/var-dumper (v5.4.14)
  • Downloading symfony/var-dumper (v5.4.14)
  • Downloading symfony/var-dumper (v5.4.14)
    Failed to download symfony/var-dumper from dist: The "6894d06145" file could not be written to /var/www/bookstack/vendor/composer/tmp-242165efbd40e7ce5ca062ba74909d8f: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/var-dumper (v5.4.14) into cache
  • Downloading symfony/routing (v5.4.15)
  • Downloading symfony/routing (v5.4.15)
  • Downloading symfony/routing (v5.4.15)
  • Downloading symfony/routing (v5.4.15)
    Failed to download symfony/routing from dist: The "5c9b129efe" file could not be written to /var/www/bookstack/vendor/composer/tmp-89ee8fba03a103ddf84e44ec395b00ed: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/routing (v5.4.15) into cache
  • Downloading symfony/polyfill-php72 (v1.27.0)
  • Downloading symfony/polyfill-php72 (v1.27.0)
  • Downloading symfony/polyfill-php72 (v1.27.0)
  • Downloading symfony/polyfill-php72 (v1.27.0)
    Failed to download symfony/polyfill-php72 from dist: The "869329b1e9" file could not be written to /var/www/bookstack/vendor/composer/tmp-496cdc5798585e02c4a114254d7a8e03: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-php72 (v1.27.0) into cache
  • Downloading symfony/polyfill-intl-normalizer (v1.27.0)
  • Downloading symfony/polyfill-intl-normalizer (v1.27.0)
  • Downloading symfony/polyfill-intl-normalizer (v1.27.0)
  • Downloading symfony/polyfill-intl-normalizer (v1.27.0)
    Failed to download symfony/polyfill-intl-normalizer from dist: The "19bd1e4fcd" file could not be written to /var/www/bookstack/vendor/composer/tmp-8c59bcd8349c209c4a3b50b915e9c390: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-intl-normalizer (v1.27.0) into cache
  • Downloading symfony/polyfill-intl-idn (v1.27.0)
  • Downloading symfony/polyfill-intl-idn (v1.27.0)
  • Downloading symfony/polyfill-intl-idn (v1.27.0)
  • Downloading symfony/polyfill-intl-idn (v1.27.0)
    Failed to download symfony/polyfill-intl-idn from dist: The "639084e360" file could not be written to /var/www/bookstack/vendor/composer/tmp-6d5164af7a6d2c4f5e1d9b740dd55296: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-intl-idn (v1.27.0) into cache
  • Downloading symfony/mime (v5.4.14)
  • Downloading symfony/mime (v5.4.14)
  • Downloading symfony/mime (v5.4.14)
  • Downloading symfony/mime (v5.4.14)
    Failed to download symfony/mime from dist: The "1c118b253b" file could not be written to /var/www/bookstack/vendor/composer/tmp-8dfa4fcea505f63dd32265756aa80ff4: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/mime (v5.4.14) into cache
  • Downloading symfony/polyfill-php73 (v1.27.0)
  • Downloading symfony/polyfill-php73 (v1.27.0)
  • Downloading symfony/polyfill-php73 (v1.27.0)
  • Downloading symfony/polyfill-php73 (v1.27.0)
    Failed to download symfony/polyfill-php73 from dist: The "9e8ecb5f92" file could not be written to /var/www/bookstack/vendor/composer/tmp-43446fd5bb5312630cecdf63bfc6f6f5: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-php73 (v1.27.0) into cache
  • Downloading symfony/http-foundation (v5.4.15)
  • Downloading symfony/http-foundation (v5.4.15)
  • Downloading symfony/http-foundation (v5.4.15)
  • Downloading symfony/http-foundation (v5.4.15)
    Failed to download symfony/http-foundation from dist: The "75bd663ff2" file could not be written to /var/www/bookstack/vendor/composer/tmp-d386ba14224ce57839097668f2157c2c: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/http-foundation (v5.4.15) into cache
  • Downloading symfony/error-handler (v5.4.15)
  • Downloading symfony/error-handler (v5.4.15)
  • Downloading symfony/error-handler (v5.4.15)
  • Downloading symfony/error-handler (v5.4.15)
    Failed to download symfony/error-handler from dist: The "539cf1428b" file could not be written to /var/www/bookstack/vendor/composer/tmp-f087dbfbc0aaaa9cfef459a5335f432a: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/error-handler (v5.4.15) into cache
  • Downloading symfony/http-kernel (v5.4.15)
  • Downloading symfony/http-kernel (v5.4.15)
  • Downloading symfony/http-kernel (v5.4.15)
  • Downloading symfony/http-kernel (v5.4.15)
    Failed to download symfony/http-kernel from dist: The "fc63c8c3e1" file could not be written to /var/www/bookstack/vendor/composer/tmp-985e3af0a1db05264f356779dc8f9696: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/http-kernel (v5.4.15) into cache
  • Downloading symfony/polyfill-intl-grapheme (v1.27.0)
  • Downloading symfony/polyfill-intl-grapheme (v1.27.0)
  • Downloading symfony/polyfill-intl-grapheme (v1.27.0)
  • Downloading symfony/polyfill-intl-grapheme (v1.27.0)
    Failed to download symfony/polyfill-intl-grapheme from dist: The "511a08c03c" file could not be written to /var/www/bookstack/vendor/composer/tmp-ad048d17899231fb52691e0726c1dda7: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-intl-grapheme (v1.27.0) into cache
  • Downloading symfony/string (v5.4.15)
  • Downloading symfony/string (v5.4.15)
  • Downloading symfony/string (v5.4.15)
  • Downloading symfony/string (v5.4.15)
    Failed to download symfony/string from dist: The "571334ce9f" file could not be written to /var/www/bookstack/vendor/composer/tmp-498534722e2e6cd7fa9acf6dddb00a4d: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/string (v5.4.15) into cache
  • Downloading symfony/console (v5.4.15)
  • Downloading symfony/console (v5.4.15)
  • Downloading symfony/console (v5.4.15)
  • Downloading symfony/console (v5.4.15)
    Failed to download symfony/console from dist: The "ea59bb0edf" file could not be written to /var/www/bookstack/vendor/composer/tmp-b4aade45c7e21f60877f818f075c74d4: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/console (v5.4.15) into cache
  • Downloading symfony/polyfill-php81 (v1.27.0)
  • Downloading symfony/polyfill-php81 (v1.27.0)
  • Downloading symfony/polyfill-php81 (v1.27.0)
  • Downloading symfony/polyfill-php81 (v1.27.0)
    Failed to download symfony/polyfill-php81 from dist: The "707403074c" file could not be written to /var/www/bookstack/vendor/composer/tmp-48927e38881f42c0feab17af6efd7b3f: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/polyfill-php81 (v1.27.0) into cache
  • Downloading symfony/translation (v5.4.14)
  • Downloading symfony/translation (v5.4.14)
  • Downloading symfony/translation (v5.4.14)
  • Downloading symfony/translation (v5.4.14)
    Failed to download symfony/translation from dist: The "f0ed076758" file could not be written to /var/www/bookstack/vendor/composer/tmp-bdb4df825f646598f83b78c02846c7e7: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing symfony/translation (v5.4.14) into cache
  • Downloading nesbot/carbon (2.63.0)
  • Downloading nesbot/carbon (2.63.0)
  • Downloading nesbot/carbon (2.63.0)
  • Downloading nesbot/carbon (2.63.0)
    Failed to download nesbot/carbon from dist: The "ad35dd71a6" file could not be written to /var/www/bookstack/vendor/composer/tmp-05011d4ccc83b63a96a9e476497fee7e: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing nesbot/carbon (2.63.0) into cache
  • Downloading league/flysystem (1.1.10)
  • Downloading league/flysystem (1.1.10)
  • Downloading league/flysystem (1.1.10)
  • Downloading league/flysystem (1.1.10)
    Failed to download league/flysystem from dist: The "3239285c82" file could not be written to /var/www/bookstack/vendor/composer/tmp-75deb14da04e6bb8dbb17ce54a258011: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing league/flysystem (1.1.10) into cache
  • Downloading laravel/serializable-closure (v1.2.2)
  • Downloading laravel/serializable-closure (v1.2.2)
  • Downloading laravel/serializable-closure (v1.2.2)
  • Downloading laravel/serializable-closure (v1.2.2)
    Failed to download laravel/serializable-closure from dist: The "47afb7fae2" file could not be written to /var/www/bookstack/vendor/composer/tmp-e65a6578eadfa4b7efac9da6ef1849f7: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing laravel/serializable-closure (v1.2.2) into cache
  • Downloading dragonmantank/cron-expression (v3.3.2)
  • Downloading dragonmantank/cron-expression (v3.3.2)
  • Downloading dragonmantank/cron-expression (v3.3.2)
  • Downloading dragonmantank/cron-expression (v3.3.2)
    Failed to download dragonmantank/cron-expression from dist: The "782ca5968a" file could not be written to /var/www/bookstack/vendor/composer/tmp-af2124337daa475347d08adc0aba2ac1: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing dragonmantank/cron-expression (v3.3.2) into cache
  • Downloading doctrine/inflector (2.0.6)
  • Downloading doctrine/inflector (2.0.6)
  • Downloading doctrine/inflector (2.0.6)
  • Downloading doctrine/inflector (2.0.6)
    Failed to download doctrine/inflector from dist: The "d9d313a36c" file could not be written to /var/www/bookstack/vendor/composer/tmp-510b191f1b7d0106a2bed80438d64483: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing doctrine/inflector (2.0.6) into cache
  • Downloading laravel/framework (v8.83.26)
  • Downloading laravel/framework (v8.83.26)
  • Downloading laravel/framework (v8.83.26)
  • Downloading laravel/framework (v8.83.26)
    Failed to download laravel/framework from dist: The "7411d9fa71" file could not be written to /var/www/bookstack/vendor/composer/tmp-6aeb1cddb27009bb13dbc438494fb319: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing laravel/framework (v8.83.26) into cache
  • Downloading phenx/php-svg-lib (0.5.0)
  • Downloading phenx/php-svg-lib (0.5.0)
  • Downloading phenx/php-svg-lib (0.5.0)
  • Downloading phenx/php-svg-lib (0.5.0)
    Failed to download phenx/php-svg-lib from dist: The "76876c6cf3" file could not be written to /var/www/bookstack/vendor/composer/tmp-e4327d5d829c255526e922527acd24ef: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing phenx/php-svg-lib (0.5.0) into cache
  • Downloading dompdf/dompdf (v2.0.1)
  • Downloading dompdf/dompdf (v2.0.1)
  • Downloading dompdf/dompdf (v2.0.1)
  • Downloading dompdf/dompdf (v2.0.1)
    Failed to download dompdf/dompdf from dist: The "c5310df0e2" file could not be written to /var/www/bookstack/vendor/composer/tmp-a56a3567a92715add5e794d6a36eb49e: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing dompdf/dompdf (v2.0.1) into cache
  • Downloading doctrine/event-manager (1.2.0)
  • Downloading doctrine/event-manager (1.2.0)
  • Downloading doctrine/event-manager (1.2.0)
  • Downloading doctrine/event-manager (1.2.0)
    Failed to download doctrine/event-manager from dist: The "95aa4cb529" file could not be written to /var/www/bookstack/vendor/composer/tmp-a3bcc5d9dc83b6e7214d309c12fbd862: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing doctrine/event-manager (1.2.0) into cache
  • Downloading doctrine/dbal (3.5.1)
  • Downloading doctrine/dbal (3.5.1)
  • Downloading doctrine/dbal (3.5.1)
  • Downloading doctrine/dbal (3.5.1)
    Failed to download doctrine/dbal from dist: The "f38ee8aaca" file could not be written to /var/www/bookstack/vendor/composer/tmp-9421ecf102f82270f5fec56f23b4583b: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing doctrine/dbal (3.5.1) into cache
  • Downloading filp/whoops (2.14.6)
  • Downloading filp/whoops (2.14.6)
  • Downloading filp/whoops (2.14.6)
  • Downloading filp/whoops (2.14.6)
    Failed to download filp/whoops from dist: The "f7948baaa0" file could not be written to /var/www/bookstack/vendor/composer/tmp-a607800631d892639449c21d410ee4ba: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing filp/whoops (2.14.6) into cache
  • Downloading guzzlehttp/psr7 (2.4.3)
  • Downloading guzzlehttp/psr7 (2.4.3)
  • Downloading guzzlehttp/psr7 (2.4.3)
  • Downloading guzzlehttp/psr7 (2.4.3)
    Failed to download guzzlehttp/psr7 from dist: The "67c26b443f" file could not be written to /var/www/bookstack/vendor/composer/tmp-525537f47217fabcadddd1ab5144cdf0: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing guzzlehttp/psr7 (2.4.3) into cache
  • Downloading laravel/socialite (v5.5.6)
  • Downloading laravel/socialite (v5.5.6)
  • Downloading laravel/socialite (v5.5.6)
  • Downloading laravel/socialite (v5.5.6)
    Failed to download laravel/socialite from dist: The "1cd1682b70" file could not be written to /var/www/bookstack/vendor/composer/tmp-1a1920ccabce1dc6a181166495f01cb0: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing laravel/socialite (v5.5.6) into cache
  • Downloading nikic/php-parser (v4.15.2)
  • Downloading nikic/php-parser (v4.15.2)
  • Downloading nikic/php-parser (v4.15.2)
  • Downloading nikic/php-parser (v4.15.2)
    Failed to download nikic/php-parser from dist: The "f59bbe44bf" file could not be written to /var/www/bookstack/vendor/composer/tmp-12e985414108bb70b728e57d401ba99e: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing nikic/php-parser (v4.15.2) into cache
  • Downloading psy/psysh (v0.11.9)
  • Downloading psy/psysh (v0.11.9)
  • Downloading psy/psysh (v0.11.9)
  • Downloading psy/psysh (v0.11.9)
    Failed to download psy/psysh from dist: The "1acec99d66" file could not be written to /var/www/bookstack/vendor/composer/tmp-f7be6f87b6a0597f7db3f1f92be4b237: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing psy/psysh (v0.11.9) into cache
  • Downloading laravel/tinker (v2.7.3)
  • Downloading laravel/tinker (v2.7.3)
  • Downloading laravel/tinker (v2.7.3)
  • Downloading laravel/tinker (v2.7.3)
    Failed to download laravel/tinker from dist: The "5062061b49" file could not be written to /var/www/bookstack/vendor/composer/tmp-ef7d025809c212d532c894adea2d954f: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing laravel/tinker (v2.7.3) into cache
  • Downloading aws/aws-sdk-php (3.247.1)
  • Downloading aws/aws-sdk-php (3.247.1)
  • Downloading aws/aws-sdk-php (3.247.1)
  • Downloading aws/aws-sdk-php (3.247.1)
    Failed to download aws/aws-sdk-php from dist: The "337e447997" file could not be written to /var/www/bookstack/vendor/composer/tmp-d0cbacc884eed31b734928ae3f5e2128: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing aws/aws-sdk-php (3.247.1) into cache
  • Downloading phpseclib/phpseclib (3.0.17)
  • Downloading phpseclib/phpseclib (3.0.17)
  • Downloading phpseclib/phpseclib (3.0.17)
  • Downloading phpseclib/phpseclib (3.0.17)
    Failed to download phpseclib/phpseclib from dist: The "dbc2307d5c" file could not be written to /var/www/bookstack/vendor/composer/tmp-31c01ceb0d65fb9f8f31cd6ab01d4ab2: failed to open stream: Permission denied
    Now trying to download from source
  • Syncing phpseclib/phpseclib (3.0.17) into cache
  • Removing laravel/ui (v3.4.6)
  • Removing symfony/polyfill-iconv (v1.26.0)
  • Removing symfony/polyfill-php80 (v1.26.0)
  • Removing symfony/polyfill-mbstring (v1.26.0)
  • Removing symfony/polyfill-ctype (v1.26.0)
  • Removing vlucas/phpdotenv (v5.4.1)
  • Removing tijsverkoyen/css-to-inline-styles (2.2.4)
    Update of symfony/var-dumper failed
  • Removing symfony/routing (v5.4.11)
  • Removing symfony/polyfill-php72 (v1.26.0)
  • Removing symfony/polyfill-intl-normalizer (v1.26.0)
  • Removing symfony/polyfill-intl-idn (v1.26.0)
  • Removing symfony/mime (v5.4.12)
  • Removing symfony/polyfill-php73 (v1.26.0)
  • Removing symfony/http-foundation (v5.4.12)
    Update of symfony/error-handler failed
  • Removing symfony/http-kernel (v5.4.12)
  • Removing symfony/polyfill-intl-grapheme (v1.26.0)
  • Removing symfony/string (v5.4.12)
  • Removing symfony/console (v5.4.12)
  • Removing symfony/polyfill-php81 (v1.26.0)
  • Removing symfony/translation (v5.4.12)
    Update of nesbot/carbon failed
  • Removing league/flysystem (1.1.9)
  • Removing laravel/serializable-closure (v1.2.1)
  • Removing dragonmantank/cron-expression (v3.3.1)
  • Removing doctrine/inflector (2.0.4)
  • Removing laravel/framework (v8.83.23)
  • Removing phenx/php-svg-lib (0.4.1)
  • Removing dompdf/dompdf (v2.0.0)
  • Removing doctrine/event-manager (1.1.2)
    Update of doctrine/dbal failed
  • Removing filp/whoops (2.14.5)
  • Removing guzzlehttp/psr7 (2.4.1)
  • Removing laravel/socialite (v5.5.5)
    Update of nikic/php-parser failed
    Update of psy/psysh failed
  • Removing laravel/tinker (v2.7.2)
  • Removing aws/aws-sdk-php (3.235.1)
  • Removing phpseclib/phpseclib (3.0.15)
    Uninstall of laravel/ui failed
    Update of symfony/polyfill-iconv failed
    Update of symfony/polyfill-php80 failed
    Update of symfony/polyfill-mbstring failed
    Update of symfony/polyfill-ctype failed
    Update of vlucas/phpdotenv failed
    Update of tijsverkoyen/css-to-inline-styles failed
    Update of symfony/routing failed
    Update of symfony/polyfill-php72 failed
    Update of symfony/polyfill-intl-normalizer failed
    0/24 [>---------------------------] 0% Update of symfony/polyfill-intl-idn failed
    Update of symfony/polyfill-php73 failed
    Update of symfony/polyfill-intl-grapheme failed
    3/24 [===>------------------------] 12% Update of symfony/mime failed
    Update of symfony/http-foundation failed
    Update of symfony/string failed
    Update of symfony/console failed
    Update of symfony/polyfill-php81 failed
    Update of symfony/translation failed
    Update of symfony/http-kernel failed
    Update of league/flysystem failed
    Update of laravel/serializable-closure failed
    Update of dragonmantank/cron-expression failed
    Update of phenx/php-svg-lib failed
    Update of doctrine/inflector failed
    Update of dompdf/dompdf failed
    Update of doctrine/event-manager failed
    Update of guzzlehttp/psr7 failed
    Update of laravel/socialite failed
    Update of laravel/tinker failed
    Update of filp/whoops failed
    21/24 [========================>---] 87% Update of phpseclib/phpseclib failed
    Update of laravel/framework failed
    23/24 [==========================>-] 95% Update of aws/aws-sdk-php failed
    24/24 [============================] 100%

[RuntimeException]
Could not delete /var/www/bookstack/vendor/bin/var-dump-server:

install [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--dev] [--no-suggest] [--no-dev] [--no-autoloader] [--no-scripts] [--no-progress] [--no-install] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--] []...

@patsyk1 commented on GitHub (Dec 15, 2022): @ssddanbrown **composer install --no-dev** > @php -r "!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');" Installing dependencies from lock file Verifying lock file contents can be installed on current platform. Package operations: 0 installs, 39 updates, 1 removal - Downloading symfony/polyfill-iconv (v1.27.0) - Downloading symfony/polyfill-iconv (v1.27.0) - Downloading symfony/polyfill-iconv (v1.27.0) - Downloading symfony/polyfill-iconv (v1.27.0) Failed to download symfony/polyfill-iconv from dist: The "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695" file could not be written to /var/www/bookstack/vendor/composer/tmp-b79732bd58347c2b5a38f88c7406d586: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-iconv (v1.27.0) into cache - Downloading symfony/polyfill-php80 (v1.27.0) - Downloading symfony/polyfill-php80 (v1.27.0) - Downloading symfony/polyfill-php80 (v1.27.0) - Downloading symfony/polyfill-php80 (v1.27.0) Failed to download symfony/polyfill-php80 from dist: The "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" file could not be written to /var/www/bookstack/vendor/composer/tmp-297c8a4ca7e1999d2cc5e65a97990260: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-php80 (v1.27.0) into cache - Downloading symfony/polyfill-mbstring (v1.27.0) - Downloading symfony/polyfill-mbstring (v1.27.0) - Downloading symfony/polyfill-mbstring (v1.27.0) - Downloading symfony/polyfill-mbstring (v1.27.0) Failed to download symfony/polyfill-mbstring from dist: The "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534" file could not be written to /var/www/bookstack/vendor/composer/tmp-9307a74084204f6e44d970bab99a61bd: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-mbstring (v1.27.0) into cache - Downloading symfony/polyfill-ctype (v1.27.0) - Downloading symfony/polyfill-ctype (v1.27.0) - Downloading symfony/polyfill-ctype (v1.27.0) - Downloading symfony/polyfill-ctype (v1.27.0) Failed to download symfony/polyfill-ctype from dist: The "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a" file could not be written to /var/www/bookstack/vendor/composer/tmp-19fb76dce87e0c018a009ca2e50b8536: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-ctype (v1.27.0) into cache - Downloading vlucas/phpdotenv (v5.5.0) - Downloading vlucas/phpdotenv (v5.5.0) - Downloading vlucas/phpdotenv (v5.5.0) - Downloading vlucas/phpdotenv (v5.5.0) Failed to download vlucas/phpdotenv from dist: The "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" file could not be written to /var/www/bookstack/vendor/composer/tmp-01a3a92add3cfa7b29e67b3bab8ed1d9: failed to open stream: Permission denied Now trying to download from source - Syncing vlucas/phpdotenv (v5.5.0) into cache - Downloading tijsverkoyen/css-to-inline-styles (2.2.5) - Downloading tijsverkoyen/css-to-inline-styles (2.2.5) - Downloading tijsverkoyen/css-to-inline-styles (2.2.5) - Downloading tijsverkoyen/css-to-inline-styles (2.2.5) Failed to download tijsverkoyen/css-to-inline-styles from dist: The "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19" file could not be written to /var/www/bookstack/vendor/composer/tmp-94526baf440403a809b4b48d4ecce599: failed to open stream: Permission denied Now trying to download from source - Syncing tijsverkoyen/css-to-inline-styles (2.2.5) into cache - Downloading symfony/var-dumper (v5.4.14) - Downloading symfony/var-dumper (v5.4.14) - Downloading symfony/var-dumper (v5.4.14) - Downloading symfony/var-dumper (v5.4.14) Failed to download symfony/var-dumper from dist: The "https://api.github.com/repos/symfony/var-dumper/zipball/6894d06145fefebd9a4c7272baa026a1c394a430" file could not be written to /var/www/bookstack/vendor/composer/tmp-242165efbd40e7ce5ca062ba74909d8f: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/var-dumper (v5.4.14) into cache - Downloading symfony/routing (v5.4.15) - Downloading symfony/routing (v5.4.15) - Downloading symfony/routing (v5.4.15) - Downloading symfony/routing (v5.4.15) Failed to download symfony/routing from dist: The "https://api.github.com/repos/symfony/routing/zipball/5c9b129efe9abce9470e384bf65d8a7e262eee69" file could not be written to /var/www/bookstack/vendor/composer/tmp-89ee8fba03a103ddf84e44ec395b00ed: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/routing (v5.4.15) into cache - Downloading symfony/polyfill-php72 (v1.27.0) - Downloading symfony/polyfill-php72 (v1.27.0) - Downloading symfony/polyfill-php72 (v1.27.0) - Downloading symfony/polyfill-php72 (v1.27.0) Failed to download symfony/polyfill-php72 from dist: The "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97" file could not be written to /var/www/bookstack/vendor/composer/tmp-496cdc5798585e02c4a114254d7a8e03: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-php72 (v1.27.0) into cache - Downloading symfony/polyfill-intl-normalizer (v1.27.0) - Downloading symfony/polyfill-intl-normalizer (v1.27.0) - Downloading symfony/polyfill-intl-normalizer (v1.27.0) - Downloading symfony/polyfill-intl-normalizer (v1.27.0) Failed to download symfony/polyfill-intl-normalizer from dist: The "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6" file could not be written to /var/www/bookstack/vendor/composer/tmp-8c59bcd8349c209c4a3b50b915e9c390: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-intl-normalizer (v1.27.0) into cache - Downloading symfony/polyfill-intl-idn (v1.27.0) - Downloading symfony/polyfill-intl-idn (v1.27.0) - Downloading symfony/polyfill-intl-idn (v1.27.0) - Downloading symfony/polyfill-intl-idn (v1.27.0) Failed to download symfony/polyfill-intl-idn from dist: The "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da" file could not be written to /var/www/bookstack/vendor/composer/tmp-6d5164af7a6d2c4f5e1d9b740dd55296: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-intl-idn (v1.27.0) into cache - Downloading symfony/mime (v5.4.14) - Downloading symfony/mime (v5.4.14) - Downloading symfony/mime (v5.4.14) - Downloading symfony/mime (v5.4.14) Failed to download symfony/mime from dist: The "https://api.github.com/repos/symfony/mime/zipball/1c118b253bb3495d81e95a6e3ec6c2766a98a0c4" file could not be written to /var/www/bookstack/vendor/composer/tmp-8dfa4fcea505f63dd32265756aa80ff4: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/mime (v5.4.14) into cache - Downloading symfony/polyfill-php73 (v1.27.0) - Downloading symfony/polyfill-php73 (v1.27.0) - Downloading symfony/polyfill-php73 (v1.27.0) - Downloading symfony/polyfill-php73 (v1.27.0) Failed to download symfony/polyfill-php73 from dist: The "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9" file could not be written to /var/www/bookstack/vendor/composer/tmp-43446fd5bb5312630cecdf63bfc6f6f5: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-php73 (v1.27.0) into cache - Downloading symfony/http-foundation (v5.4.15) - Downloading symfony/http-foundation (v5.4.15) - Downloading symfony/http-foundation (v5.4.15) - Downloading symfony/http-foundation (v5.4.15) Failed to download symfony/http-foundation from dist: The "https://api.github.com/repos/symfony/http-foundation/zipball/75bd663ff2db90141bfb733682459d5bbe9e29c3" file could not be written to /var/www/bookstack/vendor/composer/tmp-d386ba14224ce57839097668f2157c2c: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/http-foundation (v5.4.15) into cache - Downloading symfony/error-handler (v5.4.15) - Downloading symfony/error-handler (v5.4.15) - Downloading symfony/error-handler (v5.4.15) - Downloading symfony/error-handler (v5.4.15) Failed to download symfony/error-handler from dist: The "https://api.github.com/repos/symfony/error-handler/zipball/539cf1428b8442303c6e876ad7bf5a7babd91091" file could not be written to /var/www/bookstack/vendor/composer/tmp-f087dbfbc0aaaa9cfef459a5335f432a: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/error-handler (v5.4.15) into cache - Downloading symfony/http-kernel (v5.4.15) - Downloading symfony/http-kernel (v5.4.15) - Downloading symfony/http-kernel (v5.4.15) - Downloading symfony/http-kernel (v5.4.15) Failed to download symfony/http-kernel from dist: The "https://api.github.com/repos/symfony/http-kernel/zipball/fc63c8c3e1036d424820cc993a4ea163778dc5c7" file could not be written to /var/www/bookstack/vendor/composer/tmp-985e3af0a1db05264f356779dc8f9696: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/http-kernel (v5.4.15) into cache - Downloading symfony/polyfill-intl-grapheme (v1.27.0) - Downloading symfony/polyfill-intl-grapheme (v1.27.0) - Downloading symfony/polyfill-intl-grapheme (v1.27.0) - Downloading symfony/polyfill-intl-grapheme (v1.27.0) Failed to download symfony/polyfill-intl-grapheme from dist: The "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354" file could not be written to /var/www/bookstack/vendor/composer/tmp-ad048d17899231fb52691e0726c1dda7: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-intl-grapheme (v1.27.0) into cache - Downloading symfony/string (v5.4.15) - Downloading symfony/string (v5.4.15) - Downloading symfony/string (v5.4.15) - Downloading symfony/string (v5.4.15) Failed to download symfony/string from dist: The "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed" file could not be written to /var/www/bookstack/vendor/composer/tmp-498534722e2e6cd7fa9acf6dddb00a4d: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/string (v5.4.15) into cache - Downloading symfony/console (v5.4.15) - Downloading symfony/console (v5.4.15) - Downloading symfony/console (v5.4.15) - Downloading symfony/console (v5.4.15) Failed to download symfony/console from dist: The "https://api.github.com/repos/symfony/console/zipball/ea59bb0edfaf9f28d18d8791410ee0355f317669" file could not be written to /var/www/bookstack/vendor/composer/tmp-b4aade45c7e21f60877f818f075c74d4: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/console (v5.4.15) into cache - Downloading symfony/polyfill-php81 (v1.27.0) - Downloading symfony/polyfill-php81 (v1.27.0) - Downloading symfony/polyfill-php81 (v1.27.0) - Downloading symfony/polyfill-php81 (v1.27.0) Failed to download symfony/polyfill-php81 from dist: The "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a" file could not be written to /var/www/bookstack/vendor/composer/tmp-48927e38881f42c0feab17af6efd7b3f: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/polyfill-php81 (v1.27.0) into cache - Downloading symfony/translation (v5.4.14) - Downloading symfony/translation (v5.4.14) - Downloading symfony/translation (v5.4.14) - Downloading symfony/translation (v5.4.14) Failed to download symfony/translation from dist: The "https://api.github.com/repos/symfony/translation/zipball/f0ed07675863aa6e3939df8b1bc879450b585cab" file could not be written to /var/www/bookstack/vendor/composer/tmp-bdb4df825f646598f83b78c02846c7e7: failed to open stream: Permission denied Now trying to download from source - Syncing symfony/translation (v5.4.14) into cache - Downloading nesbot/carbon (2.63.0) - Downloading nesbot/carbon (2.63.0) - Downloading nesbot/carbon (2.63.0) - Downloading nesbot/carbon (2.63.0) Failed to download nesbot/carbon from dist: The "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad35dd71a6a212b98e4b87e97389b6fa85f0e347" file could not be written to /var/www/bookstack/vendor/composer/tmp-05011d4ccc83b63a96a9e476497fee7e: failed to open stream: Permission denied Now trying to download from source - Syncing nesbot/carbon (2.63.0) into cache - Downloading league/flysystem (1.1.10) - Downloading league/flysystem (1.1.10) - Downloading league/flysystem (1.1.10) - Downloading league/flysystem (1.1.10) Failed to download league/flysystem from dist: The "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1" file could not be written to /var/www/bookstack/vendor/composer/tmp-75deb14da04e6bb8dbb17ce54a258011: failed to open stream: Permission denied Now trying to download from source - Syncing league/flysystem (1.1.10) into cache - Downloading laravel/serializable-closure (v1.2.2) - Downloading laravel/serializable-closure (v1.2.2) - Downloading laravel/serializable-closure (v1.2.2) - Downloading laravel/serializable-closure (v1.2.2) Failed to download laravel/serializable-closure from dist: The "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae" file could not be written to /var/www/bookstack/vendor/composer/tmp-e65a6578eadfa4b7efac9da6ef1849f7: failed to open stream: Permission denied Now trying to download from source - Syncing laravel/serializable-closure (v1.2.2) into cache - Downloading dragonmantank/cron-expression (v3.3.2) - Downloading dragonmantank/cron-expression (v3.3.2) - Downloading dragonmantank/cron-expression (v3.3.2) - Downloading dragonmantank/cron-expression (v3.3.2) Failed to download dragonmantank/cron-expression from dist: The "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8" file could not be written to /var/www/bookstack/vendor/composer/tmp-af2124337daa475347d08adc0aba2ac1: failed to open stream: Permission denied Now trying to download from source - Syncing dragonmantank/cron-expression (v3.3.2) into cache - Downloading doctrine/inflector (2.0.6) - Downloading doctrine/inflector (2.0.6) - Downloading doctrine/inflector (2.0.6) - Downloading doctrine/inflector (2.0.6) Failed to download doctrine/inflector from dist: The "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" file could not be written to /var/www/bookstack/vendor/composer/tmp-510b191f1b7d0106a2bed80438d64483: failed to open stream: Permission denied Now trying to download from source - Syncing doctrine/inflector (2.0.6) into cache - Downloading laravel/framework (v8.83.26) - Downloading laravel/framework (v8.83.26) - Downloading laravel/framework (v8.83.26) - Downloading laravel/framework (v8.83.26) Failed to download laravel/framework from dist: The "https://api.github.com/repos/laravel/framework/zipball/7411d9fa71c1b0fd73a33e225f14512b74e6c81e" file could not be written to /var/www/bookstack/vendor/composer/tmp-6aeb1cddb27009bb13dbc438494fb319: failed to open stream: Permission denied Now trying to download from source - Syncing laravel/framework (v8.83.26) into cache - Downloading phenx/php-svg-lib (0.5.0) - Downloading phenx/php-svg-lib (0.5.0) - Downloading phenx/php-svg-lib (0.5.0) - Downloading phenx/php-svg-lib (0.5.0) Failed to download phenx/php-svg-lib from dist: The "https://api.github.com/repos/dompdf/php-svg-lib/zipball/76876c6cf3080bcb6f249d7d59705108166a6685" file could not be written to /var/www/bookstack/vendor/composer/tmp-e4327d5d829c255526e922527acd24ef: failed to open stream: Permission denied Now trying to download from source - Syncing phenx/php-svg-lib (0.5.0) into cache - Downloading dompdf/dompdf (v2.0.1) - Downloading dompdf/dompdf (v2.0.1) - Downloading dompdf/dompdf (v2.0.1) - Downloading dompdf/dompdf (v2.0.1) Failed to download dompdf/dompdf from dist: The "https://api.github.com/repos/dompdf/dompdf/zipball/c5310df0e22c758c85ea5288175fc6cd777bc085" file could not be written to /var/www/bookstack/vendor/composer/tmp-a56a3567a92715add5e794d6a36eb49e: failed to open stream: Permission denied Now trying to download from source - Syncing dompdf/dompdf (v2.0.1) into cache - Downloading doctrine/event-manager (1.2.0) - Downloading doctrine/event-manager (1.2.0) - Downloading doctrine/event-manager (1.2.0) - Downloading doctrine/event-manager (1.2.0) Failed to download doctrine/event-manager from dist: The "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520" file could not be written to /var/www/bookstack/vendor/composer/tmp-a3bcc5d9dc83b6e7214d309c12fbd862: failed to open stream: Permission denied Now trying to download from source - Syncing doctrine/event-manager (1.2.0) into cache - Downloading doctrine/dbal (3.5.1) - Downloading doctrine/dbal (3.5.1) - Downloading doctrine/dbal (3.5.1) - Downloading doctrine/dbal (3.5.1) Failed to download doctrine/dbal from dist: The "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5" file could not be written to /var/www/bookstack/vendor/composer/tmp-9421ecf102f82270f5fec56f23b4583b: failed to open stream: Permission denied Now trying to download from source - Syncing doctrine/dbal (3.5.1) into cache - Downloading filp/whoops (2.14.6) - Downloading filp/whoops (2.14.6) - Downloading filp/whoops (2.14.6) - Downloading filp/whoops (2.14.6) Failed to download filp/whoops from dist: The "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da" file could not be written to /var/www/bookstack/vendor/composer/tmp-a607800631d892639449c21d410ee4ba: failed to open stream: Permission denied Now trying to download from source - Syncing filp/whoops (2.14.6) into cache - Downloading guzzlehttp/psr7 (2.4.3) - Downloading guzzlehttp/psr7 (2.4.3) - Downloading guzzlehttp/psr7 (2.4.3) - Downloading guzzlehttp/psr7 (2.4.3) Failed to download guzzlehttp/psr7 from dist: The "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d" file could not be written to /var/www/bookstack/vendor/composer/tmp-525537f47217fabcadddd1ab5144cdf0: failed to open stream: Permission denied Now trying to download from source - Syncing guzzlehttp/psr7 (2.4.3) into cache - Downloading laravel/socialite (v5.5.6) - Downloading laravel/socialite (v5.5.6) - Downloading laravel/socialite (v5.5.6) - Downloading laravel/socialite (v5.5.6) Failed to download laravel/socialite from dist: The "https://api.github.com/repos/laravel/socialite/zipball/1cd1682b709b8808a5b5dbb68179a58d1342aa7b" file could not be written to /var/www/bookstack/vendor/composer/tmp-1a1920ccabce1dc6a181166495f01cb0: failed to open stream: Permission denied Now trying to download from source - Syncing laravel/socialite (v5.5.6) into cache - Downloading nikic/php-parser (v4.15.2) - Downloading nikic/php-parser (v4.15.2) - Downloading nikic/php-parser (v4.15.2) - Downloading nikic/php-parser (v4.15.2) Failed to download nikic/php-parser from dist: The "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" file could not be written to /var/www/bookstack/vendor/composer/tmp-12e985414108bb70b728e57d401ba99e: failed to open stream: Permission denied Now trying to download from source - Syncing nikic/php-parser (v4.15.2) into cache - Downloading psy/psysh (v0.11.9) - Downloading psy/psysh (v0.11.9) - Downloading psy/psysh (v0.11.9) - Downloading psy/psysh (v0.11.9) Failed to download psy/psysh from dist: The "https://api.github.com/repos/bobthecow/psysh/zipball/1acec99d6684a54ff92f8b548a4e41b566963778" file could not be written to /var/www/bookstack/vendor/composer/tmp-f7be6f87b6a0597f7db3f1f92be4b237: failed to open stream: Permission denied Now trying to download from source - Syncing psy/psysh (v0.11.9) into cache - Downloading laravel/tinker (v2.7.3) - Downloading laravel/tinker (v2.7.3) - Downloading laravel/tinker (v2.7.3) - Downloading laravel/tinker (v2.7.3) Failed to download laravel/tinker from dist: The "https://api.github.com/repos/laravel/tinker/zipball/5062061b4924af3392225dd482ca7b4d85d8b8ef" file could not be written to /var/www/bookstack/vendor/composer/tmp-ef7d025809c212d532c894adea2d954f: failed to open stream: Permission denied Now trying to download from source - Syncing laravel/tinker (v2.7.3) into cache - Downloading aws/aws-sdk-php (3.247.1) - Downloading aws/aws-sdk-php (3.247.1) - Downloading aws/aws-sdk-php (3.247.1) - Downloading aws/aws-sdk-php (3.247.1) Failed to download aws/aws-sdk-php from dist: The "https://api.github.com/repos/aws/aws-sdk-php/zipball/337e447997148b9e5024c2d0ae69618b1cbf80d6" file could not be written to /var/www/bookstack/vendor/composer/tmp-d0cbacc884eed31b734928ae3f5e2128: failed to open stream: Permission denied Now trying to download from source - Syncing aws/aws-sdk-php (3.247.1) into cache - Downloading phpseclib/phpseclib (3.0.17) - Downloading phpseclib/phpseclib (3.0.17) - Downloading phpseclib/phpseclib (3.0.17) - Downloading phpseclib/phpseclib (3.0.17) Failed to download phpseclib/phpseclib from dist: The "https://api.github.com/repos/phpseclib/phpseclib/zipball/dbc2307d5c69aeb22db136c52e91130d7f2ca761" file could not be written to /var/www/bookstack/vendor/composer/tmp-31c01ceb0d65fb9f8f31cd6ab01d4ab2: failed to open stream: Permission denied Now trying to download from source - Syncing phpseclib/phpseclib (3.0.17) into cache - Removing laravel/ui (v3.4.6) - Removing symfony/polyfill-iconv (v1.26.0) - Removing symfony/polyfill-php80 (v1.26.0) - Removing symfony/polyfill-mbstring (v1.26.0) - Removing symfony/polyfill-ctype (v1.26.0) - Removing vlucas/phpdotenv (v5.4.1) - Removing tijsverkoyen/css-to-inline-styles (2.2.4) Update of symfony/var-dumper failed - Removing symfony/routing (v5.4.11) - Removing symfony/polyfill-php72 (v1.26.0) - Removing symfony/polyfill-intl-normalizer (v1.26.0) - Removing symfony/polyfill-intl-idn (v1.26.0) - Removing symfony/mime (v5.4.12) - Removing symfony/polyfill-php73 (v1.26.0) - Removing symfony/http-foundation (v5.4.12) Update of symfony/error-handler failed - Removing symfony/http-kernel (v5.4.12) - Removing symfony/polyfill-intl-grapheme (v1.26.0) - Removing symfony/string (v5.4.12) - Removing symfony/console (v5.4.12) - Removing symfony/polyfill-php81 (v1.26.0) - Removing symfony/translation (v5.4.12) Update of nesbot/carbon failed - Removing league/flysystem (1.1.9) - Removing laravel/serializable-closure (v1.2.1) - Removing dragonmantank/cron-expression (v3.3.1) - Removing doctrine/inflector (2.0.4) - Removing laravel/framework (v8.83.23) - Removing phenx/php-svg-lib (0.4.1) - Removing dompdf/dompdf (v2.0.0) - Removing doctrine/event-manager (1.1.2) Update of doctrine/dbal failed - Removing filp/whoops (2.14.5) - Removing guzzlehttp/psr7 (2.4.1) - Removing laravel/socialite (v5.5.5) Update of nikic/php-parser failed Update of psy/psysh failed - Removing laravel/tinker (v2.7.2) - Removing aws/aws-sdk-php (3.235.1) - Removing phpseclib/phpseclib (3.0.15) Uninstall of laravel/ui failed Update of symfony/polyfill-iconv failed Update of symfony/polyfill-php80 failed Update of symfony/polyfill-mbstring failed Update of symfony/polyfill-ctype failed Update of vlucas/phpdotenv failed Update of tijsverkoyen/css-to-inline-styles failed Update of symfony/routing failed Update of symfony/polyfill-php72 failed Update of symfony/polyfill-intl-normalizer failed 0/24 [>---------------------------] 0% Update of symfony/polyfill-intl-idn failed Update of symfony/polyfill-php73 failed Update of symfony/polyfill-intl-grapheme failed 3/24 [===>------------------------] 12% Update of symfony/mime failed Update of symfony/http-foundation failed Update of symfony/string failed Update of symfony/console failed Update of symfony/polyfill-php81 failed Update of symfony/translation failed Update of symfony/http-kernel failed Update of league/flysystem failed Update of laravel/serializable-closure failed Update of dragonmantank/cron-expression failed Update of phenx/php-svg-lib failed Update of doctrine/inflector failed Update of dompdf/dompdf failed Update of doctrine/event-manager failed Update of guzzlehttp/psr7 failed Update of laravel/socialite failed Update of laravel/tinker failed Update of filp/whoops failed 21/24 [========================>---] 87% Update of phpseclib/phpseclib failed Update of laravel/framework failed 23/24 [==========================>-] 95% Update of aws/aws-sdk-php failed 24/24 [============================] 100% [RuntimeException] Could not delete /var/www/bookstack/vendor/bin/var-dump-server: install [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--dev] [--no-suggest] [--no-dev] [--no-autoloader] [--no-scripts] [--no-progress] [--no-install] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--] [<packages>]...
Author
Owner

@patsyk1 commented on GitHub (Dec 15, 2022):

sudo php artisan migrate


  • Application In Production!     *
    

Do you really wish to run this command? (yes/no) [no]:

yes

Migrating: 2022_07_16_170051_drop_joint_permission_type
Migrated: 2022_07_16_170051_drop_joint_permission_type (15,988.30ms)
Migrating: 2022_08_17_092941_create_references_table

In Connection.php line 712:

SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'references' already exists (SQL: create table refe rences (id bigint unsigned not null auto_increment primary key, from_id int unsigned not null, from_type var
char(25) not null, to_id int unsigned not null, to_type varchar(25) not null) default character set utf8mb4 col
late 'utf8mb4_unicode_ci')

In Connection.php line 501:

SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'references' already exists

@patsyk1 commented on GitHub (Dec 15, 2022): **sudo php artisan migrate** ************************************** * Application In Production! * ************************************** Do you really wish to run this command? (yes/no) [no]: > yes Migrating: 2022_07_16_170051_drop_joint_permission_type Migrated: 2022_07_16_170051_drop_joint_permission_type (15,988.30ms) Migrating: 2022_08_17_092941_create_references_table In Connection.php line 712: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'references' already exists (SQL: create table `refe rences` (`id` bigint unsigned not null auto_increment primary key, `from_id` int unsigned not null, `from_type` var char(25) not null, `to_id` int unsigned not null, `to_type` varchar(25) not null) default character set utf8mb4 col late 'utf8mb4_unicode_ci') In Connection.php line 501: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'references' already exists
Author
Owner

@patsyk1 commented on GitHub (Dec 15, 2022):

@ssddanbrown I realise I've given you what was outputted when the update was initially run. Do you need me to re-run the above and provide outputs?

@patsyk1 commented on GitHub (Dec 15, 2022): @ssddanbrown I realise I've given you what was outputted when the update was initially run. Do you need me to re-run the above and provide outputs?
Author
Owner

@ssddanbrown commented on GitHub (Dec 15, 2022):

Okay, looks like there are a couple of issues at play right now:

  1. The composer install --no-dev step is not completing properly due to permission errors. The vendor/ folder in the BookStack directory needs to be fully writable by the user running the command.
  2. The database migration is failing since the database state is not as expected. Hard to state why this is occuring, but it's most common when an upgrade has been attempted before but has failed for another reason. Could also be related to the failing step above or the originally altered files.

To fix 1, you'll need to run the command with a more privileged user (or via sudo for example) or update the permissions of all in that folder. Let me know if you need guidance on that, just confirm the user used to run commands.

To fix 2, You'd need to drop the references table in the bookstack database. Let me know if you need guidance on this. Ideally backup the system/database before attempting any changes.

@ssddanbrown commented on GitHub (Dec 15, 2022): Okay, looks like there are a couple of issues at play right now: 1. The `composer install --no-dev` step is not completing properly due to permission errors. The `vendor/` folder in the BookStack directory needs to be fully writable by the user running the command. 2. The database migration is failing since the database state is not as expected. Hard to state why this is occuring, but it's most common when an upgrade has been attempted before but has failed for another reason. Could also be related to the failing step above or the originally altered files. To fix 1, you'll need to run the command with a more privileged user (or via `sudo` for example) or update the permissions of all in that folder. Let me know if you need guidance on that, just confirm the user used to run commands. To fix 2, You'd need to drop the `references` table in the bookstack database. Let me know if you need guidance on this. Ideally backup the system/database before attempting any changes.
Author
Owner

@patsyk1 commented on GitHub (Dec 15, 2022):

Thanks @ssddanbrown.

Could you provide some guidance on fix 2. Backing up database and files I can do, but SQL is a weak point.

I have a checkpoint of Ubuntu install prior to the updated. So I'll roll back to this and elevate the composer install --no-dev step.

Many thanks in advance.

@patsyk1 commented on GitHub (Dec 15, 2022): Thanks @ssddanbrown. Could you provide some guidance on fix 2. Backing up database and files I can do, but SQL is a weak point. I have a checkpoint of Ubuntu install prior to the updated. So I'll roll back to this and elevate the composer install --no-dev step. Many thanks in advance.
Author
Owner

@ssddanbrown commented on GitHub (Dec 15, 2022):

Sure. In the below, replaced any <variables> marked as so, including the angled quotes.
Use the variables from your /var/www/bookstack/.env file.

# Login to MySQL
mysql -u <database_username> -p<database_password>

# Enter the BookStack database
use <database_name>;

# Drop the references table
drop table references;

# Exit MySQL
exit;

Then re-run the update commands if all was successfull.
Upon any error, record and report back the first error without progressing. Errors can be different a second time around so it's important we see the first errors.

@ssddanbrown commented on GitHub (Dec 15, 2022): Sure. In the below, replaced any `<variables>` marked as so, including the angled quotes. Use the variables from your `/var/www/bookstack/.env` file. ```bash # Login to MySQL mysql -u <database_username> -p<database_password> # Enter the BookStack database use <database_name>; # Drop the references table drop table references; # Exit MySQL exit; ``` Then re-run the update commands if all was successfull. Upon any error, record and report back the first error without progressing. Errors can be different a second time around so it's important we see the first errors.
Author
Owner

@patsyk1 commented on GitHub (Dec 15, 2022):

Hi @ssddanbrown,

Dropping that table worked and I was able to run sudo php artisan migrate. However, now I have the same issue as before (when I updated to 22.09.01) wherein there are a large number of Books, Chapters and Pages missing.

Restoring the database then just takes me back to the above errors again. :)

@patsyk1 commented on GitHub (Dec 15, 2022): Hi @ssddanbrown, Dropping that table worked and I was able to run **sudo php artisan migrate**. However, now I have the same issue as before (when I updated to 22.09.01) wherein there are a large number of Books, Chapters and Pages missing. Restoring the database then just takes me back to the above errors again. :)
Author
Owner

@ssddanbrown commented on GitHub (Dec 15, 2022):

However, now I have the same issue as before (when I updated to 22.09.01) wherein there are a large number of Books, Chapters and Pages missing.

Okay, this indicates that the database might have been out of sync with the codebase before, which may have led to the further errors you've solved above. This is just a case of the permission handling though, regenerating the "cached" permissions via this command should solve this particular issue. Just need to run this from your BookStack folder.

php artisan bookstack:regenerate-permissions
@ssddanbrown commented on GitHub (Dec 15, 2022): > However, now I have the same issue as before (when I updated to 22.09.01) wherein there are a large number of Books, Chapters and Pages missing. Okay, this indicates that the database might have been out of sync with the codebase before, which may have led to the further errors you've solved above. This is just a case of the permission handling though, regenerating the "cached" permissions via this command should solve this particular issue. Just need to run this from your BookStack folder. ```bash php artisan bookstack:regenerate-permissions ```
Author
Owner

@patsyk1 commented on GitHub (Dec 15, 2022):

Brilliant - that's done it. Many thanks, @ssddanbrown. Very much appreciate the quick responses and help here.

Bookstack is a great product so I look forward to seeing future updates and watching it grow in popularity!

@patsyk1 commented on GitHub (Dec 15, 2022): Brilliant - that's done it. Many thanks, @ssddanbrown. Very much appreciate the quick responses and help here. Bookstack is a great product so I look forward to seeing future updates and watching it grow in popularity!
Author
Owner

@ssddanbrown commented on GitHub (Dec 16, 2022):

Awesome, Good to hear! Will therefore close this off.

@ssddanbrown commented on GitHub (Dec 16, 2022): Awesome, Good to hear! Will therefore close this off.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/BookStack#3400