Full Code of Laravel-Backpack/demo for AI

main 0e78adfbf221 cached
412 files
902.5 KB
248.5k tokens
801 symbols
1 requests
Download .txt
Showing preview only (1,021K chars total). Download the full file or copy to clipboard to get everything.
Repository: Laravel-Backpack/demo
Branch: main
Commit: 0e78adfbf221
Files: 412
Total size: 902.5 KB

Directory structure:
gitextract_prmjevic/

├── .gitattributes
├── .github/
│   ├── config.yml
│   ├── dependabot.yml
│   ├── issue_template.md
│   ├── pull_request_template.md
│   ├── stale.yml
│   ├── support.yml
│   └── workflows/
│       └── add-to-project.yml
├── .gitignore
├── .travis.yml
├── Dockerfile
├── LICENSE.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── Inspire.php
│   │   │   └── RefreshDb.php
│   │   └── Kernel.php
│   ├── Enums/
│   │   ├── MonsterStatus.php
│   │   ├── ProductCondition.php
│   │   └── ProductStatus.php
│   ├── Events/
│   │   └── Event.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminPageController.php
│   │   │   │   ├── CaveCrudController.php
│   │   │   │   ├── Charts/
│   │   │   │   │   ├── LatestUsersChartController.php
│   │   │   │   │   ├── Lines/
│   │   │   │   │   │   ├── ChartjsLineChartController.php
│   │   │   │   │   │   ├── EchartsLineChartController.php
│   │   │   │   │   │   ├── FrappeLineChartController.php
│   │   │   │   │   │   └── HighchartsLineChartController.php
│   │   │   │   │   ├── NewEntriesChartController.php
│   │   │   │   │   └── Pies/
│   │   │   │   │       ├── ChartjsPieController.php
│   │   │   │   │       ├── EchartsPieController.php
│   │   │   │   │       ├── FrappePieController.php
│   │   │   │   │       └── HighchartsPieController.php
│   │   │   │   ├── ColumnMonsterCrudController.php
│   │   │   │   ├── DummyCrudController.php
│   │   │   │   ├── EditableMonsterCrudController.php
│   │   │   │   ├── FieldMonsterCrudController.php
│   │   │   │   ├── FluentMonsterCrudController.php
│   │   │   │   ├── HeroCrudController.php
│   │   │   │   ├── IconCrudController.php
│   │   │   │   ├── MeetingCrudController.php
│   │   │   │   ├── MonsterCrudController.php
│   │   │   │   ├── Operations/
│   │   │   │   │   └── SMSOperation.php
│   │   │   │   ├── PetShop/
│   │   │   │   │   ├── BadgeCrudController.php
│   │   │   │   │   ├── CommentCrudController.php
│   │   │   │   │   ├── InvoiceCrudController.php
│   │   │   │   │   ├── OwnerCrudController.php
│   │   │   │   │   ├── OwnerPetsCrudController.php
│   │   │   │   │   ├── PassportCrudController.php
│   │   │   │   │   ├── PetCrudController.php
│   │   │   │   │   └── SkillCrudController.php
│   │   │   │   ├── ProductCrudController.php
│   │   │   │   ├── StoryCrudController.php
│   │   │   │   └── UserCrudController.php
│   │   │   ├── Api/
│   │   │   │   └── ArticleController.php
│   │   │   └── Controller.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── Authenticate.php
│   │   │   ├── CheckIfAdmin.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── Theme.php
│   │   │   ├── ValidateSignature.php
│   │   │   └── VerifyCsrfToken.php
│   │   └── Requests/
│   │       ├── BadgeRequest.php
│   │       ├── CaveRequest.php
│   │       ├── CommentRequest.php
│   │       ├── DummyRequest.php
│   │       ├── HeroRequest.php
│   │       ├── IconRequest.php
│   │       ├── InvoiceRequest.php
│   │       ├── MeetingRequest.php
│   │       ├── MonsterRequest.php
│   │       ├── OwnerRequest.php
│   │       ├── PassportRequest.php
│   │       ├── PetRequest.php
│   │       ├── ProductRequest.php
│   │       ├── Request.php
│   │       ├── SkillRequest.php
│   │       └── StoryRequest.php
│   ├── Jobs/
│   │   └── Job.php
│   ├── Library/
│   │   └── Elfinder.php
│   ├── Listeners/
│   │   └── .gitkeep
│   ├── Models/
│   │   ├── Address.php
│   │   ├── Article.php
│   │   ├── Ball.php
│   │   ├── Bill.php
│   │   ├── Category.php
│   │   ├── Cave.php
│   │   ├── Country.php
│   │   ├── Dummy.php
│   │   ├── Graffiti.php
│   │   ├── Hero.php
│   │   ├── Icon.php
│   │   ├── Meeting.php
│   │   ├── MenuItem.php
│   │   ├── Monster.php
│   │   ├── Page.php
│   │   ├── PetShop/
│   │   │   ├── Avatar.php
│   │   │   ├── Badge.php
│   │   │   ├── Comment.php
│   │   │   ├── Invoice.php
│   │   │   ├── InvoiceItem.php
│   │   │   ├── Owner.php
│   │   │   ├── Passport.php
│   │   │   ├── Pet.php
│   │   │   └── Skill.php
│   │   ├── PostalBox.php
│   │   ├── PostalBoxer.php
│   │   ├── Product.php
│   │   ├── Recommend.php
│   │   ├── Sentiment.php
│   │   ├── Star.php
│   │   ├── Story.php
│   │   ├── Tag.php
│   │   ├── Traits/
│   │   │   └── LogsActivity.php
│   │   ├── Universe.php
│   │   └── Wish.php
│   ├── PageTemplates.php
│   ├── Policies/
│   │   └── .gitkeep
│   ├── Providers/
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   └── RouteServiceProvider.php
│   ├── User.php
│   └── helpers.php
├── artisan
├── bootstrap/
│   ├── app.php
│   ├── autoload.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── app.php
│   ├── auth.php
│   ├── backpack/
│   │   ├── base.php
│   │   ├── crud.php
│   │   ├── pagemanager.php
│   │   ├── permissionmanager.php
│   │   ├── testing.php
│   │   ├── theme-tabler.php
│   │   └── ui.php
│   ├── backup.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── compile.php
│   ├── database.php
│   ├── debugbar.php
│   ├── elfinder.php
│   ├── filesystems.php
│   ├── gravatar.php
│   ├── image.php
│   ├── logging.php
│   ├── mail.php
│   ├── permission.php
│   ├── prologue/
│   │   └── alerts.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   ├── sluggable.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   ├── ArticleFactory.php
│   │   ├── BillFactory.php
│   │   ├── CategoryFactory.php
│   │   ├── CaveFactory.php
│   │   ├── HeroFactory.php
│   │   ├── MeetingFactory.php
│   │   ├── MenuItemFactory.php
│   │   ├── MonsterFactory.php
│   │   ├── PageFactory.php
│   │   ├── PetShop/
│   │   │   ├── BadgeFactory.php
│   │   │   ├── InvoiceFactory.php
│   │   │   ├── InvoiceItemFactory.php
│   │   │   ├── OwnerFactory.php
│   │   │   ├── PassportFactory.php
│   │   │   ├── PetFactory.php
│   │   │   ├── SkillFactory.php
│   │   │   └── StoryFactory.php
│   │   ├── PostalBoxerFactory.php
│   │   ├── ProductFactory.php
│   │   ├── RecommendFactory.php
│   │   ├── TagFactory.php
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── .gitkeep
│   │   ├── 2013_04_09_062329_create_backpack_revisions_table.php
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2015_08_04_130507_create_article_tag_table.php
│   │   ├── 2015_08_04_130520_create_articles_table.php
│   │   ├── 2015_08_04_130551_create_categories_table.php
│   │   ├── 2015_08_04_131614_create_settings_table.php
│   │   ├── 2015_08_04_131626_create_tags_table.php
│   │   ├── 2016_05_05_115641_create_menu_items_table.php
│   │   ├── 2016_05_25_121918_create_pages_table.php
│   │   ├── 2016_07_24_060017_add_slug_to_categories_table.php
│   │   ├── 2016_07_24_060101_add_slug_to_tags_table.php
│   │   ├── 2017_04_20_100848_create_monsters_table.php
│   │   ├── 2017_04_21_052454_create_monster_tag_table.php
│   │   ├── 2017_04_21_052455_create_monster_articles_table.php
│   │   ├── 2017_04_21_052456_create_monster_category_table.php
│   │   ├── 2017_12_18_075638_create_icons_table.php
│   │   ├── 2017_12_19_081247_create_products_table.php
│   │   ├── 2018_12_12_075319_create_permission_tables.php
│   │   ├── 2019_09_13_093251_create_failed_jobs_table.php
│   │   ├── 2019_12_02_101119_add_browse_multiple_to_monsters_table.php
│   │   ├── 2020_03_12_100831_alter_monsters_table_add_relationship_columns.php
│   │   ├── 2020_03_12_100831_alter_monsters_table_remove_address.php
│   │   ├── 2020_03_29_054416_create_dummy_table.php
│   │   ├── 2020_03_31_114745_add_columns_to_monster_table.php
│   │   ├── 2020_03_31_114745_create_address_table.php
│   │   ├── 2020_03_31_114745_create_pivotable_relations_tables.php
│   │   ├── 2020_03_31_114745_remove_backpackuser_model.php
│   │   ├── 2020_03_31_114745_rename_address_column_from_monsters.php
│   │   ├── 2021_05_07_151146_make_notes_nullable_on_monster_product.php
│   │   ├── 2021_08_08_130950_change_upload_multiple_column_in_monsters_table.php
│   │   ├── 2021_10_13_081033_remove_simplemde_attribute_from_monsters.php
│   │   ├── 2022_01_17_083405_create_owners_table.php
│   │   ├── 2022_01_17_083526_create_invoices_table.php
│   │   ├── 2022_01_17_083644_create_invoice_items_table.php
│   │   ├── 2022_01_17_114317_create_pets_table.php
│   │   ├── 2022_01_17_114318_create_owner_pet_table.php
│   │   ├── 2022_01_17_114741_create_passports_table.php
│   │   ├── 2022_01_17_120235_create_skills_table.php
│   │   ├── 2022_01_17_120236_create_pet_skill_table.php
│   │   ├── 2022_01_17_133436_create_avatars_table.php
│   │   ├── 2022_01_17_135143_create_comments_table.php
│   │   ├── 2022_01_17_141636_create_badges_table.php
│   │   ├── 2022_01_17_141725_create_badgeables_table.php
│   │   ├── 2022_01_21_153540_create_countries_table.php
│   │   ├── 2022_01_21_155236_create_graffitis_table.php
│   │   ├── 2022_01_21_165125_add_country_id_addresses_table.php
│   │   ├── 2022_01_21_165552_create_wishes_table.php
│   │   ├── 2022_01_21_165553_create_balls_table.php
│   │   ├── 2022_01_21_165554_create_universes_table.php
│   │   ├── 2022_01_22_063032_create_heroes_table.php
│   │   ├── 2022_01_22_063323_add_hero_id_to_monsters_table.php
│   │   ├── 2022_01_22_072809_create_stories_table.php
│   │   ├── 2022_01_22_074008_add_story_id_to_monsters_table.php
│   │   ├── 2022_01_22_145356_create_caves_table.php
│   │   ├── 2022_01_22_145812_add_cave_id_to_monsters_table.php
│   │   ├── 2022_10_08_084702_add_status_to_products.php
│   │   ├── 2022_11_20_221518_create_activity_log_table.php
│   │   ├── 2022_11_20_221519_add_event_column_to_activity_log_table.php
│   │   ├── 2022_11_20_221520_add_batch_uuid_column_to_activity_log_table.php
│   │   ├── 2022_12_30_162821_add_soft_deletes_to_pets.php
│   │   ├── 2023_01_23_174016_add_status_to_monsters_table.php
│   │   ├── 2023_01_23_194158_add_features_to_monsters_table.php
│   │   ├── 2023_01_23_195752_add_ckeditor_to_monsters_table.php
│   │   ├── 2023_02_22_191429_create_media_table.php
│   │   ├── 2023_05_31_101941_add_dropzone_column_to_monsters_table.php
│   │   ├── 2023_07_13_071933_add_soft_deletes_to_invoices_table.php
│   │   ├── 2023_07_16_114745_rename_address_to_google_column_from_monsters.php
│   │   ├── 2023_08_30_093542_add_email_verified_at_column_to_users.php
│   │   ├── 2023_11_23_111148_add_category_relationship_column_to_monsters_table.php
│   │   ├── 2024_02_03_225118_create_meetings_table.php
│   │   ├── 2024_04_11_085730_create_language_lines_table.php
│   │   ├── 2024_04_24_115407_add_json_api_fields_to_monster_table.php
│   │   └── 2024_10_14_000001_create_pan_analytics_table.php
│   └── seeders/
│       ├── .gitkeep
│       ├── BadgeSeeder.php
│       ├── CaveSeeder.php
│       ├── CountryTableSeeder.php
│       ├── DatabaseSeeder.php
│       ├── HeroSeeder.php
│       ├── IconsTableSeeder.php
│       ├── InvoiceItemSeeder.php
│       ├── InvoiceSeeder.php
│       ├── MeetingSeeder.php
│       ├── MillionCommentsSeeder.php
│       ├── OwnerSeeder.php
│       ├── PassportSeeder.php
│       ├── PermissionManagerTablesSeeder.php
│       ├── PetSeeder.php
│       ├── PetShopSeeder.php
│       ├── ReportDemoSeeder.php
│       ├── SkillSeeder.php
│       ├── StorySeeder.php
│       ├── UniversesSeeder.php
│       └── UsersTableSeeder.php
├── docker/
│   └── infra/
│       └── certs/
│           ├── local-dev-key.pem
│           └── local-dev.pem
├── docker-compose.yml
├── entrypoint.d/
│   └── 51-after.sh
├── install.sh
├── lang/
│   ├── en/
│   │   ├── auth.php
│   │   ├── pagination.php
│   │   ├── passwords.php
│   │   └── validation.php
│   └── vendor/
│       ├── backpack/
│       │   ├── en/
│       │   │   └── crud.php
│       │   └── tr/
│       │       └── crud.php
│       └── backup/
│           ├── ar/
│           │   └── notifications.php
│           ├── bg/
│           │   └── notifications.php
│           ├── bn/
│           │   └── notifications.php
│           ├── cs/
│           │   └── notifications.php
│           ├── da/
│           │   └── notifications.php
│           ├── de/
│           │   └── notifications.php
│           ├── en/
│           │   └── notifications.php
│           ├── es/
│           │   └── notifications.php
│           ├── fa/
│           │   └── notifications.php
│           ├── fi/
│           │   └── notifications.php
│           ├── fr/
│           │   └── notifications.php
│           ├── hi/
│           │   └── notifications.php
│           ├── id/
│           │   └── notifications.php
│           ├── it/
│           │   └── notifications.php
│           ├── ja/
│           │   └── notifications.php
│           ├── nl/
│           │   └── notifications.php
│           ├── no/
│           │   └── notifications.php
│           ├── pl/
│           │   └── notifications.php
│           ├── pt/
│           │   └── notifications.php
│           ├── pt-BR/
│           │   └── notifications.php
│           ├── ro/
│           │   └── notifications.php
│           ├── ru/
│           │   └── notifications.php
│           ├── tr/
│           │   └── notifications.php
│           ├── uk/
│           │   └── notifications.php
│           ├── zh-CN/
│           │   └── notifications.php
│           └── zh-TW/
│               └── notifications.php
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── assets/
│   │   ├── css/
│   │   │   └── backpack_electric_purple_overlay.css
│   │   └── js/
│   │       ├── ga.js
│   │       ├── meetings.js
│   │       └── monster/
│   │           ├── fields.js
│   │           ├── test-custom-field.js
│   │           ├── test-disable-field.js
│   │           ├── test-enable-field.js
│   │           ├── test-hide-field.js
│   │           ├── test-onchange-field.js
│   │           ├── test-require-field.js
│   │           ├── test-show-field.js
│   │           ├── test-top-scenarios.js
│   │           └── test-unrequire-field.js
│   ├── index.php
│   ├── robots.txt
│   ├── uploads/
│   │   └── .gitkeep
│   └── web.config
├── readme.md
├── reload.sh
├── resources/
│   ├── assets/
│   │   └── sass/
│   │       └── app.scss
│   └── views/
│       ├── admin/
│       │   ├── metrics/
│       │   │   └── top_products.blade.php
│       │   ├── new-in-v7.blade.php
│       │   ├── partials/
│       │   │   ├── chip-examples.blade.php
│       │   │   ├── dataform-examples.blade.php
│       │   │   ├── dataform-modal-examples.blade.php
│       │   │   ├── datagrid-examples.blade.php
│       │   │   ├── datalist-examples.blade.php
│       │   │   └── datatable-examples.blade.php
│       │   └── petshop_about.blade.php
│       ├── vendor/
│       │   ├── .gitkeep
│       │   └── backpack/
│       │       ├── crud/
│       │       │   ├── buttons/
│       │       │   │   ├── fake-editable-columns.blade.php
│       │       │   │   └── passports.blade.php
│       │       │   ├── chips/
│       │       │   │   ├── invoice.blade.php
│       │       │   │   └── owner.blade.php
│       │       │   ├── columns/
│       │       │   │   └── custom_view_column_example.blade.php
│       │       │   └── details_row/
│       │       │       └── monster.blade.php
│       │       ├── theme-coreuiv2/
│       │       │   ├── auth/
│       │       │   │   └── login.blade.php
│       │       │   ├── dashboard.blade.php
│       │       │   └── inc/
│       │       │       ├── alerts.blade.php
│       │       │       └── topbar_right_content.blade.php
│       │       ├── theme-coreuiv4/
│       │       │   ├── auth/
│       │       │   │   └── login.blade.php
│       │       │   ├── dashboard.blade.php
│       │       │   └── inc/
│       │       │       ├── alerts.blade.php
│       │       │       └── topbar_right_content.blade.php
│       │       ├── theme-tabler/
│       │       │   ├── auth/
│       │       │   │   └── login/
│       │       │   │       └── inc/
│       │       │   │           └── form.blade.php
│       │       │   ├── dashboard.blade.php
│       │       │   ├── inc/
│       │       │   │   ├── alerts.blade.php
│       │       │   │   ├── commercial.blade.php
│       │       │   │   └── topbar_right_content.blade.php
│       │       │   └── layouts/
│       │       │       └── partials/
│       │       │           └── sidebar_shortcuts.blade.php
│       │       └── ui/
│       │           └── inc/
│       │               └── menu_items.blade.php
│       └── welcome.blade.php
├── routes/
│   ├── api.php
│   ├── backpack/
│   │   ├── custom.php
│   │   └── permissionmanager.php
│   ├── console.php
│   └── web.php
├── start.sh
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── clockwork/
│   │   └── .gitignore
│   ├── debugbar/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   └── Feature/
│       ├── Admin/
│       │   ├── CaveCrudControllerTest.php
│       │   ├── ColumnMonsterCrudControllerTest.php
│       │   ├── DummyCrudControllerTest.php
│       │   ├── EditableMonsterCrudControllerTest.php
│       │   ├── FieldMonsterCrudControllerTest.php
│       │   ├── FluentMonsterCrudControllerTest.php
│       │   ├── HeroCrudControllerTest.php
│       │   ├── IconCrudControllerTest.php
│       │   ├── MeetingCrudControllerTest.php
│       │   ├── MonsterCrudControllerTest.php
│       │   ├── PetShop/
│       │   │   ├── BadgeCrudControllerTest.php
│       │   │   ├── CommentCrudControllerTest.php
│       │   │   ├── InvoiceCrudControllerTest.php
│       │   │   ├── OwnerCrudControllerTest.php
│       │   │   ├── OwnerPetsCrudControllerTest.php
│       │   │   ├── PassportCrudControllerTest.php
│       │   │   ├── PetCrudControllerTest.php
│       │   │   └── SkillCrudControllerTest.php
│       │   ├── ProductCrudControllerTest.php
│       │   ├── StoryCrudControllerTest.php
│       │   └── UserCrudControllerTest.php
│       └── Backpack/
│           ├── DefaultCreateTests.php
│           ├── DefaultDeleteTests.php
│           ├── DefaultListTests.php
│           ├── DefaultShowTests.php
│           ├── DefaultTestBase.php
│           └── DefaultUpdateTests.php
└── vite.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
* text=auto
*.css linguist-vendored
*.scss linguist-vendored


================================================
FILE: .github/config.yml
================================================
# Configuration for welcome - https://github.com/behaviorbot/welcome

# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome

# Comment to be posted to on first time issues
newIssueWelcomeComment: >
  Hello there! Thanks for opening your first issue on this repo!


  Just a heads-up: **Here at Backpack we use Github Issues only for tracking bugs**. Talk about new features is also acceptable. This helps _a lot_ in keeping our focus on improving Backpack. **If you issue is not a bug/feature, please help us out by closing the issue yourself and posting in the appropriate medium (see below)**. If you're not sure where it fits, it's ok, a community member will probably reply to help you with that.


  Backpack communication mediums:
   - Bug Reports, Feature Requests - Github Issues (here);
   - Quick help (_How do I do X_) - [Gitter Chatroom](https://gitter.im/BackpackForLaravel/Lobby);
   - Long questions (_I have done X and Y and it won't do Z wtf_) - [Stackoverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel), using the ```backpack-for-laravel``` tag;


  Please keep in mind Backpack offers no official / paid support. Whatever help you receive here, on Gitter, Slack or Stackoverflow is thanks to our awesome _awesome_ community members, who give up some of their time to help their peers. If you want to join our community, just start pitching in. We take pride in being a welcoming bunch.


  Thank you!


  --

  Justin Case

  The Backpack Robot

# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome

# Comment to be posted to on PRs from first time contributors in your repository
newPRWelcomeComment: >
  BOOM! Your first PR with us, thank you so much! Someone will take a look at it shortly.


  Please keep in mind that:
    - **if this constitutes a breaking change, it might take quite a while for this to get merged**; we try to emulate the Laravel release cycle as much as possible, so developers can upgrade both software once; this means a new big release every ~6 months;
    - **even if it's a non-breaking change, it might take a few days/weeks for the PR to get merged**; unless it's a no-brainer, **we like to have some community feedback on new features, before we merge them**; this leads to higher-quality code, in the end; we learnt this the hard way :-)
    - **not all PRs get merged**; sometimes we just have to hold out new features, to keep the packages lean; sometimes we don't include features that only apply to niche use cases;
    - **we're not perfect**; if you think we're wrong, call us out on it; but in a kind way :-) we all make mistakes, best we learn from them and build better software together;


  Thank you!


  --

  Justin Case

  The Backpack Robot

# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge

# Comment to be posted to on pull requests merged by a first time user
firstPRMergeComment: >
  WHOOP-WHOOP! Congrats, your first PR on this repo has officialy been merged.


  ![party](https://media1.giphy.com/media/3KC2jD2QcBOSc/giphy.gif "Party!!!")


  If you want to help out the community in other ways, you can:
   - **give your opinion on other Github Issues & PRs**;
   - **chat with others** in the [Gitter Chatroom](https://gitter.im/BackpackForLaravel/Lobby) (usually for quick help: _How do I do X_);
   - **answer Backpack questions on [Stackoverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel)**; you get points, people get help; you can subscribe to the ```backpack-for-laravel``` tag by [adding a new filter](https://stackexchange.com/filters/256210/my-filter-3); that will send you emails when new questions come up with our tag;


  Again. Thank you for the PR. You are a wonderful person. Keep 'em coming :-)

  Cheers!


  --

  Justin Case

  The Backpack Robot


  P.S. **Help in the Backpack community is rewarded with free Backpack commercial licenses**. It's the least we can do. If you feel you've helped the community with PRs, help & other stuff, please [shoot Tabacitu an email](mailto:hello@tabacitu.ro) and ask him if you qualify for free licenses. You scratch my back, I scratch your back. Thank you!

# It is recommend to include as many gifs and emojis as possible
#
# ---------------------------------------------------------------------------------------------
#
# Configuration for request-info - https://github.com/behaviorbot/request-info

# *OPTIONAL* Comment to reply with
# Can be either a string :
requestInfoReplyComment: >
  Hi there!


  Could you please provide us with more info about this? Looks like you skipped the title/body.


  Thank you!


  --

  Justin Case

  The Backpack Robot

# Or an array:
# requestInfoReplyComment:
#  - Ah no! young blade! That was a trifle short!
#  - Tell me more !
#  - I am sure you can be more effusive


# *OPTIONAL* default titles to check against for lack of descriptiveness
# MUST BE ALL LOWERCASE
requestInfoDefaultTitles:
  # - update readme.md
  - updates

# *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given
requestInfoLabelToAdd: needs-more-info

# *OPTIONAL* Only warn about insufficient information on these events type
# Keys must be lowercase. Valid values are 'issue' and 'pullRequest'
requestInfoOn:
  pullRequest: true
  issue: true

# *OPTIONAL* Add a list of people whose Issues/PRs will not be commented on
# keys must be GitHub usernames
requestInfoUserstoExclude:
  - tabacitu

# ---------------------------------------------------------------------------------------------
#


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: composer
  directory: "/"
  schedule:
    interval: monthly
  open-pull-requests-limit: 10
  ignore:
  - dependency-name: symfony/dom-crawler
    versions:
    - 5.2.2
  - dependency-name: laravel/framework
    versions:
    - 8.25.0
  - dependency-name: backpack/pagemanager
    versions:
    - 3.0.6
  - dependency-name: backpack/generators
    versions:
    - 3.1.6
  - dependency-name: facade/ignition
    versions:
    - 2.5.9
  - dependency-name: laravel/tinker
    versions:
    - 2.6.0
  - dependency-name: barryvdh/laravel-debugbar
    versions:
    - 3.5.2
  - dependency-name: phpunit/phpunit
    versions:
    - 9.5.1
  - dependency-name: backpack/crud
    versions:
    - 4.1.31


================================================
FILE: .github/issue_template.md
================================================
# Bug report

### What I did:

### What I expected to happen:

### What happened:

### What I've already tried to fix it:

### Backpack, Laravel, PHP, DB version:


================================================
FILE: .github/pull_request_template.md
================================================
## WHY

### BEFORE - What was wrong? What was happening before this PR?

??

### AFTER - What is happening after this PR?

??


## HOW

### How did you achieve that, in technical terms?

??



### Is it a breaking change or non-breaking change?

??


### How can we test the before & after?

??


================================================
FILE: .github/stale.yml
================================================
#####################################
# Github Stale Probot Configuration #
# ###################################
# https://probot.github.io/apps/stale/

# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 14
# Issues with these labels will never be considered stale
exemptLabels:
  - pinned
  - security
  - feature
  - urgent
  - ready
  - working on it
  - bug

# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
  Hi there!


  **Is this still an issue?** No activity in 60 days. I'm going to mark it as stale for now, and close it in 14 days if no further activity occurs. I know you guys are all busy, but if this is important to you please reply or something, so I know not to close it.


  Thank you!


  --
  
  Justin Case
  
  The Backpack Robot

# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: true


================================================
FILE: .github/support.yml
================================================
# Configuration for support-requests - https://github.com/dessant/support-requests

# Label used to mark issues as support requests
supportLabel: Ask-It-On-Stack-Overflow
# Comment to post on issues marked as support requests. Add a link
# to a support page, or set to `false` to disable
supportComment: >
  Oups!


  Looks like this is a support request, not a bug/feature. **Could you please [repost on StackOverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel), using the ```backpack-for-laravel``` tag**?


  Background: **Here at Backpack we use Github Issues only for tracking bugs and features**, not individual implementation issues. This helps _a lot_ in keeping our focus on improving Backpack. Thanks a lot for understanding!


  Here are all the Backpack communication mediums:
   - Long questions (_I have done X and Y and it won't do Z wtf_) - [Stackoverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel), using the ```backpack-for-laravel``` tag; this is recommended for most questions, since other developers can then find the answer on a simple Google search; also, people get points for answering - and who doesn't like StackOverflow points?!
   - Quick help (_How do I do X_) - [Gitter Chatroom](https://gitter.im/BackpackForLaravel/Lobby);
   - Bug Reports, Feature Requests - Github Issues (here);

  Please keep in mind Backpack offers no official / paid support. Whatever help you receive here, on Gitter, Slack or StackOverflow is thanks to our awesome _awesome_ community members, who give up some of their time to help their peers. If you want to join our community, just start pitching in. We take pride in being a welcoming bunch.


  Thank you!


  --

  Justin Case

  The Backpack Robot


  PS. In case I mistakenly closed your issue, yell :-) I'm a robot, I make mistakes.

# Whether to close issues marked as support requests
close: true
# Whether to lock issues marked as support requests
lock: false


================================================
FILE: .github/workflows/add-to-project.yml
================================================
name: Add new bugs & PRs to This Week project

on:
  issues:
    types:
      - opened
      - transferred
  pull_request:
    types:
      - opened

jobs:
  add-to-project:
    name: Add new bugs and PRs to This Week project
    runs-on: ubuntu-latest
    steps:
      - uses: actions/add-to-project@main
        with:
          project-url: https://github.com/orgs/Laravel-Backpack/projects/13
          github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}


================================================
FILE: .gitignore
================================================
/vendor
/node_modules
/public/storage
/storage/backups
Homestead.yaml
Homestead.json
.env
.idea
.DS_Store
.packages
.quarantine
.tmb
/.vapor
/packages
/.vscode
/packages
/_volumes
/public/basset


================================================
FILE: .travis.yml
================================================
language: php

php:
  - 7.3
  - 7.4
  - 8.0
  - nightly

matrix:
    allow_failures:
        - php: 7.2
        - php: 7.3
        - php: 8.0
        - php: nightly

env:
  global:
    - APP_ENV=local
    - APP_DEBUG=true
    - APP_KEY=base64:jNI+qJRj1eqN3RWMeBWo6sxMwKzgDP7Py2AfRJ1luyA=
    - APP_URL=http://localhost
    - DB_CONNECTION=mysql
    - DB_HOST=127.0.0.1
    - DB_PORT=3306
    - DB_DATABASE=test
    - DB_USERNAME=root
    - DB_PASSWORD=
    - CACHE_DRIVER=file
    - SESSION_DRIVER=file
    - QUEUE_DRIVER=sync
    - REDIS_HOST=127.0.0.1
    - REDIS_PASSWORD=null
    - REDIS_PORT=6379
    - MAIL_DRIVER=smtp
    - MAIL_HOST=mailtrap.io
    - MAIL_PORT=2525
    - MAIL_USERNAME=null
    - MAIL_PASSWORD=null
    - MAIL_ENCRYPTION=null

sudo: false

services: mysql

before_install:
  - mysql -e "create database IF NOT EXISTS test;" -uroot

install: travis_retry composer install --no-interaction --prefer-source

script: vendor/bin/phpunit --coverage-clover=coverage.clover

after_script:
    - wget https://scrutinizer-ci.com/ocular.phar
    - php ocular.phar code-coverage:upload --format=php-clover coverage.clover


================================================
FILE: Dockerfile
================================================
FROM serversideup/php:8.3-fpm-nginx as base

ENV S6_CMD_WAIT_FOR_SERVICES=1

COPY --chmod=755 ./entrypoint.d/ /etc/entrypoint.d/
COPY ./docker/infra/certs /etc/nginx/certs

USER root

# run the docker-php-serversideup-s6-init script
RUN docker-php-serversideup-s6-init

USER www-data

# uncomment if you need to install chrome. eg. for spatie browser shot projects.
#USER root
# ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
#RUN apt-get update \
#    && apt-get install -y wget gnupg \
#    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
#    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
#    && apt-get -y update \
#    && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
#--no-install-recommends \
#    && rm -rf /var/lib/apt/lists/* \
#    && usermod -a -G video www-data \
#    && usermod -a -G audio www-data \
#    && mkdir -p /home/www-data/Downloads \
#    && chown -R www-data:www-data /home/www-data

FROM base as development

# We can pass USER_ID and GROUP_ID as build arguments
# to ensure the www-data user has the same UID and GID
# as the user running Docker.
ARG USER_ID
ARG GROUP_ID

# Switch to root so we can set the user ID and group ID
USER root

RUN docker-php-serversideup-set-id www-data $USER_ID:$GROUP_ID  && \
    docker-php-serversideup-set-file-permissions --owner $USER_ID:$GROUP_ID --service nginx


# make npm & node available in the container
COPY --chown=www-data:www-data --from=node:22.4.1 /usr/local/bin /usr/local/bin

COPY --chown=www-data:www-data --from=node:22.4.1 /usr/local/lib/node_modules/npm /usr/local/lib/node_modules/npm

USER www-data

================================================
FILE: LICENSE.md
================================================
# YUMMY License

**YoU make Money, I make MoneY.** The license holder is allowed to use the software for free, as long as he doesn't make money by using it.

Copyright (c) 2015-2017 Cristian Tabacitu <hello@tabacitu.ro>

## FREE for non-commercial use, PAID for commercial use

> Permission is hereby granted to any person obtaining a copy of this software 
> and associated documentation files (the "Software"), to use the Software. 
> This includes the rights to use, copy, modify and/or merge the Sofware 
> or copies of the Software, and to permit persons to whom the Software is 
> furnished to do so, subject to the following conditions:
>
> **1. Should the Sofware be used for non-commercial purposes (personal use, not-profits,
> testing, education), no financial reward is expected and the above rights are given FREE OF CHARGE.**
>
> **2. Should the Software be used for commercial purposes (the user of this Sofware, 
> its employer, employees or clients make money by using this Software), the user is 
> required to purchase a "Single Domain License" on [backpackforlaravel.com](https://backpackforlaravel.com), for each
> domain name this sofware will be used on, before its usage in production.
> Failure to do so will constitute as illegal commercial use.**
> 
> **3. This license does not include the rights to publish or sublicense
> this Sofware, its copies or any derivations, with or without the purpose of commercial profit. 
> For inclusion in commercial packages or SaaS products, an "Unlimited License" is required, which can be purchased on [backpackforlaravel.com](https://backpackforlaravel.com). For inclusion in free open-source packages, express permission is needed from <hello@tabacitu.ro>.**
>
> **4. The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.**
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.


================================================
FILE: app/Console/Commands/Inspire.php
================================================
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Foundation\Inspiring;

class Inspire extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'inspire';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Display an inspiring quote';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->comment(PHP_EOL.Inspiring::quote().PHP_EOL);
    }
}


================================================
FILE: app/Console/Commands/RefreshDb.php
================================================
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Log;

class RefreshDb extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'db:fresh';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Refresh database structure and entries';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        Artisan::call('down');
        Log::warning('Cleanup time. Refreshing the database.');
        Artisan::call('db:wipe --force');
        Artisan::call('migrate --force');
        Artisan::call('db:seed --force');
        Artisan::call('backup:clean');
        Artisan::call('up');
    }
}


================================================
FILE: app/Console/Kernel.php
================================================
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        Commands\RefreshDb::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param \Illuminate\Console\Scheduling\Schedule $schedule
     *
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('db:fresh')->hourly();
    }
}


