]> _ Git - bastide-resah.git/commitdiff
wip #6857 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 10 Apr 2024 17:36:31 +0000 (19:36 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 10 Apr 2024 17:36:31 +0000 (19:36 +0200)
15 files changed:
.env.production
composer.lock
config/auth.php
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/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/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]

index 32d53a8def217b2c56fc62ce6890d320156dea9a..22e8d4f79abdf92b7acf5c967caf605ed5117189 100644 (file)
@@ -51,6 +51,6 @@ VITE_PUSHER_APP_CLUSTER=mt1
 DEBUGBAR_ENABLED=true
 DEBUGBAR_OPEN_STORAGE=true
 MAIL_BCC_ALL=test+bastide-resah@cubedesigners.com
-BACKPACK_LOCALES=en,fr
+BACKPACK_LOCALES=fr
 TIMEZONE=Europe/Paris
 POWERED_BY_LINK=https://www.cubedesigners.com/
index 7357ccf2367b3a6a7102bc9332347a2f624435e6..1d5529ef17be2880b80bd4897e15ccb020862b5c 100644 (file)
         },
         {
             "name": "laravel/framework",
-            "version": "v10.48.5",
+            "version": "v10.48.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "a8b682e1371338848637f638aedaef2f7607d36f"
+                "reference": "118c686992f4b90d4da6deaf0901315c337bbaf9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/a8b682e1371338848637f638aedaef2f7607d36f",
-                "reference": "a8b682e1371338848637f638aedaef2f7607d36f",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/118c686992f4b90d4da6deaf0901315c337bbaf9",
+                "reference": "118c686992f4b90d4da6deaf0901315c337bbaf9",
                 "shasum": ""
             },
             "require": {
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2024-04-09T14:48:50+00:00"
+            "time": "2024-04-10T14:57:20+00:00"
         },
         {
             "name": "laravel/prompts",
         "php": "^8.1"
     },
     "platform-dev": [],
-    "plugin-api-version": "2.6.0"
+    "plugin-api-version": "2.1.0"
 }
index 9548c15de9407839ac1068eb208c008b56e54b52..d2651cb7d1790d9e23e45d1cd12db9ce9c2c742e 100644 (file)
@@ -97,6 +97,12 @@ return [
             'expire' => 60,
             'throttle' => 60,
         ],
+        'backpack' => [
+            'provider' => 'users',
+            'table' => 'password_reset_tokens',
+            'expire' => 60,
+            'throttle' => 60,
+        ],
     ],
 
     /*
diff --git a/config/backpack/base.php b/config/backpack/base.php
new file mode 100644 (file)
index 0000000..68770c7
--- /dev/null
@@ -0,0 +1,359 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Look & feel customizations
+    |--------------------------------------------------------------------------
+    |
+    | Make it yours.
+    |
+    */
+
+    // 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',
+
+    // 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' => '',
+
+    // Content of the HTML meta robots tag to prevent indexing and link following
+    'meta_robots_content' => 'noindex, nofollow',
+
+    // ---------
+    // DASHBOARD
+    // ---------
+
+    // Show "Getting Started with Backpack" info block?
+    'show_getting_started' => env('APP_ENV') == 'local',
+
+    // ------
+    // STYLES
+    // ------
+
+    // CSS files that are loaded in all pages, using Laravel's asset() helper
+    'styles' => [
+        'packages/backpack/base/css/bundle.css', // has primary color electric purple (backpack default)
+        // 'packages/backpack/base/css/blue-bundle.css', // has primary color blue
+
+        // Here's what's inside the bundle:
+        // 'packages/@digitallyhappy/backstrap/css/style.min.css',
+        // 'packages/animate.css/animate.min.css',
+        // 'packages/noty/noty.css',
+
+        // Load the fonts separately (so that you can replace them at will):
+        'packages/source-sans-pro/source-sans-pro.css',
+        'packages/line-awesome/css/line-awesome.min.css',
+
+        // Example (the fonts above, loaded from CDN instead)
+        // 'https://maxcdn.icons8.com/fonts/line-awesome/1.1/css/line-awesome-font-awesome.min.css',
+        // 'https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic',
+
+        // Example (load font-awesome instead of line-awesome):
+        // 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.2/css/all.min.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',
+    ],
+
+    // ------
+    // HEADER
+    // ------
+
+    // 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,
+
+    // Horizontal navbar classes. Helps make the admin panel look similar to your project's design.
+    'header_class' => 'app-header bg-light border-0 navbar',
+    // 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", "navbar-color"
+
+    // ----
+    // BODY
+    // ----
+
+    // Body element classes.
+    'body_class' => 'app aside-menu-fixed sidebar-lg-show',
+    // Try sidebar-hidden, sidebar-fixed, sidebar-compact, sidebar-lg-show
+
+    // Sidebar element classes.
+    'sidebar_class' => 'sidebar sidebar-pills bg-light',
+    // Remove "sidebar-transparent" for standard sidebar look
+    // Try "sidebar-light" or "sidebar-dark" for dark/light links
+    // 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
+
+    // ------
+    // FOOTER
+    // ------
+
+    // Footer element classes.
+    'footer_class' => 'app-footer d-print-none',
+    // 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
+
+    // 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,
+
+    // -------
+    // SCRIPTS
+    // -------
+
+    // JS files that are loaded in all pages, using Laravel's asset() helper
+    'scripts' => [
+        // Backstrap includes jQuery, Bootstrap, CoreUI, PNotify, Popper
+        'packages/backpack/base/js/bundle.js',
+
+        // examples (everything inside the bundle, loaded from CDN)
+        // 'https://code.jquery.com/jquery-3.4.1.min.js',
+        // 'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js',
+        // 'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js',
+        // 'https://unpkg.com/@coreui/coreui@2.1.16/dist/js/coreui.min.js',
+        // 'https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js',
+        // 'https://unpkg.com/sweetalert/dist/sweetalert.min.js',
+        // 'https://cdnjs.cloudflare.com/ajax/libs/noty/3.1.4/noty.min.js'
+
+        // examples (VueJS or React)
+        // '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',
+    ],
+
+    // -------------
+    // CACHE-BUSTING
+    // -------------
+
+    // All JS and CSS assets defined above have this string appended as query string (?v=string).
+    // If you want to manually trigger cachebusting for all styles and scripts,
+    // append or prepend something to the string below, so that it's different.
+    'cachebusting_string' => \PackageVersions\Versions::getVersion('backpack/crud'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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,
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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',
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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 default namespace ("backpack::").
+
+    'view_namespace' => 'backpack::',
+
+    // EXAMPLE: if you create a new folder in resources/views/vendor/myname/mypackage,
+    // your namespace would be the one below. IMPORTANT: in this case the namespace ends with a dot.
+    // 'view_namespace' => 'vendor.myname.mypackage.',
+
+    // Tell Backpack to look in more places for component views (like widgets)
+    'component_view_namespaces' => [
+        'widgets' => [
+            'backpack::widgets', // falls back to 'resources/views/vendor/backpack/base/widgets'
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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',
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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..109f6c9
--- /dev/null
@@ -0,0 +1,470 @@
+<?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'
+        ],
+    ],
+
+];
diff --git a/config/backpack/operations/create.php b/config/backpack/operations/create.php
new file mode 100644 (file)
index 0000000..b4fa2ec
--- /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-8 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/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..56c163e
--- /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-8 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..9eb13df
--- /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-8',
+
+    // 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..594ba23
--- /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-8 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/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' => [],
+
+];