├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .styleci.yml ├── README.md ├── app ├── Actions │ ├── Fortify │ │ ├── CreateNewUser.php │ │ ├── PasswordValidationRules.php │ │ ├── ResetUserPassword.php │ │ ├── UpdateUserPassword.php │ │ └── UpdateUserProfileInformation.php │ └── Jetstream │ │ └── DeleteUser.php ├── Console │ ├── Commands │ │ └── UpdatePermissionsCommand.php │ └── Kernel.php ├── Exceptions │ └── Handler.php ├── Exports │ ├── ProductsExport.php │ └── UsersExport.php ├── Http │ ├── Controllers │ │ └── Controller.php │ ├── Kernel.php │ └── Middleware │ │ ├── AdminPanelCheck.php │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ ├── UserMobileVerifyCheck.php │ │ ├── UserVerifyCheck.php │ │ └── VerifyCsrfToken.php ├── Jobs │ └── SendMobileTextMessageJob.php ├── Livewire │ ├── Admin │ │ ├── Content │ │ │ ├── Article │ │ │ │ ├── Create.php │ │ │ │ ├── Edit.php │ │ │ │ └── Index.php │ │ │ ├── Carousel │ │ │ │ ├── Create.php │ │ │ │ ├── Edit.php │ │ │ │ └── Index.php │ │ │ └── FAQ │ │ │ │ ├── Create.php │ │ │ │ ├── Edit.php │ │ │ │ └── Index.php │ │ ├── Dashboard │ │ │ └── Index.php │ │ ├── Setting │ │ │ ├── Category │ │ │ │ ├── Create.php │ │ │ │ ├── Edit.php │ │ │ │ └── Index.php │ │ │ └── Manage │ │ │ │ └── Index.php │ │ ├── Support │ │ │ └── Ticket │ │ │ │ ├── Archive.php │ │ │ │ ├── Index.php │ │ │ │ └── View.php │ │ └── User │ │ │ ├── Ban.php │ │ │ ├── Create.php │ │ │ ├── Edit.php │ │ │ ├── Index.php │ │ │ ├── Permission │ │ │ ├── Create.php │ │ │ ├── Edit.php │ │ │ └── Index.php │ │ │ ├── Permissions.php │ │ │ ├── Role │ │ │ ├── Create.php │ │ │ ├── Edit.php │ │ │ ├── Index.php │ │ │ ├── Permissions.php │ │ │ └── Users.php │ │ │ ├── Roles.php │ │ │ ├── Team │ │ │ ├── Create.php │ │ │ ├── Edit.php │ │ │ ├── Index.php │ │ │ └── Users.php │ │ │ ├── Verify │ │ │ ├── Check.php │ │ │ └── Index.php │ │ │ └── Wallet │ │ │ └── Index.php │ ├── App │ │ ├── Article │ │ │ ├── Index.php │ │ │ └── View.php │ │ ├── FAQ │ │ │ └── Index.php │ │ ├── Main │ │ │ ├── Index.php │ │ │ └── TestChart.php │ │ └── Notification │ │ │ └── View.php │ └── Panel │ │ ├── Dashboard │ │ └── Index.php │ │ ├── Support │ │ └── Ticket │ │ │ ├── Create.php │ │ │ ├── Index.php │ │ │ └── View.php │ │ └── User │ │ ├── Mobile.php │ │ ├── Verify.php │ │ ├── Verify │ │ ├── UploadIdCardFile.php │ │ └── UploadVerifyFile.php │ │ └── Wallet │ │ ├── Create.php │ │ └── Index.php ├── ModelFilters │ ├── ArticleFilter.php │ ├── CarouselFilter.php │ ├── CategoryFilter.php │ ├── FrequentlyAskedQuestionFilter.php │ ├── ProductFilter.php │ ├── TeamFilter.php │ ├── TicketFilter.php │ └── UserFilter.php ├── Models │ ├── Article.php │ ├── Carousel.php │ ├── Category.php │ ├── City.php │ ├── Country.php │ ├── DatabaseStorageModel.php │ ├── Deposit.php │ ├── FrequentlyAskedQuestion.php │ ├── Product.php │ ├── ProductMedia.php │ ├── ProductPrice.php │ ├── Province.php │ ├── Team.php │ ├── Ticket.php │ ├── TicketFile.php │ ├── TicketReplay.php │ ├── Transaction.php │ ├── User.php │ ├── UserAddress.php │ ├── UserVerify.php │ ├── UserVerifyCode.php │ ├── UserWallet.php │ ├── Wallet.php │ └── Withdraw.php ├── Notifications │ └── TicketReplied.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ ├── FortifyServiceProvider.php │ ├── JetstreamServiceProvider.php │ └── RouteServiceProvider.php ├── Rules │ └── CheckUserVerifyCodeRule.php ├── Utils │ └── DatabaseStorage.php └── View │ └── Components │ ├── AdminLayout.php │ ├── AppLayout.php │ ├── GuestLayout.php │ └── PanelLayout.php ├── artisan ├── bootstrap ├── app.php └── cache │ └── .gitignore ├── composer.json ├── config ├── app.php ├── auth.php ├── authentication-log.php ├── bap.php ├── broadcasting.php ├── cache.php ├── cors.php ├── database.php ├── eloquentfilter.php ├── excel.php ├── filesystems.php ├── fortify.php ├── hashing.php ├── jetstream.php ├── laravellocalization.php ├── livewire-alert.php ├── livewire.php ├── log-viewer.php ├── logging.php ├── mail.php ├── modules.php ├── permission.php ├── queue.php ├── referral.php ├── sanctum.php ├── services.php ├── session.php ├── tags.php └── view.php ├── database ├── .gitignore ├── factories │ └── UserFactory.php ├── migrations │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2014_10_12_200000_add_two_factor_columns_to_users_table.php │ ├── 2017_03_04_000000_create_bans_table.php │ ├── 2017_09_01_000000_create_authentication_log_table.php │ ├── 2018_01_13_052648_create_cart_storage_table.php │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php │ ├── 2020_05_21_100000_create_teams_table.php │ ├── 2020_05_21_200000_create_team_user_table.php │ ├── 2020_05_21_300000_create_team_invitations_table.php │ ├── 2021_11_04_092349_create_sessions_table.php │ ├── 2021_11_10_154612_create_media_table.php │ ├── 2021_11_10_163124_create_tag_tables.php │ ├── 2021_11_11_133412_add_referral_to_users_table.php │ ├── 2021_11_11_180838_create_permission_tables.php │ ├── 2021_11_17_215228_create_categories_table.php │ ├── 2021_11_18_045302_create_articles_table.php │ ├── 2021_11_20_174843_create_tickets_table.php │ ├── 2021_11_20_175405_create_ticket_replays_table.php │ ├── 2021_11_20_175445_create_ticket_files_table.php │ ├── 2021_11_23_084216_create_frequently_asked_questions_table.php │ ├── 2021_11_28_145611_create_notifications_table.php │ ├── 2021_12_03_155818_create_user_verifies_table.php │ ├── 2022_03_03_053914_create_carousels_table.php │ ├── 2022_04_22_110910_add_teams_fields.php │ ├── 2022_05_26_033100_add_banned_at_column_to_users_table.php │ ├── 2022_05_28_164544_create_activity_log_table.php │ ├── 2022_05_28_164545_add_event_column_to_activity_log_table.php │ ├── 2022_05_28_164546_add_batch_uuid_column_to_activity_log_table.php │ ├── 2023_07_03_153439_create_user_verify_codes_table.php │ ├── 2023_07_07_091341_create_jobs_table.php │ ├── 2023_07_07_112319_create_wallets_table.php │ ├── 2023_07_16_071405_create_products_table.php │ ├── 2023_07_16_071504_create_product_media_table.php │ ├── 2023_07_16_071511_create_product_prices_table.php │ ├── 2023_07_16_072341_create_user_addresses_table.php │ ├── 2023_07_16_103144_create_countries_table.php │ ├── 2023_07_16_105225_create_provinces_table.php │ ├── 2023_07_16_105232_create_cities_table.php │ ├── 2023_07_22_061400_create_transactions_table.php │ ├── 2023_07_22_064355_create_deposits_table.php │ ├── 2023_07_22_064405_create_withdraws_table.php │ └── 2023_07_26_135127_create_user_wallets_table.php ├── seeders │ ├── CategorySeeder.php │ ├── CitySeeder.php │ ├── CountrySeeder.php │ ├── DatabaseSeeder.php │ ├── ProvinceSeeder.php │ ├── RoleAndPermissionSeeder.php │ └── UserSeeder.php └── sql │ ├── cities.sql │ ├── countries.sql │ └── provinces.sql ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── build │ ├── assets │ │ ├── app-0dfb6bff.css │ │ └── app-9c683e9d.js │ └── manifest.json ├── css │ └── app.css ├── favicon.ico ├── favicon │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── images │ ├── id-card.png │ ├── logo-dark.svg │ ├── logo-light.svg │ └── selfie.png ├── index.php ├── js │ ├── app.js │ └── app.js.LICENSE.txt ├── mix-manifest.json ├── robots.txt └── vendor │ └── livewire │ ├── livewire.esm.js │ ├── livewire.js │ ├── livewire.js.map │ ├── livewire.min.js │ ├── livewire.min.js.map │ └── manifest.json ├── resources ├── favicon │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── images │ ├── id-card.png │ ├── logo-dark.svg │ ├── logo-light.svg │ └── selfie.png ├── js │ ├── app.js │ └── bootstrap.js ├── lang │ ├── en │ │ ├── auth.php │ │ ├── bap.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── permissions.php │ │ ├── roles.php │ │ └── validation.php │ ├── fa.json │ ├── fa │ │ ├── auth.php │ │ ├── bap.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── validation-inline.php │ │ └── validation.php │ └── vendor │ │ ├── authentication-log │ │ └── en │ │ │ └── messages.php │ │ └── log-viewer │ │ ├── ar.json │ │ ├── bg.json │ │ ├── de.json │ │ ├── es.json │ │ ├── et.json │ │ ├── fa.json │ │ ├── fr.json │ │ ├── he.json │ │ ├── hu.json │ │ ├── hy.json │ │ ├── id.json │ │ ├── it.json │ │ ├── ja.json │ │ ├── ko.json │ │ ├── ms.json │ │ ├── nl.json │ │ ├── pl.json │ │ ├── pt-BR.json │ │ ├── ro.json │ │ ├── ru.json │ │ ├── si.json │ │ ├── sv.json │ │ ├── th.json │ │ ├── tr.json │ │ ├── uk.json │ │ ├── zh-TW.json │ │ └── zh.json ├── markdown │ ├── policy.md │ └── terms.md ├── scss │ ├── _custom.scss │ ├── _variables.scss │ ├── app.scss │ └── tabler.scss └── views │ ├── api │ ├── api-token-manager.blade.php │ └── index.blade.php │ ├── auth │ ├── confirm-password.blade.php │ ├── forgot-password.blade.php │ ├── login.blade.php │ ├── register.blade.php │ ├── reset-password.blade.php │ ├── two-factor-challenge.blade.php │ └── verify-email.blade.php │ ├── layouts │ ├── admin.blade.php │ ├── app.blade.php │ ├── custom │ │ ├── admin.blade.php │ │ ├── app.blade.php │ │ └── panel.blade.php │ ├── global │ │ ├── favicon.blade.php │ │ ├── foot-js.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ └── user-navbar.blade.php │ ├── guest.blade.php │ └── panel.blade.php │ ├── livewire │ ├── admin │ │ ├── content │ │ │ ├── article │ │ │ │ ├── create.blade.php │ │ │ │ ├── edit.blade.php │ │ │ │ └── index.blade.php │ │ │ ├── carousel │ │ │ │ ├── create.blade.php │ │ │ │ ├── edit.blade.php │ │ │ │ └── index.blade.php │ │ │ └── f-a-q │ │ │ │ ├── create.blade.php │ │ │ │ ├── edit.blade.php │ │ │ │ └── index.blade.php │ │ ├── dashboard │ │ │ └── index.blade.php │ │ ├── setting │ │ │ ├── category │ │ │ │ ├── create.blade.php │ │ │ │ ├── edit.blade.php │ │ │ │ └── index.blade.php │ │ │ └── manage │ │ │ │ └── index.blade.php │ │ ├── support │ │ │ └── ticket │ │ │ │ ├── archive.blade.php │ │ │ │ ├── index.blade.php │ │ │ │ └── view.blade.php │ │ └── user │ │ │ ├── ban.blade.php │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ ├── index.blade.php │ │ │ ├── permission │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ └── index.blade.php │ │ │ ├── permissions.blade.php │ │ │ ├── role │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ ├── index.blade.php │ │ │ ├── permissions.blade.php │ │ │ └── users.blade.php │ │ │ ├── roles.blade.php │ │ │ ├── team │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ ├── index.blade.php │ │ │ └── users.blade.php │ │ │ ├── verify │ │ │ ├── check.blade.php │ │ │ └── index.blade.php │ │ │ └── wallet │ │ │ └── index.blade.php │ ├── app │ │ ├── article │ │ │ ├── index.blade.php │ │ │ └── view.blade.php │ │ ├── f-a-q │ │ │ └── index.blade.php │ │ ├── main │ │ │ ├── index.blade.php │ │ │ └── test-chart.blade.php │ │ └── notification │ │ │ └── view.blade.php │ └── panel │ │ ├── dashboard │ │ └── index.blade.php │ │ ├── support │ │ └── ticket │ │ │ ├── create.blade.php │ │ │ ├── index.blade.php │ │ │ └── view.blade.php │ │ └── user │ │ ├── mobile.blade.php │ │ ├── verify.blade.php │ │ ├── verify │ │ ├── upload-id-card-file.blade.php │ │ └── upload-verify-file.blade.php │ │ └── wallet │ │ ├── create.blade.php │ │ └── index.blade.php │ ├── profile │ ├── delete-user-form.blade.php │ ├── logout-other-browser-sessions-form.blade.php │ ├── show.blade.php │ ├── two-factor-authentication-form.blade.php │ ├── update-password-form.blade.php │ └── update-profile-information-form.blade.php │ └── vendor │ ├── authentication-log │ └── emails │ │ └── new.blade.php │ ├── jetstream │ ├── components │ │ ├── action-message.blade.php │ │ ├── action-section.blade.php │ │ ├── application-logo.blade.php │ │ ├── application-mark.blade.php │ │ ├── authentication-card-logo.blade.php │ │ ├── authentication-card.blade.php │ │ ├── banner.blade.php │ │ ├── button.blade.php │ │ ├── checkbox.blade.php │ │ ├── confirmation-modal.blade.php │ │ ├── confirms-password.blade.php │ │ ├── danger-button.blade.php │ │ ├── dialog-modal.blade.php │ │ ├── dropdown-link.blade.php │ │ ├── dropdown.blade.php │ │ ├── form-section.blade.php │ │ ├── input-error.blade.php │ │ ├── input.blade.php │ │ ├── label.blade.php │ │ ├── modal.blade.php │ │ ├── nav-link.blade.php │ │ ├── secondary-button.blade.php │ │ ├── section-border.blade.php │ │ ├── section-title.blade.php │ │ ├── switchable-team.blade.php │ │ ├── validation-errors.blade.php │ │ └── welcome.blade.php │ └── mail │ │ └── team-invitation.blade.php │ └── log-viewer │ ├── bootstrap-3 │ ├── _master.blade.php │ ├── dashboard.blade.php │ ├── logs.blade.php │ └── show.blade.php │ └── bootstrap-4 │ ├── _master.blade.php │ ├── dashboard.blade.php │ ├── logs.blade.php │ └── show.blade.php ├── routes ├── api.php ├── channels.php ├── console.php └── web.php ├── screenshots ├── create_article.png ├── create_category.png ├── edit_user.png ├── manage_permissions.png ├── manage_roles.png ├── notification.png └── view_ticket.png ├── server.php ├── storage ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── CreatesApplication.php ├── Feature │ ├── ApiTokenPermissionsTest.php │ ├── AuthenticationTest.php │ ├── BrowserSessionsTest.php │ ├── CreateApiTokenTest.php │ ├── DeleteAccountTest.php │ ├── DeleteApiTokenTest.php │ ├── EmailVerificationTest.php │ ├── ExampleTest.php │ ├── LivewireBootstrapTest.php │ ├── PasswordConfirmationTest.php │ ├── PasswordResetTest.php │ ├── ProfileInformationTest.php │ ├── RegistrationTest.php │ ├── TwoFactorAuthenticationSettingsTest.php │ └── UpdatePasswordTest.php ├── TestCase.php └── Unit │ └── ExampleTest.php ├── webpack.config.js └── webpack.mix.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 4 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | 17 | [docker-compose.yml] 18 | indent_size = 4 19 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Laravel 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | LOG_CHANNEL=daily 8 | LOG_DEPRECATIONS_CHANNEL=null 9 | LOG_LEVEL=debug 10 | 11 | DB_CONNECTION=mysql 12 | DB_HOST=127.0.0.1 13 | DB_PORT=3306 14 | DB_DATABASE=laravel 15 | DB_USERNAME=root 16 | DB_PASSWORD= 17 | 18 | BROADCAST_DRIVER=log 19 | CACHE_DRIVER=file 20 | FILESYSTEM_DISK=local 21 | QUEUE_CONNECTION=database 22 | SESSION_DRIVER=database 23 | SESSION_LIFETIME=120 24 | 25 | MEMCACHED_HOST=127.0.0.1 26 | 27 | REDIS_HOST=127.0.0.1 28 | REDIS_PASSWORD=null 29 | REDIS_PORT=6379 30 | 31 | MAIL_MAILER=smtp 32 | MAIL_HOST=mailpit 33 | MAIL_PORT=1025 34 | MAIL_USERNAME=null 35 | MAIL_PASSWORD=null 36 | MAIL_ENCRYPTION=null 37 | MAIL_FROM_ADDRESS="info@bap.dev" 38 | MAIL_FROM_NAME="${APP_NAME}" 39 | 40 | AWS_ACCESS_KEY_ID= 41 | AWS_SECRET_ACCESS_KEY= 42 | AWS_DEFAULT_REGION=us-east-1 43 | AWS_BUCKET= 44 | AWS_USE_PATH_STYLE_ENDPOINT=false 45 | 46 | PUSHER_APP_ID= 47 | PUSHER_APP_KEY= 48 | PUSHER_APP_SECRET= 49 | PUSHER_HOST= 50 | PUSHER_PORT=443 51 | PUSHER_SCHEME=https 52 | PUSHER_APP_CLUSTER=mt1 53 | 54 | VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 55 | VITE_PUSHER_HOST="${PUSHER_HOST}" 56 | VITE_PUSHER_PORT="${PUSHER_PORT}" 57 | VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" 58 | VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 59 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | *.js linguist-vendored 5 | CHANGELOG.md export-ignore 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | .env 7 | .env.backup 8 | .phpunit.result.cache 9 | docker-compose.override.yml 10 | Homestead.json 11 | Homestead.yaml 12 | npm-debug.log 13 | yarn-error.log 14 | /.idea 15 | /.vscode 16 | composer.lock 17 | package-lock.json 18 | -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | php: 2 | preset: laravel 3 | version: 8 4 | disabled: 5 | - no_unused_imports 6 | finder: 7 | not-name: 8 | - index.php 9 | - server.php 10 | js: 11 | finder: 12 | not-name: 13 | - webpack.mix.js 14 | css: true 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ✔️ Bootstrap Admin Panel 2 | ====================== 3 | > Easy way to create Admin Panel. 4 | > 5 | ## 🔌 Requirements 6 | 7 | - PHP version: >= 8.0 8 | - Composer 9 | - Node.js 10 | - PHP extensions: GD, GMP, ZIP 11 | 12 | ## 🧰 Built with 13 | 14 | - Laravel 10.X 15 | - Livewire 3.X 16 | - Bootstrap 5 17 | - Tabler.io 18 | - SweetAlert2 19 | - spatie/laravel-permission 20 | - Laravel Mix Build Tools 21 | 22 | 23 | ## 🧾 Installation 24 | 25 | 1. `git clone https://github.com/aliqasemzadeh/bap BoostrapAdminPanel` 26 | 2. `cd BoostrapAdminPanel` 27 | 3. Install dependencies: 28 | 29 | `composer install` 30 | 31 | `npm install` 32 | 33 | 4. `cp .env.example .env` 34 | 5. `php artisan key:generate` 35 | 6. Set your `.env` with credentials to your database server (`DB_*` settings) and your domain config (`APP_URL`). 36 | 7. `php artisan migrate --seed` 37 | 8. Build frontend with `npm run production` for production. 38 | 9. Run your server `php artisan serve`. 39 | 10. Username:info@bap.local/Password:P@ssw0rd321 40 | 41 | 42 | 43 | Note 1: 44 | I decide to change Base Admin Panel to Bootstrap Admin Panel because is much better. 45 | 46 | Note 2: 47 | Any misuse of this software to launch illegal sites is not allowed and the responsibility for its use lies with the user's site. 48 | 49 | Note 3: We start new version ny the name jetadmin soon available. 50 | -------------------------------------------------------------------------------- /app/Actions/Fortify/CreateNewUser.php: -------------------------------------------------------------------------------- 1 | ['required', 'string', 'email', 'max:255', 'unique:users'], 26 | 'password' => $this->passwordRules(), 27 | 'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['required', 'accepted'] : '', 28 | ])->validate(); 29 | 30 | return User::create([ 31 | 'email' => $input['email'], 32 | 'password' => Hash::make($input['password']), 33 | ]); 34 | } 35 | 36 | 37 | /** 38 | * Get the validation rules used to validate passwords. 39 | * 40 | * @return array 41 | */ 42 | protected function passwordRules() 43 | { 44 | return ['required', 'string', new Password]; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/Actions/Fortify/PasswordValidationRules.php: -------------------------------------------------------------------------------- 1 | $this->passwordRules(), 24 | ])->validate(); 25 | 26 | $user->forceFill([ 27 | 'password' => Hash::make($input['password']), 28 | ])->save(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Actions/Fortify/UpdateUserPassword.php: -------------------------------------------------------------------------------- 1 | ['required', 'string'], 24 | 'password' => $this->passwordRules(), 25 | ])->after(function ($validator) use ($user, $input) { 26 | if (! isset($input['current_password']) || ! Hash::check($input['current_password'], $user->password)) { 27 | $validator->errors()->add('current_password', __('The provided password does not match your current password.')); 28 | } 29 | })->validateWithBag('updatePassword'); 30 | 31 | $user->forceFill([ 32 | 'password' => Hash::make($input['password']), 33 | ])->save(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Actions/Jetstream/DeleteUser.php: -------------------------------------------------------------------------------- 1 | deleteProfilePhoto(); 18 | $user->tokens->each->delete(); 19 | $user->delete(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Console/Commands/UpdatePermissionsCommand.php: -------------------------------------------------------------------------------- 1 | 'admin']); 33 | foreach (__('permissions') as $permission => $translate) { 34 | Permission::firstOrCreate( 35 | ['guard_name' => 'web', 'name' => $permission] 36 | ); 37 | $admin->givePermissionTo($permission); 38 | } 39 | return Command::SUCCESS; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire')->hourly(); 28 | } 29 | 30 | /** 31 | * Register the commands for the application. 32 | * 33 | * @return void 34 | */ 35 | protected function commands() 36 | { 37 | $this->load(__DIR__.'/Commands'); 38 | 39 | require base_path('routes/console.php'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | reportable(function (Throwable $e) { 38 | // 39 | }); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Exports/ProductsExport.php: -------------------------------------------------------------------------------- 1 | products = $products; 16 | } 17 | 18 | /** 19 | * @return \Illuminate\Support\Collection 20 | */ 21 | 22 | public function collection() 23 | { 24 | return Product::query()->whereIn('id', $this->products)->get(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Exports/UsersExport.php: -------------------------------------------------------------------------------- 1 | users = $users; 15 | } 16 | 17 | /** 18 | * @return \Illuminate\Support\Collection 19 | */ 20 | 21 | public function collection() 22 | { 23 | return User::query()->whereIn('id', $this->users)->get(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | can('admin_access')) { 22 | return $next($request); 23 | } else { 24 | return redirect()->route('home'); 25 | } 26 | } else { 27 | return redirect()->route('home'); 28 | } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Middleware/Authenticate.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 18 | return route('login'); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | check()) { 26 | return redirect(RouteServiceProvider::HOME); 27 | } 28 | } 29 | 30 | return $next($request); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | allSubdomainsOfApplicationUrl(), 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrustProxies.php: -------------------------------------------------------------------------------- 1 | mobile_verified_at) { 22 | return $next($request); 23 | } else { 24 | return redirect()->route('user.mobile'); 25 | } 26 | } 27 | return route('login'); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Http/Middleware/UserVerifyCheck.php: -------------------------------------------------------------------------------- 1 | verified_at) { 22 | return $next($request); 23 | } else { 24 | return redirect()->route('user.verify'); 25 | } 26 | } 27 | return route('login'); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | text = $text; 25 | $this->mobile = $mobile; 26 | } 27 | 28 | /** 29 | * Execute the job. 30 | */ 31 | public function handle(): void 32 | { 33 | // Send Mobile Text Message via any provider. 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Livewire/Admin/Content/FAQ/Create.php: -------------------------------------------------------------------------------- 1 | user()->can('admin_faq_create')) { 18 | return abort(403); 19 | } 20 | $this->validate([ 21 | 'question' => ['string', 'required'], 22 | 'answer' => ['string', 'required'], 23 | ]); 24 | 25 | $faq = new FrequentlyAskedQuestion(); 26 | $faq->question = $this->question; 27 | $faq->answer = $this->answer; 28 | $faq->save(); 29 | 30 | $this->dispatchTo(\App\Livewire\Admin\Content\FAQ\Index::getName(), 'updateList'); 31 | $this->dispatch('hideModal'); 32 | 33 | $this->alert('success', __('bap.created')); 34 | } 35 | 36 | 37 | public function render() 38 | { 39 | return view('livewire.admin.content.f-a-q.create'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Livewire/Admin/Content/FAQ/Edit.php: -------------------------------------------------------------------------------- 1 | faq = $faq; 19 | $this->answer = $faq->answer; 20 | $this->question = $faq->question; 21 | } 22 | 23 | public function edit() 24 | { 25 | if(!auth()->user()->can('admin_faq_edit')) { 26 | return abort(403); 27 | } 28 | 29 | $this->validate([ 30 | 'question' => ['string', 'required'], 31 | 'answer' => ['string', 'required'], 32 | ]); 33 | 34 | $faq = $this->faq; 35 | $faq->question = $this->question; 36 | $faq->answer = $this->answer; 37 | $faq->save(); 38 | 39 | $this->dispatchTo(\App\Livewire\Admin\Content\FAQ\Index::getName(), 'updateList'); 40 | $this->dispatch('hideModal'); 41 | 42 | $this->alert('success', __('bap.edited')); 43 | } 44 | 45 | 46 | public function render() 47 | { 48 | return view('livewire.admin.content.f-a-q.edit'); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/Livewire/Admin/Dashboard/Index.php: -------------------------------------------------------------------------------- 1 | user()->can('admin_dashboard_index')) { 14 | return abort(403); 15 | } 16 | 17 | return view('livewire.admin.dashboard.index')->layout('layouts.admin'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Livewire/Admin/Setting/Category/Create.php: -------------------------------------------------------------------------------- 1 | user()->can('admin_category_create')) { 20 | return abort(403); 21 | } 22 | $this->validate([ 23 | 'title' => ['string', 'required'], 24 | 'type' => 'required', 25 | 'language' => 'required', 26 | 'description' => 'nullable', 27 | ]); 28 | 29 | $category = new Category(); 30 | $category->title = $this->title; 31 | $category->type = $this->type; 32 | $category->language = $this->language; 33 | $category->description = $this->description; 34 | $category->save(); 35 | 36 | $this->dispatchTo(\App\Livewire\Admin\Setting\Category\Index::getName(), 'updateList'); 37 | $this->dispatch('hideModal'); 38 | 39 | $this->alert('success', __('bap.created')); 40 | } 41 | 42 | public function render() 43 | { 44 | return view('livewire.admin.setting.category.create'); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/Livewire/Admin/Setting/Manage/Index.php: -------------------------------------------------------------------------------- 1 | alert('success', __('bap.system_turned_on')); 18 | } 19 | 20 | public function turn_off() 21 | { 22 | Artisan::call("down"); 23 | $this->alert('success', __('bap.system_turned_off')); 24 | } 25 | 26 | #[On('admin.setting.manage.index')] 27 | public function render() 28 | { 29 | return view('livewire.admin.setting.manage.index')->layout('layouts.admin'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Livewire/Admin/User/Permission/Create.php: -------------------------------------------------------------------------------- 1 | user()->can('admin_permissions_create')) { 17 | return abort(403); 18 | } 19 | 20 | $this->validate([ 21 | 'name' => 'required|string' 22 | ]); 23 | 24 | Permission::create(['guard_name' => 'web', 'name' => $this->name]); 25 | 26 | $this->dispatchTo(\App\Livewire\Admin\User\Permission\Index::getName(), 'updateList'); 27 | $this->dispatch('hideModal'); 28 | 29 | $this->alert('success', __('bap.created')); 30 | } 31 | 32 | public function render() 33 | { 34 | if(!auth()->user()->can('admin_permissions_create')) { 35 | return abort(403); 36 | } 37 | return view('livewire.admin.user.permission.create'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Livewire/Admin/User/Role/Create.php: -------------------------------------------------------------------------------- 1 | user()->can('admin_roles_create')) { 17 | return abort(403); 18 | } 19 | 20 | $this->validate([ 21 | 'name' => 'required|string' 22 | ]); 23 | 24 | Role::create(['name' => $this->name]); 25 | 26 | $this->dispatch('admin.user.role.index'); 27 | $this->dispatch('hideModal'); 28 | 29 | $this->alert('success', __('bap.created')); 30 | } 31 | 32 | 33 | public function render() 34 | { 35 | if(!auth()->user()->can('admin_roles_create')) { 36 | return abort(403); 37 | } 38 | 39 | return view('livewire.admin.user.role.create'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Livewire/Admin/User/Role/Edit.php: -------------------------------------------------------------------------------- 1 | user()->can('admin_roles_edit')) { 18 | return abort(403); 19 | } 20 | 21 | $this->role = Role::findOrFail($role_id); 22 | $this->name = $this->role->name; 23 | } 24 | 25 | public function edit() 26 | { 27 | if(!auth()->user()->can('admin_roles_edit')) { 28 | return abort(403); 29 | } 30 | 31 | $this->validate([ 32 | 'name' => 'required|string' 33 | ]); 34 | 35 | $this->role->name = $this->name; 36 | $this->role->save(); 37 | 38 | $this->dispatch('admin.user.role.index'); 39 | $this->dispatch('hideModal'); 40 | 41 | $this->alert('success', __('bap.edited')); 42 | } 43 | 44 | public function render() 45 | { 46 | if(!auth()->user()->can('admin_roles_edit')) { 47 | return abort(403); 48 | } 49 | 50 | return view('livewire.admin.user.role.edit'); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/Livewire/Admin/User/Role/Users.php: -------------------------------------------------------------------------------- 1 | user()->can('admin_roles_users')) { 17 | return abort(403); 18 | } 19 | 20 | $this->role = Role::findOrFail($role_id); 21 | } 22 | 23 | #[On('admin.user.role.users')] 24 | public function render() 25 | { 26 | return view('livewire.admin.user.role.users'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Livewire/Admin/User/Team/Users.php: -------------------------------------------------------------------------------- 1 | team = $team; 14 | } 15 | 16 | public function render() 17 | { 18 | return view('livewire.admin.user.team.users'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Livewire/Admin/User/Wallet/Index.php: -------------------------------------------------------------------------------- 1 | user_id = $id; 17 | } 18 | 19 | #[On('admin.user.wallet.index')] 20 | 21 | public function render() 22 | { 23 | $user = User::findOrFail($this->user_id); 24 | $wallets = []; 25 | foreach (config('wallet') as $symbol => $walletItem) { 26 | $wallet = Wallet::firstOrCreate(['user_id' => $user->id, 'symbol' => $symbol]); 27 | $wallets[] = $wallet; 28 | } 29 | 30 | $wallets = collect($wallets); 31 | 32 | return view('livewire.admin.user.wallet.index', compact('wallets', 'user')); 33 | } 34 | 35 | public function exportTransactions($wallet_id) 36 | { 37 | 38 | } 39 | 40 | public function updateBalance($wallet_id) 41 | { 42 | 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/Livewire/App/Article/Index.php: -------------------------------------------------------------------------------- 1 | where('language', app()->getLocale())->paginate(config('bap.per-page')); 13 | return view('livewire.app.article.index', compact('articles')); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/Livewire/App/Article/View.php: -------------------------------------------------------------------------------- 1 | article = $article; 15 | } 16 | 17 | public function render() 18 | { 19 | return view('livewire.app.article.view'); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Livewire/App/FAQ/Index.php: -------------------------------------------------------------------------------- 1 | getLocale())->orderBy('created_at', 'DESC')->take(config('bap.home.count-carousels'))->get(); 17 | $displayItems = ['carousels' => $carousels]; 18 | } 19 | 20 | if(config('bap.home.display-articles')) { 21 | $articles = Article::where('language', app()->getLocale())->orderBy('created_at', 'DESC')->take(config('bap.home.count-articles'))->get(); 22 | $displayItems['articles'] = $articles; 23 | } 24 | 25 | return view('livewire.app.main.index', $displayItems); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Livewire/App/Main/TestChart.php: -------------------------------------------------------------------------------- 1 | setTitle('Expenses by Type') 18 | ->addColumn('Food', 75, '#f6ad55') 19 | ->addColumn('Test', 75, '#f6fd55') 20 | ; 21 | 22 | return view('livewire.app.main.test-chart', ['columnChartModel' => $columnChartModel]); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Livewire/App/Notification/View.php: -------------------------------------------------------------------------------- 1 | notifications()->findOrFail($notification); 15 | $notification->markAsRead(); 16 | return redirect($notification->data['url']); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/Livewire/Panel/Dashboard/Index.php: -------------------------------------------------------------------------------- 1 | layout('layouts.panel'); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/Livewire/Panel/User/Verify/UploadIdCardFile.php: -------------------------------------------------------------------------------- 1 | verify = $verify; 22 | $this->random_string = $verify->random_string; 23 | } 24 | 25 | public function upload() 26 | { 27 | $this->validate(['id_card_file' => 'required|image']); 28 | 29 | $this->verify->id_card_file = $this->id_card_file->store('id_card_files'); 30 | $this->verify->save(); 31 | 32 | $this->alert('success', __('bap.uploaded')); 33 | } 34 | 35 | public function displayIdCardFile(UserVerify $verify) 36 | { 37 | if(Auth::user()->id == $verify->user_id) { 38 | return Storage::download($verify->id_card_file); 39 | } 40 | abort('404'); 41 | } 42 | 43 | public function render() 44 | { 45 | return view('livewire.panel.user.verify.upload-id-card-file'); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/Livewire/Panel/User/Verify/UploadVerifyFile.php: -------------------------------------------------------------------------------- 1 | verify = $verify; 22 | $this->random_string = $verify->random_string; 23 | } 24 | 25 | public function upload() 26 | { 27 | $this->validate(['verify_file' => 'required|image']); 28 | 29 | $this->verify->verify_file = $this->verify_file->store('verify_files'); 30 | $this->verify->save(); 31 | 32 | $this->alert('success', __('bap.uploaded')); 33 | } 34 | 35 | public function displayVerifyFile(UserVerify $verify) 36 | { 37 | if(Auth::user()->id == $verify->user_id) { 38 | return Storage::download($verify->verify_file); 39 | } 40 | abort('404'); 41 | } 42 | 43 | public function render() 44 | { 45 | return view('livewire.panel.user.verify.upload-verify-file'); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/Livewire/Panel/User/Wallet/Create.php: -------------------------------------------------------------------------------- 1 | user()->id)->get(); 13 | return view('livewire.panel.user.wallet.index', compact('userWallets'))->layout('layouts.panel'); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/ModelFilters/ArticleFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = ['user', 'category']; 16 | 17 | public function search($query) 18 | { 19 | return $this->orWhere('title', 'LIKE', '%' . $query . '%') 20 | ->orWhere('body', 'LIKE', '%' . $query . '%') 21 | ->orWhere('description', 'LIKE', '%' . $query . '%'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/ModelFilters/CarouselFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = ['user']; 16 | 17 | public function search($query) 18 | { 19 | return $this->orWhere('title', 'LIKE', '%' . $query . '%') 20 | ->orWhere('description', 'LIKE', '%' . $query . '%'); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/ModelFilters/CategoryFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = []; 16 | 17 | public function search($query) 18 | { 19 | return $this->orWhere('title', 'LIKE', '%' . $query . '%') 20 | ->orWhere('description', 'LIKE', '%' . $query . '%'); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/ModelFilters/FrequentlyAskedQuestionFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = []; 16 | 17 | public function search($query) 18 | { 19 | return $this->orWhere('question', 'LIKE', '%' . $query . '%') 20 | ->orWhere('answer', 'LIKE', '%' . $query . '%'); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/ModelFilters/ProductFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = []; 16 | 17 | public function search($query) 18 | { 19 | return $this->orWhere('title', 'LIKE', '%' . $query . '%') 20 | ->orWhere('description', 'LIKE', '%' . $query . '%') 21 | ->orWhere('slug', 'LIKE', '%' . $query . '%') 22 | ->orWhere('id', 'LIKE', '%' . $query . '%'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/ModelFilters/TeamFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = []; 16 | } 17 | -------------------------------------------------------------------------------- /app/ModelFilters/TicketFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = []; 16 | 17 | public function search($query) 18 | { 19 | return $this->orWhere('title', 'LIKE', '%' . $query . '%'); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/ModelFilters/UserFilter.php: -------------------------------------------------------------------------------- 1 | [input_key1, input_key2]]. 12 | * 13 | * @var array 14 | */ 15 | public $relations = []; 16 | 17 | public function search($query) 18 | { 19 | return $this->orWhere('email', 'LIKE', '%' . $query . '%') 20 | ->orWhere('id', 'LIKE', '%' . $query . '%') 21 | ->orWhere('first_name', 'LIKE', '%' . $query . '%') 22 | ->orWhere('last_name', 'LIKE', '%' . $query . '%') 23 | ->orWhere('email', 'LIKE', '%' . $query . '%') 24 | ->orWhere('mobile', 'LIKE', '%' . $query . '%') 25 | ->orWhere('username', 'LIKE', '%' . $query . '%') 26 | ->orWhere('note', 'LIKE', '%' . $query . '%'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Models/Article.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 30 | } 31 | 32 | public function category() 33 | { 34 | return $this->belongsTo(Category::class); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Models/Carousel.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /app/Models/Category.php: -------------------------------------------------------------------------------- 1 | attributes['cart_data'] = serialize($value); 24 | } 25 | 26 | public function getCartDataAttribute($value) 27 | { 28 | return unserialize($value); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Models/Deposit.php: -------------------------------------------------------------------------------- 1 | 'array', 28 | ]; 29 | 30 | public function user() 31 | { 32 | return $this->belongsTo(User::class)->withTrashed(); 33 | } 34 | 35 | public static function defaultExpiresAt() 36 | { 37 | return Carbon::now()->addMinutes(24*60); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Models/FrequentlyAskedQuestion.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 15 | } 16 | 17 | public function users() 18 | { 19 | return $this->belongsToMany(User::class, 'team_user', 'user_id'); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Models/Ticket.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 19 | } 20 | 21 | public function category() 22 | { 23 | return $this->belongsTo(Category::class); 24 | } 25 | 26 | 27 | public function replays() 28 | { 29 | return $this->hasMany(TicketReplay::class, 'ticket_id', 'id'); 30 | } 31 | 32 | public function files() 33 | { 34 | return $this->hasMany(TicketFile::class, 'ticket_id', 'id'); 35 | } 36 | 37 | public function next(){ 38 | return UserTicket::whereIn('status', ['new','user'])->orderBy('updated_at', 'ASC')->first(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/Models/TicketFile.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class, 'user_id', 'id'); 17 | } 18 | 19 | public function ticket() 20 | { 21 | return $this->belongsTo(Ticket::class, 'ticket_id', 'id'); 22 | } 23 | 24 | public function replay() 25 | { 26 | return $this->belongsTo(TicketReplay::class); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Models/TicketReplay.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class, 'user_id', 'id'); 16 | } 17 | 18 | public function ticket() 19 | { 20 | return $this->belongsTo(Ticket::class, 'ticket_id', 'id'); 21 | } 22 | 23 | public function files() 24 | { 25 | return $this->hasMany(TicketFile::class, 'ticket_replay_id', 'id'); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Models/Transaction.php: -------------------------------------------------------------------------------- 1 | belongsTo(Wallet::class)->withTrashed(); 21 | } 22 | 23 | public function getActivitylogOptions(): LogOptions 24 | { 25 | return LogOptions::defaults() 26 | ->logOnly(['amount']); 27 | // Chain fluent methods for configuration options 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Models/UserAddress.php: -------------------------------------------------------------------------------- 1 | addMinutes(5); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Models/UserWallet.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class)->withDefault([ 19 | 'name' => __('bap.no_user'), 20 | ]);; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any authentication / authorization services. 21 | * 22 | * @return void 23 | */ 24 | public function boot() 25 | { 26 | $this->registerPolicies(); 27 | 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 19 | SendEmailVerificationNotification::class, 20 | ], 21 | ]; 22 | 23 | /** 24 | * Register any events for your application. 25 | * 26 | * @return void 27 | */ 28 | public function boot() 29 | { 30 | // 31 | } 32 | 33 | /** 34 | * Determine if events and listeners should be automatically discovered. 35 | * 36 | * @return bool 37 | */ 38 | public function shouldDiscoverEvents() 39 | { 40 | return false; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/Providers/JetstreamServiceProvider.php: -------------------------------------------------------------------------------- 1 | configurePermissions(); 29 | 30 | Jetstream::deleteUsersUsing(DeleteUser::class); 31 | } 32 | 33 | /** 34 | * Configure the permissions that are available within the application. 35 | * 36 | * @return void 37 | */ 38 | protected function configurePermissions() 39 | { 40 | Jetstream::defaultApiTokenPermissions(['read']); 41 | 42 | Jetstream::permissions([ 43 | 'create', 44 | 'read', 45 | 'update', 46 | 'delete', 47 | ]); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/Rules/CheckUserVerifyCodeRule.php: -------------------------------------------------------------------------------- 1 | type = $type; 23 | $this->method = $method; 24 | } 25 | /** 26 | * Run the validation rule. 27 | * 28 | * @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail 29 | */ 30 | public function validate(string $attribute, mixed $value, Closure $fail): void 31 | { 32 | $UserVerifyCodeCount = UserVerifyCode::where(['code' => $value, 'type' => $this->type, 'method' => $this->method, 'user_id' => Auth::user()->id])->where('status', 'unused')->count(); 33 | if($UserVerifyCodeCount == 0) { 34 | $fail(__('bap.verify_code_is_wrong')); 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /app/Utils/DatabaseStorage.php: -------------------------------------------------------------------------------- 1 | has($key)) 17 | { 18 | return new CartCollection(DatabaseStorageModel::find($key)->cart_data); 19 | } 20 | else 21 | { 22 | return []; 23 | } 24 | } 25 | public function put($key, $value) 26 | { 27 | if($row = DatabaseStorageModel::find($key)) 28 | { 29 | // update 30 | $row->cart_data = $value; 31 | $row->save(); 32 | } 33 | else 34 | { 35 | DatabaseStorageModel::create([ 36 | 'id' => $key, 37 | 'cart_data' => $value 38 | ]); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/View/Components/AdminLayout.php: -------------------------------------------------------------------------------- 1 | 'render']; 11 | 12 | /** 13 | * Create a new component instance. 14 | * 15 | * @return void 16 | */ 17 | public function __construct() 18 | { 19 | // 20 | } 21 | 22 | /** 23 | * Get the view / contents that represent the component. 24 | * 25 | * @return \Illuminate\Contracts\View\View|\Closure|string 26 | */ 27 | public function render() 28 | { 29 | return view('layouts.panel'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /config/authentication-log.php: -------------------------------------------------------------------------------- 1 | env('AUTHENTICATION_LOG_NOTIFY', true), 15 | 16 | /* 17 | |-------------------------------------------------------------------------- 18 | | Old Logs Clear 19 | |-------------------------------------------------------------------------- 20 | | 21 | | When the clean-command is executed, all authentication logs older than 22 | | the number of days specified here will be deleted. 23 | | 24 | */ 25 | 26 | 'older' => 365, 27 | 28 | ]; 29 | -------------------------------------------------------------------------------- /config/bap.php: -------------------------------------------------------------------------------- 1 | 'Bootstrap Admin Panel', 4 | 'container-app' => 'container', 5 | 'container-panel' => 'container-fluid', 6 | 'container-admin' => 'container-fluid', 7 | 'admin-prefix-url' => 'admin', 8 | 'panel-prefix-url' => 'panel', 9 | 'test-mode' => 0, 10 | 'per-page' => 15, 11 | 'verify_code_start' => 101010, 12 | 'verify_code_finish' => 989898, 13 | 'default-country' => 105, 14 | 15 | 'home' => [ 16 | 'display-carousels' => 1, 17 | 'count-carousels' => 5, 18 | 'display-articles' => 1, 19 | 'count-articles' => 5, 20 | ] 21 | ]; 22 | -------------------------------------------------------------------------------- /config/cors.php: -------------------------------------------------------------------------------- 1 | ['api/*', 'sanctum/csrf-cookie'], 19 | 20 | 'allowed_methods' => ['*'], 21 | 22 | 'allowed_origins' => ['*'], 23 | 24 | 'allowed_origins_patterns' => [], 25 | 26 | 'allowed_headers' => ['*'], 27 | 28 | 'exposed_headers' => [], 29 | 30 | 'max_age' => 0, 31 | 32 | 'supports_credentials' => false, 33 | 34 | ]; 35 | -------------------------------------------------------------------------------- /config/eloquentfilter.php: -------------------------------------------------------------------------------- 1 | 'App\\ModelFilters\\', 15 | 16 | /* 17 | |-------------------------------------------------------------------------- 18 | | Custom generator stub 19 | |-------------------------------------------------------------------------- 20 | | 21 | | If you want to override the default stub this package provides 22 | | you can enter the path to your own at this point 23 | | 24 | */ 25 | // 'generator' => [ 26 | // 'stub' => app_path('stubs/modelfilter.stub') 27 | // ] 28 | 29 | /* 30 | |-------------------------------------------------------------------------- 31 | | Default Paginator Limit For `paginateFilter` and `simplePaginateFilter` 32 | |-------------------------------------------------------------------------- 33 | | 34 | | Set paginate limit 35 | | 36 | */ 37 | 'paginate_limit' => env('PAGINATION_LIMIT_DEFAULT',15) 38 | 39 | ]; 40 | -------------------------------------------------------------------------------- /config/livewire-alert.php: -------------------------------------------------------------------------------- 1 | [ 9 | 'position' => 'bottom-end', 10 | 'timer' => 3000, 11 | 'toast' => true, 12 | 'text' => null, 13 | 'showCancelButton' => false, 14 | 'showConfirmButton' => false 15 | ], 16 | 'confirm' => [ 17 | 'icon' => 'warning', 18 | 'position' => 'center', 19 | 'toast' => false, 20 | 'timer' => null, 21 | 'showConfirmButton' => true, 22 | 'showCancelButton' => true, 23 | 'cancelButtonText' => 'No', 24 | 'confirmButtonColor' => '#3085d6', 25 | 'cancelButtonColor' => '#d33' 26 | ] 27 | ]; 28 | -------------------------------------------------------------------------------- /config/modules.php: -------------------------------------------------------------------------------- 1 | true, 9 | 'user_verify' => true, 10 | 'user_mobile_verify' => true, 11 | 'notification' => false, 12 | 'content' => true, 13 | 'support' => true, 14 | ]; 15 | -------------------------------------------------------------------------------- /config/referral.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * This source file is subject to the MIT license that is bundled 9 | * with this source code in the file LICENSE. 10 | */ 11 | 12 | return [ 13 | /* 14 | * Model class name of users. 15 | */ 16 | 'user_model' => 'App\Models\User', 17 | 18 | /* 19 | * The length of referral code. 20 | */ 21 | 'referral_length' => 20, 22 | ]; 23 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 21 | ], 22 | 23 | 'postmark' => [ 24 | 'token' => env('POSTMARK_TOKEN'), 25 | ], 26 | 27 | 'ses' => [ 28 | 'key' => env('AWS_ACCESS_KEY_ID'), 29 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 30 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 31 | ], 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /config/tags.php: -------------------------------------------------------------------------------- 1 | null, 10 | 11 | /* 12 | * The fully qualified class name of the tag model. 13 | */ 14 | 'tag_model' => Spatie\Tags\Tag::class, 15 | ]; 16 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | resource_path('views'), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => env( 32 | 'VIEW_COMPILED_PATH', 33 | realpath(storage_path('framework/views')) 34 | ), 35 | 36 | ]; 37 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite* 2 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token'); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists('password_resets'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_200000_add_two_factor_columns_to_users_table.php: -------------------------------------------------------------------------------- 1 | text('two_factor_secret') 18 | ->after('password') 19 | ->nullable(); 20 | 21 | $table->text('two_factor_recovery_codes') 22 | ->after('two_factor_secret') 23 | ->nullable(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::table('users', function (Blueprint $table) { 35 | $table->dropColumn('two_factor_secret', 'two_factor_recovery_codes'); 36 | }); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /database/migrations/2017_03_04_000000_create_bans_table.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | declare(strict_types=1); 13 | 14 | use Illuminate\Database\Migrations\Migration; 15 | use Illuminate\Database\Schema\Blueprint; 16 | use Illuminate\Support\Facades\Schema; 17 | 18 | class CreateBansTable extends Migration 19 | { 20 | /** 21 | * Run the migrations. 22 | * 23 | * @return void 24 | */ 25 | public function up(): void 26 | { 27 | Schema::create('bans', function (Blueprint $table) { 28 | $table->increments('id'); 29 | $table->morphs('bannable'); 30 | $table->nullableMorphs('created_by'); 31 | $table->text('comment')->nullable(); 32 | $table->timestamp('expired_at')->nullable(); 33 | $table->softDeletes(); 34 | $table->timestamps(); 35 | 36 | $table->index('expired_at'); 37 | }); 38 | } 39 | 40 | /** 41 | * Reverse the migrations. 42 | * 43 | * @return void 44 | */ 45 | public function down(): void 46 | { 47 | Schema::dropIfExists('bans'); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /database/migrations/2017_09_01_000000_create_authentication_log_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 18 | $table->morphs('authenticatable'); 19 | $table->string('ip_address', 45)->nullable(); 20 | $table->text('user_agent')->nullable(); 21 | $table->timestamp('login_at')->nullable(); 22 | $table->timestamp('logout_at')->nullable(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('authentication_log'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2018_01_13_052648_create_cart_storage_table.php: -------------------------------------------------------------------------------- 1 | string('id')->index(); 18 | $table->longText('cart_data'); 19 | $table->timestamps(); 20 | 21 | $table->primary('id'); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('cart_storage'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/migrations/2019_08_19_000000_create_failed_jobs_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('uuid')->unique(); 19 | $table->text('connection'); 20 | $table->text('queue'); 21 | $table->longText('payload'); 22 | $table->longText('exception'); 23 | $table->timestamp('failed_at')->useCurrent(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('failed_jobs'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 18 | $table->morphs('tokenable'); 19 | $table->string('name'); 20 | $table->string('token', 64)->unique(); 21 | $table->text('abilities')->nullable(); 22 | $table->timestamp('last_used_at')->nullable(); 23 | $table->timestamps(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('personal_access_tokens'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2020_05_21_100000_create_teams_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->foreignId('user_id')->index(); 19 | $table->string('name'); 20 | $table->boolean('personal_team'); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('teams'); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2020_05_21_200000_create_team_user_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->foreignId('team_id'); 19 | $table->foreignId('user_id'); 20 | $table->string('role')->nullable(); 21 | $table->timestamps(); 22 | 23 | $table->unique(['team_id', 'user_id']); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('team_user'); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /database/migrations/2020_05_21_300000_create_team_invitations_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->foreignId('team_id')->constrained()->cascadeOnDelete(); 19 | $table->string('email'); 20 | $table->string('role')->nullable(); 21 | $table->timestamps(); 22 | 23 | $table->unique(['team_id', 'email']); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('team_invitations'); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /database/migrations/2021_11_04_092349_create_sessions_table.php: -------------------------------------------------------------------------------- 1 | string('id')->primary(); 18 | $table->foreignId('user_id')->nullable()->index(); 19 | $table->string('ip_address', 45)->nullable(); 20 | $table->text('user_agent')->nullable(); 21 | $table->text('payload'); 22 | $table->integer('last_activity')->index(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('sessions'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2021_11_10_154612_create_media_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 13 | 14 | $table->morphs('model'); 15 | $table->uuid('uuid')->nullable()->unique(); 16 | $table->string('collection_name'); 17 | $table->string('name'); 18 | $table->string('file_name'); 19 | $table->string('mime_type')->nullable(); 20 | $table->string('disk'); 21 | $table->string('conversions_disk')->nullable(); 22 | $table->unsignedBigInteger('size'); 23 | $table->json('manipulations'); 24 | $table->json('custom_properties'); 25 | $table->json('generated_conversions'); 26 | $table->json('responsive_images'); 27 | $table->unsignedInteger('order_column')->nullable(); 28 | 29 | $table->nullableTimestamps(); 30 | }); 31 | } 32 | 33 | public function down() 34 | { 35 | Schema::dropIfExists('media'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /database/migrations/2021_11_10_163124_create_tag_tables.php: -------------------------------------------------------------------------------- 1 | id(); 13 | $table->json('name'); 14 | $table->json('slug'); 15 | $table->string('type')->nullable(); 16 | $table->integer('order_column')->nullable(); 17 | $table->timestamps(); 18 | }); 19 | 20 | Schema::create('taggables', function (Blueprint $table) { 21 | $table->foreignId('tag_id')->constrained()->cascadeOnDelete(); 22 | $table->morphs('taggable'); 23 | 24 | $table->unique(['tag_id', 'taggable_id', 'taggable_type']); 25 | }); 26 | } 27 | 28 | public function down() 29 | { 30 | Schema::drop('taggables'); 31 | Schema::drop('tags'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2021_11_11_133412_add_referral_to_users_table.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * This source file is subject to the MIT license that is bundled 9 | * with this source code in the file LICENSE. 10 | */ 11 | 12 | use Illuminate\Database\Migrations\Migration; 13 | use Illuminate\Database\Schema\Blueprint; 14 | use Illuminate\Support\Facades\Schema; 15 | 16 | class AddReferralToUsersTable extends Migration 17 | { 18 | /** 19 | * Run the migrations. 20 | */ 21 | public function up() 22 | { 23 | Schema::table('users', function (Blueprint $table) { 24 | $table->string('referred_by')->nullable()->index(); 25 | $table->string('affiliate_id')->unique(); 26 | }); 27 | } 28 | 29 | /** 30 | * Reverse the migrations. 31 | */ 32 | public function down() 33 | { 34 | Schema::table('users', function (Blueprint $table) { 35 | $table->dropColumn('referred_by'); 36 | $table->dropColumn('affiliate_id'); 37 | }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /database/migrations/2021_11_17_215228_create_categories_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('title'); 19 | $table->string('type')->index(); 20 | $table->string('icon')->nullable(); 21 | $table->string('image')->nullable(); 22 | $table->string('language')->default('en')->index(); 23 | $table->text('description')->nullable(); 24 | $table->bigInteger('sort_order')->default(1); 25 | $table->timestamps(); 26 | $table->softDeletes(); 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | * 33 | * @return void 34 | */ 35 | public function down() 36 | { 37 | Schema::dropIfExists('categories'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /database/migrations/2021_11_18_045302_create_articles_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('title'); 19 | $table->string('pre_title')->nullable(); 20 | $table->foreignId('user_id')->index(); 21 | $table->foreignId('category_id')->index(); 22 | $table->text('description')->nullable(); 23 | $table->longText('body')->nullable(); 24 | $table->string('language')->default('en')->index(); 25 | $table->boolean('public')->default(true); 26 | $table->bigInteger('likes')->default(0); 27 | $table->bigInteger('views')->default(0); 28 | $table->timestamp('publish_at')->nullable(); 29 | $table->timestamps(); 30 | $table->softDeletes(); 31 | }); 32 | } 33 | 34 | /** 35 | * Reverse the migrations. 36 | * 37 | * @return void 38 | */ 39 | public function down() 40 | { 41 | Schema::dropIfExists('articles'); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /database/migrations/2021_11_20_174843_create_tickets_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->bigInteger('user_id'); 19 | $table->string('title'); 20 | $table->string('status')->default('new'); //new, user, done, close, archive 21 | $table->bigInteger('category_id'); 22 | $table->bigInteger('assign_user_id')->nullable(); 23 | $table->ipAddress('ip')->nullable(); 24 | $table->timestamps(); 25 | $table->softDeletes(); 26 | 27 | $table->index('user_id'); 28 | $table->index('category_id'); 29 | $table->index('status'); 30 | }); 31 | } 32 | 33 | /** 34 | * Reverse the migrations. 35 | * 36 | * @return void 37 | */ 38 | public function down() 39 | { 40 | Schema::dropIfExists('tickets'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /database/migrations/2021_11_20_175405_create_ticket_replays_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->bigInteger('user_id'); 19 | $table->bigInteger('ticket_id'); 20 | $table->longText('body'); 21 | $table->ipAddress('ip')->nullable(); 22 | $table->timestamps(); 23 | $table->softDeletes(); 24 | 25 | $table->index('user_id'); 26 | $table->index('ticket_id'); 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | * 33 | * @return void 34 | */ 35 | public function down() 36 | { 37 | Schema::dropIfExists('ticket_replays'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /database/migrations/2021_11_20_175445_create_ticket_files_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->bigInteger('user_id'); 19 | $table->bigInteger('ticket_id'); 20 | $table->bigInteger('ticket_replay_id')->nullable(); 21 | $table->string('file'); 22 | $table->string('title'); 23 | $table->timestamps(); 24 | $table->softDeletes(); 25 | 26 | $table->index('user_id'); 27 | $table->index('ticket_id'); 28 | $table->index('ticket_replay_id'); 29 | }); 30 | } 31 | 32 | /** 33 | * Reverse the migrations. 34 | * 35 | * @return void 36 | */ 37 | public function down() 38 | { 39 | Schema::dropIfExists('ticket_files'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /database/migrations/2021_11_23_084216_create_frequently_asked_questions_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->longText('question'); 19 | $table->longText('answer'); 20 | $table->string('language')->default('en')->index(); 21 | $table->bigInteger('sort_order')->default(1); 22 | $table->timestamps(); 23 | $table->softDeletes(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('frequently_asked_questions'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2021_11_28_145611_create_notifications_table.php: -------------------------------------------------------------------------------- 1 | uuid('id')->primary(); 18 | $table->string('type'); 19 | $table->morphs('notifiable'); 20 | $table->text('data'); 21 | $table->timestamp('read_at')->nullable(); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('notifications'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2022_03_03_053914_create_carousels_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('title'); 19 | $table->string('link')->nullable(); 20 | $table->foreignId('user_id')->index(); 21 | $table->boolean('public')->default(true); 22 | $table->text('description')->nullable(); 23 | $table->string('language')->default('en')->index(); 24 | $table->bigInteger('sort_order')->default(1); 25 | $table->timestamps(); 26 | $table->softDeletes(); 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | * 33 | * @return void 34 | */ 35 | public function down() 36 | { 37 | Schema::dropIfExists('carousels'); 38 | } 39 | }; 40 | -------------------------------------------------------------------------------- /database/migrations/2022_05_26_033100_add_banned_at_column_to_users_table.php: -------------------------------------------------------------------------------- 1 | create(config('activitylog.table_name'), function (Blueprint $table) { 12 | $table->bigIncrements('id'); 13 | $table->string('log_name')->nullable(); 14 | $table->text('description'); 15 | $table->nullableMorphs('subject', 'subject'); 16 | $table->nullableMorphs('causer', 'causer'); 17 | $table->json('properties')->nullable(); 18 | $table->timestamps(); 19 | $table->index('log_name'); 20 | }); 21 | } 22 | 23 | public function down() 24 | { 25 | Schema::connection(config('activitylog.database_connection'))->dropIfExists(config('activitylog.table_name')); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /database/migrations/2022_05_28_164545_add_event_column_to_activity_log_table.php: -------------------------------------------------------------------------------- 1 | table(config('activitylog.table_name'), function (Blueprint $table) { 12 | $table->string('event')->nullable()->after('subject_type'); 13 | }); 14 | } 15 | 16 | public function down() 17 | { 18 | Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) { 19 | $table->dropColumn('event'); 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /database/migrations/2022_05_28_164546_add_batch_uuid_column_to_activity_log_table.php: -------------------------------------------------------------------------------- 1 | table(config('activitylog.table_name'), function (Blueprint $table) { 12 | $table->uuid('batch_uuid')->nullable()->after('properties'); 13 | }); 14 | } 15 | 16 | public function down() 17 | { 18 | Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) { 19 | $table->dropColumn('batch_uuid'); 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /database/migrations/2023_07_03_153439_create_user_verify_codes_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('status')->index()->default('unused'); 17 | $table->bigInteger('user_id')->index(); 18 | $table->string('type')->default('password')->index(); //password, withdraw, change, wallet 19 | $table->string('method')->default('email')->index(); //email, sms 20 | $table->string('ip')->nullable(); 21 | $table->string('value')->nullable(); 22 | $table->bigInteger('code')->nullable(); 23 | $table->expirable(); 24 | $table->timestamps(); 25 | $table->softDeletes(); 26 | 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | */ 33 | public function down(): void 34 | { 35 | Schema::dropIfExists('user_verify_codes'); 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /database/migrations/2023_07_07_091341_create_jobs_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 16 | $table->string('queue')->index(); 17 | $table->longText('payload'); 18 | $table->unsignedTinyInteger('attempts'); 19 | $table->unsignedInteger('reserved_at')->nullable(); 20 | $table->unsignedInteger('available_at'); 21 | $table->unsignedInteger('created_at'); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | */ 28 | public function down(): void 29 | { 30 | Schema::dropIfExists('jobs'); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /database/migrations/2023_07_07_112319_create_wallets_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->bigInteger('user_id')->index(); 17 | $table->string('symbol')->index(); 18 | $table->double('balance')->default(0); 19 | $table->double('locked')->default(0); 20 | $table->double('input')->default(0); 21 | $table->double('output')->default(0); 22 | $table->text('note')->nullable(); 23 | $table->timestamps(); 24 | $table->softDeletes(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | */ 31 | public function down(): void 32 | { 33 | Schema::dropIfExists('wallets'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /database/migrations/2023_07_16_071504_create_product_media_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->bigInteger('product_id')->index(); 17 | $table->string('type')->index(); 18 | $table->string('file')->nullable(); 19 | $table->timestamps(); 20 | $table->softDeletes(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | */ 27 | public function down(): void 28 | { 29 | Schema::dropIfExists('product_media'); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /database/migrations/2023_07_16_071511_create_product_prices_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->bigInteger('product_id')->index(); 17 | $table->double('price'); 18 | $table->timestamps(); 19 | $table->softDeletes(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | */ 26 | public function down(): void 27 | { 28 | Schema::dropIfExists('product_prices'); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_07_16_072341_create_user_addresses_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('title')->nullable(); 17 | $table->bigInteger('user_id')->index(); 18 | $table->longText('country_id')->index(); 19 | $table->longText('province_id')->index(); 20 | $table->longText('city_id')->index(); 21 | $table->longText('address'); 22 | $table->string('zipcode'); 23 | $table->timestamps(); 24 | $table->softDeletes(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | */ 31 | public function down(): void 32 | { 33 | Schema::dropIfExists('user_addresses'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /database/migrations/2023_07_16_103144_create_countries_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('code'); 17 | $table->string('name'); 18 | $table->bigInteger('phone'); 19 | $table->string('symbol'); 20 | $table->string('capital'); 21 | $table->string('currency'); 22 | $table->string('continent'); 23 | $table->string('continent_code'); 24 | $table->string('alpha_3'); 25 | $table->boolean('active')->default(true); 26 | $table->timestamps(); 27 | $table->softDeletes(); 28 | }); 29 | } 30 | 31 | /** 32 | * Reverse the migrations. 33 | */ 34 | public function down(): void 35 | { 36 | Schema::dropIfExists('countries'); 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /database/migrations/2023_07_16_105225_create_provinces_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('name'); 17 | $table->string('slug'); 18 | $table->bigInteger('country_id'); 19 | $table->timestamps(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | */ 26 | public function down(): void 27 | { 28 | Schema::dropIfExists('provinces'); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_07_16_105232_create_cities_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('name'); 17 | $table->string('slug')->nullable(); 18 | $table->bigInteger('province_id'); 19 | $table->timestamps(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | */ 26 | public function down(): void 27 | { 28 | Schema::dropIfExists('cities'); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_07_22_061400_create_transactions_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('type')->index(); 17 | $table->bigInteger('wallet_id')->index(); 18 | $table->bigInteger('linker_id')->index(); 19 | $table->double('amount')->default(0); 20 | $table->text('options')->nullable(); 21 | $table->timestamps(); 22 | $table->softDeletes(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | */ 29 | public function down(): void 30 | { 31 | Schema::dropIfExists('transactions'); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /database/migrations/2023_07_22_064355_create_deposits_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('status')->index()->default('draft'); 17 | $table->bigInteger('wallet_id')->index(); 18 | $table->bigInteger('user_id')->index(); 19 | $table->string('symbol')->index(); 20 | $table->string('network')->index(); 21 | $table->string('address')->index(); 22 | $table->string('txid')->index()->nullable(); 23 | $table->string('memo')->index()->nullable(); 24 | $table->double('rate')->default(0); 25 | $table->double('amount')->default(0); 26 | $table->longText('options')->nullable(); 27 | $table->timestamps(); 28 | $table->expirable(); 29 | $table->softDeletes(); 30 | }); 31 | } 32 | 33 | /** 34 | * Reverse the migrations. 35 | */ 36 | public function down(): void 37 | { 38 | Schema::dropIfExists('deposits'); 39 | } 40 | }; 41 | -------------------------------------------------------------------------------- /database/migrations/2023_07_22_064405_create_withdraws_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('status')->index()->default('pending'); 17 | $table->bigInteger('wallet_id')->index(); 18 | $table->bigInteger('user_id')->index(); 19 | $table->string('symbol')->index(); 20 | $table->string('network')->index(); 21 | $table->string('txid')->index()->nullable(); 22 | $table->string('address')->index(); 23 | $table->double('rate')->default(0); 24 | $table->double('amount')->default(0); 25 | $table->longText('options')->nullable(); 26 | $table->timestamps(); 27 | $table->softDeletes(); 28 | }); 29 | } 30 | 31 | /** 32 | * Reverse the migrations. 33 | */ 34 | public function down(): void 35 | { 36 | Schema::dropIfExists('withdraws'); 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /database/migrations/2023_07_26_135127_create_user_wallets_table.php: -------------------------------------------------------------------------------- 1 | id(); 16 | $table->string('title'); 17 | $table->string('status')->default('submit')->index(); 18 | $table->string('network')->index(); 19 | $table->string('symbol')->index(); 20 | $table->string('address')->index(); 21 | $table->string('memo')->nullable()->index(); 22 | $table->longText('note')->nullable(); 23 | $table->timestamps(); 24 | $table->softDeletes(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | */ 31 | public function down(): void 32 | { 33 | Schema::dropIfExists('user_wallets'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /database/seeders/CategorySeeder.php: -------------------------------------------------------------------------------- 1 | title = 'Main Support'; 22 | $category->type = 'ticket'; 23 | $category->language = 'en'; 24 | $category->save(); 25 | 26 | $category = new Category(); 27 | $category->title = 'News'; 28 | $category->type = 'article'; 29 | $category->language = 'en'; 30 | $category->save(); 31 | 32 | $category = new Category(); 33 | $category->title = 'Deposit'; 34 | $category->type = 'deposit'; 35 | $category->language = 'en'; 36 | $category->save(); 37 | 38 | $category = new Category(); 39 | $category->title = 'Withdraw'; 40 | $category->type = 'withdraw'; 41 | $category->language = 'en'; 42 | $category->save(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /database/seeders/CitySeeder.php: -------------------------------------------------------------------------------- 1 | call([ 17 | UserSeeder::class, 18 | CategorySeeder::class, 19 | RoleAndPermissionSeeder::class, 20 | CountrySeeder::class, 21 | ProvinceSeeder::class, 22 | CitySeeder::class, 23 | ]); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /database/seeders/ProvinceSeeder.php: -------------------------------------------------------------------------------- 1 | 'admin']); 20 | $support = Role::create(['name' => 'support']); 21 | 22 | foreach (__('permissions') as $permission => $translate) { 23 | Permission::create( 24 | ['guard_name' => 'web', 'name' => $permission] 25 | ); 26 | $admin->givePermissionTo($permission); 27 | } 28 | 29 | 30 | $user = User::findOrFail(1); 31 | $user->assignRole($admin); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/seeders/UserSeeder.php: -------------------------------------------------------------------------------- 1 | email = 'info@bap.local'; 21 | $user->password = Hash::make('P@ssw0rd321'); 22 | $user->email_verified_at = Carbon::now(); 23 | $user->save(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "npm run development", 5 | "development": "mix", 6 | "watch": "mix watch", 7 | "watch-poll": "mix watch -- --watch-options-poll=1000", 8 | "hot": "mix watch --hot", 9 | "prod": "npm run production", 10 | "production": "mix --production" 11 | }, 12 | "devDependencies": { 13 | "@popperjs/core": "^2.11.8", 14 | "alpinejs": "^3.12.2", 15 | "axios": "^1.4.0", 16 | "bootstrap": "^5.3.0", 17 | "laravel-mix": "^6.0.49", 18 | "lodash": "^4.17.21", 19 | "resolve-url-loader": "^5.0.0", 20 | "sass": "^1.63.6", 21 | "sass-loader": "^13.3.2" 22 | }, 23 | "dependencies": { 24 | "@alpinejs/intersect": "^3.13.3", 25 | "@alpinejs/persist": "^3.12.2", 26 | "@ryangjchandler/alpine-clipboard": "^2.2.0", 27 | "@tabler/core": "^1.0.0-beta19", 28 | "chart.js": "^4.3.0", 29 | "cryptocurrency-icons": "^0.18.1", 30 | "livewire": "^0.6.1", 31 | "sweetalert2": "^11.7.12" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests/Unit 10 | 11 | 12 | ./tests/Feature 13 | 14 | 15 | 16 | 17 | ./app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/build/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "resources/js/app.js": { 3 | "file": "assets/app-9c683e9d.js", 4 | "isEntry": true, 5 | "src": "resources/js/app.js" 6 | }, 7 | "resources/scss/app.scss": { 8 | "file": "assets/app-0dfb6bff.css", 9 | "isEntry": true, 10 | "src": "resources/scss/app.scss" 11 | } 12 | } -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon.ico -------------------------------------------------------------------------------- /public/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/favicon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon/favicon.ico -------------------------------------------------------------------------------- /public/favicon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/favicon/mstile-150x150.png -------------------------------------------------------------------------------- /public/favicon/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /public/images/id-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/images/id-card.png -------------------------------------------------------------------------------- /public/images/selfie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/public/images/selfie.png -------------------------------------------------------------------------------- /public/js/app.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v5.3.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | */ 6 | 7 | /*! 8 | * @kurkle/color v0.3.2 9 | * https://github.com/kurkle/color#readme 10 | * (c) 2023 Jukka Kurkela 11 | * Released under the MIT License 12 | */ 13 | 14 | /*! 15 | * Chart.js v4.3.0 16 | * https://www.chartjs.org 17 | * (c) 2023 Chart.js Contributors 18 | * Released under the MIT License 19 | */ 20 | 21 | /*! 22 | * The buffer module from node.js, for the browser. 23 | * 24 | * @author Feross Aboukhadijeh 25 | * @license MIT 26 | */ 27 | 28 | /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ 29 | 30 | /** 31 | * @license 32 | * Lodash 33 | * Copyright OpenJS Foundation and other contributors 34 | * Released under MIT license 35 | * Based on Underscore.js 1.8.3 36 | * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 37 | */ 38 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/vendor/livewire/manifest.json: -------------------------------------------------------------------------------- 1 | 2 | {"/livewire.js":"44144c23"} 3 | -------------------------------------------------------------------------------- /resources/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /resources/favicon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/favicon/android-chrome-512x512.png -------------------------------------------------------------------------------- /resources/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /resources/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /resources/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /resources/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /resources/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/favicon/favicon.ico -------------------------------------------------------------------------------- /resources/favicon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/favicon/mstile-150x150.png -------------------------------------------------------------------------------- /resources/favicon/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /resources/images/id-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/images/id-card.png -------------------------------------------------------------------------------- /resources/images/selfie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/images/selfie.png -------------------------------------------------------------------------------- /resources/js/app.js: -------------------------------------------------------------------------------- 1 | require('./bootstrap'); 2 | 3 | import Clipboard from "@ryangjchandler/alpine-clipboard"; 4 | 5 | Alpine.plugin(Clipboard.configure({ 6 | onCopy: () => { 7 | Swal.fire('Copied.'); 8 | } 9 | })); 10 | 11 | 12 | Alpine.plugin(Clipboard); 13 | -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'password' => 'The provided password is incorrect.', 18 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 19 | 20 | ]; 21 | -------------------------------------------------------------------------------- /resources/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Your password has been reset!', 17 | 'sent' => 'We have emailed your password reset link!', 18 | 'throttled' => 'Please wait before retrying.', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that email address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /resources/lang/en/roles.php: -------------------------------------------------------------------------------- 1 | 'Admin', 4 | 'support' => 'Support', 5 | ]; 6 | -------------------------------------------------------------------------------- /resources/lang/fa/auth.php: -------------------------------------------------------------------------------- 1 | 'مشخصات وارد شده با اطلاعات ما سازگار نیست.', 16 | 'password' => 'رمز عبور شما معتبر نیست.', 17 | 'throttle' => 'دفعات تلاش شما برای ورود بیش از حد مجاز است. لطفا پس از :seconds ثانیه مجددا تلاش فرمایید.', 18 | ]; 19 | -------------------------------------------------------------------------------- /resources/lang/fa/pagination.php: -------------------------------------------------------------------------------- 1 | 'بعدی »', 16 | 'previous' => '« قبلی', 17 | ]; 18 | -------------------------------------------------------------------------------- /resources/lang/fa/passwords.php: -------------------------------------------------------------------------------- 1 | 'رمز عبور شما بازگردانی شد!', 16 | 'sent' => 'لینک بازگردانی رمز عبور به ایمیل شما ارسال شد.', 17 | 'throttled' => 'پیش از تلاش مجدد کمی صبر کنید.', 18 | 'token' => 'مشخصه‌ی بازگردانی رمز عبور معتبر نیست.', 19 | 'user' => 'ما کاربری با این نشانی ایمیل نداریم!', 20 | ]; 21 | -------------------------------------------------------------------------------- /resources/lang/vendor/authentication-log/en/messages.php: -------------------------------------------------------------------------------- 1 | 'Login from a new device', 17 | 'content' => 'Your :app account logged in from a new device.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "تاريخ", 3 | "The list of logs is empty!": "قائمة سجلات فارغة!", 4 | "All": "الجميع", 5 | "Emergency": "حالات الطوارئ", 6 | "Alert": "إنذار", 7 | "Critical": "حرج", 8 | "Error": "خطأ", 9 | "Warning": "تحذير", 10 | "Notice": "ملاحظة", 11 | "Info": "المعلومات", 12 | "Debug": "التصحيح" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/bg.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Дата", 3 | "The list of logs is empty!": "Не са намерени логове!", 4 | "All": "Всички", 5 | "Emergency": "Emergency", 6 | "Alert": "Alert", 7 | "Critical": "Critical", 8 | "Error": "Error", 9 | "Warning": "Warning", 10 | "Notice": "Notice", 11 | "Info": "Info", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Datum", 3 | "The list of logs is empty!": "KeineLogDateiengefunden!", 4 | "All": "Alle", 5 | "Emergency": "Notfall", 6 | "Alert": "Alarm", 7 | "Critical": "Kritisch", 8 | "Error": "Fehler", 9 | "Warning": "Warnung", 10 | "Notice": "Hinweis", 11 | "Info": "Info", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Fecha", 3 | "The list of logs is empty!": "La lista del log está vacía!", 4 | "All": "Todos", 5 | "Emergency": "Emergencia", 6 | "Alert": "Alerta", 7 | "Critical": "Criticos", 8 | "Error": "Errores", 9 | "Warning": "Advertencia", 10 | "Notice": "Aviso", 11 | "Info": "Info", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/et.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Kuupäev", 3 | "The list of logs is empty!": "Logide nimekiri on tühi!", 4 | "All": "Kõik", 5 | "Emergency": "Erakorraline", 6 | "Alert": "Häire", 7 | "Critical": "Kriitiline", 8 | "Error": "Viga", 9 | "Warning": "Hoiatus", 10 | "Notice": "Teade", 11 | "Info": "Info", 12 | "Debug": "Silumine" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/fa.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "تاریخ", 3 | "The list of logs is empty!": "لیست لاگ ها خالی است!", 4 | "All": "همه", 5 | "Emergency": "اورژانسی", 6 | "Alert": "اخطار", 7 | "Critical": "بحرانی", 8 | "Error": "خطا", 9 | "Warning": "هشدار", 10 | "Notice": "اعلان", 11 | "Info": "اطلاعات", 12 | "Debug": "دیباگ" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Date", 3 | "The list of logs is empty!": "La liste des logs est vide !", 4 | "All": "Tous", 5 | "Emergency": "Urgence", 6 | "Alert": "Alerte", 7 | "Critical": "Critique", 8 | "Error": "Erreur", 9 | "Warning": "Avertissement", 10 | "Notice": "Notice", 11 | "Info": "Info", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/he.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "תאריך", 3 | "The list of logs is empty!": "רשימת הלוגים ריקה!", 4 | "All": "הכל", 5 | "Emergency": "חרום", 6 | "Alert": "אזעקה", 7 | "Critical": "קריטי", 8 | "Error": "שגיאה", 9 | "Warning": "אזהרה", 10 | "Notice": "הודעה", 11 | "Info": "מידע", 12 | "Debug": "ניפוי" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/hu.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Dátum", 3 | "The list of logs is empty!": "A naplók listája üres!", 4 | "All": "Összes", 5 | "Emergency": "Vészhelyzet", 6 | "Alert": "Riasztás", 7 | "Critical": "Kritikus", 8 | "Error": "Hiba", 9 | "Warning": "Figyelmeztetés", 10 | "Notice": "Értesítés", 11 | "Info": "Információ", 12 | "Debug": "Hibakeresés" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/hy.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Ամսաթիվ", 3 | "The list of logs is empty!": "Լոգերի ցուցակը դատարկ է։", 4 | "All": "Բոլորը", 5 | "Emergency": "Վթարային", 6 | "Alert": "Նախազգուշացում", 7 | "Critical": "Կրիտիկական", 8 | "Error": "Սխալ", 9 | "Warning": "Նախազգուշացում", 10 | "Notice": "Ծանուցում", 11 | "Info": "Տեղեկատվություն", 12 | "Debug": "Կարգաբերում" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Tanggal", 3 | "The list of logs is empty!": "Daftar Log Kosong", 4 | "All": "Semua", 5 | "Emergency": "Darurat", 6 | "Alert": "Waspada", 7 | "Critical": "Kritis", 8 | "Error": "Kesalahan", 9 | "Warning": "Peringatan", 10 | "Notice": "Pemberitahuan", 11 | "Info": "Info", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Data", 3 | "The list of logs is empty!": "L'elenco dei log è vuoto!", 4 | "All": "Tutti", 5 | "Emergency": "Emergenza", 6 | "Alert": "Allarme", 7 | "Critical": "Critico", 8 | "Error": "Errore", 9 | "Warning": "Avviso", 10 | "Notice": "Notifica", 11 | "Info": "Info", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "日付", 3 | "The list of logs is empty!": "ログリストが空です!", 4 | "All": "すべて", 5 | "Emergency": "緊急", 6 | "Alert": "警戒", 7 | "Critical": "致命的", 8 | "Error": "エラー", 9 | "Warning": "警告", 10 | "Notice": "通知", 11 | "Info": "情報", 12 | "Debug": "デバッグ" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "날짜", 3 | "The list of logs is empty!": "로그가 없습니다.", 4 | "All": "전체", 5 | "Emergency": "긴급", 6 | "Alert": "경고", 7 | "Critical": "심각", 8 | "Error": "오류", 9 | "Warning": "주의", 10 | "Notice": "알림", 11 | "Info": "정보", 12 | "Debug": "디버그" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/ms.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Tarikh", 3 | "The list of logs is empty!": "Senarai log kosong!", 4 | "All": "Semua", 5 | "Emergency": "Kecemasan", 6 | "Alert": "Waspada", 7 | "Critical": "Kritikal", 8 | "Error": "Ralat", 9 | "Warning": "Amaran", 10 | "Notice": "Notis", 11 | "Info": "Info", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Datum", 3 | "The list of logs is empty!": "De lijst met logs is leeg!", 4 | "All": "Alle", 5 | "Emergency": "Noodgeval", 6 | "Alert": "Alarm", 7 | "Critical": "Cruciaal", 8 | "Error": "Error", 9 | "Warning": "Waarschuwing", 10 | "Notice": "Opmerking", 11 | "Info": "Informatie", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Data", 3 | "The list of logs is empty!": "Lista logów jest pusta!", 4 | "All": "Wszystkie", 5 | "Emergency": "Awaryjne", 6 | "Alert": "Alerty", 7 | "Critical": "Krytyczne", 8 | "Error": "Błędy", 9 | "Warning": "Ostrzeżenia", 10 | "Notice": "Warte uwagi", 11 | "Info": "Informacje", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/pt-BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Data", 3 | "The list of logs is empty!": "A lista de logs está vazia!", 4 | "All": "Todos", 5 | "Emergency": "Emergência", 6 | "Alert": "Alerta", 7 | "Critical": "Crítico", 8 | "Error": "Erro", 9 | "Warning": "Aviso", 10 | "Notice": "Notícia", 11 | "Info": "Informação", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Dată", 3 | "The list of logs is empty!": "Nu există niciun log!", 4 | "All": "Toate", 5 | "Emergency": "Urgență", 6 | "Alert": "Alertă", 7 | "Critical": "Critic", 8 | "Error": "Eroare", 9 | "Warning": "Pericol", 10 | "Notice": "Avertisment", 11 | "Info": "Informare", 12 | "Debug": "Depanare" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Дата", 3 | "The list of logs is empty!": "Список журналов пуст!", 4 | "All": "Все", 5 | "Emergency": "Аварийная", 6 | "Alert": "Предупреждение", 7 | "Critical": "Критический", 8 | "Error": "Ошибка", 9 | "Warning": "Предупреждение", 10 | "Notice": "Уведомление", 11 | "Info": "Информация", 12 | "Debug": "Отладка" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/si.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "දිනය", 3 | "The list of logs is empty!": "සටහන් ලැයිස්තුව හිස්ය", 4 | "All": "සියල්ල", 5 | "Emergency": "හදිසි", 6 | "Alert": "පරීක්ෂාකාරී", 7 | "Critical": "අවදානම්", 8 | "Error": "දෝෂය", 9 | "Warning": "අවවාදය", 10 | "Notice": "නිවේදනය", 11 | "Info": "තොරතුරු", 12 | "Debug": "නිදොස්කරණය" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Datum", 3 | "The list of logs is empty!": "Det finns inga loggar att visa.", 4 | "All": "Alla", 5 | "Emergency": "Akut", 6 | "Alert": "Alarmerande", 7 | "Critical": "Kritisk", 8 | "Error": "Error", 9 | "Warning": "Varning", 10 | "Notice": "Notis", 11 | "Info": "Information", 12 | "Debug": "Debug" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/th.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "วันที่", 3 | "The list of logs is empty!": "ไม่มีรายการล็อก!", 4 | "All": "ทั้งหมด", 5 | "Emergency": "ฉุกเฉิน", 6 | "Alert": "วิกฤติ", 7 | "Critical": "ร้ายแรง", 8 | "Error": "ข้อผิดพลาด", 9 | "Warning": "คำเตือน", 10 | "Notice": "ประกาศ", 11 | "Info": "ข้อมูล", 12 | "Debug": "ดีบัก" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Tarih", 3 | "The list of logs is empty!": "Günlük listesi boş!", 4 | "All": "Tümü", 5 | "Emergency": "Acil", 6 | "Alert": "Alarm", 7 | "Critical": "Kritik", 8 | "Error": "Hata", 9 | "Warning": "Uyarı", 10 | "Notice": "Bildirim", 11 | "Info": "Bilgi", 12 | "Debug": "Hata ayıklama" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "Дата", 3 | "The list of logs is empty!": "Список журналів порожній!", 4 | "All": "Всі", 5 | "Emergency": "Аварійна", 6 | "Alert": "Попередження", 7 | "Critical": "Критична", 8 | "Error": "Помилка", 9 | "Warning": "Попереждення", 10 | "Notice": "Сповіщення", 11 | "Info": "Інформація", 12 | "Debug": "Відладка" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "日期", 3 | "The list of logs is empty!": "列表中沒有任何紀錄!", 4 | "All": "全部", 5 | "Emergency": "緊急", 6 | "Alert": "警報", 7 | "Critical": "嚴重", 8 | "Error": "錯誤", 9 | "Warning": "警告", 10 | "Notice": "注意", 11 | "Info": "訊息", 12 | "Debug": "除錯" 13 | } 14 | -------------------------------------------------------------------------------- /resources/lang/vendor/log-viewer/zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "Date": "日期", 3 | "The list of logs is empty!": "日志列表为空!", 4 | "All": "全部", 5 | "Emergency": "危急", 6 | "Alert": "紧急", 7 | "Critical": "严重", 8 | "Error": "错误", 9 | "Warning": "警告", 10 | "Notice": "注意", 11 | "Info": "信息", 12 | "Debug": "调试" 13 | } 14 | -------------------------------------------------------------------------------- /resources/markdown/policy.md: -------------------------------------------------------------------------------- 1 | # Privacy Policy 2 | 3 | Edit this file to define the privacy policy for your application. 4 | -------------------------------------------------------------------------------- /resources/markdown/terms.md: -------------------------------------------------------------------------------- 1 | # Terms of Service 2 | 3 | Edit this file to define the terms of service for your application. 4 | -------------------------------------------------------------------------------- /resources/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Body 2 | $body-bg: #f8fafc; 3 | 4 | // Typography 5 | $font-family-sans-serif: 'Nunito', sans-serif; 6 | $font-size-base: 0.9rem; 7 | $line-height-base: 1.6; 8 | 9 | // Colors 10 | $blue: #3490dc; 11 | $indigo: #6574cd; 12 | $purple: #9561e2; 13 | $pink: #f66d9b; 14 | $red: #e3342f; 15 | $orange: #f6993f; 16 | $yellow: #ffed4a; 17 | $green: #38c172; 18 | $teal: #4dc0b5; 19 | $cyan: #6cb2eb; 20 | -------------------------------------------------------------------------------- /resources/scss/app.scss: -------------------------------------------------------------------------------- 1 | // Fonts 2 | @import url('https://fonts.googleapis.com/css?family=Nunito'); 3 | 4 | // Variables 5 | @import "variables"; 6 | 7 | // Tabler 8 | @import "tabler"; 9 | @import 'sweetalert2/src/sweetalert2.scss'; 10 | 11 | // Custom 12 | @import "custom"; 13 | -------------------------------------------------------------------------------- /resources/scss/tabler.scss: -------------------------------------------------------------------------------- 1 | @import "@tabler/core/src/scss/tabler"; 2 | -------------------------------------------------------------------------------- /resources/views/api/index.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | {{ __('API Tokens') }} 5 |