================================================
FILE: app/Enums/MonsterStatus.php
================================================
<?php

namespace App\Enums;

enum MonsterStatus: string
{
    case WORKING = 'working';
    case NOTWORKING = 'not-working';
    case DONTKNOW = 'dont-know';

    public function getReadableStatus()
    {
        return match ($this) {
            MonsterStatus::WORKING    => 'Is working',
            MonsterStatus::NOTWORKING => 'Is not working',
            MonsterStatus::DONTKNOW   => 'We didn\'t know',
        };
    }
}


================================================
FILE: app/Enums/ProductCondition.php
================================================
<?php

namespace App\Enums;

enum ProductCondition
{
    case NEW;
    case USED;
    case BROKEN;

    public function getReadableCondition()
    {
        return match ($this) {
            ProductCondition::NEW    => 'New Product',
            ProductCondition::USED   => 'Used Product',
            ProductCondition::BROKEN => '!!BROKEN!!',
        };
    }
}


================================================
FILE: app/Enums/ProductStatus.php
================================================
<?php

namespace App\Enums;

enum ProductStatus: string
{
    case NOSTOCK = 'out-of-stock';
    case INSTOCK = 'in-stock';
    case ONHOLD = 'on-hold';

    public function getReadableStatus()
    {
        return match ($this) {
            ProductStatus::INSTOCK => 'Is in Stock',
            ProductStatus::NOSTOCK => 'Is out of stock',
            ProductStatus::ONHOLD  => 'Is on hold',
        };
    }
}


================================================
FILE: app/Events/Event.php
================================================
<?php

namespace App\Events;

abstract class Event
{
    //
}


================================================
FILE: app/Exceptions/Handler.php
================================================
<?php

namespace App\Exceptions;

use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Throwable;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that should not be reported.
     *
     * @var array
     */
    protected $dontReport = [
        AuthorizationException::class,
        HttpException::class,
        ModelNotFoundException::class,
        ValidationException::class,
    ];

    /**
     * Report or log an exception.
     *
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
     *
     * @param \Throwable $exception
     *
     * @return void
     */
    public function report(Throwable $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Throwable               $exception
     *
     * @return \Illuminate\Http\Response
     */
    public function render($request, Throwable $exception)
    {
        return parent::render($request, $exception);
    }

    protected function whoopsHandler()
    {
        try {
            return app(\Whoops\Handler\HandlerInterface::class);
        } catch (\Illuminate\Contracts\Container\BindingResolutionException $e) {
            return parent::whoopsHandler();
        }
    }
}


================================================
FILE: app/Http/Controllers/Admin/AdminPageController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

class AdminPageController
{
    /**
     * Show the new in v7 page.
     *
     * @return \Illuminate\View\View
     */
    public function newInV7()
    {
        return view('admin.new-in-v7', [
            'title'       => 'New in v7',
            'description' => 'Discover the new features and improvements in Backpack v7.',
        ]);
    }
}


================================================
FILE: app/Http/Controllers/Admin/CaveCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\CaveRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
 * Class CaveCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class CaveCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }

    /**
     * Configure the CrudPanel object. Apply settings to all operations.
     *
     * @return void
     */
    public function setup()
    {
        CRUD::setModel(\App\Models\Cave::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/cave');
        CRUD::setEntityNameStrings('cave', 'caves');
    }

    /**
     * Define what happens when the List operation is loaded.
     *
     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries
     *
     * @return void
     */
    protected function setupListOperation()
    {
        CRUD::column('name');
        CRUD::column('monster')->attribute('text');
    }

    /**
     * Define what happens when the Create operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-create
     *
     * @return void
     */
    protected function setupCreateOperation()
    {
        CRUD::setValidation(CaveRequest::class);
        CRUD::setOperationSetting('contentClass', 'col-md-12');

        CRUD::field('name');
        if (env('GOOGLE_PLACES_KEY')) {
            CRUD::field('location')->label('Cave Location')->type('google_map')->map_options([
                'default_lat' => 38.6915837,
                'default_lng' => -9.2159772,
            ]);
        }
        CRUD::field('monster')
            ->label('Monster '.backpack_new_badge())
            ->subfields(self::getMonsterSubfields())
            ->hint('<small class="float-right">Define the related Monster over a <code>hasOne</code> relationship (1-1).</small>');
    }

    /**
     * Define what happens when the Update operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-update
     *
     * @return void
     */
    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }

    public static function getMonsterSubfields()
    {
        $field_types_that_dont_work = [
            'date_range', // TODO
            'upload',
            'upload_multiple',
            'select_grouped', // TODO
            'select2_grouped', // TODO
        ];

        $subfields = array_merge(
            MonsterCrudController::getFieldsArrayForSimpleTab(),
            [[   // CustomHTML
                'name'  => 'separator',
                'type'  => 'custom_html',
                'value' => '<hr>',
            ]],
            MonsterCrudController::getFieldsArrayForTimeAndSpaceTab(),
            [[   // CustomHTML
                'name'  => 'separator',
                'type'  => 'custom_html',
                'value' => '<hr>',
            ]],
            MonsterCrudController::getFieldsArrayForSelectsTab(),
            [[   // CustomHTML
                'name'  => 'separator',
                'type'  => 'custom_html',
                'value' => '<hr>',
            ]],
            MonsterCrudController::getFieldsArrayForRelationshipsTab(),
            [[   // CustomHTML
                'name'  => 'separator',
                'type'  => 'custom_html',
                'value' => '<hr>',
            ]],
            MonsterCrudController::getFieldsArrayForUploadsTab(),
            [[   // CustomHTML
                'name'  => 'separator',
                'type'  => 'custom_html',
                'value' => '<hr>',
            ]],
            MonsterCrudController::getFieldsArrayForWysiwygEditorsTab(),
            [[   // CustomHTML
                'name'  => 'separator',
                'type'  => 'custom_html',
                'value' => '<hr>',
            ]],
            MonsterCrudController::getFieldsArrayForMiscellaneousTab(),
        );

        foreach ($subfields as $key => $subfield) {
            if (isset($subfield['subfields'])) {
                unset($subfields[$key]);
            }

            if (!isset($subfield['type'])) {
                continue;
            }

            if (in_array($subfield['type'], $field_types_that_dont_work)) {
                unset($subfields[$key]);
            }
        }

        return $subfields;
    }

    public function ajaxUpload()
    {
        if (app('env') === 'production') {
            return response()->json(['errors' => [
                'message' => 'Uploads are disabled in production.',
            ]], 500);
        }

        return $this->traitAjaxUpload();
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/LatestUsersChartController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts;

use App\User;
use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Chartjs\Chart;

class LatestUsersChartController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['6 days ago', '5 days ago', '4 days ago', '3 days ago', '2 days ago', 'Yesterday', 'Today']);

        // RECOMMENDED. Set URL that the ChartJS library should call, to get its data using AJAX.
        $this->chart->load(backpack_url('charts/users'));

        // OPTIONAL
        $this->chart->minimalist(false);
        $this->chart->displayLegend(true);
    }

    /**
     * Respond to AJAX calls with all the chart data points.
     *
     * @return json
     */
    public function data()
    {
        $today_users = User::whereDate('created_at', today())->count();
        $yesterday_users = User::whereDate('created_at', today()->subDays(1))->count();
        $users_2_days_ago = User::whereDate('created_at', today()->subDays(2))->count();
        $users_3_days_ago = User::whereDate('created_at', today()->subDays(3))->count();
        $users_4_days_ago = User::whereDate('created_at', today()->subDays(4))->count();
        $users_5_days_ago = User::whereDate('created_at', today()->subDays(5))->count();
        $users_6_days_ago = User::whereDate('created_at', today()->subDays(6))->count();

        $this->chart->dataset('Users Created', 'bar', [
            $users_6_days_ago,
            $users_5_days_ago,
            $users_4_days_ago,
            $users_3_days_ago,
            $users_2_days_ago,
            $yesterday_users,
            $today_users,
        ])->color('rgb(66, 186, 150, 1)')
            ->backgroundColor('rgb(66, 186, 150, 0.4)');
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Lines/ChartjsLineChartController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Lines;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Chartjs\Chart;

class ChartjsLineChartController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])
                    ->color('rgba(205, 32, 31, 1)')
                    ->backgroundColor('rgba(205, 32, 31, 0.4)');
        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])
                    ->color('rgba(70, 127, 208, 1)')
                    ->backgroundColor('rgba(70, 127, 208, 0.4)');
        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])
                    ->color('rgb(255, 193, 7)')
                    ->backgroundColor('rgba(255, 193, 7, 0.4)');
        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])
                    ->color('rgb(66, 186, 150)')
                    ->backgroundColor('rgba(66, 186, 150, 0.4)');
        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])
                    ->color('rgb(96, 92, 168)')
                    ->backgroundColor('rgba(96, 92, 168, 0.4)');

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['One', 'Two', 'Three', 'Four']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Lines/EchartsLineChartController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Lines;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Echarts\Chart;

class EchartsLineChartController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])
                    ->color('rgba(205, 32, 31, 1)');
        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])
                    ->color('rgba(70, 127, 208, 1)');
        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])
                    ->color('rgb(255, 193, 7)');
        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])
                    ->color('rgb(66, 186, 150)');
        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])
                    ->color('rgb(96, 92, 168)');

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['One', 'Two', 'Three', 'Four']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Lines/FrappeLineChartController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Lines;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Frappe\Chart;

class FrappeLineChartController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])
                    ->color('rgba(205, 32, 31, 1)');
        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])
                    ->color('rgba(70, 127, 208, 1)');
        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])
                    ->color('#FFC107');
        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])
                    ->color('rgb(66, 186, 150)');
        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])
                    ->color('rgb(96, 92, 168)');

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['One', 'Two', 'Three', 'Four']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Lines/HighchartsLineChartController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Lines;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Highcharts\Chart;

class HighchartsLineChartController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])
                    ->color('rgba(205, 32, 31, 1)');
        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])
                    ->color('rgba(70, 127, 208, 1)');
        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])
                    ->color('rgb(255, 193, 7)');
        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])
                    ->color('rgb(66, 186, 150)');
        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])
                    ->color('rgb(96, 92, 168)');

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['One', 'Two', 'Three', 'Four']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/NewEntriesChartController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts;

use App\User;
use Backpack\CRUD\app\Http\Controllers\ChartController;
use Backpack\NewsCRUD\app\Models\Article;
use Backpack\NewsCRUD\app\Models\Category;
use Backpack\NewsCRUD\app\Models\Tag;
use ConsoleTVs\Charts\Classes\Chartjs\Chart;

class NewEntriesChartController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        // MANDATORY. Set the labels for the dataset points
        $labels = [];
        for ($days_backwards = 30; $days_backwards >= 0; $days_backwards--) {
            if ($days_backwards == 1) {
            }
            $labels[] = $days_backwards.' days ago';
        }
        $this->chart->labels($labels);

        // RECOMMENDED. Set URL that the ChartJS library should call, to get its data using AJAX.
        $this->chart->load(backpack_url('charts/new-entries'));

        // OPTIONAL
        $this->chart->minimalist(false);
        $this->chart->displayLegend(true);
    }

    /**
     * Respond to AJAX calls with all the chart data points.
     *
     * @return json
     */
    public function data()
    {
        for ($days_backwards = 30; $days_backwards >= 0; $days_backwards--) {
            // Could also be an array_push if using an array rather than a collection.
            $users[] = User::whereDate('created_at', today()->subDays($days_backwards))
                            ->count();
            $articles[] = Article::whereDate('created_at', today()->subDays($days_backwards))
                            ->count();
            $categories[] = Category::whereDate('created_at', today()->subDays($days_backwards))
                            ->count();
            $tags[] = Tag::whereDate('created_at', today()->subDays($days_backwards))
                            ->count();
        }

        $this->chart->dataset('Users', 'line', $users)
            ->color('rgb(66, 186, 150)')
            ->backgroundColor('rgba(66, 186, 150, 0.4)');

        $this->chart->dataset('Articles', 'line', $articles)
            ->color('rgb(96, 92, 168)')
            ->backgroundColor('rgba(96, 92, 168, 0.4)');

        $this->chart->dataset('Categories', 'line', $categories)
            ->color('rgb(255, 193, 7)')
            ->backgroundColor('rgba(255, 193, 7, 0.4)');

        $this->chart->dataset('Tags', 'line', $tags)
            ->color('rgba(70, 127, 208, 1)')
            ->backgroundColor('rgba(70, 127, 208, 0.4)');
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Pies/ChartjsPieController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Pies;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Chartjs\Chart;

class ChartjsPieController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30])
                    ->backgroundColor([
                        'rgb(70, 127, 208)',
                        'rgb(66, 186, 150)',
                        'rgb(96, 92, 168)',
                        'rgb(255, 193, 7)',
                    ]);

        // OPTIONAL
        $this->chart->displayAxes(false);
        $this->chart->displayLegend(true);

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Pies/EchartsPieController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Pies;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Echarts\Chart;

class EchartsPieController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30])
                    ->color([
                        'rgb(70, 127, 208)',
                        'rgb(66, 186, 150)',
                        'rgb(96, 92, 168)',
                        'rgb(255, 193, 7)',
                    ]);

        // OPTIONAL
        $this->chart->displayAxes(false);
        $this->chart->displayLegend(true);

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Pies/FrappePieController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Pies;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Frappe\Chart;

class FrappePieController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30]);
        // ->color([
        // 	'rgb(70, 127, 208)',
        // 	'rgb(66, 186, 150)',
        // 	'rgb(96, 92, 168)',
        // 	'rgb(255, 193, 7)'
        // ]);

        // OPTIONAL
        // $this->chart->displayAxes(false);
        // $this->chart->displayLegend(true);

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Charts/Pies/HighchartsPieController.php
================================================
<?php

namespace App\Http\Controllers\Admin\Charts\Pies;

use Backpack\CRUD\app\Http\Controllers\ChartController;
use ConsoleTVs\Charts\Classes\Highcharts\Chart;

class HighchartsPieController extends ChartController
{
    public function setup()
    {
        $this->chart = new Chart();

        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30])
                    ->color([
                        'rgb(70, 127, 208)',
                        'rgb(66, 186, 150)',
                        'rgb(96, 92, 168)',
                        'rgb(255, 193, 7)',
                    ]);

        // OPTIONAL
        $this->chart->displayAxes(false);
        $this->chart->displayLegend(true);

        // MANDATORY. Set the labels for the dataset points
        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/ColumnMonsterCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
 * Class ColumnMonsterCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class ColumnMonsterCrudController extends MonsterCrudController
{
    /**
     * Configure the CrudPanel object. Apply settings to all operations.
     *
     * @return void
     */
    public function setup()
    {
        CRUD::setModel(\App\Models\Monster::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/column-monster');
        CRUD::setEntityNameStrings('column monster', 'column monsters');
        $this->crud->set('show.setFromDb', false);
    }

    /**
     * Define what happens when the List operation is loaded.
     *
     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries
     *
     * @return void
     */
    public function setupListOperation()
    {
        $this->crud->disableResponsiveTable();

        $timeSpaceColumns = static::getFieldsArrayForTimeAndSpaceTab();

        foreach ($timeSpaceColumns as $columnKey => $column) {
            // transform field array names into comma separated string
            if (is_array($column['name'])) {
                $timeSpaceColumns[$columnKey]['name'] = implode(',', $column['name']);
            }
        }

        $this->crud->addColumns(static::getFieldsArrayForSimpleTab());
        $this->crud->addColumns($timeSpaceColumns);
        $this->crud->addColumns(static::getFieldsArrayForSelectsTab());
        $this->crud->addColumns(static::getFieldsArrayForRelationshipsTab());
        $this->crud->addColumns(static::getFieldsArrayForUploadsTab());
        $this->crud->addColumns(static::getFieldsArrayForWysiwygEditorsTab());
        $this->crud->addColumns(static::getFieldsArrayForMiscellaneousTab());

        foreach ($this->crud->columns() as $columnKey => $column) {
            // remove all custom_html columns
            if (isset($column['type']) && $column['type'] === 'custom_html') {
                $this->crud->removeColumn($columnKey);
                continue;
            }
            // unset the `col-` bootstrap size classes as they would break the columns in the table.
            if (isset($column['wrapper']['class'])) {
                $column['wrapper']['class'] = $this->removeBootstrapSizingClasses($column['wrapper']['class']);
            }

            if (isset($column['subfields'])) {
                $subfields = $column['subfields'];
                foreach ($subfields as $subfieldKey => $subfield) {
                    if (isset($subfield['wrapper']['class'])) {
                        $subfields[$subfieldKey]['wrapper']['class'] = $this->removeBootstrapSizingClasses($subfield['wrapper']['class']);
                    }
                }
                $column['subfields'] = $subfields;
            }
            $this->crud->modifyColumn($columnKey, $column);
        }
    }

    private function removeBootstrapSizingClasses($classes)
    {
        $classes = explode(' ', $classes);
        $newClasses = [];
        foreach ($classes as $class) {
            if (!str_starts_with($class, 'col-')) {
                array_push($newClasses, $class);
            }
        }

        return implode(' ', $newClasses);
    }
}


================================================
FILE: app/Http/Controllers/Admin/DummyCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\DummyRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;

/**
 * Class DummyCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class DummyCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation;
    use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }

    public function setup()
    {
        $this->crud->setModel(\App\Models\Dummy::class);
        $this->crud->setRoute(config('backpack.base.route_prefix').'/dummy');
        $this->crud->setEntityNameStrings('dummy', 'dummies');
    }

    public function fetchProduct()
    {
        return $this->fetch(\App\Models\Product::class);
    }

    public function fetchProducts()
    {
        return $this->fetch(\App\Models\Product::class);
    }

    public function fetchIcon()
    {
        return $this->fetch(\App\Models\Icon::class);
    }

    protected function setupListOperation()
    {
        CRUD::addColumn('name');
        CRUD::addColumn('description');

        foreach ($this->groups() as $groupKey => $groupFields) {
            CRUD::addColumn([
                'name'     => $groupKey,
                'label'    => str_replace('_', ' ', Str::title($groupKey)),
                'type'     => 'array_count',
            ]);
        }
    }

    protected function setupCreateOperation()
    {
        $this->crud->setValidation(DummyRequest::class);
        $this->crud->setOperationSetting('contentClass', 'col-md-12');

        CRUD::addField('name');
        CRUD::addField('description');

        foreach ($this->groups() as $groupKey => $groupFields) {
            CRUD::addField([
                'name'        => $groupKey,
                'label'       => str_replace('_', ' ', Str::title($groupKey)),
                'type'        => 'repeatable',
                'fake'        => true,
                'store_in'    => 'extras',
                'subfields'   => $groupFields,
            ]);
        }
    }

    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }

    protected function setupShowOperation()
    {
        $this->setupListOperation();
        $this->crud->setOperationSetting('contentClass', 'col-md-12');

        // for field types that have multiple name (ex: date_range)
        // split those into two separate text columns
        foreach ($this->groups() as $groupKey => $groupFields) {
            CRUD::removeColumn($groupKey);

            foreach ($groupFields as $key => $field) {
                if (is_array($field['name'])) {
                    foreach ($field['name'] as $name) {
                        $newField = $field;
                        $newField['name'] = $name;
                        $newField['type'] = 'text';
                        $groupFields[] = $newField;
                    }
                    unset($groupFields[$key]);
                }
            }

            // only consider fields that have both name and label (needed for table column)
            // reject custom_html fields (since they have no value)
            $validFields = collect($groupFields)->reject(function ($value, $key) {
                $is_custom_html_field = $value['type'] ?? '' == 'custom_html';
                $does_not_have_label = !isset($value['label']);
                $does_not_have_name = !isset($value['name']);

                return $is_custom_html_field || $does_not_have_label || $does_not_have_name;
            })->pluck('label', 'name');

            CRUD::addColumn([
                'name'     => $groupKey,
                'label'    => str_replace('_', ' ', Str::title($groupKey)),
                'type'     => 'table',
                'columns'  => $validFields,
            ]);
        }

        CRUD::addColumn([
            'name' => 'created_at',
            'type' => 'datetime',
        ]);
        CRUD::addColumn([
            'name' => 'updated_at',
            'type' => 'datetime',
        ]);
    }

    protected function groups()
    {
        // instead of manually defining all the field type here too
        // let's pull all field types defined in MonsterCrudController instead
        // since they're already nicely split by tab,
        // we can split them exactly the same here, but into groups instead of tabs
        // (one repeatable field for each tab in MonsterCrudController)
        $groups['simple'] = MonsterCrudController::getFieldsArrayForSimpleTab();
        $groups['time_and_space'] = MonsterCrudController::getFieldsArrayForTimeAndSpaceTab();
        $groups['selects'] = MonsterCrudController::getFieldsArrayForSelectsTab();
        $groups['uploads'] = MonsterCrudController::getFieldsArrayForUploadsTab();
        $groups['big_texts'] = MonsterCrudController::getFieldsArrayForWysiwygEditorsTab();
        $groups['miscellaneous'] = MonsterCrudController::getFieldsArrayForMiscellaneousTab();

        // some fields do not make sense, or do not work inside repeatable, so let's exclude them
        $excludedFieldTypes = [
            'address', // TODO
            'address_google', // TODO
            'checklist_dependency', // only available in PermissionManager package
            // 'custom_html', // this works (of course), it's only used for heading, but the page looks better without them
            'enum', // doesn't make sense inside repeatable
            'page_or_link', // only available in PageManager package
            'upload', // currently impossible to make it work inside repeatable;
            'upload_multiple',  // currently impossible to make it work inside repeatable;
        ];

        foreach ($groups as $groupKey => $fields) {
            $groups[$groupKey] = Arr::where($fields, function ($field) use ($excludedFieldTypes) {
                // eliminate fields that have 1-1 relationships
                // (determined by the fact that their names use dot notation)
                if (is_string($field['name']) && strpos($field['name'], '.') != 0) {
                    return false;
                }

                // eliminate the heading for 1-1 relationships
                // since those are not available inside repeatable, the heading should be hidden too
                if (is_string($field['name']) && $field['name'] == 'select_1_1_heading') {
                    return false;
                }

                // if no field type was set, the system will probably use text, number or relationship
                // and all of those are fine, they work well inside repeatable fields
                if (!isset($field['type'])) {
                    return true;
                }

                // exclude all field types that we KNOW don't work inside repeatable
                return !in_array($field['type'], $excludedFieldTypes);
            });
        }

        return $groups;
    }

    public function ajaxUpload()
    {
        if (app('env') === 'production') {
            return response()->json(['errors' => [
                'message' => 'Uploads are disabled in production.',
            ]], 500);
        }

        return $this->traitAjaxUpload();
    }
}


================================================
FILE: app/Http/Controllers/Admin/EditableMonsterCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\MonsterRequest;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

class EditableMonsterCrudController extends MonsterCrudController
{
    use \Backpack\EditableColumns\Http\Controllers\Operations\MinorUpdateOperation;

    public function setup()
    {
        parent::setup();

        CRUD::setRoute(config('backpack.base.route_prefix').'/editable-monster');
        CRUD::setEntityNameStrings('editable monster', 'editable monsters');
    }

    public function setupListOperation()
    {
        CRUD::addButtonFromView('top', 'fake-editable-columns', 'fake-editable-columns');

        if (request()->query->get('fake')) {
            return $this->setupListOperationFake();
        }

        // demo editable_text column
        CRUD::column('text')
            ->label('Text')
            ->type('editable_text');

        CRUD::column('email')
            ->label('Email')
            ->type('editable_text');

        // demo editable_switch column
        CRUD::column('checkbox')
            ->label('Switch')
            ->type('editable_switch');

        // demo editable_checkbox column
        // CRUD::column('editable_checkbox')
        //     ->label('Editable checkbox')
        //     ->type('editable_checkbox');

        // demo editable_select column
        CRUD::column('select_from_array')
            ->label('Select')
            ->type('editable_select')
            ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three']);

        CRUD::column('text_and_email');
    }

    public function setupListOperationFake()
    {
        CRUD::addButtonFromView('top', 'fake-editable-columns', 'fake-editable-columns');

        // demo fake editable_text column
        CRUD::column('fake-text')
            ->label('Fake Text')
            ->type('editable_text')
            ->fake(true);

        // demo fake editable_switch column
        CRUD::column('fake-switch')
            ->label('Fake Switch')
            ->type('editable_switch')
            ->fake(true);

        // demo fake editable_checkbox column
        CRUD::column('fake-checkbox')
            ->label('Fake Checkbox')
            ->type('editable_checkbox')
            ->fake(true);

        // demo fake editable_select column
        CRUD::column('fake-select')
            ->label('Fake Select')
            ->type('editable_select')
            ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])
            ->fake(true);
    }

    protected function setupMinorUpdateOperation()
    {
        $this->crud->setValidation(MonsterRequest::class);
    }
}


================================================
FILE: app/Http/Controllers/Admin/FieldMonsterCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
use Backpack\CRUD\app\Library\Widget;

class FieldMonsterCrudController extends MonsterCrudController
{
    public function setup()
    {
        $this->crud->setModel(\App\Models\Monster::class);
        $this->crud->setRoute(config('backpack.base.route_prefix').'/field-monster');
        $this->crud->setEntityNameStrings('field monster', 'field monsters');

        $this->crud->set('show.setFromDb', false);
    }

    protected function setupCreateOperation()
    {
        $this->setupFieldsForTopScenarios();

        parent::setupCreateOperation();

        // load all the fields as a JS array
        Widget::add()->type('script')->content('assets/js/monster/fields.js');
        // then test each crud.field() method individually
        Widget::add()->type('script')->content('assets/js/monster/test-hide-field.js');
        Widget::add()->type('script')->content('assets/js/monster/test-show-field.js');
        Widget::add()->type('script')->content('assets/js/monster/test-disable-field.js');
        Widget::add()->type('script')->content('assets/js/monster/test-enable-field.js');
        Widget::add()->type('script')->content('assets/js/monster/test-require-field.js');
        Widget::add()->type('script')->content('assets/js/monster/test-unrequire-field.js');
        Widget::add()->type('script')->content('assets/js/monster/test-custom-field.js');
        Widget::add()->type('script')->content('assets/js/monster/test-onchange-field.js');
    }

    protected function setupFieldsForTopScenarios()
    {
        Widget::add()->type('script')->content('assets/js/monster/test-top-scenarios.js');

        CRUD::field('notice')->type('custom_html')->value('<i class="text-small">This tab shows the Top 10 Scenarios that the crud.field() JS library covers. These fields will NOT hide/show/etc when the buttons above are clicked, that\'s ok, don\'t worry.</i><hr>')->tab('Top 10 Scenarios');

        // MUST: when a checkbox is checked, show a second field;
        CRUD::field('visible')->type('checkbox')->fake(true)->tab('Top 10 Scenarios');
        CRUD::field('visible_where')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-11 offset-1'])->tab('Top 10 Scenarios');

        // MUST: when a checkbox is checked, show a second field AND un-disable/un-readonly it;
        CRUD::field('displayed')->type('checkbox')->fake(true)->tab('Top 10 Scenarios');
        CRUD::field('displayed_where')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-11 offset-1'])->tab('Top 10 Scenarios');

        // MUST: when a radio has something specific selected, show a second field;
        CRUD::field('type')->type('radio')->options(['Type A', 'Type B', 'Type C', 'Other'])->inline(true)->fake(true)->tab('Top 10 Scenarios');
        // when type is Other, show an input to specify its type
        CRUD::field('custom_type')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-11 offset-1'])->tab('Top 10 Scenarios');

        // MUST: when a select has something specific selected, show a second field;
        CRUD::field('parent')->type('select_from_array')->options([
            1 => 'Parent 1',
            2 => 'Parent 2',
            3 => 'Parent 3',
            4 => 'Parent 4',
            5 => 'Parent 5',
            6 => 'Parent 6',
            6 => 'Other',
        ])->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-6'])->tab('Top 10 Scenarios');
        CRUD::field('custom_parent')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-6'])->tab('Top 10 Scenarios');
        CRUD::field('another_separator')->type('custom_html')->value('<hr>')->tab('Top 10 Scenarios');

        // MUST: when a checkbox is checked AND a select has a certain value, then show a third field;
        // done, re-used displayed and parent

        // MUST: when a checkbox is checked OR a select has a certain value, then show a third field;
        // done, re-used displayed and parent

        // SHOULD: when a select is a certain value, show a second field; if it's another value, show a third field;
        // done, re-used category

        // SHOULD: when a checkbox is checked, automatically check a different checkbox or radio;
        // done, re-used visible, it now checks displayed

        // COULD: when a text input is written into, write into a second input (eg. slug);
        CRUD::field('title')->size(6)->tab('Top 10 Scenarios');
        CRUD::field('title_url_segment')->size(6)->tab('Top 10 Scenarios');

        // COULD: when multiple inputs change, change a last input to calculate the total or smth;
        CRUD::field('full_price')->type('number')->size(4)->tab('Top 10 Scenarios');
        CRUD::field('discounted_price')->type('number')->size(4)->tab('Top 10 Scenarios');
        CRUD::field('discount_percentage')->type('number')->size(4)->tab('Top 10 Scenarios');
        CRUD::field('repeatable_example_1')->type('repeatable')->tab('Top 10 Scenarios')->store_in('extras')->subfields([
            [
                'name'    => 'yes_or_no',
                'type'    => 'select2_from_array',
                'label'   => 'Yes or No',
                'options' => ['no' => 'no', 'yes'=> 'yes'],
            ],
            [
                'name' => 'if_no',
                'type' => 'text',
            ],
            [
                'name' => 'if_yes',
                'type' => 'text',
            ],
        ]);

        CRUD::field('repeatable_example_2')->type('repeatable')->tab('Top 10 Scenarios')->store_in('extras')->subfields([
            [
                'name'  => 'how_many',
                'type'  => 'number',
                'label' => 'How Many?',
                'min'   => 1,
                'step'  => 1,
            ],
            [
                'name' => 'if_more_than_10',
                'type' => 'text',
            ],
            [
                'name' => 'if_more_than_20',
                'type' => 'text',
            ],
        ]);

        CRUD::field('live_validation_select')->type('select2_from_array')->options([
            'Zero', 'One', 'Two', 'Three',
        ])->tab('Top 10 Scenarios')->size(4);
        CRUD::field('live_validation_text')->type('text')->tab('Top 10 Scenarios')->size(4);
        CRUD::field('live_validation_number')->type('number')->step(1)->tab('Top 10 Scenarios')->size(4);
    }
}


================================================
FILE: app/Http/Controllers/Admin/FluentMonsterCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\MonsterRequest as StoreRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

class FluentMonsterCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation;

    public function setup()
    {
        CRUD::setModel(\App\Models\Monster::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/fluent-monster');
        CRUD::setEntityNameStrings('fluent monster', 'fluent monsters');
    }

    public function fetchProduct()
    {
        return $this->fetch(\App\Models\Product::class);
    }

    public function fetchIcon()
    {
        return $this->fetch(\App\Models\Icon::class);
    }

    public function setupListOperation()
    {
        CRUD::setOperationSetting('responsiveTable', false);
        CRUD::column('text');
        CRUD::column('textarea');
        CRUD::column('image')->type('image');
        CRUD::column('base64_image')->type('image')->label('Base64 Image');
        CRUD::column('checkbox')
                ->type('boolean')
                ->label('Boolean')
                ->options([0 => 'Yes', 1 => 'No'])
                ->wrapper([
                    'element' => 'span',
                    'class'   => static function ($crud, $column, $entry) {
                        return 'badge rounded-pill bg-'.($entry->{$column['name']} ? 'danger' : 'success');
                    },
                ]);
        CRUD::column('checkbox')->key('check')->label('Agreed')->type('check');
        CRUD::column('created_at')->type('closure')->label('Created At')->function(function ($entry) {
            return 'Created on '.$entry->created_at;
        });
        CRUD::column('date')->type('date');
        CRUD::column('datetime')->type('datetime');
        CRUD::column('email')->type('email')->label('Email Address');
        // show both text and email values in one column
        // this column is here to demo and test the custom searchLogic functionality
        CRUD::column('model_function')
                ->type('model_function')
                ->label('Text and Email')
                ->function_name('getTextAndEmailAttribute')
                ->searchLogic(function ($query, $column, $searchTerm) {
                    $query->orWhere('email', 'like', '%'.$searchTerm.'%');
                    $query->orWhere('text', 'like', '%'.$searchTerm.'%');
                });
        CRUD::column('number')->type('number');
        CRUD::column('radio')
                ->type('radio')
                ->options([0 => 'Draft', 1 => 'Published', 2 => 'Other']);
        CRUD::column('select')
                ->type('select')
                ->entity('category')
                ->attribute('name')
                ->model("Backpack\NewsCRUD\app\Models\Category")
                ->wrapper([
                    'href' => function ($crud, $column, $entry, $related_key) {
                        return backpack_url('category/'.$related_key.'/show');
                    },
                ]);
        CRUD::column('select_from_array')
                ->type('select_from_array')
                ->label('Select_from_array')
                ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three']);
        CRUD::column('tags')
                ->type('select_multiple')
                ->label('Select_multiple')
                ->entity('tags')
                ->attribute('name')
                ->model('Backpack\NewsCRUD\app\Models\Tag')
                ->wrapper([
                    'href' => function ($crud, $column, $entry, $related_key) {
                        return backpack_url('tag/'.$related_key.'/show');
                    },
                ]);
        CRUD::column('video')->type('video');

        CRUD::enableDetailsRow();
        CRUD::setDetailsRowView('vendor.backpack.crud.details_row.monster');
        CRUD::enableExportButtons();
        CRUD::button('open_google')->stack('line')->modelFunction('openGoogle')->makeFirst();

        $this->addCustomCrudFilters();
    }

    public function setupShowOperation()
    {
        $this->setupListOperation();

        CRUD::set('show.contentClass', 'col-md-12');

        CRUD::column('easymde')->type('markdown')->label('Markdown (EasyMDE)');
        CRUD::column('table')->type('table')->columns([
            'name'  => 'Name',
            'desc'  => 'Description',
            'price' => 'Price',
        ]);
        CRUD::column('name')->type('array_count')->key('table_count')->label('Array count');
        CRUD::column('extras')->type('array')->key('array')->label('Array');
        CRUD::column('table')
                ->key('multidimensional_array')
                ->type('multidimensional_array')
                ->label('Multidimensional Array')
                ->visible_key('name');
        CRUD::column('category')
                ->label('Model Function Attribute')
                ->type('model_function_attribute')
                ->function_name('getCategory')
                ->attribute('name');
        CRUD::column('number')->type('phone')->label('Phone')->key('phone');
        CRUD::column('upload_multiple')->type('upload_multiple')->prefix('uploads/');
    }

    protected function setupCreateOperation()
    {
        CRUD::setValidation(StoreRequest::class);
        CRUD::setOperationSetting('contentClass', 'col-md-12 bold-labels');

        CRUD::field('text')->type('text')->label('Text')
            ->tab('Simple')->size(6);

        CRUD::field('email')->type('email')->label('Email')
            ->tab('Simple')->wrapper(['class' => 'form-group col-md-6']);

        CRUD::field('textarea')->type('textarea')->label('Textarea')->tab('Simple');
        CRUD::field('number')->type('number')->label('Number')
            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);

        CRUD::field('float')->type('number')->label('Float')->attributes(['step' => 'any'])
            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);

        CRUD::field('number_with_prefix')->type('number')
            ->prefix('$')->fake(true)->store_in('extras')
            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);

        CRUD::field('number_with_suffix')->type('number')
            ->suffix('.00')->fake(true)->store_in('extras')
            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);

        CRUD::field('text_with_both_prefix_and_suffix')->type('number')
            ->prefix('@')->suffix("<i class='la la-home'></i>")->fake(true)->store_in('extras')
            ->tab('Simple')->wrapper(['class' => 'form-group col-md-6']);

        CRUD::field('password')->type('password')
            ->tab('Simple')->wrapper(['class' => 'form-group col-md-6']);

        CRUD::field('radio')->type('radio')->label('Status (radio)')->options([
            // the key will be stored in the db, the value will be shown as label;
            0 => 'Draft',
            1 => 'Published',
            2 => 'Other',
        ])->inline(true)->tab('Simple');

        CRUD::field('checkbox')->type('checkbox')->label('I have not read the terms and conditions and I never will (checkbox)')->tab('Simple');

        CRUD::field('switch')->type('switch')->label('I have not read the terms and conditions and I never will (switch)')->tab('Simple')->fake(true);

        CRUD::field('hidden')->type('hidden')->default('hidden value')->tab('Simple');

        // -----------------
        // DATE, TIME AND SPACE tab
        // -----------------

        CRUD::field('week')
            ->type('week')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->tab('Time and space');

        CRUD::field('month')
            ->type('month')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->tab('Time and space');

        CRUD::field('date')
            ->type('date')
            ->label('Date (HTML5 spec)')
            ->attributes([
                'pattern'     => '[0-9]{4}-[0-9]{2}-[0-9]{2}',
                'placeholder' => 'yyyy-mm-dd',
            ])
            ->wrapper(['class' => 'form-group col-md-6'])
            ->tab('Time and space');

        CRUD::field('date_picker')
            ->type('date_picker')
            ->label('Date (jQuery plugin)')
            ->date_picker_options([
                'todayBtn' => true,
                'format'   => 'dd-mm-yyyy',
                'language' => 'en',
            ])
            ->wrapper(['class' => 'form-group col-md-6'])
            ->tab('Time and space');

        CRUD::field('datetime')
            ->type('datetime')
            ->label('Datetime (HTML5 spec)')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->tab('Time and space');

        CRUD::field('datetime_picker')
            ->type('datetime_picker')
            ->label('Datetime picker (jQuery plugin)')
            ->datetime_picker_options([
                'format'   => 'DD/MM/YYYY HH:mm',
                'language' => 'en',
            ])
            ->wrapper(['class' => 'form-group col-md-6'])
            ->tab('Time and space');

        CRUD::field('start_date,end_date')
            ->type('date_range')
            ->label('Date Range')
            ->default(['2020-03-28 01:01', '2020-04-05 02:00'])
            ->date_range_options([
                'timePicker' => true,
                'locale'     => ['format' => 'DD/MM/YYYY HH:mm'],
            ])
            ->tab('Time and space');

        // -----------------
        // SELECTS tab
        // -----------------

        CRUD::field('select_1_n_heading')->type('custom_html')->tab('Selects')
                ->value('<h5 class="mb-0 text-primary">1-n Relationships (HasOne, BelongsTo)</h5>');

        CRUD::field('select')
                ->type('select')
                ->label('Select (HTML Spec Select Input for 1-n relationship)')
                ->entity('category')
                ->attribute('name')
                ->model('Backpack\NewsCRUD\app\Models\Category')
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('select2')
                ->type('select2')
                ->label('Select2 (1-n relationship)')
                ->entity('category')
                ->attribute('name')
                ->model('Backpack\NewsCRUD\app\Models\Category')
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('select2_from_ajax')
                ->type('select2_from_ajax')
                ->label("Article <small class='font-light'>(select2_from_ajax for a 1-n relationship)</small>")
                ->entity('article')
                ->attribute('title')
                ->model('Backpack\NewsCRUD\app\Models\Article')
                ->data_source(url('api/article'))
                ->method('POST')
                ->placeholder('Select an article')
                ->minimum_input_length(2)
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('icon_id')
                ->type('relationship')
                ->label('Relationship (1-n with InlineCreate; no AJAX)'.backpack_new_badge('New in 4.1'))
                // ->entity('icon')
                ->attribute('name')
                // ->data_source(backpack_url('monster/fetch/icon'))
                ->inline_create(true)
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('select_n_n_heading')->type('custom_html')->tab('Selects')
            ->value('<h5 class="mb-0 mt-3 text-primary">n-n Relationship with Pivot Table (HasMany, BelongsToMany)</h5>');

        CRUD::field('tags')
                ->type('select_multiple')
                ->label('Select_multiple (n-n relationship with pivot table)')
                ->entity('tags')
                ->attribute('name')
                ->model('Backpack\NewsCRUD\app\Models\Tag')
                ->pivot(true)
                ->tab('Selects');

        CRUD::field('categories')
                ->type('select2_multiple')
                ->label('Select2_multiple (n-n relationship with pivot table)')
                ->entity('categories')
                ->attribute('name')
                ->model(\Backpack\NewsCRUD\app\Models\Category::class)
                ->allows_null(true)
                ->pivot(true)
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('articles')
                ->type('select2_from_ajax_multiple')
                ->label("Articles <small class='font-light'>(select2_from_ajax_multiple for an n-n relationship with pivot table)</small>")
                ->entity('articles')
                ->attribute('title')
                ->model(\Backpack\NewsCRUD\app\Models\Article::class)
                ->data_source(url('api/article'))
                ->placeholder('Select one or more articles')
                ->minimum_input_length(2)
                ->method('post')
                ->pivot(true)
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('products')
                ->type('relationship')
                ->label('Relationship (n-n with InlineCreate; Fetch using AJAX)'.backpack_new_badge('New in 4.1'))
                ->entity('products')
                // ->attribute('name')
                ->ajax(true)
                ->data_source(backpack_url('monster/fetch/product'))
                // ->inline_create(true) // TODO: make it work this way too
                ->inline_create(['entity' => 'product'])
                // ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('select_heading')->type('custom_html')->tab('Selects')
            ->value('<h5 class="mb-0 mt-3 text-primary">No Relationship</h5>');

        CRUD::field('select_from_array')
                ->type('select_from_array')
                ->label('Select_from_array (no relationship, 1-1 or 1-n)')
                ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])
                ->allows_null(true)
                ->allows_multiple(false)
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('select2_from_array')
                ->type('select2_from_array')
                ->label('Select2_from_array (no relationship, 1-1 or 1-n)')
                ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])
                ->allows_null(true)
                ->allows_multiple(false)
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Selects');

        CRUD::field('select_and_order')
                ->type('select_and_order')
                ->label('Select and order')
                ->options([
                    1 => 'Option 1',
                    2 => 'Option 2',
                    3 => 'Option 3',
                    4 => 'Option 4',
                    5 => 'Option 5',
                    6 => 'Option 6',
                    7 => 'Option 7',
                    8 => 'Option 8',
                    9 => 'Option 9',
                ])
                ->fake(true)
                ->tab('Selects');
        CRUD::field('wysiwyg')->type('summernote')->label('WYSIWYG')->tab('Editors');

        CRUD::field('icondummy')
                ->type('relationship')
                ->label('Relationship to non-nullable model (belongs_to_non_nullable)')
                ->entity('icondummy')
                ->attribute('icon')
                ->model(\App\Models\Icon::class)
                ->allows_null(false)
                ->tab('Selects');

        // -----------------
        // UPLOADS tab
        // -----------------

        if (app('env') == 'production') {
            CRUD::field('separator')
                ->type('custom_html')
                ->value('<p><small><strong>Note: </strong>In the online demo we\'ve restricted the upload and media library fields a lot, or hidden them entirely. To test them out, you can <a target="_blank" href="https://backpackforlaravel.com/docs/demo">download and install this demo admin panel</a> in your local environment.</small></p>')
                ->tab('Uploads');
        }

        CRUD::field('browse')
                ->type('browse')
                ->label('Browse (using elFinder)')
                ->tab('Uploads');

        CRUD::field('browse_multiple')
                ->type('browse_multiple')
                ->label('Browse multiple')
                ->sortable(true)
                // ->multiple(true)
                // ->mime_types(null)
                ->tab('Uploads');

        CRUD::field('upload')
                ->type('upload')
                ->label('Upload')
                ->upload(true)
                ->disk('uploads')
                ->tab('Uploads');

        CRUD::field('upload_multiple')
                ->type('upload_multiple')
                ->upload(true)
                ->tab('Uploads');

        CRUD::field('base64_image')
                ->type('base64_image')
                ->label('Base64 Image - includes cropping')
                ->crop(true)
                ->filename(null)
                ->aspect_ratio(1)
                ->src(null) // null to read straight from DB, else model accessor
                ->tab('Uploads');

        CRUD::field('image')
                ->type('image')
                ->label('Image - includes cropping')
                ->upload(true)
                ->crop(true)
                ->aspect_ratio(1)
                ->src(null) // null to read straight from DB, else model accessor
                ->tab('Uploads');

        // -----------------
        // BIG TEXTS tab
        // -----------------

        CRUD::field('easymde')
                ->type('easymde')
                ->label('EasyMDE - markdown editor')
                ->tab('Big texts')
                ->fake(true);

        CRUD::field('summernote')
                ->type('summernote')
                ->label('Summernote editor')
                ->tab('Big texts');
        CRUD::field('tinymce')
                ->type('tinymce')
                ->label('TinyMCE')
                ->tab('Big texts');

        // -----------------
        // MISCELLANEOUS tab
        // -----------------

        CRUD::field('color')
                ->type('color')
                ->label('Color picker (HTML5 spec)')
                ->wrapper(['class' => 'form-group col-md-6'])
                ->tab('Miscellaneous');

        CRUD::field('video')
                ->type('video')
                ->label('Video - link to video file on Youtube or Vimeo')
                ->tab('Miscellaneous')
                ->wrapper(['class' => 'form-group col-md-5']);

        CRUD::field('range')
                ->type('range')
                ->label('range')
                // optional
                ->attributes([
                    'min' => 0,
                    'max' => 10,
                ])
                ->tab('Miscellaneous')
                ->wrapper(['class' => 'form-group col-md-5']);

        CRUD::field('icon_picker')
                ->type('icon_picker')
                ->label('Icon Picker')
                ->iconset('fontawesome')
                ->wrapper(['class' => 'form-group col-md-2'])
                ->tab('Miscellaneous');

        CRUD::field('table')
                ->type('table')
                ->label('Table')
                ->columns([
                    'name'  => 'Name',
                    'desc'  => 'Description',
                    'price' => 'Price',
                ])
                ->min(0)
                ->max(5)
                ->tab('Miscellaneous');

        CRUD::field('fake_table')
                ->type('table')
                ->label('Fake Table')
                ->fake(true)
                ->columns([
                    'name'  => 'Name',
                    'desc'  => 'Description',
                    'price' => 'Price',
                ])
                ->min(0)
                ->max(5)
                ->tab('Miscellaneous');

        CRUD::field('url')
                ->type('url')
                ->label('URL')
                ->tab('Miscellaneous');

        CRUD::field('url')->remove();
    }

    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }

    protected function addCustomCrudFilters()
    {
        CRUD::filter('checkbox')
                ->type('simple')
                ->label('Simple')
                ->whenActive(function () {
                    CRUD::addClause('where', 'checkbox', '1');
                });

        CRUD::filter('select_from_array')
                ->type('dropdown')
                ->label('Dropdown')
                ->values(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])
                ->whenActive(function ($value) {
                    CRUD::addClause('where', 'select_from_array', $value);
                });

        CRUD::filter('text')
                ->type('text')
                ->label('Text')
                ->whenActive(function ($value) {
                    CRUD::addClause('where', 'text', 'LIKE', "%$value%");
                });

        CRUD::filter('number')
                ->type('range')
                ->label('Range')
                ->label_from('min value')
                ->label_to('max value')
                ->whenActive(function ($value) {
                    $range = json_decode($value);
                    if ($range->from && $range->to) {
                        CRUD::addClause('where', 'number', '>=', (float) $range->from);
                        CRUD::addClause('where', 'number', '<=', (float) $range->to);
                    }
                });

        CRUD::filter('date')
                ->type('date')
                ->label('Date')
                ->whenActive(function ($value) {
                    CRUD::addClause('where', 'date', '=', $value);
                });

        CRUD::filter('date_range')
                ->type('date_range')
                ->label('Date range')
                ->whenActive(function ($value) {
                    $dates = json_decode($value);
                    CRUD::addClause('where', 'date', '>=', $dates->from);
                    CRUD::addClause('where', 'date', '<=', $dates->to);
                });

        CRUD::filter('select2')
                ->type('select2')
                ->label('Select2')
                ->values(function () {
                    return \Backpack\NewsCRUD\app\Models\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();
                })->whenActive(function ($value) {
                    CRUD::addClause('where', 'select2', $value);
                });

        CRUD::filter('select2_multiple')
                ->type('select2_multiple')
                ->label('S2 multiple')
                ->values(function () {
                    return \Backpack\NewsCRUD\app\Models\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();
                })->whenActive(function ($values) {
                    foreach (json_decode($values) as $key => $value) {
                        CRUD::addClause('orWhere', 'select2', $value);
                    }
                });

        CRUD::filter('select2_from_ajax')
                ->type('select2_ajax')
                ->label('S2 Ajax')
                ->placeholder('Pick an article')
                ->values(url('api/article-search'))
                ->method('POST')
                ->whenActive(function ($value) {
                    CRUD::addClause('where', 'select2_from_ajax', $value);
                });
    }
}


================================================
FILE: app/Http/Controllers/Admin/HeroCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\HeroRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
 * Class HeroCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class HeroCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;

    /**
     * Configure the CrudPanel object. Apply settings to all operations.
     *
     * @return void
     */
    public function setup()
    {
        CRUD::setModel(\App\Models\Hero::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/hero');
        CRUD::setEntityNameStrings('hero', 'heroes');
    }

    /**
     * Define what happens when the List operation is loaded.
     *
     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries
     *
     * @return void
     */
    protected function setupListOperation()
    {
        CRUD::column('name');
        CRUD::column('monster');
        CRUD::column('stories');
    }

    /**
     * Define what happens when the Create operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-create
     *
     * @return void
     */
    protected function setupCreateOperation()
    {
        CRUD::setValidation(HeroRequest::class);
        CRUD::setOperationSetting('contentClass', 'col-md-12');

        CRUD::field('name');
        CRUD::field('stories')
            ->label('Stories'.backpack_new_badge())
            ->subfields([
                [
                    'name' => 'name',
                ],
                [
                    'name'      => 'monsters',
                    'type'      => 'select2_multiple',
                    'model'     => \App\Models\Monster::class,
                    'entity'    => 'monsters',
                    'attribute' => 'text',
                    'pivot'     => true,
                ],
            ])
            ->hint('<small class="float-right">Select the related Story over a <code>belongsToMany</code> relationship (n-n) with extra pivot fields.</small>');
    }

    /**
     * Define what happens when the Update operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-update
     *
     * @return void
     */
    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }

    public static function getMonsterSubfields()
    {
        $subfields = CaveCrudController::getMonsterSubfields();

        /* foreach ($subfields as $key => $subfield) {
            // fake fields don't work here for some reason
            // TODO: fix the problem and remove this
            if (isset($subfield['fake']) && $subfield['fake']) {
                unset($subfields[$key]);
                continue;
            }
            // multiple fields don't work here for some reason
            // TODO: fix the problem and remove this
            if (isset($subfield['pivot']) && $subfield['pivot']) {
                unset($subfields[$key]);
                continue;
            }
            // fields from the "relationship" tab don't work here for some reason
            // TODO: fix the problem and remove this
            if (isset($subfield['tab']) && $subfield['tab'] == 'Relationships') {
                unset($subfields[$key]);
                continue;
            }
        }
 */
        return $subfields;
    }
}


