]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'laravel_upgrade'
authorDan Brown <redacted>
Thu, 4 Nov 2021 22:42:35 +0000 (22:42 +0000)
committerDan Brown <redacted>
Thu, 4 Nov 2021 22:42:35 +0000 (22:42 +0000)
308 files changed:
.github/workflows/phpunit.yml
.github/workflows/test-migrations.yml
app/Actions/Activity.php
app/Actions/Comment.php
app/Actions/Tag.php
app/Api/ApiToken.php
app/Api/ApiTokenGuard.php
app/Auth/Role.php
app/Auth/SocialAccount.php
app/Auth/User.php
app/Config/app.php [changed mode: 0755->0644]
app/Config/auth.php
app/Config/broadcasting.php
app/Config/cache.php
app/Config/clockwork.php [new file with mode: 0644]
app/Config/filesystems.php
app/Config/logging.php
app/Config/mail.php
app/Config/queue.php
app/Entities/Models/Book.php
app/Entities/Models/Bookshelf.php
app/Entities/Models/Chapter.php
app/Entities/Models/Deletion.php
app/Entities/Models/Entity.php
app/Entities/Models/Page.php
app/Entities/Tools/SearchOptions.php
app/Entities/Tools/SearchRunner.php
app/Exceptions/Handler.php
app/Exceptions/NotifyException.php
app/Exceptions/PrettyException.php
app/Exceptions/StoppedAuthenticationException.php
app/Http/Controllers/PageController.php
app/Http/Kernel.php
app/Http/Middleware/PreventRequestsDuringMaintenance.php [moved from app/Http/Middleware/CheckForMaintenanceMode.php with 58% similarity]
app/Http/Middleware/RedirectIfAuthenticated.php
app/Http/Middleware/TrustHosts.php [new file with mode: 0644]
app/Http/Middleware/TrustProxies.php
app/Providers/AppServiceProvider.php
app/Providers/EventServiceProvider.php
app/Providers/RouteServiceProvider.php
app/Uploads/Attachment.php
app/Uploads/Image.php
composer.json
composer.lock
database/factories/Actions/CommentFactory.php [new file with mode: 0644]
database/factories/Actions/TagFactory.php [new file with mode: 0644]
database/factories/Auth/RoleFactory.php [new file with mode: 0644]
database/factories/Auth/UserFactory.php [new file with mode: 0644]
database/factories/Entities/Models/BookFactory.php [new file with mode: 0644]
database/factories/Entities/Models/BookshelfFactory.php [new file with mode: 0644]
database/factories/Entities/Models/ChapterFactory.php [new file with mode: 0644]
database/factories/Entities/Models/PageFactory.php [new file with mode: 0644]
database/factories/ModelFactory.php [deleted file]
database/factories/Uploads/ImageFactory.php [new file with mode: 0644]
database/migrations/2018_08_04_115700_create_bookshelves_table.php
database/seeders/.gitkeep [moved from database/seeds/.gitkeep with 100% similarity]
database/seeders/DatabaseSeeder.php [moved from database/seeds/DatabaseSeeder.php with 92% similarity]
database/seeders/DummyContentSeeder.php [moved from database/seeds/DummyContentSeeder.php with 71% similarity]
database/seeders/LargeContentSeeder.php [moved from database/seeds/LargeContentSeeder.php with 60% similarity]
dev/api/responses/attachments-create.json
dev/api/responses/attachments-list.json
dev/api/responses/attachments-read.json
dev/api/responses/attachments-update.json
dev/api/responses/books-create.json
dev/api/responses/books-list.json
dev/api/responses/books-read.json
dev/api/responses/books-update.json
dev/api/responses/chapters-create.json
dev/api/responses/chapters-list.json
dev/api/responses/chapters-read.json
dev/api/responses/chapters-update.json
dev/api/responses/pages-create.json
dev/api/responses/pages-list.json
dev/api/responses/pages-read.json
dev/api/responses/pages-update.json
dev/api/responses/shelves-create.json
dev/api/responses/shelves-list.json
dev/api/responses/shelves-read.json
dev/api/responses/shelves-update.json
phpunit.xml
public/index.php
readme.md
resources/lang/ar/auth.php
resources/lang/ar/common.php
resources/lang/ar/entities.php
resources/lang/ar/passwords.php
resources/lang/ar/settings.php
resources/lang/bg/auth.php
resources/lang/bg/common.php
resources/lang/bg/entities.php
resources/lang/bg/passwords.php
resources/lang/bg/settings.php
resources/lang/bs/auth.php
resources/lang/bs/common.php
resources/lang/bs/entities.php
resources/lang/bs/passwords.php
resources/lang/bs/settings.php
resources/lang/ca/auth.php
resources/lang/ca/common.php
resources/lang/ca/entities.php
resources/lang/ca/settings.php
resources/lang/cs/auth.php
resources/lang/cs/common.php
resources/lang/cs/entities.php
resources/lang/cs/passwords.php
resources/lang/cs/settings.php
resources/lang/da/auth.php
resources/lang/da/common.php
resources/lang/da/entities.php
resources/lang/da/passwords.php
resources/lang/da/settings.php
resources/lang/de/auth.php
resources/lang/de/common.php
resources/lang/de/entities.php
resources/lang/de/passwords.php
resources/lang/de/settings.php
resources/lang/de_informal/auth.php
resources/lang/de_informal/common.php
resources/lang/de_informal/entities.php
resources/lang/de_informal/passwords.php
resources/lang/de_informal/settings.php
resources/lang/en/auth.php
resources/lang/en/common.php
resources/lang/en/entities.php
resources/lang/en/settings.php
resources/lang/es/auth.php
resources/lang/es/common.php
resources/lang/es/entities.php
resources/lang/es/passwords.php
resources/lang/es/settings.php
resources/lang/es_AR/auth.php
resources/lang/es_AR/common.php
resources/lang/es_AR/entities.php
resources/lang/es_AR/passwords.php
resources/lang/es_AR/settings.php
resources/lang/et/auth.php
resources/lang/et/common.php
resources/lang/et/entities.php
resources/lang/et/passwords.php
resources/lang/et/settings.php
resources/lang/fa/auth.php
resources/lang/fa/common.php
resources/lang/fa/entities.php
resources/lang/fa/passwords.php
resources/lang/fa/settings.php
resources/lang/fr/auth.php
resources/lang/fr/common.php
resources/lang/fr/entities.php
resources/lang/fr/settings.php
resources/lang/he/auth.php
resources/lang/he/common.php
resources/lang/he/entities.php
resources/lang/he/passwords.php
resources/lang/he/settings.php
resources/lang/hr/auth.php
resources/lang/hr/common.php
resources/lang/hr/entities.php
resources/lang/hr/settings.php
resources/lang/hu/auth.php
resources/lang/hu/common.php
resources/lang/hu/entities.php
resources/lang/hu/passwords.php
resources/lang/hu/settings.php
resources/lang/id/auth.php
resources/lang/id/common.php
resources/lang/id/entities.php
resources/lang/id/passwords.php
resources/lang/id/settings.php
resources/lang/it/auth.php
resources/lang/it/common.php
resources/lang/it/entities.php
resources/lang/it/passwords.php
resources/lang/it/settings.php
resources/lang/ja/auth.php
resources/lang/ja/common.php
resources/lang/ja/entities.php
resources/lang/ja/passwords.php
resources/lang/ja/settings.php
resources/lang/ko/auth.php
resources/lang/ko/common.php
resources/lang/ko/entities.php
resources/lang/ko/errors.php
resources/lang/ko/passwords.php
resources/lang/ko/settings.php
resources/lang/lt/auth.php
resources/lang/lt/common.php
resources/lang/lt/entities.php
resources/lang/lt/settings.php
resources/lang/lv/auth.php
resources/lang/lv/common.php
resources/lang/lv/entities.php
resources/lang/lv/passwords.php
resources/lang/lv/settings.php
resources/lang/nb/auth.php
resources/lang/nb/common.php
resources/lang/nb/entities.php
resources/lang/nb/passwords.php
resources/lang/nb/settings.php
resources/lang/nl/auth.php
resources/lang/nl/common.php
resources/lang/nl/entities.php
resources/lang/nl/passwords.php
resources/lang/nl/settings.php
resources/lang/pl/auth.php
resources/lang/pl/common.php
resources/lang/pl/entities.php
resources/lang/pl/passwords.php
resources/lang/pl/settings.php
resources/lang/pt/auth.php
resources/lang/pt/common.php
resources/lang/pt/entities.php
resources/lang/pt/passwords.php
resources/lang/pt/settings.php
resources/lang/pt_BR/auth.php
resources/lang/pt_BR/common.php
resources/lang/pt_BR/entities.php
resources/lang/pt_BR/passwords.php
resources/lang/pt_BR/settings.php
resources/lang/ru/auth.php
resources/lang/ru/common.php
resources/lang/ru/entities.php
resources/lang/ru/errors.php
resources/lang/ru/passwords.php
resources/lang/ru/settings.php
resources/lang/sk/auth.php
resources/lang/sk/common.php
resources/lang/sk/entities.php
resources/lang/sk/passwords.php
resources/lang/sk/settings.php
resources/lang/sl/auth.php
resources/lang/sl/common.php
resources/lang/sl/entities.php
resources/lang/sl/passwords.php
resources/lang/sl/settings.php
resources/lang/sv/auth.php
resources/lang/sv/common.php
resources/lang/sv/entities.php
resources/lang/sv/passwords.php
resources/lang/sv/settings.php
resources/lang/th/auth.php
resources/lang/th/common.php
resources/lang/th/entities.php
resources/lang/th/settings.php
resources/lang/tr/auth.php
resources/lang/tr/common.php
resources/lang/tr/entities.php
resources/lang/tr/passwords.php
resources/lang/tr/settings.php
resources/lang/uk/auth.php
resources/lang/uk/common.php
resources/lang/uk/entities.php
resources/lang/uk/passwords.php
resources/lang/uk/settings.php
resources/lang/vi/auth.php
resources/lang/vi/common.php
resources/lang/vi/entities.php
resources/lang/vi/passwords.php
resources/lang/vi/settings.php
resources/lang/zh_CN/auth.php
resources/lang/zh_CN/common.php
resources/lang/zh_CN/entities.php
resources/lang/zh_CN/passwords.php
resources/lang/zh_CN/settings.php
resources/lang/zh_TW/auth.php
resources/lang/zh_TW/common.php
resources/lang/zh_TW/entities.php
resources/lang/zh_TW/passwords.php
resources/lang/zh_TW/settings.php
routes/api.php
routes/console.php [new file with mode: 0644]
routes/web.php
storage/clockwork/.gitignore [new file with mode: 0644]
storage/framework/.gitignore
tests/Api/AttachmentsApiTest.php
tests/AuditLogTest.php
tests/Auth/AuthTest.php
tests/Auth/LdapTest.php
tests/Auth/MfaConfigurationTest.php
tests/Auth/OidcTest.php
tests/Auth/Saml2Test.php
tests/Auth/SocialAuthTest.php
tests/Entity/BookShelfTest.php
tests/Entity/BookTest.php
tests/Entity/ChapterTest.php
tests/Entity/CommentSettingTest.php
tests/Entity/CommentTest.php
tests/Entity/ExportTest.php
tests/Entity/PageContentTest.php
tests/Entity/PageDraftTest.php
tests/Entity/PageEditorTest.php
tests/Entity/PageTest.php
tests/Entity/SortTest.php
tests/Entity/TagTest.php
tests/HomepageTest.php
tests/LanguageTest.php
tests/Permissions/EntityPermissionsTest.php
tests/Permissions/RolesTest.php
tests/SecurityHeaderTest.php
tests/Settings/CustomHeadContentTest.php
tests/Settings/FooterLinksTest.php
tests/SharedTestHelpers.php
tests/TestResponse.php
tests/ThemeTest.php
tests/Uploads/AttachmentTest.php
tests/Uploads/AvatarTest.php
tests/Uploads/DrawioTest.php
tests/User/UserManagementTest.php
tests/User/UserProfileTest.php

index f12de643601bb73d47c635b9c89f0be78286bcf2..7cb1307a18b57c4b4514546af05a4cbf7917eb45 100644 (file)
@@ -13,12 +13,12 @@ jobs:
     runs-on: ubuntu-20.04
     strategy:
       matrix:
-        php: ['7.3', '7.4', '8.0']
+        php: ['7.3', '7.4', '8.0', '8.1']
     steps:
     - uses: actions/checkout@v1
 
     - name: Setup PHP
-      uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
+      uses: shivammathur/setup-php@v2
       with:
         php-version: ${{ matrix.php }}
         extensions: gd, mbstring, json, curl, xml, mysql, ldap
index c24a019845ad4d30356707716cfc0eb038466c45..846992e7b38bfad90ce24d21cf7542f2048fd9fa 100644 (file)
@@ -13,12 +13,12 @@ jobs:
     runs-on: ubuntu-20.04
     strategy:
       matrix:
-        php: ['7.3', '7.4', '8.0']
+        php: ['7.3', '7.4', '8.0', '8.1']
     steps:
       - uses: actions/checkout@v1
 
       - name: Setup PHP
-        uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
+        uses: shivammathur/setup-php@v2
         with:
           php-version: ${{ matrix.php }}
           extensions: gd, mbstring, json, curl, xml, mysql, ldap
index 6a8a9bcd07bbd66c673bf919f2213112f13be90e..3b1408cb94ded300edfe39c978b1b3389b2474cc 100644 (file)
@@ -61,7 +61,7 @@ class Activity extends Model
     /**
      * Checks if another Activity matches the general information of another.
      */
-    public function isSimilarTo(Activity $activityB): bool
+    public function isSimilarTo(self $activityB): bool
     {
         return [$this->type, $this->entity_type, $this->entity_id] === [$activityB->type, $activityB->entity_type, $activityB->entity_id];
     }
index 34fd84709ec1d746bd84c2de87854a3845743b01..885ba6ed1ac72d991f7003025ac671ee9d8dd99d 100644 (file)
@@ -4,6 +4,7 @@ namespace BookStack\Actions;
 
 use BookStack\Model;
 use BookStack\Traits\HasCreatorAndUpdater;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Relations\MorphTo;
 
 /**
@@ -15,6 +16,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
  */
 class Comment extends Model
 {
+    use HasFactory;
     use HasCreatorAndUpdater;
 
     protected $fillable = ['text', 'parent_id'];
index ce0954f00cd347c50e21806caa8949d256a863cd..db9328b7d59e0f4b2ebd74faf449a523bc3a1426 100644 (file)
@@ -3,10 +3,13 @@
 namespace BookStack\Actions;
 
 use BookStack\Model;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Relations\MorphTo;
 
 class Tag extends Model
 {
+    use HasFactory;
+
     protected $fillable = ['name', 'value', 'order'];
     protected $hidden = ['id', 'entity_id', 'entity_type', 'created_at', 'updated_at'];
 
index f44fde19aa3689eff26ef91f2f1f22e3c856caf5..70b289ae17e2668159a48b87b792d61a38be4f41 100644 (file)
@@ -43,7 +43,7 @@ class ApiToken extends Model implements Loggable
     }
 
     /**
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function logDescriptor(): string
     {
index 8b9cbc8e1b44ebff4ed2586336bc74b19aed600d..1bb672556dfa2dec6d008a2078247cd34a7a1d7e 100644 (file)
@@ -42,7 +42,7 @@ class ApiTokenGuard implements Guard
     }
 
     /**
-     * @inheritDoc
+     * {@inheritdoc}
      */
     public function user()
     {
@@ -152,7 +152,7 @@ class ApiTokenGuard implements Guard
     }
 
     /**
-     * @inheritDoc
+     * {@inheritdoc}
      */
     public function validate(array $credentials = [])
     {
index 46921caeb1a2adebb9255088c39dd1c13489497b..71da88e19b1be5200cb4f41dd6396427efd7c65b 100644 (file)
@@ -7,6 +7,7 @@ use BookStack\Auth\Permissions\RolePermission;
 use BookStack\Interfaces\Loggable;
 use BookStack\Model;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 use Illuminate\Database\Eloquent\Relations\HasMany;
 
@@ -23,6 +24,8 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
  */
 class Role extends Model implements Loggable
 {
+    use HasFactory;
+
     protected $fillable = ['display_name', 'description', 'external_auth_id'];
 
     /**
@@ -83,7 +86,7 @@ class Role extends Model implements Loggable
     /**
      * Get the role of the specified display name.
      */
-    public static function getRole(string $displayName): ?Role
+    public static function getRole(string $displayName): ?self
     {
         return static::query()->where('display_name', '=', $displayName)->first();
     }
@@ -91,7 +94,7 @@ class Role extends Model implements Loggable
     /**
      * Get the role object for the specified system role.
      */
-    public static function getSystemRole(string $systemName): ?Role
+    public static function getSystemRole(string $systemName): ?self
     {
         return static::query()->where('system_name', '=', $systemName)->first();
     }
@@ -116,7 +119,7 @@ class Role extends Model implements Loggable
     }
 
     /**
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function logDescriptor(): string
     {
index f076ecdd440577e1f2dae85c9b676d649021416e..6cf0224a8d362a2ae6c8bf282f615ad1038e96ad 100644 (file)
@@ -21,7 +21,7 @@ class SocialAccount extends Model implements Loggable
     }
 
     /**
-     * @inheritDoc
+     * {@inheritdoc}
      */
     public function logDescriptor(): string
     {
index da47a9d695778dd49c9d0cf1e9a8295c899cbc5b..dc28aa9b71a80054e59986bcd4a395aeac29a04c 100644 (file)
@@ -18,6 +18,7 @@ use Illuminate\Auth\Passwords\CanResetPassword;
 use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
 use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -43,6 +44,7 @@ use Illuminate\Support\Collection;
  */
 class User extends Model implements AuthenticatableContract, CanResetPasswordContract, Loggable, Sluggable
 {
+    use HasFactory;
     use Authenticatable;
     use CanResetPassword;
     use Notifiable;
@@ -90,7 +92,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
     /**
      * Returns the default public user.
      */
-    public static function getDefault(): User
+    public static function getDefault(): self
     {
         if (!is_null(static::$defaultUser)) {
             return static::$defaultUser;
@@ -336,7 +338,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
     }
 
     /**
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function logDescriptor(): string
     {
@@ -344,7 +346,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
     }
 
     /**
-     * @inheritDoc
+     * {@inheritdoc}
      */
     public function refreshSlug(): string
     {
old mode 100755 (executable)
new mode 100644 (file)
index f90a7dd..44e382c
@@ -143,7 +143,6 @@ return [
 
     // Class aliases, Registered on application start
     'aliases' => [
-
         // Laravel
         'App'          => Illuminate\Support\Facades\App::class,
         'Arr'          => Illuminate\Support\Arr::class,
@@ -155,21 +154,23 @@ return [
         'Config'       => Illuminate\Support\Facades\Config::class,
         'Cookie'       => Illuminate\Support\Facades\Cookie::class,
         'Crypt'        => Illuminate\Support\Facades\Crypt::class,
+        'Date'         => Illuminate\Support\Facades\Date::class,
         'DB'           => Illuminate\Support\Facades\DB::class,
         'Eloquent'     => Illuminate\Database\Eloquent\Model::class,
         'Event'        => Illuminate\Support\Facades\Event::class,
         'File'         => Illuminate\Support\Facades\File::class,
+        'Gate'         => Illuminate\Support\Facades\Gate::class,
         'Hash'         => Illuminate\Support\Facades\Hash::class,
-        'Input'        => Illuminate\Support\Facades\Input::class,
-        'Inspiring'    => Illuminate\Foundation\Inspiring::class,
+        'Http'         => Illuminate\Support\Facades\Http::class,
         'Lang'         => Illuminate\Support\Facades\Lang::class,
         'Log'          => Illuminate\Support\Facades\Log::class,
         'Mail'         => Illuminate\Support\Facades\Mail::class,
         'Notification' => Illuminate\Support\Facades\Notification::class,
         'Password'     => Illuminate\Support\Facades\Password::class,
         'Queue'        => Illuminate\Support\Facades\Queue::class,
+        'RateLimiter'  => Illuminate\Support\Facades\RateLimiter::class,
         'Redirect'     => Illuminate\Support\Facades\Redirect::class,
-        'Redis'        => Illuminate\Support\Facades\Redis::class,
+        // 'Redis'        => Illuminate\Support\Facades\Redis::class,
         'Request'      => Illuminate\Support\Facades\Request::class,
         'Response'     => Illuminate\Support\Facades\Response::class,
         'Route'        => Illuminate\Support\Facades\Route::class,
@@ -180,6 +181,8 @@ return [
         'URL'          => Illuminate\Support\Facades\URL::class,
         'Validator'    => Illuminate\Support\Facades\Validator::class,
         'View'         => Illuminate\Support\Facades\View::class,
+
+        // Laravel Packages
         'Socialite'    => Laravel\Socialite\Facades\Socialite::class,
 
         // Third Party
index 88c22e70aca0760315963f942422adf6d2f8c511..1e1a9d3507c737cf0ff7284cd52d97325620efac 100644 (file)
@@ -10,7 +10,6 @@
 
 return [
 
-    // Method of authentication to use
     // Options: standard, ldap, saml2, oidc
     'method' => env('AUTH_METHOD', 'standard'),
 
@@ -45,7 +44,7 @@ return [
             'provider' => 'external',
         ],
         'api' => [
-            'driver' => 'api-token',
+            'driver'   => 'api-token',
         ],
     ],
 
@@ -58,10 +57,16 @@ return [
             'driver' => 'eloquent',
             'model'  => \BookStack\Auth\User::class,
         ],
+
         'external' => [
             'driver' => 'external-users',
             'model'  => \BookStack\Auth\User::class,
         ],
+
+        // 'users' => [
+        //     'driver' => 'database',
+        //     'table' => 'users',
+        // ],
     ],
 
     // Resetting Passwords
@@ -78,4 +83,10 @@ return [
         ],
     ],
 
+    // Password Confirmation Timeout
+    // Here you may define the amount of seconds before a password confirmation
+    // times out and the user is prompted to re-enter their password via the
+    // confirmation screen. By default, the timeout lasts for three hours.
+    'password_timeout' => 10800,
+
 ];
index 5e929d3730faa5fd4e53f95a056782937531c981..be0d7376c7fc7763c64709131c4671925ae89580 100644 (file)
@@ -1,51 +1,79 @@
 <?php
 
 /**
- * Broadcasting configuration options.
+ * Caching configuration options.
  *
  * Changes to these config files are not supported by BookStack and may break upon updates.
  * Configuration should be altered via the `.env` file or environment variables.
  * Do not edit this file unless you're happy to maintain any changes yourself.
  */
 
+// MEMCACHED - Split out configuration into an array
+if (env('CACHE_DRIVER') === 'memcached') {
+    $memcachedServerKeys = ['host', 'port', 'weight'];
+    $memcachedServers = explode(',', trim(env('MEMCACHED_SERVERS', '127.0.0.1:11211:100'), ','));
+    foreach ($memcachedServers as $index => $memcachedServer) {
+        $memcachedServerDetails = explode(':', $memcachedServer);
+        if (count($memcachedServerDetails) < 2) {
+            $memcachedServerDetails[] = '11211';
+        }
+        if (count($memcachedServerDetails) < 3) {
+            $memcachedServerDetails[] = '100';
+        }
+        $memcachedServers[$index] = array_combine($memcachedServerKeys, $memcachedServerDetails);
+    }
+}
+
 return [
 
-    // Default Broadcaster
-    // This option controls the default broadcaster that will be used by the
-    // framework when an event needs to be broadcast. This can be set to
-    // any of the connections defined in the "connections" array below.
-    'default' => env('BROADCAST_DRIVER', 'pusher'),
-
-    // Broadcast Connections
-    // Here you may define all of the broadcast connections that will be used
-    // to broadcast events to other systems or over websockets. Samples of
-    // each available type of connection are provided inside this array.
-    'connections' => [
-
-        'pusher' => [
-            'driver'  => 'pusher',
-            'key'     => env('PUSHER_APP_KEY'),
-            'secret'  => env('PUSHER_APP_SECRET'),
-            'app_id'  => env('PUSHER_APP_ID'),
-            'options' => [
-                'cluster' => env('PUSHER_APP_CLUSTER'),
-                'useTLS'  => true,
-            ],
+    // Default cache store to use
+    // Can be overridden at cache call-time
+    'default' => env('CACHE_DRIVER', 'file'),
+
+    // Available caches stores
+    'stores' => [
+
+        'apc' => [
+            'driver' => 'apc',
         ],
 
-        'redis' => [
-            'driver'     => 'redis',
-            'connection' => 'default',
+        'array' => [
+            'driver'    => 'array',
+            'serialize' => false,
+        ],
+
+        'database' => [
+            'driver'          => 'database',
+            'table'           => 'cache',
+            'connection'      => null,
+            'lock_connection' => null,
         ],
 
-        'log' => [
-            'driver' => 'log',
+        'file' => [
+            'driver' => 'file',
+            'path'   => storage_path('framework/cache'),
         ],
 
-        'null' => [
-            'driver' => 'null',
+        'memcached' => [
+            'driver'  => 'memcached',
+            'servers' => env('CACHE_DRIVER') === 'memcached' ? $memcachedServers : [],
+            'options' => [],
+        ],
+
+        'redis' => [
+            'driver'          => 'redis',
+            'connection'      => 'default',
+            'lock_connection' => 'default',
+        ],
+
+        'octane' => [
+            'driver' => 'octane',
         ],
 
     ],
 
+    // Cache key prefix
+    // Used to prevent collisions in shared cache systems.
+    'prefix' => env('CACHE_PREFIX', 'bookstack_cache'),
+
 ];
index f9b7ed1d20ecb9ff295f6bc94ce7657583b778ee..6fd4807da3341c2b8a3f5a2c70faad7a4e2bdecc 100644 (file)
@@ -1,36 +1,36 @@
 <?php
 
-/**
- * Caching configuration options.
- *
- * Changes to these config files are not supported by BookStack and may break upon updates.
- * Configuration should be altered via the `.env` file or environment variables.
- * Do not edit this file unless you're happy to maintain any changes yourself.
- */
-
-// MEMCACHED - Split out configuration into an array
-if (env('CACHE_DRIVER') === 'memcached') {
-    $memcachedServerKeys = ['host', 'port', 'weight'];
-    $memcachedServers = explode(',', trim(env('MEMCACHED_SERVERS', '127.0.0.1:11211:100'), ','));
-    foreach ($memcachedServers as $index => $memcachedServer) {
-        $memcachedServerDetails = explode(':', $memcachedServer);
-        if (count($memcachedServerDetails) < 2) {
-            $memcachedServerDetails[] = '11211';
-        }
-        if (count($memcachedServerDetails) < 3) {
-            $memcachedServerDetails[] = '100';
-        }
-        $memcachedServers[$index] = array_combine($memcachedServerKeys, $memcachedServerDetails);
-    }
-}
+use Illuminate\Support\Str;
 
 return [
 
-    // Default cache store to use
-    // Can be overridden at cache call-time
+    /*
+    |--------------------------------------------------------------------------
+    | Default Cache Store
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the default cache connection that gets used while
+    | using this caching library. This connection is used when another is
+    | not explicitly specified when executing a given caching function.
+    |
+    */
+
     'default' => env('CACHE_DRIVER', 'file'),
 
-    // Available caches stores
+    /*
+    |--------------------------------------------------------------------------
+    | Cache Stores
+    |--------------------------------------------------------------------------
+    |
+    | Here you may define all of the cache "stores" for your application as
+    | well as their drivers. You may even define multiple stores for the
+    | same cache driver to group types of items stored in your caches.
+    |
+    | Supported drivers: "apc", "array", "database", "file",
+    |         "memcached", "redis", "dynamodb", "octane", "null"
+    |
+    */
+
     'stores' => [
 
         'apc' => [
@@ -38,13 +38,15 @@ return [
         ],
 
         'array' => [
-            'driver' => 'array',
+            'driver'    => 'array',
+            'serialize' => false,
         ],
 
         'database' => [
-            'driver'     => 'database',
-            'table'      => 'cache',
-            'connection' => null,
+            'driver'          => 'database',
+            'table'           => 'cache',
+            'connection'      => null,
+            'lock_connection' => null,
         ],
 
         'file' => [
@@ -53,19 +55,50 @@ return [
         ],
 
         'memcached' => [
-            'driver'  => 'memcached',
+            'driver'        => 'memcached',
+            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
+            'sasl'          => [
+                env('MEMCACHED_USERNAME'),
+                env('MEMCACHED_PASSWORD'),
+            ],
+            'options' => [
+                // Memcached::OPT_CONNECT_TIMEOUT => 2000,
+            ],
             'servers' => env('CACHE_DRIVER') === 'memcached' ? $memcachedServers : [],
         ],
 
         'redis' => [
-            'driver'     => 'redis',
-            'connection' => 'default',
+            'driver'          => 'redis',
+            'connection'      => 'default',
+            'lock_connection' => 'default',
+        ],
+
+        'dynamodb' => [
+            'driver'   => 'dynamodb',
+            'key'      => env('AWS_ACCESS_KEY_ID'),
+            'secret'   => env('AWS_SECRET_ACCESS_KEY'),
+            'region'   => env('AWS_DEFAULT_REGION', 'us-east-1'),
+            'table'    => env('DYNAMODB_CACHE_TABLE', 'cache'),
+            'endpoint' => env('DYNAMODB_ENDPOINT'),
+        ],
+
+        'octane' => [
+            'driver' => 'octane',
         ],
 
     ],
 
-    // Cache key prefix
-    // Used to prevent collisions in shared cache systems.
-    'prefix' => env('CACHE_PREFIX', 'bookstack_cache'),
+    /*
+    |--------------------------------------------------------------------------
+    | Cache Key Prefix
+    |--------------------------------------------------------------------------
+    |
+    | When utilizing a RAM based store such as APC or Memcached, there might
+    | be other applications utilizing the same cache. So, we'll specify a
+    | value to get prefixed to all our keys so we can avoid collisions.
+    |
+    */
+
+    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'),
 
 ];
diff --git a/app/Config/clockwork.php b/app/Config/clockwork.php
new file mode 100644 (file)
index 0000000..ff9929d
--- /dev/null
@@ -0,0 +1,415 @@
+<?php
+
+return [
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Enable Clockwork
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork is enabled by default only when your application is in debug mode. Here you can explicitly enable or
+       | disable Clockwork. When disabled, no data is collected and the api and web ui are inactive.
+       |
+       */
+
+       'enable' => env('CLOCKWORK_ENABLE', false),
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Features
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | You can enable or disable various Clockwork features here. Some features have additional settings (eg. slow query
+       | threshold for database queries).
+       |
+       */
+
+       'features' => [
+
+               // Cache usage stats and cache queries including results
+               'cache' => [
+                       'enabled' => true,
+
+                       // Collect cache queries
+                       'collect_queries' => true,
+
+                       // Collect values from cache queries (high performance impact with a very high number of queries)
+                       'collect_values' => false
+               ],
+
+               // Database usage stats and queries
+               'database' => [
+                       'enabled' => true,
+
+                       // Collect database queries (high performance impact with a very high number of queries)
+                       'collect_queries' => true,
+
+                       // Collect details of models updates (high performance impact with a lot of model updates)
+                       'collect_models_actions' => true,
+
+                       // Collect details of retrieved models (very high performance impact with a lot of models retrieved)
+                       'collect_models_retrieved' => false,
+
+                       // Query execution time threshold in miliseconds after which the query will be marked as slow
+                       'slow_threshold' => null,
+
+                       // Collect only slow database queries
+                       'slow_only' => false,
+
+                       // Detect and report duplicate (N+1) queries
+                       'detect_duplicate_queries' => false
+               ],
+
+               // Dispatched events
+               'events' => [
+                       'enabled' => true,
+
+                       // Ignored events (framework events are ignored by default)
+                       'ignored_events' => [
+                               // App\Events\UserRegistered::class,
+                               // 'user.registered'
+                       ],
+               ],
+
+               // Laravel log (you can still log directly to Clockwork with laravel log disabled)
+               'log' => [
+                       'enabled' => true
+               ],
+
+               // Sent notifications
+               'notifications' => [
+                       'enabled' => true,
+               ],
+
+               // Performance metrics
+               'performance' => [
+                       // Allow collecting of client metrics. Requires separate clockwork-browser npm package.
+                       'client_metrics' => true
+               ],
+
+               // Dispatched queue jobs
+               'queue' => [
+                       'enabled' => true
+               ],
+
+               // Redis commands
+               'redis' => [
+                       'enabled' => true
+               ],
+
+               // Routes list
+               'routes' => [
+                       'enabled' => false,
+
+                       // Collect only routes from particular namespaces (only application routes by default)
+                       'only_namespaces' => [ 'App' ]
+               ],
+
+               // Rendered views
+               'views' => [
+                       'enabled' => true,
+
+                       // Collect views including view data (high performance impact with a high number of views)
+                       'collect_data' => false,
+
+                       // Use Twig profiler instead of Laravel events for apps using laravel-twigbridge (more precise, but does
+                       // not support collecting view data)
+                       'use_twig_profiler' => false
+               ]
+
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Enable web UI
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork comes with a web UI accessibla via http://your.app/clockwork. Here you can enable or disable this
+       | feature. You can also set a custom path for the web UI.
+       |
+       */
+
+       'web' => true,
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Enable toolbar
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork can show a toolbar with basic metrics on all responses. Here you can enable or disable this feature.
+       | Requires a separate clockwork-browser npm library.
+       | For installation instructions see https://underground.works/clockwork/#docs-viewing-data
+       |
+       */
+
+       'toolbar' => true,
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | HTTP requests collection
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork collects data about HTTP requests to your app. Here you can choose which requests should be collected.
+       |
+       */
+
+       'requests' => [
+               // With on-demand mode enabled, Clockwork will only profile requests when the browser extension is open or you
+               // manually pass a "clockwork-profile" cookie or get/post data key.
+               // Optionally you can specify a "secret" that has to be passed as the value to enable profiling.
+               'on_demand' => false,
+
+               // Collect only errors (requests with HTTP 4xx and 5xx responses)
+               'errors_only' => false,
+
+               // Response time threshold in miliseconds after which the request will be marked as slow
+               'slow_threshold' => null,
+
+               // Collect only slow requests
+               'slow_only' => false,
+
+               // Sample the collected requests (eg. set to 100 to collect only 1 in 100 requests)
+               'sample' => false,
+
+               // List of URIs that should not be collected
+               'except' => [
+                       '/horizon/.*', // Laravel Horizon requests
+                       '/telescope/.*', // Laravel Telescope requests
+                       '/_debugbar/.*', // Laravel DebugBar requests
+               ],
+
+               // List of URIs that should be collected, any other URI will not be collected if not empty
+               'only' => [
+                       // '/api/.*'
+               ],
+
+               // Don't collect OPTIONS requests, mostly used in the CSRF pre-flight requests and are rarely of interest
+               'except_preflight' => true
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Artisan commands collection
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork can collect data about executed artisan commands. Here you can enable and configure which commands
+       | should be collected.
+       |
+       */
+
+       'artisan' => [
+               // Enable or disable collection of executed Artisan commands
+               'collect' => false,
+
+               // List of commands that should not be collected (built-in commands are not collected by default)
+               'except' => [
+                       // 'inspire'
+               ],
+
+               // List of commands that should be collected, any other command will not be collected if not empty
+               'only' => [
+                       // 'inspire'
+               ],
+
+               // Enable or disable collection of command output
+               'collect_output' => false,
+
+               // Enable or disable collection of built-in Laravel commands
+               'except_laravel_commands' => true
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Queue jobs collection
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork can collect data about executed queue jobs. Here you can enable and configure which queue jobs should
+       | be collected.
+       |
+       */
+
+       'queue' => [
+               // Enable or disable collection of executed queue jobs
+               'collect' => false,
+
+               // List of queue jobs that should not be collected
+               'except' => [
+                       // App\Jobs\ExpensiveJob::class
+               ],
+
+               // List of queue jobs that should be collected, any other queue job will not be collected if not empty
+               'only' => [
+                       // App\Jobs\BuggyJob::class
+               ]
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Tests collection
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork can collect data about executed tests. Here you can enable and configure which tests should be
+       | collected.
+       |
+       */
+
+       'tests' => [
+               // Enable or disable collection of ran tests
+               'collect' => false,
+
+               // List of tests that should not be collected
+               'except' => [
+                       // Tests\Unit\ExampleTest::class
+               ]
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Enable data collection when Clockwork is disabled
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | You can enable this setting to collect data even when Clockwork is disabled. Eg. for future analysis.
+       |
+       */
+
+       'collect_data_always' => false,
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Metadata storage
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Configure how is the metadata collected by Clockwork stored. Two options are available:
+       |   - files - A simple fast storage implementation storing data in one-per-request files.
+       |   - sql - Stores requests in a sql database. Supports MySQL, Postgresql, Sqlite and requires PDO.
+       |
+       */
+
+       'storage' => 'files',
+
+       // Path where the Clockwork metadata is stored
+       'storage_files_path' => storage_path('clockwork'),
+
+       // Compress the metadata files using gzip, trading a little bit of performance for lower disk usage
+       'storage_files_compress' => false,
+
+       // SQL database to use, can be a name of database configured in database.php or a path to a sqlite file
+       'storage_sql_database' => storage_path('clockwork.sqlite'),
+
+       // SQL table name to use, the table is automatically created and udpated when needed
+       'storage_sql_table' => 'clockwork',
+
+       // Maximum lifetime of collected metadata in minutes, older requests will automatically be deleted, false to disable
+       'storage_expiration' => 60 * 24 * 7,
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Authentication
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork can be configured to require authentication before allowing access to the collected data. This might be
+       | useful when the application is publicly accessible. Setting to true will enable a simple authentication with a
+       | pre-configured password. You can also pass a class name of a custom implementation.
+       |
+       */
+
+       'authentication' => false,
+
+       // Password for the simple authentication
+       'authentication_password' => 'VerySecretPassword',
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Stack traces collection
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork can collect stack traces for log messages and certain data like database queries. Here you can set
+       | whether to collect stack traces, limit the number of collected frames and set further configuration. Collecting
+       | long stack traces considerably increases metadata size.
+       |
+       */
+
+       'stack_traces' => [
+               // Enable or disable collecting of stack traces
+               'enabled' => true,
+
+               // Limit the number of frames to be collected
+               'limit' => 10,
+
+               // List of vendor names to skip when determining caller, common vendors are automatically added
+               'skip_vendors' => [
+                       // 'phpunit'
+               ],
+
+               // List of namespaces to skip when determining caller
+               'skip_namespaces' => [
+                       // 'Laravel'
+               ],
+
+               // List of class names to skip when determining caller
+               'skip_classes' => [
+                       // App\CustomLog::class
+               ]
+
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Serialization
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork serializes the collected data to json for storage and transfer. Here you can configure certain aspects
+       | of serialization. Serialization has a large effect on the cpu time and memory usage.
+       |
+       */
+
+       // Maximum depth of serialized multi-level arrays and objects
+       'serialization_depth' => 10,
+
+       // A list of classes that will never be serialized (eg. a common service container class)
+       'serialization_blackbox' => [
+               \Illuminate\Container\Container::class,
+               \Illuminate\Foundation\Application::class,
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Register helpers
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork comes with a "clock" global helper function. You can use this helper to quickly log something and to
+       | access the Clockwork instance.
+       |
+       */
+
+       'register_helpers' => true,
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Send Headers for AJAX request
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | When trying to collect data the AJAX method can sometimes fail if it is missing required headers. For example, an
+       | API might require a version number using Accept headers to route the HTTP request to the correct codebase.
+       |
+       */
+
+       'headers' => [
+               // 'Accept' => 'application/vnd.com.whatever.v1+json',
+       ],
+
+       /*
+       |------------------------------------------------------------------------------------------------------------------
+       | Server-Timing
+       |------------------------------------------------------------------------------------------------------------------
+       |
+       | Clockwork supports the W3C Server Timing specification, which allows for collecting a simple performance metrics
+       | in a cross-browser way. Eg. in Chrome, your app, database and timeline event timings will be shown in the Dev
+       | Tools network tab. This setting specifies the max number of timeline events that will be sent. Setting to false
+       | will disable the feature.
+       |
+       */
+
+       'server_timing' => 10
+
+];
index a6b05c8c4aa3644f14030afd781ef6f7e56866d9..4d59ba9192dcd06840b5c31a39f09b15a84422e7 100644 (file)
@@ -25,9 +25,6 @@ return [
     // file storage service, such as s3, to store publicly accessible assets.
     'url' => env('STORAGE_URL', false),
 
-    // Default Cloud Filesystem Disk
-    'cloud' => 's3',
-
     // Available filesystem disks
     // Only local, local_secure & s3 are supported by BookStack
     'disks' => [
@@ -35,6 +32,7 @@ return [
         'local' => [
             'driver' => 'local',
             'root'   => public_path(),
+            'visibility' => 'public',
         ],
 
         'local_secure_attachments' => [
@@ -45,6 +43,7 @@ return [
         'local_secure_images' => [
             'driver' => 'local',
             'root'   => storage_path('uploads/images/'),
+            'visibility' => 'public',
         ],
 
         's3' => [
@@ -59,4 +58,12 @@ return [
 
     ],
 
+    // Symbolic Links
+    // Here you may configure the symbolic links that will be created when the
+    // `storage:link` Artisan command is executed. The array keys should be
+    // the locations of the links and the values should be their targets.
+    'links' => [
+        public_path('storage') => storage_path('app/public'),
+    ],
+
 ];
index 220aa0607044482d1b213d6c4f3ec34a911596fe..2b80147c8c7ef5a3d086eeafbce31abb1a4cff49 100644 (file)
@@ -49,16 +49,9 @@ return [
             'days'   => 7,
         ],
 
-        'slack' => [
-            'driver'   => 'slack',
-            'url'      => env('LOG_SLACK_WEBHOOK_URL'),
-            'username' => 'Laravel Log',
-            'emoji'    => ':boom:',
-            'level'    => 'critical',
-        ],
-
         'stderr' => [
             'driver'  => 'monolog',
+            'level'   => 'debug',
             'handler' => StreamHandler::class,
             'with'    => [
                 'stream' => 'php://stderr',
@@ -99,6 +92,10 @@ return [
         'testing' => [
             'driver' => 'testing',
         ],
+
+        'emergency' => [
+            'path' => storage_path('logs/laravel.log'),
+        ],
     ],
 
     // Failed Login Message
index 34b28fe2a6b87b20059b7fc0aecfe1fff3f1a1e0..b223e382a515c6723a9c52be76d10a04494eb841 100644 (file)
@@ -11,6 +11,8 @@
 return [
 
     // Mail driver to use.
+    // From Laravel 7+ this is MAIL_MAILER in laravel.
+    // Kept as MAIL_DRIVER in BookStack to prevent breaking change.
     // Options: smtp, sendmail, log, array
     'driver' => env('MAIL_DRIVER', 'smtp'),
 
index 0c79fcdd20ce3a51e876cf0cc30f46a2f4b76482..0f5ee3ce594432d563527cf577948448c367a8a7 100644 (file)
@@ -22,25 +22,29 @@ return [
         ],
 
         'database' => [
-            'driver'      => 'database',
-            'table'       => 'jobs',
-            'queue'       => 'default',
-            'retry_after' => 90,
+            'driver'       => 'database',
+            'table'        => 'jobs',
+            'queue'        => 'default',
+            'retry_after'  => 90,
+            'after_commit' => false,
         ],
 
         'redis' => [
-            'driver'      => 'redis',
-            'connection'  => 'default',
-            'queue'       => env('REDIS_QUEUE', 'default'),
-            'retry_after' => 90,
-            'block_for'   => null,
+            'driver'       => 'redis',
+            'connection'   => 'default',
+            'queue'        => env('REDIS_QUEUE', 'default'),
+            'retry_after'  => 90,
+            'block_for'    => null,
+            'after_commit' => false,
         ],
 
     ],
 
     // Failed queue job logging
     'failed' => [
-        'database' => 'mysql', 'table' => 'failed_jobs',
+        'driver'   => 'database-uuids',
+        'database' => 'mysql',
+        'table'    => 'failed_jobs',
     ],
 
 ];
index 1e4591bd75d3f385e5a4cffe217b5f8c7f643f2c..982df5c90a703f588b96045ae2a40bbb87fa04df 100644 (file)
@@ -4,6 +4,7 @@ namespace BookStack\Entities\Models;
 
 use BookStack\Uploads\Image;
 use Exception;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -21,6 +22,8 @@ use Illuminate\Support\Collection;
  */
 class Book extends Entity implements HasCoverImage
 {
+    use HasFactory;
+
     public $searchFactor = 2;
 
     protected $fillable = ['name', 'description'];
index f427baf49fcea4c0bb616eb9270302ffd6f85728..8fe9dbe4159b0a3bfb05203be31bd27edf2d7335 100644 (file)
@@ -3,11 +3,14 @@
 namespace BookStack\Entities\Models;
 
 use BookStack\Uploads\Image;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 
 class Bookshelf extends Entity implements HasCoverImage
 {
+    use HasFactory;
+
     protected $table = 'bookshelves';
 
     public $searchFactor = 3;
index f6f8427a3a0050e6908250cab0be9fdf9491878d..abf496b44b38e9d3c300f1389b45e62e7c68cf45 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace BookStack\Entities\Models;
 
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Support\Collection;
 
 /**
@@ -12,6 +13,8 @@ use Illuminate\Support\Collection;
  */
 class Chapter extends BookChild
 {
+    use HasFactory;
+
     public $searchFactor = 1.3;
 
     protected $fillable = ['name', 'description', 'priority', 'book_id'];
index 764c4a1e30ea4cb4b713231c88ae606942dcea06..dab89ce37427e82d372ced42cc5bcd2090322e89 100644 (file)
@@ -32,7 +32,7 @@ class Deletion extends Model implements Loggable
     /**
      * Create a new deletion record for the provided entity.
      */
-    public static function createForEntity(Entity $entity): Deletion
+    public static function createForEntity(Entity $entity): self
     {
         $record = (new self())->forceFill([
             'deleted_by'     => user()->id,
index a02926c4dee341aa6d89d16f94fb425434c95bbb..f5f9d91f0c8be8850ea5fe563195318439747e96 100644 (file)
@@ -106,7 +106,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
      * Compares this entity to another given entity.
      * Matches by comparing class and id.
      */
-    public function matches(Entity $entity): bool
+    public function matches(self $entity): bool
     {
         return [get_class($this), $this->id] === [get_class($entity), $entity->id];
     }
@@ -114,7 +114,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
     /**
      * Checks if the current entity matches or contains the given.
      */
-    public function matchesOrContains(Entity $entity): bool
+    public function matchesOrContains(self $entity): bool
     {
         if ($this->matches($entity)) {
             return true;
@@ -270,7 +270,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
      * This is the "static" parent and does not include dynamic
      * relations such as shelves to books.
      */
-    public function getParent(): ?Entity
+    public function getParent(): ?self
     {
         if ($this instanceof Page) {
             return $this->chapter_id ? $this->chapter()->withTrashed()->first() : $this->book()->withTrashed()->first();
@@ -300,7 +300,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
     }
 
     /**
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function refreshSlug(): string
     {
@@ -310,7 +310,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
     }
 
     /**
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function favourites(): MorphMany
     {
index 601e9630db07eec6fef204c7a6b9fac7f52c7e48..fbe0db41b4cbfc48952604a6cf7827b9943585a4 100644 (file)
@@ -6,6 +6,7 @@ use BookStack\Entities\Tools\PageContent;
 use BookStack\Uploads\Attachment;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\HasMany;
 use Permissions;
@@ -25,6 +26,8 @@ use Permissions;
  */
 class Page extends BookChild
 {
+    use HasFactory;
+
     public static $listAttributes = ['name', 'id', 'slug', 'book_id', 'chapter_id', 'draft', 'template', 'text', 'created_at', 'updated_at', 'priority'];
     public static $contentAttributes = ['name', 'id', 'slug', 'book_id', 'chapter_id', 'draft', 'template', 'html', 'text', 'created_at', 'updated_at', 'priority'];
 
@@ -129,7 +132,7 @@ class Page extends BookChild
     /**
      * Get this page for JSON display.
      */
-    public function forJsonDisplay(): Page
+    public function forJsonDisplay(): self
     {
         $refreshed = $this->refresh()->unsetRelations()->load(['tags', 'createdBy', 'updatedBy', 'ownedBy']);
         $refreshed->setHidden(array_diff($refreshed->getHidden(), ['html', 'markdown']));
index 7913e096979e63174bfe6a36e3e104e31f8c9776..5ce64cc65048c38cc142665165bf3073e7a0c3a0 100644 (file)
@@ -29,7 +29,7 @@ class SearchOptions
     /**
      * Create a new instance from a search string.
      */
-    public static function fromString(string $search): SearchOptions
+    public static function fromString(string $search): self
     {
         $decoded = static::decode($search);
         $instance = new static();
@@ -45,7 +45,7 @@ class SearchOptions
      * Will look for a classic string term and use that
      * Otherwise we'll use the details from an advanced search form.
      */
-    public static function fromRequest(Request $request): SearchOptions
+    public static function fromRequest(Request $request): self
     {
         if (!$request->has('search') && !$request->has('term')) {
             return static::fromString('');
index ca592755b7e6ec716971b46f2fb9ab05c5c028ec..df566eb0b30b1769658659205e8a214e7fce61dc 100644 (file)
@@ -196,7 +196,7 @@ class SearchRunner
             $escapedOperators[] = preg_quote($operator);
         }
 
-        return join('|', $escapedOperators);
+        return implode('|', $escapedOperators);
     }
 
     /**
index 2d40f44769127062ea294a7ba12603cf3ad6b05f..3b4ad4a4da54ae46e003a004988c7aacc24fd803 100644 (file)
@@ -9,6 +9,7 @@ use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Illuminate\Validation\ValidationException;
 use Symfony\Component\HttpKernel\Exception\HttpException;
+use Throwable;
 
 class Handler extends ExceptionHandler
 {
@@ -27,6 +28,7 @@ class Handler extends ExceptionHandler
      * @var array
      */
     protected $dontFlash = [
+        'current_password',
         'password',
         'password_confirmation',
     ];
@@ -34,13 +36,13 @@ class Handler extends ExceptionHandler
     /**
      * Report or log an exception.
      *
-     * @param Exception $exception
+     * @param \Throwable $exception
      *
-     * @throws Exception
+     * @throws \Throwable
      *
      * @return void
      */
-    public function report(Exception $exception)
+    public function report(Throwable $exception)
     {
         parent::report($exception);
     }
@@ -53,7 +55,7 @@ class Handler extends ExceptionHandler
      *
      * @return \Illuminate\Http\Response
      */
-    public function render($request, Exception $e)
+    public function render($request, Throwable $e)
     {
         if ($this->isApiRequest($request)) {
             return $this->renderApiException($e);
index ef9a441010f687ba66325fb061a1237ae253e737..8e748a21dc77ed17301610d6f6e1f877de4ac53e 100644 (file)
@@ -23,7 +23,7 @@ class NotifyException extends Exception implements Responsable
     /**
      * Send the response for this type of exception.
      *
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function toResponse($request)
     {
index 33c1471f2849b69fd0ee667ca81d2e372700af02..f446442d058dbcb7e383879208c30ea239970f5c 100644 (file)
@@ -20,7 +20,7 @@ class PrettyException extends Exception implements Responsable
     /**
      * Render a response for when this exception occurs.
      *
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function toResponse($request)
     {
index d10a6da5e15902e28fdcfe36f1e3e72ae687e76a..b9aadb03f33e3aaa4a3a7c03d46916ce511aaade 100644 (file)
@@ -23,7 +23,7 @@ class StoppedAuthenticationException extends \Exception implements Responsable
     }
 
     /**
-     * @inheritdoc
+     * {@inheritdoc}
      */
     public function toResponse($request)
     {
index a94a6180304d9abe8f909c7a4ea020cddbb5d205..ddb15a7aadce276d48ccf06cd282d06f8075402f 100644 (file)
@@ -176,7 +176,7 @@ class PageController extends Controller
     {
         $page = $this->pageRepo->getById($pageId);
         $page->setHidden(array_diff($page->getHidden(), ['html', 'markdown']));
-        $page->addHidden(['book']);
+        $page->makeHidden(['book']);
 
         return response()->json($page);
     }
index 7a09493afc80488ca3d09832662e90e85a81ce67..91dbdd9634c2bfa02624a69b2f0e188726ef83f8 100644 (file)
@@ -11,7 +11,7 @@ class Kernel extends HttpKernel
      * These middleware are run during every request to your application.
      */
     protected $middleware = [
-        \BookStack\Http\Middleware\CheckForMaintenanceMode::class,
+        \BookStack\Http\Middleware\PreventRequestsDuringMaintenance::class,
         \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
         \BookStack\Http\Middleware\TrimStrings::class,
         \BookStack\Http\Middleware\TrustProxies::class,
similarity index 58%
rename from app/Http/Middleware/CheckForMaintenanceMode.php
rename to app/Http/Middleware/PreventRequestsDuringMaintenance.php
index 0c76838367e3adc9bb7336a6938b24fb0dfdda45..dfb9592e106ec3d6f0f3ea42d65cf8dbe585ef01 100644 (file)
@@ -2,9 +2,9 @@
 
 namespace BookStack\Http\Middleware;
 
-use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
+use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
 
-class CheckForMaintenanceMode extends Middleware
+class PreventRequestsDuringMaintenance extends Middleware
 {
     /**
      * The URIs that should be reachable while maintenance mode is enabled.
index 6853809ea9d03b5db7a74a817c6f256ef00d832a..76e64a3b9d6660eece36bdd5762bdd0cac40f202 100644 (file)
@@ -2,45 +2,31 @@
 
 namespace BookStack\Http\Middleware;
 
+use BookStack\Providers\RouteServiceProvider;
 use Closure;
-use Illuminate\Contracts\Auth\Guard;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 class RedirectIfAuthenticated
 {
-    /**
-     * The Guard implementation.
-     *
-     * @var Guard
-     */
-    protected $auth;
-
-    /**
-     * Create a new filter instance.
-     *
-     * @param Guard $auth
-     *
-     * @return void
-     */
-    public function __construct(Guard $auth)
-    {
-        $this->auth = $auth;
-    }
-
     /**
      * Handle an incoming request.
      *
-     * @param \Illuminate\Http\Request $request
-     * @param \Closure                 $next
-     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @param  string|null  ...$guards
      * @return mixed
      */
-    public function handle($request, Closure $next)
+    public function handle(Request $request, Closure $next, ...$guards)
     {
-        $requireConfirmation = setting('registration-confirmation');
-        if ($this->auth->check() && (!$requireConfirmation || ($requireConfirmation && $this->auth->user()->email_confirmed))) {
-            return redirect('/');
+        $guards = empty($guards) ? [null] : $guards;
+
+        foreach ($guards as $guard) {
+            if (Auth::guard($guard)->check()) {
+                return redirect(RouteServiceProvider::HOME);
+            }
         }
 
         return $next($request);
     }
-}
+}
\ No newline at end of file
diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php
new file mode 100644 (file)
index 0000000..7bd89ee
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+namespace BookStack\Http\Middleware;
+
+use Illuminate\Http\Middleware\TrustHosts as Middleware;
+
+class TrustHosts extends Middleware
+{
+    /**
+     * Get the host patterns that should be trusted.
+     *
+     * @return array
+     */
+    public function hosts()
+    {
+        return [
+            $this->allSubdomainsOfApplicationUrl(),
+        ];
+    }
+}
index 3f8b32eb2cbe7105abde5c72487cbaaceccde723..0fe0247b829e8b4412dcbd42888c1f05bac60708 100644 (file)
@@ -3,7 +3,7 @@
 namespace BookStack\Http\Middleware;
 
 use Closure;
-use Fideloper\Proxy\TrustProxies as Middleware;
+use Illuminate\Http\Middleware\TrustProxies as Middleware;
 use Illuminate\Http\Request;
 
 class TrustProxies extends Middleware
@@ -20,7 +20,7 @@ class TrustProxies extends Middleware
      *
      * @var int
      */
-    protected $headers = Request::HEADER_X_FORWARDED_ALL;
+    protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB;
 
     /**
      * Handle the request, Set the correct user-configured proxy information.
index 34a3a290f0c0cf200537217abf0f0d677c38a5d3..fc712632e9b876117f605d36d5bd0971f4290468 100644 (file)
@@ -16,6 +16,7 @@ use BookStack\Util\CspService;
 use GuzzleHttp\Client;
 use Illuminate\Contracts\Cache\Repository;
 use Illuminate\Database\Eloquent\Relations\Relation;
+use Illuminate\Pagination\Paginator;
 use Illuminate\Support\Facades\Blade;
 use Illuminate\Support\Facades\Schema;
 use Illuminate\Support\Facades\URL;
@@ -60,6 +61,9 @@ class AppServiceProvider extends ServiceProvider
 
         // View Composers
         View::composer('entities.breadcrumbs', BreadcrumbsViewComposer::class);
+
+        // Set paginator to use bootstrap-style pagination
+        Paginator::useBootstrap();
     }
 
     /**
index a826185d82de7bdfa49a7db17bbd9b4ac6c3c84b..659843ce33bff2b022b70a121013accd15bd836f 100644 (file)
@@ -30,6 +30,5 @@ class EventServiceProvider extends ServiceProvider
      */
     public function boot()
     {
-        parent::boot();
     }
 }
index b60443a452895fc19a8c4a5dcffdfeb03f339b52..ac3307f2ded53c4799d8e8d1dcef465bd008da37 100644 (file)
@@ -2,11 +2,23 @@
 
 namespace BookStack\Providers;
 
+use Illuminate\Cache\RateLimiting\Limit;
 use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\RateLimiter;
 use Illuminate\Support\Facades\Route;
 
 class RouteServiceProvider extends ServiceProvider
 {
+    /**
+     * The path to the "home" route for your application.
+     *
+     * This is used by Laravel authentication to redirect users after login.
+     *
+     * @var string
+     */
+    public const HOME = '/';
+
     /**
      * This namespace is applied to the controller routes in your routes file.
      *
@@ -14,7 +26,6 @@ class RouteServiceProvider extends ServiceProvider
      *
      * @var string
      */
-    protected $namespace = 'BookStack\Http\Controllers';
 
     /**
      * Define your route model bindings, pattern filters, etc.
@@ -23,18 +34,12 @@ class RouteServiceProvider extends ServiceProvider
      */
     public function boot()
     {
-        parent::boot();
-    }
+        $this->configureRateLimiting();
 
-    /**
-     * Define the routes for the application.
-     *
-     * @return void
-     */
-    public function map()
-    {
-        $this->mapWebRoutes();
-        $this->mapApiRoutes();
+        $this->routes(function () {
+            $this->mapWebRoutes();
+            $this->mapApiRoutes();
+        });
     }
 
     /**
@@ -71,4 +76,16 @@ class RouteServiceProvider extends ServiceProvider
             require base_path('routes/api.php');
         });
     }
+
+    /**
+     * Configure the rate limiters for the application.
+     *
+     * @return void
+     */
+    protected function configureRateLimiting()
+    {
+        RateLimiter::for('api', function (Request $request) {
+            return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
+        });
+    }
 }
index a470ec5346ccfc091642eee052d5e8022a28d40b..5e637246a66b25b04f6256b92f7b8e1fca37778f 100644 (file)
@@ -93,7 +93,7 @@ class Attachment extends Model
 
         return $permissionService->filterRelatedEntity(
             Page::class,
-            Attachment::query(),
+            self::query(),
             'attachments',
             'uploaded_to'
         );
index 4e0abc85b9a4d49128d4841cfc35548dff4dcb3b..bdf10f080fe99cd991f52bc0174e75cc4c5ac00f 100644 (file)
@@ -5,6 +5,7 @@ namespace BookStack\Uploads;
 use BookStack\Entities\Models\Page;
 use BookStack\Model;
 use BookStack\Traits\HasCreatorAndUpdater;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 
 /**
  * @property int    $id
@@ -18,6 +19,7 @@ use BookStack\Traits\HasCreatorAndUpdater;
  */
 class Image extends Model
 {
+    use HasFactory;
     use HasCreatorAndUpdater;
 
     protected $fillable = ['name'];
index addde9b7edec3708c1afe056d62b2924021dee16..07111d985a63439633ce28f5b1f4e1db64b03e34 100644 (file)
@@ -1,7 +1,10 @@
 {
     "name": "bookstackapp/bookstack",
     "description": "BookStack documentation platform",
-    "keywords": ["BookStack", "Documentation"],
+    "keywords": [
+        "BookStack",
+        "Documentation"
+    ],
     "license": "MIT",
     "type": "project",
     "require": {
         "bacon/bacon-qr-code": "^2.0",
         "barryvdh/laravel-dompdf": "^0.9.0",
         "barryvdh/laravel-snappy": "^0.4.8",
-        "doctrine/dbal": "^2.12.1",
-        "fideloper/proxy": "^4.4.1",
+        "doctrine/dbal": "^3.1",
         "filp/whoops": "^2.14",
-        "intervention/image": "^2.5.1",
-        "laravel/framework": "^6.20.33",
-        "laravel/socialite": "^5.1",
-        "league/commonmark": "^1.5",
+        "guzzlehttp/guzzle": "^7.4",
+        "intervention/image": "^2.7",
+        "laravel/framework": "^8.68",
+        "laravel/socialite": "^5.2",
+        "laravel/tinker": "^2.6",
+        "laravel/ui": "^3.3",
+        "league/commonmark": "^1.6",
         "league/flysystem-aws-s3-v3": "^1.0.29",
         "league/html-to-markdown": "^5.0.0",
         "league/oauth2-client": "^2.6",
-        "nunomaduro/collision": "^3.1",
         "onelogin/php-saml": "^4.0",
         "phpseclib/phpseclib": "~3.0",
         "pragmarx/google2fa": "^8.0",
-        "predis/predis": "^1.1.6",
+        "predis/predis": "^1.1",
         "socialiteproviders/discord": "^4.1",
         "socialiteproviders/gitlab": "^4.1",
         "socialiteproviders/microsoft-azure": "^5.0.1",
         "socialiteproviders/okta": "^4.1",
         "socialiteproviders/slack": "^4.1",
         "socialiteproviders/twitch": "^5.3",
-        "ssddanbrown/htmldiff": "^v1.0.1"
+        "ssddanbrown/htmldiff": "^1.0.1"
     },
     "require-dev": {
-        "barryvdh/laravel-debugbar": "^3.5.1",
-        "barryvdh/laravel-ide-helper": "^2.8.2",
-        "fakerphp/faker": "^1.13.0",
-        "mockery/mockery": "^1.3.3",
-        "phpunit/phpunit": "^9.5.3",
-        "symfony/dom-crawler": "^5.3"
+        "fakerphp/faker": "^1.16",
+        "itsgoingd/clockwork": "^5.1",
+        "mockery/mockery": "^1.4",
+        "phpunit/phpunit": "^9.5",
+        "symfony/dom-crawler": "^5.3",
+        "nunomaduro/collision": "^5.10"
     },
     "autoload": {
-        "classmap": [
-            "database/seeds",
-            "database/factories"
-        ],
         "psr-4": {
-            "BookStack\\": "app/"
+            "BookStack\\": "app/",
+            "Database\\Factories\\": "database/factories/",
+            "Database\\Seeders\\": "database/seeders/"
         },
-               "files": [
-                       "app/helpers.php"
-               ]
+        "files": [
+            "app/helpers.php"
+        ]
     },
     "autoload-dev": {
         "psr-4": {
         }
     },
     "scripts": {
+        "post-autoload-dump": [
+            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
+            "@php artisan package:discover --ansi"
+        ],
         "post-root-package-install": [
             "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
         ],
             "@php artisan cache:clear",
             "@php artisan view:clear"
         ],
-        "post-autoload-dump": [
-            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
-            "@php artisan package:discover --ansi"
-        ],
         "refresh-test-database": [
             "@php artisan migrate:refresh --database=mysql_testing",
             "@php artisan db:seed --class=DummyContentSeeder --database=mysql_testing"
index 9364f7b7cbca859111a1ef20fbcd5e1382465d2a..4323d89d5d80b2fb343679139cd84f55b1d86c0f 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "4780c46ffc4d1a09af810f62ca59e4a7",
+    "content-hash": "d7893ec647ed43e272a21c9c01a9b2cb",
     "packages": [
         {
             "name": "aws/aws-crt-php",
         },
         {
             "name": "aws/aws-sdk-php",
-            "version": "3.199.7",
+            "version": "3.200.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/aws/aws-sdk-php.git",
-                "reference": "fda176884d2952cffc7e67209470bff49609339c"
+                "reference": "9b3f45c51fe1d07845446675109bb0a8a98c806e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/fda176884d2952cffc7e67209470bff49609339c",
-                "reference": "fda176884d2952cffc7e67209470bff49609339c",
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/9b3f45c51fe1d07845446675109bb0a8a98c806e",
+                "reference": "9b3f45c51fe1d07845446675109bb0a8a98c806e",
                 "shasum": ""
             },
             "require": {
             "support": {
                 "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.199.7"
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.200.0"
             },
-            "time": "2021-10-29T18:25:02+00:00"
+            "time": "2021-11-04T18:42:25+00:00"
         },
         {
             "name": "bacon/bacon-qr-code",
             },
             "time": "2020-09-07T12:33:10+00:00"
         },
+        {
+            "name": "brick/math",
+            "version": "0.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/brick/math.git",
+                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
+                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
+                "vimeo/psalm": "4.9.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Brick\\Math\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Arbitrary-precision arithmetic library",
+            "keywords": [
+                "Arbitrary-precision",
+                "BigInteger",
+                "BigRational",
+                "arithmetic",
+                "bigdecimal",
+                "bignum",
+                "brick",
+                "math"
+            ],
+            "support": {
+                "issues": "https://github.com/brick/math/issues",
+                "source": "https://github.com/brick/math/tree/0.9.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/BenMorel",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/brick/math",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-08-15T20:50:18+00:00"
+        },
+        {
+            "name": "composer/package-versions-deprecated",
+            "version": "1.11.99.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/package-versions-deprecated.git",
+                "reference": "b174585d1fe49ceed21928a945138948cb394600"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600",
+                "reference": "b174585d1fe49ceed21928a945138948cb394600",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.1.0 || ^2.0",
+                "php": "^7 || ^8"
+            },
+            "replace": {
+                "ocramius/package-versions": "1.11.99"
+            },
+            "require-dev": {
+                "composer/composer": "^1.9.3 || ^2.0@dev",
+                "ext-zip": "^1.13",
+                "phpunit/phpunit": "^6.5 || ^7"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "PackageVersions\\Installer",
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PackageVersions\\": "src/PackageVersions"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
+            "support": {
+                "issues": "https://github.com/composer/package-versions-deprecated/issues",
+                "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.4"
+            },
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-09-13T08:41:34+00:00"
+        },
         {
             "name": "dasprid/enum",
             "version": "1.0.3",
         },
         {
             "name": "doctrine/dbal",
-            "version": "2.13.4",
+            "version": "3.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "2411a55a2a628e6d8dd598388ab13474802c7b6e"
+                "reference": "96b0053775a544b4a6ab47654dac0621be8b4cf8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/2411a55a2a628e6d8dd598388ab13474802c7b6e",
-                "reference": "2411a55a2a628e6d8dd598388ab13474802c7b6e",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/96b0053775a544b4a6ab47654dac0621be8b4cf8",
+                "reference": "96b0053775a544b4a6ab47654dac0621be8b4cf8",
                 "shasum": ""
             },
             "require": {
+                "composer/package-versions-deprecated": "^1.11.99",
                 "doctrine/cache": "^1.0|^2.0",
                 "doctrine/deprecations": "^0.5.3",
                 "doctrine/event-manager": "^1.0",
-                "ext-pdo": "*",
-                "php": "^7.1 || ^8"
+                "php": "^7.3 || ^8.0"
             },
             "require-dev": {
                 "doctrine/coding-standard": "9.0.0",
                 "jetbrains/phpstorm-stubs": "2021.1",
                 "phpstan/phpstan": "0.12.99",
-                "phpunit/phpunit": "^7.5.20|^8.5|9.5.10",
+                "phpstan/phpstan-strict-rules": "^0.12.11",
+                "phpunit/phpunit": "9.5.10",
                 "psalm/plugin-phpunit": "0.16.1",
                 "squizlabs/php_codesniffer": "3.6.0",
-                "symfony/cache": "^4.4",
-                "symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
+                "symfony/cache": "^5.2|^6.0",
+                "symfony/console": "^2.0.5|^3.0|^4.0|^5.0|^6.0",
                 "vimeo/psalm": "4.10.0"
             },
             "suggest": {
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
+                    "Doctrine\\DBAL\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
                 "queryobject",
                 "sasql",
                 "sql",
-                "sqlanywhere",
                 "sqlite",
                 "sqlserver",
                 "sqlsrv"
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/2.13.4"
+                "source": "https://github.com/doctrine/dbal/tree/3.1.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-02T15:59:26+00:00"
+            "time": "2021-10-02T16:15:05+00:00"
         },
         {
             "name": "doctrine/deprecations",
         },
         {
             "name": "dragonmantank/cron-expression",
-            "version": "v2.3.1",
+            "version": "v3.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dragonmantank/cron-expression.git",
-                "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2"
+                "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2",
-                "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2",
+                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c",
+                "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0|^8.0"
+                "php": "^7.2|^8.0",
+                "webmozart/assert": "^1.7.0"
+            },
+            "replace": {
+                "mtdowling/cron-expression": "^1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0"
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^0.12",
+                "phpstan/phpstan-webmozart-assert": "^0.12.7",
+                "phpunit/phpunit": "^7.0|^8.0|^9.0"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Cron\\": "src/Cron/"
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "[email protected]",
-                    "homepage": "https://github.com/mtdowling"
-                },
                 {
                     "name": "Chris Tankersley",
                     "email": "[email protected]",
             ],
             "support": {
                 "issues": "https://github.com/dragonmantank/cron-expression/issues",
-                "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1"
+                "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-10-13T00:52:37+00:00"
+            "time": "2020-11-24T19:55:57+00:00"
         },
         {
             "name": "egulias/email-validator",
             ],
             "time": "2020-12-29T14:50:06+00:00"
         },
-        {
-            "name": "fideloper/proxy",
-            "version": "4.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/fideloper/TrustedProxy.git",
-                "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0",
-                "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0",
-                "shasum": ""
-            },
-            "require": {
-                "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0",
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "laravel": {
-                    "providers": [
-                        "Fideloper\\Proxy\\TrustedProxyServiceProvider"
-                    ]
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Fideloper\\Proxy\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Chris Fidao",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Set trusted proxies for Laravel",
-            "keywords": [
-                "load balancing",
-                "proxy",
-                "trusted proxy"
-            ],
-            "support": {
-                "issues": "https://github.com/fideloper/TrustedProxy/issues",
-                "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1"
-            },
-            "time": "2020-10-22T13:48:01+00:00"
-        },
         {
             "name": "filp/whoops",
             "version": "2.14.4",
             ],
             "time": "2021-10-03T12:00:00+00:00"
         },
+        {
+            "name": "graham-campbell/result-type",
+            "version": "v1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/GrahamCampbell/Result-Type.git",
+                "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/296c015dc30ec4322168c5ad3ee5cc11dae827ac",
+                "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0 || ^8.0",
+                "phpoption/phpoption": "^1.8"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "GrahamCampbell\\ResultType\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "An Implementation Of The Result Type",
+            "keywords": [
+                "Graham Campbell",
+                "GrahamCampbell",
+                "Result Type",
+                "Result-Type",
+                "result"
+            ],
+            "support": {
+                "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-10-17T19:48:54+00:00"
+        },
         {
             "name": "guzzlehttp/guzzle",
             "version": "7.4.0",
         },
         {
             "name": "laravel/framework",
-            "version": "v6.20.36",
+            "version": "v8.69.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "10f6bfaec9efb68aa88d7196b8b1b162d83040ae"
+                "reference": "545181da688db64fed6d8427e55f630a90ca0d32"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/10f6bfaec9efb68aa88d7196b8b1b162d83040ae",
-                "reference": "10f6bfaec9efb68aa88d7196b8b1b162d83040ae",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/545181da688db64fed6d8427e55f630a90ca0d32",
+                "reference": "545181da688db64fed6d8427e55f630a90ca0d32",
                 "shasum": ""
             },
             "require": {
                 "doctrine/inflector": "^1.4|^2.0",
-                "dragonmantank/cron-expression": "^2.3.1",
+                "dragonmantank/cron-expression": "^3.0.2",
                 "egulias/email-validator": "^2.1.10",
                 "ext-json": "*",
                 "ext-mbstring": "*",
                 "ext-openssl": "*",
-                "league/commonmark": "^1.3",
+                "laravel/serializable-closure": "^1.0",
+                "league/commonmark": "^1.3|^2.0.2",
                 "league/flysystem": "^1.1",
-                "monolog/monolog": "^1.12|^2.0",
-                "nesbot/carbon": "^2.31",
+                "monolog/monolog": "^2.0",
+                "nesbot/carbon": "^2.53.1",
                 "opis/closure": "^3.6",
-                "php": "^7.2.5|^8.0",
+                "php": "^7.3|^8.0",
                 "psr/container": "^1.0",
+                "psr/log": "^1.0 || ^2.0",
                 "psr/simple-cache": "^1.0",
-                "ramsey/uuid": "^3.7",
-                "swiftmailer/swiftmailer": "^6.0",
-                "symfony/console": "^4.3.4",
-                "symfony/debug": "^4.3.4",
-                "symfony/finder": "^4.3.4",
-                "symfony/http-foundation": "^4.3.4",
-                "symfony/http-kernel": "^4.3.4",
-                "symfony/polyfill-php73": "^1.17",
-                "symfony/process": "^4.3.4",
-                "symfony/routing": "^4.3.4",
-                "symfony/var-dumper": "^4.3.4",
-                "tijsverkoyen/css-to-inline-styles": "^2.2.1",
-                "vlucas/phpdotenv": "^3.3"
+                "ramsey/uuid": "^4.2.2",
+                "swiftmailer/swiftmailer": "^6.3",
+                "symfony/console": "^5.1.4",
+                "symfony/error-handler": "^5.1.4",
+                "symfony/finder": "^5.1.4",
+                "symfony/http-foundation": "^5.1.4",
+                "symfony/http-kernel": "^5.1.4",
+                "symfony/mime": "^5.1.4",
+                "symfony/process": "^5.1.4",
+                "symfony/routing": "^5.1.4",
+                "symfony/var-dumper": "^5.1.4",
+                "tijsverkoyen/css-to-inline-styles": "^2.2.2",
+                "vlucas/phpdotenv": "^5.2",
+                "voku/portable-ascii": "^1.4.8"
             },
             "conflict": {
                 "tightenco/collect": "<5.5.33"
             },
+            "provide": {
+                "psr/container-implementation": "1.0",
+                "psr/simple-cache-implementation": "1.0"
+            },
             "replace": {
                 "illuminate/auth": "self.version",
                 "illuminate/broadcasting": "self.version",
                 "illuminate/bus": "self.version",
                 "illuminate/cache": "self.version",
+                "illuminate/collections": "self.version",
                 "illuminate/config": "self.version",
                 "illuminate/console": "self.version",
                 "illuminate/container": "self.version",
                 "illuminate/hashing": "self.version",
                 "illuminate/http": "self.version",
                 "illuminate/log": "self.version",
+                "illuminate/macroable": "self.version",
                 "illuminate/mail": "self.version",
                 "illuminate/notifications": "self.version",
                 "illuminate/pagination": "self.version",
                 "illuminate/routing": "self.version",
                 "illuminate/session": "self.version",
                 "illuminate/support": "self.version",
+                "illuminate/testing": "self.version",
                 "illuminate/translation": "self.version",
                 "illuminate/validation": "self.version",
                 "illuminate/view": "self.version"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "^3.155",
-                "doctrine/dbal": "^2.6",
-                "filp/whoops": "^2.8",
-                "guzzlehttp/guzzle": "^6.3.1|^7.0.1",
+                "aws/aws-sdk-php": "^3.198.1",
+                "doctrine/dbal": "^2.13.3|^3.1.2",
+                "filp/whoops": "^2.14.3",
+                "guzzlehttp/guzzle": "^6.5.5|^7.0.1",
                 "league/flysystem-cached-adapter": "^1.0",
-                "mockery/mockery": "~1.3.3|^1.4.2",
-                "moontoast/math": "^1.1",
-                "orchestra/testbench-core": "^4.8",
+                "mockery/mockery": "^1.4.4",
+                "orchestra/testbench-core": "^6.23",
                 "pda/pheanstalk": "^4.0",
-                "phpunit/phpunit": "^7.5.15|^8.4|^9.3.3",
-                "predis/predis": "^1.1.1",
-                "symfony/cache": "^4.3.4"
+                "phpunit/phpunit": "^8.5.19|^9.5.8",
+                "predis/predis": "^1.1.9",
+                "symfony/cache": "^5.1.4"
             },
             "suggest": {
-                "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).",
-                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).",
+                "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).",
+                "brianium/paratest": "Required to run tests in parallel (^6.0).",
+                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.2).",
+                "ext-bcmath": "Required to use the multiple_of validation rule.",
                 "ext-ftp": "Required to use the Flysystem FTP driver.",
                 "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
                 "ext-memcached": "Required to use the memcache cache driver.",
                 "ext-posix": "Required to use all features of the queue worker.",
                 "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).",
                 "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
-                "filp/whoops": "Required for friendly error pages in development (^2.8).",
-                "guzzlehttp/guzzle": "Required to use the Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).",
+                "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
+                "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).",
                 "laravel/tinker": "Required to use the tinker console command (^2.0).",
                 "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
                 "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
                 "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
-                "moontoast/math": "Required to use ordered UUIDs (^1.1).",
+                "mockery/mockery": "Required to use mocking (^1.4.4).",
                 "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
                 "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
-                "predis/predis": "Required to use the predis connector (^1.1.2).",
+                "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).",
+                "predis/predis": "Required to use the predis connector (^1.1.9).",
                 "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
-                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).",
-                "symfony/cache": "Required to PSR-6 cache bridge (^4.3.4).",
-                "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.2).",
+                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).",
+                "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).",
+                "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).",
+                "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
                 "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "6.x-dev"
+                    "dev-master": "8.x-dev"
                 }
             },
             "autoload": {
                 "files": [
+                    "src/Illuminate/Collections/helpers.php",
+                    "src/Illuminate/Events/functions.php",
                     "src/Illuminate/Foundation/helpers.php",
                     "src/Illuminate/Support/helpers.php"
                 ],
                 "psr-4": {
-                    "Illuminate\\": "src/Illuminate/"
+                    "Illuminate\\": "src/Illuminate/",
+                    "Illuminate\\Support\\": [
+                        "src/Illuminate/Macroable/",
+                        "src/Illuminate/Collections/"
+                    ]
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2021-10-19T13:59:55+00:00"
+            "time": "2021-11-02T13:53:22+00:00"
+        },
+        {
+            "name": "laravel/serializable-closure",
+            "version": "v1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/serializable-closure.git",
+                "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/6cfc678735f22ccedad761b8cae2bab14c3d8e5b",
+                "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^8.0"
+            },
+            "require-dev": {
+                "pestphp/pest": "^1.18",
+                "phpstan/phpstan": "^0.12.98",
+                "symfony/var-dumper": "^5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laravel\\SerializableClosure\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Nuno Maduro",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+            "keywords": [
+                "closure",
+                "laravel",
+                "serializable"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/serializable-closure/issues",
+                "source": "https://github.com/laravel/serializable-closure"
+            },
+            "time": "2021-10-07T14:00:57+00:00"
         },
         {
             "name": "laravel/socialite",
             "time": "2021-08-31T15:16:26+00:00"
         },
         {
-            "name": "league/commonmark",
-            "version": "1.6.6",
+            "name": "laravel/tinker",
+            "version": "v2.6.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/thephpleague/commonmark.git",
-                "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf"
+                "url": "https://github.com/laravel/tinker.git",
+                "reference": "c808a7227f97ecfd9219fbf913bad842ea854ddc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c4228d11e30d7493c6836d20872f9582d8ba6dcf",
-                "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf",
+                "url": "https://api.github.com/repos/laravel/tinker/zipball/c808a7227f97ecfd9219fbf913bad842ea854ddc",
+                "reference": "c808a7227f97ecfd9219fbf913bad842ea854ddc",
                 "shasum": ""
             },
             "require": {
-                "ext-mbstring": "*",
-                "php": "^7.1 || ^8.0"
-            },
-            "conflict": {
-                "scrutinizer/ocular": "1.7.*"
+                "illuminate/console": "^6.0|^7.0|^8.0",
+                "illuminate/contracts": "^6.0|^7.0|^8.0",
+                "illuminate/support": "^6.0|^7.0|^8.0",
+                "php": "^7.2.5|^8.0",
+                "psy/psysh": "^0.10.4",
+                "symfony/var-dumper": "^4.3.4|^5.0"
             },
             "require-dev": {
-                "cebe/markdown": "~1.0",
-                "commonmark/commonmark.js": "0.29.2",
-                "erusev/parsedown": "~1.0",
-                "ext-json": "*",
-                "github/gfm": "0.29.0",
-                "michelf/php-markdown": "~1.4",
-                "mikehaertl/php-shellcommand": "^1.4",
+                "mockery/mockery": "~1.3.3|^1.4.2",
+                "phpunit/phpunit": "^8.5.8|^9.3.3"
+            },
+            "suggest": {
+                "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Laravel\\Tinker\\TinkerServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laravel\\Tinker\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Powerful REPL for the Laravel framework.",
+            "keywords": [
+                "REPL",
+                "Tinker",
+                "laravel",
+                "psysh"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/tinker/issues",
+                "source": "https://github.com/laravel/tinker/tree/v2.6.2"
+            },
+            "time": "2021-09-28T15:47:34+00:00"
+        },
+        {
+            "name": "laravel/ui",
+            "version": "v3.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/ui.git",
+                "reference": "a449e3364d9780a80a49894a3af9795c85af806f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/ui/zipball/a449e3364d9780a80a49894a3af9795c85af806f",
+                "reference": "a449e3364d9780a80a49894a3af9795c85af806f",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/console": "^8.42",
+                "illuminate/filesystem": "^8.42",
+                "illuminate/support": "^8.42",
+                "illuminate/validation": "^8.42",
+                "php": "^7.3|^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Laravel\\Ui\\UiServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laravel\\Ui\\": "src/",
+                    "Illuminate\\Foundation\\Auth\\": "auth-backend/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Laravel UI utilities and presets.",
+            "keywords": [
+                "laravel",
+                "ui"
+            ],
+            "support": {
+                "source": "https://github.com/laravel/ui/tree/v3.3.1"
+            },
+            "time": "2021-11-02T17:04:20+00:00"
+        },
+        {
+            "name": "league/commonmark",
+            "version": "1.6.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/commonmark.git",
+                "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c4228d11e30d7493c6836d20872f9582d8ba6dcf",
+                "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "php": "^7.1 || ^8.0"
+            },
+            "conflict": {
+                "scrutinizer/ocular": "1.7.*"
+            },
+            "require-dev": {
+                "cebe/markdown": "~1.0",
+                "commonmark/commonmark.js": "0.29.2",
+                "erusev/parsedown": "~1.0",
+                "ext-json": "*",
+                "github/gfm": "0.29.0",
+                "michelf/php-markdown": "~1.4",
+                "mikehaertl/php-shellcommand": "^1.4",
                 "phpstan/phpstan": "^0.12.90",
                 "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2",
                 "scrutinizer/ocular": "^1.5",
         },
         {
             "name": "nesbot/carbon",
-            "version": "2.53.1",
+            "version": "2.54.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "f4655858a784988f880c1b8c7feabbf02dfdf045"
+                "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f4655858a784988f880c1b8c7feabbf02dfdf045",
-                "reference": "f4655858a784988f880c1b8c7feabbf02dfdf045",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/eed83939f1aed3eee517d03a33f5ec587ac529b5",
+                "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5",
                 "shasum": ""
             },
             "require": {
                 "symfony/translation": "^3.4 || ^4.0 || ^5.0"
             },
             "require-dev": {
+                "doctrine/dbal": "^2.0 || ^3.0",
                 "doctrine/orm": "^2.7",
                 "friendsofphp/php-cs-fixer": "^3.0",
                 "kylekatarnls/multi-tester": "^2.0",
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-06T09:29:23+00:00"
+            "time": "2021-11-01T21:22:20+00:00"
         },
         {
-            "name": "nunomaduro/collision",
-            "version": "v3.2.0",
+            "name": "nikic/php-parser",
+            "version": "v4.13.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nunomaduro/collision.git",
-                "reference": "f7c45764dfe4ba5f2618d265a6f1f9c72732e01d"
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f7c45764dfe4ba5f2618d265a6f1f9c72732e01d",
-                "reference": "f7c45764dfe4ba5f2618d265a6f1f9c72732e01d",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd",
+                "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd",
                 "shasum": ""
             },
             "require": {
-                "filp/whoops": "^2.1.4",
-                "php": "^7.2.5 || ^8.0",
-                "php-parallel-lint/php-console-highlighter": "0.5.*",
-                "symfony/console": "~2.8|~3.3|~4.0"
+                "ext-tokenizer": "*",
+                "php": ">=7.0"
             },
             "require-dev": {
-                "laravel/framework": "^6.0",
-                "phpunit/phpunit": "^8.0 || ^9.0"
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
             },
+            "bin": [
+                "bin/php-parse"
+            ],
             "type": "library",
             "extra": {
-                "laravel": {
-                    "providers": [
-                        "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
-                    ]
+                "branch-alias": {
+                    "dev-master": "4.9-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "NunoMaduro\\Collision\\": "src/"
+                    "PhpParser\\": "lib/PhpParser"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Nuno Maduro",
-                    "email": "[email protected]"
+                    "name": "Nikita Popov"
                 }
             ],
-            "description": "Cli error handling for console/command-line PHP applications.",
+            "description": "A PHP parser written in PHP",
             "keywords": [
-                "artisan",
-                "cli",
-                "command-line",
-                "console",
-                "error",
-                "handling",
-                "laravel",
-                "laravel-zero",
-                "php",
-                "symfony"
+                "parser",
+                "php"
             ],
             "support": {
-                "issues": "https://github.com/nunomaduro/collision/issues",
-                "source": "https://github.com/nunomaduro/collision"
+                "issues": "https://github.com/nikic/PHP-Parser/issues",
+                "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1"
             },
-            "funding": [
-                {
-                    "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/nunomaduro",
-                    "type": "github"
-                },
-                {
-                    "url": "https://www.patreon.com/nunomaduro",
-                    "type": "patreon"
-                }
-            ],
-            "time": "2021-02-11T09:01:42+00:00"
+            "time": "2021-11-03T20:52:16+00:00"
         },
         {
             "name": "onelogin/php-saml",
             },
             "time": "2019-09-11T20:02:13+00:00"
         },
-        {
-            "name": "php-parallel-lint/php-console-color",
-            "version": "v0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-parallel-lint/PHP-Console-Color.git",
-                "reference": "b6af326b2088f1ad3b264696c9fd590ec395b49e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Color/zipball/b6af326b2088f1ad3b264696c9fd590ec395b49e",
-                "reference": "b6af326b2088f1ad3b264696c9fd590ec395b49e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "replace": {
-                "jakub-onderka/php-console-color": "*"
-            },
-            "require-dev": {
-                "php-parallel-lint/php-code-style": "1.0",
-                "php-parallel-lint/php-parallel-lint": "1.0",
-                "php-parallel-lint/php-var-dump-check": "0.*",
-                "phpunit/phpunit": "~4.3",
-                "squizlabs/php_codesniffer": "1.*"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleColor\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-2-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "[email protected]"
-                }
-            ],
-            "support": {
-                "issues": "https://github.com/php-parallel-lint/PHP-Console-Color/issues",
-                "source": "https://github.com/php-parallel-lint/PHP-Console-Color/tree/master"
-            },
-            "time": "2020-05-14T05:47:14+00:00"
-        },
-        {
-            "name": "php-parallel-lint/php-console-highlighter",
-            "version": "v0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-parallel-lint/PHP-Console-Highlighter.git",
-                "reference": "21bf002f077b177f056d8cb455c5ed573adfdbb8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Highlighter/zipball/21bf002f077b177f056d8cb455c5ed573adfdbb8",
-                "reference": "21bf002f077b177f056d8cb455c5ed573adfdbb8",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.4.0",
-                "php-parallel-lint/php-console-color": "~0.2"
-            },
-            "replace": {
-                "jakub-onderka/php-console-highlighter": "*"
-            },
-            "require-dev": {
-                "php-parallel-lint/php-code-style": "~1.0",
-                "php-parallel-lint/php-parallel-lint": "~1.0",
-                "php-parallel-lint/php-var-dump-check": "~0.1",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~1.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "[email protected]",
-                    "homepage": "http://www.acci.cz/"
-                }
-            ],
-            "description": "Highlight PHP code in terminal",
-            "support": {
-                "issues": "https://github.com/php-parallel-lint/PHP-Console-Highlighter/issues",
-                "source": "https://github.com/php-parallel-lint/PHP-Console-Highlighter/tree/master"
-            },
-            "time": "2020-05-13T07:37:49+00:00"
-        },
         {
             "name": "phpoption/phpoption",
             "version": "1.8.0",
             "time": "2021-03-05T17:36:06+00:00"
         },
         {
-            "name": "psr/http-client",
-            "version": "1.0.1",
+            "name": "psr/event-dispatcher",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-client.git",
-                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+                "url": "https://github.com/php-fig/event-dispatcher.git",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
-                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0 || ^8.0",
-                "psr/http-message": "^1.0"
+                "php": ">=7.2.0"
             },
             "type": "library",
             "extra": {
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Http\\Client\\": "src/"
+                    "Psr\\EventDispatcher\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for HTTP clients",
-            "homepage": "https://github.com/php-fig/http-client",
+            "description": "Standard interfaces for event handling.",
             "keywords": [
-                "http",
-                "http-client",
+                "events",
                 "psr",
-                "psr-18"
+                "psr-14"
             ],
             "support": {
-                "source": "https://github.com/php-fig/http-client/tree/master"
+                "issues": "https://github.com/php-fig/event-dispatcher/issues",
+                "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
             },
-            "time": "2020-06-29T06:28:15+00:00"
+            "time": "2019-01-08T18:20:26+00:00"
         },
         {
-            "name": "psr/http-factory",
+            "name": "psr/http-client",
             "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-factory.git",
-                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+                "url": "https://github.com/php-fig/http-client.git",
+                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
-                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.0.0",
+                "php": "^7.0 || ^8.0",
                 "psr/http-message": "^1.0"
             },
             "type": "library",
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
+                    "Psr\\Http\\Client\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interfaces for PSR-7 HTTP message factories",
-            "keywords": [
+            "description": "Common interface for HTTP clients",
+            "homepage": "https://github.com/php-fig/http-client",
+            "keywords": [
+                "http",
+                "http-client",
+                "psr",
+                "psr-18"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-client/tree/master"
+            },
+            "time": "2020-06-29T06:28:15+00:00"
+        },
+        {
+            "name": "psr/http-factory",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.0",
+                "psr/http-message": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
                 "factory",
                 "http",
                 "message",
             },
             "time": "2017-10-23T01:57:42+00:00"
         },
+        {
+            "name": "psy/psysh",
+            "version": "v0.10.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/bobthecow/psysh.git",
+                "reference": "01281336c4ae557fe4a994544f30d3a1bc204375"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/01281336c4ae557fe4a994544f30d3a1bc204375",
+                "reference": "01281336c4ae557fe4a994544f30d3a1bc204375",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-tokenizer": "*",
+                "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+                "php": "^8.0 || ^7.0 || ^5.5.9",
+                "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+                "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.2",
+                "hoa/console": "3.17.*"
+            },
+            "suggest": {
+                "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+                "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+                "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+            },
+            "bin": [
+                "bin/psysh"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "0.10.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "Psy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Justin Hileman",
+                    "email": "[email protected]",
+                    "homepage": "http://justinhileman.com"
+                }
+            ],
+            "description": "An interactive shell for modern PHP.",
+            "homepage": "http://psysh.org",
+            "keywords": [
+                "REPL",
+                "console",
+                "interactive",
+                "shell"
+            ],
+            "support": {
+                "issues": "https://github.com/bobthecow/psysh/issues",
+                "source": "https://github.com/bobthecow/psysh/tree/v0.10.9"
+            },
+            "time": "2021-10-10T13:37:39+00:00"
+        },
         {
             "name": "ralouphie/getallheaders",
             "version": "3.0.3",
             },
             "time": "2019-03-08T08:55:37+00:00"
         },
+        {
+            "name": "ramsey/collection",
+            "version": "1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ramsey/collection.git",
+                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3 || ^8",
+                "symfony/polyfill-php81": "^1.23"
+            },
+            "require-dev": {
+                "captainhook/captainhook": "^5.3",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "ergebnis/composer-normalize": "^2.6",
+                "fakerphp/faker": "^1.5",
+                "hamcrest/hamcrest-php": "^2",
+                "jangregor/phpstan-prophecy": "^0.8",
+                "mockery/mockery": "^1.3",
+                "phpspec/prophecy-phpunit": "^2.0",
+                "phpstan/extension-installer": "^1",
+                "phpstan/phpstan": "^0.12.32",
+                "phpstan/phpstan-mockery": "^0.12.5",
+                "phpstan/phpstan-phpunit": "^0.12.11",
+                "phpunit/phpunit": "^8.5 || ^9",
+                "psy/psysh": "^0.10.4",
+                "slevomat/coding-standard": "^6.3",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "^4.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Ramsey\\Collection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ben Ramsey",
+                    "email": "[email protected]",
+                    "homepage": "https://benramsey.com"
+                }
+            ],
+            "description": "A PHP library for representing and manipulating collections.",
+            "keywords": [
+                "array",
+                "collection",
+                "hash",
+                "map",
+                "queue",
+                "set"
+            ],
+            "support": {
+                "issues": "https://github.com/ramsey/collection/issues",
+                "source": "https://github.com/ramsey/collection/tree/1.2.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/ramsey",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-10-10T03:01:02+00:00"
+        },
         {
             "name": "ramsey/uuid",
-            "version": "3.9.6",
+            "version": "4.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ramsey/uuid.git",
-                "reference": "ffa80ab953edd85d5b6c004f96181a538aad35a3"
+                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/uuid/zipball/ffa80ab953edd85d5b6c004f96181a538aad35a3",
-                "reference": "ffa80ab953edd85d5b6c004f96181a538aad35a3",
+                "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
+                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
                 "shasum": ""
             },
             "require": {
+                "brick/math": "^0.8 || ^0.9",
                 "ext-json": "*",
-                "paragonie/random_compat": "^1 | ^2 | ^9.99.99",
-                "php": "^5.4 | ^7.0 | ^8.0",
-                "symfony/polyfill-ctype": "^1.8"
+                "php": "^7.2 || ^8.0",
+                "ramsey/collection": "^1.0",
+                "symfony/polyfill-ctype": "^1.8",
+                "symfony/polyfill-php80": "^1.14"
             },
             "replace": {
                 "rhumsaa/uuid": "self.version"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^1 | ^2",
-                "doctrine/annotations": "^1.2",
-                "goaop/framework": "1.0.0-alpha.2 | ^1 | >=2.1.0 <=2.3.2",
-                "mockery/mockery": "^0.9.11 | ^1",
+                "captainhook/captainhook": "^5.10",
+                "captainhook/plugin-composer": "^5.3",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "doctrine/annotations": "^1.8",
+                "ergebnis/composer-normalize": "^2.15",
+                "mockery/mockery": "^1.3",
                 "moontoast/math": "^1.1",
-                "nikic/php-parser": "<=4.5.0",
                 "paragonie/random-lib": "^2",
-                "php-mock/php-mock-phpunit": "^0.3 | ^1.1 | ^2.6",
-                "php-parallel-lint/php-parallel-lint": "^1.3",
-                "phpunit/phpunit": ">=4.8.36 <9.0.0 | >=9.3.0",
+                "php-mock/php-mock": "^2.2",
+                "php-mock/php-mock-mockery": "^1.3",
+                "php-parallel-lint/php-parallel-lint": "^1.1",
+                "phpbench/phpbench": "^1.0",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^0.12",
+                "phpstan/phpstan-mockery": "^0.12",
+                "phpstan/phpstan-phpunit": "^0.12",
+                "phpunit/phpunit": "^8.5 || ^9",
+                "slevomat/coding-standard": "^7.0",
                 "squizlabs/php_codesniffer": "^3.5",
-                "yoast/phpunit-polyfills": "^1.0"
+                "vimeo/psalm": "^4.9"
             },
             "suggest": {
-                "ext-ctype": "Provides support for PHP Ctype functions",
-                "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
-                "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator",
-                "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
-                "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
+                "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+                "ext-ctype": "Enables faster processing of character classification using ctype functions.",
+                "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+                "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
                 "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
-                "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
                 "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "4.x-dev"
+                },
+                "captainhook": {
+                    "force-install": true
                 }
             },
             "autoload": {
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "Ben Ramsey",
-                    "email": "[email protected]",
-                    "homepage": "https://benramsey.com"
-                },
-                {
-                    "name": "Marijn Huizendveld",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Thibaud Fabre",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
-            "homepage": "https://github.com/ramsey/uuid",
+            "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
             "keywords": [
                 "guid",
                 "identifier",
             ],
             "support": {
                 "issues": "https://github.com/ramsey/uuid/issues",
-                "rss": "https://github.com/ramsey/uuid/releases.atom",
-                "source": "https://github.com/ramsey/uuid",
-                "wiki": "https://github.com/ramsey/uuid/wiki"
+                "source": "https://github.com/ramsey/uuid/tree/4.2.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-25T23:07:42+00:00"
+            "time": "2021-09-25T23:10:38+00:00"
         },
         {
             "name": "robrichards/xmlseclibs",
         },
         {
             "name": "symfony/console",
-            "version": "v4.4.33",
+            "version": "v5.3.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "8dbd23ef7a8884051482183ddee8d9061b5feed0"
+                "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/8dbd23ef7a8884051482183ddee8d9061b5feed0",
-                "reference": "8dbd23ef7a8884051482183ddee8d9061b5feed0",
+                "url": "https://api.github.com/repos/symfony/console/zipball/d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3",
+                "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
                 "symfony/polyfill-mbstring": "~1.0",
                 "symfony/polyfill-php73": "^1.8",
                 "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2"
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/string": "^5.1"
             },
             "conflict": {
                 "psr/log": ">=3",
-                "symfony/dependency-injection": "<3.4",
-                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/dependency-injection": "<4.4",
+                "symfony/dotenv": "<5.1",
+                "symfony/event-dispatcher": "<4.4",
                 "symfony/lock": "<4.4",
-                "symfony/process": "<3.3"
+                "symfony/process": "<4.4"
             },
             "provide": {
                 "psr/log-implementation": "1.0|2.0"
             },
             "require-dev": {
                 "psr/log": "^1|^2",
-                "symfony/config": "^3.4|^4.0|^5.0",
-                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
-                "symfony/event-dispatcher": "^4.3",
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
                 "symfony/lock": "^4.4|^5.0",
-                "symfony/process": "^3.4|^4.0|^5.0",
-                "symfony/var-dumper": "^4.3|^5.0"
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
             ],
             "description": "Eases the creation of beautiful and testable command line interfaces",
             "homepage": "https://symfony.com",
+            "keywords": [
+                "cli",
+                "command line",
+                "console",
+                "terminal"
+            ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v4.4.33"
+                "source": "https://github.com/symfony/console/tree/v5.3.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-25T16:36:08+00:00"
+            "time": "2021-10-26T09:30:15+00:00"
         },
         {
             "name": "symfony/css-selector",
             ],
             "time": "2021-07-21T12:38:00+00:00"
         },
-        {
-            "name": "symfony/debug",
-            "version": "v4.4.31",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "43ede438d4cb52cd589ae5dc070e9323866ba8e0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/43ede438d4cb52cd589ae5dc070e9323866ba8e0",
-                "reference": "43ede438d4cb52cd589ae5dc070e9323866ba8e0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1.3",
-                "psr/log": "^1|^2|^3"
-            },
-            "conflict": {
-                "symfony/http-kernel": "<3.4"
-            },
-            "require-dev": {
-                "symfony/http-kernel": "^3.4|^4.0|^5.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides tools to ease debugging PHP code",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/debug/tree/v4.4.31"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-09-24T13:30:14+00:00"
-        },
         {
             "name": "symfony/deprecation-contracts",
             "version": "v2.4.0",
         },
         {
             "name": "symfony/error-handler",
-            "version": "v4.4.30",
+            "version": "v5.3.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/error-handler.git",
-                "reference": "51f98f7aa99f00f3b1da6bafe934e67ae6ba6dc5"
+                "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/51f98f7aa99f00f3b1da6bafe934e67ae6ba6dc5",
-                "reference": "51f98f7aa99f00f3b1da6bafe934e67ae6ba6dc5",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321",
+                "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
                 "psr/log": "^1|^2|^3",
-                "symfony/debug": "^4.4.5",
                 "symfony/var-dumper": "^4.4|^5.0"
             },
             "require-dev": {
+                "symfony/deprecation-contracts": "^2.1",
                 "symfony/http-kernel": "^4.4|^5.0",
                 "symfony/serializer": "^4.4|^5.0"
             },
             "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v4.4.30"
+                "source": "https://github.com/symfony/error-handler/tree/v5.3.7"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-27T17:42:48+00:00"
+            "time": "2021-08-28T15:07:08+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v4.4.30",
+            "version": "v5.3.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "2fe81680070043c4c80e7cedceb797e34f377bac"
+                "reference": "ce7b20d69c66a20939d8952b617506a44d102130"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2fe81680070043c4c80e7cedceb797e34f377bac",
-                "reference": "2fe81680070043c4c80e7cedceb797e34f377bac",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130",
+                "reference": "ce7b20d69c66a20939d8952b617506a44d102130",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
-                "symfony/event-dispatcher-contracts": "^1.1",
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/event-dispatcher-contracts": "^2",
                 "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4"
+                "symfony/dependency-injection": "<4.4"
             },
             "provide": {
                 "psr/event-dispatcher-implementation": "1.0",
-                "symfony/event-dispatcher-implementation": "1.1"
+                "symfony/event-dispatcher-implementation": "2.0"
             },
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^3.4|^4.0|^5.0",
-                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
-                "symfony/error-handler": "~3.4|~4.4",
-                "symfony/expression-language": "^3.4|^4.0|^5.0",
-                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/http-foundation": "^4.4|^5.0",
                 "symfony/service-contracts": "^1.1|^2",
-                "symfony/stopwatch": "^3.4|^4.0|^5.0"
+                "symfony/stopwatch": "^4.4|^5.0"
             },
             "suggest": {
                 "symfony/dependency-injection": "",
             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.30"
+                "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.7"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-04T20:31:23+00:00"
+            "time": "2021-08-04T21:20:46+00:00"
         },
         {
             "name": "symfony/event-dispatcher-contracts",
-            "version": "v1.1.9",
+            "version": "v2.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+                "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
-                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11",
+                "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3"
+                "php": ">=7.2.5",
+                "psr/event-dispatcher": "^1"
             },
             "suggest": {
-                "psr/event-dispatcher": "",
                 "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1-dev"
+                    "dev-main": "2.4-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9"
+                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-07-06T13:19:58+00:00"
+            "time": "2021-03-23T23:28:01+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v4.4.30",
+            "version": "v5.3.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "70362f1e112280d75b30087c7598b837c1b468b6"
+                "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/70362f1e112280d75b30087c7598b837c1b468b6",
-                "reference": "70362f1e112280d75b30087c7598b837c1b468b6",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93",
+                "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
                 "symfony/polyfill-php80": "^1.16"
             },
             "type": "library",
             "description": "Finds files and directories via an intuitive fluent interface",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v4.4.30"
+                "source": "https://github.com/symfony/finder/tree/v5.3.7"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-04T20:31:23+00:00"
+            "time": "2021-08-04T21:20:46+00:00"
         },
         {
             "name": "symfony/http-client-contracts",
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v4.4.33",
+            "version": "v5.3.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "b9a91102f548e0111f4996e8c622fb1d1d479850"
+                "reference": "9f34f02e8a5fdc7a56bafe011cea1ce97300e54c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9a91102f548e0111f4996e8c622fb1d1d479850",
-                "reference": "b9a91102f548e0111f4996e8c622fb1d1d479850",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9f34f02e8a5fdc7a56bafe011cea1ce97300e54c",
+                "reference": "9f34f02e8a5fdc7a56bafe011cea1ce97300e54c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
-                "symfony/mime": "^4.3|^5.0",
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
                 "symfony/polyfill-mbstring": "~1.1",
                 "symfony/polyfill-php80": "^1.16"
             },
             "require-dev": {
                 "predis/predis": "~1.0",
-                "symfony/expression-language": "^3.4|^4.0|^5.0"
+                "symfony/cache": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/mime": "^4.4|^5.0"
+            },
+            "suggest": {
+                "symfony/mime": "To use the file extension guesser"
             },
             "type": "library",
             "autoload": {
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v4.4.33"
+                "source": "https://github.com/symfony/http-foundation/tree/v5.3.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-07T15:31:35+00:00"
+            "time": "2021-10-11T15:41:55+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v4.4.33",
+            "version": "v5.3.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "6f1fcca1154f782796549f4f4e5090bae9525c0e"
+                "reference": "703e4079920468e9522b72cf47fd76ce8d795e86"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6f1fcca1154f782796549f4f4e5090bae9525c0e",
-                "reference": "6f1fcca1154f782796549f4f4e5090bae9525c0e",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/703e4079920468e9522b72cf47fd76ce8d795e86",
+                "reference": "703e4079920468e9522b72cf47fd76ce8d795e86",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
                 "psr/log": "^1|^2",
-                "symfony/error-handler": "^4.4",
-                "symfony/event-dispatcher": "^4.4",
+                "symfony/deprecation-contracts": "^2.1",
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^5.0",
                 "symfony/http-client-contracts": "^1.1|^2",
-                "symfony/http-foundation": "^4.4.30|^5.3.7",
+                "symfony/http-foundation": "^5.3.7",
                 "symfony/polyfill-ctype": "^1.8",
                 "symfony/polyfill-php73": "^1.9",
                 "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
-                "symfony/browser-kit": "<4.3",
-                "symfony/config": "<3.4",
-                "symfony/console": ">=5",
-                "symfony/dependency-injection": "<4.3",
-                "symfony/translation": "<4.2",
-                "twig/twig": "<1.43|<2.13,>=2"
+                "symfony/browser-kit": "<4.4",
+                "symfony/cache": "<5.0",
+                "symfony/config": "<5.0",
+                "symfony/console": "<4.4",
+                "symfony/dependency-injection": "<5.3",
+                "symfony/doctrine-bridge": "<5.0",
+                "symfony/form": "<5.0",
+                "symfony/http-client": "<5.0",
+                "symfony/mailer": "<5.0",
+                "symfony/messenger": "<5.0",
+                "symfony/translation": "<5.0",
+                "symfony/twig-bridge": "<5.0",
+                "symfony/validator": "<5.0",
+                "twig/twig": "<2.13"
             },
             "provide": {
                 "psr/log-implementation": "1.0|2.0"
             },
             "require-dev": {
                 "psr/cache": "^1.0|^2.0|^3.0",
-                "symfony/browser-kit": "^4.3|^5.0",
-                "symfony/config": "^3.4|^4.0|^5.0",
-                "symfony/console": "^3.4|^4.0",
-                "symfony/css-selector": "^3.4|^4.0|^5.0",
-                "symfony/dependency-injection": "^4.3|^5.0",
-                "symfony/dom-crawler": "^3.4|^4.0|^5.0",
-                "symfony/expression-language": "^3.4|^4.0|^5.0",
-                "symfony/finder": "^3.4|^4.0|^5.0",
-                "symfony/process": "^3.4|^4.0|^5.0",
-                "symfony/routing": "^3.4|^4.0|^5.0",
-                "symfony/stopwatch": "^3.4|^4.0|^5.0",
-                "symfony/templating": "^3.4|^4.0|^5.0",
-                "symfony/translation": "^4.2|^5.0",
+                "symfony/browser-kit": "^4.4|^5.0",
+                "symfony/config": "^5.0",
+                "symfony/console": "^4.4|^5.0",
+                "symfony/css-selector": "^4.4|^5.0",
+                "symfony/dependency-injection": "^5.3",
+                "symfony/dom-crawler": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/finder": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/routing": "^4.4|^5.0",
+                "symfony/stopwatch": "^4.4|^5.0",
+                "symfony/translation": "^4.4|^5.0",
                 "symfony/translation-contracts": "^1.1|^2",
-                "twig/twig": "^1.43|^2.13|^3.0.4"
+                "twig/twig": "^2.13|^3.0.4"
             },
             "suggest": {
                 "symfony/browser-kit": "",
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v4.4.33"
+                "source": "https://github.com/symfony/http-kernel/tree/v5.3.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-29T08:14:01+00:00"
+            "time": "2021-10-29T08:36:48+00:00"
         },
         {
             "name": "symfony/mime",
             "time": "2021-05-27T09:27:20+00:00"
         },
         {
-            "name": "symfony/polyfill-intl-idn",
-            "version": "v1.23.0",
+            "name": "symfony/polyfill-intl-grapheme",
+            "version": "v1.23.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
+                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+                "reference": "16880ba9c5ebe3642d1995ab866db29270b36535"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535",
+                "reference": "16880ba9c5ebe3642d1995ab866db29270b36535",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's grapheme_* functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "grapheme",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-27T12:26:48+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
                 "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65",
                 "shasum": ""
             },
             ],
             "time": "2021-07-28T13:41:28+00:00"
         },
+        {
+            "name": "symfony/polyfill-php81",
+            "version": "v1.23.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php81.git",
+                "reference": "e66119f3de95efc359483f810c4c3e6436279436"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436",
+                "reference": "e66119f3de95efc359483f810c4c3e6436279436",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php81\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-05-21T13:25:03+00:00"
+        },
         {
             "name": "symfony/process",
-            "version": "v4.4.30",
+            "version": "v5.3.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d"
+                "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d",
-                "reference": "13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d",
+                "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967",
+                "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
                 "symfony/polyfill-php80": "^1.16"
             },
             "type": "library",
             "description": "Executes commands in sub-processes",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v4.4.30"
+                "source": "https://github.com/symfony/process/tree/v5.3.7"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-04T20:31:23+00:00"
+            "time": "2021-08-04T21:20:46+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v4.4.30",
+            "version": "v5.3.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "9ddf033927ad9f30ba2bfd167a7b342cafa13e8e"
+                "reference": "be865017746fe869007d94220ad3f5297951811b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/9ddf033927ad9f30ba2bfd167a7b342cafa13e8e",
-                "reference": "9ddf033927ad9f30ba2bfd167a7b342cafa13e8e",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/be865017746fe869007d94220ad3f5297951811b",
+                "reference": "be865017746fe869007d94220ad3f5297951811b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
                 "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
-                "symfony/config": "<4.2",
-                "symfony/dependency-injection": "<3.4",
-                "symfony/yaml": "<3.4"
+                "doctrine/annotations": "<1.12",
+                "symfony/config": "<5.3",
+                "symfony/dependency-injection": "<4.4",
+                "symfony/yaml": "<4.4"
             },
             "require-dev": {
-                "doctrine/annotations": "^1.10.4",
+                "doctrine/annotations": "^1.12",
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^4.2|^5.0",
-                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
-                "symfony/expression-language": "^3.4|^4.0|^5.0",
-                "symfony/http-foundation": "^3.4|^4.0|^5.0",
-                "symfony/yaml": "^3.4|^4.0|^5.0"
+                "symfony/config": "^5.3",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/http-foundation": "^4.4|^5.0",
+                "symfony/yaml": "^4.4|^5.0"
             },
             "suggest": {
-                "doctrine/annotations": "For using the annotation loader",
                 "symfony/config": "For using the all-in-one router or any loader",
                 "symfony/expression-language": "For using expression matching",
                 "symfony/http-foundation": "For using a Symfony Request object",
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v4.4.30"
+                "source": "https://github.com/symfony/routing/tree/v5.3.7"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-04T21:41:01+00:00"
+            "time": "2021-08-04T21:42:42+00:00"
         },
         {
             "name": "symfony/service-contracts",
             ],
             "time": "2021-04-01T10:43:52+00:00"
         },
+        {
+            "name": "symfony/string",
+            "version": "v5.3.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/string.git",
+                "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/string/zipball/d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c",
+                "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-intl-grapheme": "~1.0",
+                "symfony/polyfill-intl-normalizer": "~1.0",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php80": "~1.15"
+            },
+            "require-dev": {
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/http-client": "^4.4|^5.0",
+                "symfony/translation-contracts": "^1.1|^2",
+                "symfony/var-exporter": "^4.4|^5.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\String\\": ""
+                },
+                "files": [
+                    "Resources/functions.php"
+                ],
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "grapheme",
+                "i18n",
+                "string",
+                "unicode",
+                "utf-8",
+                "utf8"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/string/tree/v5.3.10"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-10-27T18:21:46+00:00"
+        },
         {
             "name": "symfony/translation",
-            "version": "v4.4.32",
+            "version": "v5.3.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5"
+                "reference": "6ef197aea2ac8b9cd63e0da7522b3771714035aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/db0ba1e85280d8ff11e38d53c70f8814d4d740f5",
-                "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/6ef197aea2ac8b9cd63e0da7522b3771714035aa",
+                "reference": "6ef197aea2ac8b9cd63e0da7522b3771714035aa",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1",
                 "symfony/polyfill-mbstring": "~1.0",
                 "symfony/polyfill-php80": "^1.16",
-                "symfony/translation-contracts": "^1.1.6|^2"
+                "symfony/translation-contracts": "^2.3"
             },
             "conflict": {
-                "symfony/config": "<3.4",
-                "symfony/dependency-injection": "<3.4",
-                "symfony/http-kernel": "<4.4",
-                "symfony/yaml": "<3.4"
+                "symfony/config": "<4.4",
+                "symfony/dependency-injection": "<5.0",
+                "symfony/http-kernel": "<5.0",
+                "symfony/twig-bundle": "<5.0",
+                "symfony/yaml": "<4.4"
             },
             "provide": {
-                "symfony/translation-implementation": "1.0|2.0"
+                "symfony/translation-implementation": "2.3"
             },
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^3.4|^4.0|^5.0",
-                "symfony/console": "^3.4|^4.0|^5.0",
-                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
-                "symfony/finder": "~2.8|~3.0|~4.0|^5.0",
-                "symfony/http-kernel": "^4.4",
-                "symfony/intl": "^3.4|^4.0|^5.0",
+                "symfony/config": "^4.4|^5.0",
+                "symfony/console": "^4.4|^5.0",
+                "symfony/dependency-injection": "^5.0",
+                "symfony/finder": "^4.4|^5.0",
+                "symfony/http-kernel": "^5.0",
+                "symfony/intl": "^4.4|^5.0",
+                "symfony/polyfill-intl-icu": "^1.21",
                 "symfony/service-contracts": "^1.1.2|^2",
-                "symfony/yaml": "^3.4|^4.0|^5.0"
+                "symfony/yaml": "^4.4|^5.0"
             },
             "suggest": {
                 "psr/log-implementation": "To use logging capability in translator",
             },
             "type": "library",
             "autoload": {
+                "files": [
+                    "Resources/functions.php"
+                ],
                 "psr-4": {
                     "Symfony\\Component\\Translation\\": ""
                 },
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v4.4.32"
+                "source": "https://github.com/symfony/translation/tree/v5.3.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-26T05:57:13+00:00"
+            "time": "2021-10-10T06:43:24+00:00"
         },
         {
             "name": "symfony/translation-contracts",
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v4.4.33",
+            "version": "v5.3.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "50286e2b7189bfb4f419c0731e86632cddf7c5ee"
+                "reference": "875432adb5f5570fff21036fd22aee244636b7d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/50286e2b7189bfb4f419c0731e86632cddf7c5ee",
-                "reference": "50286e2b7189bfb4f419c0731e86632cddf7c5ee",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/875432adb5f5570fff21036fd22aee244636b7d1",
+                "reference": "875432adb5f5570fff21036fd22aee244636b7d1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
+                "php": ">=7.2.5",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php72": "~1.5",
                 "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
-                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
-                "symfony/console": "<3.4"
+                "phpunit/phpunit": "<5.4.3",
+                "symfony/console": "<4.4"
             },
             "require-dev": {
                 "ext-iconv": "*",
-                "symfony/console": "^3.4|^4.0|^5.0",
+                "symfony/console": "^4.4|^5.0",
                 "symfony/process": "^4.4|^5.0",
-                "twig/twig": "^1.43|^2.13|^3.0.4"
+                "twig/twig": "^2.13|^3.0.4"
             },
             "suggest": {
                 "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v4.4.33"
+                "source": "https://github.com/symfony/var-dumper/tree/v5.3.10"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-25T20:24:58+00:00"
+            "time": "2021-10-26T09:30:15+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
         },
         {
             "name": "vlucas/phpdotenv",
-            "version": "v3.6.9",
+            "version": "v5.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/vlucas/phpdotenv.git",
-                "reference": "a1bf4c9853d90ade427b4efe35355fc41b3d6988"
+                "reference": "accaddf133651d4b5cf81a119f25296736ffc850"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a1bf4c9853d90ade427b4efe35355fc41b3d6988",
-                "reference": "a1bf4c9853d90ade427b4efe35355fc41b3d6988",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/accaddf133651d4b5cf81a119f25296736ffc850",
+                "reference": "accaddf133651d4b5cf81a119f25296736ffc850",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.4 || ^7.0 || ^8.0",
-                "phpoption/phpoption": "^1.5.2",
-                "symfony/polyfill-ctype": "^1.17"
+                "ext-pcre": "*",
+                "graham-campbell/result-type": "^1.0.2",
+                "php": "^7.1.3 || ^8.0",
+                "phpoption/phpoption": "^1.8",
+                "symfony/polyfill-ctype": "^1.23",
+                "symfony/polyfill-mbstring": "^1.23.1",
+                "symfony/polyfill-php80": "^1.23.1"
             },
             "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.4.1",
                 "ext-filter": "*",
-                "ext-pcre": "*",
-                "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21"
+                "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10"
             },
             "suggest": {
-                "ext-filter": "Required to use the boolean validator.",
-                "ext-pcre": "Required to use most of the library."
+                "ext-filter": "Required to use the boolean validator."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.6-dev"
+                    "dev-master": "5.3-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/vlucas/phpdotenv/issues",
-                "source": "https://github.com/vlucas/phpdotenv/tree/v3.6.9"
+                "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.1"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-02T19:07:56+00:00"
-        }
-    ],
-    "packages-dev": [
+            "time": "2021-10-02T19:24:42+00:00"
+        },
         {
-            "name": "barryvdh/laravel-debugbar",
-            "version": "v3.6.4",
+            "name": "voku/portable-ascii",
+            "version": "1.5.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/barryvdh/laravel-debugbar.git",
-                "reference": "3c2d678269ba60e178bcd93e36f6a91c36b727f1"
+                "url": "https://github.com/voku/portable-ascii.git",
+                "reference": "80953678b19901e5165c56752d087fc11526017c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/3c2d678269ba60e178bcd93e36f6a91c36b727f1",
-                "reference": "3c2d678269ba60e178bcd93e36f6a91c36b727f1",
+                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c",
+                "reference": "80953678b19901e5165c56752d087fc11526017c",
                 "shasum": ""
             },
             "require": {
-                "illuminate/routing": "^6|^7|^8",
-                "illuminate/session": "^6|^7|^8",
-                "illuminate/support": "^6|^7|^8",
-                "maximebf/debugbar": "^1.17.2",
-                "php": ">=7.2",
-                "symfony/debug": "^4.3|^5",
-                "symfony/finder": "^4.3|^5"
+                "php": ">=7.0.0"
             },
             "require-dev": {
-                "mockery/mockery": "^1.3.3",
-                "orchestra/testbench-dusk": "^4|^5|^6",
-                "phpunit/phpunit": "^8.5|^9.0",
-                "squizlabs/php_codesniffer": "^3.5"
+                "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.6-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Barryvdh\\Debugbar\\ServiceProvider"
-                    ],
-                    "aliases": {
-                        "Debugbar": "Barryvdh\\Debugbar\\Facade"
-                    }
-                }
+            "suggest": {
+                "ext-intl": "Use Intl for transliterator_transliterate() support"
             },
+            "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Barryvdh\\Debugbar\\": "src/"
-                },
-                "files": [
-                    "src/helpers.php"
-                ]
+                    "voku\\": "src/voku/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
             ],
             "authors": [
                 {
-                    "name": "Barry vd. Heuvel",
-                    "email": "[email protected]"
+                    "name": "Lars Moelleken",
+                    "homepage": "http://www.moelleken.org/"
                 }
             ],
-            "description": "PHP Debugbar integration for Laravel",
+            "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+            "homepage": "https://github.com/voku/portable-ascii",
             "keywords": [
-                "debug",
-                "debugbar",
-                "laravel",
-                "profiler",
-                "webprofiler"
+                "ascii",
+                "clean",
+                "php"
             ],
             "support": {
-                "issues": "https://github.com/barryvdh/laravel-debugbar/issues",
-                "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.4"
+                "issues": "https://github.com/voku/portable-ascii/issues",
+                "source": "https://github.com/voku/portable-ascii/tree/1.5.6"
             },
             "funding": [
                 {
-                    "url": "https://fruitcake.nl",
+                    "url": "https://www.paypal.me/moelleken",
                     "type": "custom"
                 },
                 {
-                    "url": "https://github.com/barryvdh",
+                    "url": "https://github.com/voku",
                     "type": "github"
-                }
-            ],
-            "time": "2021-10-21T10:57:31+00:00"
-        },
-        {
-            "name": "barryvdh/laravel-ide-helper",
-            "version": "v2.8.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/barryvdh/laravel-ide-helper.git",
-                "reference": "5515cabea39b9cf55f98980d0f269dc9d85cfcca"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/5515cabea39b9cf55f98980d0f269dc9d85cfcca",
-                "reference": "5515cabea39b9cf55f98980d0f269dc9d85cfcca",
-                "shasum": ""
-            },
-            "require": {
-                "barryvdh/reflection-docblock": "^2.0.6",
-                "composer/composer": "^1.6 || ^2",
-                "doctrine/dbal": "~2.3",
-                "ext-json": "*",
-                "illuminate/console": "^6 || ^7 || ^8",
-                "illuminate/filesystem": "^6 || ^7 || ^8",
-                "illuminate/support": "^6 || ^7 || ^8",
-                "php": ">=7.2",
-                "phpdocumentor/type-resolver": "^1.1.0"
-            },
-            "require-dev": {
-                "ext-pdo_sqlite": "*",
-                "friendsofphp/php-cs-fixer": "^2",
-                "illuminate/config": "^6 || ^7 || ^8",
-                "illuminate/view": "^6 || ^7 || ^8",
-                "mockery/mockery": "^1.3.3",
-                "orchestra/testbench": "^4 || ^5 || ^6",
-                "phpunit/phpunit": "^8.5 || ^9",
-                "spatie/phpunit-snapshot-assertions": "^1.4 || ^2.2 || ^3 || ^4",
-                "vimeo/psalm": "^3.12"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.8-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider"
-                    ]
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Barryvdh\\LaravelIdeHelper\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Barry vd. Heuvel",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.",
-            "keywords": [
-                "autocomplete",
-                "codeintel",
-                "helper",
-                "ide",
-                "laravel",
-                "netbeans",
-                "phpdoc",
-                "phpstorm",
-                "sublime"
-            ],
-            "support": {
-                "issues": "https://github.com/barryvdh/laravel-ide-helper/issues",
-                "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.8.2"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/barryvdh",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-12-06T08:55:05+00:00"
-        },
-        {
-            "name": "barryvdh/reflection-docblock",
-            "version": "v2.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/barryvdh/ReflectionDocBlock.git",
-                "reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/6b69015d83d3daf9004a71a89f26e27d27ef6a16",
-                "reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0,<4.5"
-            },
-            "suggest": {
-                "dflydev/markdown": "~1.0",
-                "erusev/parsedown": "~1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Barryvdh": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "[email protected]"
-                }
-            ],
-            "support": {
-                "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.0.6"
-            },
-            "time": "2018-12-13T10:34:14+00:00"
-        },
-        {
-            "name": "composer/ca-bundle",
-            "version": "1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
-                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
-                "shasum": ""
-            },
-            "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^0.12.55",
-                "psr/log": "^1.0",
-                "symfony/phpunit-bridge": "^4.2 || ^5",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\CaBundle\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
-            "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
-            ],
-            "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/ca-bundle/issues",
-                "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
                 },
                 {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-10-28T20:44:15+00:00"
-        },
-        {
-            "name": "composer/composer",
-            "version": "2.1.10",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "ea5f64d1a15c66942979b804c9fb3686be852ca0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/ea5f64d1a15c66942979b804c9fb3686be852ca0",
-                "reference": "ea5f64d1a15c66942979b804c9fb3686be852ca0",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/metadata-minifier": "^1.0",
-                "composer/semver": "^3.0",
-                "composer/spdx-licenses": "^1.2",
-                "composer/xdebug-handler": "^2.0",
-                "justinrainbow/json-schema": "^5.2.11",
-                "php": "^5.3.2 || ^7.0 || ^8.0",
-                "psr/log": "^1.0 || ^2.0",
-                "react/promise": "^1.2 || ^2.7",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
-                "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
-                "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0",
-                "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0"
-            },
-            "require-dev": {
-                "phpspec/prophecy": "^1.10",
-                "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0"
-            },
-            "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
-            },
-            "bin": [
-                "bin/composer"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.1-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\": "src/Composer"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "[email protected]",
-                    "homepage": "https://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]",
-                    "homepage": "https://seld.be"
-                }
-            ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
-            "keywords": [
-                "autoload",
-                "dependency",
-                "package"
-            ],
-            "support": {
-                "irc": "ircs://irc.libera.chat:6697/composer",
-                "issues": "https://github.com/composer/composer/issues",
-                "source": "https://github.com/composer/composer/tree/2.1.10"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-10-29T20:34:57+00:00"
-        },
-        {
-            "name": "composer/metadata-minifier",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/metadata-minifier.git",
-                "reference": "c549d23829536f0d0e984aaabbf02af91f443207"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207",
-                "reference": "c549d23829536f0d0e984aaabbf02af91f443207",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "composer/composer": "^2",
-                "phpstan/phpstan": "^0.12.55",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\MetadataMinifier\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Small utility library that handles metadata minification and expansion.",
-            "keywords": [
-                "composer",
-                "compression"
-            ],
-            "support": {
-                "issues": "https://github.com/composer/metadata-minifier/issues",
-                "source": "https://github.com/composer/metadata-minifier/tree/1.0.0"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
+                    "url": "https://opencollective.com/portable-ascii",
+                    "type": "open_collective"
                 },
                 {
-                    "url": "https://github.com/composer",
-                    "type": "github"
+                    "url": "https://www.patreon.com/voku",
+                    "type": "patreon"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-04-07T13:37:33+00:00"
+            "time": "2020-11-12T00:07:28+00:00"
         },
         {
-            "name": "composer/semver",
-            "version": "3.2.6",
+            "name": "webmozart/assert",
+            "version": "1.10.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "83e511e247de329283478496f7a1e114c9517506"
+                "url": "https://github.com/webmozarts/assert.git",
+                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506",
-                "reference": "83e511e247de329283478496f7a1e114c9517506",
+                "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
+                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^0.12.54",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Semver\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "[email protected]",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "[email protected]",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
-            "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
-            ],
-            "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/semver/issues",
-                "source": "https://github.com/composer/semver/tree/3.2.6"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-10-25T11:34:17+00:00"
-        },
-        {
-            "name": "composer/spdx-licenses",
-            "version": "1.5.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "de30328a7af8680efdc03e396aad24befd513200"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200",
-                "reference": "de30328a7af8680efdc03e396aad24befd513200",
-                "shasum": ""
+                "php": "^7.2 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
             },
-            "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<4.6.1 || 4.6.2"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
+                "phpunit/phpunit": "^8.5.13"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.x-dev"
+                    "dev-master": "1.10-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\Spdx\\": "src"
+                    "Webmozart\\Assert\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "[email protected]",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "[email protected]",
-                    "homepage": "http://robbast.nl"
+                    "name": "Bernhard Schussek",
+                    "email": "[email protected]"
                 }
             ],
-            "description": "SPDX licenses list and validation library.",
+            "description": "Assertions to validate method input/output with nice error messages.",
             "keywords": [
-                "license",
-                "spdx",
-                "validator"
+                "assert",
+                "check",
+                "validate"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/spdx-licenses/issues",
-                "source": "https://github.com/composer/spdx-licenses/tree/1.5.5"
+                "issues": "https://github.com/webmozarts/assert/issues",
+                "source": "https://github.com/webmozarts/assert/tree/1.10.0"
             },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2020-12-03T16:04:16+00:00"
-        },
+            "time": "2021-03-09T10:59:23+00:00"
+        }
+    ],
+    "packages-dev": [
         {
-            "name": "composer/xdebug-handler",
-            "version": "2.0.2",
+            "name": "doctrine/instantiator",
+            "version": "1.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339"
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339",
-                "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
+                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0",
-                "psr/log": "^1 || ^2 || ^3"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "phpstan/phpstan": "^0.12.55",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
+                "doctrine/coding-standard": "^8.0",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
+                "phpstan/phpstan": "^0.12",
+                "phpstan/phpstan-phpunit": "^0.12",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "John Stevenson",
-                    "email": "[email protected]"
+                    "name": "Marco Pivetta",
+                    "email": "[email protected]",
+                    "homepage": "https://ocramius.github.io/"
                 }
             ],
-            "description": "Restarts a process without Xdebug.",
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
-                "Xdebug",
-                "performance"
+                "constructor",
+                "instantiate"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/xdebug-handler/issues",
-                "source": "https://github.com/composer/xdebug-handler/tree/2.0.2"
+                "issues": "https://github.com/doctrine/instantiator/issues",
+                "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
             },
             "funding": [
                 {
-                    "url": "https://packagist.com",
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
                     "type": "custom"
                 },
                 {
-                    "url": "https://github.com/composer",
-                    "type": "github"
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-07-31T17:03:58+00:00"
+            "time": "2020-11-10T18:47:58+00:00"
         },
         {
-            "name": "doctrine/instantiator",
-            "version": "1.4.0",
+            "name": "facade/ignition-contracts",
+            "version": "1.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
+                "url": "https://github.com/facade/ignition-contracts.git",
+                "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
-                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
+                "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
+                "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1 || ^8.0"
+                "php": "^7.3|^8.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^8.0",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+                "friendsofphp/php-cs-fixer": "^v2.15.8",
+                "phpunit/phpunit": "^9.3.11",
+                "vimeo/psalm": "^3.17.1"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                    "Facade\\IgnitionContracts\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "Marco Pivetta",
-                    "email": "[email protected]",
-                    "homepage": "https://ocramius.github.io/"
+                    "name": "Freek Van der Herten",
+                    "email": "[email protected]",
+                    "homepage": "https://flareapp.io",
+                    "role": "Developer"
                 }
             ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "description": "Solution contracts for Ignition",
+            "homepage": "https://github.com/facade/ignition-contracts",
             "keywords": [
-                "constructor",
-                "instantiate"
+                "contracts",
+                "flare",
+                "ignition"
             ],
             "support": {
-                "issues": "https://github.com/doctrine/instantiator/issues",
-                "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
+                "issues": "https://github.com/facade/ignition-contracts/issues",
+                "source": "https://github.com/facade/ignition-contracts/tree/1.0.2"
             },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2020-11-10T18:47:58+00:00"
+            "time": "2020-10-16T08:27:54+00:00"
         },
         {
             "name": "fakerphp/faker",
             "time": "2020-07-09T08:09:16+00:00"
         },
         {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.11",
+            "name": "itsgoingd/clockwork",
+            "version": "v5.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa"
+                "url": "https://github.com/itsgoingd/clockwork.git",
+                "reference": "2daf30fa6dfc5a1ccfdb2142df59243a72c473d8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa",
-                "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa",
+                "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/2daf30fa6dfc5a1ccfdb2142df59243a72c473d8",
+                "reference": "2daf30fa6dfc5a1ccfdb2142df59243a72c473d8",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
+                "ext-json": "*",
+                "php": ">=5.6",
+                "psr/log": "1.* || ^2.0"
             },
-            "bin": [
-                "bin/validate-json"
-            ],
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0.x-dev"
+                "laravel": {
+                    "providers": [
+                        "Clockwork\\Support\\Laravel\\ClockworkServiceProvider"
+                    ],
+                    "aliases": {
+                        "Clockwork": "Clockwork\\Support\\Laravel\\Facade"
+                    }
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
+                    "Clockwork\\": "Clockwork/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             ],
             "authors": [
                 {
-                    "name": "Bruno Prieto Reis",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Justin Rainbow",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "[email protected]"
+                    "name": "itsgoingd",
+                    "email": "[email protected]",
+                    "homepage": "https://twitter.com/itsgoingd"
                 }
             ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
+            "description": "php dev tools in your browser",
+            "homepage": "https://underground.works/clockwork",
             "keywords": [
-                "json",
-                "schema"
+                "Devtools",
+                "debugging",
+                "laravel",
+                "logging",
+                "lumen",
+                "profiling",
+                "slim"
             ],
             "support": {
-                "issues": "https://github.com/justinrainbow/json-schema/issues",
-                "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11"
-            },
-            "time": "2021-07-22T09:24:00+00:00"
-        },
-        {
-            "name": "maximebf/debugbar",
-            "version": "v1.17.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/maximebf/php-debugbar.git",
-                "reference": "3541f09f09c003c4a9ff7ddb0eb3361a7f14d418"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/3541f09f09c003c4a9ff7ddb0eb3361a7f14d418",
-                "reference": "3541f09f09c003c4a9ff7ddb0eb3361a7f14d418",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1|^8",
-                "psr/log": "^1|^2|^3",
-                "symfony/var-dumper": "^2.6|^3|^4|^5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^7.5.20 || ^9.4.2"
-            },
-            "suggest": {
-                "kriswallsmith/assetic": "The best way to manage assets",
-                "monolog/monolog": "Log using Monolog",
-                "predis/predis": "Redis storage"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.17-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "DebugBar\\": "src/DebugBar/"
-                }
+                "issues": "https://github.com/itsgoingd/clockwork/issues",
+                "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.1"
             },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Maxime Bouroumeau-Fuseau",
-                    "email": "[email protected]",
-                    "homepage": "http://maximebf.com"
-                },
+            "funding": [
                 {
-                    "name": "Barry vd. Heuvel",
-                    "email": "[email protected]"
+                    "url": "https://github.com/itsgoingd",
+                    "type": "github"
                 }
             ],
-            "description": "Debug bar in the browser for php application",
-            "homepage": "https://github.com/maximebf/php-debugbar",
-            "keywords": [
-                "debug",
-                "debugbar"
-            ],
-            "support": {
-                "issues": "https://github.com/maximebf/php-debugbar/issues",
-                "source": "https://github.com/maximebf/php-debugbar/tree/v1.17.2"
-            },
-            "time": "2021-10-18T09:39:00+00:00"
+            "time": "2021-11-01T17:38:35+00:00"
         },
         {
             "name": "mockery/mockery",
             "time": "2020-11-13T09:40:50+00:00"
         },
         {
-            "name": "nikic/php-parser",
-            "version": "v4.13.0",
+            "name": "nunomaduro/collision",
+            "version": "v5.10.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "50953a2691a922aa1769461637869a0a2faa3f53"
+                "url": "https://github.com/nunomaduro/collision.git",
+                "reference": "3004cfa49c022183395eabc6d0e5207dfe498d00"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53",
-                "reference": "50953a2691a922aa1769461637869a0a2faa3f53",
+                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/3004cfa49c022183395eabc6d0e5207dfe498d00",
+                "reference": "3004cfa49c022183395eabc6d0e5207dfe498d00",
                 "shasum": ""
             },
             "require": {
-                "ext-tokenizer": "*",
-                "php": ">=7.0"
+                "facade/ignition-contracts": "^1.0",
+                "filp/whoops": "^2.14.3",
+                "php": "^7.3 || ^8.0",
+                "symfony/console": "^5.0"
             },
             "require-dev": {
-                "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+                "brianium/paratest": "^6.1",
+                "fideloper/proxy": "^4.4.1",
+                "fruitcake/laravel-cors": "^2.0.3",
+                "laravel/framework": "8.x-dev",
+                "nunomaduro/larastan": "^0.6.2",
+                "nunomaduro/mock-final-classes": "^1.0",
+                "orchestra/testbench": "^6.0",
+                "phpstan/phpstan": "^0.12.64",
+                "phpunit/phpunit": "^9.5.0"
             },
-            "bin": [
-                "bin/php-parse"
-            ],
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "4.9-dev"
+                "laravel": {
+                    "providers": [
+                        "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
+                    ]
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
+                    "NunoMaduro\\Collision\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nikita Popov"
+                    "name": "Nuno Maduro",
+                    "email": "[email protected]"
                 }
             ],
-            "description": "A PHP parser written in PHP",
+            "description": "Cli error handling for console/command-line PHP applications.",
             "keywords": [
-                "parser",
-                "php"
+                "artisan",
+                "cli",
+                "command-line",
+                "console",
+                "error",
+                "handling",
+                "laravel",
+                "laravel-zero",
+                "php",
+                "symfony"
             ],
             "support": {
-                "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0"
+                "issues": "https://github.com/nunomaduro/collision/issues",
+                "source": "https://github.com/nunomaduro/collision"
             },
-            "time": "2021-09-20T12:20:58+00:00"
+            "funding": [
+                {
+                    "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/nunomaduro",
+                    "type": "patreon"
+                }
+            ],
+            "time": "2021-09-20T15:06:32+00:00"
         },
         {
             "name": "phar-io/manifest",
             ],
             "time": "2021-09-25T07:38:51+00:00"
         },
-        {
-            "name": "react/promise",
-            "version": "v2.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/reactphp/promise.git",
-                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
-                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "React\\Promise\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jan Sorgalla",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
-            "keywords": [
-                "promise",
-                "promises"
-            ],
-            "support": {
-                "issues": "https://github.com/reactphp/promise/issues",
-                "source": "https://github.com/reactphp/promise/tree/v2.8.0"
-            },
-            "time": "2020-05-12T15:16:56+00:00"
-        },
         {
             "name": "sebastian/cli-parser",
             "version": "1.0.1",
             ],
             "time": "2020-09-28T06:39:44+00:00"
         },
-        {
-            "name": "seld/jsonlint",
-            "version": "1.8.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
-                "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "bin": [
-                "bin/jsonlint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "support": {
-                "issues": "https://github.com/Seldaek/jsonlint/issues",
-                "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/Seldaek",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2020-11-11T09:19:24+00:00"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "1.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/749042a2315705d2dfbbc59234dd9ceb22bf3ff0",
-                "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
-            "keywords": [
-                "phar"
-            ],
-            "support": {
-                "issues": "https://github.com/Seldaek/phar-utils/issues",
-                "source": "https://github.com/Seldaek/phar-utils/tree/1.1.2"
-            },
-            "time": "2021-08-19T21:01:38+00:00"
-        },
         {
             "name": "symfony/dom-crawler",
             "version": "v5.3.7",
             ],
             "time": "2021-08-29T19:32:13+00:00"
         },
-        {
-            "name": "symfony/filesystem",
-            "version": "v5.3.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32",
-                "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "[email protected]"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides basic utilities for the filesystem",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/filesystem/tree/v5.3.4"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-07-21T12:40:44+00:00"
-        },
         {
             "name": "theseer/tokenizer",
             "version": "1.2.1",
                 }
             ],
             "time": "2021-07-28T10:34:58+00:00"
-        },
-        {
-            "name": "webmozart/assert",
-            "version": "1.10.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozarts/assert.git",
-                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
-                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0",
-                "symfony/polyfill-ctype": "^1.8"
-            },
-            "conflict": {
-                "phpstan/phpstan": "<0.12.20",
-                "vimeo/psalm": "<4.6.1 || 4.6.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^8.5.13"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.10-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "support": {
-                "issues": "https://github.com/webmozarts/assert/issues",
-                "source": "https://github.com/webmozarts/assert/tree/1.10.0"
-            },
-            "time": "2021-03-09T10:59:23+00:00"
         }
     ],
     "aliases": [],
diff --git a/database/factories/Actions/CommentFactory.php b/database/factories/Actions/CommentFactory.php
new file mode 100644 (file)
index 0000000..e81f3fe
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+namespace Database\Factories\Actions;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+
+class CommentFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Actions\Comment::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        $text = $this->faker->paragraph(1);
+        $html = '<p>' . $text . '</p>';
+
+        return [
+            'html'      => $html,
+            'text'      => $text,
+            'parent_id' => null,
+        ];
+    }
+}
diff --git a/database/factories/Actions/TagFactory.php b/database/factories/Actions/TagFactory.php
new file mode 100644 (file)
index 0000000..8d5c77e
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+namespace Database\Factories\Actions;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+
+class TagFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Actions\Tag::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        return [
+            'name'  => $this->faker->city,
+            'value' => $this->faker->sentence(3),
+        ];
+    }
+}
diff --git a/database/factories/Auth/RoleFactory.php b/database/factories/Auth/RoleFactory.php
new file mode 100644 (file)
index 0000000..a952e04
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+namespace Database\Factories\Auth;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+
+class RoleFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Auth\Role::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        return [
+            'display_name' => $this->faker->sentence(3),
+            'description'  => $this->faker->sentence(10),
+        ];
+    }
+}
diff --git a/database/factories/Auth/UserFactory.php b/database/factories/Auth/UserFactory.php
new file mode 100644 (file)
index 0000000..77d63ac
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+
+namespace Database\Factories\Auth;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Str;
+
+class UserFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Auth\User::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        $name = $this->faker->name;
+
+        return [
+            'name'            => $name,
+            'email'           => $this->faker->email,
+            'slug'            => \Illuminate\Support\Str::slug($name . '-' . \Illuminate\Support\Str::random(5)),
+            'password'        => Str::random(10),
+            'remember_token'  => Str::random(10),
+            'email_confirmed' => 1,
+        ];
+    }
+}
diff --git a/database/factories/Entities/Models/BookFactory.php b/database/factories/Entities/Models/BookFactory.php
new file mode 100644 (file)
index 0000000..0613800
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+namespace Database\Factories\Entities\Models;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Str;
+
+class BookFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Entities\Models\Book::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        return [
+            'name'        => $this->faker->sentence,
+            'slug'        => Str::random(10),
+            'description' => $this->faker->paragraph,
+        ];
+    }
+}
diff --git a/database/factories/Entities/Models/BookshelfFactory.php b/database/factories/Entities/Models/BookshelfFactory.php
new file mode 100644 (file)
index 0000000..66dd1c1
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+namespace Database\Factories\Entities\Models;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Str;
+
+class BookshelfFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Entities\Models\Bookshelf::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        return [
+            'name'        => $this->faker->sentence,
+            'slug'        => Str::random(10),
+            'description' => $this->faker->paragraph,
+        ];
+    }
+}
diff --git a/database/factories/Entities/Models/ChapterFactory.php b/database/factories/Entities/Models/ChapterFactory.php
new file mode 100644 (file)
index 0000000..4fcd69c
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+namespace Database\Factories\Entities\Models;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Str;
+
+class ChapterFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Entities\Models\Chapter::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        return [
+            'name'        => $this->faker->sentence,
+            'slug'        => Str::random(10),
+            'description' => $this->faker->paragraph,
+        ];
+    }
+}
diff --git a/database/factories/Entities/Models/PageFactory.php b/database/factories/Entities/Models/PageFactory.php
new file mode 100644 (file)
index 0000000..c83e0f8
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+namespace Database\Factories\Entities\Models;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Str;
+
+class PageFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Entities\Models\Page::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        $html = '<p>' . implode('</p>', $this->faker->paragraphs(5)) . '</p>';
+
+        return [
+            'name'           => $this->faker->sentence,
+            'slug'           => Str::random(10),
+            'html'           => $html,
+            'text'           => strip_tags($html),
+            'revision_count' => 1,
+        ];
+    }
+}
diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php
deleted file mode 100644 (file)
index dc06455..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-/*
-|--------------------------------------------------------------------------
-| Model Factories
-|--------------------------------------------------------------------------
-|
-| Here you may define all of your model factories. Model factories give
-| you a convenient way to create models for testing and seeding your
-| database. Just tell the factory how a default model should look.
-|
-*/
-
-$factory->define(\BookStack\Auth\User::class, function ($faker) {
-    $name = $faker->name;
-
-    return [
-        'name'            => $name,
-        'email'           => $faker->email,
-        'slug'            => \Illuminate\Support\Str::slug($name . '-' . \Illuminate\Support\Str::random(5)),
-        'password'        => Str::random(10),
-        'remember_token'  => Str::random(10),
-        'email_confirmed' => 1,
-    ];
-});
-
-$factory->define(\BookStack\Entities\Models\Bookshelf::class, function ($faker) {
-    return [
-        'name'        => $faker->sentence,
-        'slug'        => Str::random(10),
-        'description' => $faker->paragraph,
-    ];
-});
-
-$factory->define(\BookStack\Entities\Models\Book::class, function ($faker) {
-    return [
-        'name'        => $faker->sentence,
-        'slug'        => Str::random(10),
-        'description' => $faker->paragraph,
-    ];
-});
-
-$factory->define(\BookStack\Entities\Models\Chapter::class, function ($faker) {
-    return [
-        'name'        => $faker->sentence,
-        'slug'        => Str::random(10),
-        'description' => $faker->paragraph,
-    ];
-});
-
-$factory->define(\BookStack\Entities\Models\Page::class, function ($faker) {
-    $html = '<p>' . implode('</p>', $faker->paragraphs(5)) . '</p>';
-
-    return [
-        'name'           => $faker->sentence,
-        'slug'           => Str::random(10),
-        'html'           => $html,
-        'text'           => strip_tags($html),
-        'revision_count' => 1,
-    ];
-});
-
-$factory->define(\BookStack\Auth\Role::class, function ($faker) {
-    return [
-        'display_name' => $faker->sentence(3),
-        'description'  => $faker->sentence(10),
-    ];
-});
-
-$factory->define(\BookStack\Actions\Tag::class, function ($faker) {
-    return [
-        'name'  => $faker->city,
-        'value' => $faker->sentence(3),
-    ];
-});
-
-$factory->define(\BookStack\Uploads\Image::class, function ($faker) {
-    return [
-        'name'        => $faker->slug . '.jpg',
-        'url'         => $faker->url,
-        'path'        => $faker->url,
-        'type'        => 'gallery',
-        'uploaded_to' => 0,
-    ];
-});
-
-$factory->define(\BookStack\Actions\Comment::class, function ($faker) {
-    $text = $faker->paragraph(1);
-    $html = '<p>' . $text . '</p>';
-
-    return [
-        'html'      => $html,
-        'text'      => $text,
-        'parent_id' => null,
-    ];
-});
diff --git a/database/factories/Uploads/ImageFactory.php b/database/factories/Uploads/ImageFactory.php
new file mode 100644 (file)
index 0000000..c6d0e08
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+namespace Database\Factories\Uploads;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+
+class ImageFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = \BookStack\Uploads\Image::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        return [
+            'name'        => $this->faker->slug . '.jpg',
+            'url'         => $this->faker->url,
+            'path'        => $this->faker->url,
+            'type'        => 'gallery',
+            'uploaded_to' => 0,
+        ];
+    }
+}
index 04f46ce509f4122ee2e2fa1ab2cef8d484663713..bb1aec95b6ca95bc831e8429e23a1204c8ea5b0d 100644 (file)
@@ -2,6 +2,7 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 class CreateBookshelvesTable extends Migration
similarity index 92%
rename from database/seeds/DatabaseSeeder.php
rename to database/seeders/DatabaseSeeder.php
index 069765eb48cb36aed6610d4d73452a18b1abfb41..21eaefb19ffde6f1633af29a87340585bcd31c55 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+namespace Database\Seeders;
+
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Seeder;
 
similarity index 71%
rename from database/seeds/DummyContentSeeder.php
rename to database/seeders/DummyContentSeeder.php
index 7463a3b3760ac006bb26c3e5845d3300e8f3cb67..d54732b26357338c7d9b20bcd367254c1a0afe9c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+namespace Database\Seeders;
+
 use BookStack\Api\ApiToken;
 use BookStack\Auth\Permissions\PermissionService;
 use BookStack\Auth\Permissions\RolePermission;
@@ -10,6 +12,7 @@ use BookStack\Entities\Models\Chapter;
 use BookStack\Entities\Models\Page;
 use BookStack\Entities\Tools\SearchIndex;
 use Illuminate\Database\Seeder;
+use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Str;
 
 class DummyContentSeeder extends Seeder
@@ -22,36 +25,36 @@ class DummyContentSeeder extends Seeder
     public function run()
     {
         // Create an editor user
-        $editorUser = factory(User::class)->create();
+        $editorUser = User::factory()->create();
         $editorRole = Role::getRole('editor');
         $editorUser->attachRole($editorRole);
 
         // Create a viewer user
-        $viewerUser = factory(User::class)->create();
+        $viewerUser = User::factory()->create();
         $role = Role::getRole('viewer');
         $viewerUser->attachRole($role);
 
         $byData = ['created_by' => $editorUser->id, 'updated_by' => $editorUser->id, 'owned_by' => $editorUser->id];
 
-        factory(\BookStack\Entities\Models\Book::class, 5)->create($byData)
+        \BookStack\Entities\Models\Book::factory()->count(5)->create($byData)
             ->each(function ($book) use ($byData) {
-                $chapters = factory(Chapter::class, 3)->create($byData)
+                $chapters = Chapter::factory()->count(3)->create($byData)
                     ->each(function ($chapter) use ($book, $byData) {
-                        $pages = factory(Page::class, 3)->make(array_merge($byData, ['book_id' => $book->id]));
+                        $pages = Page::factory()->count(3)->make(array_merge($byData, ['book_id' => $book->id]));
                         $chapter->pages()->saveMany($pages);
                     });
-                $pages = factory(Page::class, 3)->make($byData);
+                $pages = Page::factory()->count(3)->make($byData);
                 $book->chapters()->saveMany($chapters);
                 $book->pages()->saveMany($pages);
             });
 
-        $largeBook = factory(\BookStack\Entities\Models\Book::class)->create(array_merge($byData, ['name' => 'Large book' . Str::random(10)]));
-        $pages = factory(Page::class, 200)->make($byData);
-        $chapters = factory(Chapter::class, 50)->make($byData);
+        $largeBook = \BookStack\Entities\Models\Book::factory()->create(array_merge($byData, ['name' => 'Large book' . Str::random(10)]));
+        $pages = Page::factory()->count(200)->make($byData);
+        $chapters = Chapter::factory()->count(50)->make($byData);
         $largeBook->pages()->saveMany($pages);
         $largeBook->chapters()->saveMany($chapters);
 
-        $shelves = factory(Bookshelf::class, 10)->create($byData);
+        $shelves = Bookshelf::factory()->count(10)->create($byData);
         $largeBook->shelves()->attach($shelves->pluck('id'));
 
         // Assign API permission to editor role and create an API key
similarity index 60%
rename from database/seeds/LargeContentSeeder.php
rename to database/seeders/LargeContentSeeder.php
index 535626b8f794e8c74fb3d28a8b0bfe6ce7612975..2fbf4a5c9822c9234ebffb42f43975d944ff4ff4 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+namespace Database\Seeders;
+
 use BookStack\Auth\Permissions\PermissionService;
 use BookStack\Auth\Role;
 use BookStack\Auth\User;
@@ -19,13 +21,13 @@ class LargeContentSeeder extends Seeder
     public function run()
     {
         // Create an editor user
-        $editorUser = factory(User::class)->create();
+        $editorUser = User::factory()->create();
         $editorRole = Role::getRole('editor');
         $editorUser->attachRole($editorRole);
 
-        $largeBook = factory(\BookStack\Entities\Models\Book::class)->create(['name' => 'Large book' . Str::random(10), 'created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
-        $pages = factory(Page::class, 200)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
-        $chapters = factory(Chapter::class, 50)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
+        $largeBook = \BookStack\Entities\Models\Book::factory()->create(['name' => 'Large book' . Str::random(10), 'created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
+        $pages = Page::factory()->count(200)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
+        $chapters = Chapter::factory()->count(50)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
         $largeBook->pages()->saveMany($pages);
         $largeBook->chapters()->saveMany($chapters);
         app(PermissionService::class)->buildJointPermissions();
index 5af524e1a4f878cdaafe29af20dfbe2fcbeb0c1e..ee1b21ac04e179ecad869f8f22ab8ae1ef1ab970 100644 (file)
@@ -7,6 +7,6 @@
   "order": 2,
   "created_by": 1,
   "updated_by": 1,
-  "created_at": "2021-10-20 06:35:46",
-  "updated_at": "2021-10-20 06:35:46"
+  "created_at": "2021-10-20T06:35:46.000000Z",
+  "updated_at": "2021-10-20T06:35:46.000000Z"
 }
\ No newline at end of file
index 946dd542abe71c8291d4715f8b68e6b7724fe895..af652d5ed61c57bb34215d1e06a55548df32ef15 100644 (file)
@@ -7,8 +7,8 @@
       "uploaded_to": 8,
       "external": false,
       "order": 1,
-      "created_at": "2021-10-11 06:18:49",
-      "updated_at": "2021-10-20 06:31:10",
+      "created_at": "2021-10-11T06:18:49.000000Z",
+      "updated_at": "2021-10-20T06:31:10.000000Z",
       "created_by": 1,
       "updated_by": 1
     },
@@ -19,8 +19,8 @@
       "uploaded_to": 9,
       "external": true,
       "order": 1,
-      "created_at": "2021-10-20 06:30:11",
-      "updated_at": "2021-10-20 06:30:11",
+      "created_at": "2021-10-20T06:30:11.000000Z",
+      "updated_at": "2021-10-20T06:30:11.000000Z",
       "created_by": 1,
       "updated_by": 1
     }
index e22f4e5fe92cb3f24900ea21a5900510777b8945..48d6f72e6172a4dada83c3e1e6339263bccc0837 100644 (file)
@@ -15,8 +15,8 @@
     "name": "Admin",
     "slug": "admin"
   },
-  "created_at": "2021-10-20 06:35:46",
-  "updated_at": "2021-10-20 06:37:11",
+  "created_at": "2021-10-20T06:35:46.000000Z",
+  "updated_at": "2021-10-20T06:37:11.000000Z",
   "links": {
     "html": "<a target=\"_blank\" href=\"https://bookstack.local/attachments/5\">My updated attachment</a>",
     "markdown": "[My updated attachment](https://bookstack.local/attachments/5)"
index 8054b0e4897a25640845aa10b0328d7bae195562..43689eb61a9c03ff950a0257f170c127f6e2effc 100644 (file)
@@ -7,6 +7,6 @@
   "order": 2,
   "created_by": 1,
   "updated_by": 1,
-  "created_at": "2021-10-20 06:35:46",
-  "updated_at": "2021-10-20 06:37:11"
+  "created_at": "2021-10-20T06:35:46.000000Z",
+  "updated_at": "2021-10-20T06:37:11.000000Z"
 }
\ No newline at end of file
index 124305c8cd3527fca0c3117d78005d0fd989e93a..ede6fcc8e5cee0cad9cac82282448c1b35ba37a9 100644 (file)
@@ -5,7 +5,7 @@
   "updated_by": 1,
   "owned_by": 1,
   "slug": "my-new-book",
-  "updated_at": "2020-01-12 14:05:11",
-  "created_at": "2020-01-12 14:05:11",
+  "updated_at": "2020-01-12T14:05:11.000000Z",
+  "created_at": "2020-01-12T14:05:11.000000Z",
   "id": 15
 }
\ No newline at end of file
index 9900b5b0445a3d157237ec95830ccf735672b00e..45a8c542f387b0a8000387fd2ccb2bcb9e72aa65 100644 (file)
@@ -5,8 +5,8 @@
       "name": "BookStack User Guide",
       "slug": "bookstack-user-guide",
       "description": "This is a general guide on using BookStack on a day-to-day basis.",
-      "created_at": "2019-05-05 21:48:46",
-      "updated_at": "2019-12-11 20:57:31",
+      "created_at": "2019-05-05T21:48:46.000000Z",
+      "updated_at": "2019-12-11T20:57:31.000000Z",
       "created_by": 1,
       "updated_by": 1,
       "owned_by": 1,
@@ -17,8 +17,8 @@
       "name": "Inventore inventore quia voluptatem.",
       "slug": "inventore-inventore-quia-voluptatem",
       "description": "Veniam nihil voluptas enim laborum corporis quos sint. Ab rerum voluptas ut iste voluptas magni quibusdam ut. Amet omnis enim voluptate neque facilis.",
-      "created_at": "2019-05-05 22:10:14",
-      "updated_at": "2019-12-11 20:57:23",
+      "created_at": "2019-05-05T22:10:14.000000Z",
+      "updated_at": "2019-12-11T20:57:23.000000Z",
       "created_by": 4,
       "updated_by": 3,
       "owned_by": 3,
index 0b0bce4e8f91571e443063623766ee61c84efb55..7de85addce5525d9e71f924b288c78fff37a3156 100644 (file)
@@ -3,8 +3,8 @@
   "name": "My own book",
   "slug": "my-own-book",
   "description": "This is my own little book",
-  "created_at": "2020-01-12 14:09:59",
-  "updated_at": "2020-01-12 14:11:51",
+  "created_at": "2020-01-12T14:09:59.000000Z",
+  "updated_at": "2020-01-12T14:11:51.000000Z",
   "created_by": {
     "id": 1,
     "name": "Admin"
@@ -29,8 +29,8 @@
     "id": 452,
     "name": "sjovall_m117hUWMu40.jpg",
     "url": "https:\/\/p.rizon.top:443\/http\/bookstack.local\/uploads\/images\/cover_book\/2020-01\/sjovall_m117hUWMu40.jpg",
-    "created_at": "2020-01-12 14:11:51",
-    "updated_at": "2020-01-12 14:11:51",
+    "created_at": "2020-01-12T14:11:51.000000Z",
+    "updated_at": "2020-01-12T14:11:51.000000Z",
     "created_by": 1,
     "updated_by": 1,
     "path": "\/uploads\/images\/cover_book\/2020-01\/sjovall_m117hUWMu40.jpg",
index fd93dc9aef1a3045ed874be2c9451adc7074b910..30c910aa32db870deed44c4954b894f6df8e142e 100644 (file)
@@ -3,8 +3,8 @@
   "name": "My own book",
   "slug": "my-own-book",
   "description": "This is my own little book - updated",
-  "created_at": "2020-01-12 14:09:59",
-  "updated_at": "2020-01-12 14:16:10",
+  "created_at": "2020-01-12T14:09:59.000000Z",
+  "updated_at": "2020-01-12T14:16:10.000000Z",
   "created_by": 1,
   "updated_by": 1,
   "owned_by": 1,
index a990f278bac30e02c907e824c3a66841902b5bb2..81b422c255bb476fa4dcea31c2a9e71fba46a3a6 100644 (file)
@@ -7,16 +7,16 @@
   "updated_by": 1,
   "owned_by": 1,
   "slug": "my-fantastic-new-chapter",
-  "updated_at": "2020-05-22 22:59:55",
-  "created_at": "2020-05-22 22:59:55",
+  "updated_at": "2020-05-22T22:59:55.000000Z",
+  "created_at": "2020-05-22T22:59:55.000000Z",
   "id": 74,
   "book": {
     "id": 1,
     "name": "BookStack User Guide",
     "slug": "bookstack-user-guide",
     "description": "This is a general guide on using BookStack on a day-to-day basis.",
-    "created_at": "2019-05-05 21:48:46",
-    "updated_at": "2019-12-11 20:57:31",
+    "created_at": "2019-05-05T21:48:46.000000Z",
+    "updated_at": "2019-12-11T20:57:31.000000Z",
     "created_by": 1,
     "updated_by": 1
   },
       "name": "Category",
       "value": "Top Content",
       "order": 0,
-      "created_at": "2020-05-22 22:59:55",
-      "updated_at": "2020-05-22 22:59:55"
+      "created_at": "2020-05-22T22:59:55.000000Z",
+      "updated_at": "2020-05-22T22:59:55.000000Z"
     },
     {
       "name": "Rating",
       "value": "Highest",
       "order": 0,
-      "created_at": "2020-05-22 22:59:55",
-      "updated_at": "2020-05-22 22:59:55"
+      "created_at": "2020-05-22T22:59:55.000000Z",
+      "updated_at": "2020-05-22T22:59:55.000000Z"
     }
   ]
 }
\ No newline at end of file
index 72ed7534df2eba47e16fa883dde9d216cb37c809..9790286b0a2ccf52bf51743552878cd63b618121 100644 (file)
@@ -7,8 +7,8 @@
       "slug": "content-creation",
       "description": "How to create documentation on whatever subject you need to write about.",
       "priority": 3,
-      "created_at": "2019-05-05 21:49:56",
-      "updated_at": "2019-09-28 11:24:23",
+      "created_at": "2019-05-05:",
+      "updated_at": "2019-09-28T11:24:23.000000Z",
       "created_by": 1,
       "updated_by": 1,
       "owned_by": 1
@@ -20,8 +20,8 @@
       "slug": "managing-content",
       "description": "How to keep things organised and orderly in the system for easier navigation and better user experience.",
       "priority": 5,
-      "created_at": "2019-05-05 21:58:07",
-      "updated_at": "2019-10-17 15:05:34",
+      "created_at": "2019-05-05T21:58:07.000000Z",
+      "updated_at": "2019-10-17T15:05:34.000000Z",
       "created_by": 3,
       "updated_by": 3,
       "owned_by": 3
index 41fed80efc1a3786ca4919c9d8d33a7937e2197a..a51b406c77fd1c5d73783cbd2c73201447b1f288 100644 (file)
@@ -5,8 +5,8 @@
   "name": "Content Creation",
   "description": "How to create documentation on whatever subject you need to write about.",
   "priority": 3,
-  "created_at": "2019-05-05 21:49:56",
-  "updated_at": "2019-09-28 11:24:23",
+  "created_at": "2019-05-05T21:49:56.000000Z",
+  "updated_at": "2019-09-28T11:24:23.000000Z",
   "created_by": {
     "id": 1,
     "name": "Admin"
@@ -34,8 +34,8 @@
       "name": "How to create page content",
       "slug": "how-to-create-page-content",
       "priority": 0,
-      "created_at": "2019-05-05 21:49:58",
-      "updated_at": "2019-08-26 14:32:59",
+      "created_at": "2019-05-05T21:49:58.000000Z",
+      "updated_at": "2019-08-26T14:32:59.000000Z",
       "created_by": 1,
       "updated_by": 1,
       "draft": false,
@@ -49,8 +49,8 @@
       "name": "Good book structure",
       "slug": "good-book-structure",
       "priority": 1,
-      "created_at": "2019-05-05 22:01:55",
-      "updated_at": "2019-06-06 12:03:04",
+      "created_at": "2019-05-05T22:01:55.000000Z",
+      "updated_at": "2019-06-06T12:03:04.000000Z",
       "created_by": 3,
       "updated_by": 3,
       "draft": false,
index 11dedd0ca897f6efd4ebbc207e3ed988ba418ca3..9ce88dab2266676b9a07d31c642ba569128021dd 100644 (file)
@@ -5,8 +5,8 @@
   "name": "My fantastic updated chapter",
   "description": "This is an updated chapter that I've altered via the API",
   "priority": 7,
-  "created_at": "2020-05-22 23:03:35",
-  "updated_at": "2020-05-22 23:07:20",
+  "created_at": "2020-05-22T23:03:35.000000Z",
+  "updated_at": "2020-05-22T23:07:20.000000Z",
   "created_by": 1,
   "updated_by": 1,
   "owned_by": 1,
@@ -15,8 +15,8 @@
     "name": "BookStack User Guide",
     "slug": "bookstack-user-guide",
     "description": "This is a general guide on using BookStack on a day-to-day basis.",
-    "created_at": "2019-05-05 21:48:46",
-    "updated_at": "2019-12-11 20:57:31",
+    "created_at": "2019-05-05T21:48:46.000000Z",
+    "updated_at": "2019-12-11T20:57:31.000000Z",
     "created_by": 1,
     "updated_by": 1
   },
       "name": "Category",
       "value": "Kinda Good Content",
       "order": 0,
-      "created_at": "2020-05-22 23:07:20",
-      "updated_at": "2020-05-22 23:07:20"
+      "created_at": "2020-05-22T23:07:20.000000Z",
+      "updated_at": "2020-05-22T23:07:20.000000Z"
     },
     {
       "name": "Rating",
       "value": "Medium",
       "order": 0,
-      "created_at": "2020-05-22 23:07:20",
-      "updated_at": "2020-05-22 23:07:20"
+      "created_at": "2020-05-22T23:07:20.000000Z",
+      "updated_at": "2020-05-22T23:07:20.000000Z"
     }
   ]
 }
\ No newline at end of file
index 0b19fb47309d11af43a5bc8ddbb9eabeb2c49713..eeaa5303af6d5eea824c59c733945b209d46add0 100644 (file)
@@ -6,8 +6,8 @@
        "slug": "my-api-page",
        "html": "<p id=\"bkmrk-my-new-api-page\">my new API page</p>",
        "priority": 14,
-       "created_at": "2020-11-28 15:01:39",
-       "updated_at": "2020-11-28 15:01:39",
+       "created_at": "2020-11-28T15:01:39.000000Z",
+       "updated_at": "2020-11-28T15:01:39.000000Z",
        "created_by": {
                "id": 1,
                "name": "Admin"
index 9c162c6b6ee1200a9477cbed1d4ce6f977477efc..2ff4aeb3a82f16eb8dc97008479e40d23a0215dd 100644 (file)
@@ -9,8 +9,8 @@
                        "priority": 0,
                        "draft": false,
                        "template": false,
-                       "created_at": "2019-05-05 21:49:58",
-                       "updated_at": "2020-07-04 15:50:58",
+                       "created_at": "2019-05-05T21:49:58.000000Z",
+                       "updated_at": "2020-07-04T15:50:58.000000Z",
                        "created_by": 1,
                        "updated_by": 1,
                        "owned_by": 1
@@ -24,8 +24,8 @@
                        "priority": 2,
                        "draft": false,
                        "template": false,
-                       "created_at": "2019-05-05 21:53:30",
-                       "updated_at": "2019-06-06 12:03:04",
+                       "created_at": "2019-05-05T21:53:30.000000Z",
+                       "updated_at": "2019-06-06T12:03:04.000000Z",
                        "created_by": 1,
                        "updated_by": 1,
                        "owned_by": 1
@@ -39,8 +39,8 @@
                        "priority": 3,
                        "draft": false,
                        "template": false,
-                       "created_at": "2019-05-05 21:53:49",
-                       "updated_at": "2019-12-18 21:56:52",
+                       "created_at": "2019-05-05T21:53:49.000000Z",
+                       "updated_at": "2019-12-18T21:56:52.000000Z",
                        "created_by": 1,
                        "updated_by": 1,
                        "owned_by": 1
index 93f7770ac7850650496087ff191c570c7bd3787e..9a21cd44cad93a2fc13846d7c54e687faece45da 100644 (file)
@@ -6,8 +6,8 @@
        "slug": "a-page-written-in-markdown",
        "html": "<h1 id=\"bkmrk-how-this-is-built\">How this is built</h1>\r\n<p id=\"bkmrk-this-page-is-written\">This page is written in markdown. BookStack stores the page data in HTML.</p>\r\n<p id=\"bkmrk-here%27s-a-cute-pictur\">Here's a cute picture of my cat:</p>\r\n<p id=\"bkmrk-\"><a href=\"http://example.com/uploads/images/gallery/2020-04/yXSrubes.jpg\"><img src=\"http://example.com/uploads/images/gallery/2020-04/scaled-1680-/yXSrubes.jpg\" alt=\"yXSrubes.jpg\"></a></p>",
        "priority": 13,
-       "created_at": "2020-02-02 21:40:38",
-       "updated_at": "2020-11-28 14:43:20",
+       "created_at": "2020-02-02T21:40:38.000000Z",
+       "updated_at": "2020-11-28T14:43:20.000000Z",
        "created_by": {
                "id": 1,
                "name": "Admin"
index ae5c0ea3fcb7a9a22708d03979545b33bf9bacb5..0b8b2374c180fe66c4497b2f56095b5fc5cb4675 100644 (file)
@@ -6,8 +6,8 @@
        "slug": "my-updated-api-page",
        "html": "<p id=\"bkmrk-my-new-api-page---up\">my new API page - Updated</p>",
        "priority": 16,
-       "created_at": "2020-11-28 15:10:54",
-       "updated_at": "2020-11-28 15:13:03",
+       "created_at": "2020-11-28T15:10:54.000000Z",
+       "updated_at": "2020-11-28T15:13:03.000000Z",
        "created_by": {
                "id": 1,
                "name": "Admin"
index fafa4c9cd1e64f82bf4e81db8fbcf7aca256b620..9988c782c1a7db50aec3ca789d17ec5cfcd66cc5 100644 (file)
@@ -5,7 +5,7 @@
   "updated_by": 1,
   "owned_by": 1,
   "slug": "my-shelf",
-  "updated_at": "2020-04-10 13:24:09",
-  "created_at": "2020-04-10 13:24:09",
+  "updated_at": "2020-04-10T13:24:09.000000Z",
+  "created_at": "2020-04-10T13:24:09.000000Z",
   "id": 14
 }
\ No newline at end of file
index f5e9d03bb6f10ba6df1ed1677782ca788c7bc0a6..82ead7d93a3da98279cef96cb1d2a905218fe317 100644 (file)
@@ -5,8 +5,8 @@
       "name": "Qui qui aspernatur autem molestiae libero necessitatibus molestias.",
       "slug": "qui-qui-aspernatur-autem-molestiae-libero-necessitatibus-molestias",
       "description": "Enim dolor ut quia error dolores est. Aut distinctio consequuntur non nisi nostrum. Labore cupiditate error labore aliquid provident impedit voluptatibus. Quaerat impedit excepturi eius qui eius voluptatem reiciendis.",
-      "created_at": "2019-05-05 22:10:16",
-      "updated_at": "2020-04-10 13:00:45",
+      "created_at": "2019-05-05T22:10:16.000000Z",
+      "updated_at": "2020-04-10T13:00:45.000000Z",
       "created_by": 4,
       "updated_by": 1,
       "owned_by": 1,
@@ -17,8 +17,8 @@
       "name": "Ipsum aut inventore fuga libero non facilis.",
       "slug": "ipsum-aut-inventore-fuga-libero-non-facilis",
       "description": "Labore culpa modi perspiciatis harum sit. Maxime non et nam est. Quae ut laboriosam repellendus sunt quisquam. Velit at est perspiciatis nesciunt adipisci nobis illo. Sed possimus odit optio officiis nisi voluptates officiis dolor.",
-      "created_at": "2019-05-05 22:10:16",
-      "updated_at": "2020-04-10 13:00:58",
+      "created_at": "2019-05-05T22:10:16.000000Z",
+      "updated_at": "2020-04-10T13:00:58.000000Z",
       "created_by": 4,
       "updated_by": 1,
       "owned_by": 1,
@@ -29,8 +29,8 @@
       "name": "Omnis reiciendis aut molestias sint accusantium.",
       "slug": "omnis-reiciendis-aut-molestias-sint-accusantium",
       "description": "Qui ea occaecati alias est dolores voluptatem doloribus. Ad reiciendis corporis vero nostrum omnis et. Non doloribus ut eaque ut quos dolores.",
-      "created_at": "2019-05-05 22:10:16",
-      "updated_at": "2020-04-10 13:00:53",
+      "created_at": "2019-05-05T22:10:16.000000Z",
+      "updated_at": "2020-04-10T13:00:53.000000Z",
       "created_by": 4,
       "updated_by": 1,
       "owned_by": 4,
index d663e82c5fe2bd074c9ee1e7c24f87869094d35f..f2afcdac0268a39d51a21da8fe1356ccd554e87f 100644 (file)
@@ -15,8 +15,8 @@
     "id": 1,
     "name": "Admin"
   },
-  "created_at": "2020-04-10 13:24:09",
-  "updated_at": "2020-04-10 13:31:04",
+  "created_at": "2020-04-10T13:24:09.000000Z",
+  "updated_at": "2020-04-10T13:31:04.000000Z",
   "tags": [
     {
       "id": 16,
@@ -29,8 +29,8 @@
     "id": 501,
     "name": "anafrancisconi_Sp04AfFCPNM.jpg",
     "url": "http://bookstack.local/uploads/images/cover_book/2020-04/anafrancisconi_Sp04AfFCPNM.jpg",
-    "created_at": "2020-04-10 13:31:04",
-    "updated_at": "2020-04-10 13:31:04",
+    "created_at": "2020-04-10T13:31:04.000000Z",
+    "updated_at": "2020-04-10T13:31:04.000000Z",
     "created_by": 1,
     "updated_by": 1,
     "path": "/uploads/images/cover_book/2020-04/anafrancisconi_Sp04AfFCPNM.jpg",
index 4bde44b54d5f2e2a188788d306fae0b0cdede022..551dacb1f305aebcf55b2d3355266676cc8151a9 100644 (file)
@@ -7,6 +7,6 @@
   "updated_by": 1,
   "owned_by": 1,
   "image_id": 501,
-  "created_at": "2020-04-10 13:24:09",
-  "updated_at": "2020-04-10 13:48:22"
+  "created_at": "2020-04-10T13:24:09.000000Z",
+  "updated_at": "2020-04-10T13:48:22.000000Z"
 }
\ No newline at end of file
index 7e0da05d42fb33a8a401af585609c53ee1af6659..960f4c4c33df441437fe3f678edf70b19a191b62 100644 (file)
@@ -1,15 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
-         backupGlobals="false"
-         backupStaticAttributes="false"
          bootstrap="vendor/autoload.php"
-         colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false">
+         colors="true">
   <coverage>
     <include>
       <directory suffix=".php">app/</directory>
index 7e4ef97c7074672e42069c9595e217005224892a..c2f34d4bf27c8f206a049e7586c4f2cc5597238e 100644 (file)
@@ -1,59 +1,56 @@
 <?php
 
-/**
- * Laravel - A PHP Framework For Web Artisans.
- *
- * @author   Taylor Otwell <[email protected]>
- */
+use Illuminate\Contracts\Http\Kernel;
+use BookStack\Http\Request;
+
 define('LARAVEL_START', microtime(true));
 
 /*
 |--------------------------------------------------------------------------
-| Register The Auto Loader
+| Check If The Application Is Under Maintenance
 |--------------------------------------------------------------------------
 |
-| Composer provides a convenient, automatically generated class loader for
-| our application. We just need to utilize it! We'll simply require it
-| into the script here so that we don't have to worry about manual
-| loading any of our classes later on. It feels great to relax.
+| If the application is in maintenance / demo mode via the "down" command
+| we will load this file so that any pre-rendered content can be shown
+| instead of starting the framework, which could cause an exception.
 |
 */
 
-require __DIR__ . '/../vendor/autoload.php';
+if (file_exists(__DIR__ . '/../storage/framework/maintenance.php')) {
+    require __DIR__ . '/../storage/framework/maintenance.php';
+}
 
 /*
 |--------------------------------------------------------------------------
-| Turn On The Lights
+| Register The Auto Loader
 |--------------------------------------------------------------------------
 |
-| We need to illuminate PHP development, so let us turn on the lights.
-| This bootstraps the framework and gets it ready for use, then it
-| will load up this application so that we can run it and send
-| the responses back to the browser and delight our users.
+| Composer provides a convenient, automatically generated class loader for
+| this application. We just need to utilize it! We'll simply require it
+| into the script here so we don't need to manually load our classes.
 |
 */
 
-$app = require_once __DIR__ . '/../bootstrap/app.php';
-$app->alias('request', \BookStack\Http\Request::class);
+require __DIR__ . '/../vendor/autoload.php';
 
 /*
 |--------------------------------------------------------------------------
 | Run The Application
 |--------------------------------------------------------------------------
 |
-| Once we have the application, we can handle the incoming request
-| through the kernel, and send the associated response back to
-| the client's browser allowing them to enjoy the creative
-| and wonderful application we have prepared for them.
+| Once we have the application, we can handle the incoming request using
+| the application's HTTP kernel. Then, we will send the response back
+| to this client's browser, allowing them to enjoy our application.
 |
 */
 
-$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
+$app = require_once __DIR__ . '/../bootstrap/app.php';
+$app->alias('request', Request::class);
 
-$response = $kernel->handle(
-    $request = \BookStack\Http\Request::capture()
-);
+$kernel = $app->make(Kernel::class);
 
-$response->send();
+$response = tap($kernel->handle(
+    $request = Request::capture()
+))->send();
 
-$kernel->terminate($request, $response);
+$kernel->terminate($request, $response);
\ No newline at end of file
index 2db6cee202fe39103ef9faed461228678cf98e88..92bbe2c5cd1273cb74b1ba9e9e72d3b85bbb5496 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -206,11 +206,8 @@ These are the great open-source projects used to help build BookStack:
 * [Dropzone.js](http://www.dropzonejs.com/)
 * [clipboard.js](https://clipboardjs.com/)
 * [markdown-it](https://github.com/markdown-it/markdown-it) and [markdown-it-task-lists](https://github.com/revin/markdown-it-task-lists)
-* [BarryVD](https://github.com/barryvdh)
-    * [Debugbar](https://github.com/barryvdh/laravel-debugbar)
-    * [Dompdf](https://github.com/barryvdh/laravel-dompdf)
-    * [Snappy (WKHTML2PDF)](https://github.com/barryvdh/laravel-snappy)
-    * [Laravel IDE helper](https://github.com/barryvdh/laravel-ide-helper)
+* [BarryVD/Dompdf](https://github.com/barryvdh/laravel-dompdf)
+* [BarryVD/Snappy (WKHTML2PDF)](https://github.com/barryvdh/laravel-snappy)
 * [WKHTMLtoPDF](http://wkhtmltopdf.org/index.html)
 * [diagrams.net](https://github.com/jgraph/drawio)
 * [OneLogin's SAML PHP Toolkit](https://github.com/onelogin/php-saml)
@@ -219,4 +216,5 @@ These are the great open-source projects used to help build BookStack:
 * [StyleCI](https://styleci.io/)
 * [pragmarx/google2fa](https://github.com/antonioribeiro/google2fa)
 * [Bacon/BaconQrCode](https://github.com/Bacon/BaconQrCode)
-* [phpseclib](https://github.com/phpseclib/phpseclib)
\ No newline at end of file
+* [phpseclib](https://github.com/phpseclib/phpseclib)
+* [Clockwork](https://github.com/itsgoingd/clockwork)
\ No newline at end of file
index c0cc8bbc0e76bfa948d67a4c66a8f63c58b7ff04..fa48d65e703ba43f8b13148390a08fd9ff216e12 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'المجال الخاص بالبريد الإلكتروني لا يملك حق الوصول لهذا التطبيق',
     'register_success' => 'شكراً لإنشاء حسابكم! تم تسجيلكم ودخولكم للحساب الخاص بكم.',
 
-
     // Password Reset
     'reset_password' => 'استعادة كلمة المرور',
     'reset_password_send_instructions' => 'أدخل بريدك الإلكتروني بالأسفل وسيتم إرسال رسالة برابط لاستعادة كلمة المرور.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'تم إرسال هذه الرسالة بسبب تلقينا لطلب استعادة كلمة المرور الخاصة بحسابكم.',
     'email_reset_not_requested' => 'إذا لم يتم طلب استعادة كلمة المرور من قبلكم، فلا حاجة لاتخاذ أية خطوات.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'تأكيد بريدكم الإلكتروني لتطبيق :appName',
     'email_confirm_greeting' => 'شكرا لانضمامكم إلى :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index de40e583e1461fadc6787e4c2689e757d139e302..53e18964d5c3cb18fa0ecf2157ffdef04a60be12 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'الدور',
     'cover_image' => 'صورة الغلاف',
     'cover_image_description' => 'الصورة يجب أن تكون مقاربة لحجم 440×250 بكسل.',
-    
+
     // Actions
     'actions' => 'إجراءات',
     'view' => 'عرض',
index c9e3f322c9623c5d6a2ab65e7fa9a638747dad92..e4888d0b2de05925da98a5945108345ba2dfd711 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'هل أنت متأكد من أنك تريد حذف هذه المراجعة؟',
     'revision_restore_confirm' => 'هل أنت متأكد من أنك تريد استعادة هذه المراجعة؟ سيتم استبدال محتوى الصفحة الحالية.',
     'revision_delete_success' => 'تم حذف المراجعة',
-    'revision_cannot_delete_latest' => 'لايمكن حذف آخر مراجعة.'
+    'revision_cannot_delete_latest' => 'لايمكن حذف آخر مراجعة.',
 ];
index 4ab447d5d56e5c3226063fbd6f085111d9cdb34e..33b8e9c3e9fadea6094d1cc73286a933bac6ea2c 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'يجب أن تتكون كلمة المرور من ستة أحرف على الأقل وأن تطابق التأكيد.',
-    'user' => "لم يتم العثور على مستخدم بعنوان البريد الإلكتروني المعطى.",
+    'user' => 'لم يتم العثور على مستخدم بعنوان البريد الإلكتروني المعطى.',
     'token' => 'رمز إعادة تعيين كلمة المرور غير صالح لعنوان هذا البريد الإلكتروني.',
     'sent' => 'تم إرسال رابط تجديد كلمة المرور إلى بريدكم الإلكتروني!',
     'reset' => 'تم تجديد كلمة المرور الخاصة بكم!',
index 6e15a5f068a2fd473dde2e0a9cab2151f6f92cf8..7456fbc996e72665d911b33b004403b3faeb70b2 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'الصيانة',
     'maint_image_cleanup' => 'تنظيف الصور',
-    'maint_image_cleanup_desc' => "مسح الصفحة ومراجعة المحتوى للتحقق من أي الصور والرسوم المستخدمة حاليًا وأي الصور زائدة عن الحاجة. تأكد من إنشاء قاعدة بيانات كاملة و نسخة احتياطية للصور قبل تشغيل هذا.",
+    'maint_image_cleanup_desc' => 'مسح الصفحة ومراجعة المحتوى للتحقق من أي الصور والرسوم المستخدمة حاليًا وأي الصور زائدة عن الحاجة. تأكد من إنشاء قاعدة بيانات كاملة و نسخة احتياطية للصور قبل تشغيل هذا.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'بدء التنظيف',
     'maint_image_cleanup_warning' => 'يوجد عدد :count من الصور المحتمل عدم استخدامها. تأكيد حذف الصور؟',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'حذف الدور',
     'role_delete_confirm' => 'سيتم حذف الدور المسمى \':roleName\'.',
     'role_delete_users_assigned' => 'هذا الدور له: عدد المستخدمين المعينين له. إذا كنت ترغب في ترحيل المستخدمين من هذا الدور ، فحدد دورًا جديدًا أدناه.',
-    'role_delete_no_migration' => "لا تقم بترجيل المستخدمين",
+    'role_delete_no_migration' => 'لا تقم بترجيل المستخدمين',
     'role_delete_sure' => 'تأكيد حذف الدور؟',
     'role_delete_success' => 'تم حذف الدور بنجاح',
     'role_edit' => 'تعديل الدور',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index d04796cfe2e8fc639dcbedc5c7ea95fc9a9f701b..50499fc789719aa1221483465cd668b7a77786d7 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Този емейл домейн към момента няма достъп до приложението',
     'register_success' => 'Благодарим Ви за регистрацията! В момента сте регистриран и сте вписани в приложението.',
 
-
     // Password Reset
     'reset_password' => 'Нулиране на паролата',
     'reset_password_send_instructions' => 'Въведете емейла си и ще ви бъде изпратен емейл с линк за нулиране на паролата.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Вие получихте този емейл, защото поискахте вашата парола да бъде занулена.',
     'email_reset_not_requested' => 'Ако Вие не сте поискали зануляването на паролата, няма нужда от други действия.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Потвърди емейла си за :appName',
     'email_confirm_greeting' => 'Благодарим Ви, че се присъединихте към :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 4b0f72a60ce7583d52d3d18dedff853ee5f11f98..110487a41a9b63af4a46403ea5322c316a8de37b 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Роля',
     'cover_image' => 'Основно изображение',
     'cover_image_description' => 'Картината трябва да е приблизително 440х250 пиксела.',
-    
+
     // Actions
     'actions' => 'Действия',
     'view' => 'Преглед',
index bfcfb27589fb5422b586b0139a738bf67aed6e4e..1db29c5e31925c4a6fac498f6ab8c1fe250bd9b6 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Наистина ли искате да изтриете тази версия?',
     'revision_restore_confirm' => 'Сигурни ли сте, че искате да изтриете тази версия? Настоящата страница ще бъде заместена.',
     'revision_delete_success' => 'Версията беше изтрита',
-    'revision_cannot_delete_latest' => 'Не може да изтриете последната версия.'
+    'revision_cannot_delete_latest' => 'Не може да изтриете последната версия.',
 ];
index 871fdeea8f74365b63c18d681751d84fee52763b..5fb192a441ff1c9ea99cfb948b5491961add4dc6 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Паролите трябва да имат поне 8 символа и да съвпадат с потвърждението.',
-    'user' => "Не можем да намерим потребител с този имейл адрес.",
+    'user' => 'Не можем да намерим потребител с този имейл адрес.',
     'token' => 'Кодът за зануляване на паролата е невалиден за този емейл адрес.',
     'sent' => 'Пратихме връзка за нулиране на паролата до имейла ви!',
     'reset' => 'Вашата парола е нулирана!',
index f3c036ee8e3812ef10146a83ac8bbbfdfc27d748..76b925f5844c7f55c6d01647cc0ca3275b30ebaa 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Maintenance',
     'maint_image_cleanup' => 'Cleanup Images',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'Run Cleanup',
     'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Изтрий роля',
     'role_delete_confirm' => 'Това ще изтрие ролята \':roleName\'.',
     'role_delete_users_assigned' => 'В тази роля се намират :userCount потребители. Ако искате да преместите тези потребители в друга роля, моля изберете нова роля отдолу.',
-    'role_delete_no_migration' => "Не премествай потребителите в нова роля",
+    'role_delete_no_migration' => 'Не премествай потребителите в нова роля',
     'role_delete_sure' => 'Сигурни ли сте, че искате да изтриете тази роля?',
     'role_delete_success' => 'Ролята беше успешно изтрита',
     'role_edit' => 'Редактиране на роля',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index a5926fa2b6d335ac8a32ca122016d09cc602bffc..3a5517331e442e077961e7061593c2a80129ef4b 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Ta e-mail domena nema pristup ovoj aplikaciji',
     'register_success' => 'Hvala na registraciji! Sada ste registrovani i prijavljeni.',
 
-
     // Password Reset
     'reset_password' => 'Resetuj Lozinku',
     'reset_password_send_instructions' => 'Unesite vašu e-mail adresu ispod i na nju ćemo vam poslati e-mail sa linkom za promjenu lozinke.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Primate ovaj e-mail jer smo dobili zahtjev za promjenu lozinke za vaš račun.',
     'email_reset_not_requested' => 'Ako niste zahtijevali promjenu lozinke ne trebate ništa više uraditi.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Potvrdite vaš e-mail na :appName',
     'email_confirm_greeting' => 'Hvala na pristupanju :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 17ec0b765c7447dd78a9541f9ad62e0a8c7acc76..a511a10bec6e1ac42b105edbd91cf8abc9b1aee2 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Uloga',
     'cover_image' => 'Naslovna slika',
     'cover_image_description' => 'Ova slika treba biti približno 440x250px.',
-    
+
     // Actions
     'actions' => 'Akcije',
     'view' => 'Prikaz',
index 102019d2a011125a1b8ed502acce22e9444f6a64..680053bc98c0dd5a40e261300f4b1b2556129903 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
     'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
     'revision_delete_success' => 'Revision deleted',
-    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
+    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.',
 ];
index 0383e8af03288e1405a7de5ec5b098bafeb4bece..54880f4b5a5f75fbccd6ca14dbc6b06b8ac5ee98 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Lozinke moraju sadržavati najmanje osam karaktera i podudarati se sa potvrdom lozinke.',
-    'user' => "Ne možemo naći korisnika sa tom e-mail adresom.",
+    'user' => 'Ne možemo naći korisnika sa tom e-mail adresom.',
     'token' => 'Token za poništavanje lozinke nije validan za ovu e-mail adresu.',
     'sent' => 'Poslali smo link za poništavanje vaše lozinke na e-mail!',
     'reset' => 'Vaša lozinka je resetovana!',
index 8c35d68493d84ab93dd52ca168f6477bcb82b9c7..688b0aad80b1c443739b22632096e1ce518b06ac 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Maintenance',
     'maint_image_cleanup' => 'Cleanup Images',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'Run Cleanup',
     'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 9febe36b75ab08860a07b998a727c76aed26e2fc..e22ca74bfeac0ef421abb078eac2b19d1470cd69 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Aquest domini de correu electrònic no té accés a aquesta aplicació',
     'register_success' => 'Gràcies per registrar-vos! Ja us hi heu registrat i heu iniciat la sessió.',
 
-
     // Password Reset
     'reset_password' => 'Restableix la contrasenya',
     'reset_password_send_instructions' => 'Introduïu la vostra adreça electrònica a continuació i us enviarem un correu electrònic amb un enllaç per a restablir la contrasenya.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Rebeu aquest correu electrònic perquè heu rebut una petició de restabliment de contrasenya per al vostre compte.',
     'email_reset_not_requested' => 'Si no heu demanat restablir la contrasenya, no cal que prengueu cap acció.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirmeu la vostra adreça electrònica a :appName',
     'email_confirm_greeting' => 'Gràcies per unir-vos a :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 49739506000d171c0f044071a4087e6e4040f8cf..0f18099e71f67b5bbb5d946061f9d5c0c42c04b7 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rol',
     'cover_image' => 'Imatge de portada',
     'cover_image_description' => 'Aquesta imatge hauria de fer aproximadament 440x250 px.',
-    
+
     // Actions
     'actions' => 'Accions',
     'view' => 'Visualitza',
index 36466e920e180bdec0e609f4019751c813881a5e..d486fe512bb5c7ab0daf4678636ae83e92254f9d 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Segur que voleu suprimir aquesta revisió?',
     'revision_restore_confirm' => 'Segur que voleu restaurar aquesta revisió? Se substituirà el contingut de la pàgina actual.',
     'revision_delete_success' => 'S\'ha suprimit la revisió',
-    'revision_cannot_delete_latest' => 'No es pot suprimir la darrera revisió.'
+    'revision_cannot_delete_latest' => 'No es pot suprimir la darrera revisió.',
 ];
index 086f59962b653a0c4a38d995ff93fef70ecba0b9..30d937b605140fd1c6b75d49c1683da135c008e2 100755 (executable)
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Suprimeix el rol',
     'role_delete_confirm' => 'Se suprimirà el rol amb el nom \':roleName\'.',
     'role_delete_users_assigned' => 'Aquest rol té :userCount usuaris assignats. Si voleu migrar els usuaris d\'aquest rol, seleccioneu un rol nou a continuació.',
-    'role_delete_no_migration' => "No migris els usuaris",
+    'role_delete_no_migration' => 'No migris els usuaris',
     'role_delete_sure' => 'Segur que voleu suprimir aquest rol?',
     'role_delete_success' => 'Rol suprimit correctament',
     'role_edit' => 'Edita el rol',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index ad83a692603972e7d401725b3ae77977f8602e50..f95242009e6b2898195b4f4cf98cf4012f44c9cb 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Registrace z této e-mailové domény nejsou povoleny',
     'register_success' => 'Děkujeme za registraci! Nyní jste zaregistrováni a přihlášeni.',
 
-
     // Password Reset
     'reset_password' => 'Obnovit heslo',
     'reset_password_send_instructions' => 'Níže zadejte svou e-mailovou adresu a bude vám zaslán e-mail s odkazem na obnovení hesla.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Tento e-mail jste obdrželi, protože jsme obdrželi žádost o obnovení hesla k vašemu účtu.',
     'email_reset_not_requested' => 'Pokud jste o obnovení hesla nežádali, není vyžadována žádná další akce.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Potvrďte svůj e-mail pro :appName',
     'email_confirm_greeting' => 'Díky že jste se přidali do :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 14555a91241911ef67271fff4b32f6d3ba7f59d4..d837116ee768473314b25ac7240c7c5915e37f91 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Role',
     'cover_image' => 'Obrázek obálky',
     'cover_image_description' => 'Obrázek by měl být přibližně 440×250px.',
-    
+
     // Actions
     'actions' => 'Akce',
     'view' => 'Zobrazit',
index d82d4c2ea36ae75219803f09a8b75b85bac0bc7e..548c01a84f53b4fc54458a4ec4b6547a9e7be837 100644 (file)
@@ -94,7 +94,7 @@ return [
     'shelves_edit' => 'Upravit knihovnu',
     'shelves_delete' => 'Odstranit knihovnu',
     'shelves_delete_named' => 'Odstranit knihovnu :name',
-    'shelves_delete_explain' => "Toto odstraní knihovnu ‚:name‘. Vložené knihy nebudou odstraněny.",
+    'shelves_delete_explain' => 'Toto odstraní knihovnu ‚:name‘. Vložené knihy nebudou odstraněny.',
     'shelves_delete_confirmation' => 'Opravdu chcete odstranit tuto knihovnu?',
     'shelves_permissions' => 'Oprávnění knihovny',
     'shelves_permissions_updated' => 'Oprávnění knihovny byla aktualizována',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Opravdu chcete odstranit tuto revizi?',
     'revision_restore_confirm' => 'Jste si jisti, že chcete obnovit tuto revizi? Aktuální obsah stránky bude nahrazen.',
     'revision_delete_success' => 'Revize odstraněna',
-    'revision_cannot_delete_latest' => 'Nelze odstranit poslední revizi.'
+    'revision_cannot_delete_latest' => 'Nelze odstranit poslední revizi.',
 ];
index 40b12b6070fe64cc7fa4f623ab83abadc3b13c4f..b25e24f3ca096767fa8e27d6b222f1e3bdf92597 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Heslo musí mít alespoň osm znaků a musí odpovídat potvrzení hesla.',
-    'user' => "Nemůžeme nalézt uživatele s touto e-mailovou adresou.",
+    'user' => 'Nemůžeme nalézt uživatele s touto e-mailovou adresou.',
     'token' => 'Token pro obnovení hesla není platný pro tuto e-mailovou adresu.',
     'sent' => 'Poslali jsme Vám e-mail s odkazem pro obnovení hesla!',
     'reset' => 'Vaše heslo bylo obnoveno!',
index cefcc0223af97bdc59282ebd3d9f0aadb3e12513..149a0475351218b4d2e386506186b8b87cb07578 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Údržba',
     'maint_image_cleanup' => 'Pročistění obrázků',
-    'maint_image_cleanup_desc' => "Prohledá stránky a jejich revize, aby zjistil, které obrázky a kresby jsou momentálně používány a které jsou zbytečné. Zajistěte plnou zálohu databáze a obrázků než se do toho pustíte.",
+    'maint_image_cleanup_desc' => 'Prohledá stránky a jejich revize, aby zjistil, které obrázky a kresby jsou momentálně používány a které jsou zbytečné. Zajistěte plnou zálohu databáze a obrázků než se do toho pustíte.',
     'maint_delete_images_only_in_revisions' => 'Odstranit i obrázky, které se vyskytují pouze ve starých revizích stránky',
     'maint_image_cleanup_run' => 'Spustit pročištění',
     'maint_image_cleanup_warning' => 'Nalezeno :count potenciálně nepoužitých obrázků. Jste si jisti, že je chcete odstranit?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Odstranit roli',
     'role_delete_confirm' => 'Role \':roleName\' bude odstraněna.',
     'role_delete_users_assigned' => 'Role je přiřazena :userCount uživatelům. Pokud jim chcete náhradou přidělit jinou roli, zvolte jednu z následujících.',
-    'role_delete_no_migration' => "Nepřiřazovat uživatelům náhradní roli",
+    'role_delete_no_migration' => 'Nepřiřazovat uživatelům náhradní roli',
     'role_delete_sure' => 'Opravdu chcete tuto roli odstranit?',
     'role_delete_success' => 'Role byla odstraněna',
     'role_edit' => 'Upravit roli',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 8c9d86ea69c6706419992a35312abe8700abb456..6b627c0271b6b703bb9ade4292769703690a8aed 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'E-Mail domænet har ikke adgang til denne applikation',
     'register_success' => 'Tak for din registrering. Du er nu registeret og logget ind.',
 
-
     // Password Reset
     'reset_password' => 'Nulstil adgangskode',
     'reset_password_send_instructions' => 'Indtast din E-Mail herunder og du vil blive sendt en E-Mail med et link til at nulstille din adgangskode.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Du modtager denne E-Mail fordi vi har modtaget en anmodning om at nulstille din adgangskode.',
     'email_reset_not_requested' => 'Hvis du ikke har anmodet om at få din adgangskode nulstillet, behøver du ikke at foretage dig noget.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Bekræft din E-Mail på :appName',
     'email_confirm_greeting' => 'Tak for at oprette dig på :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 0e426973467deb69384cc925acfe8f1f19d4965c..563aff97b578bf223b000412221f35ab78db9cd1 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rolle',
     'cover_image' => 'Coverbillede',
     'cover_image_description' => 'Dette billede skal være omtrent 440x250px.',
-    
+
     // Actions
     'actions' => 'Handlinger',
     'view' => 'Vis',
index 0d9d67cb4712f0a4b022210647e1e21a52d8b7b6..3c2f564740854ce3e13a71e1bd4fb9aa91af8bef 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Er du sikker på at du vil slette denne revision?',
     'revision_restore_confirm' => 'Er du sikker på at du ønsker at gendanne denne revision? Nuværende sideindhold vil blive erstattet.',
     'revision_delete_success' => 'Revision slettet',
-    'revision_cannot_delete_latest' => 'Kan ikke slette seneste revision.'
+    'revision_cannot_delete_latest' => 'Kan ikke slette seneste revision.',
 ];
index 343fa2b85246d2a6ac4b45c06a5eec7c6042364e..39ed9418fd208ac7b8c28fa938aba6dff4b6b2fd 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Adgangskoder skal være mindst otte tegn og svare til bekræftelsen.',
-    'user' => "Vi kan ikke finde en bruger med den e-mail adresse.",
+    'user' => 'Vi kan ikke finde en bruger med den e-mail adresse.',
     'token' => 'Linket til nulstilling af adgangskode er ugyldigt for denne e-mail-adresse.',
     'sent' => 'Vi har sendt dig en e-mail med et link til at nulstille adgangskoden!',
     'reset' => 'Dit kodeord er blevet nulstillet!',
index 5d39e8a669f262873e4a3bb5187bebd7e3dacf65..d963a7ad47582f06823e6b4a540222eab240ae4d 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Vedligeholdelse',
     'maint_image_cleanup' => 'Ryd op i billeder',
-    'maint_image_cleanup_desc' => "Scanner side & revisionsindhold for at kontrollere, hvilke billeder og tegninger, der i øjeblikket er i brug, og hvilke billeder, der er overflødige. Sørg for, at du opretter en komplet database og billedbackup, før du kører dette.",
+    'maint_image_cleanup_desc' => 'Scanner side & revisionsindhold for at kontrollere, hvilke billeder og tegninger, der i øjeblikket er i brug, og hvilke billeder, der er overflødige. Sørg for, at du opretter en komplet database og billedbackup, før du kører dette.',
     'maint_delete_images_only_in_revisions' => 'Slet også billeder, der kun findes i gamle siderevisioner',
     'maint_image_cleanup_run' => 'Kør Oprydning',
     'maint_image_cleanup_warning' => 'der blev fundet :count potentielt ubrugte billeder. Er du sikker på, at du vil slette disse billeder?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Slet rolle',
     'role_delete_confirm' => 'Dette vil slette rollen med navnet \':roleName\'.',
     'role_delete_users_assigned' => 'Denne rolle er tildelt :userCount brugere. Hvis du vil rykke disse brugere fra denne rolle, kan du vælge en ny nedenunder.',
-    'role_delete_no_migration' => "Ryk ikke brugere",
+    'role_delete_no_migration' => 'Ryk ikke brugere',
     'role_delete_sure' => 'Er du sikker på, at du vil slette denne rolle?',
     'role_delete_success' => 'Rollen blev slettet',
     'role_edit' => 'Rediger rolle',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index efe82680da55808c0e42fac0c28378ac5c172d55..2c0989272fcc090393a77b3430563856dd533e5d 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Sie können sich mit dieser E-Mail nicht registrieren.',
     'register_success' => 'Vielen Dank für Ihre Registrierung! Die Daten sind gespeichert und Sie sind angemeldet.',
 
-
     // Password Reset
     'reset_password' => 'Passwort vergessen',
     'reset_password_send_instructions' => 'Bitte geben Sie Ihre E-Mail-Adresse ein. Danach erhalten Sie eine E-Mail mit einem Link zum Zurücksetzen Ihres Passwortes.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Sie erhalten diese E-Mail, weil jemand versucht hat, Ihr Passwort zurückzusetzen.',
     'email_reset_not_requested' => 'Wenn Sie das nicht waren, brauchen Sie nichts weiter zu tun.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Bestätigen Sie Ihre E-Mail-Adresse für :appName',
     'email_confirm_greeting' => 'Danke, dass Sie sich für :appName registriert haben!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Backup-Code hier eingeben',
     'mfa_verify_totp_desc' => 'Geben Sie den Code ein, der mit Ihrer mobilen App generiert wurde:',
     'mfa_setup_login_notification' => 'Multi-Faktor-Methode konfiguriert. Bitte melden Sie sich jetzt erneut mit der konfigurierten Methode an.',
-];
\ No newline at end of file
+];
index bd75e1737dc499330b4b5e7c6117ec5f4985734e..fddd735f4c0f747da31fd627ad5af69b1405f28e 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rolle',
     'cover_image' => 'Titelbild',
     'cover_image_description' => 'Das Bild sollte eine Auflösung von 440x250px haben.',
-    
+
     // Actions
     'actions' => 'Aktionen',
     'view' => 'Anzeigen',
index 200961c97fd02fcc238708046911f40e060635bc..d23eb679f9bebf93ea53cf05a45daf3084d9cfbd 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Sind Sie sicher, dass Sie diese Revision löschen wollen?',
     'revision_restore_confirm' => 'Sind Sie sicher, dass Sie diese Revision wiederherstellen wollen? Der aktuelle Seiteninhalt wird ersetzt.',
     'revision_delete_success' => 'Revision gelöscht',
-    'revision_cannot_delete_latest' => 'Die letzte Version kann nicht gelöscht werden.'
+    'revision_cannot_delete_latest' => 'Die letzte Version kann nicht gelöscht werden.',
 ];
index 3da092cb8c7e234a0f5a852afb272e183a5999d9..5f3762e16174c5fdab22fe45856d669a4045366a 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Passwörter müssen aus mindestens sechs Zeichen bestehen und mit der eingegebenen Wiederholung übereinstimmen.',
-    'user' => "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.",
+    'user' => 'Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.',
     'token' => 'Der Link zum Zurücksetzen Ihres Passworts ist entweder ungültig oder abgelaufen.',
     'sent' => 'Der Link zum Zurücksetzen Ihres Passwortes wurde Ihnen per E-Mail zugesendet.',
     'reset' => 'Ihr Passwort wurde zurückgesetzt!',
index 9bd7133f6740fc7d03d83f7177b96b9417f4db7e..1dd84a9a85150939909016130894ad63a2bcb649 100644 (file)
@@ -75,7 +75,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 
     // Maintenance settings
     'maint' => 'Wartung',
     'maint_image_cleanup' => 'Bilder bereinigen',
-    'maint_image_cleanup_desc' => "Überprüft Seiten- und Versionsinhalte auf ungenutzte und mehrfach vorhandene Bilder. Erstellen Sie vor dem Start ein Backup Ihrer Datenbank und Bilder.",
+    'maint_image_cleanup_desc' => 'Überprüft Seiten- und Versionsinhalte auf ungenutzte und mehrfach vorhandene Bilder. Erstellen Sie vor dem Start ein Backup Ihrer Datenbank und Bilder.',
     'maint_delete_images_only_in_revisions' => 'Lösche auch Bilder, die nur in alten Seitenüberarbeitungen vorhanden sind',
     'maint_image_cleanup_run' => 'Reinigung starten',
     'maint_image_cleanup_warning' => ':count eventuell unbenutze Bilder wurden gefunden. Möchten Sie diese Bilder löschen?',
@@ -135,7 +135,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 
     'role_delete' => 'Rolle löschen',
     'role_delete_confirm' => 'Sie möchten die Rolle ":roleName" löschen.',
     'role_delete_users_assigned' => 'Diese Rolle ist :userCount Benutzern zugeordnet. Sie können unten eine neue Rolle auswählen, die Sie diesen Benutzern zuordnen möchten.',
-    'role_delete_no_migration' => "Den Benutzern keine andere Rolle zuordnen",
+    'role_delete_no_migration' => 'Den Benutzern keine andere Rolle zuordnen',
     'role_delete_sure' => 'Sind Sie sicher, dass Sie diese Rolle löschen möchten?',
     'role_delete_success' => 'Rolle erfolgreich gelöscht',
     'role_edit' => 'Rolle bearbeiten',
@@ -276,6 +276,6 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 70da5bae2bd06568f507efef0dfff14bbec4b73f..de845ba7d3520baa623f65ea7af2ba035ffa4ffe 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Du kannst dich mit dieser E-Mail nicht registrieren.',
     'register_success' => 'Vielen Dank für deine Registrierung! Du bist jetzt registriert und eingeloggt.',
 
-
     // Password Reset
     'reset_password' => 'Passwort vergessen',
     'reset_password_send_instructions' => 'Bitte gib Deine E-Mail-Adresse ein. Danach erhältst Du eine E-Mail mit einem Link zum Zurücksetzen Deines Passwortes.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Du erhältsts diese E-Mail, weil jemand versucht hat, Dein Passwort zurückzusetzen.',
     'email_reset_not_requested' => 'Wenn du das zurücksetzen des Passworts nicht angefordert hast, ist keine weitere Aktion erforderlich.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Bestätige Deine E-Mail-Adresse für :appName',
     'email_confirm_greeting' => 'Danke, dass Du dich für :appName registrierst hast!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Backup-Code hier eingeben',
     'mfa_verify_totp_desc' => 'Geben Sie den Code ein, der mit Ihrer mobilen App generiert wurde:',
     'mfa_setup_login_notification' => 'Multi-Faktor-Methode konfiguriert. Bitte melden Sie sich jetzt erneut mit der konfigurierten Methode an.',
-];
\ No newline at end of file
+];
index 898df928e5421c881957963e0c6236b85f57945d..a3663396ea1d6e63beadf88eca219aa55cf398f2 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rolle',
     'cover_image' => 'Titelbild',
     'cover_image_description' => 'Das Bild sollte eine Auflösung von 440x250px haben.',
-    
+
     // Actions
     'actions' => 'Aktionen',
     'view' => 'Anzeigen',
index 712421b1fb8cbcf76cec0798486b6e33e179603a..c29a7db2cc20f825763458124de1163956c59f8d 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Bist Du sicher, dass Du diese Revision löschen möchtest?',
     'revision_restore_confirm' => 'Sind Sie sicher, dass Sie diese Revision wiederherstellen wollen? Der aktuelle Seiteninhalt wird ersetzt.',
     'revision_delete_success' => 'Revision gelöscht',
-    'revision_cannot_delete_latest' => 'Die letzte Version kann nicht gelöscht werden.'
+    'revision_cannot_delete_latest' => 'Die letzte Version kann nicht gelöscht werden.',
 ];
index 0dd28c019f13452473408060a81110c5806da8a5..b5b38d7fd20b42e8f98e18e0064cc73d919dcbaa 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Passwörter müssen aus mindestens sechs Zeichen bestehen und mit der eingegebenen Wiederholung übereinstimmen.',
-    'user' => "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.",
+    'user' => 'Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.',
     'token' => 'Der Token zum Zurücksetzen des Passworts für diese E-Mail-Adresse ist ungültig.',
     'sent' => 'Wir haben dir einen Link zum Zurücksetzen des Passwortes per E-Mail geschickt!',
     'reset' => 'Dein Passwort wurde zurückgesetzt!',
index 2e19ddae0ed0453a0fe3be0bc7123825900ef7d5..a5cd94ab0518de65f4c152fbb36af36e17c6f1b0 100644 (file)
@@ -75,7 +75,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 
     // Maintenance settings
     'maint' => 'Wartung',
     'maint_image_cleanup' => 'Bilder bereinigen',
-    'maint_image_cleanup_desc' => "Überprüft Seiten- und Versionsinhalte auf ungenutzte und mehrfach vorhandene Bilder. Erstelle vor dem Start ein Backup Deiner Datenbank und Bilder.",
+    'maint_image_cleanup_desc' => 'Überprüft Seiten- und Versionsinhalte auf ungenutzte und mehrfach vorhandene Bilder. Erstelle vor dem Start ein Backup Deiner Datenbank und Bilder.',
     'maint_delete_images_only_in_revisions' => 'Lösche auch Bilder, die nur in alten Seitenüberarbeitungen vorhanden sind',
     'maint_image_cleanup_run' => 'Reinigung starten',
     'maint_image_cleanup_warning' => ':count eventuell unbenutze Bilder wurden gefunden. Möchtest Du diese Bilder löschen?',
@@ -135,7 +135,7 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 
     'role_delete' => 'Rolle löschen',
     'role_delete_confirm' => 'Du möchtest die Rolle ":roleName" löschen.',
     'role_delete_users_assigned' => 'Diese Rolle ist :userCount Benutzern zugeordnet. Du kannst unten eine neue Rolle auswählen, die Du diesen Benutzern zuordnen möchtest.',
-    'role_delete_no_migration' => "Den Benutzern keine andere Rolle zuordnen",
+    'role_delete_no_migration' => 'Den Benutzern keine andere Rolle zuordnen',
     'role_delete_sure' => 'Bist Du sicher, dass Du diese Rolle löschen möchtest?',
     'role_delete_success' => 'Rolle erfolgreich gelöscht',
     'role_edit' => 'Rolle bearbeiten',
@@ -276,6 +276,6 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index e4d4c425b84cf9e0516755c21c0d6ce19c791937..ee0ba2d2150cd8c7c21de629871c41c284f1f223 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'That email domain does not have access to this application',
     'register_success' => 'Thanks for signing up! You are now registered and signed in.',
 
-
     // Password Reset
     'reset_password' => 'Reset Password',
     'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.',
     'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirm your email on :appName',
     'email_confirm_greeting' => 'Thanks for joining :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index f93fb034bf7e4093ef54ff1878af7bfda3bbb0cd..161891bf489814d9d3faa3f2f1d9413c8cb12384 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Role',
     'cover_image' => 'Cover image',
     'cover_image_description' => 'This image should be approx 440x250px.',
-    
+
     // Actions
     'actions' => 'Actions',
     'view' => 'View',
index 0a4068eea9f24e2b4b7a8dbaecbabbdb5b3fe099..4871b62253d8ff6f36a3b8736d9eb26ad898abd5 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
     'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
     'revision_delete_success' => 'Revision deleted',
-    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
+    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.',
 ];
index 8c35d68493d84ab93dd52ca168f6477bcb82b9c7..688b0aad80b1c443739b22632096e1ce518b06ac 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Maintenance',
     'maint_image_cleanup' => 'Cleanup Images',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'Run Cleanup',
     'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 70f069a12fe6d44326bcebf03837fffbedece7a7..8a7710afe0f3dc48baf8a94b67231e201fce638a 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Este dominio de correo electrónico no tiene acceso a esta aplicación',
     'register_success' => '¡Gracias por registrarse! Ahora se encuentra registrado y logueado.',
 
-
     // Password Reset
     'reset_password' => 'Resetear Contraseña',
     'reset_password_send_instructions' => 'Introduzca su correo electrónico a continuación y le será enviado un correo con un link para la restauración',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Está recibiendo este correo electrónico debido a que recibimos una solicitud de reseteo de contraseña de su cuenta.',
     'email_reset_not_requested' => 'Si no ha solicitado un reseteo de la contraseña, no es requerida ninguna acción por su parte.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirme su correo electrónico en :appName',
     'email_confirm_greeting' => '¡Gracias por unirse a :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Introduce el código de respaldo aquí',
     'mfa_verify_totp_desc' => 'Introduzca el código, generado con tu aplicación móvil, a continuación:',
     'mfa_setup_login_notification' => 'Método de dos factores configurado. Por favor, inicia sesión de nuevo utilizando el método configurado.',
-];
\ No newline at end of file
+];
index b8514a87628dc30b35cd21744abd4ba510ddbf77..f36cd5eb05ed6f7c2c6d6a1aa7f80418aa3132d8 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rol',
     'cover_image' => 'Imagen de portada',
     'cover_image_description' => 'Esta imagen debe ser aproximadamente de 440x250px.',
-    
+
     // Actions
     'actions' => 'Acciones',
     'view' => 'Ver',
index 1a7b6df4f2b3e3e6cc06baacae9388204f6c157a..a0bac585186fe5c34a44326f1b781acaf45b7ae1 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => '¿Está seguro de que desea eliminar esta revisión?',
     'revision_restore_confirm' => '¿Está seguro de que desea restaurar esta revisión? El contenido actual de la página será reemplazado.',
     'revision_delete_success' => 'Revisión eliminada',
-    'revision_cannot_delete_latest' => 'No se puede eliminar la última revisión.'
+    'revision_cannot_delete_latest' => 'No se puede eliminar la última revisión.',
 ];
index 15e42d1ec9a2646ff36e2448b8df61098e1f52e0..4a46134c44a8c205bf6c17281b87073a0aa88316 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'La contraseña debe ser como mínimo de seis caracteres y coincidir con la confirmación.',
-    'user' => "No podemos encontrar un usuario con esta dirección de correo electrónico.",
+    'user' => 'No podemos encontrar un usuario con esta dirección de correo electrónico.',
     'token' => 'El token de modificación de contraseña no es válido para esta dirección de correo electrónico.',
     'sent' => '¡Hemos enviado a su cuenta de e-mail un enlace para restaurar su contraseña!',
     'reset' => '¡Su contraseña ha sido restaurada!',
index 0eadb1da06698f3e686aa46c3254f4a2f4f5fb2b..079202bfa61cb1f4a85c1ebb09657693c6828137 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Mantenimiento',
     'maint_image_cleanup' => 'Limpiar imágenes',
-    'maint_image_cleanup_desc' => "Analiza las páginas y sus revisiones para comprobar qué imágenes y dibujos están siendo utilizadas y cuales no son necesarias. Asegúrate de crear una copia completa de la base de datos y de las imágenes antes de lanzar esta opción.",
+    'maint_image_cleanup_desc' => 'Analiza las páginas y sus revisiones para comprobar qué imágenes y dibujos están siendo utilizadas y cuales no son necesarias. Asegúrate de crear una copia completa de la base de datos y de las imágenes antes de lanzar esta opción.',
     'maint_delete_images_only_in_revisions' => 'Elimina también imágenes que sólo existen en antiguas revisiones de páginas',
     'maint_image_cleanup_run' => 'Lanzar limpieza',
     'maint_image_cleanup_warning' => 'Se han encontrado :count imágenes posiblemente no utilizadas . ¿Estás seguro de querer borrar estas imágenes?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Borrar rol',
     'role_delete_confirm' => 'Se borrará el rol con nombre  \':roleName\'.',
     'role_delete_users_assigned' => 'Este rol tiene :userCount usuarios asignados. Si quisiera migrar los usuarios de este rol, seleccione un nuevo rol a continuación.',
-    'role_delete_no_migration' => "No migrar usuarios",
+    'role_delete_no_migration' => 'No migrar usuarios',
     'role_delete_sure' => 'Está seguro que desea borrar este rol?',
     'role_delete_success' => 'Rol borrado satisfactoriamente',
     'role_edit' => 'Editar rol',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index cb18a9405ad75f0b2777251241289387acec4c16..b419720a72162bf23bae45a12a90077ec4cd4f99 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Este dominio de correo electrónico no tiene acceso a esta aplicación',
     'register_success' => '¡Gracias por registrarse! Ahora se encuentra registrado y ha accedido a la aplicación.',
 
-
     // Password Reset
     'reset_password' => 'Restablecer la contraseña',
     'reset_password_send_instructions' => 'Introduzca su correo electrónico a continuación y se le enviará un correo electrónico con un enlace para la restauración',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Ud. esta recibiendo este correo electrónico debido a que recibimos una solicitud de restauración de la contraseña de su cuenta.',
     'email_reset_not_requested' => 'Si ud. no solicitó un cambio de contraseña, no se requiere ninguna acción.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirme su correo electrónico en :appName',
     'email_confirm_greeting' => '¡Gracias por unirse a :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Introduzca el código de respaldo aquí',
     'mfa_verify_totp_desc' => 'A continuación, introduzca el código generado con su aplicación móvil:',
     'mfa_setup_login_notification' => 'Método de dos factores configurado. Por favor, inicie sesión nuevamente utilizando el método configurado.',
-];
\ No newline at end of file
+];
index 05c76cb111c5a2ed11e51bbe7f0af55e0f911500..c4e8c62f338612e26237300c447be180903574b2 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rol',
     'cover_image' => 'Imagen de cubierta',
     'cover_image_description' => 'Esta imagen debe ser de 440x250px aproximadamente.',
-    
+
     // Actions
     'actions' => 'Acciones',
     'view' => 'Ver',
index bf08bdb512a53c7dbc051a7cfc1ce3c10b8ac0ba..a931e784ca81719ce1b7c8bcd0d1e83b250ed1ff 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => '¿Está seguro de que quiere eliminar esta revisión?',
     'revision_restore_confirm' => '¿Está seguro de que quiere restaurar esta revisión? Se reemplazará el contenido de la página actual.',
     'revision_delete_success' => 'Revisión eliminada',
-    'revision_cannot_delete_latest' => 'No se puede eliminar la última revisión.'
+    'revision_cannot_delete_latest' => 'No se puede eliminar la última revisión.',
 ];
index f9e24939b2a130c19385f7eb6c69544dcbd68845..92e92a2b72a09ee275ba6f5494592ca98d277acf 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'La contraseña debe ser como mínimo de seis caracteres y coincidir con la confirmación.',
-    'user' => "No podemos encontrar un usuario con esta dirección de correo electrónico.",
+    'user' => 'No podemos encontrar un usuario con esta dirección de correo electrónico.',
     'token' => 'El token para restablecer la contraseña no es válido para esta dirección de correo electrónico.',
     'sent' => '¡Hemos enviado a su cuenta de correo electrónico un enlace para restaurar su contraseña!',
     'reset' => '¡Su contraseña fue restaurada!',
index 3abbd8519f61d4d22a5312621250fa81b7b50c67..ab8a873b349761e297848042303081b3e91f96e4 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Mantenimiento',
     'maint_image_cleanup' => 'Limpiar imágenes',
-    'maint_image_cleanup_desc' => "Analizar contenido de páginas y revisiones para detectar cuáles imágenes y dibujos están en uso y cuáles son redundantes. Asegúrese de crear un respaldo completo de imágenes y base de datos antes de ejecutar esta tarea.",
+    'maint_image_cleanup_desc' => 'Analizar contenido de páginas y revisiones para detectar cuáles imágenes y dibujos están en uso y cuáles son redundantes. Asegúrese de crear un respaldo completo de imágenes y base de datos antes de ejecutar esta tarea.',
     'maint_delete_images_only_in_revisions' => 'También elimina imágenes que sólo existen en antiguas revisiones de páginas',
     'maint_image_cleanup_run' => 'Ejecutar limpieza',
     'maint_image_cleanup_warning' => 'Se encontraron :count imágenes pontencialmente sin uso. Está seguro de que quiere eliminarlas?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Borrar rol',
     'role_delete_confirm' => 'Se borrará el rol con nombre  \':roleName\'.',
     'role_delete_users_assigned' => 'Este rol tiene :userCount usuarios asignados. Si ud. quisiera migrar los usuarios de este rol, seleccione un nuevo rol a continuación.',
-    'role_delete_no_migration' => "No migrar usuarios",
+    'role_delete_no_migration' => 'No migrar usuarios',
     'role_delete_sure' => '¿Está seguro que desea borrar este rol?',
     'role_delete_success' => 'Rol borrado satisfactoriamente',
     'role_edit' => 'Editar rol',
@@ -274,6 +274,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 6022d933baffe947084a1373aae7500ec2be5066..bfce41079be9a2ad2c7a77ceba65874b5b34d8fe 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Sellel e-posti domeenil ei ole rakendusele ligipääsu',
     'register_success' => 'Aitäh, et registreerusid! Oled nüüd sisse logitud.',
 
-
     // Password Reset
     'reset_password' => 'Lähtesta parool',
     'reset_password_send_instructions' => 'Siseta oma e-posti aadress ning sulle saadetakse link parooli lähtestamiseks.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Said selle e-kirja, sest meile laekus soov sinu konto parooli lähtestamiseks.',
     'email_reset_not_requested' => 'Kui sa ei soovinud parooli lähtestada, ei pea sa rohkem midagi tegema.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Kinnita oma :appName konto e-posti aadress',
     'email_confirm_greeting' => 'Aitäh, et liitusid rakendusega :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Sisesta varukood siia',
     'mfa_verify_totp_desc' => 'Sisesta oma mobiilirakenduse poolt genereeritud kood allpool:',
     'mfa_setup_login_notification' => 'Mitmeastmeline autentimine seadistatud. Logi nüüd uuesti sisse, kasutades seadistatud meetodit.',
-];
\ No newline at end of file
+];
index d3349f5fbebd4da2bcf8999b8bd04ab1bf4d807c..acef3c1da115619063103bf13069af72a652936c 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Roll',
     'cover_image' => 'Kaanepilt',
     'cover_image_description' => 'See pilt peaks olema umbes 440x250 pikslit.',
-    
+
     // Actions
     'actions' => 'Tegevused',
     'view' => 'Vaata',
index 027aa9bb9252979eaf63541ed33662aa40913719..e8a6a29746d5d3f6f1e66ab2a82cae8dcda3a895 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Kas oled kindel, et soovid selle redaktsiooni kustutada?',
     'revision_restore_confirm' => 'Kas oled kindel, et soovid selle redaktsiooni taastada? Lehe praegune sisu asendatakse.',
     'revision_delete_success' => 'Redaktsioon kustutatud',
-    'revision_cannot_delete_latest' => 'Kõige viimast redaktsiooni ei saa kustutada.'
+    'revision_cannot_delete_latest' => 'Kõige viimast redaktsiooni ei saa kustutada.',
 ];
index 8559d60b2de86f7887d59250e1fbbd8eb62b1287..6457887d30b37bf6856caf682ecee59c99bbcaad 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Paroolides peab olema vähemalt kaheksa tähemärki ja nad peavad omavahel ühtima.',
-    'user' => "Sellise e-posti aadressiga kasutajat ei leitud.",
+    'user' => 'Sellise e-posti aadressiga kasutajat ei leitud.',
     'token' => 'Parooli lähtestamise link ei kehti selle e-posti aadressiga.',
     'sent' => 'Parooli lähtestamise link saadeti e-postiga!',
     'reset' => 'Parool on lähtestatud!',
index fa89325b1746847a5dd32c5d8912bae93e4a1d0d..6203d9f0b4e68b97806b154010dc6ee2c3d85b36 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Hooldus',
     'maint_image_cleanup' => 'Pildifailide koristus',
-    'maint_image_cleanup_desc' => "Kontrollib lehtede ja redaktsioonide sisu, et leida pilte ja jooniseid, mis enam kasutusel ei ole. Enne selle käivitamist tee andmebaasist ja pildifailidest täielik varukoopia.",
+    'maint_image_cleanup_desc' => 'Kontrollib lehtede ja redaktsioonide sisu, et leida pilte ja jooniseid, mis enam kasutusel ei ole. Enne selle käivitamist tee andmebaasist ja pildifailidest täielik varukoopia.',
     'maint_delete_images_only_in_revisions' => 'Kustuta ka pildifailid, mis on kasutusel ainult vanades redaktsioonides',
     'maint_image_cleanup_run' => 'Käivita koristus',
     'maint_image_cleanup_warning' => 'Leiti :count potentsiaalselt kasutamata pildifaili. Kas oled kindel, et soovid need kustutada?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Kustuta roll',
     'role_delete_confirm' => 'See kustutab rolli nimega \':roleName\'.',
     'role_delete_users_assigned' => 'Selle rolliga on seotud :userCount kasutajat. Kui soovid neile selle asemel uue rolli määrata, siis vali see allpool.',
-    'role_delete_no_migration' => "Ära määra uut rolli",
+    'role_delete_no_migration' => 'Ära määra uut rolli',
     'role_delete_sure' => 'Kas oled kindel, et soovid selle rolli kustutada?',
     'role_delete_success' => 'Roll on kustutatud',
     'role_edit' => 'Muuda rolli',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 4f950b77f0482e8e28cfa77333d6821f6b1e18ec..1b634074718ec1d48d6c48897bc283b48e271aa7 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'دامنه پست الکترونیک به این برنامه دسترسی ندارد',
     'register_success' => 'از ثبت نام شما سپاسگزاریم! شما اکنون ثبت نام کرده و وارد سیستم شده اید.',
 
-
     // Password Reset
     'reset_password' => 'بازنشانی کلمه عبور',
     'reset_password_send_instructions' => 'پست الکترونیک خود را در کادر زیر وارد نموده تا یک پیام حاوی لینک بازنشانی کلمه عبور دریافت نمایید.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'شما این پیام را به علت درخواست بازنشانی کلمه عبور دریافت می نمایید.',
     'email_reset_not_requested' => 'در صورتی که درخواست بازنشانی کلمه عبور از سمت شما نمی باشد، نیاز به انجام هیچ فعالیتی ندارید.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'پست الکترونیک خود را در:appName تایید نمایید',
     'email_confirm_greeting' => 'برای پیوستن به :appName متشکریم!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 6d3768de4679382896f7675a7744aa45676b91f5..1081e48ff0c0ff5e1ccc2f60ea29bf927e88602c 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'نقش',
     'cover_image' => 'تصویر روی جلد',
     'cover_image_description' => 'سایز تصویر باید 440x250 باشد.',
-    
+
     // Actions
     'actions' => 'عملیات',
     'view' => 'نمایش',
index 47335af8e1a664e591e0a601953dff8f1a4fbf50..a2b5e945d1d62ac068cb81329d1702c739cf9b45 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
     'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
     'revision_delete_success' => 'Revision deleted',
-    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
+    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.',
 ];
index 06b8f8b50d69bd3b812c13ee0392e6f16d27e819..6d342dbe8d639982fea0e66271f094c39b4ba7f7 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'گذرواژه باید حداقل هشت حرف و با تایید مطابقت داشته باشد.',
-    'user' => "ما کاربری با این نشانی ایمیل نداریم.",
+    'user' => 'ما کاربری با این نشانی ایمیل نداریم.',
     'token' => 'مشخصه‌ی بازگردانی رمز عبور معتبر نیست.',
     'sent' => 'لینک بازگردانی رمز عبور به ایمیل شما ارسال شد!',
     'reset' => 'رمز عبور شما بازگردانی شد!',
index 8c35d68493d84ab93dd52ca168f6477bcb82b9c7..688b0aad80b1c443739b22632096e1ce518b06ac 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Maintenance',
     'maint_image_cleanup' => 'Cleanup Images',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'Run Cleanup',
     'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index c608f02fb043359e3d8bd7f05edbf490739b8a2a..de179322947e14d4c020bd7c198f2b1a82077ea2 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Cette adresse e-mail ne peut pas accéder à l\'application',
     'register_success' => 'Merci pour votre inscription. Vous êtes maintenant inscrit(e) et connecté(e)',
 
-
     // Password Reset
     'reset_password' => 'Réinitialiser le mot de passe',
     'reset_password_send_instructions' => 'Entrez votre adresse e-mail ci-dessous et un e-mail avec un lien de réinitialisation de mot de passe vous sera envoyé.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Vous recevez cet e-mail parce que nous avons reçu une demande de réinitialisation pour votre compte.',
     'email_reset_not_requested' => 'Si vous n\'avez pas effectué cette demande, vous pouvez ignorer cet e-mail.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirmez votre adresse e-mail pour :appName',
     'email_confirm_greeting' => 'Merci d\'avoir rejoint :appName !',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Saisissez un code de secours ici',
     'mfa_verify_totp_desc' => 'Entrez ci-dessous le code généré à l\'aide de votre application mobile :',
     'mfa_setup_login_notification' => 'Méthode multi-facteurs configurée. Veuillez maintenant vous reconnecter en utilisant la méthode configurée.',
-];
\ No newline at end of file
+];
index e6e8bf1a272100e5c92e481de4292e1edc7f5bff..49402478574b15e56108761c24c16d9cafd53f0a 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rôle',
     'cover_image' => 'Image de couverture',
     'cover_image_description' => 'Cette image doit faire environ 440x250 px.',
-    
+
     // Actions
     'actions' => 'Actions',
     'view' => 'Voir',
index 360780a25aaf9d193830bb74e846e201b52d0d2d..3742f584ef07e2c61b16b448b2313397b8f6c709 100644 (file)
@@ -255,7 +255,7 @@ return [
     'tags' =>  'Mots-clés',
     'tag_name' =>  'Nom du tag',
     'tag_value' => 'Valeur du mot-clé (optionnel)',
-    'tags_explain' => "Ajouter des mots-clés pour catégoriser votre contenu.",
+    'tags_explain' => 'Ajouter des mots-clés pour catégoriser votre contenu.',
     'tags_add' => 'Ajouter un autre mot-clé',
     'tags_remove' => 'Supprimer le mot-clé',
     'attachments' => 'Fichiers joints',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Êtes-vous sûr de vouloir supprimer cette révision ?',
     'revision_restore_confirm' => 'Êtes-vous sûr de vouloir restaurer cette révision ? Le contenu courant de la page va être remplacé.',
     'revision_delete_success' => 'Révision supprimée',
-    'revision_cannot_delete_latest' => 'Impossible de supprimer la dernière révision.'
+    'revision_cannot_delete_latest' => 'Impossible de supprimer la dernière révision.',
 ];
index ddd5f64c763a421b44f9f9b88e72411f085a8066..5df79561f1c08b2ee87a0cb043edcf1bee927c1a 100644 (file)
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Supprimer le rôle',
     'role_delete_confirm' => 'Ceci va supprimer le rôle \':roleName\'.',
     'role_delete_users_assigned' => 'Ce rôle a :userCount utilisateurs assignés. Vous pouvez choisir un rôle de remplacement pour ces utilisateurs.',
-    'role_delete_no_migration' => "Ne pas assigner de nouveau rôle",
+    'role_delete_no_migration' => 'Ne pas assigner de nouveau rôle',
     'role_delete_sure' => 'Êtes-vous sûr de vouloir supprimer ce rôle ?',
     'role_delete_success' => 'Le rôle a été supprimé avec succès',
     'role_edit' => 'Modifier le rôle',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index a078cfcf8bc0eb515e74f3d6fe5b080f5711f40f..ab8b1e963e5e2defb4f9a4094a070d764c7ce100 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'לא ניתן להרשם באמצעות המייל שסופק',
     'register_success' => 'תודה על הרשמתך! ניתן כעת להתחבר',
 
-
     // Password Reset
     'reset_password' => 'איפוס סיסמא',
     'reset_password_send_instructions' => 'יש להזין את כתובת המייל למטה ואנו נשלח אלייך הוראות לאיפוס הסיסמא',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'קישור זה נשלח עקב בקשה לאיפוס סיסמא בחשבון שלך',
     'email_reset_not_requested' => 'אם לא ביקשת לאפס את סיסמתך, אפשר להתעלם ממייל זה',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'אמת אי-מייל ב :appName',
     'email_confirm_greeting' => 'תודה שהצטרפת אל :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 475987f342ce9a4e92c2d026f614ab06bc65f97b..1a2e5b918d678ebba49314147c921b243958c073 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'תפקיד',
     'cover_image' => 'תמונת נושא',
     'cover_image_description' => 'התמונה צריכה להיות בסביבות 440x250px',
-    
+
     // Actions
     'actions' => 'פעולות',
     'view' => 'הצג',
index ac4e25c8b612dca1ee423146a6302666bf3812cc..5ad67afb87b1e673a9197f244ddf87655de7a1af 100644 (file)
@@ -94,7 +94,7 @@ return [
     'shelves_edit' => 'ערוך מדף',
     'shelves_delete' => 'מחק מדף',
     'shelves_delete_named' => 'מחיקת דף :name',
-    'shelves_delete_explain' => "פעולה זו תמחק את המדף :name - הספרים שמופיעים בו ימחקו גם כן!",
+    'shelves_delete_explain' => 'פעולה זו תמחק את המדף :name - הספרים שמופיעים בו ימחקו גם כן!',
     'shelves_delete_confirmation' => 'האם ברצונך למחוק את המדף?',
     'shelves_permissions' => 'הרשאות מדף',
     'shelves_permissions_updated' => 'הרשאות מדף עודכנו',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'האם ברצונך למחוק נוסח זה?',
     'revision_restore_confirm' => 'האם ברצונך לשחזר נוסח זה? תוכן הדף הנוכחי יעודכן לנוסח זה.',
     'revision_delete_success' => 'נוסח נמחק',
-    'revision_cannot_delete_latest' => 'לא ניתן למחוק את הנוסח האחרון'
+    'revision_cannot_delete_latest' => 'לא ניתן למחוק את הנוסח האחרון',
 ];
index a94d7c30b36449e94a5a64a5497383c28c25ff9e..0b700f21ee7f8bbbcb8a54bf17bd0048826fa898 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'הסיסמה חייבת להיות בעלת 8 תווים לפחות ולהתאים לאימות.',
-    'user' => "לא נמצא משתמש עם כתובת דוא\"ל זו.",
+    'user' => 'לא נמצא משתמש עם כתובת דוא"ל זו.',
     'token' => 'אסימון איפוס הסיסמה לא תקף עבור כתובת דוא"ל זו.',
     'sent' => 'שלחנו לך דוא"ל עם קישור לאיפוס הסיסמה!',
     'reset' => 'איפוס הסיסמה הושלם בהצלחה!',
index fb59fa5cf3fbd96091af408d38cb3510ec52edab..36e36c94da0bb78d2a5aa1764867e1ee0f3137bb 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'תחזוקה',
     'maint_image_cleanup' => 'ניקוי תמונות',
-    'maint_image_cleanup_desc' => "סורק את הדפים והגרסאות על מנת למצוא אילו תמונות לא בשימוש. יש לוודא גיבוי מלא של מסד הנתונים והתמונות לפני הרצה",
+    'maint_image_cleanup_desc' => 'סורק את הדפים והגרסאות על מנת למצוא אילו תמונות לא בשימוש. יש לוודא גיבוי מלא של מסד הנתונים והתמונות לפני הרצה',
     'maint_delete_images_only_in_revisions' => 'מחק בנוסף תמונות שקיימות בגרסאות ישנות של הדף בלבד',
     'maint_image_cleanup_run' => 'הפעל ניקוי תמונות',
     'maint_image_cleanup_warning' => 'נמצאו כ :count תמונות אשר לא בשימוש האם ברצונך להמשיך?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'מחק תפקיד',
     'role_delete_confirm' => 'פעולה זו תמחק את התפקיד: :roleName',
     'role_delete_users_assigned' => 'לתפקיד :userCount יש משתמשים אשר משויכים אליו. אם ברצונך להעבירם לתפקיד אחר אנא בחר תפקיד מלמטה',
-    'role_delete_no_migration' => "אל תעביר משתמשים לתפקיד",
+    'role_delete_no_migration' => 'אל תעביר משתמשים לתפקיד',
     'role_delete_sure' => 'האם אתה בטוח שברצונך למחוק את התפקיד?',
     'role_delete_success' => 'התפקיד נמחק בהצלחה',
     'role_edit' => 'ערוך תפקיד',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 23014439a19248dcc76e528d195c8119ea62bd3b..b5f3bf61b74d635538fac8afe72d665846246dde 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Ova e-mail adresa se ne može koristiti u ovoj aplikaciji',
     'register_success' => 'Hvala na prijavi! Sada ste registrirani i prijavljeni.',
 
-
     // Password Reset
     'reset_password' => 'Promijenite lozinku',
     'reset_password_send_instructions' => 'Upišite svoju e-mail adresu kako biste primili poveznicu za promjenu lozinke.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Primili ste ovu poruku jer je zatražena promjena lozinke za vaš račun.',
     'email_reset_not_requested' => 'Ako niste tražili promjenu lozinke slobodno zanemarite ovu poruku.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Potvrdite svoju e-mail adresu na :appName',
     'email_confirm_greeting' => 'Hvala na prijavi :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index bc51eed22abc2335bd2280d412f2da1e06cbf350..78018f8a9031cac91f8cca64b96d0674edfc564d 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Uloga',
     'cover_image' => 'Naslovna slika',
     'cover_image_description' => 'Slika treba biti približno 440x250px.',
-    
+
     // Actions
     'actions' => 'Aktivnost',
     'view' => 'Pogled',
index 5f3f8bedbdb357c6e72e3282a93d023f11ec9a4e..9e8a835f4fddd71aec2de3364a13bcfedd15bdf1 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Jeste li sigurni da želite izbrisati ovaj ispravak?',
     'revision_restore_confirm' => 'Jeste li sigurni da želite vratiti ovaj ispravak? Trenutni sadržaj će biti zamijenjen.',
     'revision_delete_success' => 'Izbrisani ispravak',
-    'revision_cannot_delete_latest' => 'Posljednji ispravak se ne može izbrisati.'
+    'revision_cannot_delete_latest' => 'Posljednji ispravak se ne može izbrisati.',
 ];
index afc867deb8f23e3b93ff8a65580b0121f36b8489..616062eeb2de21b5c9ab4f05469d640f0223e5d5 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Održavanje',
     'maint_image_cleanup' => 'Čišćenje slika',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_delete_images_only_in_revisions' => 'Izbriši slike koje postoje u prijašnjim revizijama',
     'maint_image_cleanup_run' => 'Pokreni čišćenje',
     'maint_image_cleanup_warning' => ':count moguće neiskorištene slike. Jeste li sigurni da želite izbrisati ove slike?',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 7aaedf92ddc7daddf5aba39825d6e4c80f4c1318..fb207c904033360c63df63019f401ca874a95264 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Ebből az email tartományról nem lehet hozzáférni ehhez az alkalmazáshoz',
     'register_success' => 'Köszönjük a regisztrációt! A regisztráció és a bejelentkezés megtörtént.',
 
-
     // Password Reset
     'reset_password' => 'Jelszó visszaállítása',
     'reset_password_send_instructions' => 'Meg kell adni az email címet amire egy jelszó visszaállító hivatkozás lesz elküldve.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Ezt az emailt azért küldtük mert egy jelszó visszaállításra vonatkozó kérést kaptunk ebből a fiókból.',
     'email_reset_not_requested' => 'Ha nem történt jelszó visszaállításra vonatkozó kérés, akkor nincs szükség további intézkedésre.',
 
-
     // Email Confirmation
     'email_confirm_subject' => ':appName alkalmazásban beállított email címet meg kell erősíteni',
     'email_confirm_greeting' => ':appName köszöni a csatlakozást!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 2e850aa2eda08b1e65a8b9ce22a6ba69f4004ffb..1c0116a1a335a95142685e2fb351b3b6cda22877 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Szerepkör',
     'cover_image' => 'Borítókép',
     'cover_image_description' => 'A kép méretének kb. 440x250px-nek kell lennie.',
-    
+
     // Actions
     'actions' => 'Műveletek',
     'view' => 'Megtekintés',
index f78392ec2e2589531c695aad560dcddebfec7310..905c9b0b75fc734cc7d73c2085db559a5a796dfa 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Biztosan törölhető ez a változat?',
     'revision_restore_confirm' => 'Biztosan visszaállítható ez a változat? A oldal jelenlegi tartalma le lesz cserélve.',
     'revision_delete_success' => 'Változat törölve',
-    'revision_cannot_delete_latest' => 'A legutolsó változat nem törölhető.'
+    'revision_cannot_delete_latest' => 'A legutolsó változat nem törölhető.',
 ];
index e06c6f6e35d25ef06dfac4b47117fb086c0a000e..f33be37d6bcf9cd777dd3c69d1d5c0fb18b238d0 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'A jelszónak legalább hat karakterből kell állnia és egyeznie kell a megerősítéssel.',
-    'user' => "Nem található felhasználó ezzel az e-mail címmel.",
+    'user' => 'Nem található felhasználó ezzel az e-mail címmel.',
     'token' => 'The password reset token is invalid for this email address.',
     'sent' => 'E-mailben elküldtük a jelszó visszaállító hivatkozást!',
     'reset' => 'A jelszó visszaállítva!',
index b31b7d70ce4b34eb75d9b407f9aac8cb147bfcff..b0ad98786923750bf6db9a2f45823f5fef3896e1 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Karbantartás',
     'maint_image_cleanup' => 'Képek tisztítása',
-    'maint_image_cleanup_desc' => "Végigolvassa az oldalakat és a tartalmak változatait, hogy leellenőrizze jelenleg mely képek és rajzok vannak használatban, és mely képek szerepelnek többször. A futtatása előtt feltétlen készíteni kell egy teljes adatbázis és lemezkép mentést.",
+    'maint_image_cleanup_desc' => 'Végigolvassa az oldalakat és a tartalmak változatait, hogy leellenőrizze jelenleg mely képek és rajzok vannak használatban, és mely képek szerepelnek többször. A futtatása előtt feltétlen készíteni kell egy teljes adatbázis és lemezkép mentést.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'Tisztítás futtatása',
     'maint_image_cleanup_warning' => ':count potenciálisan nem használt képet találtam. Biztosan törölhetőek ezek a képek?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Szerepkör törlése',
     'role_delete_confirm' => 'Ez törölni fogja \':roleName\' szerepkört.',
     'role_delete_users_assigned' => 'Ehhez a szerepkörhöz :userCount felhasználó van hozzárendelve. Ha a felhasználókat át kell helyezni ebből a szerepkörből, akkor ki kell választani egy új szerepkört.',
-    'role_delete_no_migration' => "Nincs felhasználó áthelyezés",
+    'role_delete_no_migration' => 'Nincs felhasználó áthelyezés',
     'role_delete_sure' => 'Biztosan törölhető ez a szerepkör?',
     'role_delete_success' => 'Szerepkör sikeresen törölve',
     'role_edit' => 'Szerepkör szerkesztése',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 84fc3a16e89ee33b8e7dd3fd5f05bf507f0fc194..f81ebde7abec867605d958626fb2c49a3722f449 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Domain email tersebut tidak memiliki akses ke aplikasi ini',
     'register_success' => 'Terima kasih telah mendaftar! Anda sekarang terdaftar dan masuk.',
 
-
     // Password Reset
     'reset_password' => 'Atur ulang kata sandi',
     'reset_password_send_instructions' => 'Masukkan email Anda di bawah ini dan Anda akan dikirimi email dengan tautan pengaturan ulang kata sandi.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Anda menerima email ini karena kami menerima permintaan pengaturan ulang kata sandi untuk akun Anda.',
     'email_reset_not_requested' => 'Jika Anda tidak meminta pengaturan ulang kata sandi, tidak ada tindakan lebih lanjut yang diperlukan.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Konfirmasikan email Anda di :appName',
     'email_confirm_greeting' => 'Terima kasih telah bergabung :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index c9aac2ed2d4012f38dc32e124e22cfc94c584ace..e95233a0148b22cbe4296793a90e87e12ccd4df9 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Peran',
     'cover_image' => 'Sampul gambar',
     'cover_image_description' => 'Gambar ini harus berukuran kira-kira 440x250 piksel.',
-    
+
     // Actions
     'actions' => 'Tindakan',
     'view' => 'Lihat',
index 0b58563fad4fd5d379492f4bffa0feddea767e8b..cfb65f1444b6df43a0278d3e858d80754d5e5a84 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Anda yakin ingin menghapus revisi ini?',
     'revision_restore_confirm' => 'Apakah Anda yakin ingin memulihkan revisi ini? Konten halaman saat ini akan diganti.',
     'revision_delete_success' => 'Revisi dihapus',
-    'revision_cannot_delete_latest' => 'Tidak dapat menghapus revisi terakhir.'
+    'revision_cannot_delete_latest' => 'Tidak dapat menghapus revisi terakhir.',
 ];
index 3ee2e4d57da226dc2b08f7d3e5e90ef41588d49d..c4578b8d180713fd2591d3b4f0bcf09b35915fa0 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Kata sandi harus setidaknya delapan karakter dan sesuai dengan konfirmasi.',
-    'user' => "Kami tidak dapat menemukan pengguna dengan alamat email tersebut.",
+    'user' => 'Kami tidak dapat menemukan pengguna dengan alamat email tersebut.',
     'token' => 'Token setel ulang sandi tidak valid untuk alamat email ini.',
     'sent' => 'Kami telah mengirimkan email tautan pengaturan ulang kata sandi Anda!',
     'reset' => 'Kata sandi Anda telah disetel ulang!',
index c803d48e3b0e3f0d5695d815c96c431dbb4d68bb..2ef4b6b08ae28b3555ae50a5bb6e46cfe1726d08 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Pemeliharaan',
     'maint_image_cleanup' => 'Gambar Bersihkan',
-    'maint_image_cleanup_desc' => "Pindai halaman & konten revisi untuk memeriksa gambar dan gambar mana yang saat ini digunakan dan gambar mana yang berlebihan. Pastikan Anda membuat database lengkap dan cadangan gambar sebelum menjalankan ini.",
+    'maint_image_cleanup_desc' => 'Pindai halaman & konten revisi untuk memeriksa gambar dan gambar mana yang saat ini digunakan dan gambar mana yang berlebihan. Pastikan Anda membuat database lengkap dan cadangan gambar sebelum menjalankan ini.',
     'maint_delete_images_only_in_revisions' => 'Hapus juga gambar yang hanya ada di revisi halaman lama',
     'maint_image_cleanup_run' => 'Jalankan Pembersihan',
     'maint_image_cleanup_warning' => ':count ditemukan gambar yang berpotensi tidak digunakan. Anda yakin ingin menghapus gambar-gambar ini?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Hapus Peran',
     'role_delete_confirm' => 'Ini akan menghapus peran dengan nama \':roleName\'.',
     'role_delete_users_assigned' => 'Peran ini memiliki :userCount pengguna yang ditugaskan padanya. Jika Anda ingin memindahkan pengguna dari peran ini pilih peran baru di bawah.',
-    'role_delete_no_migration' => "Jangan migrasikan pengguna",
+    'role_delete_no_migration' => 'Jangan migrasikan pengguna',
     'role_delete_sure' => 'Anda yakin ingin menghapus peran ini?',
     'role_delete_success' => 'Peran berhasil dihapus',
     'role_edit' => 'Edit Peran',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 2a33a318465898f6feaf59bde75c7ef84a4a421a..7cd7451375cfd201d08e18a57405174efd658628 100755 (executable)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Questo dominio della mail non ha accesso a questa applicazione',
     'register_success' => 'Grazie per la registrazione! Sei registrato e loggato.',
 
-
     // Password Reset
     'reset_password' => 'Reimposta Password',
     'reset_password_send_instructions' => 'Inserisci il tuo indirizzo sotto e ti verrà inviata una mail contenente un link per resettare la tua password.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Stai ricevendo questa mail perché abbiamo ricevuto una richiesta di reset della password per il tuo account.',
     'email_reset_not_requested' => 'Se non hai richiesto un reset della password, ignora questa mail.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Conferma email per :appName',
     'email_confirm_greeting' => 'Grazie per esserti registrato a :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Inserisci qui il codice di backup',
     'mfa_verify_totp_desc' => 'Inserisci il codice, generato tramite la tua app mobile, qui sotto:',
     'mfa_setup_login_notification' => 'Metodo multi-fattore configurato, si prega di effettuare nuovamente il login utilizzando il metodo configurato.',
-];
\ No newline at end of file
+];
index bcd3aadf92ad6f251e3b1923af9fd9f9f62afedd..dc148f9f11d95190253f2abf3605c98bcf55e637 100755 (executable)
@@ -20,7 +20,7 @@ return [
     'role' => 'Ruolo',
     'cover_image' => 'Immagine di copertina',
     'cover_image_description' => 'Questa immagine dovrebbe essere approssimativamente 440x250px.',
-    
+
     // Actions
     'actions' => 'Azioni',
     'view' => 'Visualizza',
index 64354b7518e7de19635238c2dc8d3b8ea141dc3c..507e502a0f8cdc998ea116b38429b15691e14580 100755 (executable)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Sei sicuro di voler eliminare questa revisione?',
     'revision_restore_confirm' => 'Sei sicuro di voler ripristinare questa revisione? Il contenuto della pagina verrà rimpiazzato.',
     'revision_delete_success' => 'Revisione cancellata',
-    'revision_cannot_delete_latest' => 'Impossibile eliminare l\'ultima revisione.'
+    'revision_cannot_delete_latest' => 'Impossibile eliminare l\'ultima revisione.',
 ];
index 7099d54f37d118cd043776b2cc06c70bd211bd53..03afdbe2de8761e3474dd4a1af5a88cdd776860f 100755 (executable)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'La password deve avere almeno sei caratteri e corrispondere alla conferma.',
-    'user' => "Non possiamo trovare un utente per quella mail.",
+    'user' => 'Non possiamo trovare un utente per quella mail.',
     'token' => 'Il token per reimpostare la password non è valido per questo indirizzo email.',
     'sent' => 'Ti abbiamo inviato via mail il link per reimpostare la password!',
     'reset' => 'La tua password è stata reimpostata!',
index 2bce3b32c41c89472525da3a2d58b922ab4f56ed..d7573de887732fc1248820e700043344f32a147c 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Manutenzione',
     'maint_image_cleanup' => 'Pulizia Immagini',
-    'maint_image_cleanup_desc' => "Esegue la scansione del contenuto delle pagine e delle revisioni per verificare quali immagini e disegni sono attualmente in uso e quali immagini sono ridondanti. Assicurati di creare backup completo del database e delle immagini prima di eseguire la pulizia.",
+    'maint_image_cleanup_desc' => 'Esegue la scansione del contenuto delle pagine e delle revisioni per verificare quali immagini e disegni sono attualmente in uso e quali immagini sono ridondanti. Assicurati di creare backup completo del database e delle immagini prima di eseguire la pulizia.',
     'maint_delete_images_only_in_revisions' => 'Elimina anche le immagini che esistono solo nelle vecchie revisioni della pagina',
     'maint_image_cleanup_run' => 'Esegui Pulizia',
     'maint_image_cleanup_warning' => ':count immagini potenzialmente inutilizzate sono state trovate. Sei sicuro di voler eliminare queste immagini?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Elimina Ruolo',
     'role_delete_confirm' => 'Questo eliminerà il ruolo con il nome \':roleName\'.',
     'role_delete_users_assigned' => 'Questo ruolo ha :userCount utenti assegnati. Se vuoi migrare gli utenti da questo ruolo selezionane uno nuovo sotto.',
-    'role_delete_no_migration' => "Non migrare gli utenti",
+    'role_delete_no_migration' => 'Non migrare gli utenti',
     'role_delete_sure' => 'Sei sicuro di voler eliminare questo ruolo?',
     'role_delete_success' => 'Ruolo eliminato correttamente',
     'role_edit' => 'Modifica Ruolo',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 98f56e73e525c09faed741205a42d3fa99355fc6..ff7c3a68b8b41dc8f8a1582a23383c08989a4d2e 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'このEmailドメインでの登録は許可されていません。',
     'register_success' => '登録が完了し、ログインできるようになりました!',
 
-
     // Password Reset
     'reset_password' => 'パスワードリセット',
     'reset_password_send_instructions' => '以下にEメールアドレスを入力すると、パスワードリセットリンクが記載されたメールが送信されます。',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'このメールは、パスワードリセットがリクエストされたため送信されています。',
     'email_reset_not_requested' => 'もしパスワードリセットを希望しない場合、操作は不要です。',
 
-
     // Email Confirmation
     'email_confirm_subject' => ':appNameのメールアドレス確認',
     'email_confirm_greeting' => ':appNameへ登録してくださりありがとうございます!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => '多要素認証が構成されました。設定された手段を利用して再度ログインしてください。',
-];
\ No newline at end of file
+];
index f7a0fdad6a81aa50389e2df2f138a187327350d4..873d367d773f298f712e2b9947d28b38995e58e0 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => '権限',
     'cover_image' => 'カバー画像',
     'cover_image_description' => 'この画像はおよそ440x250pxの大きさが必要です。',
-    
+
     // Actions
     'actions' => '実行',
     'view' => '表示',
index 62d806eeca357277903106abefec3386e4bb5df9..5a1941057428d8322b1670768a15011ee061aaea 100644 (file)
@@ -94,7 +94,7 @@ return [
     'shelves_edit' => '本棚を編集',
     'shelves_delete' => '本棚を削除',
     'shelves_delete_named' => '本棚「:name」を削除',
-    'shelves_delete_explain' => "これにより、この本棚「:name」が削除されます。含まれているブックは削除されません。",
+    'shelves_delete_explain' => 'これにより、この本棚「:name」が削除されます。含まれているブックは削除されません。',
     'shelves_delete_confirmation' => '本当にこの本棚を削除してよろしいですか?',
     'shelves_permissions' => 'Bookshelf Permissions',
     'shelves_permissions_updated' => 'Bookshelf Permissions Updated',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'このリビジョンを削除しますか?',
     'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
     'revision_delete_success' => 'リビジョンを削除しました',
-    'revision_cannot_delete_latest' => '最新のリビジョンを削除できません。'
+    'revision_cannot_delete_latest' => '最新のリビジョンを削除できません。',
 ];
index cf4d43114fcc5dbb7fd1b12cdb74e1ce7a984ec4..40493f6cee2adfd384bb2b9cfd0fa1c4516609dd 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'パスワードは6文字以上である必要があります。',
-    'user' => "このEメールアドレスに一致するユーザが見つかりませんでした。",
+    'user' => 'このEメールアドレスに一致するユーザが見つかりませんでした。',
     'token' => 'このメールアドレスのパスワードリセットトークンは無効です。',
     'sent' => 'パスワードリセットリンクを送信しました。',
     'reset' => 'パスワードはリセットされました。',
index 7023f77a4b434248acdf3c8f54961ebc6c33b82e..c606cfe1b743bd2f41a0acff0f7425b71439a038 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'メンテナンス',
     'maint_image_cleanup' => '画像のクリーンアップ',
-    'maint_image_cleanup_desc' => "ページや履歴の内容をスキャンして、どの画像や図面が現在使用されているか、どの画像が余っているかをチェックします。この機能を実行する前に、データベースと画像の完全なバックアップを作成してください。",
+    'maint_image_cleanup_desc' => 'ページや履歴の内容をスキャンして、どの画像や図面が現在使用されているか、どの画像が余っているかをチェックします。この機能を実行する前に、データベースと画像の完全なバックアップを作成してください。',
     'maint_delete_images_only_in_revisions' => 'また、古いページのリビジョンにしか存在しない画像も削除します。',
     'maint_image_cleanup_run' => 'クリーンアップを実行',
     'maint_image_cleanup_warning' => ':count 個、使用されていない可能性のある画像が見つかりました。これらの画像を削除してもよろしいですか?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => '役割を削除',
     'role_delete_confirm' => '役割「:roleName」を削除します。',
     'role_delete_users_assigned' => 'この役割は:userCount人のユーザに付与されています。該当するユーザを他の役割へ移行できます。',
-    'role_delete_no_migration' => "ユーザを移行しない",
+    'role_delete_no_migration' => 'ユーザを移行しない',
     'role_delete_sure' => '本当に役割を削除してよろしいですか?',
     'role_delete_success' => '役割を削除しました',
     'role_edit' => '役割を編集',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index ce65f3ecc86bd369ef485000366242fea8fef582..3cff67d4d9fa6c0624582ff311f4d8086c1dc758 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => '이 메일 주소로는 이 사이트에 접근할 수 없습니다.',
     'register_success' => '가입했습니다! 이제 로그인할 수 있습니다.',
 
-
     // Password Reset
     'reset_password' => '비밀번호 바꾸기',
     'reset_password_send_instructions' => '메일 주소를 입력하세요. 이 주소로 해당 과정을 위한 링크를 보낼 것입니다.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => '비밀번호를 바꿉니다.',
     'email_reset_not_requested' => '원하지 않는다면 이 과정은 필요 없습니다.',
 
-
     // Email Confirmation
     'email_confirm_subject' => ':appName 메일 인증',
     'email_confirm_greeting' => ':appName로 가입해 주셔서 감사합니다!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 2349ab735d06969ffe65d0c845a4757ef815a1ce..26b52744d7cebfdeb629f860e9b8aad2e42be22f 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => '권한',
     'cover_image' => '대표 이미지',
     'cover_image_description' => '이미지 규격은 440x250px 내외입니다.',
-    
+
     // Actions
     'actions' => '활동',
     'view' => '보기',
index 46dced1ecec2f6741959749bef19b8acbc480911..41d4dfb01bb885071799966e7863f2ecc42ec1f3 100644 (file)
@@ -94,7 +94,7 @@ return [
     'shelves_edit' => '서가 바꾸기',
     'shelves_delete' => '서가 삭제하기',
     'shelves_delete_named' => ':name 삭제하기',
-    'shelves_delete_explain' => ":name을 지웁니다. 책자는 지우지 않습니다.",
+    'shelves_delete_explain' => ':name을 지웁니다. 책자는 지우지 않습니다.',
     'shelves_delete_confirmation' => '이 서가를 지울 건가요?',
     'shelves_permissions' => '서가 권한',
     'shelves_permissions_updated' => '서가 권한 바꿈',
@@ -255,7 +255,7 @@ return [
     'tags' =>  '꼬리표',
     'tag_name' =>  '꼬리표 이름',
     'tag_value' => '리스트 값 (선택 사항)',
-    'tags_explain' => "태그로 문서를 분류하세요.",
+    'tags_explain' => '태그로 문서를 분류하세요.',
     'tags_add' => '태그 추가',
     'tags_remove' => '태그 삭제',
     'attachments' => '첨부 파일',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => '이 수정본을 지울 건가요?',
     'revision_restore_confirm' => '이 수정본을 되돌릴 건가요? 현재 판본을 바꿉니다.',
     'revision_delete_success' => '수정본 지움',
-    'revision_cannot_delete_latest' => '현재 판본은 지울 수 없습니다.'
+    'revision_cannot_delete_latest' => '현재 판본은 지울 수 없습니다.',
 ];
index b52ee91bc0e43d847a6ef22390141ab79838a955..e4ed5ccb3b5f27755e2b2bb5ecd93352ba098a1b 100644 (file)
@@ -28,7 +28,7 @@ return [
     'oidc_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system',
     'oidc_fail_authed' => 'Login using :system failed, system did not provide successful authorization',
     'social_no_action_defined' => '무슨 활동인지 알 수 없습니다.',
-    'social_login_bad_response' => ":socialAccount에 로그인할 수 없습니다. : \\n:error",
+    'social_login_bad_response' => ':socialAccount에 로그인할 수 없습니다. : \\n:error',
     'social_account_in_use' => ':socialAccount(을)를 가진 사용자가 있습니다. :socialAccount로 로그인하세요.',
     'social_account_email_in_use' => ':email(을)를 가진 사용자가 있습니다. 쓰고 있는 계정을 :socialAccount에 연결하세요.',
     'social_account_existing' => ':socialAccount(와)과 연결 상태입니다.',
index f93902aefd42bb257a14df002c8d989faae5e071..461afc74b461495c1d4096ce1d6c4eb26278a154 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => '여덟 글자를 넘어야 합니다.',
-    'user' => "메일 주소를 가진 사용자가 없습니다.",
+    'user' => '메일 주소를 가진 사용자가 없습니다.',
     'token' => '비밀번호 재설정 토큰이 이 이메일 주소에 유효하지 않습니다.',
     'sent' => '메일을 보냈습니다.',
     'reset' => '비밀번호를 바꿨습니다.',
index 0ee6085dcc878bd7b9a3ba90e10e3863213eb871..7a660bc2d534cf96123d94634ba596b76f59c9f3 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => '데이터',
     'maint_image_cleanup' => '이미지 정리',
-    'maint_image_cleanup_desc' => "중복한 이미지를 찾습니다. 실행하기 전에 이미지를 백업하세요.",
+    'maint_image_cleanup_desc' => '중복한 이미지를 찾습니다. 실행하기 전에 이미지를 백업하세요.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => '실행',
     'maint_image_cleanup_warning' => '이미지 :count개를 지울 건가요?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => '권한 제거',
     'role_delete_confirm' => ':roleName(을)를 지웁니다.',
     'role_delete_users_assigned' => '이 권한을 가진 사용자 :userCount명에 할당할 권한을 고르세요.',
-    'role_delete_no_migration' => "할당하지 않음",
+    'role_delete_no_migration' => '할당하지 않음',
     'role_delete_sure' => '이 권한을 지울 건가요?',
     'role_delete_success' => '권한 지움',
     'role_edit' => '권한 수정',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index f9bf271f69086701b52666901744ee457ee98111..e4a17eae52e59c70e8655026fb522141e7bfee95 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Elektroninio pašto domenas neturi prieigos prie šios programos',
     'register_success' => 'Ačiū už prisijungimą! Dabar jūs užsiregistravote ir prisijungėte.',
 
-
     // Password Reset
     'reset_password' => 'Pakeisti slaptažodį',
     'reset_password_send_instructions' => 'Įveskite savo elektroninį paštą žemiau ir jums bus išsiųstas elektroninis laiškas su slaptažodžio nustatymo nuoroda.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Šį laišką gaunate, nes mes gavome slaptažodžio atnaujinimo užklausą iš jūsų paskyros.',
     'email_reset_not_requested' => 'Jeigu jums nereikia slaptažodžio atnaujinimo, tolimesnių veiksmų atlikti nereikia.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Patvirtinkite savo elektroninį paštą :appName',
     'email_confirm_greeting' => 'Ačiū už prisijungimą prie :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 7ed434b9852746d8f366907028bce493d737352e..f1766a6157a2ce4ba323f57f1b9340dfe7a9bb69 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Vaidmuo',
     'cover_image' => 'Viršelio nuotrauka',
     'cover_image_description' => 'Ši nuotrauka turi būti maždaug 440x250px.',
-    
+
     // Actions
     'actions' => 'Veiksmai',
     'view' => 'Rodyti',
index f1eda39e0b1c790b17b547474480196ca4f2bcc1..4266f61de29d7b6479d1284715516293c7363f92 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Esate tikri, kad norite ištrinti šią peržiūrą?',
     'revision_restore_confirm' => 'Esate tikri, kad norite atkurti šią peržiūrą? Dabartinis puslapio turinys bus pakeistas.',
     'revision_delete_success' => 'Peržiūra ištrinta',
-    'revision_cannot_delete_latest' => 'Negalima išrinti vėliausios peržiūros'
+    'revision_cannot_delete_latest' => 'Negalima išrinti vėliausios peržiūros',
 ];
index f951989d224ca49f9fa4c8e1d9444eaa5ee699dd..035b61e217d2c2ee935e31ea895c9fd42ded5659 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Priežiūra',
     'maint_image_cleanup' => 'Išvalykite vaizdus',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_delete_images_only_in_revisions' => 'Taip pat ištrinkite vaizdus, kurie yra tik senuose puslapių pataisymuose',
     'maint_image_cleanup_run' => 'Paleisti valymą',
     'maint_image_cleanup_warning' => ':count potencialiai nepanaudoti vaizdai rasti. Ar esate tikri, kad norite ištrinti šiuos vaizdus?',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 9d857de040901ec20819ff7ee4f06e5e05247d6a..60dc3fda30885e07cb329e0fc28f2f71782df1ae 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'E-pasta domēnam nav piekļuves pie šīs aplikācijas',
     'register_success' => 'Paldies par reģistrēšanos! Tagad varat pieslēgties.',
 
-
     // Password Reset
     'reset_password' => 'Atiestatīt paroli',
     'reset_password_send_instructions' => 'Ievadiet savu e-pastu zemāk un nosūtīsim e-pastu ar paroles atiestatīšanas saiti.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Jūs saņemat šo e-pastu, jo mēs saņēmām Jūsu profila paroles atiestatīšanas pieprasījumu.',
     'email_reset_not_requested' => 'Ja Jūs nepieprasījāt paroles atiestatīšanu, tad tālākas darbības nav nepieciešamas.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Apstiprinat savu :appName e-pastu',
     'email_confirm_greeting' => 'Paldies, ka pievienojāties :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Ievadiet rezerves kodu šeit',
     'mfa_verify_totp_desc' => 'Zemāk ievadiet kodu, kas izveidots mobilajā aplikācijā:',
     'mfa_setup_login_notification' => 'Vairākfaktoru metode iestatīta, lūdzu pieslēdzieties atkal izmantojot iestatīto metodi.',
-];
\ No newline at end of file
+];
index 23cd07d7d1a264ad6b5ca88cc2fefbb259e77a40..3bc022e42490de0b8db1d6e94a2a99609d1f2764 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Loma',
     'cover_image' => 'Vāka attēls',
     'cover_image_description' => 'Šim attēlam būtu jābūt aptuveni 440x250px.',
-    
+
     // Actions
     'actions' => 'Darbības',
     'view' => 'Skatīt',
index 20669016def2c888c0c85db01a4c5e5b58abec8c..21f1cbca5c81e3116b2140b6665038f386cbcc83 100644 (file)
@@ -94,7 +94,7 @@ return [
     'shelves_edit' => 'Labot grāmatplauktu',
     'shelves_delete' => 'Dzēst grāmatplauktu',
     'shelves_delete_named' => 'Dzēst grāmatplauktu :name',
-    'shelves_delete_explain' => "Tiks dzēsts grāmatplaukts ar nosaukumu \":name\". Tajā ievietotās grāmatas netiks dzēstas.",
+    'shelves_delete_explain' => 'Tiks dzēsts grāmatplaukts ar nosaukumu ":name". Tajā ievietotās grāmatas netiks dzēstas.',
     'shelves_delete_confirmation' => 'Vai esat pārliecināts, ka vēlaties dzēst šo grāmatplauktu?',
     'shelves_permissions' => 'Grāmatplaukta atļaujas',
     'shelves_permissions_updated' => 'Grāmatplaukta atļaujas atjauninātas',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Vai esat pārliecināts, ka vēlaties dzēst šo revīziju?',
     'revision_restore_confirm' => 'Vai tiešām vēlaties atjaunot šo revīziju? Pašreizējais lapas saturs tiks aizvietots.',
     'revision_delete_success' => 'Revīzija dzēsta',
-    'revision_cannot_delete_latest' => 'Nevar dzēst pašreizējo revīziju.'
+    'revision_cannot_delete_latest' => 'Nevar dzēst pašreizējo revīziju.',
 ];
index 7d939574fb822062af6c301d3566faedabe0c63f..5824e71e6ba7abd7aa23c57bbf8134046c10d382 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Parolēm jābūt vismaz astoņu simbolu garām un jāatbilst apstiprinājumam.',
-    'user' => "Mēs nevaram atrast lietotāju ar šādu e-pasta adresi.",
+    'user' => 'Mēs nevaram atrast lietotāju ar šādu e-pasta adresi.',
     'token' => 'Paroles atiestatīšanas atslēga neatbilst šai e-pasta adresei.',
     'sent' => 'Esam nosūtījuši paroles atiestatīšanas saiti!',
     'reset' => 'Parole ir atiestatīta!',
index d3144412f95b05e0a7f22410eb1456fe9b9fc0b6..3d06aca13723264365712524ad08503426991417 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Apkope',
     'maint_image_cleanup' => 'Tīrīt neizmantotās bildes',
-    'maint_image_cleanup_desc' => "Pārbauda lapu un lapu versiju saturu, lai noteiktu, kuri attēli pašlaik tiek izmantoti, un kuri nav nepieciešami. Pārliecinieties, ka ir veikta pilna datubāzes un attēlu rezerves kopija pirms šīs darbības.",
+    'maint_image_cleanup_desc' => 'Pārbauda lapu un lapu versiju saturu, lai noteiktu, kuri attēli pašlaik tiek izmantoti, un kuri nav nepieciešami. Pārliecinieties, ka ir veikta pilna datubāzes un attēlu rezerves kopija pirms šīs darbības.',
     'maint_delete_images_only_in_revisions' => 'Dzēst arī attēlus, kas izmantoti tikai vecās lapu satura versijās',
     'maint_image_cleanup_run' => 'Veikt tīrīšanu',
     'maint_image_cleanup_warning' => ':count iespējami neizmantoti attēli atrasti. Vai tiešām vēlaties izdzēst šos attēlus?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Dzēst grupu',
     'role_delete_confirm' => 'Loma \':roleName\' tiks dzēsta.',
     'role_delete_users_assigned' => 'Šajā grupā ir pievienoti :userCount lietotāji. Ja vēlaties pārvietot lietotājus no šīs grupas, tad izvēlaties kādu no zemāk redzamajām grupām.',
-    'role_delete_no_migration' => "Nepārvietot lietotājus",
+    'role_delete_no_migration' => 'Nepārvietot lietotājus',
     'role_delete_sure' => 'Vai tiešām vēlaties dzēst grupu?',
     'role_delete_success' => 'Grupa veiksmīgi dzēsta',
     'role_edit' => 'Rediģēt grupu',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 4c1f5557732ce02074757b8bd9bb6df197330946..a59e18bb53ef563aeb8a84b19e32e49c527781a7 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Du kan ikke bruke det domenet for å registrere en konto.',
     'register_success' => 'Takk for registreringen! Du kan nå logge inn på tjenesten.',
 
-
     // Password Reset
     'reset_password' => 'Nullstille passord',
     'reset_password_send_instructions' => 'Oppgi e-posten som er koblet til kontoen din, så sender vi en epost hvor du kan nullstille passordet.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Du mottar denne eposten fordi det er blitt bedt om en nullstilling av passord på denne kontoen.',
     'email_reset_not_requested' => 'Om det ikke var deg, så trenger du ikke foreta deg noe.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Bekreft epost-adressen for :appName',
     'email_confirm_greeting' => 'Takk for at du registrerte deg for :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Skriv inn sikkerhetskode her',
     'mfa_verify_totp_desc' => 'Skriv inn koden, generert ved hjelp av mobilapplikasjonen, nedenfor:',
     'mfa_setup_login_notification' => 'Flerfaktorautentisering er konfigurert, vennligst logg inn på nytt med denne metoden.',
-];
\ No newline at end of file
+];
index 8ba4e74745df47daec83d6326751a12c40c96244..cd01b132fa8fa73c00cda3a8f41089cdffc6ebec 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rolle',
     'cover_image' => 'Bokomslag',
     'cover_image_description' => 'Bildet bør være ca. 440x250px.',
-    
+
     // Actions
     'actions' => 'Handlinger',
     'view' => 'Vis',
index 705c33875a2ee6a9d461c20904f704e812533f32..756ee5c71667fa872aae64a0efa87b2bac21a79a 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Vil du slette revisjonen?',
     'revision_restore_confirm' => 'Vil du gjenopprette revisjonen? Innholdet på siden vil bli overskrevet med denne revisjonen.',
     'revision_delete_success' => 'Revisjonen ble slettet',
-    'revision_cannot_delete_latest' => 'CKan ikke slette siste revisjon.'
+    'revision_cannot_delete_latest' => 'CKan ikke slette siste revisjon.',
 ];
index 8c3215b422a08038691ac90badf4230e23e175fe..b7afdaa809c19c7a9285476150202e66566170b6 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Passord må inneholde minst åtte tegn og samsvarer med bekreftelsen.',
-    'user' => "Vi finner ikke en bruker med den e-postadressen.",
+    'user' => 'Vi finner ikke en bruker med den e-postadressen.',
     'token' => 'Passordet for tilbakestilling av passord er ugyldig for denne e-postadressen.',
     'sent' => 'Vi har sendt e-postadressen til tilbakestilling av passordet ditt!',
     'reset' => 'Passordet ditt har blitt tilbakestilt!',
index cd20e9374072e5aa8514f1b26d453cc2c9efd63f..6dfa8bad6687e09f4eac392f037cfa8d6ad91694 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Vedlikehold',
     'maint_image_cleanup' => 'Bildeopprydding',
-    'maint_image_cleanup_desc' => "Skanner side og revisjonsinnhold for å sjekke hvilke bilder og tegninger som for øyeblikket er i bruk, og hvilke bilder som er overflødige. Forsikre deg om at du lager en full database og sikkerhetskopiering av bilder før du kjører denne.",
+    'maint_image_cleanup_desc' => 'Skanner side og revisjonsinnhold for å sjekke hvilke bilder og tegninger som for øyeblikket er i bruk, og hvilke bilder som er overflødige. Forsikre deg om at du lager en full database og sikkerhetskopiering av bilder før du kjører denne.',
     'maint_delete_images_only_in_revisions' => 'Slett også bilder som bare finnes i game siderevisjoner',
     'maint_image_cleanup_run' => 'Kjør opprydding',
     'maint_image_cleanup_warning' => ':count potensielt ubrukte bilder ble funnet. Er du sikker på at du vil slette disse bildene?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Rolle slettet',
     'role_delete_confirm' => 'Dette vil slette rollen «:roleName».',
     'role_delete_users_assigned' => 'Denne rollen har :userCount kontoer koblet opp mot seg. Velg hvilke rolle du vil flytte disse til.',
-    'role_delete_no_migration' => "Ikke flytt kontoer",
+    'role_delete_no_migration' => 'Ikke flytt kontoer',
     'role_delete_sure' => 'Er du sikker på at du vil slette rollen?',
     'role_delete_success' => 'Rollen ble slettet',
     'role_edit' => 'Endre rolle',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index bbfe5f0e28bd68cf681ffe9480d74f29f221ca2b..36d9005d814b55f637f00d6140e380ee5cc92ca0 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Dit e-maildomein is niet toegestaan',
     'register_success' => 'Bedankt voor het aanmelden! Je bent nu geregistreerd en aangemeld.',
 
-
     // Password Reset
     'reset_password' => 'Wachtwoord herstellen',
     'reset_password_send_instructions' => 'Geef je e-mail en we sturen je een link om je wachtwoord te herstellen',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Je ontvangt deze e-mail omdat je een wachtwoord herstel verzoek had verzonden.',
     'email_reset_not_requested' => 'Als je geen wachtwoord herstel hebt aangevraagd, hoef je niets te doen.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Bevestig je e-mailadres op :appName',
     'email_confirm_greeting' => 'Bedankt voor je aanmelding op :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 352e905aa4080e2bbe1a5c25989f3758dd1f5c6e..887f3ebc263befe7fce5903f499862908a643f98 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rol',
     'cover_image' => 'Omslagfoto',
     'cover_image_description' => 'Deze afbeelding moet ongeveer 440x250px zijn.',
-    
+
     // Actions
     'actions' => 'Acties',
     'view' => 'Bekijk',
index d22df41231aabb3e81a4bf7246812c616cdb931d..831cb8008ccc9b66b8a00dffa481be93eede6e6c 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Weet u zeker dat u deze revisie wilt verwijderen?',
     'revision_restore_confirm' => 'Weet u zeker dat u deze revisie wilt herstellen? De huidige pagina-inhoud wordt vervangen.',
     'revision_delete_success' => 'Revisie verwijderd',
-    'revision_cannot_delete_latest' => 'Kan de laatste revisie niet verwijderen.'
+    'revision_cannot_delete_latest' => 'Kan de laatste revisie niet verwijderen.',
 ];
index 4b27f03c20ac4372a8c379db1b15df72035c0ed1..5f90eb0df3eaf739f5a49fae548647b733601f45 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Wachtwoorden moeten overeenkomen en minimaal zes tekens lang zijn.',
-    'user' => "We kunnen niemand vinden met dat e-mailadres.",
+    'user' => 'We kunnen niemand vinden met dat e-mailadres.',
     'token' => 'Het wachtwoord reset token is ongeldig voor dit e-mailadres.',
     'sent' => 'We hebben je een link gestuurd om je wachtwoord te herstellen!',
     'reset' => 'Je wachtwoord is hersteld!',
index d6b568f85781e67ad5db87780ec5d686ae6e7d8e..379c3a1f6a9c27718c92a2dc1d9b793a14f362b2 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Onderhoud',
     'maint_image_cleanup' => 'Afbeeldingen opschonen',
-    'maint_image_cleanup_desc' => "Scant pagina- en revisie inhoud om te controleren welke afbeeldingen en tekeningen momenteel worden gebruikt en welke afbeeldingen overbodig zijn. Zorg ervoor dat je een volledige database en afbeelding backup maakt voordat je dit uitvoert.",
+    'maint_image_cleanup_desc' => 'Scant pagina- en revisie inhoud om te controleren welke afbeeldingen en tekeningen momenteel worden gebruikt en welke afbeeldingen overbodig zijn. Zorg ervoor dat je een volledige database en afbeelding backup maakt voordat je dit uitvoert.',
     'maint_delete_images_only_in_revisions' => 'Ook afbeeldingen die alleen in oude pagina revisies bestaan verwijderen',
     'maint_image_cleanup_run' => 'Opschonen uitvoeren',
     'maint_image_cleanup_warning' => ':count potentieel ongebruikte afbeeldingen gevonden. Weet u zeker dat u deze afbeeldingen wilt verwijderen?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Rol Verwijderen',
     'role_delete_confirm' => 'Dit verwijdert de rol \':roleName\'.',
     'role_delete_users_assigned' => 'Er zijn :userCount gebruikers met deze rol. Selecteer hieronder een nieuwe rol als je deze gebruikers een andere rol wilt geven.',
-    'role_delete_no_migration' => "Geen gebruikers migreren",
+    'role_delete_no_migration' => 'Geen gebruikers migreren',
     'role_delete_sure' => 'Weet je zeker dat je deze rol wilt verwijderen?',
     'role_delete_success' => 'Rol succesvol verwijderd',
     'role_edit' => 'Rol Bewerken',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index a1f66fdbe35487d6f484507d5df0a1650e58726e..2f42fc70a95206b321f320c23cc4a5ee0b8ad6e9 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Adresy e-mail z tej domeny nie mają dostępu do tej aplikacji',
     'register_success' => 'Dziękujemy za rejestrację! Zostałeś zalogowany automatycznie.',
 
-
     // Password Reset
     'reset_password' => 'Resetowanie hasła',
     'reset_password_send_instructions' => 'Wprowadź adres e-mail powiązany z Twoim kontem, by otrzymać link do resetowania hasła.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Otrzymujesz tę wiadomość ponieważ ktoś zażądał zresetowania hasła do Twojego konta.',
     'email_reset_not_requested' => 'Jeśli to nie Ty złożyłeś żądanie zresetowania hasła, zignoruj tę wiadomość.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Potwierdź swój adres e-mail w :appName',
     'email_confirm_greeting' => 'Dziękujemy za dołączenie do :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Wprowadź kod zapasowy tutaj',
     'mfa_verify_totp_desc' => 'Wprowadź kod, wygenerowany przy użyciu aplikacji mobilnej poniżej:',
     'mfa_setup_login_notification' => 'Metoda wieloskładnikowa skonfigurowana, zaloguj się ponownie za pomocą skonfigurowanej metody.',
-];
\ No newline at end of file
+];
index 1e718a63cc943081f87e4be160ed64497957fbe7..e9bb1401186b15114fab423b9eb7019c10959fd2 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rola',
     'cover_image' => 'Zdjęcie z okładki',
     'cover_image_description' => 'Ten obraz powinien posiadać wymiary około 440x250px.',
-    
+
     // Actions
     'actions' => 'Akcje',
     'view' => 'Widok',
index af1f7eecd5c581a229d4d13bb993c5319201d7dc..31d40a63e2bcef2c8dfbd6cb3f2aac02481fe20d 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Czy na pewno chcesz usunąć tę wersję?',
     'revision_restore_confirm' => 'Czu ma pewno chcesz przywrócić tą wersję? Aktualna zawartość strony zostanie nadpisana.',
     'revision_delete_success' => 'Usunięto wersję',
-    'revision_cannot_delete_latest' => 'Nie można usunąć najnowszej wersji.'
+    'revision_cannot_delete_latest' => 'Nie można usunąć najnowszej wersji.',
 ];
index 7b67bf38de6a9dc724b7279c733d80357604761b..dad844f748fab01e086d64ee784d77a75fdc3e3a 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Hasło musi zawierać co najmniej 6 znaków i być zgodne z powtórzeniem.',
-    'user' => "Nie znaleziono użytkownika o takim adresie e-mail.",
+    'user' => 'Nie znaleziono użytkownika o takim adresie e-mail.',
     'token' => 'Token resetowania hasła jest nieprawidłowy dla tego adresu e-mail.',
     'sent' => 'Wysłaliśmy Ci link do resetowania hasła!',
     'reset' => 'Twoje hasło zostało zresetowane!',
index 936ae751ce7f6ead797e807504a1736a78be5c4f..23defdad817f0abd165824e5dcf8b9a576fac825 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Konserwacja',
     'maint_image_cleanup' => 'Czyszczenie obrazków',
-    'maint_image_cleanup_desc' => "Skanuje zawartość strony i poprzednie wersje, aby sprawdzić, które obrazy i rysunki są aktualnie używane, a które obrazy są zbędne. Przed uruchomieniem tej opcji należy utworzyć pełną kopię zapasową bazy danych i obrazków.",
+    'maint_image_cleanup_desc' => 'Skanuje zawartość strony i poprzednie wersje, aby sprawdzić, które obrazy i rysunki są aktualnie używane, a które obrazy są zbędne. Przed uruchomieniem tej opcji należy utworzyć pełną kopię zapasową bazy danych i obrazków.',
     'maint_delete_images_only_in_revisions' => 'Usuń również obrazy, które istnieją tylko w starych rewizjach strony',
     'maint_image_cleanup_run' => 'Uruchom czyszczenie',
     'maint_image_cleanup_warning' => 'Znaleziono :count potencjalnie niepotrzebnych obrazków. Czy na pewno chcesz je usunąć?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Usuń rolę',
     'role_delete_confirm' => 'To spowoduje usunięcie roli \':roleName\'.',
     'role_delete_users_assigned' => 'Tę rolę ma przypisanych :userCount użytkowników. Jeśli chcesz zmigrować użytkowników z tej roli, wybierz nową poniżej.',
-    'role_delete_no_migration' => "Nie migruj użytkowników",
+    'role_delete_no_migration' => 'Nie migruj użytkowników',
     'role_delete_sure' => 'Czy na pewno chcesz usunąć tę rolę?',
     'role_delete_success' => 'Rola usunięta pomyślnie',
     'role_edit' => 'Edytuj rolę',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 849bfc22ec9717ae0b3cbc508f1cedcc15c68c3a..41fdd40dff2f920171ea39595b371aab661d9879 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'O domínio de e-mail usado não tem acesso permitido a esta aplicação',
     'register_success' => 'Obrigado por se registar! Você está agora registado e com a sessão iniciada.',
 
-
     // Password Reset
     'reset_password' => 'Redefinir Senha',
     'reset_password_send_instructions' => 'Insira o seu endereço de e-mail abaixo, e uma mensagem com o link de redefinição de palavra-passe será lhe enviada.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Você recebeu este e-mail pois recebemos uma solicitação de redefinição de senha para a sua conta.',
     'email_reset_not_requested' => 'Caso não tenha sido você a solicitar a redefinição de senha, ignore este e-mail.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirme o seu endereço de e-mail para :appName',
     'email_confirm_greeting' => 'Obrigado por se registar em :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index d2d18a2e4ea15801b25148fc8ed3fd17461fc462..0e6e468d68df42ceaf3e06fbe1767365eda20370 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Cargo',
     'cover_image' => 'Imagem de capa',
     'cover_image_description' => 'Esta imagem deve ser aproximadamente 440x250px.',
-    
+
     // Actions
     'actions' => 'Ações',
     'view' => 'Visualizar',
index 07e2d5f64853491e70578023abcc225b0003b3a0..1ebd805d4f65c1cdbd6d8ddff825651db583bb50 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Tem a certeza de que deseja eliminar esta revisão?',
     'revision_restore_confirm' => 'Tem a certeza que deseja restaurar esta revisão? O conteúdo atual da página será substituído.',
     'revision_delete_success' => 'Revisão excluída',
-    'revision_cannot_delete_latest' => 'Não é possível eliminar a revisão mais recente.'
+    'revision_cannot_delete_latest' => 'Não é possível eliminar a revisão mais recente.',
 ];
index e468b9f683895dee641b0f6b83781fce89d3bc3c..bf30e0e1326bd22f47eb36f2194839fdbce8d88b 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'As palavras-passe devem ter no mínimo oito caracteres e serem iguais à confirmação.',
-    'user' => "Não pudemos encontrar um utilizador com o endereço de e-mail fornecido.",
+    'user' => 'Não pudemos encontrar um utilizador com o endereço de e-mail fornecido.',
     'token' => 'O token de redefinição de senha é inválido para este endereço de e-mail.',
     'sent' => 'Enviamos o link de redefinição de palavra-passe para o seu e-mail!',
     'reset' => 'A sua palavra-passe foi redefinida com sucesso!',
index e432c032f6a521db627b993330987974b510737a..c87bba984ce5a80d5cc2d1a310eb6027c04a283d 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Manutenção',
     'maint_image_cleanup' => 'Limpeza de Imagens',
-    'maint_image_cleanup_desc' => "Examina páginas e reviste os seus conteúdos para verificar quais imagens e desenhos estão atualmente em uso e quais são redundantes. Certifique-se de criar uma cópia de segurança completa da base de dados e imagens antes de executar esta ação.",
+    'maint_image_cleanup_desc' => 'Examina páginas e reviste os seus conteúdos para verificar quais imagens e desenhos estão atualmente em uso e quais são redundantes. Certifique-se de criar uma cópia de segurança completa da base de dados e imagens antes de executar esta ação.',
     'maint_delete_images_only_in_revisions' => 'Eliminar também imagens que existam apenas em revisões de página antigas',
     'maint_image_cleanup_run' => 'Executar Limpeza',
     'maint_image_cleanup_warning' => ':count imagens potencialmente não utilizadas foram encontradas. Tem certeza de que deseja eliminar estas imagens?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Excluir Cargo',
     'role_delete_confirm' => 'A ação vai eliminar o cargo de nome \':roleName\'.',
     'role_delete_users_assigned' => 'Esse cargo tem :userCount utilizadores vinculados nele. Se quiser migrar utilizadores deste cargo para outro, selecione um novo cargo.',
-    'role_delete_no_migration' => "Não migrar utilizadores",
+    'role_delete_no_migration' => 'Não migrar utilizadores',
     'role_delete_sure' => 'Tem certeza que deseja excluir este cargo?',
     'role_delete_success' => 'Cargo excluído com sucesso',
     'role_edit' => 'Editar Cargo',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index a5f0c18bc21bc98b4eafe11741f56cb384d01dd1..707bea034a211dede1bc0cc970c74420a5740172 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'O domínio de e-mail usado não tem acesso permitido a essa aplicação',
     'register_success' => 'Obrigado por se cadastrar! Você agora encontra-se cadastrado(a) e logado(a).',
 
-
     // Password Reset
     'reset_password' => 'Redefinir Senha',
     'reset_password_send_instructions' => 'Insira seu e-mail abaixo e uma mensagem com o link de redefinição de senha lhe será enviada.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Você recebeu esse e-mail pois recebemos uma solicitação de redefinição de senha para a sua conta.',
     'email_reset_not_requested' => 'Caso não tenha sido você a solicitar a redefinição de senha, ignore esse e-mail.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirme seu e-mail para :appName',
     'email_confirm_greeting' => 'Obrigado por se cadastrar em :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 1435a380d6087bb8bdd623479b1fa74cfdded1e2..5a3fa2528497091019d929bca9f1c769e6001897 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Cargo',
     'cover_image' => 'Imagem de capa',
     'cover_image_description' => 'Esta imagem deve ser aproximadamente 440x250px.',
-    
+
     // Actions
     'actions' => 'Ações',
     'view' => 'Visualizar',
index 14ce2a832bbbb5688967bf0dc2a3a3f73bde268d..fc4119932c265ab071a7757c01d3fd8786ef461a 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Tem certeza de que deseja excluir esta revisão?',
     'revision_restore_confirm' => 'Tem certeza que deseja restaurar esta revisão? O conteúdo atual da página será substituído.',
     'revision_delete_success' => 'Revisão excluída',
-    'revision_cannot_delete_latest' => 'Não é possível excluir a revisão mais recente.'
+    'revision_cannot_delete_latest' => 'Não é possível excluir a revisão mais recente.',
 ];
index fde9e2937e4bf04c0e784cd5f89da77be1fd046e..8343ad57a8f4d15e2df40032b9dde64fd1d202ae 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Senhas devem ter ao menos oito caracteres e ser iguais à confirmação.',
-    'user' => "Não pudemos encontrar um usuário com o e-mail fornecido.",
+    'user' => 'Não pudemos encontrar um usuário com o e-mail fornecido.',
     'token' => 'O token de redefinição de senha é inválido para este endereço de e-mail.',
     'sent' => 'Enviamos o link de redefinição de senha para o seu e-mail!',
     'reset' => 'Sua senha foi redefinida com sucesso!',
index 84f6850abe8d82d562e382fae0965b2d11cbed41..170dd0a1a3b4e60c83a74ad9f8eb18db3c89cb15 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Manutenção',
     'maint_image_cleanup' => 'Limpeza de Imagens',
-    'maint_image_cleanup_desc' => "Examina páginas e revisa seus conteúdos para verificar quais imagens e desenhos estão atualmente em uso e quais são redundantes. Certifique-se de criar um backup completo do banco de dados e imagens antes de executar esta ação.",
+    'maint_image_cleanup_desc' => 'Examina páginas e revisa seus conteúdos para verificar quais imagens e desenhos estão atualmente em uso e quais são redundantes. Certifique-se de criar um backup completo do banco de dados e imagens antes de executar esta ação.',
     'maint_delete_images_only_in_revisions' => 'Também excluir imagens que existem apenas em revisões de página antigas',
     'maint_image_cleanup_run' => 'Executar Limpeza',
     'maint_image_cleanup_warning' => ':count imagens potencialmente não utilizadas foram encontradas. Tem certeza de que deseja excluir estas imagens?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Excluir Cargo',
     'role_delete_confirm' => 'A ação vai excluír o cargo de nome \':roleName\'.',
     'role_delete_users_assigned' => 'Esse cargo tem :userCount usuários vinculados a ele. Se quiser migrar usuários desse cargo para outro, selecione um novo cargo.',
-    'role_delete_no_migration' => "Não migre os usuários",
+    'role_delete_no_migration' => 'Não migre os usuários',
     'role_delete_sure' => 'Tem certeza que deseja excluir esse cargo?',
     'role_delete_success' => 'Cargo excluído com sucesso',
     'role_edit' => 'Editar Cargo',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 8410e40e4503771e688df1be1bd5474305224262..69b0b20d3f0af05e796807b2ab6d52cbbc840bb9 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Данный домен электронной почты недоступен для регистрации',
     'register_success' => 'Спасибо за регистрацию! Регистрация и вход в систему выполнены.',
 
-
     // Password Reset
     'reset_password' => 'Сброс пароля',
     'reset_password_send_instructions' => 'Введите свой адрес электронной почты ниже, и вам будет отправлено письмо со ссылкой для сброса пароля.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Вы получили это письмо, потому что запросили сброс пароля для вашей учетной записи.',
     'email_reset_not_requested' => 'Если вы не запрашивали сброса пароля, то никаких дополнительных действий не требуется.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Подтвердите ваш почтовый адрес на :appName',
     'email_confirm_greeting' => 'Благодарим за участие :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Введите резервный код',
     'mfa_verify_totp_desc' => 'Введите код, сгенерированный с помощью мобильного приложения, ниже:',
     'mfa_setup_login_notification' => 'Двухфакторный метод настроен, пожалуйста, войдите снова, используя сконфигурированный метод.',
-];
\ No newline at end of file
+];
index 6e2a3193121d495bde1934c54cd424abbf25904e..8b6fbda7355412bdf598be54fb239d6d4d3dc4f0 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Роль',
     'cover_image' => 'Обложка',
     'cover_image_description' => 'Изображение должно быть размером около 440x250px.',
-    
+
     // Actions
     'actions' => 'Действия',
     'view' => 'Просмотр',
index 0bcb7c1d43384e24b54ae7e3eb238384bc819c1a..d5418955c2e38689d30bc14f9a9b00c11d9698d6 100644 (file)
@@ -255,7 +255,7 @@ return [
     'tags' =>  'Теги',
     'tag_name' =>  'Имя тега',
     'tag_value' => 'Значение тега (опционально)',
-    'tags_explain' => "Добавьте теги, чтобы лучше классифицировать ваш контент. \\n Вы можете присвоить значение тегу для более глубокой организации.",
+    'tags_explain' => 'Добавьте теги, чтобы лучше классифицировать ваш контент. \\n Вы можете присвоить значение тегу для более глубокой организации.',
     'tags_add' => 'Добавить тег',
     'tags_remove' => 'Удалить этот тег',
     'attachments' => 'Вложения',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Удалить эту версию?',
     'revision_restore_confirm' => 'Вы уверены, что хотите восстановить эту версию? Текущее содержимое страницы будет заменено.',
     'revision_delete_success' => 'Версия удалена',
-    'revision_cannot_delete_latest' => 'Нельзя удалить последнюю версию.'
+    'revision_cannot_delete_latest' => 'Нельзя удалить последнюю версию.',
 ];
index 1edef426c85a461e087b217070e6dc785610af8e..ae7bac81442a4a9787ba1ca9de0e1df131329069 100644 (file)
@@ -28,7 +28,7 @@ return [
     'oidc_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system',
     'oidc_fail_authed' => 'Login using :system failed, system did not provide successful authorization',
     'social_no_action_defined' => 'Действие не определено',
-    'social_login_bad_response' => "При попытке входа с :socialAccount произошла ошибка: \\n:error",
+    'social_login_bad_response' => 'При попытке входа с :socialAccount произошла ошибка: \\n:error',
     'social_account_in_use' => 'Этот :socialAccount аккаунт уже используется, попробуйте войти с параметрами :socialAccount.',
     'social_account_email_in_use' => 'Электронный ящик :email уже используется. Если у вас уже есть учетная запись, вы можете подключить свою учетную запись :socialAccount из настроек своего профиля.',
     'social_account_existing' => 'Этот :socialAccount уже привязан к вашему профилю.',
index 433c7045411dd0e8d0487b7314036be24c39b3e9..6880c0db62f1178f6b956549925b649fdff7e0bb 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Пароль должен содержать не менее восьми символов и совпадать с подтверждением.',
-    'user' => "Пользователя с данным адресом электронной почты не существует.",
+    'user' => 'Пользователя с данным адресом электронной почты не существует.',
     'token' => 'Токен сброса пароля недействителен для этого адреса электронной почты.',
     'sent' => 'Ссылка для сброса пароля отправлена на вашу почту!',
     'reset' => 'Ваш пароль был сброшен!',
index 183738adf38352c0ec39cdc59ab5e0f7a1602765..c4591dc06ed96c44a91da8d73bb75ffe0b422cfd 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Обслуживание',
     'maint_image_cleanup' => 'Очистка изображений',
-    'maint_image_cleanup_desc' => "Сканирует содержимое страниц и предыдущих версий и определяет изображения, которые не используются. Убедитесь, что у вас есть резервная копия базы данных и папки изображений перед запуском этой функции.",
+    'maint_image_cleanup_desc' => 'Сканирует содержимое страниц и предыдущих версий и определяет изображения, которые не используются. Убедитесь, что у вас есть резервная копия базы данных и папки изображений перед запуском этой функции.',
     'maint_delete_images_only_in_revisions' => 'Также удалять изображения, которые существуют только в старой версии страницы',
     'maint_image_cleanup_run' => 'Выполнить очистку',
     'maint_image_cleanup_warning' => 'Найдено :count возможно бесполезных изображений. Вы уверены, что хотите удалить эти изображения?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Удалить роль',
     'role_delete_confirm' => 'Это удалит роль с именем \':roleName\'.',
     'role_delete_users_assigned' => 'Эта роль назначена :userCount пользователям. Если вы хотите перенести их, выберите новую роль ниже.',
-    'role_delete_no_migration' => "Не переносить пользователей",
+    'role_delete_no_migration' => 'Не переносить пользователей',
     'role_delete_sure' => 'Вы уверены что хотите удалить данную роль?',
     'role_delete_success' => 'Роль успешно удалена',
     'role_edit' => 'Редактировать роль',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index f79e79cca940747ceda6628f6801755ec9985fff..cb978baf525972bb29b3076b2aa503df6150786d 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Táto e-mailová doména nemá prístup k tejto aplikácii',
     'register_success' => 'Ďakujeme za registráciu! Teraz ste registrovaný a prihlásený.',
 
-
     // Password Reset
     'reset_password' => 'Resetovanie hesla',
     'reset_password_send_instructions' => 'Nižšie zadajte svoj e-mail, na ktorý Vám zašleme odkaz pre resetovanie hesla.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Tento e-mail ste obdržali, pretože sme dostali požiadavku na resetovanie hesla pre Váš účet.',
     'email_reset_not_requested' => 'Ak ste nepožiadali o resetovanie hesla, nemusíte robiť nič.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Potvrdiť e-mail na :appName',
     'email_confirm_greeting' => 'Ďakujeme, že ste sa pridali k :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Zadajte záložný kód',
     'mfa_verify_totp_desc' => 'Zadajte kód vygenerovaný vašou mobilnou aplikáciou:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index b9913db5942ec5a6b30c29c9f69d09a7487dd844..f84e62989624892b87e5f60e24d22084b221f7d7 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rola',
     'cover_image' => 'Obal knihy',
     'cover_image_description' => 'Tento obrázok by mal byť približne 300 x 170 pixelov.',
-    
+
     // Actions
     'actions' => 'Akcie',
     'view' => 'Zobraziť',
index e7531795fc6be94749ba7f33d6a654670ce6b5cb..1144211181a307338899c855b75877b793eeb53b 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Naozaj chcete túto revíziu odstrániť?',
     'revision_restore_confirm' => 'Naozaj chcete obnoviť túto revíziu? Aktuálny obsah stránky sa nahradí.',
     'revision_delete_success' => 'Revízia bola vymazaná',
-    'revision_cannot_delete_latest' => 'Nie je možné vymazať poslednú revíziu.'
+    'revision_cannot_delete_latest' => 'Nie je možné vymazať poslednú revíziu.',
 ];
index 5b80f62da63877abbf0ebb07084bcfb6efd14aa7..9894b91b395a58f454d932b9e3d8de4b9ddcb9b2 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Heslo musí obsahovať aspoň osem znakov a musí byť rovnaké ako potvrdzujúce.',
-    'user' => "Nenašli sme používateľa s takou emailovou adresou.",
+    'user' => 'Nenašli sme používateľa s takou emailovou adresou.',
     'token' => 'Token na obnovenie hesla je pre túto e-mailovú adresu neplatný.',
     'sent' => 'Poslali sme Vám email s odkazom na reset hesla!',
     'reset' => 'Vaše heslo bolo resetované!',
index ed46e8389b94b9120f1f775be7d15aa61cff1cc1..4aa813d804ae6a541b251082d3275d431bd01f2c 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Údržba',
     'maint_image_cleanup' => 'Prečistenie obrázkov',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'Spustiť prečistenie',
     'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Zmazať rolu',
     'role_delete_confirm' => 'Toto zmaže rolu menom \':roleName\'.',
     'role_delete_users_assigned' => 'Túto rolu má priradenú :userCount používateľov. Ak chcete premigrovať používateľov z tejto roly, vyberte novú rolu nižšie.',
-    'role_delete_no_migration' => "Nemigrovať používateľov",
+    'role_delete_no_migration' => 'Nemigrovať používateľov',
     'role_delete_sure' => 'Ste si istý, že chcete zmazať túto rolu?',
     'role_delete_success' => 'Rola úspešne zmazaná',
     'role_edit' => 'Upraviť rolu',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index b6c41666ae2d8e53f53b72e1f11402b8a96d8235..77203cde9aff6781b44c4f65823dd4a12d90661d 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Ta e-poštna domena nima dostopa do te aplikacije',
     'register_success' => 'Hvala za registracijo! Sedaj ste registrirani in prijavljeni.',
 
-
     // Password Reset
     'reset_password' => 'Ponastavi geslo',
     'reset_password_send_instructions' => 'Spodaj vpišite vaš e-poštni naslov in prejeli boste e-pošto s povezavo za ponastavitev gesla.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'To e-poštno sporočilo ste prejeli, ker smo prejeli zahtevo za ponastavitev gesla za vaš račun.',
     'email_reset_not_requested' => 'Če niste zahtevali ponastavitve gesla, vam ni potrebno ničesar storiti.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Potrdi svojo e-pošto za :appName',
     'email_confirm_greeting' => 'Hvala ker ste se pridružili :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 9f478e75dd8bf13ac264066da573876e581578be..d58467ecf82fb9028939782860b56ee3c392b32b 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Vloga',
     'cover_image' => 'Naslovna slika',
     'cover_image_description' => 'Slika naj bo velika približno 440x250px.',
-    
+
     // Actions
     'actions' => 'Dejanja',
     'view' => 'Pogled',
index 4ad1aea00dc4f5ab65bc8be420932f20eda061af..e524d4140d60118b4c5f04d5d523bd7515abd984 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Ali ste prepričani, da želite izbrisati to revizijo?',
     'revision_restore_confirm' => 'Ali ste prepričani da želite obnoviti to revizijo? Vsebina trenutne strani bo zamenjana.',
     'revision_delete_success' => 'Revizija izbrisana',
-    'revision_cannot_delete_latest' => 'Ne morem izbrisati zadnje revizije.'
+    'revision_cannot_delete_latest' => 'Ne morem izbrisati zadnje revizije.',
 ];
index e9e195fe98ee7a1345b6abcb09edee0abbe667e5..4a3b791b5fc7414e0cfa597cb61e4188065a3ddb 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Gesla morajo biti najmanj osem znakov dolga in se morajo ujemati s potrditvijo.',
-    'user' => "Ne moremo najti uporabnika s tem e-poštnim naslovom.",
+    'user' => 'Ne moremo najti uporabnika s tem e-poštnim naslovom.',
     'token' => 'Žeton za ponastavitev gesla ni veljaven za ta e-poštni naslov.',
     'sent' => 'Poslali smo vam povezavo za ponastavitev gesla!',
     'reset' => 'Vaše geslo je bilo ponastavljeno!',
index 71d9b209576dee7c01cbe2e3d2e07f82a21d4eff..e18dc11c2ad4ab868cc45e966c6f2c8ad4da839b 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Vzdrževanje',
     'maint_image_cleanup' => 'Odstrani /počisti slike',
-    'maint_image_cleanup_desc' => "Pregleda vsebino strani in revizij ter ugotovi, katere slike in risbe so v uporabi in katere so odvečne. Preden to poženeš, naredi popolno varnostno kopijo podatkovne zbirke in slik.",
+    'maint_image_cleanup_desc' => 'Pregleda vsebino strani in revizij ter ugotovi, katere slike in risbe so v uporabi in katere so odvečne. Preden to poženeš, naredi popolno varnostno kopijo podatkovne zbirke in slik.',
     'maint_delete_images_only_in_revisions' => 'Izbriši tudi slike, ki obstajajo le v starih različicah strani',
     'maint_image_cleanup_run' => 'Zaženi čiščenje',
     'maint_image_cleanup_warning' => 'Najdenih je bilo :count verjetno neuporabljenih slik. Ali si prepričan, da želiš odstraniti izbrane slike?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Brisanje vloge',
     'role_delete_confirm' => 'Izbrisana bo vloga z imenom \':roleName\'.',
     'role_delete_users_assigned' => 'Ta vloga ima dodeljenih :userCount uporabnikov. V kolikor želite uporabnike preseliti iz te vloge, spodaj izberite novo vlogo.',
-    'role_delete_no_migration' => "Ne prenašaj uporabnikov",
+    'role_delete_no_migration' => 'Ne prenašaj uporabnikov',
     'role_delete_sure' => 'Ali ste prepričani, da želite izbrisati to vlogo?',
     'role_delete_success' => 'Vloga uspešno izbrisana',
     'role_edit' => 'Uredi vlogo',
@@ -274,6 +274,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 1d1a81c7440ab1126aed82128ec4f35a9aef11cc..2cf218b5a5fe11e36b1028803114b76a45f532c3 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Den e-postadressen har inte tillgång till den här applikationen',
     'register_success' => 'Tack för din registrering! Du är nu registerad och inloggad.',
 
-
     // Password Reset
     'reset_password' => 'Återställ lösenord',
     'reset_password_send_instructions' => 'Ange din e-postadress nedan så skickar vi ett mail med en länk för att återställa ditt lösenord.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Du får detta mail eftersom vi fått en begäran om att återställa lösenordet till ditt konto.',
     'email_reset_not_requested' => 'Om du inte begärt att få ditt lösenord återställt behöver du inte göra någonting',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Bekräfta din e-post på :appName',
     'email_confirm_greeting' => 'Tack för att du gått med i :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 177a8abef1a4f44db652f6927f4aee54cbea2567..3be74d5666540542db420e846139220105962994 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Roll',
     'cover_image' => 'Omslagsbild',
     'cover_image_description' => 'Bilden bör vara cirka 440x250px stor.',
-    
+
     // Actions
     'actions' => 'Åtgärder',
     'view' => 'Visa',
index 80eb570c97dfe0cdae6959ab99dc424638880d25..1eadf1f74293949034430d9373083b2423b961c3 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Är du säker på att du vill radera den här versionen?',
     'revision_restore_confirm' => 'Är du säker på att du vill använda denna revision? Det nuvarande innehållet kommer att ersättas.',
     'revision_delete_success' => 'Revisionen raderad',
-    'revision_cannot_delete_latest' => 'Det går inte att ta bort den senaste versionen.'
+    'revision_cannot_delete_latest' => 'Det går inte att ta bort den senaste versionen.',
 ];
index 640309b8848fe4396f3463079f4463887c59c05f..9bd8dbc024f9e46095e4f96a32c32ac07ef352d8 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Lösenord måste vara minst sex tecken långa och anges likadant två gånger.',
-    'user' => "Det finns ingen användare med den e-postadressen.",
+    'user' => 'Det finns ingen användare med den e-postadressen.',
     'token' => 'Lösenordsåterställningstoken är ogiltig för denna e-postadress.',
     'sent' => 'Vi har mailat dig en länk för att återställa ditt lösenord!',
     'reset' => 'Ditt lösenord har blivit återställt!',
index 459859a26ac592517d4099d33e34c7852061b06a..76ceede74b00ed82dd4515408b707554666ac65e 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Underhåll',
     'maint_image_cleanup' => 'Rensa bilder',
-    'maint_image_cleanup_desc' => "Söker igenom innehåll i sidor & revisioner för att se vilka bilder och teckningar som är i bruk och vilka som är överflödiga. Se till att ta en komplett backup av databas och bilder innan du kör detta.",
+    'maint_image_cleanup_desc' => 'Söker igenom innehåll i sidor & revisioner för att se vilka bilder och teckningar som är i bruk och vilka som är överflödiga. Se till att ta en komplett backup av databas och bilder innan du kör detta.',
     'maint_delete_images_only_in_revisions' => 'Ta också bort bilder som bara finns i gamla sidrevideringar',
     'maint_image_cleanup_run' => 'Kör rensning',
     'maint_image_cleanup_warning' => 'Hittade :count bilder som potentiellt inte används. Vill du verkligen ta bort dessa bilder?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Ta bort roll',
     'role_delete_confirm' => 'Rollen med namn \':roleName\' kommer att tas bort.',
     'role_delete_users_assigned' => 'Det finns :userCount användare som tillhör den här rollen. Om du vill migrera användarna från den här rollen, välj en ny roll nedan.',
-    'role_delete_no_migration' => "Migrera inte användare",
+    'role_delete_no_migration' => 'Migrera inte användare',
     'role_delete_sure' => 'Är du säker på att du vill ta bort den här rollen?',
     'role_delete_success' => 'Rollen har tagits bort',
     'role_edit' => 'Redigera roll',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index d64fce93a62d90889b2297a9e4f6482ad9046475..8ff408021097b9bb80746e2bb03d50b24191eae5 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'That email domain does not have access to this application',
     'register_success' => 'Thanks for signing up! You are now registered and signed in.',
 
-
     // Password Reset
     'reset_password' => 'Reset Password',
     'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.',
     'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Confirm your email on :appName',
     'email_confirm_greeting' => 'Thanks for joining :appName!',
@@ -73,5 +71,5 @@ return [
     'user_invite_page_welcome' => 'Welcome to :appName!',
     'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.',
     'user_invite_page_confirm_button' => 'Confirm Password',
-    'user_invite_success' => 'Password set, you now have access to :appName!'
-];
\ No newline at end of file
+    'user_invite_success' => 'Password set, you now have access to :appName!',
+];
index e87bd11a5e343173fadf78e62a042e1ca0579a4a..e3bec68373dbad5c3ae006f9a1d2e99f945d2299 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Role',
     'cover_image' => 'Cover image',
     'cover_image_description' => 'This image should be approx 440x250px.',
-    
+
     // Actions
     'actions' => 'Actions',
     'view' => 'View',
index f64867a56c31736a1730d58c51f3fe0c088364d1..67c451319ac7df8352f8ccc8bcafabb0b5f97abb 100644 (file)
@@ -312,5 +312,5 @@ return [
     'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
     'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.',
     'revision_delete_success' => 'Revision deleted',
-    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
-];
\ No newline at end of file
+    'revision_cannot_delete_latest' => 'Cannot delete the latest revision.',
+];
index 2bd314cf0f28561f9a2f296b373483df42480f89..c2e4ee734fa4d14deb8eb1cb3242019a8bee7236 100644 (file)
@@ -67,7 +67,7 @@ return [
     // Maintenance settings
     'maint' => 'Maintenance',
     'maint_image_cleanup' => 'Cleanup Images',
-    'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
+    'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.',
     'maint_image_cleanup_ignore_revisions' => 'Ignore images in revisions',
     'maint_image_cleanup_run' => 'Run Cleanup',
     'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?',
@@ -224,6 +224,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 0ce90d4d08013d32c594536c4b50f211b9218b8c..62c7653bfd64103eb564b3ac5fe892e755064e47 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Bu e-posta sağlayıcısının uygulamaya erişim izni bulunmuyor',
     'register_success' => 'Kaydolduğunuz için teşekkürler! Artık kayıtlı bir kullanıcı olarak giriş yaptınız.',
 
-
     // Password Reset
     'reset_password' => 'Şifreyi Sıfırla',
     'reset_password_send_instructions' => 'Aşağıya gireceğiniz e-posta adresine şifre sıfırlama bağlantısı gönderilecektir.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Hesap şifrenizi sıfırlama isteğinde bulunduğunuz için bu e-postayı aldınız.',
     'email_reset_not_requested' => 'Şifre sıfırlama isteğinde bulunmadıysanız herhangi bir işlem yapmanıza gerek yoktur.',
 
-
     // Email Confirmation
     'email_confirm_subject' => ':appName için girdiğiniz e-posta adresini doğrulayın',
     'email_confirm_greeting' => ':appName uygulamasına katıldığınız için teşekkürler!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 1f19a62f406d4093d6b6bc94c078e1ee03d84863..add3767af8f1e5a0349076ae8448acf6607b8484 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Rol',
     'cover_image' => 'Kapak resmi',
     'cover_image_description' => 'Bu görsel yaklaşık 440x250px boyutlarında olmalıdır.',
-    
+
     // Actions
     'actions' => 'İşlemler',
     'view' => 'Görüntüle',
index 9b0a15c5d1110934c23fd8141ef3b2c78acd2202..c562ec824906c6d8b1fb6ed66b72584020b96582 100644 (file)
@@ -255,7 +255,7 @@ return [
     'tags' =>  'Etiketler',
     'tag_name' =>  'Etiket İsmi',
     'tag_value' => 'Etiket Değeri (Opsiyonel)',
-    'tags_explain' => "İçeriğinizi daha iyi kategorize etmek için etiket ekleyin. Etiketlere değer atayarak daha derinlemesine bir düzen elde edebilirsiniz.",
+    'tags_explain' => 'İçeriğinizi daha iyi kategorize etmek için etiket ekleyin. Etiketlere değer atayarak daha derinlemesine bir düzen elde edebilirsiniz.',
     'tags_add' => 'Başka etiket ekle',
     'tags_remove' => 'Bu etiketi sil',
     'attachments' => 'Ekler',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Bu revizyonu silmek istediğinize emin misiniz?',
     'revision_restore_confirm' => 'Bu revizyonu yeniden yüklemek istediğinize emin misiniz? Sayfanın şu anki içeriği değiştirilecektir.',
     'revision_delete_success' => 'Revizyon silindi',
-    'revision_cannot_delete_latest' => 'Son revizyonu silemezsiniz.'
+    'revision_cannot_delete_latest' => 'Son revizyonu silemezsiniz.',
 ];
index ba1fd913f45674e396f5589496965442c834508e..890f2d628c1e31347240b59ed9de9f7aeea74876 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Şifreniz en az 6 karakterden oluşmalı ve her iki şifre de birbiri ile eşleşmelidir.',
-    'user' => "Bu e-posta adresine sahip bir kullanıcı bulamadık.",
+    'user' => 'Bu e-posta adresine sahip bir kullanıcı bulamadık.',
     'token' => 'Şifre sıfırlama anahtarı, bu e-posta adresi için geçersizdir.',
     'sent' => 'Şifre sıfırlama bağlantısını e-posta adresinize gönderdik!',
     'reset' => 'Şifreniz sıfırlandı!',
index 3e07bce50b40ac084ba982ab69a02f904d5d0739..95de460b78714031a1c40023adf72349d28758b2 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Bakım',
     'maint_image_cleanup' => 'Görselleri Temizle',
-    'maint_image_cleanup_desc' => "Sayfaları ve revizyon içeriklerini tarayarak hangi görsellerin ve çizimlerin kullanımda olduğunu ve hangilerinin gereksiz olduğunu tespit eder. Bunu başlatmadan önce veritabanının ve görsellerin tam bir yedeğinin alındığından emin olun.",
+    'maint_image_cleanup_desc' => 'Sayfaları ve revizyon içeriklerini tarayarak hangi görsellerin ve çizimlerin kullanımda olduğunu ve hangilerinin gereksiz olduğunu tespit eder. Bunu başlatmadan önce veritabanının ve görsellerin tam bir yedeğinin alındığından emin olun.',
     'maint_delete_images_only_in_revisions' => 'Eski sayfa revizyonlarındaki görselleri de sil',
     'maint_image_cleanup_run' => 'Temizliği Başlat',
     'maint_image_cleanup_warning' => 'Muhtemelen kullanılmayan :count adet görsel bulundu. Bu görselleri silmek istediğinize emin misiniz?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Rolü Sil',
     'role_delete_confirm' => 'Bu işlem, \':roleName\' adlı rolü silecektir.',
     'role_delete_users_assigned' => 'Bu role atanmış :userCount adet kullanıcı var. Eğer bu kullanıcıların rollerini değiştirmek istiyorsanız, aşağıdan yeni bir rol seçin.',
-    'role_delete_no_migration' => "Kullanıcıları taşıma",
+    'role_delete_no_migration' => 'Kullanıcıları taşıma',
     'role_delete_sure' => 'Bu rolü silmek istediğinize emin misiniz?',
     'role_delete_success' => 'Rol başarıyla silindi',
     'role_edit' => 'Rolü Düzenle',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 52625b60fba1150d76e716bc26347842ec1a6eec..6bab87fc1df8e3e8b1b07505ddaaca6e16367624 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Цей домен електронної пошти заборонений для реєстрації',
     'register_success' => 'Дякуємо за реєстрацію! Ви зареєстровані та ввійшли в систему.',
 
-
     // Password Reset
     'reset_password' => 'Скинути пароль',
     'reset_password_send_instructions' => 'Введіть адресу електронної пошти нижче, і вам буде надіслано електронне повідомлення з посиланням на зміну пароля.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Ви отримали цей електронний лист, оскільки до нас надійшов запит на скидання пароля для вашого облікового запису.',
     'email_reset_not_requested' => 'Якщо ви не надсилали запит на скидання пароля, подальші дії не потрібні.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Підтвердьте свою електронну пошту на :appName',
     'email_confirm_greeting' => 'Дякуємо, що приєдналися до :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index 734c566e55f68e3075367b134fa52f1c47e50965..f07f713c6e8d75a7764f73f353bf01ffaf3aecb8 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Роль',
     'cover_image' => 'Обкладинка',
     'cover_image_description' => 'Це зображення має бути приблизно 440x250px.',
-    
+
     // Actions
     'actions' => 'Дії',
     'view' => 'Подивитись',
index 6f9b4dae810f0106e54ce69a1fb1a21f6a7e26e1..f5955c0e91776006ab04b01734d7d06c962900fc 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Ви впевнені, що хочете видалити цю версію?',
     'revision_restore_confirm' => 'Дійсно відновити цю версію? Вміст поточної сторінки буде замінено.',
     'revision_delete_success' => 'Версія видалена',
-    'revision_cannot_delete_latest' => 'Неможливо видалити останню версію.'
+    'revision_cannot_delete_latest' => 'Неможливо видалити останню версію.',
 ];
index 90c31777c9876fb8c1f3da3ada0fd54998256957..62a02073df86b7133b9ba3d895f204a3aca4fb05 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Пароль повинен містити не менше восьми символів і збігатись з підтвердженням.',
-    'user' => "Ми не можемо знайти користувача з цією адресою електронної пошти.",
+    'user' => 'Ми не можемо знайти користувача з цією адресою електронної пошти.',
     'token' => 'Токен скидання пароля недійсний для цієї адреси електронної пошти.',
     'sent' => 'Ми надіслали Вам електронний лист із посиланням для скидання пароля!',
     'reset' => 'Ваш пароль скинуто!',
index e00b43a3b62f4e11b0bbbd33dcd5892bde6e9ab8..1b48adfece35b8fd3dffc235b3cb092f45541999 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Обслуговування',
     'maint_image_cleanup' => 'Очищення зображень',
-    'maint_image_cleanup_desc' => "Сканує вміст сторінки та версій, щоб перевірити, які зображення та малюнки в даний час використовуються, а також які зображення зайві. Переконайтеся, що ви створили повну резервну копію бази даних та зображення, перш ніж запускати це.",
+    'maint_image_cleanup_desc' => 'Сканує вміст сторінки та версій, щоб перевірити, які зображення та малюнки в даний час використовуються, а також які зображення зайві. Переконайтеся, що ви створили повну резервну копію бази даних та зображення, перш ніж запускати це.',
     'maint_delete_images_only_in_revisions' => 'Також видалити зображення, що існують лише в старих версіях сторінки',
     'maint_image_cleanup_run' => 'Запустити очищення',
     'maint_image_cleanup_warning' => ':count потенційно невикористаних зображень було знайдено. Ви впевнені, що хочете видалити ці зображення?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Видалити роль',
     'role_delete_confirm' => 'Це призведе до видалення ролі з назвою \':roleName\'.',
     'role_delete_users_assigned' => 'Цій ролі належать :userCount користувачі(в). Якщо ви хочете перенести користувачів із цієї ролі, виберіть нову роль нижче.',
-    'role_delete_no_migration' => "Не мігрувати користувачів",
+    'role_delete_no_migration' => 'Не мігрувати користувачів',
     'role_delete_sure' => 'Ви впевнені, що хочете видалити цю роль?',
     'role_delete_success' => 'Роль успішно видалена',
     'role_edit' => 'Редагувати роль',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index e95d26ac6129bfda9c689c09b07d08e85ed1f5ad..0475570dd1bfdb021c06abaaf4ea69a128223083 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => 'Tên miền của email không có quyền truy cập tới ứng dụng này',
     'register_success' => 'Cảm ơn bạn đã đăng kí! Bạn đã được xác nhận và đăng nhập.',
 
-
     // Password Reset
     'reset_password' => 'Đặt lại mật khẩu',
     'reset_password_send_instructions' => 'Nhập email vào ô dưới đây và bạn sẽ nhận được một email với liên kết để đặt lại mật khẩu.',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => 'Bạn nhận được email này bởi vì chúng tôi nhận được một yêu cầu đặt lại mật khẩu cho tài khoản của bạn.',
     'email_reset_not_requested' => 'Nếu bạn không yêu cầu đặt lại mật khẩu, không cần có bất cứ hành động nào khác.',
 
-
     // Email Confirmation
     'email_confirm_subject' => 'Xác nhận email trên :appName',
     'email_confirm_greeting' => 'Cảm ơn bạn đã tham gia :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Nhập mã xác thực của bạn tại đây',
     'mfa_verify_totp_desc' => 'Nhập mã do ứng dụng di động của bạn tạo ra vào dưới đây:',
     'mfa_setup_login_notification' => 'Đã cài đặt xác thực nhiều bước, bạn vui lòng đăng nhập lại sử dụng phương thức đã cài đặt.',
-];
\ No newline at end of file
+];
index f118d34c3a9e6cb04bda0e0b421976b23d97362d..2a1de78638b054f4087dbda00ab3400267cb5ebf 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => 'Quyền',
     'cover_image' => 'Ảnh bìa',
     'cover_image_description' => 'Ảnh nên có kích thước 440x250px.',
-    
+
     // Actions
     'actions' => 'Hành động',
     'view' => 'Xem',
index 8162509d78cfd4701e978c9286b288dc3ec0f5b6..58e1d6b1fb320cc4f7ebb0ffca13196987cf3cb2 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => 'Bạn có chắc bạn muốn xóa phiên bản này?',
     'revision_restore_confirm' => 'Bạn có chắc bạn muốn khôi phục phiên bản này? Nội dung trang hiện tại sẽ được thay thế.',
     'revision_delete_success' => 'Phiên bản đã được xóa',
-    'revision_cannot_delete_latest' => 'Không thể xóa phiên bản mới nhất.'
+    'revision_cannot_delete_latest' => 'Không thể xóa phiên bản mới nhất.',
 ];
index 65b42b4d80fdd300169c5d0a940d7830e3399b85..e319741617e372b07a574a3fdf53cbcf999268e0 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => 'Mật khẩu phải có tối thiểu 8 ký tự và và phải trùng với mật khẩu xác nhận.',
-    'user' => "Chúng tôi không tìm thấy người dùng với địa chỉ email đó.",
+    'user' => 'Chúng tôi không tìm thấy người dùng với địa chỉ email đó.',
     'token' => 'Mã token đặt lại mật khẩu cho địa chỉ email này không hợp lệ.',
     'sent' => 'Chúng tôi đã gửi email chứa liên kết đặt lại mật khẩu cho bạn!',
     'reset' => 'Mật khẩu của bạn đã được đặt lại!',
index f6cd05fd1ad9239b17dec69b8a78ab3a5c7a7c2b..39358a13a7319fefc7739e626aec585986e5646d 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => 'Bảo trì',
     'maint_image_cleanup' => 'Dọn dẹp ảnh',
-    'maint_image_cleanup_desc' => "Quét nội dung trang và phiên bản để kiểm tra xem các ảnh và hình vẽ nào đang được sử dụng và ảnh nào dư thừa. Đảm bảo rằng bạn đã tạo bản sao lưu toàn dữ liệu và ảnh trước khi chạy chức năng này.",
+    'maint_image_cleanup_desc' => 'Quét nội dung trang và phiên bản để kiểm tra xem các ảnh và hình vẽ nào đang được sử dụng và ảnh nào dư thừa. Đảm bảo rằng bạn đã tạo bản sao lưu toàn dữ liệu và ảnh trước khi chạy chức năng này.',
     'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
     'maint_image_cleanup_run' => 'Chạy Dọn dẹp',
     'maint_image_cleanup_warning' => 'Đã tìm thấy :count ảnh có thể không được sử dụng. Bạn muốn chắc rằng muốn xóa các ảnh này?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => 'Xóa quyền',
     'role_delete_confirm' => 'Chức năng này sẽ xóa quyền với tên \':roleName\'.',
     'role_delete_users_assigned' => 'Quyền này có :userCount người dùng được gán. Nếu bạn muốn di dời các người dùng từ quyền này hãy chọn một quyền mới bên dưới.',
-    'role_delete_no_migration' => "Không di dời các người dùng",
+    'role_delete_no_migration' => 'Không di dời các người dùng',
     'role_delete_sure' => 'Bạn có chắc rằng muốn xóa quyền này?',
     'role_delete_success' => 'Quyền đã được xóa thành công',
     'role_edit' => 'Sửa quyền',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index a31ee20e75b53c9f214ecc7a5ebe3c48961b5b33..8411eb866e3651ee7ee892f58f398438f3901573 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => '该Email域名无权访问此应用程序',
     'register_success' => '感谢您注册:appName,您现在已经登录。',
 
-
     // Password Reset
     'reset_password' => '重置密码',
     'reset_password_send_instructions' => '在下面输入您的Email地址,您将收到一封带有密码重置链接的邮件。',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => '您收到此电子邮件是因为我们收到了您的帐户的密码重置请求。',
     'email_reset_not_requested' => '如果您没有要求重置密码,则不需要采取进一步的操作。',
 
-
     // Email Confirmation
     'email_confirm_subject' => '确认您在:appName的Email地址',
     'email_confirm_greeting' => '感谢您加入:appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => '在这里输入备用认证码',
     'mfa_verify_totp_desc' => '在下面输入您的移动 App 生成的认证码:',
     'mfa_setup_login_notification' => '多重身份认证已设置,请使用新配置的方法重新登录。',
-];
\ No newline at end of file
+];
index 6c2fa668bed9aab35c9064a9cce303c3c4325932..42d0eb87f516e03152432f831146941d938b0e6b 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => '角色',
     'cover_image' => '封面图片',
     'cover_image_description' => '该图像大小需要为440x250px。',
-    
+
     // Actions
     'actions' => '操作',
     'view' => '浏览',
index f3414179bbaba9be119aac2d445f2a55a23d16e2..4b2d17ecac0fb79ca5934cca28743a8f85baaaac 100644 (file)
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => '您确定要删除此修订版吗?',
     'revision_restore_confirm' => '您确定要恢复到此修订版吗?恢复后原有内容将会被替换。',
     'revision_delete_success' => '修订删除',
-    'revision_cannot_delete_latest' => '无法删除最新版本。'
+    'revision_cannot_delete_latest' => '无法删除最新版本。',
 ];
index 8d8272ee01fd9f774e2b30c4cf2a5f35a2677405..712120f606967d3beb6a4f2e983f2cecbd4b67d6 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => '密码必须至少包含六个字符并与确认相符。',
-    'user' => "使用该Email地址的用户不存在。",
+    'user' => '使用该Email地址的用户不存在。',
     'token' => '重置密码链接无法发送至此邮件地址。',
     'sent' => '我们已经通过Email发送您的密码重置链接!',
     'reset' => '您的密码已被重置!',
index 3c0c67d06049b6c7a7c6a0ae51b3288d95cf1f16..1686406debbc3f5f7f48c658572dc8c42667897d 100755 (executable)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => '维护',
     'maint_image_cleanup' => '清理图像',
-    'maint_image_cleanup_desc' => "扫描页面和修订内容以检查哪些图片是正在使用的以及哪些图片是多余的。确保在运行前完整备份数据库和图片。",
+    'maint_image_cleanup_desc' => '扫描页面和修订内容以检查哪些图片是正在使用的以及哪些图片是多余的。确保在运行前完整备份数据库和图片。',
     'maint_delete_images_only_in_revisions' => '同时删除只存在于旧的页面修订中的图片',
     'maint_image_cleanup_run' => '运行清理',
     'maint_image_cleanup_warning' => '发现了 :count 张可能未使用的图像。您确定要删除这些图像吗?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => '删除角色',
     'role_delete_confirm' => '这将会删除名为 \':roleName\' 的角色.',
     'role_delete_users_assigned' => '有:userCount位用户属于此角色。如果您想将此角色中的用户迁移,请在下面选择一个新角色。',
-    'role_delete_no_migration' => "不要迁移用户",
+    'role_delete_no_migration' => '不要迁移用户',
     'role_delete_sure' => '您确定要删除这个角色?',
     'role_delete_success' => '角色删除成功',
     'role_edit' => '编辑角色',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 89fc6f55ac0f1ca7c62722df08451f16a1e55701..a12c12178af8b2a7be209726f1b64e0321d9c6bb 100644 (file)
@@ -38,7 +38,6 @@ return [
     'registration_email_domain_invalid' => '這個電子郵件網域沒有權限使用',
     'register_success' => '感謝您註冊!您已註冊完成並可登入。',
 
-
     // Password Reset
     'reset_password' => '重設密碼',
     'reset_password_send_instructions' => '在下方輸入您的電子郵件,您將收到一封帶有密碼重設連結的郵件。',
@@ -49,7 +48,6 @@ return [
     'email_reset_text' => '您收到此電子郵件是因為我們收到了您的帳號的密碼重設請求。',
     'email_reset_not_requested' => '如果您沒有要求重設密碼,則不需要採取進一步的操作。',
 
-
     // Email Confirmation
     'email_confirm_subject' => '確認您在 :appName 的電子郵件',
     'email_confirm_greeting' => '感謝您加入 :appName!',
@@ -109,4 +107,4 @@ return [
     'mfa_verify_backup_code_enter_here' => 'Enter backup code here',
     'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:',
     'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.',
-];
\ No newline at end of file
+];
index b358111fda7b034694c0529775d50035da266f3b..8209bf4d05a92918399c6d479c92589df9aebcce 100644 (file)
@@ -20,7 +20,7 @@ return [
     'role' => '角色',
     'cover_image' => '封面圖片',
     'cover_image_description' => '此圖片大小應約為 440x250px。',
-    
+
     // Actions
     'actions' => '動作',
     'view' => '檢視',
index e35a0795a754a0ae33d2024f493af2f6e2ec40b5..a19e53860c12a6f3dedca6e87e1558190c7fc4b9 100644 (file)
@@ -94,7 +94,7 @@ return [
     'shelves_edit' => '編輯書架',
     'shelves_delete' => '刪除書架',
     'shelves_delete_named' => '刪除書架 :name',
-    'shelves_delete_explain' => "這將刪除名為「:name」的書架。但其中的書本不會被刪除。",
+    'shelves_delete_explain' => '這將刪除名為「:name」的書架。但其中的書本不會被刪除。',
     'shelves_delete_confirmation' => '您確定要刪除此書架嗎?',
     'shelves_permissions' => '書架權限',
     'shelves_permissions_updated' => '書架權限已更新',
@@ -321,5 +321,5 @@ return [
     'revision_delete_confirm' => '您確定要刪除此修訂版本嗎?',
     'revision_restore_confirm' => '您確定要還原此修訂版本嗎? 目前頁面內容將被替換。',
     'revision_delete_success' => '修訂版本已刪除',
-    'revision_cannot_delete_latest' => '無法刪除最新修訂版本。'
+    'revision_cannot_delete_latest' => '無法刪除最新修訂版本。',
 ];
index f4d8dc30cab98886c36b54f824948e5b1f6d45a6..614b9e2bfe8a19c0250ef716c20667e892206786 100644 (file)
@@ -7,7 +7,7 @@
 return [
 
     'password' => '密碼必須至少八個字元,並與確認密碼相符。',
-    'user' => "沒有使用這個電子郵件位址的使用者。",
+    'user' => '沒有使用這個電子郵件位址的使用者。',
     'token' => '這個電子郵件地址的密碼重設權杖無效。',
     'sent' => '我們已經透過電子郵件發送您的密碼重設連結。',
     'reset' => '您的密碼已被重設!',
index db01d7098a0c09ce16674f38e0a80d354b2ea28c..ca49aeaad83c5e09c5ff70e2a3fbf6983e89b784 100644 (file)
@@ -72,7 +72,7 @@ return [
     // Maintenance settings
     'maint' => '維護',
     'maint_image_cleanup' => '清理圖片',
-    'maint_image_cleanup_desc' => "掃描頁面與修訂版本內容來檢查目前使用了哪些圖片,而哪些圖片又是多餘的。請確保您在執行這個動作前建立了完整的資料庫與映像檔備份。",
+    'maint_image_cleanup_desc' => '掃描頁面與修訂版本內容來檢查目前使用了哪些圖片,而哪些圖片又是多餘的。請確保您在執行這個動作前建立了完整的資料庫與映像檔備份。',
     'maint_delete_images_only_in_revisions' => '也刪除僅存在於舊的頁面修訂版本中存在的圖片',
     'maint_image_cleanup_run' => '執行清理',
     'maint_image_cleanup_warning' => '發現了 :count 張可能未使用的圖片。您確定要刪除這些圖片嗎?',
@@ -132,7 +132,7 @@ return [
     'role_delete' => '刪除角色',
     'role_delete_confirm' => '這將會刪除名為「:roleName」的角色.',
     'role_delete_users_assigned' => '有 :userCount 位使用者屬於此角色。如果您想將此角色中的使用者遷移,請在下面選擇一個新角色。',
-    'role_delete_no_migration' => "不要遷移使用者",
+    'role_delete_no_migration' => '不要遷移使用者',
     'role_delete_sure' => '您確定要刪除此角色?',
     'role_delete_success' => '角色刪除成功',
     'role_edit' => '編輯角色',
@@ -273,6 +273,6 @@ return [
         'vi' => 'Tiếng Việt',
         'zh_CN' => '简体中文',
         'zh_TW' => '繁體中文',
-    ]
+    ],
     //!////////////////////////////////
 ];
index 49521bb89190ceddf4205ba495406f5815551b4d..4ba49946247a719532c817cd16c5ef865ac8a945 100644 (file)
@@ -1,53 +1,64 @@
 <?php
 
+use BookStack\Http\Controllers\Api\ApiDocsController;
+use BookStack\Http\Controllers\Api\AttachmentApiController;
+use BookStack\Http\Controllers\Api\BookApiController;
+use BookStack\Http\Controllers\Api\BookExportApiController;
+use BookStack\Http\Controllers\Api\BookshelfApiController;
+use BookStack\Http\Controllers\Api\ChapterApiController;
+use BookStack\Http\Controllers\Api\ChapterExportApiController;
+use BookStack\Http\Controllers\Api\PageApiController;
+use BookStack\Http\Controllers\Api\PageExportApiController;
+use Illuminate\Support\Facades\Route;
+
 /**
  * Routes for the BookStack API.
  * Routes have a uri prefix of /api/.
  * Controllers are all within app/Http/Controllers/Api.
  */
-Route::get('docs.json', 'ApiDocsController@json');
-
-Route::get('attachments', 'AttachmentApiController@list');
-Route::post('attachments', 'AttachmentApiController@create');
-Route::get('attachments/{id}', 'AttachmentApiController@read');
-Route::put('attachments/{id}', 'AttachmentApiController@update');
-Route::delete('attachments/{id}', 'AttachmentApiController@delete');
-
-Route::get('books', 'BookApiController@list');
-Route::post('books', 'BookApiController@create');
-Route::get('books/{id}', 'BookApiController@read');
-Route::put('books/{id}', 'BookApiController@update');
-Route::delete('books/{id}', 'BookApiController@delete');
-
-Route::get('books/{id}/export/html', 'BookExportApiController@exportHtml');
-Route::get('books/{id}/export/pdf', 'BookExportApiController@exportPdf');
-Route::get('books/{id}/export/plaintext', 'BookExportApiController@exportPlainText');
-Route::get('books/{id}/export/markdown', 'BookExportApiController@exportMarkdown');
-
-Route::get('chapters', 'ChapterApiController@list');
-Route::post('chapters', 'ChapterApiController@create');
-Route::get('chapters/{id}', 'ChapterApiController@read');
-Route::put('chapters/{id}', 'ChapterApiController@update');
-Route::delete('chapters/{id}', 'ChapterApiController@delete');
-
-Route::get('chapters/{id}/export/html', 'ChapterExportApiController@exportHtml');
-Route::get('chapters/{id}/export/pdf', 'ChapterExportApiController@exportPdf');
-Route::get('chapters/{id}/export/plaintext', 'ChapterExportApiController@exportPlainText');
-Route::get('chapters/{id}/export/markdown', 'ChapterExportApiController@exportMarkdown');
-
-Route::get('pages', 'PageApiController@list');
-Route::post('pages', 'PageApiController@create');
-Route::get('pages/{id}', 'PageApiController@read');
-Route::put('pages/{id}', 'PageApiController@update');
-Route::delete('pages/{id}', 'PageApiController@delete');
-
-Route::get('pages/{id}/export/html', 'PageExportApiController@exportHtml');
-Route::get('pages/{id}/export/pdf', 'PageExportApiController@exportPdf');
-Route::get('pages/{id}/export/plaintext', 'PageExportApiController@exportPlainText');
-Route::get('pages/{id}/export/markdown', 'PageExportApiController@exportMarkDown');
-
-Route::get('shelves', 'BookshelfApiController@list');
-Route::post('shelves', 'BookshelfApiController@create');
-Route::get('shelves/{id}', 'BookshelfApiController@read');
-Route::put('shelves/{id}', 'BookshelfApiController@update');
-Route::delete('shelves/{id}', 'BookshelfApiController@delete');
+Route::get('docs.json', [ApiDocsController::class, 'json']);
+
+Route::get('attachments', [AttachmentApiController::class, 'list']);
+Route::post('attachments', [AttachmentApiController::class, 'create']);
+Route::get('attachments/{id}', [AttachmentApiController::class, 'read']);
+Route::put('attachments/{id}', [AttachmentApiController::class, 'update']);
+Route::delete('attachments/{id}', [AttachmentApiController::class, 'delete']);
+
+Route::get('books', [BookApiController::class, 'list']);
+Route::post('books', [BookApiController::class, 'create']);
+Route::get('books/{id}', [BookApiController::class, 'read']);
+Route::put('books/{id}', [BookApiController::class, 'update']);
+Route::delete('books/{id}', [BookApiController::class, 'delete']);
+
+Route::get('books/{id}/export/html', [BookExportApiController::class, 'exportHtml']);
+Route::get('books/{id}/export/pdf', [BookExportApiController::class, 'exportPdf']);
+Route::get('books/{id}/export/plaintext', [BookExportApiController::class, 'exportPlainText']);
+Route::get('books/{id}/export/markdown', [BookExportApiController::class, 'exportMarkdown']);
+
+Route::get('chapters', [ChapterApiController::class, 'list']);
+Route::post('chapters', [ChapterApiController::class, 'create']);
+Route::get('chapters/{id}', [ChapterApiController::class, 'read']);
+Route::put('chapters/{id}', [ChapterApiController::class, 'update']);
+Route::delete('chapters/{id}', [ChapterApiController::class, 'delete']);
+
+Route::get('chapters/{id}/export/html', [ChapterExportApiController::class, 'exportHtml']);
+Route::get('chapters/{id}/export/pdf', [ChapterExportApiController::class, 'exportPdf']);
+Route::get('chapters/{id}/export/plaintext', [ChapterExportApiController::class, 'exportPlainText']);
+Route::get('chapters/{id}/export/markdown', [ChapterExportApiController::class, 'exportMarkdown']);
+
+Route::get('pages', [PageApiController::class, 'list']);
+Route::post('pages', [PageApiController::class, 'create']);
+Route::get('pages/{id}', [PageApiController::class, 'read']);
+Route::put('pages/{id}', [PageApiController::class, 'update']);
+Route::delete('pages/{id}', [PageApiController::class, 'delete']);
+
+Route::get('pages/{id}/export/html', [PageExportApiController::class, 'exportHtml']);
+Route::get('pages/{id}/export/pdf', [PageExportApiController::class, 'exportPdf']);
+Route::get('pages/{id}/export/plaintext', [PageExportApiController::class, 'exportPlainText']);
+Route::get('pages/{id}/export/markdown', [PageExportApiController::class, 'exportMarkDown']);
+
+Route::get('shelves', [BookshelfApiController::class, 'list']);
+Route::post('shelves', [BookshelfApiController::class, 'create']);
+Route::get('shelves/{id}', [BookshelfApiController::class, 'read']);
+Route::put('shelves/{id}', [BookshelfApiController::class, 'update']);
+Route::delete('shelves/{id}', [BookshelfApiController::class, 'delete']);
diff --git a/routes/console.php b/routes/console.php
new file mode 100644 (file)
index 0000000..e05f4c9
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+use Illuminate\Foundation\Inspiring;
+use Illuminate\Support\Facades\Artisan;
+
+/*
+|--------------------------------------------------------------------------
+| Console Routes
+|--------------------------------------------------------------------------
+|
+| This file is where you may define all of your Closure based console
+| commands. Each Closure is bound to a command instance allowing a
+| simple approach to interacting with each command's IO methods.
+|
+*/
+
+Artisan::command('inspire', function () {
+    $this->comment(Inspiring::quote());
+})->purpose('Display an inspiring quote');
index a5f35fb8af4a60f8f9e9540c2abe8b13a60f1a5d..419a1e7f5b18634ded8c9592a9bff6e7dbfea610 100644 (file)
 <?php
 
-Route::get('/status', 'StatusController@show');
-Route::get('/robots.txt', 'HomeController@robots');
+use BookStack\Http\Controllers\Api;
+use BookStack\Http\Controllers\AttachmentController;
+use BookStack\Http\Controllers\AuditLogController;
+use BookStack\Http\Controllers\Auth;
+use BookStack\Http\Controllers\BookController;
+use BookStack\Http\Controllers\BookExportController;
+use BookStack\Http\Controllers\BookshelfController;
+use BookStack\Http\Controllers\BookSortController;
+use BookStack\Http\Controllers\ChapterController;
+use BookStack\Http\Controllers\ChapterExportController;
+use BookStack\Http\Controllers\CommentController;
+use BookStack\Http\Controllers\FavouriteController;
+use BookStack\Http\Controllers\HomeController;
+use BookStack\Http\Controllers\Images;
+use BookStack\Http\Controllers\MaintenanceController;
+use BookStack\Http\Controllers\PageController;
+use BookStack\Http\Controllers\PageExportController;
+use BookStack\Http\Controllers\PageRevisionController;
+use BookStack\Http\Controllers\PageTemplateController;
+use BookStack\Http\Controllers\RecycleBinController;
+use BookStack\Http\Controllers\RoleController;
+use BookStack\Http\Controllers\SearchController;
+use BookStack\Http\Controllers\SettingController;
+use BookStack\Http\Controllers\StatusController;
+use BookStack\Http\Controllers\TagController;
+use BookStack\Http\Controllers\UserApiTokenController;
+use BookStack\Http\Controllers\UserController;
+use BookStack\Http\Controllers\UserProfileController;
+use BookStack\Http\Controllers\UserSearchController;
+use Illuminate\Support\Facades\Route;
+
+Route::get('/status', [StatusController::class, 'show']);
+Route::get('/robots.txt', [HomeController::class, 'robots']);
 
 // Authenticated routes...
-Route::group(['middleware' => 'auth'], function () {
+Route::middleware('auth')->group(function () {
 
     // Secure images routing
-    Route::get('/uploads/images/{path}', 'Images\ImageController@showImage')
+    Route::get('/uploads/images/{path}', [Images\ImageController::class, 'showImage'])
         ->where('path', '.*$');
 
     // API docs routes
-    Route::get('/api/docs', 'Api\ApiDocsController@display');
+    Route::get('/api/docs', [Api\ApiDocsController::class, 'display']);
 
-    Route::get('/pages/recently-updated', 'PageController@showRecentlyUpdated');
+    Route::get('/pages/recently-updated', [PageController::class, 'showRecentlyUpdated']);
 
     // Shelves
-    Route::get('/create-shelf', 'BookshelfController@create');
-    Route::group(['prefix' => 'shelves'], function () {
-        Route::get('/', 'BookshelfController@index');
-        Route::post('/', 'BookshelfController@store');
-        Route::get('/{slug}/edit', 'BookshelfController@edit');
-        Route::get('/{slug}/delete', 'BookshelfController@showDelete');
-        Route::get('/{slug}', 'BookshelfController@show');
-        Route::put('/{slug}', 'BookshelfController@update');
-        Route::delete('/{slug}', 'BookshelfController@destroy');
-        Route::get('/{slug}/permissions', 'BookshelfController@showPermissions');
-        Route::put('/{slug}/permissions', 'BookshelfController@permissions');
-        Route::post('/{slug}/copy-permissions', 'BookshelfController@copyPermissions');
-
-        Route::get('/{shelfSlug}/create-book', 'BookController@create');
-        Route::post('/{shelfSlug}/create-book', 'BookController@store');
+    Route::get('/create-shelf', [BookshelfController::class, 'create']);
+    Route::prefix('shelves')->group(function () {
+        Route::get('/', [BookshelfController::class, 'index']);
+        Route::post('/', [BookshelfController::class, 'store']);
+        Route::get('/{slug}/edit', [BookshelfController::class, 'edit']);
+        Route::get('/{slug}/delete', [BookshelfController::class, 'showDelete']);
+        Route::get('/{slug}', [BookshelfController::class, 'show']);
+        Route::put('/{slug}', [BookshelfController::class, 'update']);
+        Route::delete('/{slug}', [BookshelfController::class, 'destroy']);
+        Route::get('/{slug}/permissions', [BookshelfController::class, 'showPermissions']);
+        Route::put('/{slug}/permissions', [BookshelfController::class, 'permissions']);
+        Route::post('/{slug}/copy-permissions', [BookshelfController::class, 'copyPermissions']);
+
+        Route::get('/{shelfSlug}/create-book', [BookController::class, 'create']);
+        Route::post('/{shelfSlug}/create-book', [BookController::class, 'store']);
     });
 
-    Route::get('/create-book', 'BookController@create');
-    Route::group(['prefix' => 'books'], function () {
+    Route::get('/create-book', [BookController::class, 'create']);
+    Route::prefix('books')->group(function () {
 
         // Books
-        Route::get('/', 'BookController@index');
-        Route::post('/', 'BookController@store');
-        Route::get('/{slug}/edit', 'BookController@edit');
-        Route::put('/{slug}', 'BookController@update');
-        Route::delete('/{id}', 'BookController@destroy');
-        Route::get('/{slug}/sort-item', 'BookSortController@showItem');
-        Route::get('/{slug}', 'BookController@show');
-        Route::get('/{bookSlug}/permissions', 'BookController@showPermissions');
-        Route::put('/{bookSlug}/permissions', 'BookController@permissions');
-        Route::get('/{slug}/delete', 'BookController@showDelete');
-        Route::get('/{bookSlug}/sort', 'BookSortController@show');
-        Route::put('/{bookSlug}/sort', 'BookSortController@update');
-        Route::get('/{bookSlug}/export/html', 'BookExportController@html');
-        Route::get('/{bookSlug}/export/pdf', 'BookExportController@pdf');
-        Route::get('/{bookSlug}/export/markdown', 'BookExportController@markdown');
-        Route::get('/{bookSlug}/export/zip', 'BookExportController@zip');
-        Route::get('/{bookSlug}/export/plaintext', 'BookExportController@plainText');
+        Route::get('/', [BookController::class, 'index']);
+        Route::post('/', [BookController::class, 'store']);
+        Route::get('/{slug}/edit', [BookController::class, 'edit']);
+        Route::put('/{slug}', [BookController::class, 'update']);
+        Route::delete('/{id}', [BookController::class, 'destroy']);
+        Route::get('/{slug}/sort-item', [BookSortController::class, 'showItem']);
+        Route::get('/{slug}', [BookController::class, 'show']);
+        Route::get('/{bookSlug}/permissions', [BookController::class, 'showPermissions']);
+        Route::put('/{bookSlug}/permissions', [BookController::class, 'permissions']);
+        Route::get('/{slug}/delete', [BookController::class, 'showDelete']);
+        Route::get('/{bookSlug}/sort', [BookSortController::class, 'show']);
+        Route::put('/{bookSlug}/sort', [BookSortController::class, 'update']);
+        Route::get('/{bookSlug}/export/html', [BookExportController::class, 'html']);
+        Route::get('/{bookSlug}/export/pdf', [BookExportController::class, 'pdf']);
+        Route::get('/{bookSlug}/export/markdown', [BookExportController::class, 'markdown']);
+        Route::get('/{bookSlug}/export/zip', [BookExportController::class, 'zip']);
+        Route::get('/{bookSlug}/export/plaintext', [BookExportController::class, 'plainText']);
 
         // Pages
-        Route::get('/{bookSlug}/create-page', 'PageController@create');
-        Route::post('/{bookSlug}/create-guest-page', 'PageController@createAsGuest');
-        Route::get('/{bookSlug}/draft/{pageId}', 'PageController@editDraft');
-        Route::post('/{bookSlug}/draft/{pageId}', 'PageController@store');
-        Route::get('/{bookSlug}/page/{pageSlug}', 'PageController@show');
-        Route::get('/{bookSlug}/page/{pageSlug}/export/pdf', 'PageExportController@pdf');
-        Route::get('/{bookSlug}/page/{pageSlug}/export/html', 'PageExportController@html');
-        Route::get('/{bookSlug}/page/{pageSlug}/export/markdown', 'PageExportController@markdown');
-        Route::get('/{bookSlug}/page/{pageSlug}/export/plaintext', 'PageExportController@plainText');
-        Route::get('/{bookSlug}/page/{pageSlug}/edit', 'PageController@edit');
-        Route::get('/{bookSlug}/page/{pageSlug}/move', 'PageController@showMove');
-        Route::put('/{bookSlug}/page/{pageSlug}/move', 'PageController@move');
-        Route::get('/{bookSlug}/page/{pageSlug}/copy', 'PageController@showCopy');
-        Route::post('/{bookSlug}/page/{pageSlug}/copy', 'PageController@copy');
-        Route::get('/{bookSlug}/page/{pageSlug}/delete', 'PageController@showDelete');
-        Route::get('/{bookSlug}/draft/{pageId}/delete', 'PageController@showDeleteDraft');
-        Route::get('/{bookSlug}/page/{pageSlug}/permissions', 'PageController@showPermissions');
-        Route::put('/{bookSlug}/page/{pageSlug}/permissions', 'PageController@permissions');
-        Route::put('/{bookSlug}/page/{pageSlug}', 'PageController@update');
-        Route::delete('/{bookSlug}/page/{pageSlug}', 'PageController@destroy');
-        Route::delete('/{bookSlug}/draft/{pageId}', 'PageController@destroyDraft');
+        Route::get('/{bookSlug}/create-page', [PageController::class, 'create']);
+        Route::post('/{bookSlug}/create-guest-page', [PageController::class, 'createAsGuest']);
+        Route::get('/{bookSlug}/draft/{pageId}', [PageController::class, 'editDraft']);
+        Route::post('/{bookSlug}/draft/{pageId}', [PageController::class, 'store']);
+        Route::get('/{bookSlug}/page/{pageSlug}', [PageController::class, 'show']);
+        Route::get('/{bookSlug}/page/{pageSlug}/export/pdf', [PageExportController::class, 'pdf']);
+        Route::get('/{bookSlug}/page/{pageSlug}/export/html', [PageExportController::class, 'html']);
+        Route::get('/{bookSlug}/page/{pageSlug}/export/markdown', [PageExportController::class, 'markdown']);
+        Route::get('/{bookSlug}/page/{pageSlug}/export/plaintext', [PageExportController::class, 'plainText']);
+        Route::get('/{bookSlug}/page/{pageSlug}/edit', [PageController::class, 'edit']);
+        Route::get('/{bookSlug}/page/{pageSlug}/move', [PageController::class, 'showMove']);
+        Route::put('/{bookSlug}/page/{pageSlug}/move', [PageController::class, 'move']);
+        Route::get('/{bookSlug}/page/{pageSlug}/copy', [PageController::class, 'showCopy']);
+        Route::post('/{bookSlug}/page/{pageSlug}/copy', [PageController::class, 'copy']);
+        Route::get('/{bookSlug}/page/{pageSlug}/delete', [PageController::class, 'showDelete']);
+        Route::get('/{bookSlug}/draft/{pageId}/delete', [PageController::class, 'showDeleteDraft']);
+        Route::get('/{bookSlug}/page/{pageSlug}/permissions', [PageController::class, 'showPermissions']);
+        Route::put('/{bookSlug}/page/{pageSlug}/permissions', [PageController::class, 'permissions']);
+        Route::put('/{bookSlug}/page/{pageSlug}', [PageController::class, 'update']);
+        Route::delete('/{bookSlug}/page/{pageSlug}', [PageController::class, 'destroy']);
+        Route::delete('/{bookSlug}/draft/{pageId}', [PageController::class, 'destroyDraft']);
 
         // Revisions
-        Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageRevisionController@index');
-        Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageRevisionController@show');
-        Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/changes', 'PageRevisionController@changes');
-        Route::put('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageRevisionController@restore');
-        Route::delete('/{bookSlug}/page/{pageSlug}/revisions/{revId}/delete', 'PageRevisionController@destroy');
+        Route::get('/{bookSlug}/page/{pageSlug}/revisions', [PageRevisionController::class, 'index']);
+        Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', [PageRevisionController::class, 'show']);
+        Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/changes', [PageRevisionController::class, 'changes']);
+        Route::put('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', [PageRevisionController::class, 'restore']);
+        Route::delete('/{bookSlug}/page/{pageSlug}/revisions/{revId}/delete', [PageRevisionController::class, 'destroy']);
 
         // Chapters
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/create-page', 'PageController@create');
-        Route::post('/{bookSlug}/chapter/{chapterSlug}/create-guest-page', 'PageController@createAsGuest');
-        Route::get('/{bookSlug}/create-chapter', 'ChapterController@create');
-        Route::post('/{bookSlug}/create-chapter', 'ChapterController@store');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}', 'ChapterController@show');
-        Route::put('/{bookSlug}/chapter/{chapterSlug}', 'ChapterController@update');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/move', 'ChapterController@showMove');
-        Route::put('/{bookSlug}/chapter/{chapterSlug}/move', 'ChapterController@move');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/edit', 'ChapterController@edit');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/permissions', 'ChapterController@showPermissions');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/pdf', 'ChapterExportController@pdf');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/html', 'ChapterExportController@html');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/markdown', 'ChapterExportController@markdown');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/plaintext', 'ChapterExportController@plainText');
-        Route::put('/{bookSlug}/chapter/{chapterSlug}/permissions', 'ChapterController@permissions');
-        Route::get('/{bookSlug}/chapter/{chapterSlug}/delete', 'ChapterController@showDelete');
-        Route::delete('/{bookSlug}/chapter/{chapterSlug}', 'ChapterController@destroy');
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/create-page', [PageController::class, 'create']);
+        Route::post('/{bookSlug}/chapter/{chapterSlug}/create-guest-page', [PageController::class, 'createAsGuest']);
+        Route::get('/{bookSlug}/create-chapter', [ChapterController::class, 'create']);
+        Route::post('/{bookSlug}/create-chapter', [ChapterController::class, 'store']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}', [ChapterController::class, 'show']);
+        Route::put('/{bookSlug}/chapter/{chapterSlug}', [ChapterController::class, 'update']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/move', [ChapterController::class, 'showMove']);
+        Route::put('/{bookSlug}/chapter/{chapterSlug}/move', [ChapterController::class, 'move']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/edit', [ChapterController::class, 'edit']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/permissions', [ChapterController::class, 'showPermissions']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/pdf', [ChapterExportController::class, 'pdf']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/html', [ChapterExportController::class, 'html']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/markdown', [ChapterExportController::class, 'markdown']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/export/plaintext', [ChapterExportController::class, 'plainText']);
+        Route::put('/{bookSlug}/chapter/{chapterSlug}/permissions', [ChapterController::class, 'permissions']);
+        Route::get('/{bookSlug}/chapter/{chapterSlug}/delete', [ChapterController::class, 'showDelete']);
+        Route::delete('/{bookSlug}/chapter/{chapterSlug}', [ChapterController::class, 'destroy']);
     });
 
     // User Profile routes
-    Route::get('/user/{slug}', 'UserProfileController@show');
+    Route::get('/user/{slug}', [UserProfileController::class, 'show']);
 
     // Image routes
-    Route::get('/images/gallery', 'Images\GalleryImageController@list');
-    Route::post('/images/gallery', 'Images\GalleryImageController@create');
-    Route::get('/images/drawio', 'Images\DrawioImageController@list');
-    Route::get('/images/drawio/base64/{id}', 'Images\DrawioImageController@getAsBase64');
-    Route::post('/images/drawio', 'Images\DrawioImageController@create');
-    Route::get('/images/edit/{id}', 'Images\ImageController@edit');
-    Route::put('/images/{id}', 'Images\ImageController@update');
-    Route::delete('/images/{id}', 'Images\ImageController@destroy');
+    Route::get('/images/gallery', [Images\GalleryImageController::class, 'list']);
+    Route::post('/images/gallery', [Images\GalleryImageController::class, 'create']);
+    Route::get('/images/drawio', [Images\DrawioImageController::class, 'list']);
+    Route::get('/images/drawio/base64/{id}', [Images\DrawioImageController::class, 'getAsBase64']);
+    Route::post('/images/drawio', [Images\DrawioImageController::class, 'create']);
+    Route::get('/images/edit/{id}', [Images\ImageController::class, 'edit']);
+    Route::put('/images/{id}', [Images\ImageController::class, 'update']);
+    Route::delete('/images/{id}', [Images\ImageController::class, 'destroy']);
 
     // Attachments routes
-    Route::get('/attachments/{id}', 'AttachmentController@get');
-    Route::post('/attachments/upload', 'AttachmentController@upload');
-    Route::post('/attachments/upload/{id}', 'AttachmentController@uploadUpdate');
-    Route::post('/attachments/link', 'AttachmentController@attachLink');
-    Route::put('/attachments/{id}', 'AttachmentController@update');
-    Route::get('/attachments/edit/{id}', 'AttachmentController@getUpdateForm');
-    Route::get('/attachments/get/page/{pageId}', 'AttachmentController@listForPage');
-    Route::put('/attachments/sort/page/{pageId}', 'AttachmentController@sortForPage');
-    Route::delete('/attachments/{id}', 'AttachmentController@delete');
+    Route::get('/attachments/{id}', [AttachmentController::class, 'get']);
+    Route::post('/attachments/upload', [AttachmentController::class, 'upload']);
+    Route::post('/attachments/upload/{id}', [AttachmentController::class, 'uploadUpdate']);
+    Route::post('/attachments/link', [AttachmentController::class, 'attachLink']);
+    Route::put('/attachments/{id}', [AttachmentController::class, 'update']);
+    Route::get('/attachments/edit/{id}', [AttachmentController::class, 'getUpdateForm']);
+    Route::get('/attachments/get/page/{pageId}', [AttachmentController::class, 'listForPage']);
+    Route::put('/attachments/sort/page/{pageId}', [AttachmentController::class, 'sortForPage']);
+    Route::delete('/attachments/{id}', [AttachmentController::class, 'delete']);
 
     // AJAX routes
-    Route::put('/ajax/page/{id}/save-draft', 'PageController@saveDraft');
-    Route::get('/ajax/page/{id}', 'PageController@getPageAjax');
-    Route::delete('/ajax/page/{id}', 'PageController@ajaxDestroy');
+    Route::put('/ajax/page/{id}/save-draft', [PageController::class, 'saveDraft']);
+    Route::get('/ajax/page/{id}', [PageController::class, 'getPageAjax']);
+    Route::delete('/ajax/page/{id}', [PageController::class, 'ajaxDestroy']);
 
     // Tag routes (AJAX)
-    Route::group(['prefix' => 'ajax/tags'], function () {
-        Route::get('/suggest/names', 'TagController@getNameSuggestions');
-        Route::get('/suggest/values', 'TagController@getValueSuggestions');
+    Route::prefix('ajax/tags')->group(function () {
+        Route::get('/suggest/names', [TagController::class, 'getNameSuggestions']);
+        Route::get('/suggest/values', [TagController::class, 'getValueSuggestions']);
     });
 
-    Route::get('/ajax/search/entities', 'SearchController@searchEntitiesAjax');
+    Route::get('/ajax/search/entities', [SearchController::class, 'searchEntitiesAjax']);
 
     // Comments
-    Route::post('/comment/{pageId}', 'CommentController@savePageComment');
-    Route::put('/comment/{id}', 'CommentController@update');
-    Route::delete('/comment/{id}', 'CommentController@destroy');
+    Route::post('/comment/{pageId}', [CommentController::class, 'savePageComment']);
+    Route::put('/comment/{id}', [CommentController::class, 'update']);
+    Route::delete('/comment/{id}', [CommentController::class, 'destroy']);
 
     // Links
-    Route::get('/link/{id}', 'PageController@redirectFromLink');
+    Route::get('/link/{id}', [PageController::class, 'redirectFromLink']);
 
     // Search
-    Route::get('/search', 'SearchController@search');
-    Route::get('/search/book/{bookId}', 'SearchController@searchBook');
-    Route::get('/search/chapter/{bookId}', 'SearchController@searchChapter');
-    Route::get('/search/entity/siblings', 'SearchController@searchSiblings');
+    Route::get('/search', [SearchController::class, 'search']);
+    Route::get('/search/book/{bookId}', [SearchController::class, 'searchBook']);
+    Route::get('/search/chapter/{bookId}', [SearchController::class, 'searchChapter']);
+    Route::get('/search/entity/siblings', [SearchController::class, 'searchSiblings']);
 
     // User Search
-    Route::get('/search/users/select', 'UserSearchController@forSelect');
+    Route::get('/search/users/select', [UserSearchController::class, 'forSelect']);
 
     // Template System
-    Route::get('/templates', 'PageTemplateController@list');
-    Route::get('/templates/{templateId}', 'PageTemplateController@get');
+    Route::get('/templates', [PageTemplateController::class, 'list']);
+    Route::get('/templates/{templateId}', [PageTemplateController::class, 'get']);
 
     // Favourites
-    Route::get('/favourites', 'FavouriteController@index');
-    Route::post('/favourites/add', 'FavouriteController@add');
-    Route::post('/favourites/remove', 'FavouriteController@remove');
+    Route::get('/favourites', [FavouriteController::class, 'index']);
+    Route::post('/favourites/add', [FavouriteController::class, 'add']);
+    Route::post('/favourites/remove', [FavouriteController::class, 'remove']);
 
     // Other Pages
-    Route::get('/', 'HomeController@index');
-    Route::get('/home', 'HomeController@index');
-    Route::get('/custom-head-content', 'HomeController@customHeadContent');
+    Route::get('/', [HomeController::class, 'index']);
+    Route::get('/home', [HomeController::class, 'index']);
+    Route::get('/custom-head-content', [HomeController::class, 'customHeadContent']);
 
     // Settings
-    Route::group(['prefix' => 'settings'], function () {
-        Route::get('/', 'SettingController@index')->name('settings');
-        Route::post('/', 'SettingController@update');
+    Route::prefix('settings')->group(function () {
+        Route::get('/', [SettingController::class, 'index'])->name('settings');
+        Route::post('/', [SettingController::class, 'update']);
 
         // Maintenance
-        Route::get('/maintenance', 'MaintenanceController@index');
-        Route::delete('/maintenance/cleanup-images', 'MaintenanceController@cleanupImages');
-        Route::post('/maintenance/send-test-email', 'MaintenanceController@sendTestEmail');
+        Route::get('/maintenance', [MaintenanceController::class, 'index']);
+        Route::delete('/maintenance/cleanup-images', [MaintenanceController::class, 'cleanupImages']);
+        Route::post('/maintenance/send-test-email', [MaintenanceController::class, 'sendTestEmail']);
 
         // Recycle Bin
-        Route::get('/recycle-bin', 'RecycleBinController@index');
-        Route::post('/recycle-bin/empty', 'RecycleBinController@empty');
-        Route::get('/recycle-bin/{id}/destroy', 'RecycleBinController@showDestroy');
-        Route::delete('/recycle-bin/{id}', 'RecycleBinController@destroy');
-        Route::get('/recycle-bin/{id}/restore', 'RecycleBinController@showRestore');
-        Route::post('/recycle-bin/{id}/restore', 'RecycleBinController@restore');
+        Route::get('/recycle-bin', [RecycleBinController::class, 'index']);
+        Route::post('/recycle-bin/empty', [RecycleBinController::class, 'empty']);
+        Route::get('/recycle-bin/{id}/destroy', [RecycleBinController::class, 'showDestroy']);
+        Route::delete('/recycle-bin/{id}', [RecycleBinController::class, 'destroy']);
+        Route::get('/recycle-bin/{id}/restore', [RecycleBinController::class, 'showRestore']);
+        Route::post('/recycle-bin/{id}/restore', [RecycleBinController::class, 'restore']);
 
         // Audit Log
-        Route::get('/audit', 'AuditLogController@index');
+        Route::get('/audit', [AuditLogController::class, 'index']);
 
         // Users
-        Route::get('/users', 'UserController@index');
-        Route::get('/users/create', 'UserController@create');
-        Route::get('/users/{id}/delete', 'UserController@delete');
-        Route::patch('/users/{id}/switch-books-view', 'UserController@switchBooksView');
-        Route::patch('/users/{id}/switch-shelves-view', 'UserController@switchShelvesView');
-        Route::patch('/users/{id}/switch-shelf-view', 'UserController@switchShelfView');
-        Route::patch('/users/{id}/change-sort/{type}', 'UserController@changeSort');
-        Route::patch('/users/{id}/update-expansion-preference/{key}', 'UserController@updateExpansionPreference');
-        Route::patch('/users/toggle-dark-mode', 'UserController@toggleDarkMode');
-        Route::post('/users/create', 'UserController@store');
-        Route::get('/users/{id}', 'UserController@edit');
-        Route::put('/users/{id}', 'UserController@update');
-        Route::delete('/users/{id}', 'UserController@destroy');
+        Route::get('/users', [UserController::class, 'index']);
+        Route::get('/users/create', [UserController::class, 'create']);
+        Route::get('/users/{id}/delete', [UserController::class, 'delete']);
+        Route::patch('/users/{id}/switch-books-view', [UserController::class, 'switchBooksView']);
+        Route::patch('/users/{id}/switch-shelves-view', [UserController::class, 'switchShelvesView']);
+        Route::patch('/users/{id}/switch-shelf-view', [UserController::class, 'switchShelfView']);
+        Route::patch('/users/{id}/change-sort/{type}', [UserController::class, 'changeSort']);
+        Route::patch('/users/{id}/update-expansion-preference/{key}', [UserController::class, 'updateExpansionPreference']);
+        Route::patch('/users/toggle-dark-mode', [UserController::class, 'toggleDarkMode']);
+        Route::post('/users/create', [UserController::class, 'store']);
+        Route::get('/users/{id}', [UserController::class, 'edit']);
+        Route::put('/users/{id}', [UserController::class, 'update']);
+        Route::delete('/users/{id}', [UserController::class, 'destroy']);
 
         // User API Tokens
-        Route::get('/users/{userId}/create-api-token', 'UserApiTokenController@create');
-        Route::post('/users/{userId}/create-api-token', 'UserApiTokenController@store');
-        Route::get('/users/{userId}/api-tokens/{tokenId}', 'UserApiTokenController@edit');
-        Route::put('/users/{userId}/api-tokens/{tokenId}', 'UserApiTokenController@update');
-        Route::get('/users/{userId}/api-tokens/{tokenId}/delete', 'UserApiTokenController@delete');
-        Route::delete('/users/{userId}/api-tokens/{tokenId}', 'UserApiTokenController@destroy');
+        Route::get('/users/{userId}/create-api-token', [UserApiTokenController::class, 'create']);
+        Route::post('/users/{userId}/create-api-token', [UserApiTokenController::class, 'store']);
+        Route::get('/users/{userId}/api-tokens/{tokenId}', [UserApiTokenController::class, 'edit']);
+        Route::put('/users/{userId}/api-tokens/{tokenId}', [UserApiTokenController::class, 'update']);
+        Route::get('/users/{userId}/api-tokens/{tokenId}/delete', [UserApiTokenController::class, 'delete']);
+        Route::delete('/users/{userId}/api-tokens/{tokenId}', [UserApiTokenController::class, 'destroy']);
 
         // Roles
-        Route::get('/roles', 'RoleController@list');
-        Route::get('/roles/new', 'RoleController@create');
-        Route::post('/roles/new', 'RoleController@store');
-        Route::get('/roles/delete/{id}', 'RoleController@showDelete');
-        Route::delete('/roles/delete/{id}', 'RoleController@delete');
-        Route::get('/roles/{id}', 'RoleController@edit');
-        Route::put('/roles/{id}', 'RoleController@update');
+        Route::get('/roles', [RoleController::class, 'list']);
+        Route::get('/roles/new', [RoleController::class, 'create']);
+        Route::post('/roles/new', [RoleController::class, 'store']);
+        Route::get('/roles/delete/{id}', [RoleController::class, 'showDelete']);
+        Route::delete('/roles/delete/{id}', [RoleController::class, 'delete']);
+        Route::get('/roles/{id}', [RoleController::class, 'edit']);
+        Route::put('/roles/{id}', [RoleController::class, 'update']);
     });
 });
 
 // MFA routes
-Route::group(['middleware' => 'mfa-setup'], function () {
-    Route::get('/mfa/setup', 'Auth\MfaController@setup');
-    Route::get('/mfa/totp/generate', 'Auth\MfaTotpController@generate');
-    Route::post('/mfa/totp/confirm', 'Auth\MfaTotpController@confirm');
-    Route::get('/mfa/backup_codes/generate', 'Auth\MfaBackupCodesController@generate');
-    Route::post('/mfa/backup_codes/confirm', 'Auth\MfaBackupCodesController@confirm');
+Route::middleware('mfa-setup')->group(function () {
+    Route::get('/mfa/setup', [Auth\MfaController::class, 'setup']);
+    Route::get('/mfa/totp/generate', [Auth\MfaTotpController::class, 'generate']);
+    Route::post('/mfa/totp/confirm', [Auth\MfaTotpController::class, 'confirm']);
+    Route::get('/mfa/backup_codes/generate', [Auth\MfaBackupCodesController::class, 'generate']);
+    Route::post('/mfa/backup_codes/confirm', [Auth\MfaBackupCodesController::class, 'confirm']);
 });
-Route::group(['middleware' => 'guest'], function () {
-    Route::get('/mfa/verify', 'Auth\MfaController@verify');
-    Route::post('/mfa/totp/verify', 'Auth\MfaTotpController@verify');
-    Route::post('/mfa/backup_codes/verify', 'Auth\MfaBackupCodesController@verify');
+Route::middleware('guest')->group(function () {
+    Route::get('/mfa/verify', [Auth\MfaController::class, 'verify']);
+    Route::post('/mfa/totp/verify', [Auth\MfaTotpController::class, 'verify']);
+    Route::post('/mfa/backup_codes/verify', [Auth\MfaBackupCodesController::class, 'verify']);
 });
-Route::delete('/mfa/{method}/remove', 'Auth\MfaController@remove')->middleware('auth');
+Route::delete('/mfa/{method}/remove', [Auth\MfaController::class, 'remove'])->middleware('auth');
 
 // Social auth routes
-Route::get('/login/service/{socialDriver}', 'Auth\SocialController@login');
-Route::get('/login/service/{socialDriver}/callback', 'Auth\SocialController@callback');
-Route::post('/login/service/{socialDriver}/detach', 'Auth\SocialController@detach')->middleware('auth');
-Route::get('/register/service/{socialDriver}', 'Auth\SocialController@register');
+Route::get('/login/service/{socialDriver}', [Auth\SocialController::class, 'login']);
+Route::get('/login/service/{socialDriver}/callback', [Auth\SocialController::class, 'callback']);
+Route::post('/login/service/{socialDriver}/detach', [Auth\SocialController::class, 'detach'])->middleware('auth');
+Route::get('/register/service/{socialDriver}', [Auth\SocialController::class, 'register']);
 
 // Login/Logout routes
-Route::get('/login', 'Auth\LoginController@getLogin');
-Route::post('/login', 'Auth\LoginController@login');
-Route::get('/logout', 'Auth\LoginController@logout');
-Route::get('/register', 'Auth\RegisterController@getRegister');
-Route::get('/register/confirm', 'Auth\ConfirmEmailController@show');
-Route::get('/register/confirm/awaiting', 'Auth\ConfirmEmailController@showAwaiting');
-Route::post('/register/confirm/resend', 'Auth\ConfirmEmailController@resend');
-Route::get('/register/confirm/{token}', 'Auth\ConfirmEmailController@confirm');
-Route::post('/register', 'Auth\RegisterController@postRegister');
+Route::get('/login', [Auth\LoginController::class, 'getLogin']);
+Route::post('/login', [Auth\LoginController::class, 'login']);
+Route::get('/logout', [Auth\LoginController::class, 'logout']);
+Route::get('/register', [Auth\RegisterController::class, 'getRegister']);
+Route::get('/register/confirm', [Auth\ConfirmEmailController::class, 'show']);
+Route::get('/register/confirm/awaiting', [Auth\ConfirmEmailController::class, 'showAwaiting']);
+Route::post('/register/confirm/resend', [Auth\ConfirmEmailController::class, 'resend']);
+Route::get('/register/confirm/{token}', [Auth\ConfirmEmailController::class, 'confirm']);
+Route::post('/register', [Auth\RegisterController::class, 'postRegister']);
 
 // SAML routes
-Route::post('/saml2/login', 'Auth\Saml2Controller@login');
-Route::get('/saml2/logout', 'Auth\Saml2Controller@logout');
-Route::get('/saml2/metadata', 'Auth\Saml2Controller@metadata');
-Route::get('/saml2/sls', 'Auth\Saml2Controller@sls');
-Route::post('/saml2/acs', 'Auth\Saml2Controller@startAcs');
-Route::get('/saml2/acs', 'Auth\Saml2Controller@processAcs');
+Route::post('/saml2/login', [Auth\Saml2Controller::class, 'login']);
+Route::get('/saml2/logout', [Auth\Saml2Controller::class, 'logout']);
+Route::get('/saml2/metadata', [Auth\Saml2Controller::class, 'metadata']);
+Route::get('/saml2/sls', [Auth\Saml2Controller::class, 'sls']);
+Route::post('/saml2/acs', [Auth\Saml2Controller::class, 'startAcs']);
+Route::get('/saml2/acs', [Auth\Saml2Controller::class, 'processAcs']);
 
 // OIDC routes
-Route::post('/oidc/login', 'Auth\OidcController@login');
-Route::get('/oidc/callback', 'Auth\OidcController@callback');
+Route::post('/oidc/login', [Auth\OidcController::class, 'login']);
+Route::get('/oidc/callback', [Auth\OidcController::class, 'callback']);
 
 // User invitation routes
-Route::get('/register/invite/{token}', 'Auth\UserInviteController@showSetPassword');
-Route::post('/register/invite/{token}', 'Auth\UserInviteController@setPassword');
+Route::get('/register/invite/{token}', [Auth\UserInviteController::class, 'showSetPassword']);
+Route::post('/register/invite/{token}', [Auth\UserInviteController::class, 'setPassword']);
 
 // Password reset link request routes...
-Route::get('/password/email', 'Auth\ForgotPasswordController@showLinkRequestForm');
-Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
+Route::get('/password/email', [Auth\ForgotPasswordController::class, 'showLinkRequestForm']);
+Route::post('/password/email', [Auth\ForgotPasswordController::class, 'sendResetLinkEmail']);
 
 // Password reset routes...
-Route::get('/password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
-Route::post('/password/reset', 'Auth\ResetPasswordController@reset');
+Route::get('/password/reset/{token}', [Auth\ResetPasswordController::class, 'showResetForm']);
+Route::post('/password/reset', [Auth\ResetPasswordController::class, 'reset']);
 
-Route::fallback('HomeController@notFound')->name('fallback');
+Route::fallback([HomeController::class, 'notFound'])->name('fallback');
diff --git a/storage/clockwork/.gitignore b/storage/clockwork/.gitignore
new file mode 100644 (file)
index 0000000..3fac1bf
--- /dev/null
@@ -0,0 +1,3 @@
+*.json
+*.json.gz
+index
index 953edb7a993a821605b5c040962369e7f46c9e3a..05c4471f2b53fc17d3cac9d3d252755a35479f7c 100755 (executable)
@@ -1,7 +1,9 @@
-config.php
-routes.php
 compiled.php
-services.json
+config.php
+down
 events.scanned.php
+maintenance.php
+routes.php
 routes.scanned.php
-down
+schedule-*
+services.json
index 40624dcdf869c9627032753ff30f3758f4a3dbe8..ceab5d49afa4dd32e32d36c411c0b2bb97bd6418 100644 (file)
@@ -325,6 +325,6 @@ class AttachmentsApiTest extends TestCase
      */
     protected function getTestFile(string $fileName): UploadedFile
     {
-        return new UploadedFile(base_path('tests/test-data/test-file.txt'), $fileName, 'text/plain', 55, null, true);
+        return new UploadedFile(base_path('tests/test-data/test-file.txt'), $fileName, 'text/plain', null, true);
     }
 }
index 8d13670ca95e85a084a1269d178a9dd088a259bc..f909cd79a2959e8b5d943a1add0e980164200ad5 100644 (file)
@@ -17,7 +17,7 @@ class AuditLogTest extends TestCase
     /** @var ActivityService */
     protected $activityService;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->activityService = app(ActivityService::class);
index 79f00bed093cbd28c0c550820e41e76a0b799133..66ab09d3c62dc02ebaec724c57c532f246b89a61 100644 (file)
@@ -44,7 +44,7 @@ class AuthTest extends TestCase
     {
         // Set settings and get user instance
         $this->setSettings(['registration-enabled' => 'true']);
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
 
         // Test form and ensure user is created
         $this->get('/register')
@@ -102,7 +102,7 @@ class AuthTest extends TestCase
 
         // Set settings and get user instance
         $this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true']);
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
 
         // Go through registration process
         $resp = $this->post('/register', $user->only('name', 'email', 'password'));
@@ -140,7 +140,7 @@ class AuthTest extends TestCase
     public function test_restricted_registration()
     {
         $this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true', 'registration-restrict' => 'example.com']);
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
 
         // Go through registration process
         $this->post('/register', $user->only('name', 'email', 'password'))
@@ -166,7 +166,7 @@ class AuthTest extends TestCase
     public function test_restricted_registration_with_confirmation_disabled()
     {
         $this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'false', 'registration-restrict' => 'example.com']);
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
 
         // Go through registration process
         $this->post('/register', $user->only('name', 'email', 'password'))
index 9e0729a8e9fc4d278f83b2db67daafc449dd83a6..d00e8cf15df4f1de9565967bde4016d6d3b3273f 100644 (file)
@@ -20,7 +20,7 @@ class LdapTest extends TestCase
     protected $mockUser;
     protected $resourceId = 'resource-test';
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         if (!defined('LDAP_OPT_REFERRALS')) {
@@ -42,7 +42,7 @@ class LdapTest extends TestCase
         ]);
         $this->mockLdap = \Mockery::mock(Ldap::class);
         $this->app[Ldap::class] = $this->mockLdap;
-        $this->mockUser = factory(User::class)->make();
+        $this->mockUser = User::factory()->make();
     }
 
     protected function runFailedAuthLogin()
@@ -264,9 +264,9 @@ class LdapTest extends TestCase
 
     public function test_login_maps_roles_and_retains_existing_roles()
     {
-        $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']);
-        $roleToReceive2 = factory(Role::class)->create(['display_name' => 'LdapTester Second']);
-        $existingRole = factory(Role::class)->create(['display_name' => 'ldaptester-existing']);
+        $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']);
+        $roleToReceive2 = Role::factory()->create(['display_name' => 'LdapTester Second']);
+        $existingRole = Role::factory()->create(['display_name' => 'ldaptester-existing']);
         $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save();
         $this->mockUser->attachRole($existingRole);
 
@@ -310,8 +310,8 @@ class LdapTest extends TestCase
 
     public function test_login_maps_roles_and_removes_old_roles_if_set()
     {
-        $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']);
-        $existingRole = factory(Role::class)->create(['display_name' => 'ldaptester-existing']);
+        $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']);
+        $existingRole = Role::factory()->create(['display_name' => 'ldaptester-existing']);
         $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save();
         $this->mockUser->attachRole($existingRole);
 
@@ -350,15 +350,15 @@ class LdapTest extends TestCase
 
     public function test_external_auth_id_visible_in_roles_page_when_ldap_active()
     {
-        $role = factory(Role::class)->create(['display_name' => 'ldaptester', 'external_auth_id' => 'ex-auth-a, test-second-param']);
+        $role = Role::factory()->create(['display_name' => 'ldaptester', 'external_auth_id' => 'ex-auth-a, test-second-param']);
         $this->asAdmin()->get('/settings/roles/' . $role->id)
             ->assertSee('ex-auth-a');
     }
 
     public function test_login_maps_roles_using_external_auth_ids_if_set()
     {
-        $roleToReceive = factory(Role::class)->create(['display_name' => 'ldaptester', 'external_auth_id' => 'test-second-param, ex-auth-a']);
-        $roleToNotReceive = factory(Role::class)->create(['display_name' => 'ex-auth-a', 'external_auth_id' => 'test-second-param']);
+        $roleToReceive = Role::factory()->create(['display_name' => 'ldaptester', 'external_auth_id' => 'test-second-param, ex-auth-a']);
+        $roleToNotReceive = Role::factory()->create(['display_name' => 'ex-auth-a', 'external_auth_id' => 'test-second-param']);
 
         app('config')->set([
             'services.ldap.user_to_groups'     => true,
@@ -395,8 +395,8 @@ class LdapTest extends TestCase
 
     public function test_login_group_mapping_does_not_conflict_with_default_role()
     {
-        $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']);
-        $roleToReceive2 = factory(Role::class)->create(['display_name' => 'LdapTester Second']);
+        $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']);
+        $roleToReceive2 = Role::factory()->create(['display_name' => 'LdapTester Second']);
         $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save();
 
         setting()->put('registration-role', $roleToReceive->id);
@@ -641,8 +641,8 @@ class LdapTest extends TestCase
 
     public function test_login_with_email_confirmation_required_maps_groups_but_shows_confirmation_screen()
     {
-        $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']);
-        $user = factory(User::class)->make();
+        $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']);
+        $user = User::factory()->make();
         setting()->put('registration-confirmation', 'true');
 
         app('config')->set([
index 59a2a41b5652ee7c2c7e423eab3e8b27d4a8a6cd..fab94817c4b651d6c1bd022c737984c0b742f915 100644 (file)
@@ -39,7 +39,7 @@ class MfaConfigurationTest extends TestCase
         $this->assertTrue($svg === $revisitSvg);
         $secret = decrypt(session()->get('mfa-setup-totp-secret'));
 
-        $resp->assertSee(htmlentities("?secret={$secret}&issuer=BookStack&algorithm=SHA1&digits=6&period=30"));
+        $resp->assertSee("?secret={$secret}&issuer=BookStack&algorithm=SHA1&digits=6&period=30");
 
         // Successful confirmation
         $google2fa = new Google2FA();
@@ -180,7 +180,7 @@ class MfaConfigurationTest extends TestCase
 
         $resp = $this->get('/mfa/totp/generate');
         $resp->assertSeeText('Mobile App Setup');
-        $resp->assertDontSee('otpauth://totp/BookStack:guest%40example.com');
-        $resp->assertSee('otpauth://totp/BookStack:admin%40admin.com');
+        $resp->assertDontSee('otpauth://totp/BookStack:guest%40example.com', false);
+        $resp->assertSee('otpauth://totp/BookStack:admin%40admin.com', false);
     }
 }
index 6c806aa8ed4e99901aa84bf1060baba20e8eda6a..e7665a679a44a892bbe743863aa01579c3e780c0 100644 (file)
@@ -16,7 +16,7 @@ class OidcTest extends TestCase
     protected $keyFilePath;
     protected $keyFile;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         // Set default config for OpenID Connect
@@ -41,7 +41,7 @@ class OidcTest extends TestCase
         ]);
     }
 
-    public function tearDown(): void
+    protected function tearDown(): void
     {
         parent::tearDown();
         if (file_exists($this->keyFilePath)) {
index 7fb8d6ddbe4cd40fa8f82ca76ff41149f60ae46a..aac2710a889a4aa891d7df8fc9312f1d32087885 100644 (file)
@@ -8,7 +8,7 @@ use Tests\TestCase;
 
 class Saml2Test extends TestCase
 {
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         // Set default config for SAML2
@@ -49,7 +49,7 @@ class Saml2Test extends TestCase
         $req = $this->get('/saml2/metadata');
         $req->assertSee('https://example.com/super-cats');
         $req->assertSee('md:ContactPerson');
-        $req->assertSee('<md:GivenName>Barry Scott</md:GivenName>');
+        $req->assertSee('<md:GivenName>Barry Scott</md:GivenName>', false);
     }
 
     public function test_login_option_shows_on_login_page()
@@ -119,7 +119,7 @@ class Saml2Test extends TestCase
             'saml2.remove_from_groups' => false,
         ]);
 
-        $memberRole = factory(Role::class)->create(['external_auth_id' => 'member']);
+        $memberRole = Role::factory()->create(['external_auth_id' => 'member']);
         $adminRole = Role::getSystemRole('admin');
 
         $this->followingRedirects()->post('/saml2/acs', ['SAMLResponse' => $this->acsPostData]);
@@ -141,7 +141,7 @@ class Saml2Test extends TestCase
         $acsPost = $this->followingRedirects()->post('/saml2/acs', ['SAMLResponse' => $this->acsPostData]);
         $user = User::query()->where('external_auth_id', '=', 'user')->first();
 
-        $randomRole = factory(Role::class)->create(['external_auth_id' => 'random']);
+        $randomRole = Role::factory()->create(['external_auth_id' => 'random']);
         $user->attachRole($randomRole);
         $this->assertContains($randomRole->id, $user->roles()->pluck('id'));
 
@@ -295,7 +295,7 @@ class Saml2Test extends TestCase
             'saml2.remove_from_groups' => false,
         ]);
 
-        $memberRole = factory(Role::class)->create(['external_auth_id' => 'member']);
+        $memberRole = Role::factory()->create(['external_auth_id' => 'member']);
         $adminRole = Role::getSystemRole('admin');
 
         $acsPost = $this->followingRedirects()->post('/saml2/acs', ['SAMLResponse' => $this->acsPostData]);
index f70263dd278ae1a8bf93efe26c896bda300d97e3..90d7e37aa5e85065588346e22e91fd319d5ccf80 100644 (file)
@@ -15,7 +15,7 @@ class SocialAuthTest extends TestCase
 {
     public function test_social_registration()
     {
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
 
         $this->setSettings(['registration-enabled' => 'true']);
         config(['GOOGLE_APP_ID' => 'abc123', 'GOOGLE_APP_SECRET' => '123abc', 'APP_URL' => 'http://localhost']);
@@ -118,7 +118,7 @@ class SocialAuthTest extends TestCase
             'APP_URL'                   => 'http://localhost',
         ]);
 
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
         $mockSocialite = $this->mock(Factory::class);
         $mockSocialDriver = Mockery::mock(Provider::class);
         $mockSocialUser = Mockery::mock(\Laravel\Socialite\Contracts\User::class);
@@ -156,7 +156,7 @@ class SocialAuthTest extends TestCase
             'APP_URL'                   => 'http://localhost', 'services.google.auto_register' => true, 'services.google.auto_confirm' => true,
         ]);
 
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
         $mockSocialite = $this->mock(Factory::class);
         $mockSocialDriver = Mockery::mock(Provider::class);
         $mockSocialUser = Mockery::mock(\Laravel\Socialite\Contracts\User::class);
@@ -188,7 +188,7 @@ class SocialAuthTest extends TestCase
 
     public function test_social_registration_with_no_name_uses_email_as_name()
     {
-        $user = factory(User::class)->make(['email' => '[email protected]']);
+        $user = User::factory()->make(['email' => '[email protected]']);
 
         $this->setSettings(['registration-enabled' => 'true']);
         config(['GITHUB_APP_ID' => 'abc123', 'GITHUB_APP_SECRET' => '123abc', 'APP_URL' => 'http://localhost']);
index 1780ddee819504ebbd94bae50163653934a0198e..fcbc17ea94ba40ce4c0c89f811234cc829786bd3 100644 (file)
@@ -37,7 +37,7 @@ class BookShelfTest extends TestCase
 
     public function test_shelves_shows_in_header_if_have_any_shelve_view_permission()
     {
-        $user = factory(User::class)->create();
+        $user = User::factory()->create();
         $this->giveUserPermissions($user, ['image-create-all']);
         $shelf = Bookshelf::first();
         $userRole = $user->roles()->first();
@@ -290,7 +290,7 @@ class BookShelfTest extends TestCase
         $shelf = Bookshelf::first();
         $resp = $this->asAdmin()->get($shelf->getUrl('/permissions'));
         $resp->assertSeeText('Copy Permissions');
-        $resp->assertSee("action=\"{$shelf->getUrl('/copy-permissions')}\"");
+        $resp->assertSee("action=\"{$shelf->getUrl('/copy-permissions')}\"", false);
 
         $child = $shelf->books()->first();
         $editorRole = $this->getEditor()->roles()->first();
index fa63c0bf98c1ef3bbf8865294685b05e45ca3d24..2894fbb98f86476947c967bc899cb7caa54dd01a 100644 (file)
@@ -9,7 +9,7 @@ class BookTest extends TestCase
 {
     public function test_create()
     {
-        $book = factory(Book::class)->make([
+        $book = Book::factory()->make([
             'name' => 'My First Book',
         ]);
 
@@ -29,7 +29,7 @@ class BookTest extends TestCase
 
     public function test_create_uses_different_slugs_when_name_reused()
     {
-        $book = factory(Book::class)->make([
+        $book = Book::factory()->make([
             'name' => 'My First Book',
         ]);
 
@@ -187,7 +187,7 @@ class BookTest extends TestCase
             'name' => 'информация',
         ]);
 
-        $this->assertEquals('informatsiya', $book->slug);
+        $this->assertEquals('informaciya', $book->slug);
 
         $book = $this->newBook([
             'name' => '¿Qué?',
index ea29ece5d2c51db2633e13f2236e9e3e8af043c9..9868dc030581faa9553bca0c841db3a6f49ee286 100644 (file)
@@ -13,7 +13,7 @@ class ChapterTest extends TestCase
         /** @var Book $book */
         $book = Book::query()->first();
 
-        $chapter = factory(Chapter::class)->make([
+        $chapter = Chapter::factory()->make([
             'name' => 'My First Chapter',
         ]);
 
index d8caa73585aebcd54dd085b87428878a3cd71d80..23607f5a70f423b182946a06db0d2f3b4fee3778 100644 (file)
@@ -9,7 +9,7 @@ class CommentSettingTest extends TestCase
 {
     protected $page;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->page = Page::query()->first();
index 3bf51556e3cea5f87ee94b1d05c0560fc7abe69c..1e8ecbcac2cad0a1bda62c38303e2575df3ae775 100644 (file)
@@ -13,7 +13,7 @@ class CommentTest extends TestCase
         $this->asAdmin();
         $page = Page::first();
 
-        $comment = factory(Comment::class)->make(['parent_id' => 2]);
+        $comment = Comment::factory()->make(['parent_id' => 2]);
         $resp = $this->postJson("/comment/$page->id", $comment->getAttributes());
 
         $resp->assertStatus(200);
@@ -36,7 +36,7 @@ class CommentTest extends TestCase
         $this->asAdmin();
         $page = Page::first();
 
-        $comment = factory(Comment::class)->make();
+        $comment = Comment::factory()->make();
         $this->postJson("/comment/$page->id", $comment->getAttributes());
 
         $comment = $page->comments()->first();
@@ -60,7 +60,7 @@ class CommentTest extends TestCase
         $this->asAdmin();
         $page = Page::first();
 
-        $comment = factory(Comment::class)->make();
+        $comment = Comment::factory()->make();
         $this->postJson("/comment/$page->id", $comment->getAttributes());
 
         $comment = $page->comments()->first();
@@ -88,7 +88,7 @@ class CommentTest extends TestCase
         ]);
 
         $pageView = $this->get($page->getUrl());
-        $pageView->assertSee('<h1>My Title</h1>');
+        $pageView->assertSee('<h1>My Title</h1>', false);
     }
 
     public function test_html_cannot_be_injected_via_comment_content()
@@ -102,7 +102,7 @@ class CommentTest extends TestCase
         ]);
 
         $pageView = $this->get($page->getUrl());
-        $pageView->assertDontSee($script);
+        $pageView->assertDontSee($script, false);
         $pageView->assertSee('sometextinthecomment');
 
         $comment = $page->comments()->first();
@@ -111,7 +111,7 @@ class CommentTest extends TestCase
         ]);
 
         $pageView = $this->get($page->getUrl());
-        $pageView->assertDontSee($script);
+        $pageView->assertDontSee($script, false);
         $pageView->assertSee('sometextinthecommentupdated');
     }
 }
index c8397b6956c27da7bba766bdeaae888e53edf688..9ea336db8ff191592515e8ff94b9a7bf16962b0c 100644 (file)
@@ -139,7 +139,7 @@ class ExportTest extends TestCase
         $this->setSettings(['app-custom-head' => $customHeadContent]);
 
         $resp = $this->asEditor()->get($page->getUrl('/export/html'));
-        $resp->assertSee($customHeadContent);
+        $resp->assertSee($customHeadContent, false);
     }
 
     public function test_page_html_export_does_not_break_with_only_comments_in_custom_head()
@@ -151,7 +151,7 @@ class ExportTest extends TestCase
 
         $resp = $this->asEditor()->get($page->getUrl('/export/html'));
         $resp->assertStatus(200);
-        $resp->assertSee($customHeadContent);
+        $resp->assertSee($customHeadContent, false);
     }
 
     public function test_page_html_export_use_absolute_dates()
@@ -188,7 +188,7 @@ class ExportTest extends TestCase
         Storage::disk('local')->delete('uploads/images/gallery/svg_test.svg');
 
         $resp->assertStatus(200);
-        $resp->assertSee('<img src="data:image/svg+xml;base64');
+        $resp->assertSee('<img src="data:image/svg+xml;base64', false);
     }
 
     public function test_page_image_containment_works_on_multiple_images_within_a_single_line()
@@ -224,9 +224,9 @@ class ExportTest extends TestCase
         $storageDisk->delete('uploads/images/gallery/svg_test.svg');
         $storageDisk->delete('uploads/svg_test.svg');
 
-        $resp->assertDontSee('http://localhost/uploads/images/gallery/svg_test.svg');
+        $resp->assertDontSee('http://localhost/uploads/images/gallery/svg_test.svg', false);
         $resp->assertSee('http://localhost/uploads/svg_test.svg');
-        $resp->assertSee('src="/uploads/svg_test.svg"');
+        $resp->assertSee('src="/uploads/svg_test.svg"', false);
     }
 
     public function test_page_export_contained_html_does_not_allow_upward_traversal_with_local()
@@ -333,7 +333,7 @@ class ExportTest extends TestCase
         $page->save();
 
         $resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
-        $resp->assertSee("# Dogcat\n\n<p class=\"callout info\">Some callout text</p>\n\nAnother line");
+        $resp->assertSee("# Dogcat\n\n<p class=\"callout info\">Some callout text</p>\n\nAnother line", false);
     }
 
     public function test_page_markdown_export_handles_bookstacks_wysiwyg_codeblock_format()
@@ -345,7 +345,7 @@ class ExportTest extends TestCase
         $page->save();
 
         $resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
-        $resp->assertSee("# Dogcat\n\n```JavaScript\nvar a = 'cat';\n```\n\nAnother line");
+        $resp->assertSee("# Dogcat\n\n```JavaScript\nvar a = 'cat';\n```\n\nAnother line", false);
     }
 
     public function test_chapter_markdown_export()
index d3a00ebde2b82fad697a3911d63e3a8989c58c5b..0b99c63c3971ab92f393e90123c04053bba922a4 100644 (file)
@@ -74,7 +74,7 @@ class PageContentTest extends TestCase
 
         $this->asEditor();
         $pageResp = $this->get($page->getUrl());
-        $pageResp->assertSee($content);
+        $pageResp->assertSee($content, false);
     }
 
     public function test_page_includes_rendered_on_book_export()
@@ -106,7 +106,7 @@ class PageContentTest extends TestCase
 
         $pageView = $this->get($page->getUrl());
         $pageView->assertStatus(200);
-        $pageView->assertDontSee($script);
+        $pageView->assertDontSee($script, false);
         $pageView->assertSee('abc123abc123');
     }
 
@@ -260,8 +260,8 @@ class PageContentTest extends TestCase
 
         $pageView = $this->get($page->getUrl());
         $pageView->assertStatus(200);
-        $pageView->assertDontSee($script);
-        $pageView->assertSee('<p>Hello</p>');
+        $pageView->assertDontSee($script, false);
+        $pageView->assertSee('<p>Hello</p>', false);
     }
 
     public function test_more_complex_inline_on_attributes_escaping_scenarios()
@@ -301,7 +301,7 @@ class PageContentTest extends TestCase
         $page->save();
 
         $pageView = $this->get($page->getUrl());
-        $pageView->assertSee($script);
+        $pageView->assertSee($script, false);
         $pageView->assertDontSee('abc123abc123');
     }
 
@@ -338,8 +338,8 @@ class PageContentTest extends TestCase
         $page->save();
 
         $pageView = $this->get($page->getUrl());
-        $pageView->assertSee($script);
-        $pageView->assertDontSee('<p>Hello</p>');
+        $pageView->assertSee($script, false);
+        $pageView->assertDontSee('<p>Hello</p>', false);
     }
 
     public function test_duplicate_ids_does_not_break_page_render()
@@ -545,7 +545,7 @@ class PageContentTest extends TestCase
 
         $pageView = $this->get($page->getUrl());
         $pageView->assertStatus(200);
-        $pageView->assertSee($content);
+        $pageView->assertSee($content, false);
     }
 
     public function test_base64_images_get_extracted_from_page_content()
index 4fb7d7ab6e5226d01910ef57ac4cda633057a00d..9e2ceff51a1e5cf0a0175cced31a2ac1c29b096b 100644 (file)
@@ -20,7 +20,7 @@ class PageDraftTest extends TestCase
      */
     protected $pageRepo;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->page = Page::query()->first();
index 9b0a8f188106d7d46d15d91ba535165cf6395ac8..652bc1336e5c98bccc20e156014f96d03ff93117 100644 (file)
@@ -11,7 +11,7 @@ class PageEditorTest extends TestCase
     /** @var Page */
     protected $page;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->page = Page::query()->first();
index 313fc77f060f51e7ddb0c15bf9eba8070a18a1ed..32459a84a691e2c2191ede504d5c65683df1d62f 100644 (file)
@@ -14,7 +14,7 @@ class PageTest extends TestCase
     {
         /** @var Chapter $chapter */
         $chapter = Chapter::query()->first();
-        $page = factory(Page::class)->make([
+        $page = Page::factory()->make([
             'name' => 'My First Page',
         ]);
 
index 5cfc5c3c5b935f9f2396fc38b4bf0521bfed1b6f..89279bfcf9059b6daef98b853bce0412bdd8a817 100644 (file)
@@ -12,7 +12,7 @@ class SortTest extends TestCase
 {
     protected $book;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->book = Book::first();
index 74da37f4a867cbea8f6ced182a33f06ad4f12a0b..9b3fb1532a05e322bbdb046b3bcbc53a80299ce5 100644 (file)
@@ -19,7 +19,7 @@ class TagTest extends TestCase
         $entity = $class::first();
 
         if (is_null($tags)) {
-            $tags = factory(Tag::class, $this->defaultTagCount)->make();
+            $tags = Tag::factory()->count($this->defaultTagCount)->make();
         }
 
         $entity->tags()->saveMany($tags);
@@ -31,63 +31,63 @@ class TagTest extends TestCase
     {
         // Create some tags with similar names to test with
         $attrs = collect();
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'country']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'color']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'city']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'county']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'planet']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'plans']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'country']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'color']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'city']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'county']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'planet']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'plans']));
         $page = $this->getEntityWithTags(Page::class, $attrs->all());
 
-        $this->asAdmin()->get('/ajax/tags/suggest/names?search=dog')->assertExactJson([]);
-        $this->get('/ajax/tags/suggest/names?search=co')->assertExactJson(['color', 'country', 'county']);
-        $this->get('/ajax/tags/suggest/names?search=cou')->assertExactJson(['country', 'county']);
-        $this->get('/ajax/tags/suggest/names?search=pla')->assertExactJson(['planet', 'plans']);
+        $this->asAdmin()->get('/ajax/tags/suggest/names?search=dog')->assertSimilarJson([]);
+        $this->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country', 'county']);
+        $this->get('/ajax/tags/suggest/names?search=cou')->assertSimilarJson(['country', 'county']);
+        $this->get('/ajax/tags/suggest/names?search=pla')->assertSimilarJson(['planet', 'plans']);
     }
 
     public function test_tag_value_suggestions()
     {
         // Create some tags with similar values to test with
         $attrs = collect();
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'country', 'value' => 'cats']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'color', 'value' => 'cattery']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'city', 'value' => 'castle']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'county', 'value' => 'dog']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'planet', 'value' => 'catapult']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'plans', 'value' => 'dodgy']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'country', 'value' => 'cats']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'color', 'value' => 'cattery']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'city', 'value' => 'castle']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'county', 'value' => 'dog']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'planet', 'value' => 'catapult']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'plans', 'value' => 'dodgy']));
         $page = $this->getEntityWithTags(Page::class, $attrs->all());
 
-        $this->asAdmin()->get('/ajax/tags/suggest/values?search=ora')->assertExactJson([]);
-        $this->get('/ajax/tags/suggest/values?search=cat')->assertExactJson(['cats', 'cattery', 'catapult']);
-        $this->get('/ajax/tags/suggest/values?search=do')->assertExactJson(['dog', 'dodgy']);
-        $this->get('/ajax/tags/suggest/values?search=cas')->assertExactJson(['castle']);
+        $this->asAdmin()->get('/ajax/tags/suggest/values?search=ora')->assertSimilarJson([]);
+        $this->get('/ajax/tags/suggest/values?search=cat')->assertSimilarJson(['cats', 'cattery', 'catapult']);
+        $this->get('/ajax/tags/suggest/values?search=do')->assertSimilarJson(['dog', 'dodgy']);
+        $this->get('/ajax/tags/suggest/values?search=cas')->assertSimilarJson(['castle']);
     }
 
     public function test_entity_permissions_effect_tag_suggestions()
     {
         // Create some tags with similar names to test with and save to a page
         $attrs = collect();
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'country']));
-        $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'color']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'country']));
+        $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'color']));
         $page = $this->getEntityWithTags(Page::class, $attrs->all());
 
-        $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->assertExactJson(['color', 'country']);
-        $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->assertExactJson(['color', 'country']);
+        $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country']);
+        $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country']);
 
         // Set restricted permission the page
         $page->restricted = true;
         $page->save();
         $page->rebuildPermissions();
 
-        $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->assertExactJson(['color', 'country']);
-        $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->assertExactJson([]);
+        $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country']);
+        $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson([]);
     }
 
     public function test_tags_shown_on_search_listing()
     {
         $tags = [
-            factory(Tag::class)->make(['name' => 'category', 'value' => 'buckets']),
-            factory(Tag::class)->make(['name' => 'color', 'value' => 'red']),
+            Tag::factory()->make(['name' => 'category', 'value' => 'buckets']),
+            Tag::factory()->make(['name' => 'color', 'value' => 'red']),
         ];
 
         $page = $this->getEntityWithTags(Page::class, $tags);
index e27b787745ff3db74ed5db183fb2fe7b9afbd30b..dc1b2277959fef2437218e9372c34c3c437b5706 100644 (file)
@@ -167,7 +167,7 @@ class HomepageTest extends TestCase
 
     public function test_new_users_dont_have_any_recently_viewed()
     {
-        $user = factory(User::class)->create();
+        $user = User::factory()->create();
         $viewRole = Role::getRole('Viewer');
         $user->attachRole($viewRole);
 
index a9070248e5f86ab4fc333d0110e72d6a42ecf2a4..ef44af0eebd05b2a0998ded181454932e9cf61f6 100644 (file)
@@ -9,7 +9,7 @@ class LanguageTest extends TestCase
     /**
      * LanguageTest constructor.
      */
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->langs = array_diff(scandir(resource_path('lang')), ['..', '.']);
index bb011cfc6f5df2d0d59d837be2437859b6635f43..96d4792b9c67c30d621d888d7218c44c6ea443de 100644 (file)
@@ -23,7 +23,7 @@ class EntityPermissionsTest extends TestCase
      */
     protected $viewer;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->user = $this->getEditor();
index 5248ae1528ffbb509d62c0a2691b9f88aca06c85..c880bdd008938e9ea5ae4660ccf762b9e0add4c8 100644 (file)
@@ -19,7 +19,7 @@ class RolesTest extends TestCase
 {
     protected $user;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->user = $this->getViewer();
@@ -173,11 +173,11 @@ class RolesTest extends TestCase
     public function test_manage_users_permission_shows_link_in_header_if_does_not_have_settings_manage_permision()
     {
         $usersLink = 'href="' . url('/settings/users') . '"';
-        $this->actingAs($this->user)->get('/')->assertDontSee($usersLink);
+        $this->actingAs($this->user)->get('/')->assertDontSee($usersLink, false);
         $this->giveUserPermissions($this->user, ['users-manage']);
-        $this->actingAs($this->user)->get('/')->assertSee($usersLink);
+        $this->actingAs($this->user)->get('/')->assertSee($usersLink, false);
         $this->giveUserPermissions($this->user, ['settings-manage', 'users-manage']);
-        $this->actingAs($this->user)->get('/')->assertDontSee($usersLink);
+        $this->actingAs($this->user)->get('/')->assertDontSee($usersLink, false);
     }
 
     public function test_user_cannot_change_email_unless_they_have_manage_users_permission()
@@ -769,7 +769,7 @@ class RolesTest extends TestCase
         $this->giveUserPermissions($this->user, ['image-update-all']);
         /** @var Page $page */
         $page = Page::query()->first();
-        $image = factory(Image::class)->create([
+        $image = Image::factory()->create([
             'uploaded_to' => $page->id,
             'created_by'  => $this->user->id,
             'updated_by'  => $this->user->id,
@@ -789,7 +789,7 @@ class RolesTest extends TestCase
         $admin = $this->getAdmin();
         /** @var Page $page */
         $page = Page::query()->first();
-        $image = factory(Image::class)->create(['uploaded_to' => $page->id, 'created_by' => $admin->id, 'updated_by' => $admin->id]);
+        $image = Image::factory()->create(['uploaded_to' => $page->id, 'created_by' => $admin->id, 'updated_by' => $admin->id]);
 
         $this->actingAs($this->user)->json('delete', '/images/' . $image->id)->assertStatus(403);
 
@@ -825,14 +825,14 @@ class RolesTest extends TestCase
     {
         $admin = $this->getAdmin();
         // Book links
-        $book = factory(Book::class)->create(['created_by' => $admin->id, 'updated_by' => $admin->id]);
+        $book = Book::factory()->create(['created_by' => $admin->id, 'updated_by' => $admin->id]);
         $this->regenEntityPermissions($book);
         $this->actingAs($this->getViewer())->get($book->getUrl())
             ->assertDontSee('Create a new page')
             ->assertDontSee('Add a chapter');
 
         // Chapter links
-        $chapter = factory(Chapter::class)->create(['created_by' => $admin->id, 'updated_by' => $admin->id, 'book_id' => $book->id]);
+        $chapter = Chapter::factory()->create(['created_by' => $admin->id, 'updated_by' => $admin->id, 'book_id' => $book->id]);
         $this->regenEntityPermissions($chapter);
         $this->actingAs($this->getViewer())->get($chapter->getUrl())
             ->assertDontSee('Create a new page')
@@ -926,14 +926,14 @@ class RolesTest extends TestCase
 
     private function addComment(Page $page): TestResponse
     {
-        $comment = factory(Comment::class)->make();
+        $comment = Comment::factory()->make();
 
         return $this->postJson("/comment/$page->id", $comment->only('text', 'html'));
     }
 
     private function updateComment(Comment $comment): TestResponse
     {
-        $commentData = factory(Comment::class)->make();
+        $commentData = Comment::factory()->make();
 
         return $this->putJson("/comment/{$comment->id}", $commentData->only('text', 'html'));
     }
index 10551fc55a8d6dd90d7bf0f66ad430a8e9aee50c..78691badbbc5eb3e2b26ee140024636f98726450 100644 (file)
@@ -76,7 +76,7 @@ class SecurityHeaderTest extends TestCase
 
         $nonce = app()->make(CspService::class)->getNonce();
         $this->assertStringContainsString('nonce-' . $nonce, $scriptHeader);
-        $resp->assertSee('<script nonce="' . $nonce . '">console.log("cat");</script>');
+        $resp->assertSee('<script nonce="' . $nonce . '">console.log("cat");</script>', false);
     }
 
     public function test_script_csp_nonce_changes_per_request()
index 94ef4711d5d640054ee0470516d3fccb3ad5eeaa..36c8a4c0fcc68f283cfcbf08fd8bb33bff6df582 100644 (file)
@@ -11,21 +11,21 @@ class CustomHeadContentTest extends TestCase
     {
         $this->setSettings(['app-custom-head' => '<script>console.log("cat");</script>']);
         $resp = $this->get('/login');
-        $resp->assertSee('console.log("cat")');
+        $resp->assertSee('console.log("cat")', false);
     }
 
     public function test_configured_content_does_not_show_on_settings_page()
     {
         $this->setSettings(['app-custom-head' => '<script>console.log("cat");</script>']);
         $resp = $this->asAdmin()->get('/settings');
-        $resp->assertDontSee('console.log("cat")');
+        $resp->assertDontSee('console.log("cat")', false);
     }
 
     public function test_divs_in_js_preserved_in_configured_content()
     {
         $this->setSettings(['app-custom-head' => '<script><div id="hello">cat</div></script>']);
         $resp = $this->get('/login');
-        $resp->assertSee('<div id="hello">cat</div>');
+        $resp->assertSee('<div id="hello">cat</div>', false);
     }
 
     public function test_nonce_application_handles_edge_cases()
@@ -61,6 +61,6 @@ const b = `<script`;
 
         $this->setSettings(['app-custom-head' => $content]);
         $resp = $this->get('/login');
-        $resp->assertSee($expectedOutput);
+        $resp->assertSee($expectedOutput, false);
     }
 }
index 55c3e107d5ff4b071e98cf2cd50f7475a148d018..f1b5d4294171b9df2392ed72aeda2ea983e1699b 100644 (file)
@@ -31,10 +31,10 @@ class FooterLinksTest extends TestCase
         ]]);
 
         $resp = $this->asAdmin()->get('/settings');
-        $resp->assertSee('value="My custom link"');
-        $resp->assertSee('value="Another Link"');
-        $resp->assertSee('value="https://example.com/link-a"');
-        $resp->assertSee('value="https://example.com/link-b"');
+        $resp->assertSee('value="My custom link"', false);
+        $resp->assertSee('value="Another Link"', false);
+        $resp->assertSee('value="https://example.com/link-a"', false);
+        $resp->assertSee('value="https://example.com/link-b"', false);
     }
 
     public function test_footer_links_show_on_pages()
index 04952d22345caa18761466b026ce3b701395599c..cbf49bf71f424f747e97bc04b3e3ff55fa6bb50b 100644 (file)
@@ -22,10 +22,10 @@ use GuzzleHttp\Client;
 use GuzzleHttp\Handler\MockHandler;
 use GuzzleHttp\HandlerStack;
 use GuzzleHttp\Middleware;
-use Illuminate\Foundation\Testing\Assert as PHPUnit;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Support\Env;
 use Illuminate\Support\Facades\Log;
+use Illuminate\Testing\Assert as PHPUnit;
 use Mockery;
 use Monolog\Handler\TestHandler;
 use Monolog\Logger;
@@ -127,7 +127,7 @@ trait SharedTestHelpers
     /**
      * Create and return a new test chapter.
      */
-    public function newChapter(array $input = ['name' => 'test chapter', 'description' => 'My new test chapter'], Book $book): Chapter
+    public function newChapter(array $input, Book $book): Chapter
     {
         return app(ChapterRepo::class)->create($input, $book);
     }
@@ -210,7 +210,7 @@ trait SharedTestHelpers
     protected function createNewRole(array $permissions = []): Role
     {
         $permissionRepo = app(PermissionsRepo::class);
-        $roleData = factory(Role::class)->make()->toArray();
+        $roleData = Role::factory()->make()->toArray();
         $roleData['permissions'] = array_flip($permissions);
 
         return $permissionRepo->saveNewRole($roleData);
@@ -228,9 +228,9 @@ trait SharedTestHelpers
         }
 
         $userAttrs = ['created_by' => $creatorUser->id, 'owned_by' => $creatorUser->id, 'updated_by' => $updaterUser->id];
-        $book = factory(Book::class)->create($userAttrs);
-        $chapter = factory(Chapter::class)->create(array_merge(['book_id' => $book->id], $userAttrs));
-        $page = factory(Page::class)->create(array_merge(['book_id' => $book->id, 'chapter_id' => $chapter->id], $userAttrs));
+        $book = Book::factory()->create($userAttrs);
+        $chapter = Chapter::factory()->create(array_merge(['book_id' => $book->id], $userAttrs));
+        $page = Page::factory()->create(array_merge(['book_id' => $book->id, 'chapter_id' => $chapter->id], $userAttrs));
         $restrictionService = $this->app[PermissionService::class];
         $restrictionService->buildJointPermissionsForEntity($book);
 
index 79f173c9b1bee136dee5552093c418eb26cb5488..5e2be3ac35c103caa3b897dc4fec0fc5d7322984 100644 (file)
@@ -2,7 +2,7 @@
 
 namespace Tests;
 
-use Illuminate\Foundation\Testing\TestResponse as BaseTestResponse;
+use Illuminate\Testing\TestResponse as BaseTestResponse;
 use PHPUnit\Framework\Assert as PHPUnit;
 use Symfony\Component\DomCrawler\Crawler;
 
index 2cab765ae4345c6958d2a2e54988dffb8cccab4b..9aa7873b07c93af103206bd7f8608cfdf3622c22 100644 (file)
@@ -150,7 +150,7 @@ class ThemeTest extends TestCase
         Theme::listen(ThemeEvents::AUTH_REGISTER, $callback);
         $this->setSettings(['registration-enabled' => 'true']);
 
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
         $this->post('/register', ['email' => $user->email, 'name' => $user->name, 'password' => 'password']);
 
         $this->assertCount(2, $args);
index abd7ca616d6a56f37b226764aedf166537f6e117..5545edf13255d1bf1df24e8c7e4e370b0f21f545 100644 (file)
@@ -17,13 +17,13 @@ class AttachmentTest extends TestCase
      */
     protected function getTestFile(string $fileName): UploadedFile
     {
-        return new UploadedFile(base_path('tests/test-data/test-file.txt'), $fileName, 'text/plain', 55, null, true);
+        return new UploadedFile(base_path('tests/test-data/test-file.txt'), $fileName, 'text/plain', null, true);
     }
 
     /**
      * Uploads a file with the given name.
      */
-    protected function uploadFile(string $name, int $uploadedTo = 0): \Illuminate\Foundation\Testing\TestResponse
+    protected function uploadFile(string $name, int $uploadedTo = 0): \Illuminate\Testing\TestResponse
     {
         $file = $this->getTestFile($name);
 
index cf568d07cf6c909b7c46597b5a22d91bb25f94e2..d10b5cfc6cb79f50556df9892a94edc97c5c0d82 100644 (file)
@@ -42,7 +42,7 @@ class AvatarTest extends TestCase
         config()->set([
             'services.disable_services' => false,
         ]);
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
         $this->assertImageFetchFrom('https://www.gravatar.com/avatar/' . md5(strtolower($user->email)) . '?s=500&d=identicon');
 
         $user = $this->createUserRequest($user);
@@ -60,7 +60,7 @@ class AvatarTest extends TestCase
             'services.avatar_url'       => 'https://example.com/${email}/${hash}/${size}',
         ]);
 
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
         $url = 'https://example.com/' . urlencode(strtolower($user->email)) . '/' . md5(strtolower($user->email)) . '/500';
         $this->assertImageFetchFrom($url);
 
@@ -74,7 +74,7 @@ class AvatarTest extends TestCase
             'services.disable_services' => true,
         ]);
 
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
 
         $http = $this->mock(HttpFetcher::class);
         $http->shouldNotReceive('fetch');
@@ -93,7 +93,7 @@ class AvatarTest extends TestCase
 
         $logger = $this->withTestLogger();
 
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
         $this->createUserRequest($user);
         $this->assertTrue($logger->hasError('Failed to save user avatar image'));
     }
index 422de472ae00d610dfb4d67e28b47cb157e59ac7..1fc3d1049282f2552f4a74bcf3efdd9f1fa54d98 100644 (file)
@@ -61,7 +61,7 @@ class DrawioTest extends TestCase
         $editor = $this->getEditor();
 
         $resp = $this->actingAs($editor)->get($page->getUrl('/edit'));
-        $resp->assertSee('drawio-url="http://cats.com?dog=tree"');
+        $resp->assertSee('drawio-url="http://cats.com?dog=tree"', false);
     }
 
     public function test_drawio_url_can_be_disabled()
@@ -71,10 +71,10 @@ class DrawioTest extends TestCase
         $editor = $this->getEditor();
 
         $resp = $this->actingAs($editor)->get($page->getUrl('/edit'));
-        $resp->assertSee('drawio-url="https://embed.diagrams.net/?embed=1&amp;proto=json&amp;spin=1"');
+        $resp->assertSee('drawio-url="https://embed.diagrams.net/?embed=1&amp;proto=json&amp;spin=1"', false);
 
         config()->set('services.drawio', false);
         $resp = $this->actingAs($editor)->get($page->getUrl('/edit'));
-        $resp->assertDontSee('drawio-url');
+        $resp->assertDontSee('drawio-url', false);
     }
 }
index ed2fb5f04808c5ebddfce6cc8165c0b09a8ded5e..5a36b85df6f9d4f1fde0b8eb932eaf9afa0a7cf6 100644 (file)
@@ -15,7 +15,7 @@ class UserManagementTest extends TestCase
     public function test_user_creation()
     {
         /** @var User $user */
-        $user = factory(User::class)->make();
+        $user = User::factory()->make();
         $adminRole = Role::getRole('admin');
 
         $resp = $this->asAdmin()->get('/settings/users');
index 3942efa8e3d095a1d1084594d4c0d9959e91fde9..c3888f8c511768fcd2a89956218c23ba5fb2d5df 100644 (file)
@@ -14,7 +14,7 @@ class UserProfileTest extends TestCase
      */
     protected $user;
 
-    public function setUp(): void
+    protected function setUp(): void
     {
         parent::setUp();
         $this->user = User::all()->last();
@@ -42,7 +42,7 @@ class UserProfileTest extends TestCase
 
     public function test_profile_page_shows_created_content_counts()
     {
-        $newUser = factory(User::class)->create();
+        $newUser = User::factory()->create();
 
         $this->asAdmin()->get('/user/' . $newUser->slug)
             ->assertSee($newUser->name)
@@ -61,7 +61,7 @@ class UserProfileTest extends TestCase
 
     public function test_profile_page_shows_recent_activity()
     {
-        $newUser = factory(User::class)->create();
+        $newUser = User::factory()->create();
         $this->actingAs($newUser);
         $entities = $this->createEntityChainBelongingToUser($newUser, $newUser);
         Activity::addForEntity($entities['book'], ActivityType::BOOK_UPDATE);
@@ -75,7 +75,7 @@ class UserProfileTest extends TestCase
 
     public function test_user_activity_has_link_leading_to_profile()
     {
-        $newUser = factory(User::class)->create();
+        $newUser = User::factory()->create();
         $this->actingAs($newUser);
         $entities = $this->createEntityChainBelongingToUser($newUser, $newUser);
         Activity::addForEntity($entities['book'], ActivityType::BOOK_UPDATE);