6 |
7 | 8 |
9 | @livewire('api.api-token-manager') 10 |
11 |
-------------------------------------------------------------------------------- /resources/views/auth/confirm-password.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 |
10 | {{ __('This is a secure area of the application. Please confirm your password before continuing.') }} 11 |
12 | 13 | 14 | 15 |
16 | @csrf 17 | 18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | {{ __('Confirm') }} 26 | 27 |
28 |
29 |
30 |
31 |
32 | -------------------------------------------------------------------------------- /resources/views/auth/forgot-password.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 |
10 | {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }} 11 |
12 | 13 | @if (session('status')) 14 | 17 | @endif 18 | 19 | 20 | 21 |
22 | @csrf 23 | 24 |
25 | 26 | 27 |
28 | 29 |
30 | 31 | {{ __('Email Password Reset Link') }} 32 | 33 |
34 |
35 |
36 |
37 |
-------------------------------------------------------------------------------- /resources/views/layouts/custom/admin.blade.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/views/layouts/custom/admin.blade.php -------------------------------------------------------------------------------- /resources/views/layouts/custom/app.blade.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/views/layouts/custom/app.blade.php -------------------------------------------------------------------------------- /resources/views/layouts/custom/panel.blade.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/resources/views/layouts/custom/panel.blade.php -------------------------------------------------------------------------------- /resources/views/layouts/global/favicon.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /resources/views/layouts/global/foot-js.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | @stack('scripts') 9 | -------------------------------------------------------------------------------- /resources/views/layouts/global/header.blade.php: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /resources/views/layouts/guest.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | @if(isset($title)){{ $title }} - @endif{{ config('bap.name', 'BAP') }} 9 | 10 | @include('layouts.global.favicon') 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | {{ $slot }} 20 |
21 | 22 | @include('layouts.global.foot-js') 23 | 24 | 25 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/setting/manage/index.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {{-- The best athlete wants his opponent at his best. --}} 3 |
4 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/support/ticket/archive.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {{-- Knowing others is intelligence; knowing yourself is true wisdom. --}} 3 |
4 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/user/permission/create.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 22 |
23 | 24 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/user/permission/edit.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/user/role/create.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | 7 | 17 | 21 |
22 |
23 | 24 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/user/role/edit.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 22 |
23 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/user/role/users.blade.php: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /resources/views/livewire/admin/user/team/users.blade.php: -------------------------------------------------------------------------------- 1 | 20 | 21 | -------------------------------------------------------------------------------- /resources/views/livewire/app/article/view.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 3 | {{ $article->title }} 4 | 5 | 6 | {{ $article->pretitle }} 7 | 8 |
9 |
10 |
11 | @php 12 | $converter = new \League\CommonMark\CommonMarkConverter([ 13 | 'html_input' => 'strip', 14 | 'allow_unsafe_links' => false, 15 | ]); 16 | echo $converter->convertToHtml($article->body); 17 | @endphp 18 |
19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /resources/views/livewire/app/main/test-chart.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 | -------------------------------------------------------------------------------- /resources/views/livewire/app/notification/view.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {{-- The best athlete wants his opponent at his best. --}} 3 |
4 | -------------------------------------------------------------------------------- /resources/views/livewire/panel/dashboard/index.blade.php: -------------------------------------------------------------------------------- 1 | 2 | {{ __('bap.dashboard') }} 3 | 4 | 5 |
6 | 18 |
19 | -------------------------------------------------------------------------------- /resources/views/profile/show.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ __('bap.profile') }} 4 | 5 | 6 |
7 | @if (Laravel\Fortify\Features::canUpdateProfileInformation()) 8 | @livewire('profile.update-profile-information-form') 9 | 10 | 11 | @endif 12 | 13 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::updatePasswords())) 14 | @livewire('profile.update-password-form') 15 | 16 | 17 | @endif 18 | 19 | @if (Laravel\Fortify\Features::canManageTwoFactorAuthentication()) 20 | @livewire('profile.two-factor-authentication-form') 21 | 22 | 23 | @endif 24 | 25 | @livewire('profile.logout-other-browser-sessions-form') 26 | 27 | @if (Laravel\Jetstream\Jetstream::hasAccountDeletionFeatures()) 28 | 29 | 30 | @livewire('profile.delete-user-form') 31 | @endif 32 |
33 |
34 | -------------------------------------------------------------------------------- /resources/views/vendor/authentication-log/emails/new.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | # Hello! 3 | 4 | Your {{ config('app.name') }} account logged in from a new device. 5 | 6 | > **Account:** {{ $account->email }}
7 | > **Time:** {{ $time->toCookieString() }}
8 | > **IP Address:** {{ $ipAddress }}
9 | > **Browser:** {{ $browser }} 10 | 11 | If this was you, you can ignore this alert. If you suspect any suspicious activity on your account, please change your password. 12 | 13 | Regards,
{{ config('app.name') }} 14 | @endcomponent 15 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/action-message.blade.php: -------------------------------------------------------------------------------- 1 | @props(['on']) 2 | 3 | 12 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/action-section.blade.php: -------------------------------------------------------------------------------- 1 |
merge(['class' => 'row']) }}> 2 |
3 | 4 | {{ $title }} 5 | {{ $description }} 6 | 7 |
8 | 9 |
10 |
11 |
12 | {{ $content }} 13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/application-logo.blade.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/application-mark.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/authentication-card-logo.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/authentication-card.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{ $logo }} 4 |
5 | 6 |
7 | {{ $slot }} 8 |
9 |
10 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/button.blade.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/checkbox.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'form-check-input']) !!}> 2 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/confirmation-modal.blade.php: -------------------------------------------------------------------------------- 1 | @props(['id' => null, 'maxWidth' => null]) 2 | 3 | 4 | 24 | 25 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/danger-button.blade.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/dialog-modal.blade.php: -------------------------------------------------------------------------------- 1 | @props(['id' => null, 'maxWidth' => null]) 2 | 3 | 4 | 16 | 17 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/dropdown-link.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'dropdown-item px-4']) }}>{{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/dropdown.blade.php: -------------------------------------------------------------------------------- 1 | @props(['id']) 2 | 3 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/form-section.blade.php: -------------------------------------------------------------------------------- 1 | @props(['submit']) 2 | 3 |
merge(['class' => 'row']) }}> 4 |
5 | 6 | {{ $title }} 7 | 8 | 9 | {{ $description }} 10 | 11 | 12 | 13 |
14 |
15 |
16 |
17 |
18 | {{ $form }} 19 |
20 | 21 | @if (isset($actions)) 22 | 25 | @endif 26 |
27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/input-error.blade.php: -------------------------------------------------------------------------------- 1 | @props(['for']) 2 | 3 | @error($for) 4 | merge(['class' => 'invalid-feedback']) }} role="alert"> 5 | {{ $message }} 6 | 7 | @enderror 8 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/input.blade.php: -------------------------------------------------------------------------------- 1 | @props(['disabled' => false]) 2 | 3 | merge(['class' => 'form-control']) !!}> 4 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/label.blade.php: -------------------------------------------------------------------------------- 1 | @props(['value']) 2 | 3 | 6 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/modal.blade.php: -------------------------------------------------------------------------------- 1 | @props(['id', 'maxWidth']) 2 | 3 | @php 4 | $id = $id ?? md5($attributes->wire('model')); 5 | 6 | $maxWidth = [ 7 | 'sm' => ' modal-sm', 8 | 'md' => '', 9 | 'lg' => ' modal-lg', 10 | 'xl' => ' modal-xl', 11 | ][$maxWidth ?? 'md']; 12 | @endphp 13 | 14 | 15 | 49 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/nav-link.blade.php: -------------------------------------------------------------------------------- 1 | @props(['active']) 2 | 3 | @php 4 | $classes = ($active ?? false) 5 | ? 'nav-link active font-weight-bolder' 6 | : 'nav-link'; 7 | @endphp 8 | 9 | 14 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/secondary-button.blade.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/section-border.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/section-title.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 | {{ $title }} 6 |