================================================
FILE: app/Http/Controllers/Admin/IconCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\IconRequest as StoreRequest;
// VALIDATION: change the requests to match your own file names if you need form validation
use Backpack\CRUD\app\Http\Controllers\CrudController;

class IconCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\InlineCreateOperation;
    use \Backpack\ReviseOperation\ReviseOperation;

    public function setup()
    {
        $this->crud->setModel(\App\Models\Icon::class);
        $this->crud->setRoute(config('backpack.base.route_prefix').'/icon');
        $this->crud->setEntityNameStrings('icon', 'icons');
    }

    protected function setupListOperation()
    {
        $this->crud->addColumns(['name', 'icon']);

        $this->crud->addFilter([
            'type'  => 'date_range',
            'name'  => 'created_at',
            'label' => 'Created At',
        ], null, function ($value) {
            $value = json_decode($value, true);

            // if the filter is active
            if ($value) {
                $this->crud->addClause('where', 'created_at', '>=', $value['from']);
                $this->crud->addClause('where', 'created_at', '<=', $value['to']);
            }
        });
    }

    protected function setupCreateOperation()
    {
        $this->crud->setValidation(StoreRequest::class);
        $this->crud->addField('name');
        $this->crud->addField([
            'label'   => 'Icon',
            'name'    => 'icon',
            'type'    => 'icon_picker',
            'iconset' => 'fontawesome4', // options: fontawesome, glyphicon, ionicon, weathericon, mapicon, octicon, typicon, elusiveicon, materialdesign
        ]);
    }

    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }
}


================================================
FILE: app/Http/Controllers/Admin/MeetingCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\MeetingRequest;
use App\Models\Meeting;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
use Backpack\CRUD\app\Library\Widget;
use Carbon\Carbon;

/**
 * Class MeetingCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class MeetingCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation;
    use \Backpack\CalendarOperation\CalendarOperation;
    use Operations\SMSOperation;

    protected array $meetingTypes = [
        ['id' => 'informational', 'title' => 'Informational', 'location' => 'In-person'],
        ['id' => 'brainstorming', 'title' => 'Brainstorming', 'location' => 'In-person'],
        ['id' => 'decision-making', 'title' => 'Decision Making', 'location' => 'In-person'],
        ['id' => 'problem-solving', 'title' => 'Problem Solving', 'location' => 'In-person'],
        ['id' => 'status-update', 'title' => 'Status Update', 'location' => 'In-person'],
        ['id' => 'training', 'title' => 'Training', 'location' => 'Virtual'],
        ['id' => 'feedback', 'title' => 'Feedback', 'location' => 'Virtual'],
        ['id' => 'performance-review', 'title' => 'Performance Review', 'location' => 'Virtual'],
        ['id' => 'planning', 'title' => 'Planning', 'location' => 'Virtual'],
        ['id' => 'social', 'title' => 'Social', 'location' => 'Virtual'],
        ['id' => 'networking', 'title' => 'Networking', 'location' => 'Hybrid'],
        ['id' => 'interview', 'title' => 'Interview', 'location' => 'Hybrid'],
        ['id' => 'presentation', 'title' => 'Presentation', 'location' => 'Hybrid'],
        ['id' => 'review', 'title' => 'Review', 'location' => 'Hybrid'],
        ['id' => 'other', 'title' => 'Other', 'location' => 'Hybrid'],
    ];

    /**
     * Configure the CrudPanel object. Apply settings to all operations.
     */
    public function setup(): void
    {
        CRUD::setModel(Meeting::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/meeting');
        CRUD::setEntityNameStrings(__('meeting'), __('meetings'));
    }

    public function getCalendarFieldsMap()
    {
        return [
            'title'            => 'title',
            'start'            => 'start',
            'end'              => 'end',
            'background_color' => 'background_color',
            'text_color'       => 'text_color',
            'all_day'          => 'all_day',
            'email'            => 'email',
            'number'           => 'number',
        ];
    }

    public function setupCalendarOperation()
    {
        $this->crud->setOperationSetting('initial-view', 'dayGridMonth');

        $this->crud->setOperationSetting('views', ['dayGridMonth', 'timeGridWeek', 'timeGridDay']);

        $this->crud->setOperationSetting('editable', true);

        $this->crud->setOperationSetting('background_color', '#3788d8');

        $this->crud->setOperationSetting('text_color', '#ffffff');

        $this->addCalendarLineButton(
            action: 'sms',
            label: 'Send SMS',
            url: fn (Meeting $entry) => url($this->crud->route.'/'.$entry->id.'/s-m-s'),
            group: 'send'
        );

        $this->addCalendarLineButton(
            action: 'email',
            label: 'Send Email',
            url: fn (Meeting $entry) => url($this->crud->route.'/'.$entry->id.'/s-m-s?email='.$entry->email),
            group: 'send'
        );

        $this->addCalendarLineButton(
            action: 'call',
            label: 'Call',
            url: fn (Meeting $entry) => url($this->crud->route.'/'.$entry->id.'/s-m-s?call='.$entry->number),
            group: 'call'
        );

        $this->addCalendarLineButton(
            action: 'alert',
            label: 'Javascript Event',
            group: 'alert',
            properties: [
                'message' => 'Alert message!',
            ],
        );

        Widget::add()
            ->type('script')
            ->content('assets/js/meetings.js');
    }

    /**
     * Define what happens when the List operation is loaded.
     */
    protected function setupListOperation(): void
    {
        CRUD::column('title')
            ->type('text');

        CRUD::column('types')
            ->type('text')
            ->value(fn (Meeting $entry): string => collect($entry->types)->map(fn ($type) => ($type['title'] ?? '').' ('.($type['location'] ?? '').')')->join(', '));

        CRUD::column('start')
            ->type('datetime');

        CRUD::column('end')
            ->type('datetime');

        CRUD::column('background_color')
            ->showColorHex(false)
            ->type('color');
    }

    /**
     * Define what happens when the Create operation is loaded.
     */
    protected function setupCreateOperation(): void
    {
        CRUD::setValidation(MeetingRequest::class);

        $start = request()->has('start') ? Carbon::parse(request('start')) : null;
        $end = request()->has('end') ? Carbon::parse(request('end')) : null;

        CRUD::field('title')
            ->type('text');

        CRUD::field('types')
            ->type('select2_json_from_api')
            ->data_source(backpack_url('meeting/fetch/types'))
            ->method('POST')
            ->default($this->meetingTypes[0])
            ->attributes_to_store(['id', 'title', 'location'])
            ->attribute('title')
            ->multiple(true)
            ->minimum_input_length(0);

        CRUD::field('email')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->type('text');

        CRUD::field('number')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->type('phone');

        CRUD::field('all_day')
            ->type('switch');

        CRUD::field('start')
            ->type('datetime')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->value($start);

        CRUD::field('end')
            ->type('datetime')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->value($end);

        CRUD::field('separator')
            ->type('custom_html')
            ->value('');

        CRUD::field('background_color')
            ->type('color')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->default('#3788d8');

        CRUD::field('text_color')
            ->type('color')
            ->wrapper(['class' => 'form-group col-md-6'])
            ->default('#ffffff');

        Widget::add()
            ->type('script')
            ->content('assets/js/meeting.js');
    }

    /**
     * Define what happens when the Update operation is loaded.
     */
    protected function setupUpdateOperation(): void
    {
        $this->setupCreateOperation();
    }

    /**
     * Define the types to fetch.
     */
    public function fetchTypes()
    {
        return collect($this->meetingTypes)
            ->filter(fn ($value): bool => str_contains(strtolower($value['title']), strtolower(request('q'))));
    }
}


================================================
FILE: app/Http/Controllers/Admin/MonsterCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\MonsterRequest as StoreRequest;
// VALIDATION: change the requests to match your own file names if you need form validation
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
use Backpack\CRUD\app\Library\Widget;
use Illuminate\Support\Collection;

class MonsterCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\DataformModal\Http\Controllers\Operations\CreateInModalOperation;
    use \Backpack\DataformModal\Http\Controllers\Operations\UpdateInModalOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation;
    use \Backpack\Pro\Http\Controllers\Operations\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }
    use Operations\SMSOperation; //Custom Form Operation Example
    use \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation;
    use \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation;
    use \Backpack\ReportOperation\Http\Controllers\Operations\ReportOperation;

    public function setup()
    {
        $this->crud->setModel(\App\Models\Monster::class);
        $this->crud->setRoute(config('backpack.base.route_prefix').'/monster');
        $this->crud->setEntityNameStrings('monster', 'monsters');

        $this->crud->set('show.setFromDb', false);
    }

    public function fetchProduct()
    {
        return $this->fetch(\App\Models\Product::class);
    }

    public function fetchProducts()
    {
        return $this->fetch(\App\Models\Product::class);
    }

    public function fetchIcon()
    {
        return $this->fetch(\App\Models\Icon::class);
    }

    public function fetchArticle()
    {
        return $this->fetch(\App\Models\Article::class);
    }

    public function fetchPaginatedTypes()
    {
        $types = [
            ['id' => 'informational', 'title' => 'Informational', 'location' => 'In-person'],
            ['id' => 'brainstorming', 'title' => 'Brainstorming', 'location' => 'In-person'],
            ['id' => 'decision-making', 'title' => 'Decision Making', 'location' => 'In-person'],
            ['id' => 'problem-solving', 'title' => 'Problem Solving', 'location' => 'In-person'],
            ['id' => 'training', 'title' => 'Training', 'location' => 'Virtual'],
            ['id' => 'planning', 'title' => 'Planning', 'location' => 'Virtual'],
            ['id' => 'social', 'title' => 'Social', 'location' => 'Virtual'],
            ['id' => 'networking', 'title' => 'Networking', 'location' => 'Hybrid'],
            ['id' => 'interview', 'title' => 'Interview', 'location' => 'Hybrid'],
            ['id' => 'review', 'title' => 'Review', 'location' => 'Hybrid'],
        ];

        Collection::macro('paginate', function (int $perPage = 15, ?int $page = null, array $options = []) {
            $page ??= \Illuminate\Pagination\Paginator::resolveCurrentPage() ?? 1;

            return new \Illuminate\Pagination\LengthAwarePaginator($this->forPage($page, $perPage)->toArray(), $this->count(), $perPage, $page, $options);
        });

        return collect($types)
            ->filter(fn (array $value): bool => str_contains(strtolower($value['title']), strtolower(request('q'))))
            ->paginate(4);
    }

    public function fetchSimpleTypes()
    {
        $types = [
            'informational'   => 'Informational',
            'brainstorming'   => 'Brainstorming',
            'decision-making' => 'Decision Making',
            'problem-solving' => 'Problem Solving',
            'training'        => 'Training',
            'planning'        => 'Planning',
            'social'          => 'Social',
            'networking'      => 'Networking',
            'interview'       => 'Interview',
            'review'          => 'Review',
        ];

        return collect($types)->filter(fn (string $value): bool => str_contains(strtolower($value), strtolower(request('q'))));
    }

    public function setupListOperation()
    {
        $this->crud->addColumns([
            [
                'name'  => 'text',
                'tab'   => 'Simple',
            ],
            [
                'name'  => 'textarea',
                'tab'   => 'Simple',
            ],
            [
                'name'  => 'articles', // relationship column
                'tab'   => 'Simple',
            ],
            [
                'name'  => 'image', // The db column name
                'label' => 'Image', // Table column heading
                'type'  => 'image',
                'tab'   => 'Uploads',
            ],
            [
                'name'  => 'base64_image', // The db column name
                'label' => 'Base64 Image'.backpack_pro_badge(), // Table column heading
                'type'  => 'image',
                'tab'   => 'Uploads',
            ],
            [
                'name'  => 'checkbox',
                'label' => 'Boolean',
                'type'  => 'boolean',
                // optionally override the Yes/No texts
                'options' => [0 => 'Yes', 1 => 'No'],
                'tab'     => 'Simple',
                'wrapper' => [
                    'element' => 'span',
                    'class'   => function ($crud, $column, $entry, $related_key) {
                        if ($column['text'] == 'Yes') {
                            return 'badge rounded-pill bg-success text-white';
                        }

                        return 'badge rounded-pill bg-danger text-white';
                    },
                ],
            ],
            [
                'name'  => 'checkbox', // The db column name
                'key'   => 'agreed',
                'label' => 'Agreed', // Table column heading
                'type'  => 'checkbox',
                'tab'   => 'Simple',
            ],
            [
                'name'     => 'created_at',
                'label'    => 'Created At',
                'type'     => 'closure',
                'function' => function ($entry) {
                    return 'Created on '.$entry->created_at;
                },
                'tab' => 'Miscellaneous',
            ],
            [
                'name'  => 'date', // The db column name
                'label' => 'Date', // Table column heading
                'type'  => 'date',
                'tab'   => 'Time and space',
            ],
            [
                'name'  => 'datetime', // The db column name
                'label' => 'Datetime', // Table column heading
                'type'  => 'datetime',
                'tab'   => 'Time and space',
            ],
            [
                'name'  => 'email', // The db column name
                'label' => 'Email Address', // Table column heading
                'type'  => 'email',
                'tab'   => 'Simple',
            ],
            [
                'name'          => 'status',
                'type'          => 'enum',
                'label'         => 'Enum',
                'enum_function' => 'getReadableStatus',
                'tab'           => 'Simple',
            ],
            [
                // show both text and email values in one column
                // this column is here to demo and test the custom searchLogic functionality
                'name'          => 'model_function',
                'label'         => 'Text and Email', // Table column heading
                'type'          => 'model_function',
                'function_name' => 'getTextAndEmailAttribute', // the method in your Model
                'searchLogic'   => function ($query, $column, $searchTerm) {
                    $query->orWhere('email', 'like', '%'.$searchTerm.'%');
                    $query->orWhere('text', 'like', '%'.$searchTerm.'%');
                },
                'escaped'       => true,
                'tab'           => 'Miscellaneous',
            ],
            [
                'name'  => 'number', // The db column name
                'label' => 'Number', // Table column heading
                'type'  => 'number',
                'tab'   => 'Simple',
            ],
            [
                'name'        => 'radio',
                'label'       => 'Radio',
                'type'        => 'radio',
                'options'     => [0 => 'Draft', 1 => 'Published', 2 => 'Other'],
                'tab'         => 'Simple',
            ],
            [   // 1-n relationship
                'label'     => 'Select', // Table column heading
                'type'      => 'select',
                'name'      => 'select', // the column that contains the ID of that connected entity;
                'entity'    => 'category', // the method that defines the relationship in your Model
                'attribute' => 'name', // foreign key attribute that is shown to user
                'model'     => "Backpack\NewsCRUD\app\Models\Category", // foreign key model
                'tab'       => 'Selects',
                'wrapper'   => [
                    'href' => function ($crud, $column, $entry, $related_key) {
                        return backpack_url('category/'.$related_key.'/show');
                    },
                ],
            ],
            [   // select_from_array
                'name'      => 'select_from_array',
                'label'     => 'Select_from_array',
                'type'      => 'select_from_array',
                'options'   => ['one' => 'One', 'two' => 'Two', 'three' => 'Three'],
                'tab'       => 'Selects',
            ],
            [   // select_multiple: n-n relationship (with pivot table)
                'label'     => 'Select_multiple', // Table column heading
                'type'      => 'select_multiple',
                'name'      => 'tags', // the method that defines the relationship in your Model
                'entity'    => 'tags', // the method that defines the relationship in your Model
                'attribute' => 'name', // foreign key attribute that is shown to user
                'model'     => "Backpack\NewsCRUD\app\Models\Tag", // foreign key model
                'tab'       => 'Selects',
                'wrapper'   => [
                    'href' => function ($crud, $column, $entry, $related_key) {
                        return backpack_url('tag/'.$related_key.'/show');
                    },
                ],
            ],
            [   // select_multiple: n-n relationship (with pivot table)
                'label'     => 'Relationship_count', // Table column heading
                'type'      => 'relationship_count',
                'name'      => 'categories', // the method that defines the relationship in your Model
                'entity'    => 'categories', // the method that defines the relationship in your Model
                'tab'       => 'Relationship',
                'wrapper'   => [
                    'href' => function ($crud, $column, $entry, $related_key) {
                        return backpack_url('category');
                    },
                ],
            ],

        ]);

        $this->crud->enableDetailsRow();
        $this->crud->setDetailsRowView('vendor.backpack.crud.details_row.monster');
        $this->crud->enableExportButtons();
        $this->crud->addButtonFromModelFunction('line', 'open_google', 'openGoogle', 'beginning');

        //quickly create a button
        $this->crud->button('email')->stack('top')->view('crud::buttons.quick')->meta([
            'access'  => true,
            'label'   => 'Quick Button',
            'icon'    => 'la la-fast-forward',
            'wrapper' => [
                // 'element' => 'a',
                'href'   => 'https://backpackforlaravel.com/docs/crud-buttons#creating-a-quick-button-1',
                'target' => '_blank',
                'title'  => 'Creating a quick button',
            ],
        ]);

        $this->addCustomCrudFilters();
    }

    public function setupShowOperation()
    {
        // add a widget
        Widget::add([
            'type'       => 'datatable',
            'controller' => 'App\Http\Controllers\Admin\IconCrudController',
            'name'       => 'icon_crud',
            'section'    => 'after_content',
            'content'    => [
                'header' => 'Icons for this monster',
            ],
            'wrapper'    => ['class'=> 'mb-3'],
        ]);

        Widget::add([
            'type'       => 'datatable',
            'controller' => 'App\Http\Controllers\Admin\ProductCrudController',
            'name'       => 'products_datatable',
            'section'    => 'after_content',
            'content'    => [
                'header' => 'Products for this monster',
            ],
            'wrapper'    => ['class'=> 'mb-3'],
            'configure'  => function ($crud, $entry = null) {
                // Customize which columns to show
                $crud->removeAllColumns();
                $crud->addColumn(['name' => 'name', 'label' => 'Product Name']);
                $crud->addColumn(['name' => 'price', 'label' => 'Price']);

                // Get the current monster's products
                if ($entry) {
                    $productIds = $entry->products->pluck('id')->toArray();
                    if (count($productIds) > 0) {
                        // Configure the controller to only show products related to this monster
                        $crud->addClause('whereIn', 'id', $productIds);
                    } else {
                        // Force an empty result when there are no products
                        $crud->addClause('where', 'id', 0); // This will match no products
                    }

                    // Remove buttons that aren't needed for this embedded view

                    // Disable features that aren't needed
                    $crud->denyAccess(['create', 'update', 'delete']);
                    $crud->disableResponsiveTable();
                }
            },
        ]);

        $this->crud->setOperationSetting('tabsEnabled', true);
        $this->setupListOperation();

        $this->crud->set('show.contentClass', 'col-md-12');

        $this->crud->addColumn([   // EasyMDE
            'name'    => 'easymde',
            'key'     => 'easymde_markdown',
            'label'   => 'Markdown'.backpack_pro_badge(),
            'type'    => 'markdown',
            'tab'     => 'WYSIWYG Editors',
        ]);

        $this->crud->addColumn([   // EasyMDE
            'name'    => 'easymde',
            'label'   => 'EasyMDE'.backpack_pro_badge(),
            'type'    => 'easymde',
            'tab'     => 'WYSIWYG Editors',
        ]);

        $this->crud->addColumn([
            'name'    => 'ckeditor',
            'type'    => 'ckeditor',
            'label'   => 'Ckeditor'.backpack_pro_badge(),
            'tab'     => 'WYSIWYG Editors',
        ]);

        $this->crud->addColumn([
            'name'   => 'summernote',
            'type'   => 'summernote',
            'label'  => 'Summernote',
            'tab'    => 'WYSIWYG Editors',
        ]);

        $this->crud->addColumn([
            'name'   => 'tinymce',
            'type'   => 'tinymce',
            'label'  => 'TinyMCE'.backpack_pro_badge(),
            'tab'    => 'WYSIWYG Editors',
        ]);

        $this->crud->addColumn([
            'name'      => 'features',
            'label'     => 'Features'.backpack_pro_badge(),
            'type'      => 'repeatable',
            'fake'      => true,
            'subfields' => [
                [
                    'name'    => 'feature',
                    'wrapper' => [
                        'class' => 'col-md-3',
                    ],
                ],
                [
                    'name'    => 'value',
                    'wrapper' => [
                        'class' => 'col-md-6',
                    ],
                ],
                [
                    'name'    => 'quantity',
                    'type'    => 'number',
                    'wrapper' => [
                        'class' => 'col-md-3',
                    ],
                ],
            ],
            'tab' => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'            => 'table',
            'label'           => 'Table'.backpack_pro_badge(),
            'type'            => 'table',
            'tab'             => 'Miscellaneous',
            'columns'         => [
                'name'  => 'Name',
                'desc'  => 'Description',
                'price' => 'Price',
            ],
        ]);

        $this->crud->addColumn([
            'name'  => 'browse_multiple', // The db column name
            'key'   => 'browse_multiple_array',
            'label' => 'Array'.backpack_pro_badge(), // Table column heading
            'type'  => 'array',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'table', // The db column name
            'key'   => 'table_count',
            'label' => 'Array count'.backpack_pro_badge(), // Table column heading
            'type'  => 'array_count',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'        => 'table', // The db column name
            'key'         => 'multidimensional_array',
            'label'       => 'Multidimensional Array', // Table column heading
            'type'        => 'multidimensional_array',
            'visible_key' => 'name',
            'tab'         => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'          => 'category',
            'key'           => 'category_name',
            'label'         => 'Model Function Attribute', // Table column heading
            'type'          => 'model_function_attribute',
            'function_name' => 'getCategory', // the method in your Model
            'attribute'     => 'name',
            'tab'           => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'number', // The db column name
            'key'   => 'phone',
            'label' => 'Phone', // Table column heading
            'type'  => 'phone',
            'tab'   => 'Simple',
        ]);

        $this->crud->addColumn([
            'name'  => 'switch',
            'label' => 'Switch',
            'type'  => 'switch',
            'tab'   => 'Simple',
        ]);

        $this->crud->addColumn([
            'name'  => 'switch',
            'key'   => 'check',
            'label' => 'Check',
            'type'  => 'check',
            'tab'   => 'Simple',
        ]);

        $this->crud->addColumn([
            'name'  => 'my_custom_html',
            'label' => 'Custom HTML',
            'type'  => 'custom_html',
            'value' => '<span class="text-danger">Something</span>',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'view',
            'label' => 'Custom View',
            'type'  => 'view',
            'view'  => 'crud::columns.custom_view_column_example',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'features',
            'key'   => 'json_features',
            'label' => 'JSON',
            'type'  => 'json',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'      => 'id',
            'type'      => 'number',
            'label'     => '#',
            'orderable' => false,
            'tab'       => 'Simple',
        ]);

        $this->crud->addColumn([
            'name'  => 'dummyproducts',
            'type'  => 'relationship',
            'label' => 'Relationship'.backpack_pro_badge(),
            'tab'   => 'Relationship',
        ]);

        $this->crud->addColumn([
            'name'  => 'address_google',
            'type'  => 'address_google',
            'label' => 'Address Google'.backpack_pro_badge(),
            'tab'   => 'Time and space',
        ]);

        $this->crud->addColumn([
            'name'      => 'roles',
            'type'      => 'checklist',
            'label'     => 'Checklist',
            'entity'    => 'roles',
            'attribute' => 'name',
            'tab'       => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'  => 'color',
            'type'  => 'color',
            'label' => 'Color',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'date_picker',
            'type'  => 'date_picker',
            'label' => 'Date Picker'.backpack_pro_badge(),
            'tab'   => 'Time and space',
        ]);

        $this->crud->addColumn([ // Date_range
            'name'       => 'start_date,end_date', // two columns with a comma
            'label'      => 'Date Range'.backpack_pro_badge(),
            'type'       => 'date_range',
            'tab'        => 'Time and space',
        ]);

        $this->crud->addColumn([
            'name'  => 'datetime_picker',
            'type'  => 'datetime_picker',
            'label' => 'Datetime Picker'.backpack_pro_badge(),
            'tab'   => 'Time and space',
        ]);

        $this->crud->addColumn([
            'name'  => 'location',
            'type'  => 'google_map',
            'label' => 'Google Map'.backpack_pro_badge(),
            'tab'   => 'Time and space',
        ]);

        $this->crud->addColumn([
            'name'    => 'icon_picker',
            'type'    => 'icon_picker',
            'label'   => 'Icon Picker'.backpack_pro_badge(),
            'iconset' => 'fontawesome',
            'tab'     => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'month',
            'type'  => 'month',
            'label' => 'Month',
            'tab'   => 'Time and space',
        ]);

        $this->crud->addColumn([
            'name'  => 'range',
            'type'  => 'range',
            'label' => 'Range',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'select_and_order',
            'type'  => 'select_and_order',
            'label' => 'Select And Order'.backpack_pro_badge(),
            'tab'   => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'   => 'select_grouped_id',
            'type'   => 'select_grouped',
            'label'  => 'Select Grouped',
            'entity' => 'article',
            'tab'    => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'   => 'select2',
            'type'   => 'select2',
            'label'  => 'Select2'.backpack_pro_badge(),
            'entity' => 'categorySelect2',
            'tab'    => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'   => 'select2_from_ajax',
            'type'   => 'select2_from_ajax',
            'label'  => 'Select2 From Ajax'.backpack_pro_badge(),
            'entity' => 'article',
            'tab'    => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'  => 'select2_from_array',
            'type'  => 'select2_from_array',
            'label' => 'Select2 From Array'.backpack_pro_badge(),
            'tab'   => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'   => 'select2_grouped_id',
            'type'   => 'select2_grouped',
            'label'  => 'Select2 Grouped'.backpack_pro_badge(),
            'entity' => 'article',
            'tab'    => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'  => 'categories',
            'type'  => 'select2_multiple',
            'label' => 'Select2 Multiple'.backpack_pro_badge(),
            'tab'   => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'   => 'select2_nested_id',
            'type'   => 'select2_nested',
            'label'  => 'Select2 Nested'.backpack_pro_badge(),
            'entity' => 'category',
            'tab'    => 'Selects',
        ]);

        $this->crud->addColumn([
            'name'  => 'slug',
            'type'  => 'slug',
            'label' => 'Slug'.backpack_pro_badge(),
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'time',
            'type'  => 'time',
            'label' => 'Time',
            'tab'   => 'Time and space',
        ]);

        $this->crud->addColumn([
            'name'   => 'upload',
            'type'   => 'upload',
            'label'  => 'Upload',
            'disk'   => 'uploads',
            'tab'    => 'Uploads',
        ]);

        $this->crud->addColumn([   // Upload
            'name'   => 'upload_multiple',
            'label'  => 'Upload Multiple',
            'type'   => 'upload_multiple',
            'disk'   => 'public',
            'tab'    => 'Uploads',
        ]);

        $this->crud->addColumn([
            'name'  => 'browse',
            'type'  => 'browse',
            'label' => 'Browse'.backpack_pro_badge(),
            'tab'   => 'Uploads',
        ]);

        $this->crud->addColumn([
            'name'  => 'browse_multiple',
            'type'  => 'browse_multiple',
            'label' => 'Browse Multiple'.backpack_pro_badge(),
            'tab'   => 'Uploads',
        ]);

        $this->crud->addColumn([
            'label'        => 'Dropzone'.backpack_pro_badge(),
            'name'         => 'dropzone',
            'type'         => 'dropzone',
            'tab'          => 'Uploads',
        ]);

        $this->crud->addColumn([
            'name'  => 'url',
            'type'  => 'url',
            'label' => 'URL',
            'tab'   => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'week',
            'type'  => 'week',
            'label' => 'Week',
            'tab'   => 'Time and space',
        ]);

        $this->crud->addColumn([
            'name'            => 'video', // The db column name
            'label'           => 'Video'.backpack_pro_badge(), // Table column heading
            'type'            => 'video',
            'youtube_api_key' => env('YOUTUBE_API_KEY'),
            'tab'             => 'Miscellaneous',
        ]);

        $this->crud->addColumn([
            'name'  => 'browse_multiple',
            'key'   => 'browse_multiple_array',
            'type'  => 'array',
            'label' => 'Array'.backpack_pro_badge(),
            'tab'   => 'Miscellaneous',
        ]);
    }

    protected function setupCreateOperation()
    {
        $this->crud->setValidation(StoreRequest::class);
        $this->crud->setOperationSetting('contentClass', 'col-md-12 bold-labels');

        $this->crud->addFields(static::getFieldsArrayForSimpleTab());
        $this->crud->addFields(static::getFieldsArrayForTimeAndSpaceTab());
        $this->crud->addFields(static::getFieldsArrayForSelectsTab());
        $this->crud->addFields(static::getFieldsArrayForRelationshipsTab());
        $this->crud->addFields(static::getFieldsArrayForUploadsTab());
        $this->crud->addFields(static::getFieldsArrayForWysiwygEditorsTab());
        $this->crud->addFields(static::getFieldsArrayForMiscellaneousTab());

        if (env('GOOGLE_PLACES_KEY')) {
            $this->crud->addField([   // Address_google
                'name'          => 'address_google',
                'label'         => 'Address_google '.backpack_pro_badge(),
                'type'          => 'address_google',
                'fake'          => true,
                'store_as_json' => true,
                'tab'           => 'Time and space',
            ]);

            $this->crud->addField([
                'name'    => 'location',
                'label'   => 'Google_map '.backpack_pro_badge(),
                'type'    => 'google_map',
                'fake'    => true,
                'tab'     => 'Time and space',
            ]);
        }

        // if you want to test removeField, uncomment the following line
        // $this->crud->removeField('url');
    }

    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();

        // disable editing the slug when editing
        $this->crud->field('slug')->target('')->attributes(['readonly' => 'readonly']);
    }

    protected function addCustomCrudFilters()
    {
        $this->crud->addFilter(
            [ // add a "simple" filter called Draft
                'type'  => 'simple',
                'name'  => 'checkbox_filter',
                'label' => 'Simple',
            ],
            false, // the simple filter has no values, just the "Draft" label specified above
            function () { // if the filter is active (the GET parameter "draft" exits)
                $this->crud->addClause('where', 'checkbox', '1');
            }
        );

        $this->crud->addFilter([ // dropdown filter
            'name' => 'select_from_array',
            'type' => 'dropdown',
            'label'=> 'Dropdown',
        ], ['one' => 'One', 'two' => 'Two', 'three' => 'Three'], function ($value) {
            // if the filter is active
            $this->crud->addClause('where', 'select_from_array', $value);
        });

        $this->crud->addFilter(
            [ // text filter
                'type'  => 'text',
                'name'  => 'text',
                'label' => 'Text',
            ],
            false,
            function ($value) { // if the filter is active
                $this->crud->addClause('where', 'text', 'LIKE', "%$value%");
            }
        );

        $this->crud->addFilter(
            [
                'name'       => 'number',
                'type'       => 'range',
                'label'      => 'Range',
                'label_from' => 'min value',
                'label_to'   => 'max value',
            ],
            false,
            function ($value) { // if the filter is active
                $range = json_decode($value);
                if ($range->from && $range->to) {
                    $this->crud->addClause('where', 'number', '>=', (float) $range->from);
                    $this->crud->addClause('where', 'number', '<=', (float) $range->to);
                }
            }
        );

        $this->crud->addFilter(
            [ // date filter
                'type'  => 'date',
                'name'  => 'date',
                'label' => 'Date',
            ],
            false,
            function ($value) { // if the filter is active, apply these constraints
                $this->crud->addClause('where', 'date', '=', $value);
            }
        );

        $this->crud->addFilter(
            [ // daterange filter
                'type' => 'date_range',
                'name' => 'date_range',
                'label'=> 'Date range',
                // 'date_range_options' => [
                // 'format' => 'YYYY/MM/DD',
                // 'locale' => ['format' => 'YYYY/MM/DD'],
                // 'showDropdowns' => true,
                // 'showWeekNumbers' => true
                // ]
            ],
            false,
            function ($value) { // if the filter is active, apply these constraints
                $dates = json_decode($value);
                $this->crud->addClause('where', 'date', '>=', $dates->from);
                $this->crud->addClause('where', 'date', '<=', $dates->to);
            }
        );

        $this->crud->addFilter([ // select2 filter
            'name' => 'select2',
            'type' => 'select2',
            'label'=> 'Select2',
        ], function () {
            return \Backpack\NewsCRUD\app\Models\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();
        }, function ($value) { // if the filter is active
            $this->crud->addClause('where', 'select2', $value);
        });

        $this->crud->addFilter([ // select2_multiple filter
            'name' => 'select2_multiple',
            'type' => 'select2_multiple',
            'label'=> 'S2 multiple',
        ], function () {
            return \Backpack\NewsCRUD\app\Models\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();
        }, function ($values) { // if the filter is active
            foreach (json_decode($values) as $key => $value) {
                $this->crud->addClause('orWhere', 'select2', $value);
            }
        });

        $this->crud->addFilter(
            [ // select2_ajax filter
                'name'        => 'select2_from_ajax',
                'type'        => 'select2_ajax',
                'label'       => 'S2 Ajax',
                'placeholder' => 'Pick an article',
                'method'      => 'POST',
            ],
            url('api/article-search'), // the ajax route
            function ($value) { // if the filter is active
                $this->crud->addClause('where', 'select2_from_ajax', $value);
            }
        );
    }

    public static function getFieldsArrayForSimpleTab()
    {
        return [
            [
                'name'              => 'text',
                'label'             => 'Text'.backpack_free_badge(),
                'type'              => 'text',
                'tab'               => 'Simple',
                'wrapperAttributes' => [
                    'class' => 'form-group col-md-4',
                ],
            ],
            [
                'name'              => 'slug',
                'label'             => 'Slug'.backpack_pro_badge(),
                'type'              => 'slug',
                'target'            => 'text',
                'tab'               => 'Simple',
                'fake'              => true,
                'wrapperAttributes' => [
                    'class' => 'form-group col-md-4',
                ],
            ],
            [
                'name'              => 'email',
                'label'             => 'Email'.backpack_free_badge(),
                'type'              => 'email',
                'tab'               => 'Simple',
                'wrapperAttributes' => [
                    'class' => 'form-group col-md-4',
                ],
            ],
            [   // Textarea
                'name'  => 'textarea',
                'label' => 'Textarea'.backpack_free_badge(),
                'type'  => 'textarea',
                'tab'   => 'Simple',
            ],
            [   // Number
                'name'              => 'number',
                'label'             => 'Number'.backpack_free_badge(),
                'type'              => 'number',
                'tab'               => 'Simple',
                'wrapperAttributes' => ['class' => 'form-group col-md-3'],
            ],
            [   // Number
                'name'              => 'float',
                'label'             => 'Float'.backpack_free_badge(),
                'type'              => 'number',
                'attributes'        => ['step' => 'any'], // allow decimals
                'tab'               => 'Simple',
                'wrapperAttributes' => ['class' => 'form-group col-md-3'],
            ],
            [   // Number
                'name'              => 'number_with_prefix',
                'label'             => 'Number with prefix'.backpack_free_badge(),
                'type'              => 'number',
                'prefix'            => '$',
                'fake'              => true,
                'store_in'          => 'extras',
                'tab'               => 'Simple',
                'wrapperAttributes' => ['class' => 'form-group col-md-3'],
            ],
            [   // Number
                'name'              => 'number_with_suffix',
                'label'             => 'Number with suffix'.backpack_free_badge(),
                'type'              => 'number',
                'suffix'            => '.00',
                'fake'              => true,
                'store_in'          => 'extras',
                'tab'               => 'Simple',
                'wrapperAttributes' => ['class' => 'form-group col-md-3'],
            ],
            [   // Number
                'name'              => 'text_with_both_prefix_and_suffix',
                'label'             => 'Text with both prefix and suffix'.backpack_free_badge(),
                'type'              => 'number',
                'prefix'            => '@',
                'suffix'            => "<i class='fa fa-home'></i>",
                'fake'              => true,
                'store_in'          => 'extras',
                'tab'               => 'Simple',
                'wrapperAttributes' => ['class' => 'form-group col-md-4'],
            ],
            [   // Phone
                'name'              => 'phone',
                'label'             => 'Phone'.backpack_pro_badge(),
                'type'              => 'phone',
                'fake'              => true,
                'store_in'          => 'extras',
                'tab'               => 'Simple',
                'wrapperAttributes' => ['class' => 'form-group col-md-4'],
            ],
            [   // Password
                'name'              => 'password',
                'label'             => 'Password'.backpack_free_badge(),
                'type'              => 'password',
                'tab'               => 'Simple',
                'wrapperAttributes' => ['class' => 'form-group col-md-4'],
            ],
            [
                'name'    => 'radio', // the name of the db column
                'label'   => 'Status (radio)'.backpack_free_badge(), // the input label
                'type'    => 'radio',
                'options' => [ // the key will be stored in the db, the value will be shown as label;
                    0 => 'Draft',
                    1 => 'Published',
                    2 => 'Other',
                ],
                // optional
                'inline' => true, // show the radios all on the same line?
                'tab'    => 'Simple',
            ],
            [
                'name'  => 'status',
                'label' => 'Status (enum)'.backpack_free_badge(),
                'type'  => 'enum',
                'tab'   => 'Simple',
            ],
            [   // Checkbox
                'name'  => 'checkbox',
                'label' => 'I have not read the terms and conditions and I never will (checkbox)'.backpack_free_badge(),
                'type'  => 'checkbox',
                'tab'   => 'Simple',
            ],
            [   // Switch
                'name'  => 'switch',
                'label' => 'I have not read the terms and conditions and I never will (switch)'.backpack_free_badge(),
                'type'  => 'switch',
                'tab'   => 'Simple',
                'fake'  => true,
            ],
            [   // Hidden
                'name'    => 'hidden',
                'type'    => 'hidden',
                'default' => '6318',
                'tab'     => 'Simple',
            ],
        ];
    }

    public static function getFieldsArrayForTimeAndSpaceTab()
    {
        // -----------------
        // DATE, TIME AND SPACE tab
        // -----------------

        $fields = [
            [   // Time
                'name'              => 'time',
                'label'             => 'Time'.backpack_free_badge(),
                'type'              => 'time',
                'wrapperAttributes' => ['class' => 'form-group col-md-4'],
                'tab'               => 'Time and space',
                'fake'              => true,
            ],
            [   // Month
                'name'              => 'week',
                'label'             => 'Week'.backpack_free_badge(),
                'type'              => 'week',
                'wrapperAttributes' => ['class' => 'form-group col-md-4'],
                'tab'               => 'Time and space',
            ],
            [   // Month
                'name'              => 'month',
                'label'             => 'Month'.backpack_free_badge(),
                'type'              => 'month',
                'wrapperAttributes' => ['class' => 'form-group col-md-4'],
                'tab'               => 'Time and space',
            ],
            [   // Date
                'name'       => 'date',
                'label'      => 'Date (HTML5 spec)'.backpack_free_badge(),
                'type'       => 'date',
                'attributes' => [
                    'pattern'     => '[0-9]{4}-[0-9]{2}-[0-9]{2}',
                    'placeholder' => 'yyyy-mm-dd',
                ],
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
                'tab'               => 'Time and space',
            ],
            [   // Date
                // <span class="badge badge-pill bg-primary">PRO</span>
                'name'  => 'date_picker',
                'label' => 'Date picker (jQuery plugin)'.backpack_pro_badge(),
                'type'  => 'date_picker',
                // optional:
                'date_picker_options' => [
                    'todayBtn' => true,
                    'format'   => 'dd-mm-yyyy',
                    'language' => 'en',
                ],
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
                'tab'               => 'Time and space',
            ],
            [   // DateTime
                'name'              => 'datetime',
                'label'             => 'Datetime (HTML5 spec)'.backpack_free_badge(),
                'type'              => 'datetime',
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
                'tab'               => 'Time and space',
            ],
            [   // DateTime
                'name'  => 'datetime_picker',
                'label' => 'Datetime picker (jQuery plugin)'.backpack_pro_badge(),
                'type'  => 'datetime_picker',
                // optional:
                'datetime_picker_options' => [
                    'format'   => 'DD/MM/YYYY HH:mm',
                    'language' => 'en',
                ],
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
                'tab'               => 'Time and space',
            ],
            [ // Date_range
                'name'       => 'start_date,end_date', // a unique name for this field
                'label'      => 'Date Range'.backpack_pro_badge(),
                'type'       => 'date_range',
                'default'    => ['2020-03-28 01:01', '2020-04-05 02:00'],
                // OPTIONALS
                'date_range_options' => [ // options sent to daterangepicker.js
                    'timePicker' => true,
                    'locale'     => ['format' => 'DD/MM/YYYY HH:mm'],
                ],
                'tab' => 'Time and space',
            ],
        ];

        if (env('GOOGLE_PLACES_KEY')) {
            $fields[] = [   // Address_google
                'name'          => 'address_google',
                'label'         => 'Address_google '.backpack_pro_badge(),
                'type'          => 'address_google',
                'fake'          => true,
                'store_as_json' => true,
                'tab'           => 'Time and space',
            ];
        }

        return $fields;
    }

    public static function getFieldsArrayForRelationshipsTab()
    {
        // -----------------
        // RELATIONSHIPS tab
        // -----------------

        return [
            [   // CustomHTML
                'name'  => 'relationship_heading',
                'type'  => 'custom_html',
                'value' => "<p class='text-muted mb-0'>All the examples in this tab <strong>relationship</strong> field type. This field type changes its interface depending on what relationship it is used on, and whether or not you've defined 'subfields' for it. So we've provided examples for each relationship type. Then examples for a few <i>extra features</i> of the repeatable field.</p>",
                'tab'   => 'Relationship',
            ],
            [   // CustomHTML
                'name'  => 'relationship_direct_relationships',
                'type'  => 'custom_html',
                'value' => '<h5 class="mb-0 mt-3 text-primary">Direct Relationships '.backpack_pro_badge().'</h5>',
                'tab'   => 'Relationship',
            ],

            // --------------------
            // Direct relationships
            // --------------------

            [
                'name'    => 'address.street',
                'label'   => 'HasOne (1-1) <small>towards an attribute on related model</small>',
                'wrapper' => [
                    'class' => 'form-group col-md-6',
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'     => 'address.country',
                'label'    => 'HasOne (1-1) <small>towards a relationship on related model</small>',
                'wrapper'  => [
                    'class' => 'form-group col-md-6',
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'              => 'categoryRelationship',
                'label'             => 'BelongsTo (n-1)',
                'tab'               => 'Relationship',
                'wrapper'           => [
                    'class' => 'form-group col-md-6',
                ],
            ],
            [
                'name'    => 'postalboxer',
                'label'   => 'HasMany (1-n)',
                'tab'     => 'Relationship',
                'wrapper' => [
                    'class' => 'form-group col-md-6',
                ],
            ],
            [
                'name'    => 'countries',
                'label'   => 'BelongsToMany (n-n)',
                'tab'     => 'Relationship',
            ],

            // -----------------------------------
            // Direct relationships with subfields
            // -----------------------------------

            [   // CustomHTML
                'name'  => 'relationship_direct_relationships_with_subfields',
                'type'  => 'custom_html',
                'value' => '<h5 class="mb-0 mt-4 text-primary">Direct Relationships + Subfields '.backpack_pro_badge().'</h5>',
                'tab'   => 'Relationship',
            ],
            [
                'name'      => 'wish',
                'label'     => 'HasOne (1-1) <small>+ subfields</small>'.backpack_new_badge(),
                'subfields' => [
                    [
                        'name' => 'country',
                    ],
                    [
                        'name'    => 'body',
                        'wrapper' => [
                            'class' => 'text-danger',
                        ],
                    ],
                    [
                        'name' => 'universes',
                    ],
                ],
                'wrapper' => [
                    'class' => 'form-group col-md-4',
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'      => 'postalboxes',
                'label'     => 'HasMany (1-n) <small>+ subfields</small>'.backpack_new_badge(),
                'subfields' => [
                    [
                        'name' => 'postal_name',
                        'type' => 'text',
                    ],
                ],
                'wrapper' => [
                    'class' => 'form-group col-md-4',
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'    => 'dummyproducts',
                'label'   => 'BelongsToMany (n-n) <small>+ subfields for pivot table</small>'.backpack_new_badge(),
                'wrapper' => [
                    'class' => 'form-group col-md-4',
                ],
                'pivotSelect' => [
                    'wrapper' => [
                        'class' => 'form-group col-md-6',
                    ],
                ],
                'subfields' => [
                    [
                        'name'    => 'notes',
                        'type'    => 'text',
                        'wrapper' => [
                            'class' => 'form-group col-md-6',
                        ],
                    ],
                ],
                'tab'   => 'Relationship',
            ],

            // -------------------------
            // Polymorphic Relationships
            // -------------------------

            [   // CustomHTML
                'name'  => 'relationship_polymorphic_relationships',
                'type'  => 'custom_html',
                'value' => '<hr class="mt-5 mb-5"><h5 class="mb-0 mt-3 text-primary">Polymorphic Relationships '.backpack_pro_badge().'</h5>',
                'tab'   => 'Relationship',
            ],
            [
                'name'    => 'sentiment.text',
                'label'   => 'MorphOne (1-1 polymorphic) <small>towards an attribute</small>'.backpack_new_badge(),
                'type'    => 'relationship',
                'wrapper' => [
                    'class' => 'form-group col-md-6',
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'    => 'sentiment.user',
                'label'   => 'MorphOne (1-1 polymorphic) <small>towards a relation</small>'.backpack_new_badge(),
                'wrapper' => [
                    'class' => 'form-group col-md-6',
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'    => 'universes',
                'label'   => 'MorphMany (1-n)'.backpack_new_badge(),
                'wrapper' => [
                    'class' => 'form-group col-md-6',
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'    => 'bills',
                'label'   => 'MorphToMany (n-n)'.backpack_new_badge(),
                'wrapper' => [
                    'class' => 'form-group col-md-6',
                ],
                'tab'   => 'Relationship',
            ],

            // -------------------------------------
            // Polymorphic Relationships + Subfields
            // -------------------------------------

            [   // CustomHTML
                'name'  => 'relationship_polymorphic_relationships_with_subfields',
                'type'  => 'custom_html',
                'value' => '<hr class="mt-5 mb-5"><h5 class="mb-0 mt-3 text-primary">Polymorphic Relationships + Subfields  '.backpack_pro_badge().'</h5>',
                'tab'   => 'Relationship',
            ],

            [
                'name'    => 'ball',
                'label'   => 'MorphOne (1-1 polymorphic) <small>+ subfields</small>'.backpack_new_badge(),
                'wrapper' => [
                    'class' => 'form-group col-md-4',
                ],
                'subfields' => [
                    [
                        'name'    => 'name',
                        'wrapper' => [
                            'class' => 'form-group col-md-6',
                        ],
                    ],
                    [
                        'name'    => 'country_id',
                        'entity'  => 'country',
                        'type'    => 'relationship',
                        'wrapper' => [
                            'class' => 'form-group col-md-6',
                        ],

                    ],
                ],
                'tab'   => 'Relationship',
            ],
            [
                'name'    => 'stars',
                'label'   => 'MorphMany (1-n) <small>+ subfields</small>'.backpack_new_badge(),
                'wrapper' => [
                    'class' => 'form-group col-md-4',
                ],
                'subfields' => [
                    [
                        'name' => 'title',
                        'type' => 'text',
                    ],
                ],

                'tab'   => 'Relationship',
            ],
            [
                'name'    => 'recommends',
                'label'   => 'MorphToMany (n-n) <small>+ subfields for pivot table</small>'.backpack_new_badge(),
                'wrapper' => [
                    'class' => 'form-group col-md-4',
                ],
                'subfields' => [
                    [
                        'name' => 'text',
                        'type' => 'text',
                    ],
                ],
                'tab'   => 'Relationship',
            ],

            // ----------------------------
            // Relationships Extra Features
            // ----------------------------

            [
                'name'  => 'relationship_extra_features',
                'type'  => 'custom_html',
                'value' => '<hr class="mt-5 mb-5"><h5 class="mb-0 mt-3 text-primary">Extra Features  '.backpack_pro_badge().'</a></h5>',
                'tab'   => 'Relationship',
            ],

            [    // Relationship - everything is explicitly defined
                'label'         => 'BelongsTo + InlineCreate',
                'type'          => 'relationship',
                'name'          => 'fallback_icon',
                'fake'          => true,
                'entity'        => 'icon',
                'attribute'     => 'name',
                'tab'           => 'Relationship',
                'inline_create' => true,
                // 'data_source' => backpack_url('monster/fetch/icon'),
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [    // Relationship
                'label'     => 'BelongsToMany + AJAX + InlineCreate',
                'type'      => 'relationship',
                'name'      => 'products',
                'entity'    => 'products',
                // 'attribute' => 'name',
                'tab'       => 'Relationship',
                'ajax'      => true,
                // 'inline_create' => true, // TODO: make it work like this too
                'inline_create'     => [
                    'entity'      => 'product',
                    'modal_class' => 'modal-dialog modal-xl',
                ],
                'data_source'       => backpack_url('monster/fetch/product'),
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [    // Relationship - nothing is explicitly defined, not even the field type
                'label'         => 'Relationship (all field attributes are guessed)',
                'name'          => 'icondummy',
                'tab'           => 'Relationship',
                // 'data_source' => backpack_url('monster/fetch/icon'),
                'wrapperAttributes' => ['class' => 'form-group col-md-12'],
            ],
        ];
    }

    public static function getFieldsArrayForSelectsTab()
    {
        // -----------------
        // SELECTS tab
        // -----------------

        return [
            [ // CustomHTML
                'name'  => 'selects_no_relationship_heading',
                'type'  => 'custom_html',
                'value' => '<h5 class="mb-0 text-primary">No Relationship</h5>',
                'tab'   => 'Selects',
            ],

            [ // select_from_array
                'name'              => 'select_from_array',
                'label'             => 'Select_from_array (no relationship, 1-1 or 1-n)'.backpack_free_badge(),
                'type'              => 'select_from_array',
                'options'           => ['one' => 'One', 'two' => 'Two', 'three' => 'Three'],
                'allows_null'       => true,
                'tab'               => 'Selects',
                'allows_multiple'   => false, // OPTIONAL; needs you to cast this to array in your model;
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [ // select2_from_array
                'name'              => 'select2_from_array',
                'label'             => 'Select2_from_array (no relationship, 1-1 or 1-n)'.backpack_pro_badge(),
                'type'              => 'select2_from_array',
                'options'           => ['one' => 'One', 'two' => 'Two', 'three' => 'Three'],
                'allows_null'       => true,
                'tab'               => 'Selects',
                'allows_multiple'   => false, // OPTIONAL; needs you to cast this to array in your model;
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [ // select_and_order
                'name'    => 'select_and_order',
                'label'   => 'Select_and_order'.backpack_pro_badge(),
                'type'    => 'select_and_order',
                'options' => [
                    1 => 'Option 1',
                    2 => 'Option 2',
                    3 => 'Option 3',
                    4 => 'Option 4',
                    5 => 'Option 5',
                    6 => 'Option 6',
                    7 => 'Option 7',
                    8 => 'Option 8',
                    9 => 'Option 9',
                ],
                'fake' => true,
                'tab'  => 'Selects',
            ],

            // -----------------
            // 1-n relationships
            // -----------------

            [ // CustomHTML
                'name'  => 'selects_1_n_heading',
                'type'  => 'custom_html',
                'value' => '<h5 class="mb-0 text-primary">1-n Relationship (belongsTo, morphTo)</h5>',
                'tab'   => 'Selects',
            ],
            [   // select
                'label'                      => 'Select'.backpack_free_badge(),
                'type'                       => 'select', //https://github.com/Laravel-Backpack/CRUD/issues/502
                'name'                       => 'select',
                'entity'                     => 'category',
                'attribute'                  => 'name',
                'model'                      => 'Backpack\NewsCRUD\app\Models\Category',
                'fake'                       => true,
                'tab'                        => 'Selects',
                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],
            ],
            [   // select_grouped
                'label'                      => 'Select_grouped'.backpack_free_badge(),
                'type'                       => 'select_grouped', //https://github.com/Laravel-Backpack/CRUD/issues/502
                'name'                       => 'select_grouped_id',
                'fake'                       => true,
                'entity'                     => 'article',
                'model'                      => 'Backpack\NewsCRUD\app\Models\Article',
                'attribute'                  => 'title',
                'group_by'                   => 'category', // the relationship to entity you want to use for grouping
                'group_by_attribute'         => 'name', // the attribute on related model, that you want shown
                'group_by_relationship_back' => 'articles', // relationship from related model back to this model
                'tab'                        => 'Selects',
                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],
            ],
            [   // select2_grouped
                'label'                      => 'Select2_grouped'.backpack_pro_badge(),
                'type'                       => 'select2_grouped', //https://github.com/Laravel-Backpack/CRUD/issues/502
                'name'                       => 'select2_grouped_id',
                'fake'                       => true,
                'entity'                     => 'article',
                'model'                      => 'Backpack\NewsCRUD\app\Models\Article',
                'attribute'                  => 'title',
                'group_by'                   => 'category', // the relationship to entity you want to use for grouping
                'group_by_attribute'         => 'name', // the attribute on related model, that you want shown
                'group_by_relationship_back' => 'articles', // relationship from related model back to this model
                'tab'                        => 'Selects',
                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],
            ],
            [    // SELECT2
                'label'             => 'Select2'.backpack_pro_badge(),
                'type'              => 'select2',
                'name'              => 'select2',
                'entity'            => 'categorySelect2',
                'attribute'         => 'name',
                'model'             => "Backpack\NewsCRUD\app\Models\Category",
                'tab'               => 'Selects',
                'wrapperAttributes' => ['class' => 'form-group col-md-4'],
            ],
            [   // select2_nested
                'name'                       => 'select2_nested_id',
                'label'                      => 'Select2_nested'.backpack_pro_badge(),
                'type'                       => 'select2_nested',
                'fake'                       => true,
                'entity'                     => 'category', // the method that defines the relationship in your Model
                'attribute'                  => 'name', // foreign key attribute that is shown to user
                'model'                      => "Backpack\NewsCRUD\app\Models\Category", // force foreign key model
                'tab'                        => 'Selects',
                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],
            ],
            [ // select2_from_ajax: 1-n relationship
                'label'                => 'Select2_from_ajax'.backpack_pro_badge(), // Table column heading
                'type'                 => 'select2_from_ajax',
                'name'                 => 'select2_from_ajax', // the column that contains the ID of that connected entity;
                'entity'               => 'article', // the method that defines the relationship in your Model
                'attribute'            => 'title', // foreign key attribute that is shown to user
                'model'                => "Backpack\NewsCRUD\app\Models\Article", // foreign key model
                'data_source'          => url('api/article'), // url to controller search function (with /{id} should return model)
                'method'               => 'POST', // route method, either GET or POST
                'placeholder'          => 'Select an article', // placeholder for the select
                'minimum_input_length' => 2, // minimum characters to type before querying results
                'tab'                  => 'Selects',
                'wrapperAttributes'    => ['class' => 'form-group col-md-4'],
            ],

            [ // CustomHTML
                'name'  => 'selects_n_n_heading',
                'type'  => 'custom_html',
                'value' => '<h5 class="mb-0 text-primary mt-3">n-n Relationship (belongsToMany, morphToMany)</h5>',
                'tab'   => 'Selects',
            ],
            [
                'label'     => 'Checklist'.backpack_free_badge(),
                'type'      => 'checklist',
                'name'      => 'roles',
                'entity'    => 'roles',
                'attribute' => 'name',
                'model'     => "Backpack\PermissionManager\app\Models\Role",
                'pivot'     => true,
                'tab'       => 'Selects',
            ],
            [       // Select_Multiple = n-n relationship
                'label'     => 'Select_multiple'.backpack_free_badge(),
                'type'      => 'select_multiple',
                'name'      => 'tags', // the method that defines the relationship in your Model
                'entity'    => 'tags', // the method that defines the relationship in your Model
                'attribute' => 'name', // foreign key attribute that is shown to user
                'model'     => "Backpack\NewsCRUD\app\Models\Tag", // foreign key model
                'pivot'     => true, // on create&update, do you need to add/delete pivot table entries?
                'tab'       => 'Selects',
                // 'wrapperAttributes' => ['class' => 'form-group col-md-12'],
            ],
            [       // Select2Multiple = n-n relationship (with pivot table)
                'label'             => 'Select2_multiple'.backpack_pro_badge(),
                'type'              => 'select2_multiple',
                'name'              => 'categories', // the method that defines the relationship in your Model
                'entity'            => 'categories', // the method that defines the relationship in your Model
                'attribute'         => 'name', // foreign key attribute that is shown to user
                'model'             => "Backpack\NewsCRUD\app\Models\Category", // foreign key model
                'allows_null'       => true,
                'pivot'             => true, // on create&update, do you need to add/delete pivot table entries?
                'tab'               => 'Selects',
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [ // Select2_from_ajax_multiple: n-n relationship with pivot table
                'label'                => 'Select2_from_ajax_multiple'.backpack_pro_badge(), // Table column heading
                'type'                 => 'select2_from_ajax_multiple',
                'name'                 => 'articles', // the column that contains the ID of that connected entity;
                'entity'               => 'articles', // the method that defines the relationship in your Model
                'attribute'            => 'title', // foreign key attribute that is shown to user
                'model'                => "Backpack\NewsCRUD\app\Models\Article", // foreign key model
                'data_source'          => url('api/article'), // url to controller search function (with /{id} should return model)
                'method'               => 'POST', // route method, either GET or POST
                'placeholder'          => 'Select one or more articles', // placeholder for the select
                'minimum_input_length' => 2, // minimum characters to type before querying results
                'pivot'                => true, // on create&update, do you need to add/delete pivot table entries?
                'tab'                  => 'Selects',
                'wrapperAttributes'    => ['class' => 'form-group col-md-6'],
            ],
            [ // Select2_json_from_api paginated
                'label'                  => 'Select2_json_from_api (paginated)'.backpack_pro_badge(), // Table column heading
                'type'                   => 'select2_json_from_api',
                'name'                   => 'select2_json_from_api', // the column that contains the ID of that connected entity;
                'attribute'              => 'title', // foreign key attribute that is shown to user
                'data_source'            => backpack_url('monster/fetch/paginated-types'), // url to controller search function (with /{id} should return model)
                'method'                 => 'POST', // route method, either GET or POST
                'placeholder'            => 'Select one or more types', // placeholder for the select
                'minimum_input_length'   => 0, // minimum characters to type before querying results
                'tab'                    => 'Selects',
                'wrapperAttributes'      => ['class' => 'form-group col-md-6'],
                'attributes_to_store'    => ['id', 'title', 'location'],
                'multiple'               => true,
            ],
            [ // Select2_json_from_api not paginated
                'label'                => 'Select2_json_from_api (simple array)'.backpack_pro_badge(), // Table column heading
                'type'                 => 'select2_json_from_api',
                'name'                 => 'select2_json_from_api_simple', // the column that contains the ID of that connected entity;
                'data_source'          => backpack_url('monster/fetch/simple-types'), // url to controller search function (with /{id} should return model)
                'method'               => 'POST', // route method, either GET or POST
                'placeholder'          => 'Select one or more types', // placeholder for the select
                'minimum_input_length' => 0, // minimum characters to type before querying results
                'tab'                  => 'Selects',
                'wrapperAttributes'    => ['class' => 'form-group col-md-6'],
                'multiple'             => true,
            ],
        ];
    }

    public static function getFieldsArrayForUploadsTab()
    {
        // -----------------
        // UPLOADS tab
        // -----------------

        $fields = [];

        if (app('env') == 'production') {
            $fields[] = [   // CustomHTML
                'name'      => 'separator',
                'type'      => 'custom_html',
                'value'     => '<p><small><strong>Note: </strong>In the online demo we\'ve restricted the upload and media library fields a lot, or hidden them entirely. To test them out, you can <a target="_blank" href="https://backpackforlaravel.com/docs/demo">download and install this demo admin panel</a> in your local environment.</small></p>',
                'tab'       => 'Uploads',
            ];
        }

        $fields[] = [   // Browse
            'name'       => 'browse',
            'label'      => 'Browse (using elFinder)'.backpack_pro_badge(),
            'type'       => 'browse',
            'tab'        => 'Uploads',
            'mime_types' => ['image/png', 'image/jpeg'], // visible mime prefixes; ex. ['image'] or ['application/pdf']
        ];

        $fields[] = [   // Browse multiple
            'name'     => 'browse_multiple',
            'label'    => 'Browse multiple'.backpack_pro_badge(),
            'type'     => 'browse_multiple',
            'tab'      => 'Uploads',
            'sortable' => true,
            // 'multiple' => true, // enable/disable the multiple selection functionality
            // 'mime_types' => null, // visible mime prefixes; ex. ['image'] or ['application/pdf']
        ];

        $fields[] = [   // Upload
            'name'   => 'upload',
            'label'  => 'Upload'.backpack_free_badge(),
            'type'   => 'upload',
            'upload' => true,
            'disk'   => 'uploads', // if you store files in the /public folder, please ommit this; if you store them in /storage or S3, please specify it;
            // optional:
            // 'temporary' => 10 // if using a service, such as S3, that requires you to make temporary URL's this will make a URL that is valid for the number of minutes specified
            'tab' => 'Uploads',
        ];

        $fields[] = [   // Upload
            'name'   => 'upload_multiple',
            'label'  => 'Upload Multiple'.backpack_free_badge(),
            'type'   => 'upload_multiple',
            'upload' => true,
            // 'disk' => 'uploads', // if you store files in the /public folder, please ommit this; if you store them in /storage or S3, please specify it;
            // optional:
            // 'temporary' => 10 // if using a service, such as S3, that requires you to make temporary URL's this will make a URL that is valid for the number of minutes specified
            'tab' => 'Uploads',
        ];

        $fields[] = [ // base64_image
            'label'        => 'Base64 Image - includes cropping'.backpack_pro_badge(),
            'name'         => 'base64_image',
            'filename'     => null, // set to null if not needed
            'type'         => 'base64_image',
            'aspect_ratio' => 1, // set to 0 to allow any aspect ratio
            'crop'         => true, // set to true to allow cropping, false to disable
            'src'          => null, // null to read straight from DB, otherwise set to model accessor function
            'tab'          => 'Uploads',
        ];

        $fields[] = [ // image
            'label'        => 'Image - includes cropping'.backpack_pro_badge(),
            'name'         => 'image',
            'type'         => 'image',
            'upload'       => true,
            'crop'         => true, // set to true to allow cropping, false to disable
            'aspect_ratio' => 1, // ommit or set to 0 to allow any aspect ratio
            // 'disk' => config('backpack.base.root_disk_name'), // in case you need to show images from a different disk
            // 'prefix' => 'uploads/images/profile_pictures/' // in case your db value is only the file name (no path), you can use this to prepend your path to the image src (in HTML), before it's shown to the user;
            'tab' => 'Uploads',
        ];

        $fields[] = [
            'label'        => 'Dropzone - drag&drop '.backpack_pro_badge(),
            'name'         => 'dropzone',
            'type'         => 'dropzone',
            'tab'          => 'Uploads',
            'withFiles'    => true,
        ];

        return $fields;
    }

    public static function getFieldsArrayForWysiwygEditorsTab()
    {
        // -----------------
        // BIG TEXTS tab
        // -----------------

        return [
            [   // EasyMDE
                'name'  => 'easymde',
                'label' => 'EasyMDE - markdown editor'.backpack_pro_badge(),
                'type'  => 'easymde',
                'tab'   => 'WYSIWYG Editors',
            ],
            [   // Summernote
                'name'      => 'summernote',
                'label'     => 'Summernote editor'.backpack_free_badge(),
                'type'      => 'summernote',
                'tab'       => 'WYSIWYG Editors',
                'withFiles' => true,
            ],
            [   // CKEditor
                'name'  => 'ckeditor',
                'label' => 'CKEditor - also called the WYSIWYG field'.backpack_pro_badge(),
                'type'  => 'ckeditor',
                'tab'   => 'WYSIWYG Editors',
            ],
            [   // TinyMCE
                'name'  => 'tinymce',
                'label' => 'TinyMCE'.backpack_pro_badge(),
                'type'  => 'tinymce',
                'tab'   => 'WYSIWYG Editors',
            ],
        ];
    }

    public static function getFieldsArrayForMiscellaneousTab()
    {
        // -----------------
        // MISCELLANEOUS tab
        // -----------------

        return [
            [   // Color
                'name'  => 'color',
                'label' => 'Color picker (HTML5 spec)'.backpack_free_badge(),
                'type'  => 'color',
                // 'wrapperAttributes' => ['class' => 'col-md-6'],
                'tab'               => 'Miscellaneous',
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [   // Video
                'name'              => 'video',
                'label'             => 'Video - link to video file on Youtube or Vimeo'.backpack_pro_badge(),
                'type'              => 'video',
                'tab'               => 'Miscellaneous',
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [   // Range
                'name'  => 'range',
                'label' => 'Range'.backpack_free_badge(),
                'type'  => 'range',
                //optional
                'attributes' => [
                    'min' => 0,
                    'max' => 10,
                ],
                'tab'               => 'Miscellaneous',
                'wrapperAttributes' => ['class' => 'form-group col-md-6'],
            ],
            [   // Icon picker
                'label'             => 'Icon Picker'.backpack_pro_badge(),
                'name'              => 'icon_picker',
                'type'              => 'icon_picker',
                'iconset'           => 'fontawesome', // options: fontawesome, glyphicon, ionicon, weathericon, mapicon, octicon, typicon, elusiveicon, materialdesign
                'tab'               => 'Miscellaneous',
                'wrapperAttributes' => ['class' => 'form-group col-md-2'],
            ],
            [ // Table
                'name'            => 'table',
                'label'           => 'Table'.backpack_pro_badge(),
                'type'            => 'table',
                'entity_singular' => 'subentry', // used on the "Add X" button
                'columns'         => [
                    'name'  => 'Name',
                    'desc'  => 'Description',
                    'price' => 'Price',
                ],
                'max' => 5, // maximum rows allowed in the table
                'min' => 0, // minimum rows allowed in the table
                'tab' => 'Miscellaneous',
            ],
            [ // Table
                'name'            => 'fake_table',
                'label'           => 'Fake Table'.backpack_pro_badge(),
                'type'            => 'table',
                'entity_singular' => 'subentry', // used on the "Add X" button
                'columns'         => [
                    'name'  => 'Name',
                    'desc'  => 'Description',
                    'price' => 'Price',
                ],
                'fake' => true,
                'max'  => 5, // maximum rows allowed in the table
                'min'  => 0, // minimum rows allowed in the table
                'tab'  => 'Miscellaneous',
            ],
            [
                'name'  => 'url',
                'type'  => 'url',
                'label' => 'URL'.backpack_free_badge(),
                'tab'   => 'Miscellaneous',
            ],
            [
                'name'      => 'features',
                'label'     => 'Features'.backpack_pro_badge(),
                'type'      => 'repeatable',
                'fake'      => true,
                'subfields' => [
                    [
                        'name'    => 'feature',
                        'wrapper' => [
                            'class' => 'col-md-3',
                        ],
                    ],
                    [
                        'name'    => 'value',
                        'wrapper' => [
                            'class' => 'col-md-6',
                        ],
                    ],
                    [
                        'name'    => 'quantity',
                        'type'    => 'number',
                        'wrapper' => [
                            'class' => 'col-md-3',
                        ],
                    ],
                ],
                'tab' => 'Miscellaneous',
            ],
        ];
    }

    public function ajaxUpload()
    {
        if (app('env') === 'production') {
            return response()->json(['errors' => [
                'dropzone'   => ['Uploads are disabled in production'],
                'easymde'    => ['Uploads are disabled in production'],
                'summernote' => ['Uploads are disabled in production'],
            ],
            ], 500);
        }

        return $this->traitAjaxUpload();
    }

    protected function setupReportOperation()
    {
        // --- Override the content class for a narrower layout ---
        $this->crud->setOperationSetting('contentClass', 'col-md-10 mx-auto');

        // --- Remove the interval filter (not needed for stat-heavy reports) ---
        $this->crud->removeFilter('report_interval');

        // --- Stat: total monsters (count + previous period comparison + custom wrapper) ---
        $this->addMetric('total_monsters', [
            'type'      => 'stat',
            'label'     => 'Total Monsters',
            'aggregate' => 'count',
            'period'    => 'created_at',
            'compare'   => 'previous_period',
            'wrapper'   => ['class' => 'col-md-3'],
        ]);

        // --- Stat: query scope to filter rows ---
        $this->addMetric('working_monsters', [
            'type'      => 'stat',
            'label'     => 'Working',
            'aggregate' => 'count',
            'period'    => 'created_at',
            'query'     => fn ($q) => $q->where('status', 'working'),
            'wrapper'   => ['class' => 'col-md-3'],
        ]);

        // --- Stat: min aggregate ---
        $this->addMetric('min_number', [
            'type'      => 'stat',
            'label'     => 'Min Number',
            'column'    => 'number',
            'aggregate' => 'min',
            'wrapper'   => ['class' => 'col-md-3'],
        ]);

        // --- Stat: max aggregate ---
        $this->addMetric('max_number', [
            'type'      => 'stat',
            'label'     => 'Max Number',
            'column'    => 'number',
            'aggregate' => 'max',
            'wrapper'   => ['class' => 'col-md-3'],
        ]);

        // --- Demonstrate removeMetric (add then remove) ---
        $this->addMetric('temp_metric', [
            'type'  => 'stat',
            'label' => 'Should Not Appear',
        ]);
        $this->removeMetric('temp_metric');

        // --- Line chart: full width ---
        $this->addMetric('monsters_over_time', [
            'type'      => 'line',
            'label'     => 'Monsters Created Over Time',
            'aggregate' => 'count',
            'period'    => 'created_at',
            'wrapper'   => ['class' => 'col-md-12'],
        ]);

        // --- Group stats into one request ---
        $this->groupMetrics('monster_stats', ['total_monsters', 'working_monsters', 'min_number', 'max_number']);
    }
}


================================================
FILE: app/Http/Controllers/Admin/Operations/SMSOperation.php
================================================
<?php

namespace App\Http\Controllers\Admin\Operations;

use Backpack\CRUD\app\Http\Controllers\Operations\Concerns\HasForm;

trait SMSOperation //Custom Form Operation Example
{
    use HasForm;

    /**
     * Define which routes are needed for this operation.
     *
     * @param string $segment    Name of the current entity (singular). Used as first URL segment.
     * @param string $routeName  Prefix of the route name.
     * @param string $controller Name of the current CrudController.
     */
    protected function setupSMSRoutes(string $segment, string $routeName, string $controller): void
    {
        $this->formRoutes(
            operationName: 'SMS',
            routesHaveIdSegment: true,
            segment: $segment,
            routeName: $routeName,
            controller: $controller
        );
    }

    /**
     * Add the default settings, buttons, etc that this operation needs.
     */
    protected function setupSMSDefaults(): void
    {
        $this->formDefaults(
            operationName: 'SMS',
            buttonStack: 'line', // alternatives: top, bottom
            buttonMeta: [
                'icon'    => 'las la-sms',
                'label'   => 'SMS',
            ],
        );
    }

    /**
     * Method to handle the GET request and display the View with a Backpack form.
     */
    public function getSMSForm(?int $id = null): \Illuminate\Contracts\View\View
    {
        $this->crud->hasAccessOrFail('SMS');
        $this->crud->addField('text');

        return $this->formView($id);
    }

    /**
     * Method to handle the POST request and perform the operation.
     *
     * @return array|\Illuminate\Http\RedirectResponse
     */
    public function postSMSForm(?int $id = null)
    {
        $this->crud->hasAccessOrFail('SMS');

        return $this->formAction($id, function ($inputs, $entry) {
            // You logic goes here...
            // dd('got to ' . __METHOD__, $inputs, $entry);

            // show a success message
            \Alert::success('SMS Sent: '.$inputs['text'])->flash();
        });
    }
}


================================================
FILE: app/Http/Controllers/Admin/PetShop/BadgeCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin\PetShop;

use App\Http\Requests\BadgeRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
 * Class BadgeCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class BadgeCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;

    /**
     * Configure the CrudPanel object. Apply settings to all operations.
     *
     * @return void
     */
    public function setup()
    {
        CRUD::setModel(\App\Models\PetShop\Badge::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/badge');
        CRUD::setEntityNameStrings('badge', 'badges');
    }

    /**
     * Define what happens when the List operation is loaded.
     *
     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries
     *
     * @return void
     */
    protected function setupListOperation()
    {
        CRUD::column('name');

        /**
         * Columns can be defined using the fluent syntax or array syntax:
         * - CRUD::column('price')->type('number');
         * - CRUD::addColumn(['name' => 'price', 'type' => 'number']);.
         */
    }

    /**
     * Define what happens when the Create operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-create
     *
     * @return void
     */
    protected function setupCreateOperation()
    {
        CRUD::setValidation(BadgeRequest::class);

        CRUD::field('name');

        /**
         * Fields can be defined using the fluent syntax or array syntax:
         * - CRUD::field('price')->type('number');
         * - CRUD::addField(['name' => 'price', 'type' => 'number']));.
         */
    }

    /**
     * Define what happens when the Update operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-update
     *
     * @return void
     */
    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }
}


================================================
FILE: app/Http/Controllers/Admin/PetShop/CommentCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin\PetShop;

use App\Http\Requests\CommentRequest;
use App\Models\PetShop\Pet;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

/**
 * Class CommentCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class CommentCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use FetchOperation;

    public function fetchPets()
    {
        return $this->fetch(Pet::class);
    }

    /**
     * Configure the CrudPanel object. Apply settings to all operations.
     *
     * @return void
     */
    public function setup()
    {
        CRUD::setModel(\App\Models\PetShop\Comment::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/comment');
        CRUD::setEntityNameStrings('comment', 'comments');
    }

    /**
     * Define what happens when the List operation is loaded.
     *
     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries
     *
     * @return void
     */
    protected function setupListOperation()
    {
        CRUD::column('body');
        // CRUD::column('commentable_type');
        // CRUD::column('commentable_id');
        CRUD::column('user');

        CRUD::setOperationSetting('showEntryCount', false);
    }

    /**
     * Define what happens when the Create operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-create
     *
     * @return void
     */
    protected function setupCreateOperation()
    {
        CRUD::setValidation(CommentRequest::class);

        CRUD::field('body')->type('easymde');
        CRUD::field('commentable')
            ->label('For')
            ->addMorphOption('App\Models\PetShop\Owner', 'Owner', ['attribute' => 'name'])
            ->addMorphOption('monster')
            ->addMorphOption('App\Models\PetShop\Pet', 'Pet', [
                'data_source'          => backpack_url('pet-shop/comment/fetch/pets'),
                'minimum_input_length' => 2,
                'placeholder'          => 'Select a fluffy pet',
            ])
            ->addMorphOption('user')
            ->morphTypeField(['wrapper' => ['class' => 'form-group col-md-4']])
            ->morphIdField(['wrapper' => ['class' => 'form-group col-md-8']]);
        CRUD::field('user');
    }

    /**
     * Define what happens when the Update operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-update
     *
     * @return void
     */
    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }
}


================================================
FILE: app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php
================================================
<?php

namespace App\Http\Controllers\Admin\PetShop;

use App\Http\Requests\InvoiceRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
use Backpack\CRUD\app\Library\Widget;

/**
 * Class InvoiceCrudController.
 *
 * @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
 */
class InvoiceCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    // use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    // use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\FetchOperation;
    use \Backpack\Pro\Http\Controllers\Operations\TrashOperation;
    use \Backpack\Pro\Http\Controllers\Operations\CustomViewOperation;
    use \Backpack\DataformModal\Http\Controllers\Operations\CreateInModalOperation;
    use \Backpack\DataformModal\Http\Controllers\Operations\UpdateInModalOperation;
    use \Backpack\ReportOperation\Http\Controllers\Operations\ReportOperation;

    /**
     * Configure the CrudPanel object. Apply settings to all operations.
     *
     * @return void
     */
    public function setup()
    {
        CRUD::setModel(\App\Models\PetShop\Invoice::class);
        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/invoice');
        CRUD::setEntityNameStrings('invoice', 'invoices');

        // enable db transactions for create and update operations
        CRUD::operation(['create', 'update'], function () {
            CRUD::set('useDatabaseTransactions', true);
        });
    }

    public function setupLast5YearsView()
    {
        CRUD::addClause('where', 'issuance_date', '>=', now()->subYears(5)->format('Y-m-d'));
    }

    /**
     * Define what happens when the List operation is loaded.
     *
     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries
     *
     * @return void
     */
    protected function setupListOperation()
    {
        CRUD::addColumn([
            'name' => 'info',
            'type' => 'view',
            'view' => 'crud::chips.invoice',
        ]);
        CRUD::column('issuance_date');
        CRUD::column('due_date');
        CRUD::column('total');

        CRUD::filter('series')
            ->type('dropdown')
            ->values(\App\Models\PetShop\Invoice::select('series')->distinct()->pluck('series', 'series')->toArray())
            ->label('Series')
            ->placeholder('Search by series')
            ->whenActive(function ($value) {
                CRUD::addClause('where', 'series', '=', $value);
            });

        CRUD::filter('issuance_date')
            ->type('date_range')
            ->label('Issuance Date')
            ->placeholder('Search by issuance date')
            ->whenActive(function ($value) {
                $dates = json_decode($value);
                CRUD::addClause('whereBetween', 'issuance_date', [$dates->from, $dates->to]);
            });

        $this->runCustomViews();
    }

    /**
     * Define what happens when the Create operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-create
     *
     * @return void
     */
    protected function setupCreateOperation()
    {
        CRUD::setValidation(InvoiceRequest::class);
        CRUD::setOperationSetting('contentClass', 'col-md-12');

        CRUD::field('owner')->ajax(true)->minimum_input_length(0)->inline_create(true);
        CRUD::field('series')->size(3)->default('INV');
        CRUD::field('number')->size(3)->default((\App\Models\PetShop\Invoice::max('number') ?? 0) + 1);
        CRUD::field('issuance_date')->size(3)->default(date('Y-m-d'));
        CRUD::field('due_date')->size(3);
        CRUD::field('items')->subfields([
            [
                'name'    => 'description',
                'type'    => 'text',
                'wrapper' => [
                    'class' => 'form-group col-md-8',
                ],
            ],
            [
                'name'       => 'quantity',
                'type'       => 'number',
                'attributes' => ['step' => 'any'],
                'wrapper'    => [
                    'class' => 'form-group col-md-2',
                ],
            ],
            [
                'name'       => 'unit_price',
                'type'       => 'number',
                'attributes' => ['step' => 'any'],
                'wrapper'    => [
                    'class' => 'form-group col-md-2',
                ],
            ],
        ])->reorder('order')->hint('<small class="float-right">Create/update/delete InvoiceItem entries over a <code>hasMany</code> relationship (1-n).</small>');
    }

    /**
     * Define what happens when the Update operation is loaded.
     *
     * @see https://backpackforlaravel.com/docs/crud-operation-update
     *
     * @return void
     */
    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }

    protected function setupShowOperation()
    {
        $this->autoSetupShowOperation();

        CRUD::column('total');

        // get the owner with important relationships
        $owner = CRUD::getCurrentEntry()->owner()->with('avatar', 'invoices')->first();

        // add a chip widget for the owner
        Widget::add()
            ->to('after_content')
            ->type('chip')
            ->view('crud::chips.owner')
            ->title('Owner')
            ->entry($owner);
    }

    public function fetchOwner()
    {
        return $this->fetch(\App\Models\PetShop\Owner::class);
    }

    protected function setupReportOperation()
    {
        // --- Stat cards row ---
        $this->addMetricGroup([
            'class' => 'row',
        ], function () {
            $this->addMetric('total_invoices', [
                'type'            => 'stat',
                'label'           => 'Total Invoices',
                'aggregate'       => 'count',
                'period'          => 'issuance_date',
                'compare'         => 'previous_period',
                'refreshInterval' => 5,
                'wrapper'         => ['class' => 'col-md-4'],
            ]);

            $this->addMetric('series_count', [
                'type'    => 'stat',
                'label'   => 'Unique Series',
                'wrapper' => ['class' => 'col-md-4'],
                'resolve' => fn (
Download .txt
gitextract_prmjevic/

├── .gitattributes
├── .github/
│   ├── config.yml
│   ├── dependabot.yml
│   ├── issue_template.md
│   ├── pull_request_template.md
│   ├── stale.yml
│   ├── support.yml
│   └── workflows/
│       └── add-to-project.yml
├── .gitignore
├── .travis.yml
├── Dockerfile
├── LICENSE.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── Inspire.php
│   │   │   └── RefreshDb.php
│   │   └── Kernel.php
│   ├── Enums/
│   │   ├── MonsterStatus.php
│   │   ├── ProductCondition.php
│   │   └── ProductStatus.php
│   ├── Events/
│   │   └── Event.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminPageController.php
│   │   │   │   ├── CaveCrudController.php
│   │   │   │   ├── Charts/
│   │   │   │   │   ├── LatestUsersChartController.php
│   │   │   │   │   ├── Lines/
│   │   │   │   │   │   ├── ChartjsLineChartController.php
│   │   │   │   │   │   ├── EchartsLineChartController.php
│   │   │   │   │   │   ├── FrappeLineChartController.php
│   │   │   │   │   │   └── HighchartsLineChartController.php
│   │   │   │   │   ├── NewEntriesChartController.php
│   │   │   │   │   └── Pies/
│   │   │   │   │       ├── ChartjsPieController.php
│   │   │   │   │       ├── EchartsPieController.php
│   │   │   │   │       ├── FrappePieController.php
│   │   │   │   │       └── HighchartsPieController.php
│   │   │   │   ├── ColumnMonsterCrudController.php
│   │   │   │   ├── DummyCrudController.php
│   │   │   │   ├── EditableMonsterCrudController.php
│   │   │   │   ├── FieldMonsterCrudController.php
│   │   │   │   ├── FluentMonsterCrudController.php
│   │   │   │   ├── HeroCrudController.php
│   │   │   │   ├── IconCrudController.php
│   │   │   │   ├── MeetingCrudController.php
│   │   │   │   ├── MonsterCrudController.php
│   │   │   │   ├── Operations/
│   │   │   │   │   └── SMSOperation.php
│   │   │   │   ├── PetShop/
│   │   │   │   │   ├── BadgeCrudController.php
│   │   │   │   │   ├── CommentCrudController.php
│   │   │   │   │   ├── InvoiceCrudController.php
│   │   │   │   │   ├── OwnerCrudController.php
│   │   │   │   │   ├── OwnerPetsCrudController.php
│   │   │   │   │   ├── PassportCrudController.php
│   │   │   │   │   ├── PetCrudController.php
│   │   │   │   │   └── SkillCrudController.php
│   │   │   │   ├── ProductCrudController.php
│   │   │   │   ├── StoryCrudController.php
│   │   │   │   └── UserCrudController.php
│   │   │   ├── Api/
│   │   │   │   └── ArticleController.php
│   │   │   └── Controller.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── Authenticate.php
│   │   │   ├── CheckIfAdmin.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── Theme.php
│   │   │   ├── ValidateSignature.php
│   │   │   └── VerifyCsrfToken.php
│   │   └── Requests/
│   │       ├── BadgeRequest.php
│   │       ├── CaveRequest.php
│   │       ├── CommentRequest.php
│   │       ├── DummyRequest.php
│   │       ├── HeroRequest.php
│   │       ├── IconRequest.php
│   │       ├── InvoiceRequest.php
│   │       ├── MeetingRequest.php
│   │       ├── MonsterRequest.php
│   │       ├── OwnerRequest.php
│   │       ├── PassportRequest.php
│   │       ├── PetRequest.php
│   │       ├── ProductRequest.php
│   │       ├── Request.php
│   │       ├── SkillRequest.php
│   │       └── StoryRequest.php
│   ├── Jobs/
│   │   └── Job.php
│   ├── Library/
│   │   └── Elfinder.php
│   ├── Listeners/
│   │   └── .gitkeep
│   ├── Models/
│   │   ├── Address.php
│   │   ├── Article.php
│   │   ├── Ball.php
│   │   ├── Bill.php
│   │   ├── Category.php
│   │   ├── Cave.php
│   │   ├── Country.php
│   │   ├── Dummy.php
│   │   ├── Graffiti.php
│   │   ├── Hero.php
│   │   ├── Icon.php
│   │   ├── Meeting.php
│   │   ├── MenuItem.php
│   │   ├── Monster.php
│   │   ├── Page.php
│   │   ├── PetShop/
│   │   │   ├── Avatar.php
│   │   │   ├── Badge.php
│   │   │   ├── Comment.php
│   │   │   ├── Invoice.php
│   │   │   ├── InvoiceItem.php
│   │   │   ├── Owner.php
│   │   │   ├── Passport.php
│   │   │   ├── Pet.php
│   │   │   └── Skill.php
│   │   ├── PostalBox.php
│   │   ├── PostalBoxer.php
│   │   ├── Product.php
│   │   ├── Recommend.php
│   │   ├── Sentiment.php
│   │   ├── Star.php
│   │   ├── Story.php
│   │   ├── Tag.php
│   │   ├── Traits/
│   │   │   └── LogsActivity.php
│   │   ├── Universe.php
│   │   └── Wish.php
│   ├── PageTemplates.php
│   ├── Policies/
│   │   └── .gitkeep
│   ├── Providers/
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   └── RouteServiceProvider.php
│   ├── User.php
│   └── helpers.php
├── artisan
├── bootstrap/
│   ├── app.php
│   ├── autoload.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── app.php
│   ├── auth.php
│   ├── backpack/
│   │   ├── base.php
│   │   ├── crud.php
│   │   ├── pagemanager.php
│   │   ├── permissionmanager.php
│   │   ├── testing.php
│   │   ├── theme-tabler.php
│   │   └── ui.php
│   ├── backup.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── compile.php
│   ├── database.php
│   ├── debugbar.php
│   ├── elfinder.php
│   ├── filesystems.php
│   ├── gravatar.php
│   ├── image.php
│   ├── logging.php
│   ├── mail.php
│   ├── permission.php
│   ├── prologue/
│   │   └── alerts.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   ├── sluggable.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   ├── ArticleFactory.php
│   │   ├── BillFactory.php
│   │   ├── CategoryFactory.php
│   │   ├── CaveFactory.php
│   │   ├── HeroFactory.php
│   │   ├── MeetingFactory.php
│   │   ├── MenuItemFactory.php
│   │   ├── MonsterFactory.php
│   │   ├── PageFactory.php
│   │   ├── PetShop/
│   │   │   ├── BadgeFactory.php
│   │   │   ├── InvoiceFactory.php
│   │   │   ├── InvoiceItemFactory.php
│   │   │   ├── OwnerFactory.php
│   │   │   ├── PassportFactory.php
│   │   │   ├── PetFactory.php
│   │   │   ├── SkillFactory.php
│   │   │   └── StoryFactory.php
│   │   ├── PostalBoxerFactory.php
│   │   ├── ProductFactory.php
│   │   ├── RecommendFactory.php
│   │   ├── TagFactory.php
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── .gitkeep
│   │   ├── 2013_04_09_062329_create_backpack_revisions_table.php
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2015_08_04_130507_create_article_tag_table.php
│   │   ├── 2015_08_04_130520_create_articles_table.php
│   │   ├── 2015_08_04_130551_create_categories_table.php
│   │   ├── 2015_08_04_131614_create_settings_table.php
│   │   ├── 2015_08_04_131626_create_tags_table.php
│   │   ├── 2016_05_05_115641_create_menu_items_table.php
│   │   ├── 2016_05_25_121918_create_pages_table.php
│   │   ├── 2016_07_24_060017_add_slug_to_categories_table.php
│   │   ├── 2016_07_24_060101_add_slug_to_tags_table.php
│   │   ├── 2017_04_20_100848_create_monsters_table.php
│   │   ├── 2017_04_21_052454_create_monster_tag_table.php
│   │   ├── 2017_04_21_052455_create_monster_articles_table.php
│   │   ├── 2017_04_21_052456_create_monster_category_table.php
│   │   ├── 2017_12_18_075638_create_icons_table.php
│   │   ├── 2017_12_19_081247_create_products_table.php
│   │   ├── 2018_12_12_075319_create_permission_tables.php
│   │   ├── 2019_09_13_093251_create_failed_jobs_table.php
│   │   ├── 2019_12_02_101119_add_browse_multiple_to_monsters_table.php
│   │   ├── 2020_03_12_100831_alter_monsters_table_add_relationship_columns.php
│   │   ├── 2020_03_12_100831_alter_monsters_table_remove_address.php
│   │   ├── 2020_03_29_054416_create_dummy_table.php
│   │   ├── 2020_03_31_114745_add_columns_to_monster_table.php
│   │   ├── 2020_03_31_114745_create_address_table.php
│   │   ├── 2020_03_31_114745_create_pivotable_relations_tables.php
│   │   ├── 2020_03_31_114745_remove_backpackuser_model.php
│   │   ├── 2020_03_31_114745_rename_address_column_from_monsters.php
│   │   ├── 2021_05_07_151146_make_notes_nullable_on_monster_product.php
│   │   ├── 2021_08_08_130950_change_upload_multiple_column_in_monsters_table.php
│   │   ├── 2021_10_13_081033_remove_simplemde_attribute_from_monsters.php
│   │   ├── 2022_01_17_083405_create_owners_table.php
│   │   ├── 2022_01_17_083526_create_invoices_table.php
│   │   ├── 2022_01_17_083644_create_invoice_items_table.php
│   │   ├── 2022_01_17_114317_create_pets_table.php
│   │   ├── 2022_01_17_114318_create_owner_pet_table.php
│   │   ├── 2022_01_17_114741_create_passports_table.php
│   │   ├── 2022_01_17_120235_create_skills_table.php
│   │   ├── 2022_01_17_120236_create_pet_skill_table.php
│   │   ├── 2022_01_17_133436_create_avatars_table.php
│   │   ├── 2022_01_17_135143_create_comments_table.php
│   │   ├── 2022_01_17_141636_create_badges_table.php
│   │   ├── 2022_01_17_141725_create_badgeables_table.php
│   │   ├── 2022_01_21_153540_create_countries_table.php
│   │   ├── 2022_01_21_155236_create_graffitis_table.php
│   │   ├── 2022_01_21_165125_add_country_id_addresses_table.php
│   │   ├── 2022_01_21_165552_create_wishes_table.php
│   │   ├── 2022_01_21_165553_create_balls_table.php
│   │   ├── 2022_01_21_165554_create_universes_table.php
│   │   ├── 2022_01_22_063032_create_heroes_table.php
│   │   ├── 2022_01_22_063323_add_hero_id_to_monsters_table.php
│   │   ├── 2022_01_22_072809_create_stories_table.php
│   │   ├── 2022_01_22_074008_add_story_id_to_monsters_table.php
│   │   ├── 2022_01_22_145356_create_caves_table.php
│   │   ├── 2022_01_22_145812_add_cave_id_to_monsters_table.php
│   │   ├── 2022_10_08_084702_add_status_to_products.php
│   │   ├── 2022_11_20_221518_create_activity_log_table.php
│   │   ├── 2022_11_20_221519_add_event_column_to_activity_log_table.php
│   │   ├── 2022_11_20_221520_add_batch_uuid_column_to_activity_log_table.php
│   │   ├── 2022_12_30_162821_add_soft_deletes_to_pets.php
│   │   ├── 2023_01_23_174016_add_status_to_monsters_table.php
│   │   ├── 2023_01_23_194158_add_features_to_monsters_table.php
│   │   ├── 2023_01_23_195752_add_ckeditor_to_monsters_table.php
│   │   ├── 2023_02_22_191429_create_media_table.php
│   │   ├── 2023_05_31_101941_add_dropzone_column_to_monsters_table.php
│   │   ├── 2023_07_13_071933_add_soft_deletes_to_invoices_table.php
│   │   ├── 2023_07_16_114745_rename_address_to_google_column_from_monsters.php
│   │   ├── 2023_08_30_093542_add_email_verified_at_column_to_users.php
│   │   ├── 2023_11_23_111148_add_category_relationship_column_to_monsters_table.php
│   │   ├── 2024_02_03_225118_create_meetings_table.php
│   │   ├── 2024_04_11_085730_create_language_lines_table.php
│   │   ├── 2024_04_24_115407_add_json_api_fields_to_monster_table.php
│   │   └── 2024_10_14_000001_create_pan_analytics_table.php
│   └── seeders/
│       ├── .gitkeep
│       ├── BadgeSeeder.php
│       ├── CaveSeeder.php
│       ├── CountryTableSeeder.php
│       ├── DatabaseSeeder.php
│       ├── HeroSeeder.php
│       ├── IconsTableSeeder.php
│       ├── InvoiceItemSeeder.php
│       ├── InvoiceSeeder.php
│       ├── MeetingSeeder.php
│       ├── MillionCommentsSeeder.php
│       ├── OwnerSeeder.php
│       ├── PassportSeeder.php
│       ├── PermissionManagerTablesSeeder.php
│       ├── PetSeeder.php
│       ├── PetShopSeeder.php
│       ├── ReportDemoSeeder.php
│       ├── SkillSeeder.php
│       ├── StorySeeder.php
│       ├── UniversesSeeder.php
│       └── UsersTableSeeder.php
├── docker/
│   └── infra/
│       └── certs/
│           ├── local-dev-key.pem
│           └── local-dev.pem
├── docker-compose.yml
├── entrypoint.d/
│   └── 51-after.sh
├── install.sh
├── lang/
│   ├── en/
│   │   ├── auth.php
│   │   ├── pagination.php
│   │   ├── passwords.php
│   │   └── validation.php
│   └── vendor/
│       ├── backpack/
│       │   ├── en/
│       │   │   └── crud.php
│       │   └── tr/
│       │       └── crud.php
│       └── backup/
│           ├── ar/
│           │   └── notifications.php
│           ├── bg/
│           │   └── notifications.php
│           ├── bn/
│           │   └── notifications.php
│           ├── cs/
│           │   └── notifications.php
│           ├── da/
│           │   └── notifications.php
│           ├── de/
│           │   └── notifications.php
│           ├── en/
│           │   └── notifications.php
│           ├── es/
│           │   └── notifications.php
│           ├── fa/
│           │   └── notifications.php
│           ├── fi/
│           │   └── notifications.php
│           ├── fr/
│           │   └── notifications.php
│           ├── hi/
│           │   └── notifications.php
│           ├── id/
│           │   └── notifications.php
│           ├── it/
│           │   └── notifications.php
│           ├── ja/
│           │   └── notifications.php
│           ├── nl/
│           │   └── notifications.php
│           ├── no/
│           │   └── notifications.php
│           ├── pl/
│           │   └── notifications.php
│           ├── pt/
│           │   └── notifications.php
│           ├── pt-BR/
│           │   └── notifications.php
│           ├── ro/
│           │   └── notifications.php
│           ├── ru/
│           │   └── notifications.php
│           ├── tr/
│           │   └── notifications.php
│           ├── uk/
│           │   └── notifications.php
│           ├── zh-CN/
│           │   └── notifications.php
│           └── zh-TW/
│               └── notifications.php
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── assets/
│   │   ├── css/
│   │   │   └── backpack_electric_purple_overlay.css
│   │   └── js/
│   │       ├── ga.js
│   │       ├── meetings.js
│   │       └── monster/
│   │           ├── fields.js
│   │           ├── test-custom-field.js
│   │           ├── test-disable-field.js
│   │           ├── test-enable-field.js
│   │           ├── test-hide-field.js
│   │           ├── test-onchange-field.js
│   │           ├── test-require-field.js
│   │           ├── test-show-field.js
│   │           ├── test-top-scenarios.js
│   │           └── test-unrequire-field.js
│   ├── index.php
│   ├── robots.txt
│   ├── uploads/
│   │   └── .gitkeep
│   └── web.config
├── readme.md
├── reload.sh
├── resources/
│   ├── assets/
│   │   └── sass/
│   │       └── app.scss
│   └── views/
│       ├── admin/
│       │   ├── metrics/
│       │   │   └── top_products.blade.php
│       │   ├── new-in-v7.blade.php
│       │   ├── partials/
│       │   │   ├── chip-examples.blade.php
│       │   │   ├── dataform-examples.blade.php
│       │   │   ├── dataform-modal-examples.blade.php
│       │   │   ├── datagrid-examples.blade.php
│       │   │   ├── datalist-examples.blade.php
│       │   │   └── datatable-examples.blade.php
│       │   └── petshop_about.blade.php
│       ├── vendor/
│       │   ├── .gitkeep
│       │   └── backpack/
│       │       ├── crud/
│       │       │   ├── buttons/
│       │       │   │   ├── fake-editable-columns.blade.php
│       │       │   │   └── passports.blade.php
│       │       │   ├── chips/
│       │       │   │   ├── invoice.blade.php
│       │       │   │   └── owner.blade.php
│       │       │   ├── columns/
│       │       │   │   └── custom_view_column_example.blade.php
│       │       │   └── details_row/
│       │       │       └── monster.blade.php
│       │       ├── theme-coreuiv2/
│       │       │   ├── auth/
│       │       │   │   └── login.blade.php
│       │       │   ├── dashboard.blade.php
│       │       │   └── inc/
│       │       │       ├── alerts.blade.php
│       │       │       └── topbar_right_content.blade.php
│       │       ├── theme-coreuiv4/
│       │       │   ├── auth/
│       │       │   │   └── login.blade.php
│       │       │   ├── dashboard.blade.php
│       │       │   └── inc/
│       │       │       ├── alerts.blade.php
│       │       │       └── topbar_right_content.blade.php
│       │       ├── theme-tabler/
│       │       │   ├── auth/
│       │       │   │   └── login/
│       │       │   │       └── inc/
│       │       │   │           └── form.blade.php
│       │       │   ├── dashboard.blade.php
│       │       │   ├── inc/
│       │       │   │   ├── alerts.blade.php
│       │       │   │   ├── commercial.blade.php
│       │       │   │   └── topbar_right_content.blade.php
│       │       │   └── layouts/
│       │       │       └── partials/
│       │       │           └── sidebar_shortcuts.blade.php
│       │       └── ui/
│       │           └── inc/
│       │               └── menu_items.blade.php
│       └── welcome.blade.php
├── routes/
│   ├── api.php
│   ├── backpack/
│   │   ├── custom.php
│   │   └── permissionmanager.php
│   ├── console.php
│   └── web.php
├── start.sh
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── clockwork/
│   │   └── .gitignore
│   ├── debugbar/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   └── Feature/
│       ├── Admin/
│       │   ├── CaveCrudControllerTest.php
│       │   ├── ColumnMonsterCrudControllerTest.php
│       │   ├── DummyCrudControllerTest.php
│       │   ├── EditableMonsterCrudControllerTest.php
│       │   ├── FieldMonsterCrudControllerTest.php
│       │   ├── FluentMonsterCrudControllerTest.php
│       │   ├── HeroCrudControllerTest.php
│       │   ├── IconCrudControllerTest.php
│       │   ├── MeetingCrudControllerTest.php
│       │   ├── MonsterCrudControllerTest.php
│       │   ├── PetShop/
│       │   │   ├── BadgeCrudControllerTest.php
│       │   │   ├── CommentCrudControllerTest.php
│       │   │   ├── InvoiceCrudControllerTest.php
│       │   │   ├── OwnerCrudControllerTest.php
│       │   │   ├── OwnerPetsCrudControllerTest.php
│       │   │   ├── PassportCrudControllerTest.php
│       │   │   ├── PetCrudControllerTest.php
│       │   │   └── SkillCrudControllerTest.php
│       │   ├── ProductCrudControllerTest.php
│       │   ├── StoryCrudControllerTest.php
│       │   └── UserCrudControllerTest.php
│       └── Backpack/
│           ├── DefaultCreateTests.php
│           ├── DefaultDeleteTests.php
│           ├── DefaultListTests.php
│           ├── DefaultShowTests.php
│           ├── DefaultTestBase.php
│           └── DefaultUpdateTests.php
└── vite.config.js
Download .txt
SYMBOL INDEX (801 symbols across 265 files)

FILE: app/Console/Commands/Inspire.php
  class Inspire (line 8) | class Inspire extends Command
    method handle (line 29) | public function handle()

FILE: app/Console/Commands/RefreshDb.php
  class RefreshDb (line 9) | class RefreshDb extends Command
    method __construct (line 30) | public function __construct()
    method handle (line 40) | public function handle()

FILE: app/Console/Kernel.php
  class Kernel (line 8) | class Kernel extends ConsoleKernel
    method schedule (line 26) | protected function schedule(Schedule $schedule)

FILE: app/Enums/MonsterStatus.php
  method getReadableStatus (line 11) | public function getReadableStatus()

FILE: app/Enums/ProductCondition.php
  method getReadableCondition (line 11) | public function getReadableCondition()

FILE: app/Enums/ProductStatus.php
  method getReadableStatus (line 11) | public function getReadableStatus()

FILE: app/Events/Event.php
  class Event (line 5) | abstract class Event

FILE: app/Exceptions/Handler.php
  class Handler (line 12) | class Handler extends ExceptionHandler
    method report (line 35) | public function report(Throwable $exception)
    method render (line 48) | public function render($request, Throwable $exception)
    method whoopsHandler (line 53) | protected function whoopsHandler()

FILE: app/Http/Controllers/Admin/AdminPageController.php
  class AdminPageController (line 5) | class AdminPageController
    method newInV7 (line 12) | public function newInV7()

FILE: app/Http/Controllers/Admin/CaveCrudController.php
  class CaveCrudController (line 14) | class CaveCrudController extends CrudController
    method setup (line 28) | public function setup()
    method setupListOperation (line 42) | protected function setupListOperation()
    method setupCreateOperation (line 55) | protected function setupCreateOperation()
    method setupUpdateOperation (line 80) | protected function setupUpdateOperation()
    method getMonsterSubfields (line 85) | public static function getMonsterSubfields()
    method ajaxUpload (line 152) | public function ajaxUpload()

FILE: app/Http/Controllers/Admin/Charts/LatestUsersChartController.php
  class LatestUsersChartController (line 9) | class LatestUsersChartController extends ChartController
    method setup (line 11) | public function setup()
    method data (line 31) | public function data()

FILE: app/Http/Controllers/Admin/Charts/Lines/ChartjsLineChartController.php
  class ChartjsLineChartController (line 8) | class ChartjsLineChartController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/Charts/Lines/EchartsLineChartController.php
  class EchartsLineChartController (line 8) | class EchartsLineChartController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/Charts/Lines/FrappeLineChartController.php
  class FrappeLineChartController (line 8) | class FrappeLineChartController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/Charts/Lines/HighchartsLineChartController.php
  class HighchartsLineChartController (line 8) | class HighchartsLineChartController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/Charts/NewEntriesChartController.php
  class NewEntriesChartController (line 12) | class NewEntriesChartController extends ChartController
    method setup (line 14) | public function setup()
    method data (line 40) | public function data()

FILE: app/Http/Controllers/Admin/Charts/Pies/ChartjsPieController.php
  class ChartjsPieController (line 8) | class ChartjsPieController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/Charts/Pies/EchartsPieController.php
  class EchartsPieController (line 8) | class EchartsPieController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/Charts/Pies/FrappePieController.php
  class FrappePieController (line 8) | class FrappePieController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/Charts/Pies/HighchartsPieController.php
  class HighchartsPieController (line 8) | class HighchartsPieController extends ChartController
    method setup (line 10) | public function setup()

FILE: app/Http/Controllers/Admin/ColumnMonsterCrudController.php
  class ColumnMonsterCrudController (line 12) | class ColumnMonsterCrudController extends MonsterCrudController
    method setup (line 19) | public function setup()
    method setupListOperation (line 34) | public function setupListOperation()
    method removeBootstrapSizingClasses (line 79) | private function removeBootstrapSizingClasses($classes)

FILE: app/Http/Controllers/Admin/DummyCrudController.php
  class DummyCrudController (line 16) | class DummyCrudController extends CrudController
    method setup (line 26) | public function setup()
    method fetchProduct (line 33) | public function fetchProduct()
    method fetchProducts (line 38) | public function fetchProducts()
    method fetchIcon (line 43) | public function fetchIcon()
    method setupListOperation (line 48) | protected function setupListOperation()
    method setupCreateOperation (line 62) | protected function setupCreateOperation()
    method setupUpdateOperation (line 82) | protected function setupUpdateOperation()
    method setupShowOperation (line 87) | protected function setupShowOperation()
    method groups (line 137) | protected function groups()
    method ajaxUpload (line 191) | public function ajaxUpload()

FILE: app/Http/Controllers/Admin/EditableMonsterCrudController.php
  class EditableMonsterCrudController (line 8) | class EditableMonsterCrudController extends MonsterCrudController
    method setup (line 12) | public function setup()
    method setupListOperation (line 20) | public function setupListOperation()
    method setupListOperationFake (line 56) | public function setupListOperationFake()
    method setupMinorUpdateOperation (line 86) | protected function setupMinorUpdateOperation()

FILE: app/Http/Controllers/Admin/FieldMonsterCrudController.php
  class FieldMonsterCrudController (line 8) | class FieldMonsterCrudController extends MonsterCrudController
    method setup (line 10) | public function setup()
    method setupCreateOperation (line 19) | protected function setupCreateOperation()
    method setupFieldsForTopScenarios (line 38) | protected function setupFieldsForTopScenarios()

FILE: app/Http/Controllers/Admin/FluentMonsterCrudController.php
  class FluentMonsterCrudController (line 9) | class FluentMonsterCrudController extends CrudController
    method setup (line 18) | public function setup()
    method fetchProduct (line 25) | public function fetchProduct()
    method fetchIcon (line 30) | public function fetchIcon()
    method setupListOperation (line 35) | public function setupListOperation()
    method setupShowOperation (line 108) | public function setupShowOperation()
    method setupCreateOperation (line 136) | protected function setupCreateOperation()
    method setupUpdateOperation (line 528) | protected function setupUpdateOperation()
    method addCustomCrudFilters (line 533) | protected function addCustomCrudFilters()

FILE: app/Http/Controllers/Admin/HeroCrudController.php
  class HeroCrudController (line 14) | class HeroCrudController extends CrudController
    method setup (line 27) | public function setup()
    method setupListOperation (line 41) | protected function setupListOperation()
    method setupCreateOperation (line 55) | protected function setupCreateOperation()
    method setupUpdateOperation (line 86) | protected function setupUpdateOperation()
    method getMonsterSubfields (line 91) | public static function getMonsterSubfields()

FILE: app/Http/Controllers/Admin/IconCrudController.php
  class IconCrudController (line 9) | class IconCrudController extends CrudController
    method setup (line 18) | public function setup()
    method setupListOperation (line 25) | protected function setupListOperation()
    method setupCreateOperation (line 44) | protected function setupCreateOperation()
    method setupUpdateOperation (line 56) | protected function setupUpdateOperation()

FILE: app/Http/Controllers/Admin/MeetingCrudController.php
  class MeetingCrudController (line 17) | class MeetingCrudController extends CrudController
    method setup (line 49) | public function setup(): void
    method getCalendarFieldsMap (line 56) | public function getCalendarFieldsMap()
    method setupCalendarOperation (line 70) | public function setupCalendarOperation()
    method setupListOperation (line 120) | protected function setupListOperation(): void
    method setupCreateOperation (line 143) | protected function setupCreateOperation(): void
    method setupUpdateOperation (line 206) | protected function setupUpdateOperation(): void
    method fetchTypes (line 214) | public function fetchTypes()

FILE: app/Http/Controllers/Admin/MonsterCrudController.php
  class MonsterCrudController (line 12) | class MonsterCrudController extends CrudController
    method setup (line 28) | public function setup()
    method fetchProduct (line 37) | public function fetchProduct()
    method fetchProducts (line 42) | public function fetchProducts()
    method fetchIcon (line 47) | public function fetchIcon()
    method fetchArticle (line 52) | public function fetchArticle()
    method fetchPaginatedTypes (line 57) | public function fetchPaginatedTypes()
    method fetchSimpleTypes (line 83) | public function fetchSimpleTypes()
    method setupListOperation (line 101) | public function setupListOperation()
    method setupShowOperation (line 285) | public function setupShowOperation()
    method setupCreateOperation (line 729) | protected function setupCreateOperation()
    method setupUpdateOperation (line 765) | protected function setupUpdateOperation()
    method addCustomCrudFilters (line 773) | protected function addCustomCrudFilters()
    method getFieldsArrayForSimpleTab (line 895) | public static function getFieldsArrayForSimpleTab()
    method getFieldsArrayForTimeAndSpaceTab (line 1036) | public static function getFieldsArrayForTimeAndSpaceTab()
    method getFieldsArrayForRelationshipsTab (line 1137) | public static function getFieldsArrayForRelationshipsTab()
    method getFieldsArrayForSelectsTab (line 1427) | public static function getFieldsArrayForSelectsTab()
    method getFieldsArrayForUploadsTab (line 1648) | public static function getFieldsArrayForUploadsTab()
    method getFieldsArrayForWysiwygEditorsTab (line 1739) | public static function getFieldsArrayForWysiwygEditorsTab()
    method getFieldsArrayForMiscellaneousTab (line 1774) | public static function getFieldsArrayForMiscellaneousTab()
    method ajaxUpload (line 1882) | public function ajaxUpload()
    method setupReportOperation (line 1896) | protected function setupReportOperation()

FILE: app/Http/Controllers/Admin/Operations/SMSOperation.php
  type SMSOperation (line 7) | trait SMSOperation //Custom Form Operation Example
    method setupSMSRoutes (line 18) | protected function setupSMSRoutes(string $segment, string $routeName, ...
    method setupSMSDefaults (line 32) | protected function setupSMSDefaults(): void
    method getSMSForm (line 47) | public function getSMSForm(?int $id = null): \Illuminate\Contracts\Vie...
    method postSMSForm (line 60) | public function postSMSForm(?int $id = null)

FILE: app/Http/Controllers/Admin/PetShop/BadgeCrudController.php
  class BadgeCrudController (line 14) | class BadgeCrudController extends CrudController
    method setup (line 27) | public function setup()
    method setupListOperation (line 41) | protected function setupListOperation()
    method setupCreateOperation (line 59) | protected function setupCreateOperation()
    method setupUpdateOperation (line 79) | protected function setupUpdateOperation()

FILE: app/Http/Controllers/Admin/PetShop/CommentCrudController.php
  class CommentCrudController (line 16) | class CommentCrudController extends CrudController
    method fetchPets (line 25) | public function fetchPets()
    method setup (line 35) | public function setup()
    method setupListOperation (line 49) | protected function setupListOperation()
    method setupCreateOperation (line 66) | protected function setupCreateOperation()
    method setupUpdateOperation (line 93) | protected function setupUpdateOperation()

FILE: app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php
  class InvoiceCrudController (line 15) | class InvoiceCrudController extends CrudController
    method setup (line 33) | public function setup()
    method setupLast5YearsView (line 45) | public function setupLast5YearsView()
    method setupListOperation (line 57) | protected function setupListOperation()
    method setupCreateOperation (line 96) | protected function setupCreateOperation()
    method setupUpdateOperation (line 140) | protected function setupUpdateOperation()
    method setupShowOperation (line 145) | protected function setupShowOperation()
    method fetchOwner (line 163) | public function fetchOwner()
    method setupReportOperation (line 168) | protected function setupReportOperation()

FILE: app/Http/Controllers/Admin/PetShop/OwnerCrudController.php
  class OwnerCrudController (line 15) | class OwnerCrudController extends CrudController
    method fetchComments (line 26) | public function fetchComments()
    method setup (line 36) | public function setup()
    method setupListOperation (line 50) | protected function setupListOperation()
    method setupCreateOperation (line 78) | protected function setupCreateOperation()
    method setupUpdateOperation (line 100) | protected function setupUpdateOperation()
    method setupReportOperation (line 105) | protected function setupReportOperation()
    method setupShowOperation (line 162) | protected function setupShowOperation()

FILE: app/Http/Controllers/Admin/PetShop/OwnerPetsCrudController.php
  class OwnerPetsCrudController (line 10) | class OwnerPetsCrudController extends PetCrudController
    method setup (line 22) | public function setup()
    method setupCreateOperation (line 45) | protected function setupCreateOperation()
    method setupUpdateOperation (line 54) | protected function setupUpdateOperation()
    method store (line 63) | public function store()
    method update (line 70) | public function update()
    method addOwnerToRequest (line 77) | private function addOwnerToRequest()

FILE: app/Http/Controllers/Admin/PetShop/PassportCrudController.php
  class PassportCrudController (line 14) | class PassportCrudController extends CrudController
    method setup (line 27) | public function setup()
    method setupListOperation (line 41) | protected function setupListOperation()
    method setupCreateOperation (line 65) | protected function setupCreateOperation()
    method passportFields (line 73) | public static function passportFields()
    method setupUpdateOperation (line 126) | protected function setupUpdateOperation()

FILE: app/Http/Controllers/Admin/PetShop/PetCrudController.php
  class PetCrudController (line 14) | class PetCrudController extends CrudController
    method fetchComments (line 25) | public function fetchComments()
    method setup (line 35) | public function setup()
    method setupListOperation (line 49) | protected function setupListOperation()
    method setupCreateOperation (line 80) | protected function setupCreateOperation()
    method setupUpdateOperation (line 100) | protected function setupUpdateOperation()
    method setupReportOperation (line 105) | protected function setupReportOperation()

FILE: app/Http/Controllers/Admin/PetShop/SkillCrudController.php
  class SkillCrudController (line 14) | class SkillCrudController extends CrudController
    method setup (line 27) | public function setup()
    method setupListOperation (line 41) | protected function setupListOperation()
    method setupCreateOperation (line 54) | protected function setupCreateOperation()
    method setupUpdateOperation (line 69) | protected function setupUpdateOperation()

FILE: app/Http/Controllers/Admin/ProductCrudController.php
  class ProductCrudController (line 10) | class ProductCrudController extends CrudController
    method setup (line 23) | public function setup()
    method setupListOperation (line 30) | protected function setupListOperation()
    method setupCreateOperation (line 63) | protected function setupCreateOperation()
    method setupUpdateOperation (line 291) | protected function setupUpdateOperation()
    method ajaxUpload (line 296) | public function ajaxUpload()
    method setupReportOperation (line 308) | protected function setupReportOperation()

FILE: app/Http/Controllers/Admin/StoryCrudController.php
  class StoryCrudController (line 14) | class StoryCrudController extends CrudController
    method setup (line 28) | public function setup()
    method setupListOperation (line 42) | protected function setupListOperation()
    method setupCreateOperation (line 56) | protected function setupCreateOperation()
    method setupUpdateOperation (line 75) | protected function setupUpdateOperation()
    method getMonsterSubfields (line 80) | public static function getMonsterSubfields()
    method ajaxUpload (line 85) | public function ajaxUpload()

FILE: app/Http/Controllers/Admin/UserCrudController.php
  class UserCrudController (line 9) | class UserCrudController extends OriginalUserCrudController
    method setupListOperation (line 14) | public function setupListOperation()

FILE: app/Http/Controllers/Api/ArticleController.php
  class ArticleController (line 9) | class ArticleController extends Controller
    method index (line 13) | public function index(Request $request)
    method search (line 32) | public function search(Request $request)

FILE: app/Http/Controllers/Controller.php
  class Controller (line 10) | class Controller extends BaseController

FILE: app/Http/Kernel.php
  class Kernel (line 7) | class Kernel extends HttpKernel

FILE: app/Http/Middleware/Authenticate.php
  class Authenticate (line 8) | class Authenticate
    method handle (line 19) | public function handle($request, Closure $next, $guard = null)

FILE: app/Http/Middleware/CheckIfAdmin.php
  class CheckIfAdmin (line 7) | class CheckIfAdmin
    method checkIfUserIsAdmin (line 23) | private function checkIfUserIsAdmin($user)
    method respondToUnauthorizedRequest (line 36) | private function respondToUnauthorizedRequest($request)
    method handle (line 53) | public function handle($request, Closure $next)

FILE: app/Http/Middleware/EncryptCookies.php
  class EncryptCookies (line 7) | class EncryptCookies extends BaseEncrypter

FILE: app/Http/Middleware/RedirectIfAuthenticated.php
  class RedirectIfAuthenticated (line 8) | class RedirectIfAuthenticated
    method handle (line 19) | public function handle($request, Closure $next, $guard = null)

FILE: app/Http/Middleware/Theme.php
  class Theme (line 9) | class Theme
    method handle (line 11) | public function handle($request, Closure $next): mixed

FILE: app/Http/Middleware/ValidateSignature.php
  class ValidateSignature (line 7) | class ValidateSignature extends Middleware

FILE: app/Http/Middleware/VerifyCsrfToken.php
  class VerifyCsrfToken (line 7) | class VerifyCsrfToken extends BaseVerifier

FILE: app/Http/Requests/BadgeRequest.php
  class BadgeRequest (line 7) | class BadgeRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 37) | public function attributes()
    method messages (line 49) | public function messages()

FILE: app/Http/Requests/CaveRequest.php
  class CaveRequest (line 7) | class CaveRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 39) | public function attributes()
    method messages (line 51) | public function messages()

FILE: app/Http/Requests/CommentRequest.php
  class CommentRequest (line 7) | class CommentRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 40) | public function attributes()
    method messages (line 52) | public function messages()

FILE: app/Http/Requests/DummyRequest.php
  class DummyRequest (line 7) | class DummyRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 40) | public function attributes()
    method messages (line 52) | public function messages()

FILE: app/Http/Requests/HeroRequest.php
  class HeroRequest (line 7) | class HeroRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 37) | public function attributes()
    method messages (line 49) | public function messages()

FILE: app/Http/Requests/IconRequest.php
  class IconRequest (line 5) | class IconRequest extends \Backpack\CRUD\app\Http\Requests\CrudRequest
    method authorize (line 12) | public function authorize()
    method rules (line 23) | public function rules()
    method attributes (line 36) | public function attributes()
    method messages (line 48) | public function messages()

FILE: app/Http/Requests/InvoiceRequest.php
  class InvoiceRequest (line 7) | class InvoiceRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 47) | public function attributes()
    method messages (line 59) | public function messages()

FILE: app/Http/Requests/MeetingRequest.php
  class MeetingRequest (line 7) | class MeetingRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()

FILE: app/Http/Requests/MonsterRequest.php
  class MonsterRequest (line 5) | class MonsterRequest extends \Backpack\CRUD\app\Http\Requests\CrudRequest
    method authorize (line 12) | public function authorize()
    method rules (line 23) | public function rules()
    method attributes (line 37) | public function attributes()
    method messages (line 49) | public function messages()

FILE: app/Http/Requests/OwnerRequest.php
  class OwnerRequest (line 7) | class OwnerRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 41) | public function attributes()
    method messages (line 53) | public function messages()

FILE: app/Http/Requests/PassportRequest.php
  class PassportRequest (line 7) | class PassportRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 49) | public function attributes()
    method messages (line 61) | public function messages()

FILE: app/Http/Requests/PetRequest.php
  class PetRequest (line 7) | class PetRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 38) | public function attributes()
    method messages (line 50) | public function messages()

FILE: app/Http/Requests/ProductRequest.php
  class ProductRequest (line 5) | class ProductRequest extends \Backpack\CRUD\app\Http\Requests\CrudRequest
    method authorize (line 12) | public function authorize()
    method rules (line 23) | public function rules()
    method attributes (line 37) | public function attributes()
    method messages (line 49) | public function messages()

FILE: app/Http/Requests/Request.php
  class Request (line 7) | abstract class Request extends FormRequest

FILE: app/Http/Requests/SkillRequest.php
  class SkillRequest (line 7) | class SkillRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 37) | public function attributes()
    method messages (line 49) | public function messages()

FILE: app/Http/Requests/StoryRequest.php
  class StoryRequest (line 7) | class StoryRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 25) | public function rules()
    method attributes (line 39) | public function attributes()
    method messages (line 51) | public function messages()

FILE: app/Jobs/Job.php
  class Job (line 7) | abstract class Job

FILE: app/Library/Elfinder.php
  class Elfinder (line 5) | class Elfinder
    method checkAccess (line 7) | public static function checkAccess($attr, $path, $data, $volume)

FILE: app/Models/Address.php
  class Address (line 9) | class Address extends Model
    method monster (line 26) | public function monster()
    method country (line 31) | public function country()

FILE: app/Models/Article.php
  class Article (line 9) | class Article extends OriginalArticle

FILE: app/Models/Ball.php
  class Ball (line 10) | class Ball extends Model
    method ballable (line 49) | public function ballable()
    method country (line 54) | public function country()

FILE: app/Models/Bill.php
  class Bill (line 10) | class Bill extends Model
    method monsters (line 40) | public function monsters()
    method icons (line 45) | public function icons()

FILE: app/Models/Category.php
  class Category (line 9) | class Category extends OriginalCategory

FILE: app/Models/Cave.php
  class Cave (line 10) | class Cave extends Model
    method monster (line 34) | public function monster()
    method category (line 39) | public function category()
    method location (line 44) | protected function location(): \Illuminate\Database\Eloquent\Casts\Att...

FILE: app/Models/Country.php
  class Country (line 9) | class Country extends Model
    method addresses (line 38) | public function addresses()

FILE: app/Models/Dummy.php
  class Dummy (line 10) | class Dummy extends Model
    method article (line 44) | public function article()
    method category (line 49) | public function category()
    method categories (line 54) | public function categories()
    method tags (line 59) | public function tags()
    method icon (line 64) | public function icon()
    method products (line 69) | public function products()
    method articles (line 74) | public function articles()
    method categorySelect2 (line 79) | public function categorySelect2()

FILE: app/Models/Graffiti.php
  class Graffiti (line 10) | class Graffiti extends Model
    method user (line 49) | public function user()
    method monsters (line 54) | public function monsters()

FILE: app/Models/Hero.php
  class Hero (line 10) | class Hero extends Model
    method stories (line 35) | public function stories()

FILE: app/Models/Icon.php
  class Icon (line 10) | class Icon extends Model
    method identifiableAttribute (line 29) | public function identifiableAttribute()
    method recommends (line 46) | public function recommends()

FILE: app/Models/Meeting.php
  class Meeting (line 9) | class Meeting extends Model

FILE: app/Models/MenuItem.php
  class MenuItem (line 9) | class MenuItem extends OriginalMenuItem

FILE: app/Models/Monster.php
  class Monster (line 13) | class Monster extends Model
    method openGoogle (line 58) | public function openGoogle($crud = false)
    method getCategory (line 63) | public function getCategory()
    method article (line 74) | public function article()
    method wish (line 79) | public function wish()
    method address (line 84) | public function address()
    method cave (line 89) | public function cave()
    method hero (line 94) | public function hero()
    method story (line 99) | public function story()
    method graffiti (line 104) | public function graffiti()
    method category (line 109) | public function category()
    method categorySelect2 (line 114) | public function categorySelect2()
    method categoryRelationship (line 119) | public function categoryRelationship()
    method icon (line 124) | public function icon()
    method icondummy (line 129) | public function icondummy()
    method postalboxes (line 134) | public function postalboxes()
    method postalboxer (line 139) | public function postalboxer()
    method articles (line 144) | public function articles()
    method categories (line 149) | public function categories()
    method tags (line 154) | public function tags()
    method products (line 159) | public function products()
    method dummyproducts (line 164) | public function dummyproducts()
    method countries (line 169) | public function countries()
    method sentiment (line 174) | public function sentiment()
    method ball (line 179) | public function ball()
    method recommends (line 184) | public function recommends()
    method bills (line 189) | public function bills()
    method stars (line 194) | public function stars()
    method universes (line 199) | public function universes()
    method getTextAndEmailAttribute (line 216) | public function getTextAndEmailAttribute()
    method getEasymdeAttribute (line 226) | public function getEasymdeAttribute($value)
    method getSummernoteAttribute (line 236) | public function getSummernoteAttribute($value)
    method setBase64ImageAttribute (line 247) | public function setBase64ImageAttribute($value)
    method setDropzoneAttribute (line 258) | public function setDropzoneAttribute($value)
    method setImageAttribute (line 269) | public function setImageAttribute($value)
    method setUploadAttribute (line 316) | public function setUploadAttribute($value)
    method setUploadMultipleAttribute (line 333) | public function setUploadMultipleAttribute($value)
    method setIcondummyAttribute (line 348) | public function setIcondummyAttribute($value)

FILE: app/Models/Page.php
  class Page (line 9) | class Page extends OriginalPage

FILE: app/Models/PetShop/Avatar.php
  class Avatar (line 8) | class Avatar extends Model
    method avatarable (line 34) | public function avatarable()

FILE: app/Models/PetShop/Badge.php
  class Badge (line 8) | class Badge extends Model
    method owners (line 32) | public function owners()
    method pets (line 37) | public function pets()

FILE: app/Models/PetShop/Comment.php
  class Comment (line 7) | class Comment extends Model
    method commentable (line 50) | public function commentable()
    method user (line 55) | public function user()

FILE: app/Models/PetShop/Invoice.php
  class Invoice (line 9) | class Invoice extends Model
    method booted (line 41) | protected static function booted()
    method owner (line 54) | public function owner()
    method items (line 59) | public function items()
    method getTotalAttribute (line 76) | public function getTotalAttribute()

FILE: app/Models/PetShop/InvoiceItem.php
  class InvoiceItem (line 8) | class InvoiceItem extends Model
    method invoice (line 45) | public function invoice()
    method getSubtotalAttribute (line 62) | public function getSubtotalAttribute()

FILE: app/Models/PetShop/Owner.php
  class Owner (line 8) | class Owner extends Model
    method invoices (line 32) | public function invoices()
    method pets (line 37) | public function pets()
    method avatar (line 42) | public function avatar()
    method comments (line 47) | public function comments()
    method badges (line 52) | public function badges()

FILE: app/Models/PetShop/Passport.php
  class Passport (line 8) | class Passport extends Model
    method pet (line 48) | public function pet()

FILE: app/Models/PetShop/Pet.php
  class Pet (line 9) | class Pet extends Model
    method owners (line 34) | public function owners()
    method skills (line 39) | public function skills()
    method passport (line 44) | public function passport()
    method avatar (line 49) | public function avatar()
    method comments (line 54) | public function comments()
    method badges (line 59) | public function badges()

FILE: app/Models/PetShop/Skill.php
  class Skill (line 8) | class Skill extends Model
    method pets (line 32) | public function pets()

FILE: app/Models/PostalBox.php
  class PostalBox (line 9) | class PostalBox extends Model
    method monster (line 26) | public function monster()

FILE: app/Models/PostalBoxer.php
  class PostalBoxer (line 10) | class PostalBoxer extends Model
    method monster (line 40) | public function monster()

FILE: app/Models/Product.php
  class Product (line 15) | class Product extends Model implements HasMedia
    method mainImage (line 49) | public function mainImage(): Attribute
    method privacyPolicy (line 62) | public function privacyPolicy(): Attribute
    method specifications (line 75) | public function specifications(): Attribute
    method gallery (line 88) | public function gallery(): Attribute
    method category (line 117) | public function category()

FILE: app/Models/Recommend.php
  class Recommend (line 10) | class Recommend extends Model
    method monsters (line 40) | public function monsters()
    method icons (line 45) | public function icons()

FILE: app/Models/Sentiment.php
  class Sentiment (line 10) | class Sentiment extends Model
    method sentimentable (line 49) | public function sentimentable()
    method user (line 54) | public function user()

FILE: app/Models/Star.php
  class Star (line 9) | class Star extends Model
    method starable (line 38) | public function starable()

FILE: app/Models/Story.php
  class Story (line 9) | class Story extends Model
    method monsters (line 31) | public function monsters()
    method heroes (line 36) | public function heroes()

FILE: app/Models/Tag.php
  class Tag (line 9) | class Tag extends OriginalTag

FILE: app/Models/Traits/LogsActivity.php
  type LogsActivity (line 8) | trait LogsActivity
    method getActivitylogOptions (line 18) | public function getActivitylogOptions(): LogOptions

FILE: app/Models/Universe.php
  class Universe (line 9) | class Universe extends Model
    method universable (line 38) | public function universable()

FILE: app/Models/Wish.php
  class Wish (line 10) | class Wish extends Model
    method monster (line 50) | public function monster()
    method country (line 55) | public function country()
    method universes (line 60) | public function universes()

FILE: app/PageTemplates.php
  type PageTemplates (line 5) | trait PageTemplates
    method services (line 23) | private function services()
    method about_us (line 62) | private function about_us()

FILE: app/Providers/AppServiceProvider.php
  class AppServiceProvider (line 10) | class AppServiceProvider extends ServiceProvider
    method boot (line 17) | public function boot()
    method register (line 55) | public function register()

FILE: app/Providers/AuthServiceProvider.php
  class AuthServiceProvider (line 7) | class AuthServiceProvider extends ServiceProvider
    method boot (line 23) | public function boot()

FILE: app/Providers/BroadcastServiceProvider.php
  class BroadcastServiceProvider (line 8) | class BroadcastServiceProvider extends ServiceProvider
    method boot (line 15) | public function boot()

FILE: app/Providers/EventServiceProvider.php
  class EventServiceProvider (line 7) | class EventServiceProvider extends ServiceProvider
    method boot (line 25) | public function boot()

FILE: app/Providers/RouteServiceProvider.php
  class RouteServiceProvider (line 8) | class RouteServiceProvider extends ServiceProvider
    method boot (line 24) | public function boot()
    method map (line 36) | public function map()
    method mapWebRoutes (line 52) | protected function mapWebRoutes()
    method mapApiRoutes (line 69) | protected function mapApiRoutes()

FILE: app/User.php
  class User (line 15) | class User extends Authenticatable implements MustVerifyEmail
    method save (line 44) | public function save(array $options = [])

FILE: app/helpers.php
  function backpack_pro_badge (line 11) | function backpack_pro_badge(string $string = 'PRO')
  function backpack_new_badge (line 25) | function backpack_new_badge(string $string = 'NEW')
  function backpack_free_badge (line 39) | function backpack_free_badge(string $string = 'FREE')

FILE: database/factories/ArticleFactory.php
  class ArticleFactory (line 9) | class ArticleFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/BillFactory.php
  class BillFactory (line 8) | class BillFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/CategoryFactory.php
  class CategoryFactory (line 9) | class CategoryFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/CaveFactory.php
  class CaveFactory (line 8) | class CaveFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/HeroFactory.php
  class HeroFactory (line 8) | class HeroFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/MeetingFactory.php
  class MeetingFactory (line 9) | class MeetingFactory extends Factory
    method definition (line 21) | public function definition(): array

FILE: database/factories/MenuItemFactory.php
  class MenuItemFactory (line 9) | class MenuItemFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/MonsterFactory.php
  class MonsterFactory (line 8) | class MonsterFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/PageFactory.php
  class PageFactory (line 9) | class PageFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/PetShop/BadgeFactory.php
  class BadgeFactory (line 8) | class BadgeFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/PetShop/InvoiceFactory.php
  class InvoiceFactory (line 11) | class InvoiceFactory extends Factory
    method definition (line 25) | public function definition()

FILE: database/factories/PetShop/InvoiceItemFactory.php
  class InvoiceItemFactory (line 9) | class InvoiceItemFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/PetShop/OwnerFactory.php
  class OwnerFactory (line 8) | class OwnerFactory extends Factory
    method definition (line 22) | public function definition()
    method configure (line 29) | public function configure()

FILE: database/factories/PetShop/PassportFactory.php
  class PassportFactory (line 9) | class PassportFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/PetShop/PetFactory.php
  class PetFactory (line 9) | class PetFactory extends Factory
    method definition (line 25) | public function definition()
    method configure (line 32) | public function configure()

FILE: database/factories/PetShop/SkillFactory.php
  class SkillFactory (line 9) | class SkillFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/PetShop/StoryFactory.php
  class StoryFactory (line 8) | class StoryFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/PostalBoxerFactory.php
  class PostalBoxerFactory (line 8) | class PostalBoxerFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/ProductFactory.php
  class ProductFactory (line 9) | class ProductFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/RecommendFactory.php
  class RecommendFactory (line 8) | class RecommendFactory extends Factory
    method definition (line 22) | public function definition()

FILE: database/factories/TagFactory.php
  class TagFactory (line 9) | class TagFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/factories/UserFactory.php
  class UserFactory (line 9) | class UserFactory extends Factory
    method definition (line 23) | public function definition()

FILE: database/migrations/2013_04_09_062329_create_backpack_revisions_table.php
  class CreateBackpackRevisionsTable (line 5) | class CreateBackpackRevisionsTable extends Migration
    method up (line 12) | public function up()
    method down (line 38) | public function down()

FILE: database/migrations/2014_10_12_000000_create_users_table.php
  class CreateUsersTable (line 6) | class CreateUsersTable extends Migration
    method up (line 13) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2014_10_12_100000_create_password_resets_table.php
  class CreatePasswordResetsTable (line 6) | class CreatePasswordResetsTable extends Migration
    method up (line 13) | public function up()
    method down (line 27) | public function down()

FILE: database/migrations/2015_08_04_130507_create_article_tag_table.php
  class CreateArticleTagTable (line 6) | class CreateArticleTagTable extends Migration
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2015_08_04_130520_create_articles_table.php
  class CreateArticlesTable (line 6) | class CreateArticlesTable extends Migration
    method up (line 13) | public function up()
    method down (line 35) | public function down()

FILE: database/migrations/2015_08_04_130551_create_categories_table.php
  class CreateCategoriesTable (line 6) | class CreateCategoriesTable extends Migration
    method up (line 13) | public function up()
    method down (line 32) | public function down()

FILE: database/migrations/2015_08_04_131614_create_settings_table.php
  class CreateSettingsTable (line 6) | class CreateSettingsTable extends Migration
    method up (line 13) | public function up()
    method down (line 32) | public function down()

FILE: database/migrations/2015_08_04_131626_create_tags_table.php
  class CreateTagsTable (line 6) | class CreateTagsTable extends Migration
    method up (line 13) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2016_05_05_115641_create_menu_items_table.php
  class CreateMenuItemsTable (line 6) | class CreateMenuItemsTable extends Migration
    method up (line 13) | public function up()
    method down (line 35) | public function down()

FILE: database/migrations/2016_05_25_121918_create_pages_table.php
  class CreatePagesTable (line 6) | class CreatePagesTable extends Migration
    method up (line 13) | public function up()
    method down (line 34) | public function down()

FILE: database/migrations/2016_07_24_060017_add_slug_to_categories_table.php
  class AddSlugToCategoriesTable (line 6) | class AddSlugToCategoriesTable extends Migration
    method up (line 13) | public function up()
    method down (line 25) | public function down()

FILE: database/migrations/2016_07_24_060101_add_slug_to_tags_table.php
  class AddSlugToTagsTable (line 6) | class AddSlugToTagsTable extends Migration
    method up (line 13) | public function up()
    method down (line 25) | public function down()

FILE: database/migrations/2017_04_20_100848_create_monsters_table.php
  class CreateMonstersTable (line 6) | class CreateMonstersTable extends Migration
    method up (line 13) | public function up()
    method down (line 89) | public function down()

FILE: database/migrations/2017_04_21_052454_create_monster_tag_table.php
  class CreateMonsterTagTable (line 7) | class CreateMonsterTagTable extends Migration
    method up (line 14) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2017_04_21_052455_create_monster_articles_table.php
  class CreateMonsterArticlesTable (line 7) | class CreateMonsterArticlesTable extends Migration
    method up (line 14) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2017_04_21_052456_create_monster_category_table.php
  class CreateMonsterCategoryTable (line 7) | class CreateMonsterCategoryTable extends Migration
    method up (line 14) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2017_12_18_075638_create_icons_table.php
  class CreateIconsTable (line 6) | class CreateIconsTable extends Migration
    method up (line 13) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2017_12_19_081247_create_products_table.php
  class CreateProductsTable (line 6) | class CreateProductsTable extends Migration
    method up (line 13) | public function up()
    method down (line 37) | public function down()

FILE: database/migrations/2018_12_12_075319_create_permission_tables.php
  class CreatePermissionTables (line 7) | class CreatePermissionTables extends Migration
    method up (line 14) | public function up()
    method down (line 94) | public function down()

FILE: database/migrations/2019_09_13_093251_create_failed_jobs_table.php
  class CreateFailedJobsTable (line 7) | class CreateFailedJobsTable extends Migration
    method up (line 14) | public function up()
    method down (line 31) | public function down()

FILE: database/migrations/2019_12_02_101119_add_browse_multiple_to_monsters_table.php
  class AddBrowseMultipleToMonstersTable (line 7) | class AddBrowseMultipleToMonstersTable extends Migration
    method up (line 14) | public function up()
    method down (line 26) | public function down()

FILE: database/migrations/2020_03_12_100831_alter_monsters_table_add_relationship_columns.php
  class AlterMonstersTableAddRelationshipColumns (line 7) | class AlterMonstersTableAddRelationshipColumns extends Migration
    method up (line 14) | public function up()
    method down (line 35) | public function down()

FILE: database/migrations/2020_03_12_100831_alter_monsters_table_remove_address.php
  class AlterMonstersTableRemoveAddress (line 7) | class AlterMonstersTableRemoveAddress extends Migration
    method up (line 14) | public function up()
    method down (line 26) | public function down()

FILE: database/migrations/2020_03_29_054416_create_dummy_table.php
  class CreateDummyTable (line 6) | class CreateDummyTable extends Migration
    method up (line 13) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2020_03_31_114745_add_columns_to_monster_table.php
  class AddColumnsToMonsterTable (line 7) | class AddColumnsToMonsterTable extends Migration
    method up (line 14) | public function up()
    method down (line 24) | public function down()

FILE: database/migrations/2020_03_31_114745_create_address_table.php
  class CreateAddressTable (line 7) | class CreateAddressTable extends Migration
    method up (line 14) | public function up()
    method down (line 31) | public function down()

FILE: database/migrations/2020_03_31_114745_create_pivotable_relations_tables.php
  class CreatePivotableRelationsTables (line 7) | class CreatePivotableRelationsTables extends Migration
    method up (line 14) | public function up()
    method down (line 77) | public function down()

FILE: database/migrations/2020_03_31_114745_remove_backpackuser_model.php
  class RemoveBackpackuserModel (line 7) | class RemoveBackpackuserModel extends Migration
    method up (line 14) | public function up()
    method replaceModels (line 25) | public function replaceModels($table_name)

FILE: database/migrations/2020_03_31_114745_rename_address_column_from_monsters.php
  class RenameAddressColumnFromMonsters (line 7) | class RenameAddressColumnFromMonsters extends Migration
    method up (line 14) | public function up()

FILE: database/migrations/2021_05_07_151146_make_notes_nullable_on_monster_product.php
  class MakeNotesNullableOnMonsterProduct (line 7) | class MakeNotesNullableOnMonsterProduct extends Migration
    method up (line 14) | public function up()
    method down (line 26) | public function down()

FILE: database/migrations/2021_08_08_130950_change_upload_multiple_column_in_monsters_table.php
  class ChangeUploadMultipleColumnInMonstersTable (line 7) | class ChangeUploadMultipleColumnInMonstersTable extends Migration
    method up (line 14) | public function up()
    method down (line 26) | public function down()

FILE: database/migrations/2021_10_13_081033_remove_simplemde_attribute_from_monsters.php
  class RemoveSimplemdeAttributeFromMonsters (line 7) | class RemoveSimplemdeAttributeFromMonsters extends Migration
    method up (line 14) | public function up()

FILE: database/migrations/2022_01_17_083405_create_owners_table.php
  class CreateOwnersTable (line 7) | class CreateOwnersTable extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2022_01_17_083526_create_invoices_table.php
  class CreateInvoicesTable (line 7) | class CreateInvoicesTable extends Migration
    method up (line 14) | public function up()
    method down (line 36) | public function down()

FILE: database/migrations/2022_01_17_083644_create_invoice_items_table.php
  class CreateInvoiceItemsTable (line 7) | class CreateInvoiceItemsTable extends Migration
    method up (line 14) | public function up()
    method down (line 36) | public function down()

FILE: database/migrations/2022_01_17_114317_create_pets_table.php
  class CreatePetsTable (line 7) | class CreatePetsTable extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2022_01_17_114318_create_owner_pet_table.php
  class CreateOwnerPetTable (line 7) | class CreateOwnerPetTable extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2022_01_17_114741_create_passports_table.php
  class CreatePassportsTable (line 7) | class CreatePassportsTable extends Migration
    method up (line 14) | public function up()
    method down (line 44) | public function down()

FILE: database/migrations/2022_01_17_120235_create_skills_table.php
  class CreateSkillsTable (line 7) | class CreateSkillsTable extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2022_01_17_120236_create_pet_skill_table.php
  class CreatePetSkillTable (line 7) | class CreatePetSkillTable extends Migration
    method up (line 14) | public function up()
    method down (line 27) | public function down()

FILE: database/migrations/2022_01_17_133436_create_avatars_table.php
  class CreateAvatarsTable (line 7) | class CreateAvatarsTable extends Migration
    method up (line 14) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2022_01_17_135143_create_comments_table.php
  class CreateCommentsTable (line 7) | class CreateCommentsTable extends Migration
    method up (line 14) | public function up()
    method down (line 31) | public function down()

FILE: database/migrations/2022_01_17_141636_create_badges_table.php
  class CreateBadgesTable (line 7) | class CreateBadgesTable extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2022_01_17_141725_create_badgeables_table.php
  class CreateBadgeablesTable (line 7) | class CreateBadgeablesTable extends Migration
    method up (line 14) | public function up()
    method down (line 31) | public function down()

FILE: database/migrations/2022_01_21_153540_create_countries_table.php
  class CreateCountriesTable (line 7) | class CreateCountriesTable extends Migration
    method up (line 14) | public function up()
    method down (line 34) | public function down()

FILE: database/migrations/2022_01_21_155236_create_graffitis_table.php
  class CreateGraffitisTable (line 7) | class CreateGraffitisTable extends Migration
    method up (line 14) | public function up()
    method down (line 32) | public function down()

FILE: database/migrations/2022_01_21_165125_add_country_id_addresses_table.php
  class AddCountryIdAddressesTable (line 7) | class AddCountryIdAddressesTable extends Migration
    method up (line 14) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2022_01_21_165552_create_wishes_table.php
  class CreateWishesTable (line 7) | class CreateWishesTable extends Migration
    method up (line 14) | public function up()
    method down (line 37) | public function down()

FILE: database/migrations/2022_01_21_165553_create_balls_table.php
  class CreateBallsTable (line 7) | class CreateBallsTable extends Migration
    method up (line 14) | public function up()
    method down (line 30) | public function down()

FILE: database/migrations/2022_01_21_165554_create_universes_table.php
  class CreateUniversesTable (line 7) | class CreateUniversesTable extends Migration
    method up (line 14) | public function up()
    method down (line 29) | public function down()

FILE: database/migrations/2022_01_22_063032_create_heroes_table.php
  class CreateHeroesTable (line 7) | class CreateHeroesTable extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2022_01_22_063323_add_hero_id_to_monsters_table.php
  class AddHeroIdToMonstersTable (line 7) | class AddHeroIdToMonstersTable extends Migration
    method up (line 14) | public function up()
    method down (line 26) | public function down()

FILE: database/migrations/2022_01_22_072809_create_stories_table.php
  class CreateStoriesTable (line 7) | class CreateStoriesTable extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2022_01_22_074008_add_story_id_to_monsters_table.php
  class AddStoryIdToMonstersTable (line 7) | class AddStoryIdToMonstersTable extends Migration
    method up (line 14) | public function up()
    method down (line 26) | public function down()

FILE: database/migrations/2022_01_22_145356_create_caves_table.php
  class CreateCavesTable (line 7) | class CreateCavesTable extends Migration
    method up (line 14) | public function up()
    method down (line 31) | public function down()

FILE: database/migrations/2022_01_22_145812_add_cave_id_to_monsters_table.php
  class AddCaveIdToMonstersTable (line 7) | class AddCaveIdToMonstersTable extends Migration
    method up (line 14) | public function up()
    method down (line 26) | public function down()

FILE: database/migrations/2022_10_08_084702_add_status_to_products.php
  method up (line 13) | public function up()

FILE: database/migrations/2022_11_20_221518_create_activity_log_table.php
  class CreateActivityLogTable (line 7) | class CreateActivityLogTable extends Migration
    method up (line 9) | public function up()
    method down (line 23) | public function down()

FILE: database/migrations/2022_11_20_221519_add_event_column_to_activity_log_table.php
  class AddEventColumnToActivityLogTable (line 7) | class AddEventColumnToActivityLogTable extends Migration
    method up (line 9) | public function up()
    method down (line 16) | public function down()

FILE: database/migrations/2022_11_20_221520_add_batch_uuid_column_to_activity_log_table.php
  class AddBatchUuidColumnToActivityLogTable (line 7) | class AddBatchUuidColumnToActivityLogTable extends Migration
    method up (line 9) | public function up()
    method down (line 16) | public function down()

FILE: database/migrations/2022_12_30_162821_add_soft_deletes_to_pets.php
  method up (line 13) | public function up()

FILE: database/migrations/2023_01_23_174016_add_status_to_monsters_table.php
  method up (line 13) | public function up()
  method down (line 25) | public function down()

FILE: database/migrations/2023_01_23_194158_add_features_to_monsters_table.php
  method up (line 13) | public function up()
  method down (line 25) | public function down()

FILE: database/migrations/2023_01_23_195752_add_ckeditor_to_monsters_table.php
  method up (line 13) | public function up()
  method down (line 25) | public function down()

FILE: database/migrations/2023_02_22_191429_create_media_table.php
  method up (line 8) | public function up(): void
  method down (line 32) | public function down(): void

FILE: database/migrations/2023_05_31_101941_add_dropzone_column_to_monsters_table.php
  method up (line 13) | public function up()
  method down (line 25) | public function down()

FILE: database/migrations/2023_07_13_071933_add_soft_deletes_to_invoices_table.php
  method up (line 11) | public function up(): void
  method down (line 21) | public function down(): void

FILE: database/migrations/2023_07_16_114745_rename_address_to_google_column_from_monsters.php
  class RenameAddressToGoogleColumnFromMonsters (line 7) | class RenameAddressToGoogleColumnFromMonsters extends Migration
    method up (line 14) | public function up()
    method down (line 28) | public function down()

FILE: database/migrations/2023_08_30_093542_add_email_verified_at_column_to_users.php
  method up (line 11) | public function up(): void
  method down (line 21) | public function down(): void

FILE: database/migrations/2023_11_23_111148_add_category_relationship_column_to_monsters_table.php
  method up (line 11) | public function up(): void
  method down (line 21) | public function down(): void

FILE: database/migrations/2024_02_03_225118_create_meetings_table.php
  method up (line 11) | public function up(): void
  method down (line 30) | public function down(): void

FILE: database/migrations/2024_04_11_085730_create_language_lines_table.php
  method up (line 13) | public function up(): void
  method down (line 29) | public function down(): void

FILE: database/migrations/2024_04_24_115407_add_json_api_fields_to_monster_table.php
  method up (line 11) | public function up(): void
  method down (line 22) | public function down(): void

FILE: database/migrations/2024_10_14_000001_create_pan_analytics_table.php
  method up (line 11) | public function up(): void
  method down (line 26) | public function down(): void

FILE: database/seeders/BadgeSeeder.php
  class BadgeSeeder (line 9) | class BadgeSeeder extends Seeder
    method run (line 18) | public function run()

FILE: database/seeders/CaveSeeder.php
  class CaveSeeder (line 8) | class CaveSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/CountryTableSeeder.php
  class CountryTableSeeder (line 8) | class CountryTableSeeder extends Seeder
    method run (line 266) | public function run()

FILE: database/seeders/DatabaseSeeder.php
  class DatabaseSeeder (line 18) | class DatabaseSeeder extends Seeder
    method run (line 25) | public function run()

FILE: database/seeders/HeroSeeder.php
  class HeroSeeder (line 8) | class HeroSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/IconsTableSeeder.php
  class IconsTableSeeder (line 8) | class IconsTableSeeder extends Seeder
    method run (line 34) | public function run()

FILE: database/seeders/InvoiceItemSeeder.php
  class InvoiceItemSeeder (line 8) | class InvoiceItemSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/InvoiceSeeder.php
  class InvoiceSeeder (line 8) | class InvoiceSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/MeetingSeeder.php
  class MeetingSeeder (line 8) | class MeetingSeeder extends Seeder
    method run (line 13) | public function run(): void

FILE: database/seeders/MillionCommentsSeeder.php
  class MillionCommentsSeeder (line 11) | class MillionCommentsSeeder extends Seeder
    method __construct (line 18) | public function __construct()
    method run (line 30) | public function run()

FILE: database/seeders/OwnerSeeder.php
  class OwnerSeeder (line 13) | class OwnerSeeder extends Seeder
    method run (line 20) | public function run()

FILE: database/seeders/PassportSeeder.php
  class PassportSeeder (line 8) | class PassportSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/PermissionManagerTablesSeeder.php
  class PermissionManagerTablesSeeder (line 11) | class PermissionManagerTablesSeeder extends Seeder
    method disableForeignKeyChecks (line 34) | protected function disableForeignKeyChecks()
    method enableForeignKeyChecks (line 54) | protected function enableForeignKeyChecks()
    method run (line 76) | public function run()

FILE: database/seeders/PetSeeder.php
  class PetSeeder (line 8) | class PetSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/PetShopSeeder.php
  class PetShopSeeder (line 15) | class PetShopSeeder extends Seeder
    method run (line 30) | public function run()

FILE: database/seeders/ReportDemoSeeder.php
  class ReportDemoSeeder (line 23) | class ReportDemoSeeder extends Seeder
    method run (line 25) | public function run(): void
    method seedInvoices (line 38) | private function seedInvoices(): void
    method seedMonsters (line 149) | private function seedMonsters(): void
    method seedProducts (line 232) | private function seedProducts(): void

FILE: database/seeders/SkillSeeder.php
  class SkillSeeder (line 9) | class SkillSeeder extends Seeder
    method run (line 16) | public function run()

FILE: database/seeders/StorySeeder.php
  class StorySeeder (line 8) | class StorySeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/UniversesSeeder.php
  class UniversesSeeder (line 8) | class UniversesSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/UsersTableSeeder.php
  class UsersTableSeeder (line 8) | class UsersTableSeeder extends Seeder
    method run (line 15) | public function run()

FILE: public/assets/js/ga.js
  function gtag (line 3) | function gtag()

FILE: public/assets/js/monster/test-custom-field.js
  function testCustomFieldMethods (line 8) | function testCustomFieldMethods() {

FILE: public/assets/js/monster/test-disable-field.js
  function testCrudFieldDisable (line 9) | function testCrudFieldDisable() {

FILE: public/assets/js/monster/test-enable-field.js
  function testCrudFieldEnable (line 9) | function testCrudFieldEnable() {

FILE: public/assets/js/monster/test-hide-field.js
  function testCrudFieldHide (line 9) | function testCrudFieldHide() {

FILE: public/assets/js/monster/test-onchange-field.js
  function testCrudFieldOnChange (line 9) | function testCrudFieldOnChange() {

FILE: public/assets/js/monster/test-require-field.js
  function testCrudFieldRequire (line 9) | function testCrudFieldRequire() {

FILE: public/assets/js/monster/test-show-field.js
  function testCrudFieldShow (line 9) | function testCrudFieldShow() {

FILE: public/assets/js/monster/test-top-scenarios.js
  function checkIfOneWeekOrMore (line 156) | function checkIfOneWeekOrMore() {

FILE: public/assets/js/monster/test-unrequire-field.js
  function testCrudFieldUnrequire (line 9) | function testCrudFieldUnrequire() {

FILE: tests/Feature/Admin/CaveCrudControllerTest.php
  class CaveCrudControllerTest (line 8) | class CaveCrudControllerTest extends \Tests\Feature\Backpack\DefaultTest...

FILE: tests/Feature/Admin/ColumnMonsterCrudControllerTest.php
  class ColumnMonsterCrudControllerTest (line 7) | class ColumnMonsterCrudControllerTest extends MonsterCrudControllerTest

FILE: tests/Feature/Admin/DummyCrudControllerTest.php
  class DummyCrudControllerTest (line 8) | class DummyCrudControllerTest extends \Tests\Feature\Backpack\DefaultTes...

FILE: tests/Feature/Admin/EditableMonsterCrudControllerTest.php
  class EditableMonsterCrudControllerTest (line 7) | class EditableMonsterCrudControllerTest extends MonsterCrudControllerTest

FILE: tests/Feature/Admin/FieldMonsterCrudControllerTest.php
  class FieldMonsterCrudControllerTest (line 7) | class FieldMonsterCrudControllerTest extends MonsterCrudControllerTest

FILE: tests/Feature/Admin/FluentMonsterCrudControllerTest.php
  class FluentMonsterCrudControllerTest (line 7) | class FluentMonsterCrudControllerTest extends MonsterCrudControllerTest

FILE: tests/Feature/Admin/HeroCrudControllerTest.php
  class HeroCrudControllerTest (line 8) | class HeroCrudControllerTest extends \Tests\Feature\Backpack\DefaultTest...

FILE: tests/Feature/Admin/IconCrudControllerTest.php
  class IconCrudControllerTest (line 8) | class IconCrudControllerTest extends \Tests\Feature\Backpack\DefaultTest...

FILE: tests/Feature/Admin/MeetingCrudControllerTest.php
  class MeetingCrudControllerTest (line 8) | class MeetingCrudControllerTest extends \Tests\Feature\Backpack\DefaultT...

FILE: tests/Feature/Admin/MonsterCrudControllerTest.php
  class MonsterCrudControllerTest (line 8) | class MonsterCrudControllerTest extends \Tests\Feature\Backpack\DefaultT...
    method setup (line 22) | public function setup(): void

FILE: tests/Feature/Admin/PetShop/BadgeCrudControllerTest.php
  class BadgeCrudControllerTest (line 8) | class BadgeCrudControllerTest extends \Tests\Feature\Backpack\DefaultTes...

FILE: tests/Feature/Admin/PetShop/CommentCrudControllerTest.php
  class CommentCrudControllerTest (line 8) | class CommentCrudControllerTest extends \Tests\Feature\Backpack\DefaultT...

FILE: tests/Feature/Admin/PetShop/InvoiceCrudControllerTest.php
  class InvoiceCrudControllerTest (line 8) | class InvoiceCrudControllerTest extends \Tests\Feature\Backpack\DefaultT...

FILE: tests/Feature/Admin/PetShop/OwnerCrudControllerTest.php
  class OwnerCrudControllerTest (line 8) | class OwnerCrudControllerTest extends \Tests\Feature\Backpack\DefaultTes...
    method setup (line 22) | public function setup(): void

FILE: tests/Feature/Admin/PetShop/OwnerPetsCrudControllerTest.php
  class OwnerPetsCrudControllerTest (line 7) | class OwnerPetsCrudControllerTest extends \Tests\Feature\Backpack\Defaul...
    method setup (line 24) | public function setup(): void
    method test_update_page_loads_successfully (line 40) | public function test_update_page_loads_successfully(): void
    method test_show_page_loads_successfully (line 57) | public function test_show_page_loads_successfully(): void

FILE: tests/Feature/Admin/PetShop/PassportCrudControllerTest.php
  class PassportCrudControllerTest (line 8) | class PassportCrudControllerTest extends \Tests\Feature\Backpack\Default...
    method setup (line 22) | public function setup(): void

FILE: tests/Feature/Admin/PetShop/PetCrudControllerTest.php
  class PetCrudControllerTest (line 8) | class PetCrudControllerTest extends \Tests\Feature\Backpack\DefaultTestBase
    method setup (line 21) | public function setup(): void

FILE: tests/Feature/Admin/PetShop/SkillCrudControllerTest.php
  class SkillCrudControllerTest (line 8) | class SkillCrudControllerTest extends \Tests\Feature\Backpack\DefaultTes...

FILE: tests/Feature/Admin/ProductCrudControllerTest.php
  class ProductCrudControllerTest (line 8) | class ProductCrudControllerTest extends \Tests\Feature\Backpack\DefaultT...

FILE: tests/Feature/Admin/StoryCrudControllerTest.php
  class StoryCrudControllerTest (line 8) | class StoryCrudControllerTest extends \Tests\Feature\Backpack\DefaultTes...

FILE: tests/Feature/Admin/UserCrudControllerTest.php
  class UserCrudControllerTest (line 8) | class UserCrudControllerTest extends \Tests\Feature\Backpack\DefaultTest...
    method setup (line 22) | public function setup(): void

FILE: tests/Feature/Backpack/DefaultCreateTests.php
  type DefaultCreateTests (line 5) | trait DefaultCreateTests
    method test_create_page_loads_successfully (line 14) | public function test_create_page_loads_successfully(): void
    method test_create_endpoint_adds_entry_to_database (line 28) | public function test_create_endpoint_adds_entry_to_database(): void
    method test_create_endpoint_rejects_invalid_input (line 44) | public function test_create_endpoint_rejects_invalid_input(): void

FILE: tests/Feature/Backpack/DefaultDeleteTests.php
  type DefaultDeleteTests (line 5) | trait DefaultDeleteTests
    method test_delete_endpoint_removes_entry_from_database (line 10) | public function test_delete_endpoint_removes_entry_from_database(): void

FILE: tests/Feature/Backpack/DefaultListTests.php
  type DefaultListTests (line 5) | trait DefaultListTests
    method test_list_page_loads_successfully (line 10) | public function test_list_page_loads_successfully(): void
    method test_datatables_returns_compatible_data (line 16) | public function test_datatables_returns_compatible_data(): void
    method test_filters_are_on_page (line 33) | public function test_filters_are_on_page(): void

FILE: tests/Feature/Backpack/DefaultShowTests.php
  type DefaultShowTests (line 5) | trait DefaultShowTests
    method test_show_page_loads_successfully (line 10) | public function test_show_page_loads_successfully(): void

FILE: tests/Feature/Backpack/DefaultTestBase.php
  class DefaultTestBase (line 7) | abstract class DefaultTestBase extends CrudFeatureTestCase
    method setUp (line 11) | protected function setUp(): void

FILE: tests/Feature/Backpack/DefaultUpdateTests.php
  type DefaultUpdateTests (line 5) | trait DefaultUpdateTests
    method test_update_page_loads_successfully (line 14) | public function test_update_page_loads_successfully(): void
    method test_update_endpoint_modifies_entry_in_database (line 32) | public function test_update_endpoint_modifies_entry_in_database(): void
Condensed preview — 412 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,001K chars).
[
  {
    "path": ".gitattributes",
    "chars": 61,
    "preview": "* text=auto\n*.css linguist-vendored\n*.scss linguist-vendored\n"
  },
  {
    "path": ".github/config.yml",
    "chars": 5634,
    "preview": "# Configuration for welcome - https://github.com/behaviorbot/welcome\n\n# Configuration for new-issue-welcome - https://gi"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 733,
    "preview": "version: 2\nupdates:\n- package-ecosystem: composer\n  directory: \"/\"\n  schedule:\n    interval: monthly\n  open-pull-request"
  },
  {
    "path": ".github/issue_template.md",
    "chars": 163,
    "preview": "# Bug report\n\n### What I did:\n\n### What I expected to happen:\n\n### What happened:\n\n### What I've already tried to fix it"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 295,
    "preview": "## WHY\n\n### BEFORE - What was wrong? What was happening before this PR?\n\n??\n\n### AFTER - What is happening after this PR"
  },
  {
    "path": ".github/stale.yml",
    "chars": 1059,
    "preview": "#####################################\n# Github Stale Probot Configuration #\n# ###################################\n# http"
  },
  {
    "path": ".github/support.yml",
    "chars": 1976,
    "preview": "# Configuration for support-requests - https://github.com/dessant/support-requests\n\n# Label used to mark issues as suppo"
  },
  {
    "path": ".github/workflows/add-to-project.yml",
    "chars": 454,
    "preview": "name: Add new bugs & PRs to This Week project\n\non:\n  issues:\n    types:\n      - opened\n      - transferred\n  pull_reques"
  },
  {
    "path": ".gitignore",
    "chars": 195,
    "preview": "/vendor\n/node_modules\n/public/storage\n/storage/backups\nHomestead.yaml\nHomestead.json\n.env\n.idea\n.DS_Store\n.packages\n.qua"
  },
  {
    "path": ".travis.yml",
    "chars": 1135,
    "preview": "language: php\n\nphp:\n  - 7.3\n  - 7.4\n  - 8.0\n  - nightly\n\nmatrix:\n    allow_failures:\n        - php: 7.2\n        - php: 7"
  },
  {
    "path": "Dockerfile",
    "chars": 1792,
    "preview": "FROM serversideup/php:8.3-fpm-nginx as base\n\nENV S6_CMD_WAIT_FOR_SERVICES=1\n\nCOPY --chmod=755 ./entrypoint.d/ /etc/entry"
  },
  {
    "path": "LICENSE.md",
    "chars": 2343,
    "preview": "# YUMMY License\n\n**YoU make Money, I make MoneY.** The license holder is allowed to use the software for free, as long a"
  },
  {
    "path": "app/Console/Commands/Inspire.php",
    "chars": 602,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Foundation\\Inspiring;\n\nclass Insp"
  },
  {
    "path": "app/Console/Commands/RefreshDb.php",
    "chars": 1044,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\Artisan;\nuse Illu"
  },
  {
    "path": "app/Console/Kernel.php",
    "chars": 622,
    "preview": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as C"
  },
  {
    "path": "app/Enums/MonsterStatus.php",
    "chars": 429,
    "preview": "<?php\n\nnamespace App\\Enums;\n\nenum MonsterStatus: string\n{\n    case WORKING = 'working';\n    case NOTWORKING = 'not-worki"
  },
  {
    "path": "app/Enums/ProductCondition.php",
    "chars": 364,
    "preview": "<?php\n\nnamespace App\\Enums;\n\nenum ProductCondition\n{\n    case NEW;\n    case USED;\n    case BROKEN;\n\n    public function "
  },
  {
    "path": "app/Enums/ProductStatus.php",
    "chars": 412,
    "preview": "<?php\n\nnamespace App\\Enums;\n\nenum ProductStatus: string\n{\n    case NOSTOCK = 'out-of-stock';\n    case INSTOCK = 'in-stoc"
  },
  {
    "path": "app/Events/Event.php",
    "chars": 62,
    "preview": "<?php\n\nnamespace App\\Events;\n\nabstract class Event\n{\n    //\n}\n"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "chars": 1569,
    "preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\Mo"
  },
  {
    "path": "app/Http/Controllers/Admin/AdminPageController.php",
    "chars": 396,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nclass AdminPageController\n{\n    /**\n     * Show the new in v7 page.\n     *"
  },
  {
    "path": "app/Http/Controllers/Admin/CaveCrudController.php",
    "chars": 5158,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\CaveRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/LatestUsersChartController.php",
    "chars": 1869,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts;\n\nuse App\\User;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartControlle"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/ChartjsLineChartController.php",
    "chars": 1306,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse C"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/EchartsLineChartController.php",
    "chars": 984,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse C"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/FrappeLineChartController.php",
    "chars": 973,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse C"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/HighchartsLineChartController.php",
    "chars": 990,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse C"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/NewEntriesChartController.php",
    "chars": 2487,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts;\n\nuse App\\User;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartControlle"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/ChartjsPieController.php",
    "chars": 823,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse Co"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/EchartsPieController.php",
    "chars": 813,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse Co"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/FrappePieController.php",
    "chars": 751,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse Co"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/HighchartsPieController.php",
    "chars": 819,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse Co"
  },
  {
    "path": "app/Http/Controllers/Admin/ColumnMonsterCrudController.php",
    "chars": 3333,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * C"
  },
  {
    "path": "app/Http/Controllers/Admin/DummyCrudController.php",
    "chars": 7775,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\DummyRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers"
  },
  {
    "path": "app/Http/Controllers/Admin/EditableMonsterCrudController.php",
    "chars": 2663,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MonsterRequest;\nuse Backpack\\CRUD\\app\\Library\\CrudPa"
  },
  {
    "path": "app/Http/Controllers/Admin/FieldMonsterCrudController.php",
    "chars": 6530,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Backp"
  },
  {
    "path": "app/Http/Controllers/Admin/FluentMonsterCrudController.php",
    "chars": 24362,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MonsterRequest as StoreRequest;\nuse Backpack\\CRUD\\ap"
  },
  {
    "path": "app/Http/Controllers/Admin/HeroCrudController.php",
    "chars": 3797,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\HeroRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\"
  },
  {
    "path": "app/Http/Controllers/Admin/IconCrudController.php",
    "chars": 2101,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\IconRequest as StoreRequest;\n// VALIDATION: change t"
  },
  {
    "path": "app/Http/Controllers/Admin/MeetingCrudController.php",
    "chars": 7488,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MeetingRequest;\nuse App\\Models\\Meeting;\nuse Backpack"
  },
  {
    "path": "app/Http/Controllers/Admin/MonsterCrudController.php",
    "chars": 82800,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MonsterRequest as StoreRequest;\n// VALIDATION: chang"
  },
  {
    "path": "app/Http/Controllers/Admin/Operations/SMSOperation.php",
    "chars": 2091,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Operations;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\Concerns\\HasF"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/BadgeCrudController.php",
    "chars": 2409,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\BadgeRequest;\nuse Backpack\\CRUD\\app\\Http\\Con"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/CommentCrudController.php",
    "chars": 3073,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\CommentRequest;\nuse App\\Models\\PetShop\\Pet;\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php",
    "chars": 8825,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\InvoiceRequest;\nuse Backpack\\CRUD\\app\\Http\\C"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/OwnerCrudController.php",
    "chars": 7984,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\OwnerRequest;\nuse Backpack\\CRUD\\app\\Http\\Con"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/OwnerPetsCrudController.php",
    "chars": 2431,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/PassportCrudController.php",
    "chars": 5219,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\PassportRequest;\nuse Backpack\\CRUD\\app\\Http\\"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/PetCrudController.php",
    "chars": 6242,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\PetRequest;\nuse Backpack\\CRUD\\app\\Http\\Contr"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/SkillCrudController.php",
    "chars": 2050,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\SkillRequest;\nuse Backpack\\CRUD\\app\\Http\\Con"
  },
  {
    "path": "app/Http/Controllers/Admin/ProductCrudController.php",
    "chars": 13905,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\ProductRequest as StoreRequest;\n// VALIDATION: chang"
  },
  {
    "path": "app/Http/Controllers/Admin/StoryCrudController.php",
    "chars": 2888,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\StoryRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers"
  },
  {
    "path": "app/Http/Controllers/Admin/UserCrudController.php",
    "chars": 651,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Backpack\\ActivityLog\\Enums\\ActivityLogEnum;\nuse Backpack\\CRUD\\app\\Libr"
  },
  {
    "path": "app/Http/Controllers/Api/ArticleController.php",
    "chars": 1192,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse Backpack\\NewsCRUD\\app\\Models\\Articl"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "chars": 377,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundat"
  },
  {
    "path": "app/Http/Kernel.php",
    "chars": 1840,
    "preview": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    "
  },
  {
    "path": "app/Http/Middleware/Authenticate.php",
    "chars": 706,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass Authenticate\n{\n    /**\n "
  },
  {
    "path": "app/Http/Middleware/CheckIfAdmin.php",
    "chars": 1602,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\n\nclass CheckIfAdmin\n{\n    /**\n     * Checked that the logged in user"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "chars": 300,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as BaseEncrypter;\n\nclass EncryptC"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "chars": 549,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n"
  },
  {
    "path": "app/Http/Middleware/Theme.php",
    "chars": 1273,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Config;\nuse Illuminate\\Support\\Facade"
  },
  {
    "path": "app/Http/Middleware/ValidateSignature.php",
    "chars": 460,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Routing\\Middleware\\ValidateSignature as Middleware;\n\nclass Validat"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "chars": 311,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as BaseVerifier;\n\nclass"
  },
  {
    "path": "app/Http/Requests/BadgeRequest.php",
    "chars": 976,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass BadgeRequest extends FormRequest"
  },
  {
    "path": "app/Http/Requests/CaveRequest.php",
    "chars": 1245,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CaveRequest extends FormRequest\n"
  },
  {
    "path": "app/Http/Requests/CommentRequest.php",
    "chars": 1247,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CommentRequest extends FormReque"
  },
  {
    "path": "app/Http/Requests/DummyRequest.php",
    "chars": 1423,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DummyRequest extends FormRequest"
  },
  {
    "path": "app/Http/Requests/HeroRequest.php",
    "chars": 975,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass HeroRequest extends FormRequest\n"
  },
  {
    "path": "app/Http/Requests/IconRequest.php",
    "chars": 1004,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nclass IconRequest extends \\Backpack\\CRUD\\app\\Http\\Requests\\CrudRequest\n{\n    /**\n  "
  },
  {
    "path": "app/Http/Requests/InvoiceRequest.php",
    "chars": 1479,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass InvoiceRequest extends FormReque"
  },
  {
    "path": "app/Http/Requests/MeetingRequest.php",
    "chars": 773,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MeetingRequest extends FormReque"
  },
  {
    "path": "app/Http/Requests/MonsterRequest.php",
    "chars": 1203,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nclass MonsterRequest extends \\Backpack\\CRUD\\app\\Http\\Requests\\CrudRequest\n{\n    /**"
  },
  {
    "path": "app/Http/Requests/OwnerRequest.php",
    "chars": 1119,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass OwnerRequest extends FormRequest"
  },
  {
    "path": "app/Http/Requests/PassportRequest.php",
    "chars": 1598,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass PassportRequest extends FormRequ"
  },
  {
    "path": "app/Http/Requests/PetRequest.php",
    "chars": 1020,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass PetRequest extends FormRequest\n{"
  },
  {
    "path": "app/Http/Requests/ProductRequest.php",
    "chars": 1070,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nclass ProductRequest extends \\Backpack\\CRUD\\app\\Http\\Requests\\CrudRequest\n{\n    /**"
  },
  {
    "path": "app/Http/Requests/Request.php",
    "chars": 136,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nabstract class Request extends FormReq"
  },
  {
    "path": "app/Http/Requests/SkillRequest.php",
    "chars": 976,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass SkillRequest extends FormRequest"
  },
  {
    "path": "app/Http/Requests/StoryRequest.php",
    "chars": 1253,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoryRequest extends FormRequest"
  },
  {
    "path": "app/Jobs/Job.php",
    "chars": 535,
    "preview": "<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\n\nabstract class Job\n{\n    /*\n    |----------------------------"
  },
  {
    "path": "app/Library/Elfinder.php",
    "chars": 549,
    "preview": "<?php\n\nnamespace App\\Library;\n\nclass Elfinder\n{\n    public static function checkAccess($attr, $path, $data, $volume)\n   "
  },
  {
    "path": "app/Listeners/.gitkeep",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "app/Models/Address.php",
    "chars": 852,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Article.php",
    "chars": 267,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\NewsCRUD\\app\\Models\\Article as OriginalAr"
  },
  {
    "path": "app/Models/Ball.php",
    "chars": 1924,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Bill.php",
    "chars": 1849,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Category.php",
    "chars": 271,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\NewsCRUD\\app\\Models\\Category as OriginalC"
  },
  {
    "path": "app/Models/Cave.php",
    "chars": 1755,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Country.php",
    "chars": 1657,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Dummy.php",
    "chars": 2896,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Graffiti.php",
    "chars": 1958,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Hero.php",
    "chars": 1151,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Icon.php",
    "chars": 1865,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Meeting.php",
    "chars": 492,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\"
  },
  {
    "path": "app/Models/MenuItem.php",
    "chars": 417,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\MenuCRUD\\app\\Models\\MenuItem as OriginalM"
  },
  {
    "path": "app/Models/Monster.php",
    "chars": 10975,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\MonsterStatus;\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Mod"
  },
  {
    "path": "app/Models/Page.php",
    "chars": 258,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\PageManager\\app\\Models\\Page as OriginalPa"
  },
  {
    "path": "app/Models/PetShop/Avatar.php",
    "chars": 709,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PetShop/Badge.php",
    "chars": 826,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PetShop/Comment.php",
    "chars": 1876,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Comment extends Model\n{\n    use \\Ba"
  },
  {
    "path": "app/Models/PetShop/Invoice.php",
    "chars": 2160,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PetShop/InvoiceItem.php",
    "chars": 1817,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PetShop/Owner.php",
    "chars": 1191,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PetShop/Passport.php",
    "chars": 1113,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PetShop/Pet.php",
    "chars": 1397,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PetShop/Skill.php",
    "chars": 687,
    "preview": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Elo"
  },
  {
    "path": "app/Models/PostalBox.php",
    "chars": 743,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/PostalBoxer.php",
    "chars": 1766,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Product.php",
    "chars": 4057,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\ProductStatus;\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Mod"
  },
  {
    "path": "app/Models/Recommend.php",
    "chars": 1869,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Sentiment.php",
    "chars": 1923,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Star.php",
    "chars": 1616,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Story.php",
    "chars": 1157,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Tag.php",
    "chars": 251,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\NewsCRUD\\app\\Models\\Tag as OriginalTag;\nu"
  },
  {
    "path": "app/Models/Traits/LogsActivity.php",
    "chars": 492,
    "preview": "<?php\n\nnamespace App\\Models\\Traits;\n\nuse Spatie\\Activitylog\\LogOptions;\nuse Spatie\\Activitylog\\Traits\\LogsActivity as Or"
  },
  {
    "path": "app/Models/Universe.php",
    "chars": 1627,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/Models/Wish.php",
    "chars": 2104,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Ill"
  },
  {
    "path": "app/PageTemplates.php",
    "chars": 2236,
    "preview": "<?php\n\nnamespace App;\n\ntrait PageTemplates\n{\n    /*\n    |---------------------------------------------------------------"
  },
  {
    "path": "app/Policies/.gitkeep",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "chars": 2050,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudField;\nuse Illuminate\\Database\\Eloquent\\Rel"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "chars": 540,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\n\ncl"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "chars": 543,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclas"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "chars": 562,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nc"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "chars": 1675,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\nus"
  },
  {
    "path": "app/User.php",
    "chars": 1284,
    "preview": "<?php\n\nnamespace App;\n\nuse Alert;\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse"
  },
  {
    "path": "app/helpers.php",
    "chars": 1201,
    "preview": "<?php\n\nif (!function_exists('backpack_pro_badge')) {\n    /**\n     * Echo a purple badge to tell the viewer this is a PRO"
  },
  {
    "path": "artisan",
    "chars": 1646,
    "preview": "#!/usr/bin/env php\n<?php\n\n/*\n|--------------------------------------------------------------------------\n| Register The "
  },
  {
    "path": "bootstrap/app.php",
    "chars": 1602,
    "preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------"
  },
  {
    "path": "bootstrap/autoload.php",
    "chars": 1079,
    "preview": "<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|------------------------------------------------------------------"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "chars": 3808,
    "preview": "{\n    \"name\": \"backpack/demo\",\n    \"description\": \"A Laravel + Backpack installation to show off most features.\",\n    \"k"
  },
  {
    "path": "config/app.php",
    "chars": 6761,
    "preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Facade;\n\nreturn [\n\n    /*\n    |---------------------------------------------------"
  },
  {
    "path": "config/auth.php",
    "chars": 3547,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "config/backpack/base.php",
    "chars": 4874,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Registrati"
  },
  {
    "path": "config/backpack/crud.php",
    "chars": 23269,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Backpack\\C"
  },
  {
    "path": "config/backpack/pagemanager.php",
    "chars": 316,
    "preview": "<?php\n\nreturn [\n    // Change this class if you wish to extend PageCrudController\n    'admin_controller_class' => 'Backp"
  },
  {
    "path": "config/backpack/permissionmanager.php",
    "chars": 1553,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Models\n   "
  },
  {
    "path": "config/backpack/testing.php",
    "chars": 75,
    "preview": "<?php\n\nreturn [\n    'controllers_path' => app_path('Http/Controllers'),\n];\n"
  },
  {
    "path": "config/backpack/theme-tabler.php",
    "chars": 6957,
    "preview": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Theme Confi"
  },
  {
    "path": "config/backpack/ui.php",
    "chars": 4330,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Theme (Use"
  },
  {
    "path": "config/backup.php",
    "chars": 10991,
    "preview": "<?php\n\nreturn [\n\n    'backup' => [\n\n        /* --------------------------------------\n         * Backpack\\BackupManager "
  },
  {
    "path": "config/broadcasting.php",
    "chars": 1643,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Br"
  },
  {
    "path": "config/cache.php",
    "chars": 2243,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ca"
  },
  {
    "path": "config/compile.php",
    "chars": 983,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Additional"
  },
  {
    "path": "config/database.php",
    "chars": 5141,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | PDO Fetch "
  },
  {
    "path": "config/debugbar.php",
    "chars": 8172,
    "preview": "<?php\n\nreturn [\n\n    /*\n     |--------------------------------------------------------------------------\n     | Debugbar"
  },
  {
    "path": "config/elfinder.php",
    "chars": 2368,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Upload dir"
  },
  {
    "path": "config/filesystems.php",
    "chars": 3051,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Fi"
  },
  {
    "path": "config/gravatar.php",
    "chars": 1632,
    "preview": "<?php\n\nreturn [\n    'default' => [\n\n        // By default, images are presented at 80px by 80px if no size parameter is "
  },
  {
    "path": "config/image.php",
    "chars": 509,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Image Driv"
  },
  {
    "path": "config/logging.php",
    "chars": 1964,
    "preview": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log"
  },
  {
    "path": "config/mail.php",
    "chars": 3237,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ma"
  },
  {
    "path": "config/permission.php",
    "chars": 4422,
    "preview": "<?php\n\nreturn [\n\n    'models' => [\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we ne"
  },
  {
    "path": "config/prologue/alerts.php",
    "chars": 959,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Alert Leve"
  },
  {
    "path": "config/queue.php",
    "chars": 2491,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Qu"
  },
  {
    "path": "config/services.php",
    "chars": 1063,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Part"
  },
  {
    "path": "config/session.php",
    "chars": 5815,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Se"
  },
  {
    "path": "config/sluggable.php",
    "chars": 4010,
    "preview": "<?php\n\nreturn [\n\n    /*\n     * What attributes do we use to build the slug?\n     * This can be a single field, like \"nam"
  },
  {
    "path": "config/view.php",
    "chars": 1020,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Stora"
  },
  {
    "path": "database/.gitignore",
    "chars": 9,
    "preview": "*.sqlite\n"
  },
  {
    "path": "database/factories/ArticleFactory.php",
    "chars": 891,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Article;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factor"
  },
  {
    "path": "database/factories/BillFactory.php",
    "chars": 548,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Bill;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass Bi"
  },
  {
    "path": "database/factories/CategoryFactory.php",
    "chars": 604,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Category;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Facto"
  },
  {
    "path": "database/factories/CaveFactory.php",
    "chars": 483,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Cave;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass Ca"
  },
  {
    "path": "database/factories/HeroFactory.php",
    "chars": 483,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Hero;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass He"
  },
  {
    "path": "database/factories/MeetingFactory.php",
    "chars": 1443,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Meeting;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factor"
  },
  {
    "path": "database/factories/MenuItemFactory.php",
    "chars": 1216,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\MenuItem;\nuse App\\Models\\Page;\nuse Illuminate\\Database\\Eloquent\\Fac"
  },
  {
    "path": "database/factories/MonsterFactory.php",
    "chars": 1803,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Monster;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass"
  },
  {
    "path": "database/factories/PageFactory.php",
    "chars": 810,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Page;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illum"
  },
  {
    "path": "database/factories/PetShop/BadgeFactory.php",
    "chars": 502,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Badge;\nuse Illuminate\\Database\\Eloquent\\Factories\\F"
  },
  {
    "path": "database/factories/PetShop/InvoiceFactory.php",
    "chars": 857,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Invoice;\nuse App\\Models\\PetShop\\Owner;\nuse Carbon\\C"
  },
  {
    "path": "database/factories/PetShop/InvoiceItemFactory.php",
    "chars": 817,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Invoice;\nuse App\\Models\\PetShop\\InvoiceItem;\nuse Il"
  },
  {
    "path": "database/factories/PetShop/OwnerFactory.php",
    "chars": 763,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Owner;\nuse Illuminate\\Database\\Eloquent\\Factories\\F"
  },
  {
    "path": "database/factories/PetShop/PassportFactory.php",
    "chars": 1181,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Passport;\nuse App\\Models\\PetShop\\Pet;\nuse Illuminat"
  },
  {
    "path": "database/factories/PetShop/PetFactory.php",
    "chars": 1523,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Pet;\nuse Illuminate\\Database\\Eloquent\\Factories\\Fac"
  },
  {
    "path": "database/factories/PetShop/SkillFactory.php",
    "chars": 602,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Skill;\nuse Illuminate\\Database\\Eloquent\\Factories\\F"
  },
  {
    "path": "database/factories/PetShop/StoryFactory.php",
    "chars": 494,
    "preview": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\Story;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n"
  },
  {
    "path": "database/factories/PostalBoxerFactory.php",
    "chars": 575,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\PostalBoxer;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nc"
  },
  {
    "path": "database/factories/ProductFactory.php",
    "chars": 1020,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Category;\nuse App\\Models\\Product;\nuse Illuminate\\Database\\Eloquent\\"
  },
  {
    "path": "database/factories/RecommendFactory.php",
    "chars": 563,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Recommend;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\ncla"
  },
  {
    "path": "database/factories/TagFactory.php",
    "chars": 589,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Tag;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\"
  },
  {
    "path": "database/factories/UserFactory.php",
    "chars": 729,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\S"
  },
  {
    "path": "database/migrations/.gitkeep",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "database/migrations/2013_04_09_062329_create_backpack_revisions_table.php",
    "chars": 1108,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateBackpackRevisionsTable extends Migration\n{\n    /**\n   "
  },
  {
    "path": "database/migrations/2014_10_12_000000_create_users_table.php",
    "chars": 699,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateUsersTable e"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "chars": 633,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreatePasswordRese"
  },
  {
    "path": "database/migrations/2015_08_04_130507_create_article_tag_table.php",
    "chars": 705,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateArticleTagTa"
  },
  {
    "path": "database/migrations/2015_08_04_130520_create_articles_table.php",
    "chars": 958,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateArticlesTabl"
  },
  {
    "path": "database/migrations/2015_08_04_130551_create_categories_table.php",
    "chars": 873,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateCategoriesTa"
  },
  {
    "path": "database/migrations/2015_08_04_131614_create_settings_table.php",
    "chars": 801,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateSettingsTabl"
  },
  {
    "path": "database/migrations/2015_08_04_131626_create_tags_table.php",
    "chars": 607,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateTagsTable ex"
  },
  {
    "path": "database/migrations/2016_05_05_115641_create_menu_items_table.php",
    "chars": 1046,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateMenuItemsTab"
  },
  {
    "path": "database/migrations/2016_05_25_121918_create_pages_table.php",
    "chars": 887,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreatePagesTable e"
  },
  {
    "path": "database/migrations/2016_07_24_060017_add_slug_to_categories_table.php",
    "chars": 627,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass AddSlugToCategorie"
  },
  {
    "path": "database/migrations/2016_07_24_060101_add_slug_to_tags_table.php",
    "chars": 609,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass AddSlugToTagsTable"
  },
  {
    "path": "database/migrations/2017_04_20_100848_create_monsters_table.php",
    "chars": 3237,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateMonstersTabl"
  },
  {
    "path": "database/migrations/2017_04_21_052454_create_monster_tag_table.php",
    "chars": 744,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2017_04_21_052455_create_monster_articles_table.php",
    "chars": 761,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2017_04_21_052456_create_monster_category_table.php",
    "chars": 764,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2017_12_18_075638_create_icons_table.php",
    "chars": 611,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateIconsTable e"
  }
]

// ... and 212 more files (download for full content)

About this extraction

This page contains the full source code of the Laravel-Backpack/demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 412 files (902.5 KB), approximately 248.5k tokens, and a symbol index with 801 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!