]> _ Git - fluidbook-elearning.git/commitdiff
wip #6693
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Jan 2024 17:20:30 +0000 (18:20 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Jan 2024 17:20:30 +0000 (18:20 +0100)
74 files changed:
.docker/production/docker-compose.yml
.env.production
.idea/deployment.xml
app/Http/Middleware/CheckIfAdmin.php [new file with mode: 0644]
app/Providers/AppServiceProvider.php
composer.json
composer.lock
config/backpack/backupmanager.php [new file with mode: 0644]
config/backpack/base.php [new file with mode: 0644]
config/backpack/crud.php [new file with mode: 0644]
config/backpack/operations/create.php [new file with mode: 0644]
config/backpack/operations/form.php [new file with mode: 0644]
config/backpack/operations/list.php [new file with mode: 0644]
config/backpack/operations/reorder.php [new file with mode: 0644]
config/backpack/operations/show.php [new file with mode: 0644]
config/backpack/operations/update.php [new file with mode: 0644]
config/backpack/permissionmanager.php [new file with mode: 0644]
config/backpack/theme-tabler.php [new file with mode: 0644]
config/backpack/ui.php [new file with mode: 0644]
config/gravatar.php [new file with mode: 0644]
config/media-library.php [new file with mode: 0644]
config/permission.php [new file with mode: 0644]
config/revisionable.php [new file with mode: 0644]
database/migrations/2013_04_09_062329_create_revisions_table.php [new file with mode: 0644]
database/migrations/2020_03_31_114745_remove_backpackuser_model.php [new file with mode: 0644]
database/migrations/2024_01_30_153251_create_media_table.php [new file with mode: 0644]
database/migrations/2024_01_30_153323_create_permission_tables.php [new file with mode: 0644]
lang/vendor/backpack/ar/backup.php [new file with mode: 0644]
lang/vendor/backpack/ar/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/da_DK/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/de/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/el/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/en/backup.php [new file with mode: 0644]
lang/vendor/backpack/en/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/es/backup.php [new file with mode: 0644]
lang/vendor/backpack/es/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/fa/backup.php [new file with mode: 0644]
lang/vendor/backpack/fr/backup.php [new file with mode: 0644]
lang/vendor/backpack/fr/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/fr_CA/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/gr/backup.php [new file with mode: 0644]
lang/vendor/backpack/hu/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/id/backup.php [new file with mode: 0644]
lang/vendor/backpack/id/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/it/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/ja/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/lv/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/nl/backup.php [new file with mode: 0644]
lang/vendor/backpack/nl/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/pt/backup.php [new file with mode: 0644]
lang/vendor/backpack/pt/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/pt_br/backup.php [new file with mode: 0644]
lang/vendor/backpack/pt_br/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/ro/backup.php [new file with mode: 0644]
lang/vendor/backpack/ru/backup.php [new file with mode: 0644]
lang/vendor/backpack/ru/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/sr/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/tr/backup.php [new file with mode: 0644]
lang/vendor/backpack/tr/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/uk/backup.php [new file with mode: 0644]
lang/vendor/backpack/uk/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/vi/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/zh-Hant/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/zh-cn/permissionmanager.php [new file with mode: 0644]
lang/vendor/backpack/zh/backup.php [new file with mode: 0644]
public/vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.css [new file with mode: 0644]
public/vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.js [new file with mode: 0644]
public/vendor/gaspertrix/laravel-backpack-dropzone-field/sortable/Sortable.min.js [new file with mode: 0644]
resources/views/vendor/backpack/backupmanager/backup.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/crud/fields/dropzone_media.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/ui/inc/menu_items.blade.php [new file with mode: 0644]
routes/backpack/custom.php [new file with mode: 0644]
routes/backpack/permissionmanager.php [new file with mode: 0644]
storage/debugbar/.gitignore [new file with mode: 0644]

index 5584761861c93e5eb708f6e60f819582042a6486..0c634fba5e3b66558f61c7b41f85439cbd71ec4f 100644 (file)
@@ -9,8 +9,8 @@ services:
             - './www/:/application/'
             - './www/.docker/config/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf'
         environment:
-            VIRTUAL_HOST: elearning.fluidbook.com
-            LETSENCRYPT_HOST: elearning.fluidbook.com
+            VIRTUAL_HOST: staging.elearning.fluidbook.com,fr.staging.elearning.fluidbook.com
+            LETSENCRYPT_HOST: staging.elearning.fluidbook.com,fr.staging.elearning.fluidbook.com
         networks:
             - fluidbook-elearning
         restart: unless-stopped
index 2cd40fe66cb332d90e3bff8cc2c85937878c805b..d140877cce1392f40a58d57d17e490871cf2f230 100644 (file)
@@ -2,7 +2,7 @@ APP_NAME=fluidbook-elearning
 APP_ENV=production
 APP_KEY=base64:s2F7IT3AbDvthmI/vdNOsCRHBgwv5T9ttn99EiMJxbc=
 APP_DEBUG=true
-APP_URL=https://elearning.fluidbook.com
+APP_URL=https://staging.elearning.fluidbook.com
 LOG_CHANNEL=stack
 LOG_DEPRECATIONS_CHANNEL=null
 LOG_LEVEL=debug
@@ -11,7 +11,7 @@ DB_HOST=fluidbook-elearning-mariadb
 DB_PORT=3306
 DB_DATABASE=fluidbook-elearning
 DB_USERNAME=root
-DB_PASSWORD=ge8K5awnlsQFrxwf
+DB_PASSWORD=S41UTW62kQw4oonp
 BROADCAST_DRIVER=log
 CACHE_DRIVER=redis
 FILESYSTEM_DISK=local
index 2c515c4af259c38c9e3b20631eddcba4eede1e4e..ed2a06b8fadd7fe6161c5586198b0c1ad8f8c778 100644 (file)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="PublishConfigData" autoUpload="Always" serverName="elearning.fluidbook.com" remoteFilesAllowedToDisappearOnAutoupload="false" autoUploadExternalChanges="true">
+  <component name="PublishConfigData" autoUpload="Always" serverName="elearning.fluidbook.com" remoteFilesAllowedToDisappearOnAutoupload="false" confirmBeforeUploading="false" autoUploadExternalChanges="true">
+    <option name="confirmBeforeUploading" value="false" />
     <serverData>
       <paths name="alpha.toolbox.fluidbook.com">
         <serverdata>
diff --git a/app/Http/Middleware/CheckIfAdmin.php b/app/Http/Middleware/CheckIfAdmin.php
new file mode 100644 (file)
index 0000000..da1fa21
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+
+class CheckIfAdmin
+{
+    /**
+     * Checked that the logged in user is an administrator.
+     *
+     * --------------
+     * VERY IMPORTANT
+     * --------------
+     * If you have both regular users and admins inside the same table, change
+     * the contents of this method to check that the logged in user
+     * is an admin, and not a regular user.
+     *
+     * Additionally, in Laravel 7+, you should change app/Providers/RouteServiceProvider::HOME
+     * which defines the route where a logged in user (but not admin) gets redirected
+     * when trying to access an admin route. By default it's '/home' but Backpack
+     * does not have a '/home' route, use something you've built for your users
+     * (again - users, not admins).
+     *
+     * @param  \Illuminate\Contracts\Auth\Authenticatable|null  $user
+     * @return bool
+     */
+    private function checkIfUserIsAdmin($user)
+    {
+        // return ($user->is_admin == 1);
+        return true;
+    }
+
+    /**
+     * Answer to unauthorized access request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
+     */
+    private function respondToUnauthorizedRequest($request)
+    {
+        if ($request->ajax() || $request->wantsJson()) {
+            return response(trans('backpack::base.unauthorized'), 401);
+        } else {
+            return redirect()->guest(backpack_url('login'));
+        }
+    }
+
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        if (backpack_auth()->guest()) {
+            return $this->respondToUnauthorizedRequest($request);
+        }
+
+        if (! $this->checkIfUserIsAdmin(backpack_user())) {
+            return $this->respondToUnauthorizedRequest($request);
+        }
+
+        return $next($request);
+    }
+}
index 452e6b65b7a18aa7c3aaf886fd183a002d381e34..1a3dbc4f8320c80a82397f634f4f1ee7acf0d816 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Providers;
 
+use Illuminate\Support\Facades\URL;
 use Illuminate\Support\ServiceProvider;
 
 class AppServiceProvider extends ServiceProvider
@@ -19,6 +20,6 @@ class AppServiceProvider extends ServiceProvider
      */
     public function boot(): void
     {
-        //
+        URL::forceScheme('https');
     }
 }
index 05b91a798d8dbd1be5503ab43ea9d7396e059f51..6416dc38c4c25048124f38ffeed53fb7e3c85fc3 100644 (file)
@@ -8,16 +8,20 @@
     "license": "Proprietary",
     "require": {
         "php": "^8.1",
+        "backpack/theme-tabler": "^1.2",
+        "cubist/cms-back": "dev-backpack6",
         "guzzlehttp/guzzle": "^7.8",
         "laravel/framework": "^10.42",
-        "laravel/sanctum": "^3.3",
-        "laravel/tinker": "^2.9",
-        "cubist/cms-back": "dev-backpack6"
+        "laravel/sanctum": "^3.3"
     },
     "require-dev": {
+        "backpack/generators": "^4.0",
+        "barryvdh/laravel-ide-helper": "^2.13",
         "fakerphp/faker": "^1.23",
+        "filp/whoops": "^2.15",
         "laravel/pint": "^1.13",
         "laravel/sail": "^1.27",
+        "laravel/tinker": "^2.9",
         "mockery/mockery": "^1.6",
         "nunomaduro/collision": "^7.10",
         "phpunit/phpunit": "^10.5",
@@ -48,7 +52,8 @@
         ],
         "post-create-project-cmd": [
             "@php artisan key:generate --ansi"
-        ]
+        ],
+        "post-install-cmd": ["php artisan storage:link --quiet"]
     },
     "extra": {
         "laravel": {
index 362508946bb5c681a771e0ef00ca5d289cd5207f..a8f61afbaf6b7b847fe3b90df8a5cd35fd6cd00f 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": "9d7e0a07609b71f384b857a8573e7da1",
+    "content-hash": "a948a231d6a7ea608756af43286d6ab7",
     "packages": [
         {
             "name": "archtechx/enums",
             },
             "time": "2023-07-01T06:33:51+00:00"
         },
+        {
+            "name": "backpack/theme-tabler",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Laravel-Backpack/theme-tabler.git",
+                "reference": "03c37fb1f39624a1106c0f9a106cb758628ab1db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Laravel-Backpack/theme-tabler/zipball/03c37fb1f39624a1106c0f9a106cb758628ab1db",
+                "reference": "03c37fb1f39624a1106c0f9a106cb758628ab1db",
+                "shasum": ""
+            },
+            "require": {
+                "backpack/crud": "^6.2.1"
+            },
+            "require-dev": {
+                "orchestra/testbench": "~5|~6",
+                "phpunit/phpunit": "~9.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.0.x-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Backpack\\ThemeTabler\\AddonServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Backpack\\ThemeTabler\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mauro Martinez",
+                    "email": "maurohmartinez@gmail.com",
+                    "homepage": "https://backpackforlaravel.com"
+                },
+                {
+                    "name": "Cristian Tabacitu",
+                    "email": "hello@backpackforlaravel.com",
+                    "homepage": "https://backpackforlaravel.com"
+                },
+                {
+                    "name": "Antonio Almeida",
+                    "email": "promatik@gmail.com",
+                    "homepage": "https://backpackforlaravel.com"
+                }
+            ],
+            "description": "UI for Backpack v6 that uses Tabler and Bootstrap v5.",
+            "homepage": "https://github.com/backpack/theme-tabler",
+            "keywords": [
+                "Backpack Addon",
+                "Backpack for Laravel",
+                "ThemeTabler",
+                "backpack",
+                "laravel"
+            ],
+            "support": {
+                "issues": "https://github.com/Laravel-Backpack/theme-tabler/issues",
+                "source": "https://github.com/Laravel-Backpack/theme-tabler/tree/1.2.0"
+            },
+            "time": "2023-12-30T02:42:47+00:00"
+        },
         {
             "name": "barryvdh/laravel-debugbar",
             "version": "v3.9.2",
             },
             "time": "2023-11-08T14:08:06+00:00"
         },
-        {
-            "name": "laravel/tinker",
-            "version": "v2.9.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/laravel/tinker.git",
-                "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe",
-                "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe",
-                "shasum": ""
-            },
-            "require": {
-                "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
-                "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
-                "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
-                "php": "^7.2.5|^8.0",
-                "psy/psysh": "^0.11.1|^0.12.0",
-                "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "~1.3.3|^1.4.2",
-                "phpstan/phpstan": "^1.10",
-                "phpunit/phpunit": "^8.5.8|^9.3.3"
-            },
-            "suggest": {
-                "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)."
-            },
-            "type": "library",
-            "extra": {
-                "laravel": {
-                    "providers": [
-                        "Laravel\\Tinker\\TinkerServiceProvider"
-                    ]
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Laravel\\Tinker\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Taylor Otwell",
-                    "email": "taylor@laravel.com"
-                }
-            ],
-            "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.9.0"
-            },
-            "time": "2024-01-04T16:10:04+00:00"
-        },
         {
             "name": "lavary/laravel-menu",
             "version": "v1.8.4",
             },
             "time": "2024-01-17T16:50:36+00:00"
         },
-        {
-            "name": "nikic/php-parser",
-            "version": "v5.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
-                "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
-                "shasum": ""
-            },
-            "require": {
-                "ext-ctype": "*",
-                "ext-json": "*",
-                "ext-tokenizer": "*",
-                "php": ">=7.4"
-            },
-            "require-dev": {
-                "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
-            },
-            "bin": [
-                "bin/php-parse"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov"
-                }
-            ],
-            "description": "A PHP parser written in PHP",
-            "keywords": [
-                "parser",
-                "php"
-            ],
-            "support": {
-                "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0"
-            },
-            "time": "2024-01-07T17:17:35+00:00"
-        },
         {
             "name": "norkunas/youtube-dl-php",
             "version": "v2.4.0",
             },
             "time": "2017-10-23T01:57:42+00:00"
         },
-        {
-            "name": "psy/psysh",
-            "version": "v0.12.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d",
-                "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "ext-tokenizer": "*",
-                "nikic/php-parser": "^5.0 || ^4.0",
-                "php": "^8.0 || ^7.4",
-                "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
-                "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
-            },
-            "conflict": {
-                "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.2"
-            },
-            "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."
-            },
-            "bin": [
-                "bin/psysh"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "0.12.x-dev"
-                },
-                "bamarni-bin": {
-                    "bin-links": false,
-                    "forward-command": false
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
-                "psr-4": {
-                    "Psy\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Justin Hileman",
-                    "email": "justin@justinhileman.info",
-                    "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.12.0"
-            },
-            "time": "2023-12-20T15:28:09+00:00"
-        },
         {
             "name": "ralouphie/getallheaders",
             "version": "3.0.3",
     ],
     "packages-dev": [
         {
-            "name": "fakerphp/faker",
-            "version": "v1.23.1",
+            "name": "backpack/generators",
+            "version": "v4.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/FakerPHP/Faker.git",
-                "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b"
+                "url": "https://github.com/Laravel-Backpack/Generators.git",
+                "reference": "e5314899f3b449c3f23dff06f2569371b0de35df"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b",
-                "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b",
+                "url": "https://api.github.com/repos/Laravel-Backpack/Generators/zipball/e5314899f3b449c3f23dff06f2569371b0de35df",
+                "reference": "e5314899f3b449c3f23dff06f2569371b0de35df",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.4 || ^8.0",
+                "backpack/crud": "^6.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.0||^7.0",
+                "scrutinizer/ocular": "~1.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Backpack\\Generators\\GeneratorsServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Backpack\\Generators\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "proprietary"
+            ],
+            "authors": [
+                {
+                    "name": "Cristian Tabacitu",
+                    "email": "tabacitu@backpackforlaravel.com",
+                    "homepage": "https://backpackforlaravel.com",
+                    "role": "Lead Developer & Maintainer"
+                },
+                {
+                    "name": "Cristian Tone",
+                    "email": "cristitone@outlook.com",
+                    "homepage": "http://updivision.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Generate files for laravel projects",
+            "homepage": "https://github.com/laravel-backpack/generators",
+            "keywords": [
+                "config",
+                "generators",
+                "model",
+                "request",
+                "view"
+            ],
+            "support": {
+                "issues": "https://github.com/Laravel-Backpack/Generators/issues",
+                "source": "https://github.com/Laravel-Backpack/Generators/tree/v4.0.2"
+            },
+            "time": "2023-07-24T10:35:15+00:00"
+        },
+        {
+            "name": "barryvdh/laravel-ide-helper",
+            "version": "v2.13.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/barryvdh/laravel-ide-helper.git",
+                "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/81d5b223ff067a1f38e14c100997e153b837fe4a",
+                "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a",
+                "shasum": ""
+            },
+            "require": {
+                "barryvdh/reflection-docblock": "^2.0.6",
+                "composer/class-map-generator": "^1.0",
+                "doctrine/dbal": "^2.6 || ^3",
+                "ext-json": "*",
+                "illuminate/console": "^8 || ^9 || ^10",
+                "illuminate/filesystem": "^8 || ^9 || ^10",
+                "illuminate/support": "^8 || ^9 || ^10",
+                "nikic/php-parser": "^4.7",
+                "php": "^7.3 || ^8.0",
+                "phpdocumentor/type-resolver": "^1.1.0"
+            },
+            "require-dev": {
+                "ext-pdo_sqlite": "*",
+                "friendsofphp/php-cs-fixer": "^2",
+                "illuminate/config": "^8 || ^9 || ^10",
+                "illuminate/view": "^8 || ^9 || ^10",
+                "mockery/mockery": "^1.4",
+                "orchestra/testbench": "^6 || ^7 || ^8",
+                "phpunit/phpunit": "^8.5 || ^9",
+                "spatie/phpunit-snapshot-assertions": "^3 || ^4",
+                "vimeo/psalm": "^3.12"
+            },
+            "suggest": {
+                "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.12-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": "barryvdh@gmail.com"
+                }
+            ],
+            "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.13.0"
+            },
+            "funding": [
+                {
+                    "url": "https://fruitcake.nl",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/barryvdh",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-04T13:56:40+00:00"
+        },
+        {
+            "name": "barryvdh/reflection-docblock",
+            "version": "v2.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/barryvdh/ReflectionDocBlock.git",
+                "reference": "e6811e927f0ecc37cc4deaa6627033150343e597"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597",
+                "reference": "e6811e927f0ecc37cc4deaa6627033150343e597",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.5.14|^9"
+            },
+            "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": "mike.vanriel@naenius.com"
+                }
+            ],
+            "support": {
+                "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1"
+            },
+            "time": "2023-06-14T05:06:27+00:00"
+        },
+        {
+            "name": "composer/class-map-generator",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/class-map-generator.git",
+                "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9",
+                "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9",
+                "shasum": ""
+            },
+            "require": {
+                "composer/pcre": "^2.1 || ^3.1",
+                "php": "^7.2 || ^8.0",
+                "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1.6",
+                "phpstan/phpstan-deprecation-rules": "^1",
+                "phpstan/phpstan-phpunit": "^1",
+                "phpstan/phpstan-strict-rules": "^1.1",
+                "symfony/filesystem": "^5.4 || ^6",
+                "symfony/phpunit-bridge": "^5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\ClassMapGenerator\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "https://seld.be"
+                }
+            ],
+            "description": "Utilities to scan PHP code and generate class maps.",
+            "keywords": [
+                "classmap"
+            ],
+            "support": {
+                "issues": "https://github.com/composer/class-map-generator/issues",
+                "source": "https://github.com/composer/class-map-generator/tree/1.1.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": "2023-06-30T13:58:57+00:00"
+        },
+        {
+            "name": "composer/pcre",
+            "version": "3.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/pcre.git",
+                "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9",
+                "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.4 || ^8.0"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1.3",
+                "phpstan/phpstan-strict-rules": "^1.1",
+                "symfony/phpunit-bridge": "^5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Pcre\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+            "keywords": [
+                "PCRE",
+                "preg",
+                "regex",
+                "regular expression"
+            ],
+            "support": {
+                "issues": "https://github.com/composer/pcre/issues",
+                "source": "https://github.com/composer/pcre/tree/3.1.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": "2023-10-11T07:11:09+00:00"
+        },
+        {
+            "name": "fakerphp/faker",
+            "version": "v1.23.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/FakerPHP/Faker.git",
+                "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b",
+                "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.4 || ^8.0",
                 "psr/container": "^1.0 || ^2.0",
                 "symfony/deprecation-contracts": "^2.2 || ^3.0"
             },
                 "orchestra/testbench": "^7.0|^8.0|^9.0",
                 "phpstan/phpstan": "^1.10"
             },
-            "bin": [
-                "bin/sail"
-            ],
+            "bin": [
+                "bin/sail"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Laravel\\Sail\\SailServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laravel\\Sail\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "Docker files for running a basic Laravel application.",
+            "keywords": [
+                "docker",
+                "laravel"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/sail/issues",
+                "source": "https://github.com/laravel/sail"
+            },
+            "time": "2024-01-21T17:13:42+00:00"
+        },
+        {
+            "name": "laravel/tinker",
+            "version": "v2.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/tinker.git",
+                "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe",
+                "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+                "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+                "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+                "php": "^7.2.5|^8.0",
+                "psy/psysh": "^0.11.1|^0.12.0",
+                "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.3|^1.4.2",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^8.5.8|^9.3.3"
+            },
+            "suggest": {
+                "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)."
+            },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                },
                 "laravel": {
                     "providers": [
-                        "Laravel\\Sail\\SailServiceProvider"
+                        "Laravel\\Tinker\\TinkerServiceProvider"
                     ]
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Laravel\\Sail\\": "src/"
+                    "Laravel\\Tinker\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
                     "email": "taylor@laravel.com"
                 }
             ],
-            "description": "Docker files for running a basic Laravel application.",
+            "description": "Powerful REPL for the Laravel framework.",
             "keywords": [
-                "docker",
-                "laravel"
+                "REPL",
+                "Tinker",
+                "laravel",
+                "psysh"
             ],
             "support": {
-                "issues": "https://github.com/laravel/sail/issues",
-                "source": "https://github.com/laravel/sail"
+                "issues": "https://github.com/laravel/tinker/issues",
+                "source": "https://github.com/laravel/tinker/tree/v2.9.0"
             },
-            "time": "2024-01-21T17:13:42+00:00"
+            "time": "2024-01-04T16:10:04+00:00"
         },
         {
             "name": "mockery/mockery",
             ],
             "time": "2023-03-08T13:26:56+00:00"
         },
+        {
+            "name": "nikic/php-parser",
+            "version": "v4.18.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999",
+                "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=7.0"
+            },
+            "require-dev": {
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+            },
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/nikic/PHP-Parser/issues",
+                "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0"
+            },
+            "time": "2023-12-10T21:03:43+00:00"
+        },
         {
             "name": "nunomaduro/collision",
             "version": "v7.10.0",
             },
             "time": "2022-02-21T01:04:05+00:00"
         },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "support": {
+                "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+                "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+            },
+            "time": "2020-06-27T09:03:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "1.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc",
+                "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/deprecations": "^1.0",
+                "php": "^7.4 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0",
+                "phpstan/phpdoc-parser": "^1.13"
+            },
+            "require-dev": {
+                "ext-tokenizer": "*",
+                "phpbench/phpbench": "^1.2",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpunit/phpunit": "^9.5",
+                "rector/rector": "^0.13.9",
+                "vimeo/psalm": "^4.25"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "support": {
+                "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.0"
+            },
+            "time": "2024-01-11T11:49:22+00:00"
+        },
+        {
+            "name": "phpstan/phpdoc-parser",
+            "version": "1.25.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/phpdoc-parser.git",
+                "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240",
+                "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^2.0",
+                "nikic/php-parser": "^4.15",
+                "php-parallel-lint/php-parallel-lint": "^1.2",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^1.5",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpstan/phpstan-strict-rules": "^1.0",
+                "phpunit/phpunit": "^9.5",
+                "symfony/process": "^5.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PHPStan\\PhpDocParser\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPDoc parser with support for nullable, intersection and generic types",
+            "support": {
+                "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0"
+            },
+            "time": "2024-01-04T17:06:16+00:00"
+        },
         {
             "name": "phpunit/php-code-coverage",
             "version": "10.1.11",
             ],
             "time": "2024-01-22T14:35:40+00:00"
         },