7 | 8 |

9 | {{ $description }} 10 |

11 |
12 | 13 |
14 | {{ $aside ?? '' }} 15 |
16 |
17 |
-------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/switchable-team.blade.php: -------------------------------------------------------------------------------- 1 | @props(['team', 'component' => 'jet-dropdown-link']) 2 | 3 | 5 |
6 | @if (Auth::user()->isCurrentTeam($team)) 7 | 8 | @endif 9 | 10 |
{{ $team->name }}
11 |
12 | 13 |
14 | @method('PUT') 15 | @csrf 16 | 17 | 18 | 19 |
20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/components/validation-errors.blade.php: -------------------------------------------------------------------------------- 1 | @if ($errors->any()) 2 |
merge(['class' => 'alert alert-danger text-sm p-2']) !!} role="alert"> 3 |
{{ __('Whoops! Something went wrong.') }}
4 | 5 |
    6 | @foreach ($errors->all() as $error) 7 |
  • {{ $error }}
  • 8 | @endforeach 9 |
10 |
11 | @endif 12 | -------------------------------------------------------------------------------- /resources/views/vendor/jetstream/mail/team-invitation.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | {{ __('You have been invited to join the :team team!', ['team' => $invitation->team->name]) }} 3 | 4 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::registration())) 5 | {{ __('If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:') }} 6 | 7 | @component('mail::button', ['url' => route('register')]) 8 | {{ __('Create Account') }} 9 | @endcomponent 10 | 11 | {{ __('If you already have an account, you may accept this invitation by clicking the button below:') }} 12 | 13 | @else 14 | {{ __('You may accept this invitation by clicking the button below:') }} 15 | @endif 16 | 17 | 18 | @component('mail::button', ['url' => $acceptUrl]) 19 | {{ __('Accept Invitation') }} 20 | @endcomponent 21 | 22 | {{ __('If you did not expect to receive an invitation to this team, you may discard this email.') }} 23 | @endcomponent 24 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | get('/user', function (Request $request) { 18 | return $request->user(); 19 | }); 20 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 18 | }); 19 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 19 | })->purpose('Display an inspiring quote'); 20 | -------------------------------------------------------------------------------- /screenshots/create_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/screenshots/create_article.png -------------------------------------------------------------------------------- /screenshots/create_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/screenshots/create_category.png -------------------------------------------------------------------------------- /screenshots/edit_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/screenshots/edit_user.png -------------------------------------------------------------------------------- /screenshots/manage_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/screenshots/manage_permissions.png -------------------------------------------------------------------------------- /screenshots/manage_roles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/screenshots/manage_roles.png -------------------------------------------------------------------------------- /screenshots/notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/screenshots/notification.png -------------------------------------------------------------------------------- /screenshots/view_ticket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliqasemzadeh/bap/58967eb98127303f600370c20719e8eed4b1fd06/screenshots/view_ticket.png -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | $uri = urldecode( 11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 12 | ); 13 | 14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 15 | // built-in PHP web server. This provides a convenient way to test a Laravel 16 | // application without having installed a "real" web server software here. 17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 18 | return false; 19 | } 20 | 21 | require_once __DIR__.'/public/index.php'; 22 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | compiled.php 2 | config.php 3 | down 4 | events.scanned.php 5 | maintenance.php 6 | routes.php 7 | routes.scanned.php 8 | schedule-* 9 | services.json 10 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !data/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/framework/cache/data/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/Feature/AuthenticationTest.php: -------------------------------------------------------------------------------- 1 | get('/login'); 17 | 18 | $response->assertStatus(200); 19 | } 20 | 21 | public function test_users_can_authenticate_using_the_login_screen() 22 | { 23 | $user = User::factory()->create(); 24 | 25 | $response = $this->post('/login', [ 26 | 'email' => $user->email, 27 | 'password' => 'password', 28 | ]); 29 | 30 | $this->assertAuthenticated(); 31 | $response->assertRedirect(RouteServiceProvider::HOME); 32 | } 33 | 34 | public function test_users_can_not_authenticate_with_invalid_password() 35 | { 36 | $user = User::factory()->create(); 37 | 38 | $this->post('/login', [ 39 | 'email' => $user->email, 40 | 'password' => 'wrong-password', 41 | ]); 42 | 43 | $this->assertGuest(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /tests/Feature/BrowserSessionsTest.php: -------------------------------------------------------------------------------- 1 | actingAs($user = User::factory()->create()); 18 | 19 | Livewire::test(LogoutOtherBrowserSessionsForm::class) 20 | ->set('password', 'password') 21 | ->call('logoutOtherBrowserSessions'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Feature/DeleteApiTokenTest.php: -------------------------------------------------------------------------------- 1 | markTestSkipped('API support is not enabled.'); 21 | } 22 | 23 | if (Features::hasTeamFeatures()) { 24 | $this->actingAs($user = User::factory()->withPersonalTeam()->create()); 25 | } else { 26 | $this->actingAs($user = User::factory()->create()); 27 | } 28 | 29 | $token = $user->tokens()->create([ 30 | 'name' => 'Test Token', 31 | 'token' => Str::random(40), 32 | 'abilities' => ['create', 'read'], 33 | ]); 34 | 35 | Livewire::test(ApiTokenManager::class) 36 | ->set(['apiTokenIdBeingDeleted' => $token->id]) 37 | ->call('deleteApiToken'); 38 | 39 | $this->assertCount(0, $user->fresh()->tokens); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /tests/Feature/ExampleTest.php: -------------------------------------------------------------------------------- 1 | get('/'); 18 | 19 | $response->assertStatus(200); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/Feature/LivewireBootstrapTest.php: -------------------------------------------------------------------------------- 1 | assertSee('Create') 20 | ->dispatch('showModal',['alias' => 'admin.user.create']) 21 | ->assertSee('Posts created: 1'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Feature/ProfileInformationTest.php: -------------------------------------------------------------------------------- 1 | actingAs($user = User::factory()->create()); 18 | 19 | $component = Livewire::test(UpdateProfileInformationForm::class); 20 | 21 | $this->assertEquals($user->name, $component->state['name']); 22 | $this->assertEquals($user->email, $component->state['email']); 23 | } 24 | 25 | public function test_profile_information_can_be_updated() 26 | { 27 | $this->actingAs($user = User::factory()->create()); 28 | 29 | Livewire::test(UpdateProfileInformationForm::class) 30 | ->set('state', ['name' => 'Test Name', 'email' => 'test@example.com']) 31 | ->call('updateProfileInformation'); 32 | 33 | $this->assertEquals('Test Name', $user->fresh()->name); 34 | $this->assertEquals('test@example.com', $user->fresh()->email); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | resolve: { 5 | alias: { 6 | '@': path.resolve('resources/js'), 7 | }, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | const mix = require('laravel-mix'); 2 | 3 | /* 4 | |-------------------------------------------------------------------------- 5 | | Mix Asset Management 6 | |-------------------------------------------------------------------------- 7 | | 8 | | Mix provides a clean, fluent API for defining some Webpack build steps 9 | | for your Laravel application. By default, we are compiling the Sass 10 | | file for the application as well as bundling up all the JS files. 11 | | 12 | */ 13 | 14 | mix.js('resources/js/app.js', 'public/js') 15 | .sass('resources/scss/app.scss', 'public/css') 16 | .copyDirectory('resources/images', 'public/images') 17 | .copyDirectory('resources/favicon', 'public/favicon') 18 | .webpackConfig(require('./webpack.config')); 19 | 20 | if (mix.inProduction()) { 21 | mix.version(); 22 | } 23 | --------------------------------------------------------------------------------