From ea855fc660a546f52c98d95bb83caebb1e4af766 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 10 Apr 2024 19:36:31 +0200 Subject: [PATCH] wip #6857 @1.5 --- .env.production | 2 +- composer.lock | 12 +- config/auth.php | 6 + config/backpack/base.php | 359 +++++++++++++++++++ config/backpack/crud.php | 470 +++++++++++++++++++++++++ config/backpack/operations/create.php | 42 +++ config/backpack/operations/list.php | 67 ++++ config/backpack/operations/reorder.php | 13 + config/backpack/operations/show.php | 29 ++ config/backpack/operations/update.php | 42 +++ config/backpack/permissionmanager.php | 48 +++ config/gravatar.php | 34 ++ config/media-library.php | 261 ++++++++++++++ config/permission.php | 161 +++++++++ config/revisionable.php | 13 + 15 files changed, 1552 insertions(+), 7 deletions(-) create mode 100644 config/backpack/base.php create mode 100644 config/backpack/crud.php create mode 100644 config/backpack/operations/create.php create mode 100644 config/backpack/operations/list.php create mode 100644 config/backpack/operations/reorder.php create mode 100644 config/backpack/operations/show.php create mode 100644 config/backpack/operations/update.php create mode 100644 config/backpack/permissionmanager.php create mode 100644 config/gravatar.php create mode 100644 config/media-library.php create mode 100644 config/permission.php create mode 100644 config/revisionable.php diff --git a/.env.production b/.env.production index 32d53a8..22e8d4f 100644 --- a/.env.production +++ b/.env.production @@ -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/ diff --git a/composer.lock b/composer.lock index 7357ccf..1d5529e 100644 --- a/composer.lock +++ b/composer.lock @@ -4179,16 +4179,16 @@ }, { "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": { @@ -4382,7 +4382,7 @@ "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", @@ -13603,5 +13603,5 @@ "php": "^8.1" }, "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.1.0" } diff --git a/config/auth.php b/config/auth.php index 9548c15..d2651cb 100644 --- a/config/auth.php +++ b/config/auth.php @@ -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 index 0000000..68770c7 --- /dev/null +++ b/config/backpack/base.php @@ -0,0 +1,359 @@ + '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 tag if you have a logo. + 'project_logo' => 'Backpack', + + // 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 index 0000000..109f6c9 --- /dev/null +++ b/config/backpack/crud.php @@ -0,0 +1,470 @@ + 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 index 0000000..b4fa2ec --- /dev/null +++ b/config/backpack/operations/create.php @@ -0,0 +1,42 @@ +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 index 0000000..b1d227f --- /dev/null +++ b/config/backpack/operations/list.php @@ -0,0 +1,67 @@ +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 index 0000000..56c163e --- /dev/null +++ b/config/backpack/operations/reorder.php @@ -0,0 +1,13 @@ +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 index 0000000..9eb13df --- /dev/null +++ b/config/backpack/operations/show.php @@ -0,0 +1,29 @@ +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 index 0000000..594ba23 --- /dev/null +++ b/config/backpack/operations/update.php @@ -0,0 +1,42 @@ +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 index 0000000..b8a94e0 --- /dev/null +++ b/config/backpack/permissionmanager.php @@ -0,0 +1,48 @@ + [ + '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 index 0000000..3555f1b --- /dev/null +++ b/config/gravatar.php @@ -0,0 +1,34 @@ + [ + + // 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 index 0000000..a5fc867 --- /dev/null +++ b/config/media-library.php @@ -0,0 +1,261 @@ + 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 index 0000000..5b6e184 --- /dev/null +++ b/config/permission.php @@ -0,0 +1,161 @@ + [ + + /* + * 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 index 0000000..32e590c --- /dev/null +++ b/config/revisionable.php @@ -0,0 +1,13 @@ + Venturecraft\Revisionable\Revision::class, + + 'additional_fields' => [], + +]; -- 2.39.5