+        {
+            "name": "psy/psysh",
+            "version": "v0.12.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/bobthecow/psysh.git",
+                "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d",
+                "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-tokenizer": "*",
+                "nikic/php-parser": "^5.0 || ^4.0",
+                "php": "^8.0 || ^7.4",
+                "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+                "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
+            },
+            "conflict": {
+                "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.2"
+            },
+            "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."
+            },
+            "bin": [
+                "bin/psysh"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "0.12.x-dev"
+                },
+                "bamarni-bin": {
+                    "bin-links": false,
+                    "forward-command": false
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "Psy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Justin Hileman",
+                    "email": "justin@justinhileman.info",
+                    "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.12.0"
+            },
+            "time": "2023-12-20T15:28:09+00:00"
+        },
         {
             "name": "sebastian/cli-parser",
             "version": "2.0.0",
diff --git a/config/backpack/backupmanager.php b/config/backpack/backupmanager.php
new file mode 100644 (file)
index 0000000..8474b11
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+
+return [
+    // What is being run when the admin clicks on the "Create a new backup" button
+    // You can add flags to this like --only-db --only-files --only-to-disk=name-of-disk
+    // Details here: https://spatie.be/docs/laravel-backup/v8/taking-backups/overview
+    'artisan_command_on_button_click' => 'backup:run --disable-notifications',
+
+    // here you can configure your php settings that will apply before starting the backup operation
+    // one of the things that Backpack does by default is increasing the `max_execution_time` for
+    // php scripts, as listing all files for backup could take some time to execute.
+    'ini_settings' => [
+        'max_execution_time' => 600,
+    ],
+];
diff --git a/config/backpack/base.php b/config/backpack/base.php
new file mode 100644 (file)
index 0000000..0fa3af5
--- /dev/null
@@ -0,0 +1,194 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Registration Open
+    |--------------------------------------------------------------------------
+    |
+    | Choose whether new users/admins are allowed to register.
+    | This will show the Register button on the login page and allow access to the
+    | Register functions in AuthController.
+    |
+    | By default the registration is open only on localhost.
+    */
+
+    'registration_open' => env('BACKPACK_REGISTRATION_OPEN', env('APP_ENV') === 'local'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Routing
+    |--------------------------------------------------------------------------
+    */
+
+    // The prefix used in all base routes (the 'admin' in admin/dashboard)
+    // You can make sure all your URLs use this prefix by using the backpack_url() helper instead of url()
+    'route_prefix' => 'admin',
+
+    // The web middleware (group) used in all base & CRUD routes
+    // If you've modified your "web" middleware group (ex: removed sessions), you can use a different
+    // route group, that has all the the middleware listed below in the comments.
+    'web_middleware' => 'web',
+    // Or you can comment the above, and uncomment the complete list below.
+    // 'web_middleware' => [
+    //     \App\Http\Middleware\EncryptCookies::class,
+    //     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+    //     \Illuminate\Session\Middleware\StartSession::class,
+    //     \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+    //     \App\Http\Middleware\VerifyCsrfToken::class,
+    // ],
+
+    // Set this to false if you would like to use your own AuthController and PasswordController
+    // (you then need to setup your auth routes manually in your routes.php file)
+    // Warning: if you disable this, the password recovery routes (below) will be disabled too!
+    'setup_auth_routes' => true,
+
+    // Set this to false if you would like to skip adding the dashboard routes
+    // (you then need to overwrite the login route on your AuthController)
+    'setup_dashboard_routes' => true,
+
+    // Set this to false if you would like to skip adding "my account" routes
+    // (you then need to manually define the routes in your web.php)
+    'setup_my_account_routes' => true,
+
+    // Set this to false if you would like to skip adding the password recovery routes
+    // (you then need to manually define the routes in your web.php)
+    'setup_password_recovery_routes' => true,
+
+    // Set this to true if you would like to enable email verification for your user model.
+    // Make sure your user model implements the MustVerifyEmail contract and your database
+    // table contains the `email_verified_at` column. Read the following before enabling:
+    // https://backpackforlaravel.com/docs/6.x/base-how-to#enable-email-verification-in-backpack-routes
+    'setup_email_verification_routes' => false,
+
+    // When email verification is enabled, automatically add the Verified middleware to Backpack routes?
+    // Set false if you want to use your own Verified middleware in `middleware_class`.
+    'setup_email_verification_middleware' => true,
+
+    // How many times in any given time period should the user be allowed to
+    // request a new verification email?
+    // Defaults to 1,10 - 1 time in 10 minutes.
+    'email_verification_throttle_access' => '3,15',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Security
+    |--------------------------------------------------------------------------
+    */
+
+    // Backpack will prevent visitors from requesting password recovery too many times
+    // for a certain email, to make sure they cannot be spammed that way.
+    // How many seconds should a visitor wait, after they've requested a
+    // password reset, before they can try again for the same email?
+    'password_recovery_throttle_notifications' => 600, // time in seconds
+
+    // How much time should the token sent to the user email be considered valid?
+    // After this time expires, user needs to request a new reset token.
+    'password_recovery_token_expiration' => 60, // time in minutes
+
+    // Backpack will prevent an IP from trying to reset the password too many times,
+    // so that a malicious actor cannot try too many emails, too see if they have
+    // accounts or to increase the AWS/SendGrid/etc bill.
+    //
+    // How many times in any given time period should the user be allowed to
+    // attempt a password reset? Take into account that user might wrongly
+    // type an email at first, so at least allow one more try.
+    // Defaults to 3,10 - 3 times in 10 minutes.
+    'password_recovery_throttle_access' => '3,10',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication
+    |--------------------------------------------------------------------------
+    */
+
+    // Fully qualified namespace of the User model
+    'user_model_fqn' => config('auth.providers.users.model'),
+    // 'user_model_fqn' => App\User::class, // works on Laravel <= 7
+    // 'user_model_fqn' => App\Models\User::class, // works on Laravel >= 8
+
+    // The classes for the middleware to check if the visitor is an admin
+    // Can be a single class or an array of classes
+    'middleware_class' => [
+        App\Http\Middleware\CheckIfAdmin::class,
+        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+        \Backpack\CRUD\app\Http\Middleware\AuthenticateSession::class,
+        // \Backpack\CRUD\app\Http\Middleware\UseBackpackAuthGuardInsteadOfDefaultAuthGuard::class,
+    ],
+
+    // Alias for that middleware
+    'middleware_key' => 'admin',
+    // Note: It's recommended to use the backpack_middleware() helper everywhere, which pulls this key for you.
+
+    // Username column for authentication
+    // The Backpack default is the same as the Laravel default (email)
+    // If you need to switch to username, you also need to create that column in your db
+    'authentication_column' => 'email',
+    'authentication_column_name' => 'Email',
+
+    // Backpack assumes that your "database email column" for operations like Login and Register is called "email".
+    // If your database email column have a different name, you can configure it here. Eg: `user_mail`
+    'email_column' => 'email',
+
+    // The guard that protects the Backpack admin panel.
+    // If null, the config.auth.defaults.guard value will be used.
+    'guard' => 'backpack',
+
+    // The password reset configuration for Backpack.
+    // If null, the config.auth.defaults.passwords value will be used.
+    'passwords' => 'backpack',
+
+    // What kind of avatar will you like to show to the user?
+    // Default: gravatar (automatically use the gravatar for their email)
+    // Other options:
+    // - null (generic image with their first letter)
+    // - example_method_name (specify the method on the User model that returns the URL)
+    'avatar_type' => 'gravatar',
+
+    // Gravatar fallback options are 'identicon', 'monsterid', 'wavatar', 'retro', 'robohash', 'blank'
+    // 'blank' will keep the generic image with the user first letter
+    'gravatar_fallback' => 'blank',
+
+    /*
+    |--------------------------------------------------------------------------
+    | File System
+    |--------------------------------------------------------------------------
+    */
+
+    // Backpack\Base sets up its own filesystem disk, just like you would by
+    // adding an entry to your config/filesystems.php. It points to the root
+    // of your project and it's used throughout all Backpack packages.
+    //
+    // You can rename this disk here. Default: root
+    'root_disk_name' => 'root',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application
+    |--------------------------------------------------------------------------
+    */
+
+    // Should we use DB transactions when executing multiple queries? For example when creating an entry and it's relationships.
+    // By wrapping in a database transaction you ensure that either all queries went ok, or if some failed the whole process
+    // is rolled back and considered failed. This is a good setting for data integrity.
+    'useDatabaseTransactions' => false,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backpack Token Username
+    |--------------------------------------------------------------------------
+    |
+    | If you have access to closed-source Backpack add-ons, please provide
+    | your token username here, if you're getting yellow alerts on your
+    | admin panel's pages. Normally this is not needed, it is
+    | preferred to add this as an environment variable
+    | (most likely in your .env file).
+    |
+    | More info and payment form on:
+    | https://www.backpackforlaravel.com
+    |
+    */
+
+    'token_username' => env('BACKPACK_TOKEN_USERNAME', false),
+];
diff --git a/config/backpack/crud.php b/config/backpack/crud.php
new file mode 100644 (file)
index 0000000..aac3729
--- /dev/null
@@ -0,0 +1,480 @@
+<?php
+
+/**
+ * Backpack\CRUD preferences.
+ */
+
+return [
+
+    /*
+    |-------------------
+    | TRANSLATABLE CRUDS
+    |-------------------
+    */
+
+    'show_translatable_field_icon' => true,
+    'translatable_field_icon_position' => 'right', // left or right
+
+    'locales' => [
+        // "af_NA" => "Afrikaans (Namibia)",
+        // "af_ZA" => "Afrikaans (South Africa)",
+        // "af" => "Afrikaans",
+        // "ak_GH" => "Akan (Ghana)",
+        // "ak" => "Akan",
+        // "sq_AL" => "Albanian (Albania)",
+        // "sq" => "Albanian",
+        // "am_ET" => "Amharic (Ethiopia)",
+        // "am" => "Amharic",
+        // "ar_DZ" => "Arabic (Algeria)",
+        // "ar_BH" => "Arabic (Bahrain)",
+        // "ar_EG" => "Arabic (Egypt)",
+        // "ar_IQ" => "Arabic (Iraq)",
+        // "ar_JO" => "Arabic (Jordan)",
+        // "ar_KW" => "Arabic (Kuwait)",
+        // "ar_LB" => "Arabic (Lebanon)",
+        // "ar_LY" => "Arabic (Libya)",
+        // "ar_MA" => "Arabic (Morocco)",
+        // "ar_OM" => "Arabic (Oman)",
+        // "ar_QA" => "Arabic (Qatar)",
+        // "ar_SA" => "Arabic (Saudi Arabia)",
+        // "ar_SD" => "Arabic (Sudan)",
+        // "ar_SY" => "Arabic (Syria)",
+        // "ar_TN" => "Arabic (Tunisia)",
+        // "ar_AE" => "Arabic (United Arab Emirates)",
+        // "ar_YE" => "Arabic (Yemen)",
+        // "ar" => "Arabic",
+        // "hy_AM" => "Armenian (Armenia)",
+        // "hy" => "Armenian",
+        // "as_IN" => "Assamese (India)",
+        // "as" => "Assamese",
+        // "asa_TZ" => "Asu (Tanzania)",
+        // "asa" => "Asu",
+        // "az_Cyrl" => "Azerbaijani (Cyrillic)",
+        // "az_Cyrl_AZ" => "Azerbaijani (Cyrillic, Azerbaijan)",
+        // "az_Latn" => "Azerbaijani (Latin)",
+        // "az_Latn_AZ" => "Azerbaijani (Latin, Azerbaijan)",
+        // "az" => "Azerbaijani",
+        // "bm_ML" => "Bambara (Mali)",
+        // "bm" => "Bambara",
+        // "eu_ES" => "Basque (Spain)",
+        // "eu" => "Basque",
+        // "be_BY" => "Belarusian (Belarus)",
+        // "be" => "Belarusian",
+        // "bem_ZM" => "Bemba (Zambia)",
+        // "bem" => "Bemba",
+        // "bez_TZ" => "Bena (Tanzania)",
+        // "bez" => "Bena",
+        // "bn_BD" => "Bengali (Bangladesh)",
+        // "bn_IN" => "Bengali (India)",
+        // "bn" => "Bengali",
+        // "bs_BA" => "Bosnian (Bosnia and Herzegovina)",
+        // "bs" => "Bosnian",
+        // "bg_BG" => "Bulgarian (Bulgaria)",
+        // "bg" => "Bulgarian",
+        // "my_MM" => "Burmese (Myanmar [Burma])",
+        // "my" => "Burmese",
+        // "ca_ES" => "Catalan (Spain)",
+        // "ca" => "Catalan",
+        // "tzm_Latn" => "Central Morocco Tamazight (Latin)",
+        // "tzm_Latn_MA" => "Central Morocco Tamazight (Latin, Morocco)",
+        // "tzm" => "Central Morocco Tamazight",
+        // "chr_US" => "Cherokee (United States)",
+        // "chr" => "Cherokee",
+        // "cgg_UG" => "Chiga (Uganda)",
+        // "cgg" => "Chiga",
+        // "zh_Hans" => "Chinese (Simplified Han)",
+        // "zh_Hans_CN" => "Chinese (Simplified Han, China)",
+        // "zh_Hans_HK" => "Chinese (Simplified Han, Hong Kong SAR China)",
+        // "zh_Hans_MO" => "Chinese (Simplified Han, Macau SAR China)",
+        // "zh_Hans_SG" => "Chinese (Simplified Han, Singapore)",
+        // "zh_Hant" => "Chinese (Traditional Han)",
+        // "zh_Hant_HK" => "Chinese (Traditional Han, Hong Kong SAR China)",
+        // "zh_Hant_MO" => "Chinese (Traditional Han, Macau SAR China)",
+        // "zh_Hant_TW" => "Chinese (Traditional Han, Taiwan)",
+        // "zh" => "Chinese",
+        // "kw_GB" => "Cornish (United Kingdom)",
+        // "kw" => "Cornish",
+        // "hr_HR" => "Croatian (Croatia)",
+        // "hr" => "Croatian",
+        // "cs_CZ" => "Czech (Czech Republic)",
+        // "cs" => "Czech",
+        // "da_DK" => "Danish (Denmark)",
+        // "da" => "Danish",
+        // "nl_BE" => "Dutch (Belgium)",
+        // "nl_NL" => "Dutch (Netherlands)",
+        // "nl" => "Dutch",
+        // "ebu_KE" => "Embu (Kenya)",
+        // "ebu" => "Embu",
+        // "en_AS" => "English (American Samoa)",
+        // "en_AU" => "English (Australia)",
+        // "en_BE" => "English (Belgium)",
+        // "en_BZ" => "English (Belize)",
+        // "en_BW" => "English (Botswana)",
+        // "en_CA" => "English (Canada)",
+        // "en_GU" => "English (Guam)",
+        // "en_HK" => "English (Hong Kong SAR China)",
+        // "en_IN" => "English (India)",
+        // "en_IE" => "English (Ireland)",
+        // "en_JM" => "English (Jamaica)",
+        // "en_MT" => "English (Malta)",
+        // "en_MH" => "English (Marshall Islands)",
+        // "en_MU" => "English (Mauritius)",
+        // "en_NA" => "English (Namibia)",
+        // "en_NZ" => "English (New Zealand)",
+        // "en_MP" => "English (Northern Mariana Islands)",
+        // "en_PK" => "English (Pakistan)",
+        // "en_PH" => "English (Philippines)",
+        // "en_SG" => "English (Singapore)",
+        // "en_ZA" => "English (South Africa)",
+        // "en_TT" => "English (Trinidad and Tobago)",
+        // "en_UM" => "English (U.S. Minor Outlying Islands)",
+        // "en_VI" => "English (U.S. Virgin Islands)",
+        // "en_GB" => "English (United Kingdom)",
+        // "en_US" => "English (United States)",
+        // "en_ZW" => "English (Zimbabwe)",
+        'en' => 'English',
+        // "eo" => "Esperanto",
+        // "et_EE" => "Estonian (Estonia)",
+        // "et" => "Estonian",
+        // "ee_GH" => "Ewe (Ghana)",
+        // "ee_TG" => "Ewe (Togo)",
+        // "ee" => "Ewe",
+        // "fo_FO" => "Faroese (Faroe Islands)",
+        // "fo" => "Faroese",
+        // "fil_PH" => "Filipino (Philippines)",
+        // "fil" => "Filipino",
+        // "fi_FI" => "Finnish (Finland)",
+        // "fi" => "Finnish",
+        // "fr_BE" => "French (Belgium)",
+        // "fr_BJ" => "French (Benin)",
+        // "fr_BF" => "French (Burkina Faso)",
+        // "fr_BI" => "French (Burundi)",
+        // "fr_CM" => "French (Cameroon)",
+        // "fr_CA" => "French (Canada)",
+        // "fr_CF" => "French (Central African Republic)",
+        // "fr_TD" => "French (Chad)",
+        // "fr_KM" => "French (Comoros)",
+        // "fr_CG" => "French (Congo - Brazzaville)",
+        // "fr_CD" => "French (Congo - Kinshasa)",
+        // "fr_CI" => "French (Côte d’Ivoire)",
+        // "fr_DJ" => "French (Djibouti)",
+        // "fr_GQ" => "French (Equatorial Guinea)",
+        // "fr_FR" => "French (France)",
+        // "fr_GA" => "French (Gabon)",
+        // "fr_GP" => "French (Guadeloupe)",
+        // "fr_GN" => "French (Guinea)",
+        // "fr_LU" => "French (Luxembourg)",
+        // "fr_MG" => "French (Madagascar)",
+        // "fr_ML" => "French (Mali)",
+        // "fr_MQ" => "French (Martinique)",
+        // "fr_MC" => "French (Monaco)",
+        // "fr_NE" => "French (Niger)",
+        // "fr_RW" => "French (Rwanda)",
+        // "fr_RE" => "French (Réunion)",
+        // "fr_BL" => "French (Saint Barthélemy)",
+        // "fr_MF" => "French (Saint Martin)",
+        // "fr_SN" => "French (Senegal)",
+        // "fr_CH" => "French (Switzerland)",
+        // "fr_TG" => "French (Togo)",
+        'fr' => 'French',
+        // "ff_SN" => "Fulah (Senegal)",
+        // "ff" => "Fulah",
+        // "gl_ES" => "Galician (Spain)",
+        // "gl" => "Galician",
+        // "lg_UG" => "Ganda (Uganda)",
+        // "lg" => "Ganda",
+        // "ka_GE" => "Georgian (Georgia)",
+        // "ka" => "Georgian",
+        // "de_AT" => "German (Austria)",
+        // "de_BE" => "German (Belgium)",
+        // "de_DE" => "German (Germany)",
+        // "de_LI" => "German (Liechtenstein)",
+        // "de_LU" => "German (Luxembourg)",
+        // "de_CH" => "German (Switzerland)",
+        // "de" => "German",
+        // "el_CY" => "Greek (Cyprus)",
+        // "el_GR" => "Greek (Greece)",
+        // "el" => "Greek",
+        // "gu_IN" => "Gujarati (India)",
+        // "gu" => "Gujarati",
+        // "guz_KE" => "Gusii (Kenya)",
+        // "guz" => "Gusii",
+        // "ha_Latn" => "Hausa (Latin)",
+        // "ha_Latn_GH" => "Hausa (Latin, Ghana)",
+        // "ha_Latn_NE" => "Hausa (Latin, Niger)",
+        // "ha_Latn_NG" => "Hausa (Latin, Nigeria)",
+        // "ha" => "Hausa",
+        // "haw_US" => "Hawaiian (United States)",
+        // "haw" => "Hawaiian",
+        // "he_IL" => "Hebrew (Israel)",
+        // "he" => "Hebrew",
+        // "hi_IN" => "Hindi (India)",
+        // "hi" => "Hindi",
+        // "hu_HU" => "Hungarian (Hungary)",
+        // "hu" => "Hungarian",
+        // "is_IS" => "Icelandic (Iceland)",
+        // "is" => "Icelandic",
+        // "ig_NG" => "Igbo (Nigeria)",
+        // "ig" => "Igbo",
+        // "id_ID" => "Indonesian (Indonesia)",
+        // "id" => "Indonesian",
+        // "ga_IE" => "Irish (Ireland)",
+        // "ga" => "Irish",
+        // "it_IT" => "Italian (Italy)",
+        // "it_CH" => "Italian (Switzerland)",
+        'it' => 'Italian',
+        // "ja_JP" => "Japanese (Japan)",
+        // "ja" => "Japanese",
+        // "kea_CV" => "Kabuverdianu (Cape Verde)",
+        // "kea" => "Kabuverdianu",
+        // "kab_DZ" => "Kabyle (Algeria)",
+        // "kab" => "Kabyle",
+        // "kl_GL" => "Kalaallisut (Greenland)",
+        // "kl" => "Kalaallisut",
+        // "kln_KE" => "Kalenjin (Kenya)",
+        // "kln" => "Kalenjin",
+        // "kam_KE" => "Kamba (Kenya)",
+        // "kam" => "Kamba",
+        // "kn_IN" => "Kannada (India)",
+        // "kn" => "Kannada",
+        // "kk_Cyrl" => "Kazakh (Cyrillic)",
+        // "kk_Cyrl_KZ" => "Kazakh (Cyrillic, Kazakhstan)",
+        // "kk" => "Kazakh",
+        // "km_KH" => "Khmer (Cambodia)",
+        // "km" => "Khmer",
+        // "ki_KE" => "Kikuyu (Kenya)",
+        // "ki" => "Kikuyu",
+        // "rw_RW" => "Kinyarwanda (Rwanda)",
+        // "rw" => "Kinyarwanda",
+        // "kok_IN" => "Konkani (India)",
+        // "kok" => "Konkani",
+        // "ko_KR" => "Korean (South Korea)",
+        // "ko" => "Korean",
+        // "khq_ML" => "Koyra Chiini (Mali)",
+        // "khq" => "Koyra Chiini",
+        // "ses_ML" => "Koyraboro Senni (Mali)",
+        // "ses" => "Koyraboro Senni",
+        // "lag_TZ" => "Langi (Tanzania)",
+        // "lag" => "Langi",
+        // "lv_LV" => "Latvian (Latvia)",
+        // "lv" => "Latvian",
+        // "lt_LT" => "Lithuanian (Lithuania)",
+        // "lt" => "Lithuanian",
+        // "luo_KE" => "Luo (Kenya)",
+        // "luo" => "Luo",
+        // "luy_KE" => "Luyia (Kenya)",
+        // "luy" => "Luyia",
+        // "mk_MK" => "Macedonian (Macedonia)",
+        // "mk" => "Macedonian",
+        // "jmc_TZ" => "Machame (Tanzania)",
+        // "jmc" => "Machame",
+        // "kde_TZ" => "Makonde (Tanzania)",
+        // "kde" => "Makonde",
+        // "mg_MG" => "Malagasy (Madagascar)",
+        // "mg" => "Malagasy",
+        // "ms_BN" => "Malay (Brunei)",
+        // "ms_MY" => "Malay (Malaysia)",
+        // "ms" => "Malay",
+        // "ml_IN" => "Malayalam (India)",
+        // "ml" => "Malayalam",
+        // "mt_MT" => "Maltese (Malta)",
+        // "mt" => "Maltese",
+        // "gv_GB" => "Manx (United Kingdom)",
+        // "gv" => "Manx",
+        // "mr_IN" => "Marathi (India)",
+        // "mr" => "Marathi",
+        // "mas_KE" => "Masai (Kenya)",
+        // "mas_TZ" => "Masai (Tanzania)",
+        // "mas" => "Masai",
+        // "mer_KE" => "Meru (Kenya)",
+        // "mer" => "Meru",
+        // "mfe_MU" => "Morisyen (Mauritius)",
+        // "mfe" => "Morisyen",
+        // "naq_NA" => "Nama (Namibia)",
+        // "naq" => "Nama",
+        // "ne_IN" => "Nepali (India)",
+        // "ne_NP" => "Nepali (Nepal)",
+        // "ne" => "Nepali",
+        // "nd_ZW" => "North Ndebele (Zimbabwe)",
+        // "nd" => "North Ndebele",
+        // "nb_NO" => "Norwegian Bokmål (Norway)",
+        // "nb" => "Norwegian Bokmål",
+        // "nn_NO" => "Norwegian Nynorsk (Norway)",
+        // "nn" => "Norwegian Nynorsk",
+        // "nyn_UG" => "Nyankole (Uganda)",
+        // "nyn" => "Nyankole",
+        // "or_IN" => "Oriya (India)",
+        // "or" => "Oriya",
+        // "om_ET" => "Oromo (Ethiopia)",
+        // "om_KE" => "Oromo (Kenya)",
+        // "om" => "Oromo",
+        // "ps_AF" => "Pashto (Afghanistan)",
+        // "ps" => "Pashto",
+        // "fa_AF" => "Persian (Afghanistan)",
+        // "fa_IR" => "Persian (Iran)",
+        // "fa" => "Persian",
+        // "pl_PL" => "Polish (Poland)",
+        // "pl" => "Polish",
+        // "pt_BR" => "Portuguese (Brazil)",
+        // "pt_GW" => "Portuguese (Guinea-Bissau)",
+        // "pt_MZ" => "Portuguese (Mozambique)",
+        // "pt_PT" => "Portuguese (Portugal)",
+        // "pt" => "Portuguese",
+        // "pa_Arab" => "Punjabi (Arabic)",
+        // "pa_Arab_PK" => "Punjabi (Arabic, Pakistan)",
+        // "pa_Guru" => "Punjabi (Gurmukhi)",
+        // "pa_Guru_IN" => "Punjabi (Gurmukhi, India)",
+        // "pa" => "Punjabi",
+        // "ro_MD" => "Romanian (Moldova)",
+        // "ro_RO" => "Romanian (Romania)",
+        'ro' => 'Romanian',
+        // "rm_CH" => "Romansh (Switzerland)",
+        // "rm" => "Romansh",
+        // "rof_TZ" => "Rombo (Tanzania)",
+        // "rof" => "Rombo",
+        // "ru_MD" => "Russian (Moldova)",
+        // "ru_RU" => "Russian (Russia)",
+        // "ru_UA" => "Russian (Ukraine)",
+        // "ru" => "Russian",
+        // "rwk_TZ" => "Rwa (Tanzania)",
+        // "rwk" => "Rwa",
+        // "saq_KE" => "Samburu (Kenya)",
+        // "saq" => "Samburu",
+        // "sg_CF" => "Sango (Central African Republic)",
+        // "sg" => "Sango",
+        // "seh_MZ" => "Sena (Mozambique)",
+        // "seh" => "Sena",
+        // "sr_Cyrl" => "Serbian (Cyrillic)",
+        // "sr_Cyrl_BA" => "Serbian (Cyrillic, Bosnia and Herzegovina)",
+        // "sr_Cyrl_ME" => "Serbian (Cyrillic, Montenegro)",
+        // "sr_Cyrl_RS" => "Serbian (Cyrillic, Serbia)",
+        // "sr_Latn" => "Serbian (Latin)",
+        // "sr_Latn_BA" => "Serbian (Latin, Bosnia and Herzegovina)",
+        // "sr_Latn_ME" => "Serbian (Latin, Montenegro)",
+        // "sr_Latn_RS" => "Serbian (Latin, Serbia)",
+        // "sr" => "Serbian",
+        // "sn_ZW" => "Shona (Zimbabwe)",
+        // "sn" => "Shona",
+        // "ii_CN" => "Sichuan Yi (China)",
+        // "ii" => "Sichuan Yi",
+        // "si_LK" => "Sinhala (Sri Lanka)",
+        // "si" => "Sinhala",
+        // "sk_SK" => "Slovak (Slovakia)",
+        // "sk" => "Slovak",
+        // "sl_SI" => "Slovenian (Slovenia)",
+        // "sl" => "Slovenian",
+        // "xog_UG" => "Soga (Uganda)",
+        // "xog" => "Soga",
+        // "so_DJ" => "Somali (Djibouti)",
+        // "so_ET" => "Somali (Ethiopia)",
+        // "so_KE" => "Somali (Kenya)",
+        // "so_SO" => "Somali (Somalia)",
+        // "so" => "Somali",
+        // "es_AR" => "Spanish (Argentina)",
+        // "es_BO" => "Spanish (Bolivia)",
+        // "es_CL" => "Spanish (Chile)",
+        // "es_CO" => "Spanish (Colombia)",
+        // "es_CR" => "Spanish (Costa Rica)",
+        // "es_DO" => "Spanish (Dominican Republic)",
+        // "es_EC" => "Spanish (Ecuador)",
+        // "es_SV" => "Spanish (El Salvador)",
+        // "es_GQ" => "Spanish (Equatorial Guinea)",
+        // "es_GT" => "Spanish (Guatemala)",
+        // "es_HN" => "Spanish (Honduras)",
+        // "es_419" => "Spanish (Latin America)",
+        // "es_MX" => "Spanish (Mexico)",
+        // "es_NI" => "Spanish (Nicaragua)",
+        // "es_PA" => "Spanish (Panama)",
+        // "es_PY" => "Spanish (Paraguay)",
+        // "es_PE" => "Spanish (Peru)",
+        // "es_PR" => "Spanish (Puerto Rico)",
+        // "es_ES" => "Spanish (Spain)",
+        // "es_US" => "Spanish (United States)",
+        // "es_UY" => "Spanish (Uruguay)",
+        // "es_VE" => "Spanish (Venezuela)",
+        // "es" => "Spanish",
+        // "sw_KE" => "Swahili (Kenya)",
+        // "sw_TZ" => "Swahili (Tanzania)",
+        // "sw" => "Swahili",
+        // "sv_FI" => "Swedish (Finland)",
+        // "sv_SE" => "Swedish (Sweden)",
+        // "sv" => "Swedish",
+        // "gsw_CH" => "Swiss German (Switzerland)",
+        // "gsw" => "Swiss German",
+        // "shi_Latn" => "Tachelhit (Latin)",
+        // "shi_Latn_MA" => "Tachelhit (Latin, Morocco)",
+        // "shi_Tfng" => "Tachelhit (Tifinagh)",
+        // "shi_Tfng_MA" => "Tachelhit (Tifinagh, Morocco)",
+        // "shi" => "Tachelhit",
+        // "dav_KE" => "Taita (Kenya)",
+        // "dav" => "Taita",
+        // "ta_IN" => "Tamil (India)",
+        // "ta_LK" => "Tamil (Sri Lanka)",
+        // "ta" => "Tamil",
+        // "te_IN" => "Telugu (India)",
+        // "te" => "Telugu",
+        // "teo_KE" => "Teso (Kenya)",
+        // "teo_UG" => "Teso (Uganda)",
+        // "teo" => "Teso",
+        // "th_TH" => "Thai (Thailand)",
+        // "th" => "Thai",
+        // "bo_CN" => "Tibetan (China)",
+        // "bo_IN" => "Tibetan (India)",
+        // "bo" => "Tibetan",
+        // "ti_ER" => "Tigrinya (Eritrea)",
+        // "ti_ET" => "Tigrinya (Ethiopia)",
+        // "ti" => "Tigrinya",
+        // "to_TO" => "Tonga (Tonga)",
+        // "to" => "Tonga",
+        // "tr_TR" => "Turkish (Turkey)",
+        // "tr" => "Turkish",
+        // "uk_UA" => "Ukrainian (Ukraine)",
+        // "uk" => "Ukrainian",
+        // "ur_IN" => "Urdu (India)",
+        // "ur_PK" => "Urdu (Pakistan)",
+        // "ur" => "Urdu",
+        // "uz_Arab" => "Uzbek (Arabic)",
+        // "uz_Arab_AF" => "Uzbek (Arabic, Afghanistan)",
+        // "uz_Cyrl" => "Uzbek (Cyrillic)",
+        // "uz_Cyrl_UZ" => "Uzbek (Cyrillic, Uzbekistan)",
+        // "uz_Latn" => "Uzbek (Latin)",
+        // "uz_Latn_UZ" => "Uzbek (Latin, Uzbekistan)",
+        // "uz" => "Uzbek",
+        // "vi_VN" => "Vietnamese (Vietnam)",
+        // "vi" => "Vietnamese",
+        // "vun_TZ" => "Vunjo (Tanzania)",
+        // "vun" => "Vunjo",
+        // "cy_GB" => "Welsh (United Kingdom)",
+        // "cy" => "Welsh",
+        // "yo_NG" => "Yoruba (Nigeria)",
+        // "yo" => "Yoruba",
+        // "zu_ZA" => "Zulu (South Africa)",
+        // "zu" => "Zulu"
+    ],
+
+    'view_namespaces' => [
+        'buttons' => [
+            'crud::buttons', // falls back to 'resources/views/vendor/backpack/crud/buttons'
+        ],
+        'columns' => [
+            'crud::columns', // falls back to 'resources/views/vendor/backpack/crud/columns'
+        ],
+        'fields' => [
+            'crud::fields', // falls back to 'resources/views/vendor/backpack/crud/fields'
+        ],
+        'filters' => [
+            'crud::filters', // falls back to 'resources/views/vendor/backpack/crud/filters'
+        ],
+    ],
+    // the uploaders for the `withFiles` macro
+    'uploaders' => [
+        'withFiles' => [
+            'image' => \Backpack\CRUD\app\Library\Uploaders\SingleBase64Image::class,
+            'upload' => \Backpack\CRUD\app\Library\Uploaders\SingleFile::class,
+            'upload_multiple' => \Backpack\CRUD\app\Library\Uploaders\MultipleFiles::class,
+        ],
+    ],
+
+    'file_name_generator' => \Backpack\CRUD\app\Library\Uploaders\Support\FileNameGenerator::class,
+
+];
diff --git a/config/backpack/operations/create.php b/config/backpack/operations/create.php
new file mode 100644 (file)
index 0000000..6d2463a
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Configurations for Backpack's CreateOperation.
+ *
+ * @see https://backpackforlaravel.com/docs/crud-operation-create
+ */
+
+return [
+    // Define the size/looks of the content div for all CRUDs
+    // To override per view use $this->crud->setCreateContentClass('class-string')
+    'contentClass' => 'col-md-12 bold-labels',
+
+    // When using tabbed forms (create & update), what kind of tabs would you like?
+    'tabsType' => 'horizontal', //options: horizontal, vertical
+
+    // How would you like the validation errors to be shown?
+    'groupedErrors' => true,
+    'inlineErrors' => true,
+
+    // when the page loads, put the cursor on the first input?
+    'autoFocusOnFirstField' => true,
+
+    // Where do you want to redirect the user by default, save?
+    // options: save_and_back, save_and_edit, save_and_new
+    'defaultSaveAction' => 'save_and_back',
+
+    // When the user chooses "save and back" or "save and new", show a bubble
+    // for the fact that the default save action has been changed?
+    'showSaveActionChange' => true, //options: true, false
+
+    // Should we show a cancel button to the user?
+    'showCancelButton' => true,
+
+    // Should we warn a user before leaving the page with unsaved changes?
+    'warnBeforeLeaving' => false,
+
+    // Before saving the entry, how would you like the request to be stripped?
+    //  - false - use Backpack's default (ONLY save inputs that have fields)
+    //  - invokable class - custom stripping (the return should be an array with input names)
+    // 'strippedRequest' => App\Http\Requests\StripBackpackRequest::class,
+];
diff --git a/config/backpack/operations/form.php b/config/backpack/operations/form.php
new file mode 100644 (file)
index 0000000..e21924a
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * Default configurations for custom form operations.
+ */
+
+return [
+    // Define the size/looks of the content div for all CRUDs
+    // To override per view use $this->crud->setCreateContentClass('class-string')
+    'contentClass' => 'col-md-12 bold-labels',
+
+    // When using tabbed forms (create & update), what kind of tabs would you like?
+    'tabsType' => 'horizontal', //options: horizontal, vertical
+
+    // How would you like the validation errors to be shown?
+    'groupedErrors' => true,
+    'inlineErrors' => true,
+
+    // when the page loads, put the cursor on the first input?
+    'autoFocusOnFirstField' => true,
+
+    // Where do you want to redirect the user by default, save?
+    'defaultSaveAction' => 'save_and_back',
+
+    // When the user chooses "save and back" or "save and new", show a bubble
+    // for the fact that the default save action has been changed?
+    'showSaveActionChange' => false, //options: true, false
+
+    // Should we show a cancel button to the user?
+    'showCancelButton' => true,
+
+    // Should we warn a user before leaving the page with unsaved changes?
+    'warnBeforeLeaving' => false,
+
+    // Before saving the entry, how would you like the request to be stripped?
+    //  - false - use Backpack's default (ONLY save inputs that have fields)
+    //  - invokable class - custom stripping (the return should be an array with input names)
+    // 'strippedRequest' => App\Http\Requests\StripBackpackRequest::class,
+];
diff --git a/config/backpack/operations/list.php b/config/backpack/operations/list.php
new file mode 100644 (file)
index 0000000..b1d227f
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * Configurations for Backpack's ListOperation.
+ *
+ * @see https://backpackforlaravel.com/docs/crud-operation-list
+ */
+
+return [
+    // Define the size/looks of the content div for all CRUDs
+    // To override per view use $this->crud->setListContentClass('class-string')
+    'contentClass' => 'col-md-12',
+
+    // enable the datatables-responsive plugin, which hides columns if they don't fit?
+    // if not, a horizontal scrollbar will be shown instead
+    'responsiveTable' => true,
+
+    // stores pagination and filters in localStorage for two hours
+    // whenever the user tries to see that page, backpack loads the previous pagination and filtration
+    'persistentTable' => true,
+
+    // show search bar in the top-right corner?
+    'searchableTable' => true,
+
+    // the time the table will be persisted in minutes
+    // after this the table info is cleared from localStorage.
+    // use false to never force localStorage clear. (default)
+    // keep in mind: User can clear their localStorage whenever they want.
+
+    'persistentTableDuration' => false,
+
+    // How many items should be shown by default by the Datatable?
+    // This value can be overwritten on a specific CRUD by calling
+    // $this->crud->setDefaultPageLength(50);
+    'defaultPageLength' => 10,
+
+    // A 1D array of options which will be used for both the displayed option and the value, or
+    // A 2D array in which the first array is used to define the value options and the second array the displayed options
+    // If a 2D array is used, strings in the right hand array will be automatically run through trans()
+    'pageLengthMenu' => [[10, 25, 50, 100, -1], [10, 25, 50, 100, 'backpack::crud.all']],
+
+    // How important is it for the action buttons to be visible?
+    // - 0 - most important
+    // - 1 - as important as bulk buttons
+    // - 2-3 - more important than the rest of the columns
+    // - 4 - less important than most columns
+    'actionsColumnPriority' => 1,
+
+    // Nest action buttons within a dropdown in actions column
+    'lineButtonsAsDropdown' => false,
+
+    // Show a "Reset" button next to the List operation subheading
+    // (Showing 1 to 25 of 9999 entries. Reset)
+    // that allows the user to erase local storage for that datatable,
+    // thus clearing any searching, filtering or pagination that has been
+    // remembered and persisted using persistentTable
+    'resetButton' => true,
+
+    // The query operator that is used to search on the table.
+    // If you are using PostgreSQL you might want to change
+    // to `ilike` for case-insensitive search
+    'searchOperator' => 'like',
+
+    // Display the `Showing X of XX entries (filtered  from X entries)`?
+    // Setting this to false will improve performance on big datasets.
+    'showEntryCount' => true,
+];
diff --git a/config/backpack/operations/reorder.php b/config/backpack/operations/reorder.php
new file mode 100644 (file)
index 0000000..76f2b2f
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * Configurations for Backpack's ReorderOperation.
+ *
+ * @see https://backpackforlaravel.com/docs/crud-operation-reorder
+ */
+
+return [
+    // Define the size/looks of the content div for all CRUDs
+    // To override per Controller use $this->crud->setReorderContentClass('class-string')
+    'contentClass' => 'col-md-12 col-md-offset-2',
+];
diff --git a/config/backpack/operations/show.php b/config/backpack/operations/show.php
new file mode 100644 (file)
index 0000000..cf4410a
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Configurations for Backpack's ShowOperation.
+ *
+ * @see https://backpackforlaravel.com/docs/crud-operation-show
+ */
+
+return [
+    // Define the size/looks of the content div for all CRUDs
+    // To override per Controller use $this->crud->setShowContentClass('class-string')
+    'contentClass' => 'col-md-12',
+
+    // Automatically add all columns from the db table?
+    'setFromDb' => true,
+
+    // Automatically add created_at and updated_at columns, if model has timestamps?
+    'timestamps' => true,
+
+    // If model has SoftDeletes, allow the admin to access the Show page for
+    // soft deleted items & add a deleted_at column to ShowOperation?
+    'softDeletes' => false,
+
+    // Enable to group columns in tabs
+    'tabsEnabled' => false,
+
+    // When using tabbed forms (create & update), what kind of tabs would you like?
+    'tabsType' => 'horizontal', //options: horizontal, vertical
+];
diff --git a/config/backpack/operations/update.php b/config/backpack/operations/update.php
new file mode 100644 (file)
index 0000000..e099f10
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Configurations for Backpack's UpdateOperation.
+ *
+ * @see https://backpackforlaravel.com/docs/crud-operation-update
+ */
+
+return [
+    // Define the size/looks of the content div for all CRUDs
+    // To override per view use $this->crud->setEditContentClass('class-string')
+    'contentClass' => 'col-md-12 bold-labels',
+
+    // When using tabbed forms (create & update), what kind of tabs would you like?
+    'tabsType' => 'horizontal', //options: horizontal, vertical
+
+    // How would you like the validation errors to be shown?
+    'groupedErrors' => true,
+    'inlineErrors' => true,
+
+    // when the page loads, put the cursor on the first input?
+    'autoFocusOnFirstField' => true,
+
+    // Where do you want to redirect the user by default, save?
+    // options: save_and_back, save_and_edit, save_and_new
+    'defaultSaveAction' => 'save_and_back',
+
+    // When the user chooses "save and back" or "save and new", show a bubble
+    // for the fact that the default save action has been changed?
+    'showSaveActionChange' => true, //options: true, false
+
+    // Should we show a cancel button to the user?
+    'showCancelButton' => true,
+
+    // Should we warn a user before leaving the page with unsaved changes?
+    'warnBeforeLeaving' => false,
+
+    // Before saving the entry, how would you like the request to be stripped?
+    //  - false - use Backpack's default (ONLY save inputs that have fields)
+    //  - invokable class - custom stripping (the return should be an array with input names)
+    // 'strippedRequest' => App\Http\Requests\StripBackpackRequest::class,
+];
diff --git a/config/backpack/permissionmanager.php b/config/backpack/permissionmanager.php
new file mode 100644 (file)
index 0000000..b8a94e0
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Models
+    |--------------------------------------------------------------------------
+    |
+    | Models used in the User, Role and Permission CRUDs.
+    |
+    */
+
+    'models' => [
+        'user'       => config('backpack.base.user_model_fqn', \App\Models\User::class),
+        'permission' => Backpack\PermissionManager\app\Models\Permission::class,
+        'role'       => Backpack\PermissionManager\app\Models\Role::class,
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Disallow the user interface for creating/updating permissions or roles.
+    |--------------------------------------------------------------------------
+    | Roles and permissions are used in code by their name
+    | - ex: $user->hasPermissionTo('edit articles');
+    |
+    | So after the developer has entered all permissions and roles, the administrator should either:
+    | - not have access to the panels
+    | or
+    | - creating and updating should be disabled
+    */
+
+    'allow_permission_create' => true,
+    'allow_permission_update' => true,
+    'allow_permission_delete' => true,
+    'allow_role_create'       => true,
+    'allow_role_update'       => true,
+    'allow_role_delete'       => true,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Multiple-guards functionality
+    |--------------------------------------------------------------------------
+    |
+    */
+    'multiple_guards' => false,
+
+];
diff --git a/config/backpack/theme-tabler.php b/config/backpack/theme-tabler.php
new file mode 100644 (file)
index 0000000..c6fb196
--- /dev/null
@@ -0,0 +1,174 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Theme Configuration Values
+    |--------------------------------------------------------------------------
+    |
+    | The file provides extra configs on top of config/backpack/ui.php
+    |
+    | Any value set here will override the ones defined in
+    | config/backpack/ui.php when this theme is in use.
+    |
+    */
+
+    /**
+     * 1st layer of customization
+     *
+     * Simple pick a layout and let Backpack decide the best look for it.
+     * No extra step is required.
+     *
+     * Possible values: horizontal, horizontal_dark, horizontal_overlap, vertical,
+     * vertical_dark, vertical_transparent (legacy theme), right_vertical, right_vertical_dark, right_vertical_transparent
+     */
+    'layout' => 'horizontal_overlap',
+
+    /**
+     * Pick a login page layout.
+     * Possible values: default, illustration, cover
+     */
+    'auth_layout' => 'default', // default, illustration, cover
+
+    /**
+     * Here you can easily load your own extra css styles.
+     * Note: if you want to customize the style to create your own custom skin colors:
+     *   - make a copy of the file "vendor/backpack/theme-tabler/resources/assets/css/colors.css" into your project
+     *   - adjust colors variables as you wish
+     *   - replace "base_path('vendor/backpack/theme-tabler/resources/assets/css/colors.css')," with the path to the file created above
+     *   - boom!
+     */
+    'styles' => [
+        base_path('vendor/backpack/theme-tabler/resources/assets/css/color-adjustments.css'),
+        base_path('vendor/backpack/theme-tabler/resources/assets/css/colors.css'),
+    ],
+
+    /**
+     * 2nd Layer of customization
+     *
+     * If you need to further customize the way your panel looks,
+     * these options will help you achieve that.
+     */
+    'options' => [
+        /**
+         * The available color modes.
+         */
+        'colorModes' => [
+            'system' => 'la-desktop',
+            'light' => 'la-sun',
+            'dark' => 'la-moon',
+        ],
+
+        /**
+         * The color mode used by default.
+         */
+        'defaultColorMode' => 'system', // system, light, dark
+
+        /**
+         * When true, a switch is displayed to let admins choose their favorite theme mode.
+         * When false, the theme will only use the "defaultColorMode" set above.
+         * In case "defaultColorMode" is null, system is the default.
+         */
+        'showColorModeSwitcher' => true,
+
+        /**
+         * Fix the top-header component (present in "vertical_transparent") and the menu when the layout type is set as "horizontal".
+         * This value is skipped when the layout type is horizontal-overlap, using false as default.
+         */
+        'useStickyHeader' => false,
+
+        /**
+         * When true, the content area will take the whole screen width.
+         */
+        'useFluidContainers' => false,
+
+        /**
+         * When true, the sidebar content for vertical layouts will not scroll with the rest of the content.
+         */
+        'sidebarFixed' => false,
+
+        /**
+         * When true, horizontal layouts will display the classic top bar on top to free some space when multiple nav items are used.
+         */
+        'doubleTopBarInHorizontalLayouts' => false,
+
+        /**
+         * When true, the password input will have a toggle button to show/hide the password.
+         */
+        'showPasswordVisibilityToggler' => false,
+    ],
+
+    /**
+     * 3rd Layer of customization
+     *
+     * In case the first two steps were not enough, here you have full control over
+     * the classes that make up the look of your panel.
+     */
+    'classes' => [
+        /**
+         * Use this to pass classes to the <body> HTML element, on all pages.
+         */
+        'body' => null,
+
+        /**
+         * For background colors use:
+         * bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info, bg-blue, bg-light-blue,
+         * bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white.
+         *
+         * For links to be visible on different background colors use: "navbar-dark", "navbar-light".
+         *
+         */
+        'topHeader' => null,
+
+        /**
+         * Applies only for Vertical Menu Layout
+         * For standard sidebar look (transparent):
+         *      - Remove "navbar-dark/light"
+         *      - Remove "navbar-light/dark" from 'classes.topHeader' and instead use "bg-light"
+         * You can also add a background class like bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success,
+         * bg-info, bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan
+         */
+        'sidebar' => null,
+
+        /**
+         * Used in the top container menu when the layout is of horizontal type.
+         */
+        'menuHorizontalContainer' => null,
+
+        /**
+         * Used in the top menu content when the layout is of horizontal type.
+         */
+        'menuHorizontalContent' => null,
+
+        /**
+         * Make transparent with footer-transparent.
+         * Hide it with d-none.
+         *
+         * Change background color with bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info,
+         * bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white.
+         */
+        'footer' => null,
+
+        /**
+         * Use this to pass classes to the table displayed in List Operation
+         * It defaults to: "table table-striped table-hover nowrap rounded card-table table-vcenter card-table shadow-xs border-xs"
+         */
+        'table' => null,
+
+        /**
+         * Use this to pass classes to the table wrapper component displayed in List Operation
+         */
+        'tableWrapper' => null,
+    ],
+
+    /**
+     * 4th Layer of customization
+     *
+     * Alright, if nothing so far met your need, then you still have an easy way to build
+     * a custom layout using the already existing components of this theme.
+     *
+     * 1. Create a new blade file in resources/views/layouts/your-custom-layout.blade.php
+     * 2. Replace the value of layout on this file with "your-custom-layout"
+     * 3. Customize the blade and place components such as sidebar, header, top-bar, where you need them!
+     */
+];
diff --git a/config/backpack/ui.php b/config/backpack/ui.php
new file mode 100644 (file)
index 0000000..21ef8eb
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+
+return [
+
+    // IMPORTANT NOTE: The configurations here get overriden by theme config files.
+    //
+    // Eg. If you're using theme-tabler and config/backpack/theme-tabler.php
+    // has "breadcrumbs" set as false, then THAT value will be used instead
+    // of the value in this file.
+
+    /*
+    |--------------------------------------------------------------------------
+    | Theme (User Interface)
+    |--------------------------------------------------------------------------
+    */
+    // Change the view namespace in order to load a different theme than the one Backpack provides.
+    // You can create child themes yourself, by creating a view folder anywhere in your resources/views
+    // and choosing that view_namespace instead of the default one. Backpack will load a file from there
+    // if it exists, otherwise it will load it from the fallback namespace.
+
+    'view_namespace' => 'backpack.theme-tabler::',
+    'view_namespace_fallback' => 'backpack.theme-tabler::',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Look & feel customizations
+    |--------------------------------------------------------------------------
+    |
+    | To make the UI feel yours.
+    |
+    | Note that values set here might be overriden by theme config files
+    | (eg. config/backpack/theme-tabler.php) when that theme is in use.
+    |
+    */
+
+    // Date & Datetime Format Syntax: https://carbon.nesbot.com/docs/#api-localization
+    'default_date_format' => 'D MMM YYYY',
+    'default_datetime_format' => 'D MMM YYYY, HH:mm',
+
+    // Direction, according to language
+    // (left-to-right vs right-to-left)
+    'html_direction' => 'ltr',
+
+    // ----
+    // HEAD
+    // ----
+
+    // Project name - shown in the window title
+    'project_name' => 'Backpack Admin Panel',
+
+    // Content of the HTML meta robots tag to prevent indexing and link following
+    'meta_robots_content' => 'noindex, nofollow',
+
+    // ------
+    // HEADER
+    // ------
+
+    // When clicking on the admin panel's top-left logo/name,
+    // where should the user be redirected?
+    // The string below will be passed through the url() helper.
+    // - default: '' (project root)
+    // - alternative: 'admin' (the admin's dashboard)
+    'home_link' => '',
+
+    // Menu logo. You can replace this with an <img> tag if you have a logo.
+    'project_logo' => '<b>Back</b>pack',
+
+    // Show / hide breadcrumbs on admin panel pages.
+    'breadcrumbs' => true,
+
+    // ------
+    // FOOTER
+    // ------
+
+    // Developer or company name. Shown in footer.
+    'developer_name' => 'Cristian Tabacitu',
+
+    // Developer website. Link in footer. Type false if you want to hide it.
+    'developer_link' => 'http://tabacitu.ro',
+
+    // Show powered by Laravel Backpack in the footer? true/false
+    'show_powered_by' => true,
+
+    // ---------
+    // DASHBOARD
+    // ---------
+
+    // Show "Getting Started with Backpack" info block?
+    'show_getting_started' => env('APP_ENV') == 'local',
+
+    // -------------
+    // GLOBAL STYLES
+    // -------------
+
+    // CSS files that are loaded in all pages, using Laravel's asset() helper
+    'styles' => [
+        // 'styles/example.css',
+        // 'https://some-cdn.com/example.css',
+    ],
+
+    // CSS files that are loaded in all pages, using Laravel's mix() helper
+    'mix_styles' => [ // file_path => manifest_directory_path
+        // 'css/app.css' => '',
+    ],
+
+    // CSS files that are loaded in all pages, using Laravel's @vite() helper
+    // Please note that support for Vite was added in Laravel 9.19. Earlier versions are not able to use this feature.
+    'vite_styles' => [ // resource file_path
+        // 'resources/css/app.css',
+    ],
+
+    // --------------
+    // GLOBAL SCRIPTS
+    // --------------
+
+    // JS files that are loaded in all pages, using Laravel's asset() helper
+    'scripts' => [
+        // 'js/example.js',
+        // 'https://unpkg.com/vue@2.4.4/dist/vue.min.js',
+        // 'https://unpkg.com/react@16/umd/react.production.min.js',
+        // 'https://unpkg.com/react-dom@16/umd/react-dom.production.min.js',
+    ],
+
+    // JS files that are loaded in all pages, using Laravel's mix() helper
+    'mix_scripts' => [ // file_path => manifest_directory_path
+        // 'js/app.js' => '',
+    ],
+
+    // JS files that are loaded in all pages, using Laravel's @vite() helper
+    'vite_scripts' => [ // resource file_path
+        // 'resources/js/app.js',
+    ],
+
+    'classes' => [
+        /**
+         * Use this as fallback config for themes to pass classes to the table displayed in List Operation
+         * It defaults to: "table table-striped table-hover nowrap rounded card-table table-vcenter card-table shadow-xs border-xs".
+         */
+        'table' => null,
+
+        /**
+         * Use this as fallback config for themes to pass classes to the table wrapper component displayed in List Operation.
+         */
+        'tableWrapper' => null,
+    ],
+
+];
diff --git a/config/gravatar.php b/config/gravatar.php
new file mode 100644 (file)
index 0000000..3555f1b
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+return [
+       'default' => [
+
+               // By default, images are presented at 80px by 80px if no size parameter is supplied.
+               // You may request a specific image size, which will be dynamically delivered from Gravatar
+               // by passing a single pixel dimension (since the images are square):
+               'size'   => 80,
+
+               // the fallback image, can be a string or a url
+               // for more info, visit: http://en.gravatar.com/site/implement/images/#default-image
+               'fallback' => 'mp',
+
+               // would you like to return a https://... image
+               'secure' => false,
+
+               // Gravatar allows users to self-rate their images so that they can indicate if an image
+               // is appropriate for a certain audience. By default, only 'G' rated images are displayed
+               // unless you indicate that you would like to see higher ratings.
+               // Available options:
+               // g: suitable for display on all websites with any audience type.
+               // pg: may contain rude gestures, provocatively dressed individuals, the lesser swear words, or mild violence.
+               // r: may contain such things as harsh profanity, intense violence, nudity, or hard drug use.
+               // x: may contain hardcore sexual imagery or extremely disturbing violence.
+               'maximumRating' => 'g',
+
+               // If for some reason you wanted to force the default image to always load, you can do that setting this to true
+               'forceDefault' => false,
+
+               // If you require a file-type extension (some places do) then you may also add an (optional) .jpg extension to that URL
+               'forceExtension' => 'jpg',
+       ]
+];
diff --git a/config/media-library.php b/config/media-library.php
new file mode 100644 (file)
index 0000000..a5fc867
--- /dev/null
@@ -0,0 +1,261 @@
+<?php
+
+return [
+
+    /*
+     * The disk on which to store added files and derived images by default. Choose
+     * one or more of the disks you've configured in config/filesystems.php.
+     */
+    'disk_name' => env('MEDIA_DISK', 'public'),
+
+    /*
+     * The maximum file size of an item in bytes.
+     * Adding a larger file will result in an exception.
+     */
+    'max_file_size' => 1024 * 1024 * 10, // 10MB
+
+    /*
+     * This queue connection will be used to generate derived and responsive images.
+     * Leave empty to use the default queue connection.
+     */
+    'queue_connection_name' => env('QUEUE_CONNECTION', 'sync'),
+
+    /*
+     * This queue will be used to generate derived and responsive images.
+     * Leave empty to use the default queue.
+     */
+    'queue_name' => '',
+
+    /*
+     * By default all conversions will be performed on a queue.
+     */
+    'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true),
+
+    /*
+     * The fully qualified class name of the media model.
+     */
+    'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class,
+
+    /*
+     * When enabled, media collections will be serialised using the default
+     * laravel model serialization behaviour.
+     * 
+     * Keep this option disabled if using Media Library Pro components (https://medialibrary.pro)
+     */
+    'use_default_collection_serialization' => false,
+
+    /*
+     * The fully qualified class name of the model used for temporary uploads.
+     *
+     * This model is only used in Media Library Pro (https://medialibrary.pro)
+     */
+    'temporary_upload_model' => Spatie\MediaLibraryPro\Models\TemporaryUpload::class,
+
+    /*
+     * When enabled, Media Library Pro will only process temporary uploads that were uploaded
+     * in the same session. You can opt to disable this for stateless usage of
+     * the pro components.
+     */
+    'enable_temporary_uploads_session_affinity' => true,
+
+    /*
+     * When enabled, Media Library pro will generate thumbnails for uploaded file.
+     */
+    'generate_thumbnails_for_temporary_uploads' => true,
+
+    /*
+     * This is the class that is responsible for naming generated files.
+     */
+    'file_namer' => Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer::class,
+
+    /*
+     * The class that contains the strategy for determining a media file's path.
+     */
+    'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class,
+
+    /*
+     * The class that contains the strategy for determining how to remove files.
+     */
+    'file_remover_class' => Spatie\MediaLibrary\Support\FileRemover\DefaultFileRemover::class,
+
+    /*
+     * Here you can specify which path generator should be used for the given class.
+     */
+    'custom_path_generators' => [
+        // Model::class => PathGenerator::class
+        // or
+        // 'model_morph_alias' => PathGenerator::class
+    ],
+
+    /*
+     * When urls to files get generated, this class will be called. Use the default
+     * if your files are stored locally above the site root or on s3.
+     */
+    'url_generator' => Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator::class,
+
+    /*
+     * Moves media on updating to keep path consistent. Enable it only with a custom
+     * PathGenerator that uses, for example, the media UUID.
+     */
+    'moves_media_on_update' => false,
+
+    /*
+     * Whether to activate versioning when urls to files get generated.
+     * When activated, this attaches a ?v=xx query string to the URL.
+     */
+    'version_urls' => false,
+
+    /*
+     * The media library will try to optimize all converted images by removing
+     * metadata and applying a little bit of compression. These are
+     * the optimizers that will be used by default.
+     */
+    'image_optimizers' => [
+        Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [
+            '-m85', // set maximum quality to 85%
+            '--force', // ensure that progressive generation is always done also if a little bigger
+            '--strip-all', // this strips out all text information such as comments and EXIF data
+            '--all-progressive', // this will make sure the resulting image is a progressive one
+        ],
+        Spatie\ImageOptimizer\Optimizers\Pngquant::class => [
+            '--force', // required parameter for this package
+        ],
+        Spatie\ImageOptimizer\Optimizers\Optipng::class => [
+            '-i0', // this will result in a non-interlaced, progressive scanned image
+            '-o2', // this set the optimization level to two (multiple IDAT compression trials)
+            '-quiet', // required parameter for this package
+        ],
+        Spatie\ImageOptimizer\Optimizers\Svgo::class => [
+            '--disable=cleanupIDs', // disabling because it is known to cause troubles
+        ],
+        Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [
+            '-b', // required parameter for this package
+            '-O3', // this produces the slowest but best results
+        ],
+        Spatie\ImageOptimizer\Optimizers\Cwebp::class => [
+            '-m 6', // for the slowest compression method in order to get the best compression.
+            '-pass 10', // for maximizing the amount of analysis pass.
+            '-mt', // multithreading for some speed improvements.
+            '-q 90', //quality factor that brings the least noticeable changes.
+        ],
+        Spatie\ImageOptimizer\Optimizers\Avifenc::class => [
+            '-a cq-level=23', // constant quality level, lower values mean better quality and greater file size (0-63).
+            '-j all', // number of jobs (worker threads, "all" uses all available cores).
+            '--min 0', // min quantizer for color (0-63).
+            '--max 63', // max quantizer for color (0-63).
+            '--minalpha 0', // min quantizer for alpha (0-63).
+            '--maxalpha 63', // max quantizer for alpha (0-63).
+            '-a end-usage=q', // rate control mode set to Constant Quality mode.
+            '-a tune=ssim', // SSIM as tune the encoder for distortion metric.
+        ],
+    ],
+
+    /*
+     * These generators will be used to create an image of media files.
+     */
+    'image_generators' => [
+        Spatie\MediaLibrary\Conversions\ImageGenerators\Image::class,
+        Spatie\MediaLibrary\Conversions\ImageGenerators\Webp::class,
+        Spatie\MediaLibrary\Conversions\ImageGenerators\Avif::class,
+        Spatie\MediaLibrary\Conversions\ImageGenerators\Pdf::class,
+        Spatie\MediaLibrary\Conversions\ImageGenerators\Svg::class,
+        Spatie\MediaLibrary\Conversions\ImageGenerators\Video::class,
+    ],
+
+    /*
+     * The path where to store temporary files while performing image conversions.
+     * If set to null, storage_path('media-library/temp') will be used.
+     */
+    'temporary_directory_path' => null,
+
+    /*
+     * The engine that should perform the image conversions.
+     * Should be either `gd` or `imagick`.
+     */
+    'image_driver' => env('IMAGE_DRIVER', 'gd'),
+
+    /*
+     * FFMPEG & FFProbe binaries paths, only used if you try to generate video
+     * thumbnails and have installed the php-ffmpeg/php-ffmpeg composer
+     * dependency.
+     */
+    'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'),
+    'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'),
+
+    /*
+     * Here you can override the class names of the jobs used by this package. Make sure
+     * your custom jobs extend the ones provided by the package.
+     */
+    'jobs' => [
+        'perform_conversions' => Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob::class,
+        'generate_responsive_images' => Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class,
+    ],
+
+    /*
+     * When using the addMediaFromUrl method you may want to replace the default downloader.
+     * This is particularly useful when the url of the image is behind a firewall and
+     * need to add additional flags, possibly using curl.
+     */
+    'media_downloader' => Spatie\MediaLibrary\Downloaders\DefaultDownloader::class,
+
+    'remote' => [
+        /*
+         * Any extra headers that should be included when uploading media to
+         * a remote disk. Even though supported headers may vary between
+         * different drivers, a sensible default has been provided.
+         *
+         * Supported by S3: CacheControl, Expires, StorageClass,
+         * ServerSideEncryption, Metadata, ACL, ContentEncoding
+         */
+        'extra_headers' => [
+            'CacheControl' => 'max-age=604800',
+        ],
+    ],
+
+    'responsive_images' => [
+        /*
+         * This class is responsible for calculating the target widths of the responsive
+         * images. By default we optimize for filesize and create variations that each are 30%
+         * smaller than the previous one. More info in the documentation.
+         *
+         * https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images
+         */
+        'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class,
+
+        /*
+         * By default rendering media to a responsive image will add some javascript and a tiny placeholder.
+         * This ensures that the browser can already determine the correct layout.
+         */
+        'use_tiny_placeholders' => true,
+
+        /*
+         * This class will generate the tiny placeholder used for progressive image loading. By default
+         * the media library will use a tiny blurred jpg image.
+         */
+        'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class,
+    ],
+
+    /*
+     * When enabling this option, a route will be registered that will enable
+     * the Media Library Pro Vue and React components to move uploaded files
+     * in a S3 bucket to their right place.
+     */
+    'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false),
+
+    /*
+     * When converting Media instances to response the media library will add
+     * a `loading` attribute to the `img` tag. Here you can set the default
+     * value of that attribute.
+     *
+     * Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction.
+     *
+     * More info: https://css-tricks.com/native-lazy-loading/
+     */
+    'default_loading_attribute_value' => null,
+
+    /*
+     * You can specify a prefix for that is used for storing all media.
+     * If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory.
+     */
+    'prefix' => env('MEDIA_PREFIX', ''),
+];
diff --git a/config/permission.php b/config/permission.php
new file mode 100644 (file)
index 0000000..5b6e184
--- /dev/null
@@ -0,0 +1,161 @@
+<?php
+
+return [
+
+    'models' => [
+
+        /*
+         * When using the "HasPermissions" trait from this package, we need to know which
+         * Eloquent model should be used to retrieve your permissions. Of course, it
+         * is often just the "Permission" model but you may use whatever you like.
+         *
+         * The model you want to use as a Permission model needs to implement the
+         * `Spatie\Permission\Contracts\Permission` contract.
+         */
+
+        'permission' => Spatie\Permission\Models\Permission::class,
+
+        /*
+         * When using the "HasRoles" trait from this package, we need to know which
+         * Eloquent model should be used to retrieve your roles. Of course, it
+         * is often just the "Role" model but you may use whatever you like.
+         *
+         * The model you want to use as a Role model needs to implement the
+         * `Spatie\Permission\Contracts\Role` contract.
+         */
+
+        'role' => Spatie\Permission\Models\Role::class,
+
+    ],
+
+    'table_names' => [
+
+        /*
+         * When using the "HasRoles" trait from this package, we need to know which
+         * table should be used to retrieve your roles. We have chosen a basic
+         * default value but you may easily change it to any table you like.
+         */
+
+        'roles' => 'roles',
+
+        /*
+         * When using the "HasPermissions" trait from this package, we need to know which
+         * table should be used to retrieve your permissions. We have chosen a basic
+         * default value but you may easily change it to any table you like.
+         */
+
+        'permissions' => 'permissions',
+
+        /*
+         * When using the "HasPermissions" trait from this package, we need to know which
+         * table should be used to retrieve your models permissions. We have chosen a
+         * basic default value but you may easily change it to any table you like.
+         */
+
+        'model_has_permissions' => 'model_has_permissions',
+
+        /*
+         * When using the "HasRoles" trait from this package, we need to know which
+         * table should be used to retrieve your models roles. We have chosen a
+         * basic default value but you may easily change it to any table you like.
+         */
+
+        'model_has_roles' => 'model_has_roles',
+
+        /*
+         * When using the "HasRoles" trait from this package, we need to know which
+         * table should be used to retrieve your roles permissions. We have chosen a
+         * basic default value but you may easily change it to any table you like.
+         */
+
+        'role_has_permissions' => 'role_has_permissions',
+    ],
+
+    'column_names' => [
+        /*
+         * Change this if you want to name the related pivots other than defaults
+         */
+        'role_pivot_key' => null, //default 'role_id',
+        'permission_pivot_key' => null, //default 'permission_id',
+
+        /*
+         * Change this if you want to name the related model primary key other than
+         * `model_id`.
+         *
+         * For example, this would be nice if your primary keys are all UUIDs. In
+         * that case, name this `model_uuid`.
+         */
+
+        'model_morph_key' => 'model_id',
+
+        /*
+         * Change this if you want to use the teams feature and your related model's
+         * foreign key is other than `team_id`.
+         */
+
+        'team_foreign_key' => 'team_id',
+    ],
+
+    /*
+     * When set to true, the method for checking permissions will be registered on the gate.
+     * Set this to false, if you want to implement custom logic for checking permissions.
+     */
+
+    'register_permission_check_method' => true,
+
+    /*
+     * When set to true the package implements teams using the 'team_foreign_key'. If you want
+     * the migrations to register the 'team_foreign_key', you must set this to true
+     * before doing the migration. If you already did the migration then you must make a new
+     * migration to also add 'team_foreign_key' to 'roles', 'model_has_roles', and
+     * 'model_has_permissions'(view the latest version of package's migration file)
+     */
+
+    'teams' => false,
+
+    /*
+     * When set to true, the required permission names are added to the exception
+     * message. This could be considered an information leak in some contexts, so
+     * the default setting is false here for optimum safety.
+     */
+
+    'display_permission_in_exception' => false,
+
+    /*
+     * When set to true, the required role names are added to the exception
+     * message. This could be considered an information leak in some contexts, so
+     * the default setting is false here for optimum safety.
+     */
+
+    'display_role_in_exception' => false,
+
+    /*
+     * By default wildcard permission lookups are disabled.
+     */
+
+    'enable_wildcard_permission' => false,
+
+    'cache' => [
+
+        /*
+         * By default all permissions are cached for 24 hours to speed up performance.
+         * When permissions or roles are updated the cache is flushed automatically.
+         */
+
+        'expiration_time' => \DateInterval::createFromDateString('24 hours'),
+
+        /*
+         * The cache key used to store all permissions.
+         */
+
+        'key' => 'spatie.permission.cache',
+
+        /*
+         * You may optionally indicate a specific cache driver to use for permission and
+         * role caching using any of the `store` drivers listed in the cache.php config
+         * file. Using 'default' here means to use the `default` set in cache.php.
+         */
+
+        'store' => 'default',
+    ],
+];
diff --git a/config/revisionable.php b/config/revisionable.php
new file mode 100644 (file)
index 0000000..32e590c
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Revision Model
+    |--------------------------------------------------------------------------
+    */
+    'model' => Venturecraft\Revisionable\Revision::class,
+
+    'additional_fields' => [],
+
+];
diff --git a/database/migrations/2013_04_09_062329_create_revisions_table.php b/database/migrations/2013_04_09_062329_create_revisions_table.php
new file mode 100644 (file)
index 0000000..8d3d2d2
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+
+class CreateRevisionsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('revisions', function ($table) {
+            $table->bigIncrements('id');
+            $table->string('revisionable_type');
+            $table->unsignedBigInteger('revisionable_id');
+            $table->unsignedBigInteger('user_id')->nullable();
+            $table->string('key');
+            $table->text('old_value')->nullable();
+            $table->text('new_value')->nullable();
+            $table->timestamps();
+
+            $table->index(array('revisionable_id', 'revisionable_type'));
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('revisions');
+    }
+}
diff --git a/database/migrations/2020_03_31_114745_remove_backpackuser_model.php b/database/migrations/2020_03_31_114745_remove_backpackuser_model.php
new file mode 100644 (file)
index 0000000..1539c78
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+
+class RemoveBackpackuserModel extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        // establish the table names
+        $model_has_roles = config('permission.table_names.model_has_roles');
+        $model_has_permissions = config('permission.table_names.model_has_permissions');
+
+        // replace the BackpackUser model with User
+        if (\Illuminate\Support\Facades\Schema::hasTable($model_has_roles)) {
+            $this->replaceModels($model_has_roles);
+        }
+        if (\Illuminate\Support\Facades\Schema::hasTable($model_has_permissions)) {
+            $this->replaceModels($model_has_permissions);
+        }
+    }
+
+    public function replaceModels($table_name)
+    {
+        Log::info('Replacing BackpackUser model in '.$table_name);
+
+        // if you've ended up with duplicate entries (both for App\User and App\Models\BackpackUser)
+        // we can just delete them
+        $userEntries = DB::table($table_name)
+            ->where('model_type', "App\User")
+            ->get();
+
+        foreach ($userEntries as $entry) {
+            DB::table($table_name)
+                ->where('role_id', $entry->role_id)
+                ->where('model_type', 'App\Models\BackpackUser')
+                ->where('model_id', $entry->model_id)
+                ->delete();
+        }
+
+        // for the rest of them, we can just replace the BackpackUser model with User
+        DB::table($table_name)
+            ->where('model_type', "App\Models\BackpackUser")
+            ->update([
+                'model_type' => "App\User",
+            ]);
+    }
+}
diff --git a/database/migrations/2024_01_30_153251_create_media_table.php b/database/migrations/2024_01_30_153251_create_media_table.php
new file mode 100644 (file)
index 0000000..3230389
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    public function up(): void
+    {
+        Schema::create('media', function (Blueprint $table) {
+            $table->id();
+
+            $table->morphs('model');
+            $table->uuid('uuid')->nullable()->unique();
+            $table->string('collection_name');
+            $table->string('name');
+            $table->string('file_name');
+            $table->string('mime_type')->nullable();
+            $table->string('disk');
+            $table->string('conversions_disk')->nullable();
+            $table->unsignedBigInteger('size');
+            $table->json('manipulations');
+            $table->json('custom_properties');
+            $table->json('generated_conversions');
+            $table->json('responsive_images');
+            $table->unsignedInteger('order_column')->nullable()->index();
+
+            $table->nullableTimestamps();
+        });
+    }
+};
diff --git a/database/migrations/2024_01_30_153323_create_permission_tables.php b/database/migrations/2024_01_30_153323_create_permission_tables.php
new file mode 100644 (file)
index 0000000..04c3278
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+use Spatie\Permission\PermissionRegistrar;
+
+class CreatePermissionTables extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        $tableNames = config('permission.table_names');
+        $columnNames = config('permission.column_names');
+        $teams = config('permission.teams');
+
+        if (empty($tableNames)) {
+            throw new \Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');
+        }
+        if ($teams && empty($columnNames['team_foreign_key'] ?? null)) {
+            throw new \Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.');
+        }
+
+        Schema::create($tableNames['permissions'], function (Blueprint $table) {
+            $table->bigIncrements('id'); // permission id
+            $table->string('name');       // For MySQL 8.0 use string('name', 125);
+            $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
+            $table->timestamps();
+
+            $table->unique(['name', 'guard_name']);
+        });
+
+        Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) {
+            $table->bigIncrements('id'); // role id
+            if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing
+                $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
+                $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');
+            }
+            $table->string('name');       // For MySQL 8.0 use string('name', 125);
+            $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
+            $table->timestamps();
+            if ($teams || config('permission.testing')) {
+                $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
+            } else {
+                $table->unique(['name', 'guard_name']);
+            }
+        });
+
+        Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
+            $table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
+
+            $table->string('model_type');
+            $table->unsignedBigInteger($columnNames['model_morph_key']);
+            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');
+
+            $table->foreign(PermissionRegistrar::$pivotPermission)
+                ->references('id') // permission id
+                ->on($tableNames['permissions'])
+                ->onDelete('cascade');
+            if ($teams) {
+                $table->unsignedBigInteger($columnNames['team_foreign_key']);
+                $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');
+
+                $table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
+                    'model_has_permissions_permission_model_type_primary');
+            } else {
+                $table->primary([PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
+                    'model_has_permissions_permission_model_type_primary');
+            }
+
+        });
+
+        Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
+            $table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
+
+            $table->string('model_type');
+            $table->unsignedBigInteger($columnNames['model_morph_key']);
+            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');
+
+            $table->foreign(PermissionRegistrar::$pivotRole)
+                ->references('id') // role id
+                ->on($tableNames['roles'])
+                ->onDelete('cascade');
+            if ($teams) {
+                $table->unsignedBigInteger($columnNames['team_foreign_key']);
+                $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');
+
+                $table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
+                    'model_has_roles_role_model_type_primary');
+            } else {
+                $table->primary([PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
+                    'model_has_roles_role_model_type_primary');
+            }
+        });
+
+        Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
+            $table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
+            $table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
+
+            $table->foreign(PermissionRegistrar::$pivotPermission)
+                ->references('id') // permission id
+                ->on($tableNames['permissions'])
+                ->onDelete('cascade');
+
+            $table->foreign(PermissionRegistrar::$pivotRole)
+                ->references('id') // role id
+                ->on($tableNames['roles'])
+                ->onDelete('cascade');
+
+            $table->primary([PermissionRegistrar::$pivotPermission, PermissionRegistrar::$pivotRole], 'role_has_permissions_permission_id_role_id_primary');
+        });
+
+        app('cache')
+            ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
+            ->forget(config('permission.cache.key'));
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        $tableNames = config('permission.table_names');
+
+        if (empty($tableNames)) {
+            throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
+        }
+
+        Schema::drop($tableNames['role_has_permissions']);
+        Schema::drop($tableNames['model_has_roles']);
+        Schema::drop($tableNames['model_has_permissions']);
+        Schema::drop($tableNames['roles']);
+        Schema::drop($tableNames['permissions']);
+    }
+}
diff --git a/lang/vendor/backpack/ar/backup.php b/lang/vendor/backpack/ar/backup.php
new file mode 100644 (file)
index 0000000..43b5d97
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'نسخة احتياطية',
+    'create_a_new_backup'            => 'إنشاء نسخة احتياطية جديدة',
+    'existing_backups'               => 'النسخ الاحتياطية الموجودة',
+    'date'                           => 'التاريخ',
+    'file_size'                      => 'حجم الملف',
+    'actions'                        => 'اجراءات',
+    'download'                       => 'تحميل',
+    'delete'                         => 'حذف',
+    'delete_confirm'                 => 'هل انت متأكد من حذف النسخة الاحتياطية؟',
+    'delete_confirmation_title'      => 'تم بالنجاح',
+    'delete_confirmation_message'    => 'تم حذف ملف النسخة الاحتياطية',
+    'delete_error_title'             => 'هناك خطأ',
+    'delete_error_message'           => 'ملف النسخة الاحتياطية لم يتم حذفه.',
+    'delete_cancel_title'            => 'كل شيئ على مايرام.',
+    'delete_cancel_message'          => 'ملف النسخة الاحتياطية لم يتم حذفه.',
+    'create_confirmation_title'      => 'تم عمل النسخ الاحتياطية بالنجاح',
+    'create_confirmation_message'    => 'سيتم اعادة اعادة تحميل الصفحة خلال 3 ثواني.',
+    'create_error_title'             => 'هناك خطأ في النسخة الاحتياطية',
+    'create_error_message'           => 'لا يمكن إنشاء ملف النسخة الاحتياطية.',
+    'create_warning_title'           => 'هناك خطأ غير معروف',
+    'create_warning_message'         => 'ربما لم يتم إنشاء النسخة الاحتياطية. يرجى التحقق من ملفات السجل للحصول على التفاصيل.',
+    'location'                       => 'الموقع',
+    'no_disks_configured'            => 'لايوجد أقراص تم تحددها في ملف config/backup.php',
+    'backup_doesnt_exist'            => 'ملف النسخ الاحتياطي غير موجود.',
+    'only_local_downloads_supported' => 'لايمكن تحميل النسخة الاحتياطية الا من القرص المحلي.',
+];
diff --git a/lang/vendor/backpack/ar/permissionmanager.php b/lang/vendor/backpack/ar/permissionmanager.php
new file mode 100644 (file)
index 0000000..e34c48f
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: ِAhmed Barabbud <a.a.barbod@gmail.com>
+    |
+    */
+    'name'                  => 'اسم',
+    'role'                  => 'وظيفة',
+    'roles'                 => 'وظائف',
+    'roles_have_permission' => 'الوظائف التي لديها هذه الصلاحية',
+    'permission_singular'   => 'الصلاحية',
+    'permission_plural'     => 'الصلاحيات',
+    'user_singular'         => 'المستخدم',
+    'user_plural'           => 'المستخدمين',
+    'email'                 => 'البريد الالكتروني',
+    'extra_permissions'     => 'الصلاحيات الاضافية',
+    'password'              => 'كلمة المرور',
+    'password_confirmation' => 'تأكيد كلمة المرور',
+    'user_role_permission'  => 'صلاحيات دور المستخدم',
+    'user'                  => 'المستخدم',
+    'users'                 => 'المستخدمين',
+    'guard_type'            => 'نوع الحماية',
+
+];
diff --git a/lang/vendor/backpack/da_DK/permissionmanager.php b/lang/vendor/backpack/da_DK/permissionmanager.php
new file mode 100644 (file)
index 0000000..50f5900
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Frederik Rabøl Madsen <frederik-rm@hotmail.com>
+    |
+    */
+    'name'                  => 'navn',
+    'role'                  => 'rolle',
+    'roles'                 => 'roller',
+    'roles_have_permission' => 'roller der har denne rettighed',
+    'permission_singular'   => 'rettighed',
+    'permission_plural'     => 'rettigheder',
+    'user_singular'         => 'bruger',
+    'user_plural'           => 'brugere',
+    'email'                 => 'E-mail',
+    'extra_permissions'     => 'yderligere rettigheder',
+    'password'              => 'password',
+    'password_confirmation' => 'gentag password',
+    'user_role_permission'  => 'bruger rolle rettigheder',
+    'user'                  => 'bruger',
+    'users'                 => 'brugere',
+
+];
diff --git a/lang/vendor/backpack/de/permissionmanager.php b/lang/vendor/backpack/de/permissionmanager.php
new file mode 100644 (file)
index 0000000..0ca1616
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Oliver Ziegler <oliver.ziegler@zoutapps.de>
+    |
+    */
+    'name'                  => 'Name',
+    'role'                  => 'Rolle',
+    'roles'                 => 'Rollen',
+    'roles_have_permission' => 'Rollen mit dieser Berechtigung',
+    'permission_singular'   => 'Berechtigung',
+    'permission_plural'     => 'Berechtigungen',
+    'user_singular'         => 'Nutzer',
+    'user_plural'           => 'Nutzer',
+    'email'                 => 'E-Mail',
+    'extra_permissions'     => 'Zusätzliche Berechtigungen',
+    'password'              => 'Passwort',
+    'password_confirmation' => 'Passwort bestätigen',
+    'user_role_permission'  => 'Nutzer Rollen Berechtigungen',
+    'user'                  => 'Nutzer',
+    'users'                 => 'Nutzer',
+
+];
diff --git a/lang/vendor/backpack/el/permissionmanager.php b/lang/vendor/backpack/el/permissionmanager.php
new file mode 100644 (file)
index 0000000..01571dc
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    |
+    */
+    'name'                  => 'Όνομα',
+    'role'                  => 'Ρόλος',
+    'roles'                 => 'Ρόλοι',
+    'roles_have_permission' => 'Ρόλοι με αυτό το δικαίωμα',
+    'permission_singular'   => 'δικαίωμα',
+    'permission_plural'     => 'Δικαιώματα',
+    'user_singular'         => 'Χρήστης',
+    'user_plural'           => 'Χρήστες',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Πρόσθετα δικαιώματα',
+    'password'              => 'Κωδικός',
+    'password_confirmation' => 'Επανάληψη κωδικού',
+    'user_role_permission'  => 'Ρόλοι και Δικαιώματα Χρήστη',
+    'user'                  => 'Χρήστης',
+    'users'                 => 'Χρήστες',
+
+];
diff --git a/lang/vendor/backpack/en/backup.php b/lang/vendor/backpack/en/backup.php
new file mode 100644 (file)
index 0000000..03b89fe
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Backup',
+    'backups'                        => 'Backups',
+    'create_a_new_backup'            => 'Create a new backup',
+    'existing_backups'               => 'Existing backups',
+    'date'                           => 'Date',
+    'file_size'                      => 'File size',
+    'actions'                        => 'Actions',
+    'download'                       => 'Download',
+    'delete'                         => 'Delete',
+    'delete_confirm'                 => 'Are you sure you want to delete this backup file?',
+    'delete_confirmation_title'      => 'Done',
+    'delete_confirmation_message'    => 'The backup file was deleted.',
+    'delete_error_title'             => 'Error',
+    'delete_error_message'           => 'The backup file has NOT been deleted.',
+    'delete_cancel_title'            => "It's ok",
+    'delete_cancel_message'          => 'The backup file has NOT been deleted.',
+    'create_confirmation_title'      => 'Backup process started.',
+    'create_error_title'             => 'Backup error',
+    'create_error_message'           => 'The backup file could NOT be created.',
+    'create_warning_title'           => 'Unknown error',
+    'create_warning_message'         => 'Your backup may NOT have been created. Please check log files for details.',
+    'location'                       => 'Location',
+    'no_disks_configured'            => 'No backup disks configured in config/backup.php',
+    'backup_doesnt_exist'            => "The backup file doesn't exist.",
+    'only_local_downloads_supported' => 'Only downloads from the Local filesystem are supported.',
+    'unknown_disk'                   => 'Unknown disk.',
+    'create_started_message'         => 'Please wait a few minutes for it to complete.',
+    'create_completed_title'         => 'Your backup is complete.',
+    'download_confirmation_title'    => 'Download process started.',
+    'download_error_title'           => 'Download error',
+];
diff --git a/lang/vendor/backpack/en/permissionmanager.php b/lang/vendor/backpack/en/permissionmanager.php
new file mode 100644 (file)
index 0000000..3e41cbd
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>
+    |
+    */
+    'name'                  => 'Name',
+    'role'                  => 'Role',
+    'roles'                 => 'Roles',
+    'roles_have_permission' => 'Roles that have this permission',
+    'permission_singular'   => 'Permission',
+    'permission_plural'     => 'Permissions',
+    'user_singular'         => 'User',
+    'user_plural'           => 'Users',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Extra Permissions',
+    'password'              => 'Password',
+    'password_confirmation' => 'Password Confirmation',
+    'user_role_permission'  => 'User Roles & Permissions',
+    'user'                  => 'User',
+    'users'                 => 'Users',
+    'guard_type'            => 'Guard Type',
+
+];
diff --git a/lang/vendor/backpack/es/backup.php b/lang/vendor/backpack/es/backup.php
new file mode 100644 (file)
index 0000000..57e4fc3
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Copia de seguridad',
+    'backups'                        => 'Copias de seguridad',
+    'create_a_new_backup'            => 'Crear una copia de seguridad',
+    'existing_backups'               => 'Copias de seguridad existentes',
+    'date'                           => 'Fecha',
+    'file_size'                      => 'Tamaño del fichero',
+    'actions'                        => 'Acciones',
+    'download'                       => 'Descargar',
+    'delete'                         => 'Eliminar',
+    'delete_confirm'                 => '¿Estás seguro que quieres borrar esta copia de seguridad?',
+    'delete_confirmation_title'      => 'Confirmado',
+    'delete_confirmation_message'    => 'La copia de seguridad fue eliminada.',
+    'delete_error_title'             => 'Ups, ha ocurrido un error',
+    'delete_error_message'           => 'La copia de seguridad NO se pudo eliminar.',
+    'delete_cancel_title'            => 'La operación ha sido cancelada',
+    'delete_cancel_message'          => 'La copia de seguridad NO se pudo eliminar.',
+    'create_confirmation_title'      => 'Se ha completado la copia de seguridad',
+    'create_confirmation_message'    => 'Recargando la página en 3 segundos.',
+    'create_error_title'             => 'Error al realizar la copia de seguridad',
+    'create_error_message'           => 'La copia de seguridad NO se pudo crear.',
+    'create_warning_title'           => 'Estamos presentando problemas',
+    'create_warning_message'         => 'La copia de seguridad puede que no se haya realizado. Por favor verifica los logs para más detalles.',
+    'location'                       => 'Ubicación',
+    'no_disks_configured'            => 'No existe ningún disco configurado config/backup.php',
+    'backup_doesnt_exist'            => 'La copia de seguridad no existe.',
+    'only_local_downloads_supported' => 'Solo se permiten descargas del sistema de archivos local.',
+];
diff --git a/lang/vendor/backpack/es/permissionmanager.php b/lang/vendor/backpack/es/permissionmanager.php
new file mode 100644 (file)
index 0000000..02f6aff
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    |
+    */
+    'name'                  => 'Nombre',
+    'role'                  => 'Rol',
+    'roles'                 => 'Roles',
+    'roles_have_permission' => 'Roles con este permiso',
+    'permission_singular'   => 'Permiso',
+    'permission_plural'     => 'Permisos',
+    'user_singular'         => 'Usuario',
+    'user_plural'           => 'Usuarios',
+    'email'                 => 'Correo electrónico',
+    'extra_permissions'     => 'Permisos adicionales',
+    'password'              => 'Contraseña',
+    'password_confirmation' => 'Confirmación de contraseña',
+    'user_role_permission'  => 'Permisos del rol del usuario',
+    'user'                  => 'Usuario',
+    'users'                 => 'Usuarios',
+
+];
diff --git a/lang/vendor/backpack/fa/backup.php b/lang/vendor/backpack/fa/backup.php
new file mode 100644 (file)
index 0000000..3c33ec3
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'پشتیبان',
+    'create_a_new_backup'            => 'ایجاد پشتیبان جدید',
+    'existing_backups'               => 'پشتیبان‌های موجود',
+    'date'                           => 'تاریخ',
+    'file_size'                      => 'سایز پرونده',
+    'actions'                        => 'عملیات',
+    'download'                       => 'بارگیری',
+    'delete'                         => 'حذف',
+    'delete_confirm'                 => 'آیا شما از حذف این پرونده پشتیبان اطمینان دارید؟',
+    'delete_confirmation_title'      => 'انجام شد',
+    'delete_confirmation_message'    => 'پرونده پشتیبان با موفقیت حذف شد.',
+    'delete_error_title'             => 'خطا',
+    'delete_error_message'           => 'پرونده پشتیبان حذف نشده است.',
+    'delete_cancel_title'            => 'مشکلی نیست',
+    'delete_cancel_message'          => 'پرونده پشتیبان حذف نشده است.',
+    'create_confirmation_title'      => 'فرآیند پشتیبان‌گیری شروع شد.',
+    'create_confirmation_message'    => 'لطفا چند دقیقه صبر کنید تا کامل شود ، سپس صفحه را تازه کنید.',
+    'create_error_title'             => 'خطا پشتیبان',
+    'create_error_message'           => 'فایل پشتیبان نمی‌تواند ساخته شود.',
+    'create_warning_title'           => 'خطای نا مشخص',
+    'create_warning_message'         => 'نسخه پشتیبان شما ممکن است ایجاد نشده باشد. لطفاً پرونده ها را برای جزئیات بیشتر بررسی کنید.',
+    'location'                       => 'محل',
+    'no_disks_configured'            => 'دیسک پشتیبانی در config/backup.php تنظیم نشده است.',
+    'backup_doesnt_exist'            => 'پرونده پشتیبان وجود ندارد.',
+    'only_local_downloads_supported' => 'تنها دانلود از سیستم‌فایل محلی پشتیبانی می‌شود',
+];
diff --git a/lang/vendor/backpack/fr/backup.php b/lang/vendor/backpack/fr/backup.php
new file mode 100644 (file)
index 0000000..19a7672
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Sauvegarde',
+    'backups'                        => 'Sauvegardes',
+    'create_a_new_backup'            => 'Créer une nouvelle sauvegarde',
+    'existing_backups'               => 'Sauvegardes existantes',
+    'date'                           => 'Date',
+    'file_size'                      => 'Taille de fichier',
+    'actions'                        => 'Actions',
+    'download'                       => 'Télécharger',
+    'delete'                         => 'Supprimer',
+    'delete_confirm'                 => 'Etes-vous certain de vouloir supprimer ce fichier ?',
+    'delete_confirmation_title'      => 'Fait',
+    'delete_confirmation_message'    => 'Le fichier de sauvegarde a été supprimmé.',
+    'delete_error_title'             => 'Erreur',
+    'delete_error_message'           => 'Le fichier de sauvegarde n\'a PAS été supprimmé.',
+    'delete_cancel_title'            => "C'est ok",
+    'delete_cancel_message'          => 'Le fichier de sauvegarde n\'a PAS été supprimmé.',
+    'create_confirmation_title'      => 'Sauvegarde terminée',
+    'create_confirmation_message'    => 'Rechargement de cette page dans 3 secondes.',
+    'create_error_title'             => 'Erreur de sauvegarde',
+    'create_error_message'           => 'Le fichier de sauvegarde n\'a PAS pu être créer.',
+    'create_warning_title'           => 'Erreur inconnue',
+    'create_warning_message'         => 'Votre fichier de sauvegarde n\'a sans doute pas pu être créé. Regardez les logs pour plus de details.',
+    'location'                       => 'Emplacement',
+    'no_disks_configured'            => 'Aucun "backup disks" de configuré dans config/backup.php',
+    'backup_doesnt_exist'            => "Le fichier de sauvegarde n'existe pas.",
+    'only_local_downloads_supported' => 'Seuls les téléchargments à partir du système de fichier local sont supportés.',
+];
diff --git a/lang/vendor/backpack/fr/permissionmanager.php b/lang/vendor/backpack/fr/permissionmanager.php
new file mode 100644 (file)
index 0000000..5c392c5
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Julien Cauvin <contact@7ute.fr>
+    |
+    */
+    'name'                  => 'Nom',
+    'role'                  => 'Rôle',
+    'roles'                 => 'Rôles',
+    'roles_have_permission' => 'Rôles avec cette permission',
+    'permission_singular'   => 'permission',
+    'permission_plural'     => 'permissions',
+    'user_singular'         => 'Utilisateur',
+    'user_plural'           => 'Utilisateurs',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Permissions supplémentaires',
+    'password'              => 'Mot de passe',
+    'password_confirmation' => 'Confirmation du mot de passe',
+    'user_role_permission'  => 'Rôles et permissions d’utilisateur',
+    'user'                  => 'Utilisateur',
+    'users'                 => 'Utilisateurs',
+
+];
diff --git a/lang/vendor/backpack/fr_CA/permissionmanager.php b/lang/vendor/backpack/fr_CA/permissionmanager.php
new file mode 100644 (file)
index 0000000..5c392c5
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Julien Cauvin <contact@7ute.fr>
+    |
+    */
+    'name'                  => 'Nom',
+    'role'                  => 'Rôle',
+    'roles'                 => 'Rôles',
+    'roles_have_permission' => 'Rôles avec cette permission',
+    'permission_singular'   => 'permission',
+    'permission_plural'     => 'permissions',
+    'user_singular'         => 'Utilisateur',
+    'user_plural'           => 'Utilisateurs',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Permissions supplémentaires',
+    'password'              => 'Mot de passe',
+    'password_confirmation' => 'Confirmation du mot de passe',
+    'user_role_permission'  => 'Rôles et permissions d’utilisateur',
+    'user'                  => 'Utilisateur',
+    'users'                 => 'Utilisateurs',
+
+];
diff --git a/lang/vendor/backpack/gr/backup.php b/lang/vendor/backpack/gr/backup.php
new file mode 100644 (file)
index 0000000..931ee96
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+     */
+
+    'backup'                         => 'Αντίγραφο ασφαλείας',
+    'backups'                        => 'Αντίγραφα ασφαλείας', // Added plural
+    'create_a_new_backup'            => 'Δημιουργία νέου αντιγράφου ασφαλείας',
+    'existing_backups'               => 'Υπάρχοντα αντίγραφα ασφαλείας',
+    'date'                           => 'Ημερομηνία',
+    'file_size'                      => 'Μέγεθος Αρχείου',
+    'actions'                        => 'Ενέργειες',
+    'download'                       => 'Λήψη',
+    'delete'                         => 'Διαγραφή',
+    'delete_confirm'                 => 'Είστε σίγουρος/η πως θέλετε να διαγράψετε αυτό το αντίγραφο ασφαλείας?',
+    'delete_confirmation_title'      => 'Η ενέργεια πραγματοποιήθηκε',
+    'delete_confirmation_message'    => 'Το αντίγραφο ασφαλείας διαγράφηκε.',
+    'delete_error_title'             => 'Σφάλμα',
+    'delete_error_message'           => 'Το αντίγραφο ασφαλείας ΔΕΝ έχει διαγραφεί.',
+    'delete_cancel_title'            => 'Να πραγματοποιηθεί η διαγραφή',
+    'delete_cancel_message'          => 'Το αντίγραφο ασφαλείας ΔΕΝ έχει διαγραφεί.',
+    'create_confirmation_title'      => 'Η δημιουργία αντιγράφου ασφαλείας έχει ολοκληρωθεί',
+    'create_confirmation_message'    => 'Επαναφόρτωση της σελίδας σε 3 δευτερόλεπτα.',
+    'create_error_title'             => 'Σφάλμα αντιγράφου ασφαλείας',
+    'create_error_message'           => 'Το αντίγραφο ασφαλείας ΔΕΝ μπόρεσε να δημιουργηθεί.',
+    'create_warning_title'           => 'Άγνωστο σφάλμα',
+    'create_warning_message'         => 'Το αντίγραφο ασφαλείας μπορεί να μην έχει δημιουργηθεί. Παρακαλώ ελέγξτε τα αρχεία καταγραφής για λεπτομέρειες.',
+    'location'                       => 'Τοποθεσία',
+    'no_disks_configured'            => 'Δεν έχει οριστεί κανένας δίσκος για αντίγραφα ασφαλείας στο config/backup.php',
+    'backup_doesnt_exist'            => 'Το αντίγραφο ασφαλείας δεν υφίσταται.',
+    'only_local_downloads_supported' => 'Υποστηρίζονται λήψεις μόνο από το τοπικό σύστημα αρχείων.',
+];
diff --git a/lang/vendor/backpack/hu/permissionmanager.php b/lang/vendor/backpack/hu/permissionmanager.php
new file mode 100644 (file)
index 0000000..aad4057
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: DAVID BOLLA
+    |
+    */
+    'name'                  => 'Név',
+    'role'                  => 'Szerepkör',
+    'roles'                 => 'Szerepkörök',
+    'roles_have_permission' => 'Szerepkörök, melyek rendelkeznek ezzel a jogosultsággal',
+    'permission_singular'   => 'Jogosultság',
+    'permission_plural'     => 'Jogosultságok',
+    'user_singular'         => 'Felhasználó',
+    'user_plural'           => 'Felhasználók',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Szerepkörön felüli jogosultság',
+    'password'              => 'Jelszó',
+    'password_confirmation' => 'Jelszó megerősítése',
+    'user_role_permission'  => 'Felhasználó Szerepkör Jogosultság',
+    'user'                  => 'Felhasználó',
+    'users'                 => 'Felhasználók',
+    'guard_type'            => 'Guard típusa',
+
+];
diff --git a/lang/vendor/backpack/id/backup.php b/lang/vendor/backpack/id/backup.php
new file mode 100644 (file)
index 0000000..4fb8c50
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Cadangkan',
+    'create_a_new_backup'            => 'Buat cadangan baru',
+    'existing_backups'               => 'Backup yang ada',
+    'date'                           => 'Tanggal',
+    'file_size'                      => 'Ukuran file',
+    'actions'                        => 'Aksi',
+    'download'                       => 'Unduh',
+    'delete'                         => 'Hapus',
+    'delete_confirm'                 => 'Anda yakin ingin menghapus file cadangan ini?',
+    'delete_confirmation_title'      => 'Selesai',
+    'delete_confirmation_message'    => 'File cadangan telah dihapus.',
+    'delete_error_title'             => 'Terjadi kesalahan',
+    'delete_error_message'           => 'File cadangan TIDAK dihapus.',
+    'delete_cancel_title'            => 'Tidak apa-apa',
+    'delete_cancel_message'          => 'File cadangan TIDAK dihapus.',
+    'create_confirmation_title'      => 'Proses pencadangan dimulai',
+    'create_confirmation_message'    => 'Harap tunggu beberapa menit hingga selesai, lalu segarkan laman.',
+    'create_error_title'             => 'Kesalahan cadangan',
+    'create_error_message'           => 'File cadangan TIDAK dapat dibuat.',
+    'create_warning_title'           => 'Kesalahan yang tidak diketahui',
+    'create_warning_message'         => 'Cadangan Anda TIDAK dapat dibuat. Silakan periksa file log untuk detailnya.',
+    'location'                       => 'Lokasi',
+    'no_disks_configured'            => 'Tidak ada disk cadangan yang dikonfigurasi di config/backup.php',
+    'backup_doesnt_exist'            => 'File cadangan tidak ada.',
+    'only_local_downloads_supported' => 'Hanya unduhan dari sistem file Lokal yang didukung.',
+];
diff --git a/lang/vendor/backpack/id/permissionmanager.php b/lang/vendor/backpack/id/permissionmanager.php
new file mode 100644 (file)
index 0000000..65a0144
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>
+    |
+    */
+    'name'                  => 'Nama',
+    'role'                  => 'Wewenang',
+    'roles'                 => 'Wewenang',
+    'roles_have_permission' => 'Wewenang yang memiliki izin ini',
+    'permission_singular'   => 'izin',
+    'permission_plural'     => 'izin',
+    'user_singular'         => 'Pengguna',
+    'user_plural'           => 'Pengguna',
+    'email'                 => 'Surel',
+    'extra_permissions'     => 'Izin Ekstra',
+    'password'              => 'Kata sandi',
+    'password_confirmation' => 'Konfirmasi kata sandi',
+    'user_role_permission'  => 'Izin Peran Pengguna',
+    'user'                  => 'Pengguna',
+    'users'                 => 'Pengguna',
+    'guard_type'            => 'Jenis Pelindung',
+
+];
diff --git a/lang/vendor/backpack/it/permissionmanager.php b/lang/vendor/backpack/it/permissionmanager.php
new file mode 100644 (file)
index 0000000..535a48f
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Roberto Butti ( https://github.com/roberto-butti )
+    |         Mirko Tebaldi ( https://github.com/realtebo )
+    | Language: Italian
+    |
+    */
+    'name'                  => 'Nome',
+    'role'                  => 'Ruolo',
+    'roles'                 => 'Ruoli',
+    'roles_have_permission' => 'Ruoli con questo permesso',
+    'permission_singular'   => 'Permesso',
+    'permission_plural'     => 'Permessi',
+    'user_singular'         => 'Utente',
+    'user_plural'           => 'Utenti',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Permessi Extra',
+    'password'              => 'Password',
+    'password_confirmation' => 'Conferma Password',
+    'user_role_permission'  => 'Utenti Ruoli Permessi',
+    'user'                  => 'Utente',
+    'users'                 => 'Utenti',
+    'guard_type'            => 'Tipo Guard',
+];
diff --git a/lang/vendor/backpack/ja/permissionmanager.php b/lang/vendor/backpack/ja/permissionmanager.php
new file mode 100644 (file)
index 0000000..dc5393a
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    |
+    */
+    'name'                  => '名前',
+    'role'                  => 'ロール',
+    'roles'                 => 'ロール',
+    'roles_have_permission' => 'この権限を持つロール',
+    'permission_singular'   => '権限',
+    'permission_plural'     => '権限',
+    'user_singular'         => 'ユーザー',
+    'user_plural'           => 'ユーザー',
+    'email'                 => 'メールアドレス',
+    'extra_permissions'     => '追加の権限',
+    'password'              => 'パスワード',
+    'password_confirmation' => 'パスワードの確認',
+    'user_role_permission'  => 'ユーザーのロールと権限',
+    'user'                  => 'ユーザー',
+    'users'                 => 'ユーザー',
+    'guard_type'            => 'Guard タイプ',
+
+];
diff --git a/lang/vendor/backpack/lv/permissionmanager.php b/lang/vendor/backpack/lv/permissionmanager.php
new file mode 100644 (file)
index 0000000..f3bf45c
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    |
+    */
+    'name'                  => 'Vārds',
+    'role'                  => 'Loma',
+    'roles'                 => 'Lomas',
+    'roles_have_permission' => 'Lomas kurām ir šī atļauja',
+    'permission_singular'   => 'atļauja',
+    'permission_plural'     => 'atļaujas',
+    'user_singular'         => 'Lietotājs',
+    'user_plural'           => 'Lietotāji',
+    'email'                 => 'E-pasts',
+    'extra_permissions'     => 'Papildus atļaujas',
+    'password'              => 'Parole',
+    'password_confirmation' => 'Parole otrreiz',
+    'user_role_permission'  => 'Lietotāju lomas un atļaujas',
+    'user'                  => 'Lietotājs',
+    'users'                 => 'Lietotāji',
+
+];
diff --git a/lang/vendor/backpack/nl/backup.php b/lang/vendor/backpack/nl/backup.php
new file mode 100644 (file)
index 0000000..3ca6c4d
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Backup',
+    'create_a_new_backup'            => 'Maak een nieuwe backup',
+    'existing_backups'               => 'Bestaande backups',
+    'date'                           => 'Datum',
+    'file_size'                      => 'Bestandsgrootte',
+    'actions'                        => 'Acties',
+    'download'                       => 'Download',
+    'delete'                         => 'Verwijder',
+    'delete_confirm'                 => 'Weet je zeker dat je dit backup bestand wilt verwijderen?',
+    'delete_confirmation_title'      => 'Klaar',
+    'delete_confirmation_message'    => 'Het backup bestand is verwijderd.',
+    'delete_error_title'             => 'Fout',
+    'delete_error_message'           => 'Het backup bestand is NIET verwijderd.',
+    'delete_cancel_title'            => 'Alles veilig',
+    'delete_cancel_message'          => 'Het backup bestand is NIET verwijderd.',
+    'create_confirmation_title'      => 'Backup voltooid',
+    'create_confirmation_message'    => 'De pagina wordt opnieuw geladen in 3 seconden.',
+    'create_error_title'             => 'Backup fout',
+    'create_error_message'           => 'Het backup bestand kon NIET worden gemaakt.',
+    'create_warning_title'           => 'Onbekende fout',
+    'create_warning_message'         => 'Het kan zijn dat je backup niet gemaakt is. Controleer de log bestanden voor meer informatie.',
+    'location'                       => 'Locatie',
+    'no_disks_configured'            => 'Geen backup locaties geconfigureerd in config/wbackup.php',
+    'backup_doesnt_exist'            => 'Het backup bestand bestaat niet.',
+    'only_local_downloads_supported' => 'Enkel downloads van het lokale bestandssysteem worden ondersteund.',
+];
diff --git a/lang/vendor/backpack/nl/permissionmanager.php b/lang/vendor/backpack/nl/permissionmanager.php
new file mode 100644 (file)
index 0000000..dc86f19
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>
+    |
+    */
+    'name'                  => 'Naam',
+    'role'                  => 'Rol',
+    'roles'                 => 'Rollen',
+    'roles_have_permission' => 'Rollen die deze permissie hebben',
+    'permission_singular'   => 'Permissie',
+    'permission_plural'     => 'Permissies',
+    'user_singular'         => 'Gebruiker',
+    'user_plural'           => 'Gebruikers',
+    'email'                 => 'E-mail',
+    'extra_permissions'     => 'Extra permissies',
+    'password'              => 'Wachtwoord',
+    'password_confirmation' => 'Wachtwoord bevestigen',
+    'user_role_permission'  => 'Rollen en permissies voor gebruiker',
+    'user'                  => 'Gebruiker',
+    'users'                 => 'Gebruikers',
+
+];
diff --git a/lang/vendor/backpack/pt/backup.php b/lang/vendor/backpack/pt/backup.php
new file mode 100644 (file)
index 0000000..77c69b4
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Backup',
+    'backups'                        => 'Backups',
+    'create_a_new_backup'            => 'Criar um novo backup',
+    'existing_backups'               => 'Backups existentes',
+    'date'                           => 'Data',
+    'file_size'                      => 'Tamanho do ficheiro',
+    'actions'                        => 'Ações',
+    'download'                       => 'Transferir',
+    'delete'                         => 'Apagar',
+    'delete_confirm'                 => 'Tem a certeza que quer apagar este backup?',
+    'delete_confirmation_title'      => 'Concluído',
+    'delete_confirmation_message'    => 'O backup foi apagado.',
+    'delete_error_title'             => 'Erro',
+    'delete_error_message'           => 'O backup NÃO foi apagado.',
+    'delete_cancel_title'            => 'Está tudo bem!',
+    'delete_cancel_message'          => 'O backup NÃO foi apagado.',
+    'create_confirmation_title'      => 'Backup iniciado.',
+    'create_error_title'             => 'Erro ao fazer o backup',
+    'create_error_message'           => 'O backup não foi criado.',
+    'create_warning_title'           => 'Erro desconhecido',
+    'create_warning_message'         => 'O backup pode NÃO ter sido criado. Por favor verifique o registo para obter mais detalhes.',
+    'location'                       => 'Localização',
+    'no_disks_configured'            => 'Não foi configurado nenhum disco de backups em config/backup.php',
+    'backup_doesnt_exist'            => 'O backup não existe',
+    'only_local_downloads_supported' => 'Apenas são permitidas transferências do sistema de ficheiros local.',
+    'unknown_disk'                   => 'Disco de backup desconhecido.',
+    'create_started_message'         => 'Por favor aguarde alguns minutos pela conclusão do backup.',
+    'create_completed_title'         => 'O backup está concluído.',
+    'download_confirmation_title'    => 'Download iniciado.',
+    'download_error_title'           => 'Erro ao fazer o download',
+];
diff --git a/lang/vendor/backpack/pt/permissionmanager.php b/lang/vendor/backpack/pt/permissionmanager.php
new file mode 100644 (file)
index 0000000..2c5d2d9
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    |
+    */
+    'name'                  => 'Nome',
+    'role'                  => 'Cargo',
+    'roles'                 => 'Cargos',
+    'roles_have_permission' => 'Cargos com esta permissão',
+    'permission_singular'   => 'permissão',
+    'permission_plural'     => 'permissões',
+    'user_singular'         => 'Utilizador',
+    'user_plural'           => 'Utilizadores',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Permissões extra',
+    'password'              => 'Palavra-passe',
+    'password_confirmation' => 'Confirmar palavra-passe',
+    'user_role_permission'  => 'Cargo e permissões do utilizador',
+    'user'                  => 'Utilizador',
+    'users'                 => 'Utilizadores',
+    'guard_type'            => 'Tipo de guarda',
+
+];
diff --git a/lang/vendor/backpack/pt_br/backup.php b/lang/vendor/backpack/pt_br/backup.php
new file mode 100644 (file)
index 0000000..f158ffa
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Backup',
+    'backups'                        => 'Backups',
+    'create_a_new_backup'            => 'Criar um novo backup',
+    'existing_backups'               => 'Backups existentes',
+    'date'                           => 'Data',
+    'file_size'                      => 'Tamanho do Arquivo',
+    'actions'                        => 'Ações',
+    'download'                       => 'Baixar',
+    'delete'                         => 'Excluir',
+    'delete_confirm'                 => 'Tem certeza que deseja excluir este backup?',
+    'delete_confirmation_title'      => 'Pronto',
+    'delete_confirmation_message'    => 'Backup excluído com sucesso.',
+    'delete_error_title'             => 'Erro',
+    'delete_error_message'           => 'Não foi possível excluir o backup.',
+    'delete_cancel_title'            => 'Sem problema',
+    'delete_cancel_message'          => 'O backup não foi excluído.',
+    'create_confirmation_title'      => 'Backup iniciado.',
+    'create_error_title'             => 'Erro de backup',
+    'create_error_message'           => 'Não foi possível criar o Backup.',
+    'create_warning_title'           => 'Erro desconhecido',
+    'create_warning_message'         => 'O backup solicitado pode não ter sido criado. Por favor, verifique o arquivo de log para mais informações.',
+    'location'                       => 'Localização',
+    'no_disks_configured'            => 'Não existe configuração de local de backup no arquivo config/backup.php',
+    'backup_doesnt_exist'            => 'O arquivo de backup não existe.',
+    'only_local_downloads_supported' => 'Somente são suportados downloads do sistema de arquivos local.',
+    'unknown_disk'                   => 'Disco de backup desconhecido.',
+    'create_started_message'         => 'Por favor aguarde alguns minutos pela conclusão do backup.',
+    'create_completed_title'         => 'O backup está concluído.',
+    'download_confirmation_title'    => 'Download iniciado.',
+    'download_error_title'           => 'Erro ao fazer o download',
+];
diff --git a/lang/vendor/backpack/pt_br/permissionmanager.php b/lang/vendor/backpack/pt_br/permissionmanager.php
new file mode 100644 (file)
index 0000000..0fb2562
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>
+    |
+    */
+
+    'name'                  => 'Nome',
+    'role'                  => 'Grupo de Usuário',
+    'roles'                 => 'Grupos de Usuário',
+    'roles_have_permission' => 'Grupos que possuem esta permissão',
+    'permission_singular'   => 'permissão',
+    'permission_plural'     => 'permissões',
+    'user_singular'         => 'Usuário',
+    'user_plural'           => 'Usuários',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Permissões Extras',
+    'password'              => 'Senha',
+    'password_confirmation' => 'Confirmar senha',
+    'user_role_permission'  => 'Permissões do Grupo de Usuário',
+    'user'                  => 'Usuário',
+    'users'                 => 'Usuários',
+
+];
diff --git a/lang/vendor/backpack/ro/backup.php b/lang/vendor/backpack/ro/backup.php
new file mode 100644 (file)
index 0000000..24a1b0d
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Copie de siguranță',
+    'backups'                        => 'Copii de siguranță',
+    'create_a_new_backup'            => 'Creează o nouă copie de siguranță',
+    'existing_backups'               => 'Copii existente',
+    'date'                           => 'Data',
+    'file_size'                      => 'Mărimea fișierului',
+    'actions'                        => 'Acțiuni',
+    'download'                       => 'Descarcă',
+    'delete'                         => 'Șterge',
+    'delete_confirm'                 => 'Ești sigur că vrei să ștergi copia de siguranță?',
+    'delete_confirmation_title'      => 'Operațiune reușită',
+    'delete_confirmation_message'    => 'Copia de siguranță a fost ștearsă.',
+    'delete_error_title'             => 'Eroare',
+    'delete_error_message'           => 'Copia de siguranță NU a fost ștearsă.',
+    'delete_cancel_title'            => 'Este în regulă',
+    'delete_cancel_message'          => 'Copia de siguranță NU a fost ștearsă.',
+    'create_confirmation_title'      => 'Am început procesul de creare copie de siguranță',
+    'create_confirmation_message'    => 'Vă rugăm așteptați câteva minute, apoi reîncărcați pagina.',
+    'create_error_title'             => 'Eroare',
+    'create_error_message'           => 'Copia de siguranță NU a putut fi creată.',
+    'create_warning_title'           => 'Eroare necunoscută',
+    'create_warning_message'         => 'Copia de siguranță e posibil să NU fi fost creată. Verificați fișierele de log pentru detalii.',
+    'location'                       => 'Locație',
+    'no_disks_configured'            => 'Nu există niciun disc in config/backups.php',
+    'backup_doesnt_exist'            => 'Fișierul de backup nu există.',
+    'only_local_downloads_supported' => 'Doar descarcările din sistemul de fișiere local sunt suportate.',
+];
diff --git a/lang/vendor/backpack/ru/backup.php b/lang/vendor/backpack/ru/backup.php
new file mode 100644 (file)
index 0000000..a02c386
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Резервирование',
+    'create_a_new_backup'            => 'Создать новую копию',
+    'existing_backups'               => 'Существующие копии',
+    'date'                           => 'Дата',
+    'file_size'                      => 'Размер файла',
+    'actions'                        => 'Действия',
+    'download'                       => 'Выгрузить',
+    'delete'                         => 'Удалить',
+    'delete_confirm'                 => 'Удалить эту резервную копию?',
+    'delete_confirmation_title'      => 'Успешно',
+    'delete_confirmation_message'    => 'Резервная копия удалена.',
+    'delete_error_title'             => 'Ошибка',
+    'delete_error_message'           => 'Резервная копия не удалена.',
+    'delete_cancel_title'            => 'Без ошибок',
+    'delete_cancel_message'          => 'Резервная копия не удалена.',
+    'create_confirmation_title'      => 'Процесс резервирования запущен',
+    'create_confirmation_message'    => 'Пожалуйста, подождите несколько минут до его завершения, затем обновите страницу.',
+    'create_error_title'             => 'Ошибка резервирования',
+    'create_error_message'           => 'Не удалось создать резервную копию.',
+    'create_warning_title'           => 'Неизвестная ошибка',
+    'create_warning_message'         => 'Возможно резервная копия не создана. Пожалуйста, проверьте лог-файлы для подтверждения.',
+    'location'                       => 'Назначение',
+    'no_disks_configured'            => 'Настройте диск в конфигурационном файле config/backup.php',
+    'backup_doesnt_exist'            => 'Резервная копия не существует.',
+    'only_local_downloads_supported' => 'Выгрузка поддерживается только для локальных файловых систем.',
+];
diff --git a/lang/vendor/backpack/ru/permissionmanager.php b/lang/vendor/backpack/ru/permissionmanager.php
new file mode 100644 (file)
index 0000000..a2581e7
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>, translating to Russian: Nikita K. <exotickg1@gmail.com>
+    |
+    */
+    'name'                  => 'Имя',
+    'role'                  => 'Роль',
+    'roles'                 => 'Роли',
+    'roles_have_permission' => 'Роли, которые имеют это разрешение',
+    'permission_singular'   => 'разрешение',
+    'permission_plural'     => 'разрешения',
+    'user_singular'         => 'Пользователь',
+    'user_plural'           => 'Пользователи',
+    'email'                 => 'Почта',
+    'extra_permissions'     => 'Дополнительные разрешения',
+    'password'              => 'Пароль',
+    'password_confirmation' => 'Повторите пароль',
+    'user_role_permission'  => 'Разрешения роли пользователя',
+    'user'                  => 'Пользователь',
+    'users'                 => 'Пользователи',
+];
diff --git a/lang/vendor/backpack/sr/permissionmanager.php b/lang/vendor/backpack/sr/permissionmanager.php
new file mode 100644 (file)
index 0000000..87eba89
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Azarić Stefan <azaricstefan@yahoo.com>
+    |
+    */
+    'name'                  => 'Ime',
+    'role'                  => 'Uloga',
+    'roles'                 => 'Uloge',
+    'roles_have_permission' => 'Uloge koje imaju prava',
+    'permission_singular'   => 'Prava',
+    'permission_plural'     => 'Prava',
+    'user_singular'         => 'Korisnik',
+    'user_plural'           => 'Korisnici',
+    'email'                 => 'E-pošta',
+    'extra_permissions'     => 'Dodatne prava',
+    'password'              => 'Lozinka',
+    'password_confirmation' => 'Potvrda lozinke',
+    'user_role_permission'  => 'Korisnik uloga Prava',
+    'user'                  => 'Korisnik',
+    'users'                 => 'Korisnici',
+    'guard_type'            => 'Tip garda',
+
+];
diff --git a/lang/vendor/backpack/tr/backup.php b/lang/vendor/backpack/tr/backup.php
new file mode 100644 (file)
index 0000000..174150e
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => 'Yedekler',
+    'create_a_new_backup'            => 'Yeni bir yedek oluştur',
+    'existing_backups'               => 'Yedekleme mevcut',
+    'date'                           => 'Tarih',
+    'file_size'                      => 'Dosya Boyutu',
+    'actions'                        => 'Olaylar',
+    'download'                       => 'İndir',
+    'delete'                         => 'Sil',
+    'delete_confirm'                 => 'Bu yedek dosyasını silmek istediğinize emin misiniz?',
+    'delete_confirmation_title'      => 'Tamam',
+    'delete_confirmation_message'    => 'Yedek dosyası silindi.',
+    'delete_error_title'             => 'Hata',
+    'delete_error_message'           => 'Yedek dosyası silinemedi.',
+    'delete_cancel_title'            => 'İşlem Sonucu',
+    'delete_cancel_message'          => 'Yedek dosyası silinemedi.',
+    'create_confirmation_title'      => 'Yedekleme tamamlandı',
+    'create_confirmation_message'    => 'Sayfa 3 saniye içerisinde yenilenecektir.',
+    'create_error_title'             => 'Yedekleme hatası',
+    'create_error_message'           => 'Yedek dosyası oluşturulamadı.',
+    'create_warning_title'           => 'Bilinmeyen hata',
+    'create_warning_message'         => 'Yedekleme işlemi oluşturulmamış olabilir. Lütfen log dosyasını inceleyiniz .',
+    'location'                       => 'Konum',
+    'no_disks_configured'            => 'Yedekleme disk ismi config/backup.php dosyasında tanımlanmamış',
+    'backup_doesnt_exist'            => 'Yedek dosyası mevcut değil.',
+    'only_local_downloads_supported' => 'İndirme işlemi sadece local sunucuda bulunan dosyalar için geçerlidir.',
+];
diff --git a/lang/vendor/backpack/tr/permissionmanager.php b/lang/vendor/backpack/tr/permissionmanager.php
new file mode 100644 (file)
index 0000000..8042999
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>, translatin to Turkish : Selçuk Çukur <hk@selcukcukur.com.tr>
+    |
+    */
+    'name'                  => 'Adı',
+    'role'                  => 'Yetki',
+    'roles'                 => 'Yetkiler',
+    'roles_have_permission' => 'Bu izne sahip yetkiler',
+    'permission_singular'   => 'izin',
+    'permission_plural'     => 'izinler',
+    'user_singular'         => 'Kullanıcı',
+    'user_plural'           => 'Kullanıcılar',
+    'email'                 => 'Eposta',
+    'extra_permissions'     => 'Ekstra İzinler',
+    'password'              => 'Parola',
+    'password_confirmation' => 'Parola (Tekrar)',
+    'user_role_permission'  => 'Kullanıcı Yetki İzinleri',
+    'user'                  => 'Kullanıcı',
+    'users'                 => 'Kullanıcılar',
+    'guard_type'            => 'Güvenlik Tipi',
+];
diff --git a/lang/vendor/backpack/uk/backup.php b/lang/vendor/backpack/uk/backup.php
new file mode 100644 (file)
index 0000000..e98f083
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    | Translated to Ukrainian: Pavel Tkachenko <kazantip@gmail.com>
+    |
+    */
+
+    'backup'                         => 'Резервне копіювання',
+    'create_a_new_backup'            => 'Створити нову резервну копію',
+    'existing_backups'               => 'Існуючі резервні копії',
+    'date'                           => 'Дата',
+    'file_size'                      => 'Розмір файлу',
+    'actions'                        => 'Дії',
+    'download'                       => 'Завантажити',
+    'delete'                         => 'Видалити',
+    'delete_confirm'                 => 'Ви впевнені, що хочете видалити цей файл резервної копії?',
+    'delete_confirmation_title'      => 'Готово',
+    'delete_confirmation_message'    => 'Файл резервної копії видалено.',
+    'delete_error_title'             => 'Помилка',
+    'delete_error_message'           => 'Файл резервної копії НЕ видалявся.',
+    'delete_cancel_title'            => 'Все добре',
+    'delete_cancel_message'          => 'Файл резервної копії НЕ видалявся.',
+    'create_confirmation_title'      => 'Розпочато процес резервного копіювання',
+    'create_confirmation_message'    => 'Зачекайте кілька хвилин, поки він завершиться, а потім оновіть сторінку.',
+    'create_error_title'             => 'Помилка резервного копіювання',
+    'create_error_message'           => 'Файл резервної копії НЕ вдалося створити.',
+    'create_warning_title'           => 'Невідома помилка',
+    'create_warning_message'         => 'Можливо, ваша резервна копія НЕ була створена. Будь ласка, перевірте файли журналу для деталей.',
+    'location'                       => 'Розташування',
+    'no_disks_configured'            => 'Резервні диски не налаштовано у config/backup.php',
+    'backup_doesnt_exist'            => 'Файл резервної копії не існує.',
+    'only_local_downloads_supported' => 'Завантаження підтримуються лише з локальної файлової системи.',
+];
diff --git a/lang/vendor/backpack/uk/permissionmanager.php b/lang/vendor/backpack/uk/permissionmanager.php
new file mode 100644 (file)
index 0000000..2b91b91
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>, translated to Ukrainian: Pavel Tkachenko <kazantip@gmail.com>
+    |
+    */
+    'name'                  => "Ім'я",
+    'role'                  => 'Роль',
+    'roles'                 => 'Ролі',
+    'roles_have_permission' => 'Ролі, які мають цей дозвіл',
+    'permission_singular'   => 'дозвіл',
+    'permission_plural'     => 'дозволи',
+    'user_singular'         => 'Користувач',
+    'user_plural'           => 'Користувачі',
+    'email'                 => 'Електронна пошта',
+    'extra_permissions'     => 'Додаткові дозволи',
+    'password'              => 'Пароль',
+    'password_confirmation' => 'Підтвердження паролю',
+    'user_role_permission'  => 'Дозволи ролі користувача',
+    'user'                  => 'Користувач',
+    'users'                 => 'Користувачі',
+    'guard_type'            => 'Тип охорони',
+
+];
diff --git a/lang/vendor/backpack/vi/permissionmanager.php b/lang/vendor/backpack/vi/permissionmanager.php
new file mode 100644 (file)
index 0000000..0302f13
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Sang Lu <connect.with.sang@gmail.com>
+    |
+    */
+    'name'                  => 'Tên',
+    'role'                  => 'Vai trò',
+    'roles'                 => 'Các vai trò',
+    'roles_have_permission' => 'Các vai trò được cấp quyền này',
+    'permission_singular'   => 'Quyền',
+    'permission_plural'     => 'Các quyền',
+    'user_singular'         => 'Người dùng',
+    'user_plural'           => 'Các người dùng',
+    'email'                 => 'Email',
+    'extra_permissions'     => 'Các quyền bổ sung',
+    'password'              => 'Mật khẩu',
+    'password_confirmation' => 'Xác nhận Mật khẩu',
+    'user_role_permission'  => 'Người dùng, Vai trò, Các quyền',
+    'user'                  => 'Người dùng',
+    'users'                 => 'Các người dùng',
+    'guard_type'            => 'Lớp bảo vệ',
+
+];
diff --git a/lang/vendor/backpack/zh-Hant/permissionmanager.php b/lang/vendor/backpack/zh-Hant/permissionmanager.php
new file mode 100644 (file)
index 0000000..df39afc
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>
+    |
+    */
+    'name'                  => '名稱',
+    'role'                  => '角色',
+    'roles'                 => '角色',
+    'roles_have_permission' => '擁有此權限的角色',
+    'permission_singular'   => '權限',
+    'permission_plural'     => '權限',
+    'user_singular'         => '使用者',
+    'user_plural'           => '使用者',
+    'email'                 => 'Email',
+    'extra_permissions'     => '額外權限',
+    'password'              => '密碼',
+    'password_confirmation' => '再次輸入新密碼',
+    'user_role_permission'  => '使用者角色與權限',
+    'user'                  => '使用者',
+    'users'                 => '使用者',
+    'guard_type'            => 'Guard 類型',
+
+];
diff --git a/lang/vendor/backpack/zh-cn/permissionmanager.php b/lang/vendor/backpack/zh-cn/permissionmanager.php
new file mode 100644 (file)
index 0000000..99cfd74
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Permission Manager Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used for Laravel Backpack - Permission Manager
+    | Author: Lúdio Oliveira <ludio.ao@gmail.com>
+    |
+    */
+    'name'                  => '名称',
+    'role'                  => '角色',
+    'roles'                 => '角色',
+    'roles_have_permission' => '拥有此权限的角色',
+    'permission_singular'   => '权限',
+    'permission_plural'     => '权限',
+    'user_singular'         => '用户',
+    'user_plural'           => '用户',
+    'email'                 => '邮箱',
+    'extra_permissions'     => '额外权限',
+    'password'              => '密码',
+    'password_confirmation' => '再次输入新密码',
+    'user_role_permission'  => '用户角色与权限',
+    'user'                  => '用户',
+    'users'                 => '用户',
+    'guard_type'            => 'Guard 类型',
+
+];
diff --git a/lang/vendor/backpack/zh/backup.php b/lang/vendor/backpack/zh/backup.php
new file mode 100644 (file)
index 0000000..5d665b0
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Backup Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the backup system.
+    | You are free to change them to anything you want to customize your views to better match your application.
+    |
+    */
+
+    'backup'                         => '備份',
+    'create_a_new_backup'            => '建立新備份',
+    'existing_backups'               => '存在的備份',
+    'date'                           => '日期',
+    'file_size'                      => '檔案大小',
+    'actions'                        => '執行',
+    'download'                       => '下載',
+    'delete'                         => '刪除',
+    'delete_confirm'                 => '你確定要刪除這個備份檔案?',
+    'delete_confirmation_title'      => '完成',
+    'delete_confirmation_message'    => '此備份已刪除',
+    'delete_error_title'             => '錯誤',
+    'delete_error_message'           => '此備份未被刪除',
+    'delete_cancel_title'            => '沒問題',
+    'delete_cancel_message'          => '此備份未被刪除',
+    'create_confirmation_title'      => '備份完畢',
+    'create_confirmation_message'    => '此頁面 3 秒後重新整理',
+    'create_error_title'             => '備份錯誤',
+    'create_error_message'           => '此備份無法被建立',
+    'create_warning_title'           => '未知錯誤',
+    'create_warning_message'         => '你的備份不允許建立,更多細節請查看 log 檔案',
+    'location'                       => '所在位置',
+    'no_disks_configured'            => '在 config/backup.php 沒有備份 disks 設定',
+    'backup_doesnt_exist'            => '此備份檔案不存在',
+    'only_local_downloads_supported' => '僅支援本地檔案系統才可以下載',
+];
diff --git a/public/vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.css b/public/vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.css
new file mode 100644 (file)
index 0000000..7131fcb
--- /dev/null
@@ -0,0 +1 @@
+@-webkit-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-moz-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-webkit-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes pulse{0%,20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}}@-moz-keyframes pulse{0%,20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}}@keyframes pulse{0%,20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:2px solid rgba(0,0,0,.3);background:#fff;padding:20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:.5}.dropzone .dz-preview.dz-file-preview .dz-details,.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(to bottom,#eee,#ddd)}.dropzone .dz-preview.dz-image-preview{background:#fff}.dropzone .dz-preview.dz-image-preview .dz-details{-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;-ms-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,.8);background-color:rgba(255,255,255,.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:rgba(255,255,255,.4);padding:0 .4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{-webkit-transform:scale(1.05,1.05);-moz-transform:scale(1.05,1.05);-ms-transform:scale(1.05,1.05);-o-transform:scale(1.05,1.05);transform:scale(1.05,1.05);-webkit-filter:blur(8px);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block;width:120px;height:120px;object-fit:cover}.dropzone .dz-preview.dz-success .dz-success-mark{-webkit-animation:passing-through 3s cubic-bezier(.77,0,.175,1);-moz-animation:passing-through 3s cubic-bezier(.77,0,.175,1);-ms-animation:passing-through 3s cubic-bezier(.77,0,.175,1);-o-animation:passing-through 3s cubic-bezier(.77,0,.175,1);animation:passing-through 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(.77,0,.175,1);-moz-animation:slide-in 3s cubic-bezier(.77,0,.175,1);-ms-animation:slide-in 3s cubic-bezier(.77,0,.175,1);-o-animation:slide-in 3s cubic-bezier(.77,0,.175,1);animation:slide-in 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview .dz-error-mark svg,.dropzone .dz-preview .dz-success-mark svg{display:block;width:54px;height:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-ms-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity .4s ease-in;-moz-transition:opacity .4s ease-in;-ms-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;left:50%;top:50%;margin-top:-8px;width:80px;margin-left:-40px;background:rgba(255,255,255,.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom,#666,#444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width .3s ease-in-out;-moz-transition:width .3s ease-in-out;-ms-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;-webkit-transition:opacity .3s ease;-moz-transition:opacity .3s ease;-ms-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#be2626;background:linear-gradient(to bottom,#be2626,#a92222);padding:.5em 1.2em;color:#fff}.dropzone .dz-preview .dz-error-message:after{content:'';position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #be2626}
\ No newline at end of file
diff --git a/public/vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.js b/public/vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.js
new file mode 100644 (file)
index 0000000..f94538e
--- /dev/null
@@ -0,0 +1,2 @@
+"use strict";function _possibleConstructorReturn(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function __guard__(a,b){return void 0!==a&&null!==a?b(a):void 0}function __guardMethod__(a,b,c){return void 0!==a&&null!==a&&"function"==typeof a[b]?c(a,b):void 0}var _createClass=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),Emitter=function(){function a(){_classCallCheck(this,a)}return _createClass(a,[{key:"on",value:function(a,b){return this._callbacks=this._callbacks||{},this._callbacks[a]||(this._callbacks[a]=[]),this._callbacks[a].push(b),this}},{key:"emit",value:function(a){this._callbacks=this._callbacks||{};var b=this._callbacks[a];if(b){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;e<c;e++)d[e-1]=arguments[e];for(var f=b,g=0,f=f;;){var h;if(g>=f.length)break;h=f[g++];h.apply(this,d)}}return this}},{key:"off",value:function(a,b){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var c=this._callbacks[a];if(!c)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(var d=0;d<c.length;d++){if(c[d]===b){c.splice(d,1);break}}return this}}]),a}(),Dropzone=function(a){function b(a,c){_classCallCheck(this,b);var d=_possibleConstructorReturn(this,(b.__proto__||Object.getPrototypeOf(b)).call(this)),e=void 0,f=void 0;if(d.element=a,d.version=b.version,d.defaultOptions.previewTemplate=d.defaultOptions.previewTemplate.replace(/\n*/g,""),d.clickableElements=[],d.listeners=[],d.files=[],"string"==typeof d.element&&(d.element=document.querySelector(d.element)),!d.element||null==d.element.nodeType)throw new Error("Invalid dropzone element.");if(d.element.dropzone)throw new Error("Dropzone already attached.");b.instances.push(d),d.element.dropzone=d;var g=null!=(f=b.optionsForElement(d.element))?f:{};if(d.options=b.extend({},d.defaultOptions,g,null!=c?c:{}),d.options.forceFallback||!b.isBrowserSupported()){var h;return h=d.options.fallback.call(d),_possibleConstructorReturn(d,h)}if(null==d.options.url&&(d.options.url=d.element.getAttribute("action")),!d.options.url)throw new Error("No URL provided.");if(d.options.acceptedFiles&&d.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");if(d.options.uploadMultiple&&d.options.chunking)throw new Error("You cannot set both: uploadMultiple and chunking.");return d.options.acceptedMimeTypes&&(d.options.acceptedFiles=d.options.acceptedMimeTypes,delete d.options.acceptedMimeTypes),null!=d.options.renameFilename&&(d.options.renameFile=function(a){return d.options.renameFilename.call(d,a.name,a)}),d.options.method=d.options.method.toUpperCase(),(e=d.getExistingFallback())&&e.parentNode&&e.parentNode.removeChild(e),!1!==d.options.previewsContainer&&(d.options.previewsContainer?d.previewsContainer=b.getElement(d.options.previewsContainer,"previewsContainer"):d.previewsContainer=d.element),d.options.clickable&&(!0===d.options.clickable?d.clickableElements=[d.element]:d.clickableElements=b.getElements(d.options.clickable,"clickable")),d.init(),d}return _inherits(b,a),_createClass(b,null,[{key:"initClass",value:function(){this.prototype.Emitter=Emitter,this.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],this.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2e6,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictUploadCanceled:"Upload canceled.",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){},params:function(a,b,c){if(c)return{dzuuid:c.file.upload.uuid,dzchunkindex:c.index,dztotalfilesize:c.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:c.file.upload.totalChunkCount,dzchunkbyteoffset:c.index*this.options.chunkSize}},accept:function(a,b){return b()},chunksUploaded:function(a,b){b()},fallback:function(){var a=void 0;this.element.className=this.element.className+" dz-browser-not-supported";for(var c=this.element.getElementsByTagName("div"),d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;if(/(^| )dz-message($| )/.test(f.className)){a=f,f.className="dz-message";break}}a||(a=b.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(a));var g=a.getElementsByTagName("span")[0];return g&&(null!=g.textContent?g.textContent=this.options.dictFallbackMessage:null!=g.innerText&&(g.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a,b,c,d){var e={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},f=a.width/a.height;null==b&&null==c?(b=e.srcWidth,c=e.srcHeight):null==b?b=c*f:null==c&&(c=b/f),b=Math.min(b,e.srcWidth),c=Math.min(c,e.srcHeight);var g=b/c;if(e.srcWidth>b||e.srcHeight>c)if("crop"===d)f>g?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*g):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/g);else{if("contain"!==d)throw new Error("Unknown resizeMethod '"+d+"'");f>g?c=b/f:b=c*f}return e.srcX=(a.width-e.srcWidth)/2,e.srcY=(a.height-e.srcHeight)/2,e.trgWidth=b,e.trgHeight=c,e},transformFile:function(a,b){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(a)},previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>',drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:function(a){},dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:function(a){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var c=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){a.previewElement=b.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement);for(var d=a.previewElement.querySelectorAll("[data-dz-name]"),e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;g.textContent=a.name}for(var h=a.previewElement.querySelectorAll("[data-dz-size]"),i=0,h=h;!(i>=h.length);)g=h[i++],g.innerHTML=this.filesize(a.size);this.options.addRemoveLinks&&(a._removeLink=b.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink));for(var j=function(d){return d.preventDefault(),d.stopPropagation(),a.status===b.UPLOADING?b.confirm(c.options.dictCancelUploadConfirmation,function(){return c.removeFile(a)}):c.options.dictRemoveFileConfirmation?b.confirm(c.options.dictRemoveFileConfirmation,function(){return c.removeFile(a)}):c.removeFile(a)},k=a.previewElement.querySelectorAll("[data-dz-remove]"),l=0,k=k;;){var m;if(l>=k.length)break;m=k[l++];m.addEventListener("click",j)}}},removedfile:function(a){return null!=a.previewElement&&null!=a.previewElement.parentNode&&a.previewElement.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){if(a.previewElement){a.previewElement.classList.remove("dz-file-preview");for(var c=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;f.alt=a.name,f.src=b}return setTimeout(function(){return a.previewElement.classList.add("dz-image-preview")},1)}},error:function(a,b){if(a.previewElement){a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error);for(var c=a.previewElement.querySelectorAll("[data-dz-errormessage]"),d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];e.textContent=b}}},errormultiple:function(){},processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink))return a._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(a,b,c){if(a.previewElement)for(var d=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;"PROGRESS"===g.nodeName?g.value=b:g.style.width=b+"%"}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(a){return this.emit("error",a,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(a){if(a._removeLink&&(a._removeLink.innerHTML=this.options.dictRemoveFile),a.previewElement)return a.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];for(var e=c,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;for(var i in h){var j=h[i];a[i]=j}}return a}}]),_createClass(b,[{key:"getAcceptedFiles",value:function(){return this.files.filter(function(a){return a.accepted}).map(function(a){return a})}},{key:"getRejectedFiles",value:function(){return this.files.filter(function(a){return!a.accepted}).map(function(a){return a})}},{key:"getFilesWithStatus",value:function(a){return this.files.filter(function(b){return b.status===a}).map(function(a){return a})}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(b.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(b.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(b.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter(function(a){return a.status===b.UPLOADING||a.status===b.QUEUED}).map(function(a){return a})}},{key:"init",value:function(){var a=this;if("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(b.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length){!function c(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null===a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!==a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!==a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",b.getElement(a.options.hiddenInputContainer,"hiddenInputContainer").appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b=a.hiddenFileInput.files;if(b.length)for(var d=b,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;a.addFile(g)}return a.emit("addedfiles",b),c()})}()}this.URL=null!==window.URL?window.URL:window.webkitURL;for(var c=this.events,d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;this.on(f,this.options[f])}this.on("uploadprogress",function(){return a.updateTotalUploadProgress()}),this.on("removedfile",function(){return a.updateTotalUploadProgress()}),this.on("canceled",function(b){return a.emit("complete",b)}),this.on("complete",function(b){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},0)});var g=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:function(b){return a.emit("dragstart",b)},dragenter:function(b){return g(b),a.emit("dragenter",b)},dragover:function(b){var c=void 0;try{c=b.dataTransfer.effectAllowed}catch(a){}return b.dataTransfer.dropEffect="move"===c||"linkMove"===c?"move":"copy",g(b),a.emit("dragover",b)},dragleave:function(b){return a.emit("dragleave",b)},drop:function(b){return g(b),a.drop(b)},dragend:function(b){return a.emit("dragend",b)}}}],this.clickableElements.forEach(function(c){return a.listeners.push({element:c,events:{click:function(d){return(c!==a.element||d.target===a.element||b.elementInside(d.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),(null!=this.hiddenFileInput?this.hiddenFileInput.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,b.instances.splice(b.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var a=void 0,b=0,c=0;if(this.getActiveFiles().length){for(var d=this.getActiveFiles(),e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;b+=g.upload.bytesSent,c+=g.upload.total}a=100*b/c}else a=100;return this.emit("totaluploadprogress",a,c,b)}},{key:"_getParamName",value:function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")}},{key:"_renameFile",value:function(a){return"function"!=typeof this.options.renameFile?a.name:this.options.renameFile(a)}},{key:"getFallbackForm",value:function(){var a=void 0,c=void 0;if(a=this.getExistingFallback())return a;var d='<div class="dz-fallback">';this.options.dictFallbackText&&(d+="<p>"+this.options.dictFallbackText+"</p>"),d+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>';var e=b.createElement(d);return"FORM"!==this.element.tagName?(c=b.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),c.appendChild(e)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=c?c:e}},{key:"getExistingFallback",value:function(){for(var a=["div","form"],b=0;b<a.length;b++){var c,d=a[b];if(c=function(a){for(var b=a,c=0,b=b;;){var d;if(c>=b.length)break;d=b[c++];var e=d;if(/(^| )fallback($| )/.test(e.className))return e}}(this.element.getElementsByTagName(d)))return c}}},{key:"setupEventListeners",value:function(){return this.listeners.map(function(a){return function(){var b=[];for(var c in a.events){var d=a.events[c];b.push(a.element.addEventListener(c,d,!1))}return b}()})}},{key:"removeEventListeners",value:function(){return this.listeners.map(function(a){return function(){var b=[];for(var c in a.events){var d=a.events[c];b.push(a.element.removeEventListener(c,d,!1))}return b}()})}},{key:"disable",value:function(){var a=this;return this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(b){return a.cancelUpload(b)})}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()}},{key:"filesize",value:function(a){var b=0,c="b";if(a>0){for(var d=["tb","gb","mb","kb","b"],e=0;e<d.length;e++){var f=d[e];if(a>=Math.pow(this.options.filesizeBase,4-e)/10){b=a/Math.pow(this.options.filesizeBase,4-e),c=f;break}}b=Math.round(10*b)/10}return"<strong>"+b+"</strong> "+this.options.dictFileSizeUnits[c]}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(a){if(a.dataTransfer){this.emit("drop",a);for(var b=[],c=0;c<a.dataTransfer.files.length;c++)b[c]=a.dataTransfer.files[c];if(this.emit("addedfiles",b),b.length){var d=a.dataTransfer.items;d&&d.length&&null!=d[0].webkitGetAsEntry?this._addFilesFromItems(d):this.handleFiles(b)}}}},{key:"paste",value:function(a){if(null!=__guard__(null!=a?a.clipboardData:void 0,function(a){return a.items})){this.emit("paste",a);var b=a.clipboardData.items;return b.length?this._addFilesFromItems(b):void 0}}},{key:"handleFiles",value:function(a){for(var b=a,c=0,b=b;;){var d;if(c>=b.length)break;d=b[c++];var e=d;this.addFile(e)}}},{key:"_addFilesFromItems",value:function(a){var b=this;return function(){for(var c=[],d=a,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g,h=f;null!=h.webkitGetAsEntry&&(g=h.webkitGetAsEntry())?g.isFile?c.push(b.addFile(h.getAsFile())):g.isDirectory?c.push(b._addFilesFromDirectory(g,g.name)):c.push(void 0):null!=h.getAsFile&&(null==h.kind||"file"===h.kind)?c.push(b.addFile(h.getAsFile())):c.push(void 0)}return c}()}},{key:"_addFilesFromDirectory",value:function(a,b){var c=this,d=a.createReader(),e=function(a){return __guardMethod__(console,"log",function(b){return b.log(a)})};return function a(){return d.readEntries(function(d){if(d.length>0){for(var e=d,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;h.isFile?h.file(function(a){if(!c.options.ignoreHiddenFiles||"."!==a.name.substring(0,1))return a.fullPath=b+"/"+a.name,c.addFile(a)}):h.isDirectory&&c._addFilesFromDirectory(h,b+"/"+h.name)}a()}return null},e)}()}},{key:"accept",value:function(a,c){return this.options.maxFilesize&&a.size>1024*this.options.maxFilesize*1024?c(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):b.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(c(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,c):c(this.options.dictInvalidFileType)}},{key:"addFile",value:function(a){var c=this;return a.upload={uuid:b.uuidv4(),progress:0,total:a.size,bytesSent:0,filename:this._renameFile(a),chunked:this.options.chunking&&(this.options.forceChunking||a.size>this.options.chunkSize),totalChunkCount:Math.ceil(a.size/this.options.chunkSize)},this.files.push(a),a.status=b.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return b?(a.accepted=!1,c._errorProcessing([a],b)):(a.accepted=!0,c.options.autoQueue&&c.enqueueFile(a)),c._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(a){for(var b=a,c=0,b=b;;){var d;if(c>=b.length)break;d=b[c++];var e=d;this.enqueueFile(e)}return null}},{key:"enqueueFile",value:function(a){var c=this;if(a.status!==b.ADDED||!0!==a.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(a.status=b.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return c.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(a){var b=this;if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(a),setTimeout(function(){return b._processThumbnailQueue()},0)}},{key:"_processThumbnailQueue",value:function(){var a=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var b=this._thumbnailQueue.shift();return this.createThumbnail(b,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(c){return a.emit("thumbnail",b,c),a._processingThumbnail=!1,a._processThumbnailQueue()})}}},{key:"removeFile",value:function(a){if(a.status===b.UPLOADING&&this.cancelUpload(a),this.files=without(this.files,a),this.emit("removedfile",a),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(a){null==a&&(a=!1);for(var c=this.files.slice(),d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;(f.status!==b.UPLOADING||a)&&this.removeFile(f)}return null}},{key:"resizeImage",value:function(a,c,d,e,f){var g=this;return this.createThumbnail(a,c,d,e,!0,function(c,d){if(null==d)return f(a);var e=g.options.resizeMimeType;null==e&&(e=a.type);var h=d.toDataURL(e,g.options.resizeQuality);return"image/jpeg"!==e&&"image/jpg"!==e||(h=ExifRestore.restore(a.dataURL,h)),f(b.dataURItoBlob(h))})}},{key:"createThumbnail",value:function(a,b,c,d,e,f){var g=this,h=new FileReader;return h.onload=function(){return a.dataURL=h.result,"image/svg+xml"===a.type?void(null!=f&&f(h.result)):g.createThumbnailFromUrl(a,b,c,d,e,f)},h.readAsDataURL(a)}},{key:"createThumbnailFromUrl",value:function(a,b,c,d,e,f,g){var h=this,i=document.createElement("img");return g&&(i.crossOrigin=g),i.onload=function(){var g=function(a){return a(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&e&&(g=function(a){return EXIF.getData(i,function(){return a(EXIF.getTag(this,"Orientation"))})}),g(function(e){a.width=i.width,a.height=i.height;var g=h.options.resize.call(h,a,b,c,d),j=document.createElement("canvas"),k=j.getContext("2d");switch(j.width=g.trgWidth,j.height=g.trgHeight,e>4&&(j.width=g.trgHeight,j.height=g.trgWidth),e){case 2:k.translate(j.width,0),k.scale(-1,1);break;case 3:k.translate(j.width,j.height),k.rotate(Math.PI);break;case 4:k.translate(0,j.height),k.scale(1,-1);break;case 5:k.rotate(.5*Math.PI),k.scale(1,-1);break;case 6:k.rotate(.5*Math.PI),k.translate(0,-j.width);break;case 7:k.rotate(.5*Math.PI),k.translate(j.height,-j.width),k.scale(-1,1);break;case 8:k.rotate(-.5*Math.PI),k.translate(-j.height,0)}drawImageIOSFix(k,i,null!=g.srcX?g.srcX:0,null!=g.srcY?g.srcY:0,g.srcWidth,g.srcHeight,null!=g.trgX?g.trgX:0,null!=g.trgY?g.trgY:0,g.trgWidth,g.trgHeight);var l=j.toDataURL("image/png");if(null!=f)return f(l,j)})},null!=f&&(i.onerror=f),i.src=a.dataURL}},{key:"processQueue",value:function(){var a=this.options.parallelUploads,b=this.getUploadingFiles().length,c=b;if(!(b>=a)){var d=this.getQueuedFiles();if(d.length>0){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,a-b));for(;c<a;){if(!d.length)return;this.processFile(d.shift()),c++}}}}},{key:"processFile",value:function(a){return this.processFiles([a])}},{key:"processFiles",value:function(a){for(var c=a,d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;f.processing=!0,f.status=b.UPLOADING,this.emit("processing",f)}return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)}},{key:"_getFilesWithXhr",value:function(a){return this.files.filter(function(b){return b.xhr===a}).map(function(a){return a})}},{key:"cancelUpload",value:function(a){if(a.status===b.UPLOADING){for(var c=this._getFilesWithXhr(a.xhr),d=c,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];f.status=b.CANCELED}void 0!==a.xhr&&a.xhr.abort();for(var g=c,h=0,g=g;;){var i;if(h>=g.length)break;i=g[h++];var j=i;this.emit("canceled",j)}this.options.uploadMultiple&&this.emit("canceledmultiple",c)}else a.status!==b.ADDED&&a.status!==b.QUEUED||(a.status=b.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(a){if("function"==typeof a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];return a.apply(this,c)}return a}},{key:"uploadFile",value:function(a){return this.uploadFiles([a])}},{key:"uploadFiles",value:function(a){var c=this;this._transformFiles(a,function(d){if(a[0].upload.chunked){var e=a[0],f=d[0],g=0;e.upload.chunks=[];var h=function(){for(var d=0;void 0!==e.upload.chunks[d];)d++;if(!(d>=e.upload.totalChunkCount)){g++;var h=d*c.options.chunkSize,i=Math.min(h+c.options.chunkSize,e.size),j={name:c._getParamName(0),data:f.webkitSlice?f.webkitSlice(h,i):f.slice(h,i),filename:e.upload.filename,chunkIndex:d};e.upload.chunks[d]={file:e,index:d,dataBlock:j,status:b.UPLOADING,progress:0,retries:0},c._uploadData(a,[j])}};if(e.upload.finishedChunkUpload=function(d){var f=!0;d.status=b.SUCCESS,d.dataBlock=null,d.xhr=null;for(var g=0;g<e.upload.totalChunkCount;g++){if(void 0===e.upload.chunks[g])return h();e.upload.chunks[g].status!==b.SUCCESS&&(f=!1)}f&&c.options.chunksUploaded(e,function(){c._finished(a,"",null)})},c.options.parallelChunkUploads)for(var i=0;i<e.upload.totalChunkCount;i++)h();else h()}else{for(var j=[],k=0;k<a.length;k++)j[k]={name:c._getParamName(k),data:d[k],filename:a[k].upload.filename};c._uploadData(a,j)}})}},{key:"_getChunk",value:function(a,b){for(var c=0;c<a.upload.totalChunkCount;c++)if(void 0!==a.upload.chunks[c]&&a.upload.chunks[c].xhr===b)return a.upload.chunks[c]}},{key:"_uploadData",value:function(a,c){for(var d=this,e=new XMLHttpRequest,f=a,g=0,f=f;;){var h;if(g>=f.length)break;h=f[g++];h.xhr=e}a[0].upload.chunked&&(a[0].upload.chunks[c[0].chunkIndex].xhr=e);var i=this.resolveOption(this.options.method,a),j=this.resolveOption(this.options.url,a);e.open(i,j,!0),e.timeout=this.resolveOption(this.options.timeout,a),e.withCredentials=!!this.options.withCredentials,e.onload=function(b){d._finishedUploading(a,e,b)},e.onerror=function(){d._handleUploadError(a,e)},(null!=e.upload?e.upload:e).onprogress=function(b){return d._updateFilesUploadProgress(a,e,b)};var k={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};this.options.headers&&b.extend(k,this.options.headers);for(var l in k){var m=k[l];m&&e.setRequestHeader(l,m)}var n=new FormData;if(this.options.params){var o=this.options.params;"function"==typeof o&&(o=o.call(this,a,e,a[0].upload.chunked?this._getChunk(a[0],e):null));for(var p in o){var q=o[p];n.append(p,q)}}for(var r=a,s=0,r=r;;){var t;if(s>=r.length)break;t=r[s++];var u=t;this.emit("sending",u,e,n)}this.options.uploadMultiple&&this.emit("sendingmultiple",a,e,n),this._addFormElementData(n);for(var v=0;v<c.length;v++){var w=c[v];n.append(w.name,w.data,w.filename)}this.submitRequest(e,n,a)}},{key:"_transformFiles",value:function(a,b){for(var c=this,d=[],e=0,f=0;f<a.length;f++)!function(f){c.options.transformFile.call(c,a[f],function(c){d[f]=c,
+++e===a.length&&b(d)})}(f)}},{key:"_addFormElementData",value:function(a){if("FORM"===this.element.tagName)for(var b=this.element.querySelectorAll("input, textarea, select, button"),c=0,b=b;;){var d;if(c>=b.length)break;d=b[c++];var e=d,f=e.getAttribute("name"),g=e.getAttribute("type");if(g&&(g=g.toLowerCase()),void 0!==f&&null!==f)if("SELECT"===e.tagName&&e.hasAttribute("multiple"))for(var h=e.options,i=0,h=h;;){var j;if(i>=h.length)break;j=h[i++];var k=j;k.selected&&a.append(f,k.value)}else(!g||"checkbox"!==g&&"radio"!==g||e.checked)&&a.append(f,e.value)}}},{key:"_updateFilesUploadProgress",value:function(a,b,c){var d=void 0;if(void 0!==c){if(d=100*c.loaded/c.total,a[0].upload.chunked){var e=a[0],f=this._getChunk(e,b);f.progress=d,f.total=c.total,f.bytesSent=c.loaded;e.upload.progress=0,e.upload.total=0,e.upload.bytesSent=0;for(var g=0;g<e.upload.totalChunkCount;g++)void 0!==e.upload.chunks[g]&&void 0!==e.upload.chunks[g].progress&&(e.upload.progress+=e.upload.chunks[g].progress,e.upload.total+=e.upload.chunks[g].total,e.upload.bytesSent+=e.upload.chunks[g].bytesSent);e.upload.progress=e.upload.progress/e.upload.totalChunkCount}else for(var h=a,i=0,h=h;;){var j;if(i>=h.length)break;j=h[i++];var k=j;k.upload.progress=d,k.upload.total=c.total,k.upload.bytesSent=c.loaded}for(var l=a,m=0,l=l;;){var n;if(m>=l.length)break;n=l[m++];var o=n;this.emit("uploadprogress",o,o.upload.progress,o.upload.bytesSent)}}else{var p=!0;d=100;for(var q=a,r=0,q=q;;){var s;if(r>=q.length)break;s=q[r++];var t=s;100===t.upload.progress&&t.upload.bytesSent===t.upload.total||(p=!1),t.upload.progress=d,t.upload.bytesSent=t.upload.total}if(p)return;for(var u=a,v=0,u=u;;){var w;if(v>=u.length)break;w=u[v++];var x=w;this.emit("uploadprogress",x,d,x.upload.bytesSent)}}}},{key:"_finishedUploading",value:function(a,c,d){var e=void 0;if(a[0].status!==b.CANCELED&&4===c.readyState){if("arraybuffer"!==c.responseType&&"blob"!==c.responseType&&(e=c.responseText,c.getResponseHeader("content-type")&&~c.getResponseHeader("content-type").indexOf("application/json")))try{e=JSON.parse(e)}catch(a){d=a,e="Invalid JSON response from server."}this._updateFilesUploadProgress(a),200<=c.status&&c.status<300?a[0].upload.chunked?a[0].upload.finishedChunkUpload(this._getChunk(a[0],c)):this._finished(a,e,d):this._handleUploadError(a,c,e)}}},{key:"_handleUploadError",value:function(a,c,d){if(a[0].status!==b.CANCELED){if(a[0].upload.chunked&&this.options.retryChunks){var e=this._getChunk(a[0],c);if(e.retries++<this.options.retryChunksLimit)return void this._uploadData(a,[e.dataBlock]);console.warn("Retried this chunk too often. Giving up.")}for(var f=a,g=0,f=f;;){if(g>=f.length)break;f[g++];this._errorProcessing(a,d||this.options.dictResponseError.replace("{{statusCode}}",c.status),c)}}}},{key:"submitRequest",value:function(a,b,c){a.send(b)}},{key:"_finished",value:function(a,c,d){for(var e=a,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;h.status=b.SUCCESS,this.emit("success",h,c,d),this.emit("complete",h)}if(this.options.uploadMultiple&&(this.emit("successmultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(a,c,d){for(var e=a,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;h.status=b.ERROR,this.emit("error",h,c,d),this.emit("complete",h)}if(this.options.uploadMultiple&&(this.emit("errormultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0;return("x"===a?b:3&b|8).toString(16)})}}]),b}(Emitter);Dropzone.initClass(),Dropzone.version="5.5.0",Dropzone.options={},Dropzone.optionsForElement=function(a){return a.getAttribute("id")?Dropzone.options[camelize(a.getAttribute("id"))]:void 0},Dropzone.instances=[],Dropzone.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},Dropzone.autoDiscover=!0,Dropzone.discover=function(){var a=void 0;if(document.querySelectorAll)a=document.querySelectorAll(".dropzone");else{a=[];var b=function(b){return function(){for(var c=[],d=b,e=0,d=d;;){var f;if(e>=d.length)break;f=d[e++];var g=f;/(^| )dropzone($| )/.test(g.className)?c.push(a.push(g)):c.push(void 0)}return c}()};b(document.getElementsByTagName("div")),b(document.getElementsByTagName("form"))}return function(){for(var b=[],c=a,d=0,c=c;;){var e;if(d>=c.length)break;e=c[d++];var f=e;!1!==Dropzone.optionsForElement(f)?b.push(new Dropzone(f)):b.push(void 0)}return b}()},Dropzone.blacklistedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],Dropzone.isBrowserSupported=function(){var a=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(var b=Dropzone.blacklistedBrowsers,c=0,b=b;;){var d;if(c>=b.length)break;d=b[c++];var e=d;e.test(navigator.userAgent)&&(a=!1)}else a=!1;else a=!1;return a},Dropzone.dataURItoBlob=function(a){for(var b=atob(a.split(",")[1]),c=a.split(",")[0].split(":")[1].split(";")[0],d=new ArrayBuffer(b.length),e=new Uint8Array(d),f=0,g=b.length,h=0<=g;h?f<=g:f>=g;h?f++:f--)e[f]=b.charCodeAt(f);return new Blob([d],{type:c})};var without=function(a,b){return a.filter(function(a){return a!==b}).map(function(a){return a})},camelize=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})};Dropzone.createElement=function(a){var b=document.createElement("div");return b.innerHTML=a,b.childNodes[0]},Dropzone.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},Dropzone.getElement=function(a,b){var c=void 0;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},Dropzone.getElements=function(a,b){var c=void 0,d=void 0;if(a instanceof Array){d=[];try{for(var e=a,f=0,e=e;!(f>=e.length);)c=e[f++],d.push(this.getElement(c,b))}catch(a){d=null}}else if("string"==typeof a){d=[];for(var g=document.querySelectorAll(a),h=0,g=g;!(h>=g.length);)c=g[h++],d.push(c)}else null!=a.nodeType&&(d=[a]);if(null==d||!d.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return d},Dropzone.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},Dropzone.isValidFile=function(a,b){if(!b)return!0;b=b.split(",");for(var c=a.type,d=c.replace(/\/.*$/,""),e=b,f=0,e=e;;){var g;if(f>=e.length)break;g=e[f++];var h=g;if(h=h.trim(),"."===h.charAt(0)){if(-1!==a.name.toLowerCase().indexOf(h.toLowerCase(),a.name.length-h.length))return!0}else if(/\/\*$/.test(h)){if(d===h.replace(/\/.*$/,""))return!0}else if(c===h)return!0}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(a){return this.each(function(){return new Dropzone(this,a)})}),"undefined"!=typeof module&&null!==module?module.exports=Dropzone:window.Dropzone=Dropzone,Dropzone.ADDED="added",Dropzone.QUEUED="queued",Dropzone.ACCEPTED=Dropzone.QUEUED,Dropzone.UPLOADING="uploading",Dropzone.PROCESSING=Dropzone.UPLOADING,Dropzone.CANCELED="canceled",Dropzone.ERROR="error",Dropzone.SUCCESS="success";var detectVerticalSquash=function(a){var b=(a.naturalWidth,a.naturalHeight),c=document.createElement("canvas");c.width=1,c.height=b;var d=c.getContext("2d");d.drawImage(a,0,0);for(var e=d.getImageData(1,0,1,b),f=e.data,g=0,h=b,i=b;i>g;){0===f[4*(i-1)+3]?h=i:g=i,i=h+g>>1}var j=i/b;return 0===j?1:j},drawImageIOSFix=function(a,b,c,d,e,f,g,h,i,j){var k=detectVerticalSquash(b);return a.drawImage(b,c,d,e,f,g,h,i,j/k)},ExifRestore=function(){function a(){_classCallCheck(this,a)}return _createClass(a,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(a){for(var b="",c=void 0,d=void 0,e="",f=void 0,g=void 0,h=void 0,i="",j=0;;)if(c=a[j++],d=a[j++],e=a[j++],f=c>>2,g=(3&c)<<4|d>>4,h=(15&d)<<2|e>>6,i=63&e,isNaN(d)?h=i=64:isNaN(e)&&(i=64),b=b+this.KEY_STR.charAt(f)+this.KEY_STR.charAt(g)+this.KEY_STR.charAt(h)+this.KEY_STR.charAt(i),c=d=e="",f=g=h=i="",!(j<a.length))break;return b}},{key:"restore",value:function(a,b){if(!a.match("data:image/jpeg;base64,"))return b;var c=this.decode64(a.replace("data:image/jpeg;base64,","")),d=this.slice2Segments(c),e=this.exifManipulation(b,d);return"data:image/jpeg;base64,"+this.encode64(e)}},{key:"exifManipulation",value:function(a,b){var c=this.getExifArray(b),d=this.insertExif(a,c);return new Uint8Array(d)}},{key:"getExifArray",value:function(a){for(var b=void 0,c=0;c<a.length;){if(b=a[c],255===b[0]&225===b[1])return b;c++}return[]}},{key:"insertExif",value:function(a,b){var c=a.replace("data:image/jpeg;base64,",""),d=this.decode64(c),e=d.indexOf(255,3),f=d.slice(0,e),g=d.slice(e),h=f;return h=h.concat(b),h=h.concat(g)}},{key:"slice2Segments",value:function(a){for(var b=0,c=[];;){var d;if(255===a[b]&218===a[b+1])break;if(255===a[b]&216===a[b+1])b+=2;else{d=256*a[b+2]+a[b+3];var e=b+d+2,f=a.slice(b,e);c.push(f),b=e}if(b>a.length)break}return c}},{key:"decode64",value:function(a){var b=void 0,c=void 0,d="",e=void 0,f=void 0,g=void 0,h="",i=0,j=[],k=/[^A-Za-z0-9\+\/\=]/g;for(k.exec(a)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");;)if(e=this.KEY_STR.indexOf(a.charAt(i++)),f=this.KEY_STR.indexOf(a.charAt(i++)),g=this.KEY_STR.indexOf(a.charAt(i++)),h=this.KEY_STR.indexOf(a.charAt(i++)),b=e<<2|f>>4,c=(15&f)<<4|g>>2,d=(3&g)<<6|h,j.push(b),64!==g&&j.push(c),64!==h&&j.push(d),b=c=d="",e=f=g=h="",!(i<a.length))break;return j}}]),a}();ExifRestore.initClass();var contentLoaded=function(a,b){var c=!1,d=!0,e=a.document,f=e.documentElement,g=e.addEventListener?"addEventListener":"attachEvent",h=e.addEventListener?"removeEventListener":"detachEvent",i=e.addEventListener?"":"on",j=function d(f){if("readystatechange"!==f.type||"complete"===e.readyState)return("load"===f.type?a:e)[h](i+f.type,d,!1),!c&&(c=!0)?b.call(a,f.type||f):void 0};if("complete"!==e.readyState){if(e.createEventObject&&f.doScroll){try{d=!a.frameElement}catch(a){}d&&function a(){try{f.doScroll("left")}catch(b){return void setTimeout(a,50)}return j("poll")}()}return e[g](i+"DOMContentLoaded",j,!1),e[g](i+"readystatechange",j,!1),a[g](i+"load",j,!1)}};Dropzone._autoDiscoverFunction=function(){if(Dropzone.autoDiscover)return Dropzone.discover()},contentLoaded(window,Dropzone._autoDiscoverFunction);
\ No newline at end of file
diff --git a/public/vendor/gaspertrix/laravel-backpack-dropzone-field/sortable/Sortable.min.js b/public/vendor/gaspertrix/laravel-backpack-dropzone-field/sortable/Sortable.min.js
new file mode 100644 (file)
index 0000000..4c6f5b0
--- /dev/null
@@ -0,0 +1,3 @@
+/*! Sortable 1.7.0 - MIT | git://github.com/rubaxa/Sortable.git */
+
+!function(t){"use strict";"function"==typeof define&&define.amd?define(t):"undefined"!=typeof module&&void 0!==module.exports?module.exports=t():window.Sortable=t()}(function(){"use strict";if("undefined"==typeof window||!window.document)return function(){throw new Error("Sortable.js requires a window with a document")};var t,e,n,o,i,r,a,l,s,c,d,h,u,f,p,g,v,m,_,b,D,y={},w=/\s+/g,T=/left|right|inline/,S="Sortable"+(new Date).getTime(),C=window,E=C.document,x=C.parseInt,k=C.setTimeout,N=C.jQuery||C.Zepto,B=C.Polymer,P=!1,Y="draggable"in E.createElement("div"),X=!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\.|msie)/i)&&((D=E.createElement("x")).style.cssText="pointer-events:auto","auto"===D.style.pointerEvents),O=!1,I=Math.abs,M=Math.min,A=[],R=[],L=function(){return!1},F=ot(function(t,e,n){if(n&&e.scroll){var o,i,r,a,d,h,u=n[S],f=e.scrollSensitivity,p=e.scrollSpeed,g=t.clientX,v=t.clientY,m=window.innerWidth,b=window.innerHeight;if(s!==n&&(l=e.scroll,s=n,c=e.scrollFn,!0===l)){l=n;do{if(l.offsetWidth<l.scrollWidth||l.offsetHeight<l.scrollHeight)break}while(l=l.parentNode)}l&&(o=l,i=l.getBoundingClientRect(),r=(I(i.right-g)<=f)-(I(i.left-g)<=f),a=(I(i.bottom-v)<=f)-(I(i.top-v)<=f)),r||a||(a=(b-v<=f)-(v<=f),((r=(m-g<=f)-(g<=f))||a)&&(o=C)),y.vx===r&&y.vy===a&&y.el===o||(y.el=o,y.vx=r,y.vy=a,clearInterval(y.pid),o&&(y.pid=setInterval(function(){h=a?a*p:0,d=r?r*p:0,"function"==typeof c&&"continue"!==c.call(u,d,h,t,_,o)||(o===C?C.scrollTo(C.pageXOffset+d,C.pageYOffset+h):(o.scrollTop+=h,o.scrollLeft+=d))},24)))}},30),H=function(t){function e(t,e){return null!=t&&!0!==t||null!=(t=n.name)?"function"==typeof t?t:function(n,o){var i=o.options.group.name;return e?t:t&&(t.join?t.indexOf(i)>-1:i==t)}:L}var n={},o=t.group;o&&"object"==typeof o||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n};try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){P={capture:!1,passive:!1}}}))}catch(t){}function W(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be HTMLElement, and not "+{}.toString.call(t);this.el=t,this.options=e=it({},e),t[S]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(t.nodeName)?"li":">*",ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==W.supportPointer};for(var o in n)!(o in e)&&(e[o]=n[o]);H(e);for(var i in this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&Y,V(t,"mousedown",this._onTapStart),V(t,"touchstart",this._onTapStart),e.supportPointer&&V(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(V(t,"dragover",this),V(t,"dragenter",this)),R.push(this._onDragOver),e.store&&this.sort(e.store.get(this))}function j(e,n){"clone"!==e.lastPullMode&&(n=!0),o&&o.state!==n&&(G(o,"display",n?"none":""),n||o.state&&(e.options.group.revertClone?(i.insertBefore(o,r),e._animate(t,o)):i.insertBefore(o,t)),o.state=n)}function U(t,e,n){if(t){n=n||E;do{if(">*"===e&&t.parentNode===n||nt(t,e))return t}while(void 0,t=(i=(o=t).host)&&i.nodeType?i:o.parentNode)}var o,i;return null}function V(t,e,n){t.addEventListener(e,n,P)}function q(t,e,n){t.removeEventListener(e,n,P)}function z(t,e,n){if(t)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(w," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(w," ")}}function G(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return E.defaultView&&E.defaultView.getComputedStyle?n=E.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function Q(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i<r;i++)n(o[i],i);return o}return[]}function Z(t,e,n,i,r,a,l,s,c){t=t||e[S];var d=E.createEvent("Event"),h=t.options,u="on"+n.charAt(0).toUpperCase()+n.substr(1);d.initEvent(n,!0,!0),d.to=r||e,d.from=a||e,d.item=i||e,d.clone=o,d.oldIndex=l,d.newIndex=s,d.originalEvent=c,e.dispatchEvent(d),h[u]&&h[u].call(t,d)}function J(t,e,n,o,i,r,a,l){var s,c,d=t[S],h=d.options.onMove;return(s=E.createEvent("Event")).initEvent("move",!0,!0),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||e.getBoundingClientRect(),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),h&&(c=h.call(d,s,a)),c}function K(t){t.draggable=!1}function $(){O=!1}function tt(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function et(t,e){var n=0;if(!t||!t.parentNode)return-1;for(;t&&(t=t.previousElementSibling);)"TEMPLATE"===t.nodeName.toUpperCase()||">*"!==e&&!nt(t,e)||n++;return n}function nt(t,e){if(t){if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e)}return!1}function ot(t,e){var n,o;return function(){void 0===n&&(n=arguments,o=this,k(function(){1===n.length?t.call(o,n[0]):t.apply(o,n),n=void 0},e))}}function it(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function rt(t){return B&&B.dom?B.dom(t).cloneNode(!0):N?N(t).clone(!0)[0]:t.cloneNode(!0)}function at(t){return k(t,0)}function lt(t){return clearTimeout(t)}return W.prototype={constructor:W,_onTapStart:function(e){var n,o=this,i=this.el,r=this.options,l=r.preventOnFilter,s=e.type,c=e.touches&&e.touches[0],d=(c||e).target,h=e.target.shadowRoot&&e.path&&e.path[0]||d,u=r.filter;if(function(t){A.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&A.push(o)}}(i),!t&&!(/mousedown|pointerdown/.test(s)&&0!==e.button||r.disabled)&&!h.isContentEditable&&(d=U(d,r.draggable,i))&&a!==d){if(n=et(d,r.draggable),"function"==typeof u){if(u.call(this,e,d,this))return Z(o,h,"filter",d,i,i,n),void(l&&e.preventDefault())}else if(u&&(u=u.split(",").some(function(t){if(t=U(h,t.trim(),i))return Z(o,t,"filter",d,i,i,n),!0})))return void(l&&e.preventDefault());r.handle&&!U(h,r.handle,i)||this._prepareDragStart(e,c,d,n)}},_prepareDragStart:function(n,o,l,s){var c,d=this,h=d.el,u=d.options,p=h.ownerDocument;l&&!t&&l.parentNode===h&&(m=n,i=h,e=(t=l).parentNode,r=t.nextSibling,a=l,g=u.group,f=s,this._lastX=(o||n).clientX,this._lastY=(o||n).clientY,t.style["will-change"]="all",c=function(){d._disableDelayedDrag(),t.draggable=d.nativeDraggable,z(t,u.chosenClass,!0),d._triggerDragStart(n,o),Z(d,i,"choose",t,i,i,f)},u.ignore.split(",").forEach(function(e){Q(t,e.trim(),K)}),V(p,"mouseup",d._onDrop),V(p,"touchend",d._onDrop),V(p,"touchcancel",d._onDrop),V(p,"selectstart",d),u.supportPointer&&V(p,"pointercancel",d._onDrop),u.delay?(V(p,"mouseup",d._disableDelayedDrag),V(p,"touchend",d._disableDelayedDrag),V(p,"touchcancel",d._disableDelayedDrag),V(p,"mousemove",d._disableDelayedDrag),V(p,"touchmove",d._disableDelayedDrag),u.supportPointer&&V(p,"pointermove",d._disableDelayedDrag),d._dragStartTimer=k(c,u.delay)):c())},_disableDelayedDrag:function(){var t=this.el.ownerDocument;clearTimeout(this._dragStartTimer),q(t,"mouseup",this._disableDelayedDrag),q(t,"touchend",this._disableDelayedDrag),q(t,"touchcancel",this._disableDelayedDrag),q(t,"mousemove",this._disableDelayedDrag),q(t,"touchmove",this._disableDelayedDrag),q(t,"pointermove",this._disableDelayedDrag)},_triggerDragStart:function(e,n){(n=n||("touch"==e.pointerType?e:null))?(m={target:t,clientX:n.clientX,clientY:n.clientY},this._onDragStart(m,"touch")):this.nativeDraggable?(V(t,"dragend",this),V(i,"dragstart",this._onDragStart)):this._onDragStart(m,!0);try{E.selection?at(function(){E.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(){if(i&&t){var e=this.options;z(t,e.ghostClass,!0),z(t,e.dragClass,!1),W.active=this,Z(this,i,"start",t,i,i,f)}else this._nulling()},_emulateDragOver:function(){if(_){if(this._lastX===_.clientX&&this._lastY===_.clientY)return;this._lastX=_.clientX,this._lastY=_.clientY,X||G(n,"display","none");var t=E.elementFromPoint(_.clientX,_.clientY),e=t,o=R.length;if(t&&t.shadowRoot&&(e=t=t.shadowRoot.elementFromPoint(_.clientX,_.clientY)),e)do{if(e[S]){for(;o--;)R[o]({clientX:_.clientX,clientY:_.clientY,target:t,rootEl:e});break}t=e}while(e=e.parentNode);X||G(n,"display","")}},_onTouchMove:function(t){if(m){var e=this.options,o=e.fallbackTolerance,i=e.fallbackOffset,r=t.touches?t.touches[0]:t,a=r.clientX-m.clientX+i.x,l=r.clientY-m.clientY+i.y,s=t.touches?"translate3d("+a+"px,"+l+"px,0)":"translate("+a+"px,"+l+"px)";if(!W.active){if(o&&M(I(r.clientX-this._lastX),I(r.clientY-this._lastY))<o)return;this._dragStarted()}this._appendGhost(),b=!0,_=r,G(n,"webkitTransform",s),G(n,"mozTransform",s),G(n,"msTransform",s),G(n,"transform",s),t.preventDefault()}},_appendGhost:function(){if(!n){var e,o=t.getBoundingClientRect(),r=G(t),a=this.options;z(n=t.cloneNode(!0),a.ghostClass,!1),z(n,a.fallbackClass,!0),z(n,a.dragClass,!0),G(n,"top",o.top-x(r.marginTop,10)),G(n,"left",o.left-x(r.marginLeft,10)),G(n,"width",o.width),G(n,"height",o.height),G(n,"opacity","0.8"),G(n,"position","fixed"),G(n,"zIndex","100000"),G(n,"pointerEvents","none"),a.fallbackOnBody&&E.body.appendChild(n)||i.appendChild(n),e=n.getBoundingClientRect(),G(n,"width",2*o.width-e.width),G(n,"height",2*o.height-e.height)}},_onDragStart:function(e,n){var r=this,a=e.dataTransfer,l=r.options;r._offUpEvents(),g.checkPull(r,r,t,e)&&((o=rt(t)).draggable=!1,o.style["will-change"]="",G(o,"display","none"),z(o,r.options.chosenClass,!1),r._cloneId=at(function(){i.insertBefore(o,t),Z(r,i,"clone",t)})),z(t,l.dragClass,!0),n?("touch"===n?(V(E,"touchmove",r._onTouchMove),V(E,"touchend",r._onDrop),V(E,"touchcancel",r._onDrop),l.supportPointer&&(V(E,"pointermove",r._onTouchMove),V(E,"pointerup",r._onDrop))):(V(E,"mousemove",r._onTouchMove),V(E,"mouseup",r._onDrop)),r._loopId=setInterval(r._emulateDragOver,50)):(a&&(a.effectAllowed="move",l.setData&&l.setData.call(r,a,t)),V(E,"drop",r),r._dragStartId=at(r._dragStarted))},_onDragOver:function(a){var l,s,c,f,p,m,_=this.el,D=this.options,y=D.group,w=W.active,C=g===y,E=!1,x=D.sort;if((void 0!==a.preventDefault&&(a.preventDefault(),!D.dragoverBubble&&a.stopPropagation()),!t.animated)&&(b=!0,w&&!D.disabled&&(C?x||(f=!i.contains(t)):v===this||(w.lastPullMode=g.checkPull(this,w,t,a))&&y.checkPut(this,w,t,a))&&(void 0===a.rootEl||a.rootEl===this.el))){if(F(a,D,this.el),O)return;if(l=U(a.target,D.draggable,_),s=t.getBoundingClientRect(),v!==this&&(v=this,E=!0),f)return j(w,!0),e=i,void(o||r?i.insertBefore(t,o||r):x||i.appendChild(t));if(0===_.children.length||_.children[0]===n||_===a.target&&(p=a,m=_.lastElementChild.getBoundingClientRect(),p.clientY-(m.top+m.height)>5||p.clientX-(m.left+m.width)>5)){if(0!==_.children.length&&_.children[0]!==n&&_===a.target&&(l=_.lastElementChild),l){if(l.animated)return;c=l.getBoundingClientRect()}j(w,C),!1!==J(i,_,t,s,l,c,a)&&(t.contains(_)||(_.appendChild(t),e=_),this._animate(s,t),l&&this._animate(c,l))}else if(l&&!l.animated&&l!==t&&void 0!==l.parentNode[S]){d!==l&&(d=l,h=G(l),u=G(l.parentNode));var N=(c=l.getBoundingClientRect()).right-c.left,B=c.bottom-c.top,P=T.test(h.cssFloat+h.display)||"flex"==u.display&&0===u["flex-direction"].indexOf("row"),Y=l.offsetWidth>t.offsetWidth,X=l.offsetHeight>t.offsetHeight,I=(P?(a.clientX-c.left)/N:(a.clientY-c.top)/B)>.5,M=l.nextElementSibling,A=!1;if(P){var R=t.offsetTop,L=l.offsetTop;A=R===L?l.previousElementSibling===t&&!Y||I&&Y:l.previousElementSibling===t||t.previousElementSibling===l?(a.clientY-c.top)/B>.5:L>R}else E||(A=M!==t&&!X||I&&X);var H=J(i,_,t,s,l,c,a,A);!1!==H&&(1!==H&&-1!==H||(A=1===H),O=!0,k($,30),j(w,C),t.contains(_)||(A&&!M?_.appendChild(t):l.parentNode.insertBefore(t,A?M:l)),e=t.parentNode,this._animate(s,t),this._animate(c,l))}}},_animate:function(t,e){var n=this.options.animation;if(n){var o=e.getBoundingClientRect();1===t.nodeType&&(t=t.getBoundingClientRect()),G(e,"transition","none"),G(e,"transform","translate3d("+(t.left-o.left)+"px,"+(t.top-o.top)+"px,0)"),e.offsetWidth,G(e,"transition","all "+n+"ms"),G(e,"transform","translate3d(0,0,0)"),clearTimeout(e.animated),e.animated=k(function(){G(e,"transition",""),G(e,"transform",""),e.animated=!1},n)}},_offUpEvents:function(){var t=this.el.ownerDocument;q(E,"touchmove",this._onTouchMove),q(E,"pointermove",this._onTouchMove),q(t,"mouseup",this._onDrop),q(t,"touchend",this._onDrop),q(t,"pointerup",this._onDrop),q(t,"touchcancel",this._onDrop),q(t,"pointercancel",this._onDrop),q(t,"selectstart",this)},_onDrop:function(a){var l=this.el,s=this.options;clearInterval(this._loopId),clearInterval(y.pid),clearTimeout(this._dragStartTimer),lt(this._cloneId),lt(this._dragStartId),q(E,"mouseover",this),q(E,"mousemove",this._onTouchMove),this.nativeDraggable&&(q(E,"drop",this),q(l,"dragstart",this._onDragStart)),this._offUpEvents(),a&&(b&&(a.preventDefault(),!s.dropBubble&&a.stopPropagation()),n&&n.parentNode&&n.parentNode.removeChild(n),i!==e&&"clone"===W.active.lastPullMode||o&&o.parentNode&&o.parentNode.removeChild(o),t&&(this.nativeDraggable&&q(t,"dragend",this),K(t),t.style["will-change"]="",z(t,this.options.ghostClass,!1),z(t,this.options.chosenClass,!1),Z(this,i,"unchoose",t,e,i,f,null,a),i!==e?(p=et(t,s.draggable))>=0&&(Z(null,e,"add",t,e,i,f,p,a),Z(this,i,"remove",t,e,i,f,p,a),Z(null,e,"sort",t,e,i,f,p,a),Z(this,i,"sort",t,e,i,f,p,a)):t.nextSibling!==r&&(p=et(t,s.draggable))>=0&&(Z(this,i,"update",t,e,i,f,p,a),Z(this,i,"sort",t,e,i,f,p,a)),W.active&&(null!=p&&-1!==p||(p=f),Z(this,i,"end",t,e,i,f,p,a),this.save()))),this._nulling()},_nulling:function(){i=t=e=n=r=o=a=l=s=m=_=b=p=d=h=v=g=W.active=null,A.forEach(function(t){t.checked=!0}),A.length=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragover":case"dragenter":t&&(this._onDragOver(e),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move");t.preventDefault()}(e));break;case"mouseover":this._onDrop(e);break;case"selectstart":e.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,i=n.length,r=this.options;o<i;o++)U(t=n[o],r.draggable,this.el)&&e.push(t.getAttribute(r.dataIdAttr)||tt(t));return e},sort:function(t){var e={},n=this.el;this.toArray().forEach(function(t,o){var i=n.children[o];U(i,this.options.draggable,n)&&(e[t]=i)},this),t.forEach(function(t){e[t]&&(n.removeChild(e[t]),n.appendChild(e[t]))})},save:function(){var t=this.options.store;t&&t.set(this)},closest:function(t,e){return U(t,e||this.options.draggable,this.el)},option:function(t,e){var n=this.options;if(void 0===e)return n[t];n[t]=e,"group"===t&&H(n)},destroy:function(){var t=this.el;t[S]=null,q(t,"mousedown",this._onTapStart),q(t,"touchstart",this._onTapStart),q(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(q(t,"dragover",this),q(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),R.splice(R.indexOf(this._onDragOver),1),this._onDrop(),this.el=t=null}},V(E,"touchmove",function(t){W.active&&t.preventDefault()}),W.utils={on:V,off:q,css:G,find:Q,is:function(t,e){return!!U(t,e,t)},extend:it,throttle:ot,closest:U,toggleClass:z,clone:rt,index:et,nextTick:at,cancelNextTick:lt},W.create=function(t,e){return new W(t,e)},W.version="1.7.0",W});
diff --git a/resources/views/vendor/backpack/backupmanager/backup.blade.php b/resources/views/vendor/backpack/backupmanager/backup.blade.php
new file mode 100644 (file)
index 0000000..6cc01d0
--- /dev/null
@@ -0,0 +1,198 @@
+@extends(backpack_view('blank'))
+
+@php
+$breadcrumbs = [
+    trans('backpack::crud.admin') => backpack_url('dashboard'),
+    trans('backpack::backup.backups') => false,
+];
+@endphp
+
+@section('header')
+<section class="container-fluid" bp-section="page-header">
+    <h1 bp-section="page-heading" class="text-capitalize">{{ trans('backpack::backup.backups') }}</h1>
+</section>
+@endsection
+
+@section('content')
+{{-- Default box --}}
+<button id="create-new-backup-button" href="{{ url(config('backpack.base.route_prefix', 'admin').'/backup/create') }}" class="btn btn-primary mb-2">
+    <i class="la la-spinner"></i>
+    <i class="la la-plus"></i>
+    <span>{{ trans('backpack::backup.create_a_new_backup') }}</span>
+</button>
+
+<div class="card">
+    <div class="card-body p-0">
+        <table class="table table-hover pb-0 mb-0">
+            <thead>
+                <tr>
+                    <th>#</th>
+                    <th>{{ trans('backpack::backup.location') }}</th>
+                    <th>{{ trans('backpack::backup.date') }}</th>
+                    <th class="text-right">{{ trans('backpack::backup.file_size') }}</th>
+                    <th class="text-right">{{ trans('backpack::backup.actions') }}</th>
+                </tr>
+            </thead>
+            <tbody>
+                @foreach ($backups as $key => $backup)
+                <tr>
+                    <td>{{ $key + 1 }}</td>
+                    <td>{{ $backup->diskName }}</td>
+                    <td>{{ $backup->lastModified }}</td>
+                    <td class="text-right">{{ $backup->fileSize }} MB</td>
+                    <td class="text-right">
+                        @if ($backup->downloadLink)
+                        <a class="btn btn-sm btn-link" data-button-type="download" href="{{ $backup->downloadLink }}">
+                            <i class="la la-cloud-download"></i> {{ trans('backpack::backup.download') }}
+                        </a>
+                        @endif
+                        <a class="btn btn-sm btn-link" data-button-type="delete" href="{{ $backup->deleteLink }}">
+                            <i class="la la-trash-o"></i> {{ trans('backpack::backup.delete') }}
+                        </a>
+                    </td>
+                </tr>
+                @endforeach
+            </tbody>
+        </table>
+    </div>
+</div>
+@endsection
+
+@section('after_styles')
+<style>
+    #create-new-backup-button.loading>.la-spinner {
+        display: inherit;
+        animation: rotation 1s steps(8, end) infinite;
+    }
+
+    #create-new-backup-button>.la-spinner,
+    #create-new-backup-button.loading>.la-plus {
+        display: none;
+    }
+
+    @keyframes rotation {
+        from {
+            transform: rotate(0deg);
+        }
+
+        to {
+            transform: rotate(359deg);
+        }
+    }
+</style>
+@endsection
+
+@section('after_scripts')
+<script>
+    document.addEventListener('DOMContentLoaded', () => {
+        const storageKey = 'backpack.backupmanager.created';
+        const createButton = document.querySelector('#create-new-backup-button');
+        const deleteButtons = document.querySelectorAll('[data-button-type=delete]');
+        const downloadButtons = document.querySelectorAll('[data-button-type=download]');
+        const defaultHeaders = { 
+            'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
+            'Accept': 'application/json',
+        };
+
+        const trans = {
+            create_confirmation_title: "{{ trans('backpack::backup.create_confirmation_title') }}",
+            create_started_message: "{{ trans('backpack::backup.create_started_message') }}",
+            create_error_title: "{{ trans('backpack::backup.create_error_title') }}",
+            create_completed_title: "{{ trans('backpack::backup.create_completed_title') }}",
+            download_confirmation_title: "{{ trans('backpack::backup.download_confirmation_title') }}",
+            delete_error_title: "{{ trans('backpack::backup.delete_error_title') }}",
+            delete_confirm: "{{ trans('backpack::backup.delete_confirm') }}",
+            delete_cancel_title: "{{ trans('backpack::backup.delete_cancel_title') }}",
+            delete_cancel_message: "{{ trans('backpack::backup.delete_cancel_message') }}",
+            delete_confirmation_title: "{{ trans('backpack::backup.delete_confirmation_title') }}",
+            delete_confirmation_message: "{{ trans('backpack::backup.delete_confirmation_message') }}",
+        }
+
+        // Noty alert helper
+        const notyAlert = (title, message = '', type = 'success') => new Noty({text: `<strong>${title}</strong><br>${message}`, type}).show();
+
+        // Set button status helper
+        const setCreateButtonLoading = status => {
+            createButton.classList.toggle('loading', status);
+            createButton.toggleAttribute('disabled', status);
+        }
+
+        // capture the Create new backup button
+        createButton.onclick = async e => {
+            e.preventDefault();
+
+            setCreateButtonLoading(true);
+            notyAlert(trans.create_confirmation_title, trans.create_started_message);
+
+            // do the backup through ajax
+            try {
+                let response = await fetch(createButton.getAttribute('href'), {
+                    method: 'PUT', 
+                    headers: defaultHeaders
+                });
+
+                let result = await response.text();
+
+                // Show an alert with the result
+                if(!response.ok || result.includes('failed')) {
+                    throw new Error(result);
+                }
+
+                localStorage.setItem(storageKey, true);
+                location.reload();
+            }
+            catch (result) {
+                // Show an alert with the result
+                notyAlert(trans.create_error_title, result, 'warning');
+            }
+
+            setCreateButtonLoading(false);
+        }
+
+        // capture the delete button
+        deleteButtons.forEach(deleteButton => {
+            deleteButton.onclick = async e => {
+                e.preventDefault();
+
+                if (!confirm(trans.delete_confirm)) {
+                    return notyAlert(trans.delete_cancel_title, trans.delete_cancel_message, 'info');
+                }
+
+                try {
+                    let response = await fetch(deleteButton.getAttribute('href'), {
+                        method: 'DELETE', 
+                        headers: defaultHeaders
+                    });
+
+                    let result = await response.text();
+
+                    // Show an alert with the result
+                    if(!response.ok) {
+                        throw new Error(result);
+                    }
+
+                    notyAlert(trans.delete_confirmation_title, trans.delete_confirmation_message);
+
+                    // delete the row from the table
+                    deleteButton.closest('tr').remove();
+                }
+                catch (result) {
+                    // Show an alert with the result
+                    notyAlert(trans.delete_error_title, result, 'warning');
+                }
+            }
+        });
+
+        // capture the download button
+        downloadButtons.forEach(downloadButton => {
+            downloadButton.onclick = e => notyAlert(trans.download_confirmation_title);
+        });
+
+        // Show messages stored on session
+        if(localStorage.getItem(storageKey)) {
+            localStorage.removeItem(storageKey);
+            notyAlert(trans.create_completed_title);
+        }
+    });
+</script>
+@endsection
\ No newline at end of file
diff --git a/resources/views/vendor/backpack/crud/fields/dropzone_media.blade.php b/resources/views/vendor/backpack/crud/fields/dropzone_media.blade.php
new file mode 100644 (file)
index 0000000..6aee771
--- /dev/null
@@ -0,0 +1,227 @@
+@section('previewTemplate')
+<div class="dz-preview dz-file-preview">
+       <div class="dz-image">
+               <img data-dz-thumbnail />
+       </div>
+       <div class="dz-details">
+               <div class="dz-size">
+                       <span data-dz-size></span>
+               </div>
+               <div class="dz-filename">
+                       <span data-dz-name></span>
+               </div>
+       </div>
+       <div class="dz-progress">
+               <span class="dz-upload" data-dz-uploadprogress></span>
+       </div>
+       <div class="dz-error-message">
+               <span data-dz-errormessage></span>
+       </div>
+       <div class="dz-success-mark">
+               <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
+                       <title>Check</title>
+                       <defs></defs>
+                       <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
+                               <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
+                       </g>
+               </svg>
+       </div>
+       <div class="dz-error-mark">
+               <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
+                       <title>Error</title>
+                       <defs></defs>
+                       <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
+                               <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">
+                                       <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>
+                               </g>
+                       </g>
+               </svg>
+       </div>
+</div>
+@endsection
+
+<div class="form-group col-md-12">
+       <strong>{{ $field['label'] }}</strong> <br>
+       <div id="dropzone_{{ $field['name'] }}" class="dropzone dz-clickable sortable">
+           <div class="dz-message">
+               Drop files here or click to upload.
+           </div>
+       </div>
+</div>
+
+{{-- ########################################## --}}
+{{-- Extra CSS and JS for this particular field --}}
+{{-- If a field type is shown multiple times on a form, the CSS and JS will only be loaded once --}}
+@if ($crud->checkIfFieldIsFirstOfItsType($field, $fields))
+    {{-- FIELD CSS - will be loaded in the after_styles section --}}
+    @push('crud_fields_styles')
+        <!-- include dropzone css-->
+        <link rel="stylesheet" href="{{ asset('vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.css') }}" />
+    @endpush
+
+    {{-- FIELD JS - will be loaded in the after_scripts section --}}
+    @push('crud_fields_scripts')
+        <!-- include dropzone js-->
+        <script src="{{ asset('vendor/gaspertrix/laravel-backpack-dropzone-field/dropzone/dropzone.min.js') }}"></script>
+        <script src="{{ asset('vendor/gaspertrix/laravel-backpack-dropzone-field/sortable/Sortable.min.js') }}"></script>
+    @endpush
+
+@endif
+
+@push('crud_fields_scripts')
+       <script type="text/javascript">
+               jQuery(document).ready(function() {
+                       Dropzone.autoDiscover = false;
+
+                       var dOptions = {
+                               url: "{{ url($crud->route . '/' . $entry->id . '/media') }}",
+                               previewTemplate: '{!! str_replace(array("\r\n", "\r", "\n"), "", addslashes(View::getSection("previewTemplate"))); !!}',
+                               init: function() {
+                                       var files = [];
+
+                                       @foreach ($entry->getMedia($field['collection']) as $media)
+                                       files.push({id: {{ $media->id }}, order_column: {{ $media->order_column }}, size: "{{ $media->size }}", name: "{{ $media->file_name }}", full_url: "{{ $media->getUrl() }}", thumb_url: "{{ $media->getUrl($field['thumb_collection'] ?? '') }}"});
+                                       @endforeach
+
+                                       for (var i = 0; i < files.length; i++) {
+                                               var file = files[i];
+
+                                               this.emit('addedfile', file);
+
+                                               if (typeof file.full_url != 'undefined') {
+                                                       this.emit('thumbnail', file, file.full_url);
+                                               }
+
+                                               this.emit('success', file, {success:true, media: file});
+                                               this.emit('complete', file);
+                                       }
+
+                                       if (this.options.maxFiles !== null) {
+                                               this.options.maxFiles = this.options.maxFiles - files.length;
+                                       }
+                               },
+                               sending: function(file, xhr, formData) {
+                               formData.append('_token', $('meta[name="csrf-token"]').attr('content'));
+
+                               @if (isset($field['collection']) AND !empty($field['collection']))
+                               formData.append('collection', "{{ $field['collection'] }}");
+                               @endif
+                           },
+                           success: function(file, response) {
+                               if (typeof response != 'undefined' && response.success == true) {
+                                               file.media = response.media;
+                                               file.previewElement.setAttribute('data-id', response.media.id);
+                                               file.previewElement.setAttribute('data-position', response.media.order_column);
+                                       }
+
+                                       if (file.previewElement) {
+                                               return file.previewElement.classList.add("dz-success");
+                                       }
+                       },
+                       removedfile: function(file) {
+                               if (typeof file.media != 'undefined') {
+                                       $.ajax({
+                                                       url: "{{ url($crud->route . '/' . $entry->id . '/media') }}" + '/' + file.media.id,
+                                                       type: 'DELETE'
+                                               })
+                                               .done(function(response) {
+                                                       var notification_type;
+
+                                                       if (response.success == true) {
+                                                               notification_type = 'success';
+
+                                                               if (file.previewElement != null && file.previewElement.parentNode != null) {
+                                                               file.previewElement.parentNode.removeChild(file.previewElement);
+                                                       }
+                                                       }
+                                                       else {
+                                                               notification_type = 'error';
+                                                       }
+
+                                                       new Noty({
+                                                               text: response.message,
+                                                               type: notification_type,
+                                                               icon: false
+                                                       });
+                                               })
+                                               .fail(function (xhr) {
+                                                       var message = 'Deletion failed';
+
+                                                       if (xhr.responseJSON != 'undefined' && xhr.responseJSON.message != 'undefined') {
+                                                               message = xhr.responseJSON.message;
+                                                       }
+
+                                                       new Noty({
+                                                               text: message,
+                                                               type: 'error',
+                                                               icon: false
+                                                       });
+                                               });
+
+                                               return this._updateMaxFilesReachedClass();
+                               }
+
+                               if (file.previewElement != null && file.previewElement.parentNode != null) {
+                                       file.previewElement.parentNode.removeChild(file.previewElement);
+                               }
+
+                               return this._updateMaxFilesReachedClass();
+                       },
+                       };
+
+                       var cOptions = @json($field['options']);
+
+                       var dropzone_{{ $field['name'] }} = new Dropzone("#dropzone_{{ $field['name'] }}", jQuery.extend(dOptions, cOptions));
+
+                       var dropzone_{{ $field['name'] }}_sortable = new Sortable(document.getElementById("dropzone_{{ $field['name'] }}"), {
+                   handle: ".dz-preview",
+                   draggable: ".dz-preview",
+                   onEnd: function(evt) {
+                       var ids = this.toArray();
+
+                       if (ids.length > 0) {
+                               $.ajax({
+                                                       url: "{{ url($crud->route . '/' . $entry->id . '/media/reorder') }}",
+                                                       type: 'POST',
+                                                       data: {
+                                                               ids: ids
+                                                       }
+                                               })
+                                               .done(function(response) {
+                                                       var notification_type;
+
+                                                       if (response.success != true) {
+                                                               var message = 'Order failed';
+
+                                                               if (response.message != 'undefined') {
+                                                                       message = response.message;
+                                                               }
+
+                                                               new Noty({
+                                                                       text: message,
+                                                                       type: 'error',
+                                                                       icon: false
+                                                               });
+                                                       }
+
+                               
+                                               })
+                                               .fail(function (xhr) {
+                                                       var message = 'Order failed';
+
+                                                       if (xhr.responseJSON != 'undefined' && xhr.responseJSON.message != 'undefined') {
+                                                               message = xhr.responseJSON.message;
+                                                       }
+
+                                                       new Noty({
+                                                               text: message,
+                                                               type: 'error',
+                                                               icon: false
+                                                       });
+                                               });
+                       }
+                   }
+               });
+               });
+       </script>
+@endpush
\ No newline at end of file
diff --git a/resources/views/vendor/backpack/ui/inc/menu_items.blade.php b/resources/views/vendor/backpack/ui/inc/menu_items.blade.php
new file mode 100644 (file)
index 0000000..735ec95
--- /dev/null
@@ -0,0 +1,6 @@
+{{-- This file is used for menu items by any Backpack v6 theme --}}
+<li class="nav-item"><a class="nav-link" href="{{ backpack_url('dashboard') }}"><i class="la la-home nav-icon"></i> {{ trans('backpack::base.dashboard') }}</a></li>
+
+<li><a href='{{ backpack_url('backup') }}'><i class='la la-hdd-o'></i> <span>Backups</span></a></li>
+<li><a href='{{ backpack_url('log') }}'><i class='la la-terminal'></i> <span>Logs</span></a></li>
+<li class='nav-item nav-dropdown'><a class='nav-link nav-dropdown-toggle' href='#'><i class='nav-icon la la-group'></i>Authentication</a><ul class='nav-dropdown-items'><li class='nav-item'><a class='nav-link' href='{{ backpack_url('user') }}'><i class='nav-icon la la-user'></i><span>Users</span></a></li><li class='nav-item'><a class='nav-link' href='{{ backpack_url('role') }}'><i class='nav-icon la la-group'></i> <span>Roles</span></a></li><li class='nav-item'><a class='nav-link' href='{{ backpack_url('permission') }}'><i class='nav-icon la la-key'></i><span>Permissions</span></a></li></ul></li>
\ No newline at end of file
diff --git a/routes/backpack/custom.php b/routes/backpack/custom.php
new file mode 100644 (file)
index 0000000..843555b
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+Route::group([
+    'prefix'     => config('backpack.base.route_prefix', 'admin'),
+    'middleware' => ['web', config('backpack.base.middleware_key', 'admin')],
+    'namespace'  => 'App\Http\Controllers\Admin',
+], function () { // custom admin routes
+    
+});
diff --git a/routes/backpack/permissionmanager.php b/routes/backpack/permissionmanager.php
new file mode 100644 (file)
index 0000000..ae0046e
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Backpack\PermissionManager Routes
+|--------------------------------------------------------------------------
+|
+| This file is where you may define all of the routes that are
+| handled by the Backpack\PermissionManager package.
+|
+*/
+
+Route::group([
+    'namespace'  => 'Backpack\PermissionManager\app\Http\Controllers',
+    'prefix'     => config('backpack.base.route_prefix', 'admin'),
+    'middleware' => ['web', backpack_middleware()],
+], function () {
+    Route::crud('permission', 'PermissionCrudController');
+    Route::crud('role', 'RoleCrudController');
+    Route::crud('user', 'UserCrudController');
+});
diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore
new file mode 100644 (file)
index 0000000..d6b7ef3
--- /dev/null
@@ -0,0 +1,2 @@
+*
+!.gitignore