├── .editorconfig
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── app
├── Console
│ └── Kernel.php
├── Events
│ └── ContactUsFeedback.php
├── Exceptions
│ └── Handler.php
├── Helpers
│ ├── auth.php
│ ├── form_helpers.php
│ ├── upload_helpers.php
│ ├── url_helpers.php
│ └── view_helpers.php
├── Http
│ ├── Controllers
│ │ ├── Admin
│ │ │ ├── Accounts
│ │ │ │ ├── AdministratorsController.php
│ │ │ │ └── ClientsController.php
│ │ │ ├── AdminController.php
│ │ │ ├── AnalyticsController.php
│ │ │ ├── Articles
│ │ │ │ ├── ArticlesController.php
│ │ │ │ └── CategoriesController.php
│ │ │ ├── Banners
│ │ │ │ ├── BannersController.php
│ │ │ │ └── OrderController.php
│ │ │ ├── Comments
│ │ │ │ └── CommentsController.php
│ │ │ ├── DashboardController.php
│ │ │ ├── FAQ
│ │ │ │ ├── CategoriesController.php
│ │ │ │ ├── FAQsController.php
│ │ │ │ └── OrderController.php
│ │ │ ├── LatestActivities
│ │ │ │ └── LatestActivitiesController.php
│ │ │ ├── Locations
│ │ │ │ ├── CitiesController.php
│ │ │ │ ├── ContinentsController.php
│ │ │ │ ├── CountriesController.php
│ │ │ │ ├── ProvincesController.php
│ │ │ │ └── SuburbsController.php
│ │ │ ├── Pages
│ │ │ │ ├── OrderController.php
│ │ │ │ └── PagesController.php
│ │ │ ├── ProfileController.php
│ │ │ ├── Reports
│ │ │ │ ├── ContactUsController.php
│ │ │ │ └── SummaryController.php
│ │ │ ├── Resources
│ │ │ │ ├── CategoriesController.php
│ │ │ │ ├── ContentController.php
│ │ │ │ ├── CropResourceController.php
│ │ │ │ ├── CropperController.php
│ │ │ │ ├── DocumentsController.php
│ │ │ │ ├── DocumentsOrderController.php
│ │ │ │ ├── PhotosController.php
│ │ │ │ ├── PhotosOrderController.php
│ │ │ │ ├── ResourceController.php
│ │ │ │ ├── SectionsController.php
│ │ │ │ ├── VideosController.php
│ │ │ │ └── VideosOrderController.php
│ │ │ ├── Settings
│ │ │ │ ├── LayoutsController.php
│ │ │ │ ├── NavigationOrderController.php
│ │ │ │ ├── NavigationsController.php
│ │ │ │ ├── RolesController.php
│ │ │ │ ├── SettingsController.php
│ │ │ │ └── TemplatesController.php
│ │ │ └── Shop
│ │ │ │ ├── CategoriesController.php
│ │ │ │ ├── CategoriesOrderController.php
│ │ │ │ ├── CheckoutsController.php
│ │ │ │ ├── FeaturesController.php
│ │ │ │ ├── ProductsController.php
│ │ │ │ ├── SearchesController.php
│ │ │ │ ├── StatusesController.php
│ │ │ │ └── TransactionsController.php
│ │ ├── Api
│ │ │ ├── AnalyticsController.php
│ │ │ ├── ApiController.php
│ │ │ ├── NotificationsController.php
│ │ │ └── SharesController.php
│ │ ├── Auth
│ │ │ ├── AuthController.php
│ │ │ ├── ConfirmPasswordController.php
│ │ │ ├── ForgotPasswordController.php
│ │ │ ├── LoginController.php
│ │ │ ├── RegisterController.php
│ │ │ ├── ResetPasswordController.php
│ │ │ └── VerificationController.php
│ │ ├── Controller.php
│ │ ├── Traits
│ │ │ ├── CRUDNotify.php
│ │ │ ├── DataTableHelpers.php
│ │ │ ├── GoogleAnalyticsHelper.php
│ │ │ ├── GoogleCaptcha.php
│ │ │ ├── PrintOrderHelper.php
│ │ │ ├── ReportChartTable.php
│ │ │ ├── SearchShopHelper.php
│ │ │ └── UploadImageHelper.php
│ │ └── Website
│ │ │ ├── Account
│ │ │ ├── AccountController.php
│ │ │ ├── ProfileController.php
│ │ │ └── ShippingAddressController.php
│ │ │ ├── ArticlesController.php
│ │ │ ├── CommentsController.php
│ │ │ ├── ContactUsController.php
│ │ │ ├── FAQ
│ │ │ └── FAQController.php
│ │ │ ├── HomeController.php
│ │ │ ├── PagesController.php
│ │ │ ├── Shop
│ │ │ ├── BasketController.php
│ │ │ ├── BasketHelper.php
│ │ │ └── ShopController.php
│ │ │ └── WebsiteController.php
│ ├── Kernel.php
│ ├── Middleware
│ │ ├── Authenticate.php
│ │ ├── AuthenticateAdmin.php
│ │ ├── EncryptCookies.php
│ │ ├── PreventRequestsDuringMaintenance.php
│ │ ├── RedirectIfAuthenticated.php
│ │ ├── TrimStrings.php
│ │ ├── TrustHosts.php
│ │ ├── TrustProxies.php
│ │ ├── ValidateRole.php
│ │ ├── ValidateSignature.php
│ │ └── VerifyCsrfToken.php
│ └── Requests
│ │ ├── Auth
│ │ └── LoginRequest.php
│ │ └── ProfileUpdateRequest.php
├── Listeners
│ ├── EmailContactUsToAdmin.php
│ └── EmailContactUsToClient.php
├── Mail
│ └── ClientContactUs.php
├── Models
│ ├── AdminModel.php
│ ├── Article.php
│ ├── ArticleCategory.php
│ ├── Banner.php
│ ├── Checkout.php
│ ├── City.php
│ ├── Comment.php
│ ├── Content.php
│ ├── Continent.php
│ ├── Country.php
│ ├── Document.php
│ ├── FAQ.php
│ ├── FAQCategory.php
│ ├── FeedbackContactUs.php
│ ├── Layout.php
│ ├── LogLogin.php
│ ├── LogProductSearch.php
│ ├── Navigation.php
│ ├── Notification.php
│ ├── Page.php
│ ├── Photo.php
│ ├── Product.php
│ ├── ProductCategory.php
│ ├── ProductFeature.php
│ ├── ProductStatus.php
│ ├── Province.php
│ ├── ResourceCategory.php
│ ├── Role.php
│ ├── Section.php
│ ├── Settings.php
│ ├── ShippingAddress.php
│ ├── Suburb.php
│ ├── Template.php
│ ├── Traits
│ │ ├── ActiveTrait.php
│ │ ├── Commentable.php
│ │ ├── Contactable.php
│ │ ├── Documentable.php
│ │ ├── ImageThumb.php
│ │ ├── ModifyBy.php
│ │ ├── PageHelper.php
│ │ ├── Photoable.php
│ │ ├── RecursiveParent.php
│ │ ├── Sectionable.php
│ │ ├── UserAdmin.php
│ │ ├── UserHelper.php
│ │ ├── UserRoles.php
│ │ └── Videoable.php
│ ├── Transaction.php
│ ├── User.php
│ └── Video.php
├── Notifications
│ ├── Admin
│ │ ├── CommentSubmitted.php
│ │ └── ProductsPurchased.php
│ ├── Client
│ │ └── ProductsPurchased.php
│ ├── ContactUsSubmitted.php
│ ├── UserConfirmedAccount.php
│ └── UserRegistered.php
└── Providers
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── BroadcastServiceProvider.php
│ ├── EventServiceProvider.php
│ ├── HelperServiceProvider.php
│ ├── RouteServiceProvider.php
│ └── ViewServiceProvider.php
├── artisan
├── bootstrap
├── app.php
└── cache
│ └── .gitignore
├── composer.json
├── composer.lock
├── config
├── app.php
├── auth.php
├── broadcasting.php
├── cache.php
├── cors.php
├── database.php
├── filesystems.php
├── hashing.php
├── logging.php
├── mail.php
├── queue.php
├── sanctum.php
├── services.php
├── session.php
└── view.php
├── database
├── .gitignore
├── factories
│ ├── BannerFactory.php
│ ├── FaqCategoryFactory.php
│ ├── FaqFactory.php
│ ├── LogActivityFactory.php
│ ├── LogModelActivityFactory.php
│ ├── NavigationFactory.php
│ ├── PageFactory.php
│ ├── PhotoFactory.php
│ ├── ProductCategoryFactory.php
│ ├── ProductFactory.php
│ ├── ProductFeatureFactory.php
│ ├── ProductStatusFactory.php
│ ├── RoleFactory.php
│ ├── SettingsFactory.php
│ └── UserFactory.php
├── migrations
│ ├── 2014_10_12_000000_create_users_table.php
│ ├── 2014_10_12_100000_create_password_reset_tokens_table.php
│ ├── 2014_10_12_100000_create_password_resets_table.php
│ ├── 2019_08_19_000000_create_failed_jobs_table.php
│ ├── 2019_12_03_124353_create_jobs_table.php
│ ├── 2019_12_05_131024_alter_users_table.php
│ ├── 2019_12_10_065955_create_notifications_table.php
│ ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│ ├── 2019_12_15_141543_create_log_logins_table.php
│ ├── 2019_12_20_151143_create_roles_table.php
│ ├── 2019_12_20_151151_create_role_user_pivot_table.php
│ ├── 2020_01_05_141724_create_log_activities_table.php
│ ├── 2020_01_05_151724_create_log_model_activities_table.php
│ ├── 2020_01_15_065006_create_navigations_table.php
│ ├── 2020_01_15_083010_create_navigation_role_pivot_table.php
│ ├── 2020_01_27_140120_create_settings_table.php
│ ├── 2020_01_29_063155_create_banners_table.php
│ ├── 2020_02_03_154748_create_pages_table.php
│ ├── 2020_02_03_184930_create_banner_page_pivot_table.php
│ ├── 2020_02_04_082639_create_photos_table.php
│ ├── 2020_02_04_090115_create_videos_table.php
│ ├── 2020_02_04_141424_create_documents_table.php
│ ├── 2020_04_16_122143_create_resource_categories_table.php
│ ├── 2020_04_25_204158_create_feedback_contact_us_table.php
│ ├── 2020_04_25_204350_create_articles_table.php
│ ├── 2020_04_25_204415_create_article_categories_table.php
│ ├── 2020_04_25_204443_create_products_table.php
│ ├── 2020_04_25_204458_create_product_categories_table.php
│ ├── 2020_04_25_204738_create_product_features_table.php
│ ├── 2020_04_25_204758_create_product_feature_pivot_table.php
│ ├── 2020_04_25_204825_create_checkouts_table.php
│ ├── 2020_04_25_205404_create_checkout_product_pivot_table.php
│ ├── 2020_04_25_205512_create_transactions_table.php
│ ├── 2020_04_25_205540_create_product_transaction_pivot_table.php
│ ├── 2020_04_25_205620_create_log_product_searches_table.php
│ ├── 2020_04_25_205659_create_shipping_addresses_table.php
│ ├── 2020_04_25_205731_create_product_statuses_table.php
│ ├── 2020_05_03_194805_create_faqs_table.php
│ ├── 2020_05_03_194835_create_faq_categories_table.php
│ ├── 2020_05_22_130055_create_continents_table.php
│ ├── 2020_05_22_130125_create_countries_table.php
│ ├── 2020_05_22_130145_create_provinces_table.php
│ ├── 2020_05_22_130157_create_cities_table.php
│ ├── 2020_05_22_130235_create_suburbs_table.php
│ ├── 2020_12_09_073453_update_pages_table.php
│ ├── 2020_12_09_074146_create_comments_table.php
│ ├── 2020_12_14_093823_create_templates_table.php
│ ├── 2020_12_16_091634_create_sections_table.php
│ ├── 2020_12_16_092031_create_content_table.php
│ ├── 2020_12_16_143624_create_content_section_table.php
│ ├── 2021_03_18_115830_create_layouts_table.php
│ └── 2021_03_18_115854_create_layout_template_table.php
└── seeders
│ ├── BannersTableSeeder.php
│ ├── BasicSeeder.php
│ ├── DatabaseSeeder.php
│ ├── LayoutsTableSeeder.php
│ ├── NavigationsTableSeeder.php
│ ├── PagesTableSeeder.php
│ ├── RolesTableSeeder.php
│ ├── SectionsTableSeeder.php
│ ├── SettingsTableSeeder.php
│ ├── TemplatesTableSeeder.php
│ ├── UsersTableSeeder.php
│ └── csv
│ ├── layout_template.csv
│ ├── layouts.csv
│ ├── navigation_role.csv
│ ├── navigations.csv
│ ├── pages.csv
│ ├── roles.csv
│ ├── sections.csv
│ └── templates.csv
├── package-lock.json
├── package.json
├── phpunit.xml
├── public
├── .htaccess
├── css
│ └── .gitignore
├── favicon.ico
├── fonts
│ └── .gitignore
├── images
│ ├── avatars
│ │ ├── default.png
│ │ ├── female.png
│ │ ├── male.png
│ │ └── ninja.png
│ ├── logo-secondary.png
│ ├── logo.png
│ ├── logo_small.png
│ ├── share.jpg
│ └── vendor
│ │ └── lightbox2
│ │ └── dist
│ │ ├── close.png
│ │ ├── loading.gif
│ │ ├── next.png
│ │ └── prev.png
├── index.php
├── js
│ └── .gitignore
├── mix-manifest.json
├── robots.txt
├── sounds
│ ├── danger.mp3
│ └── info.mp3
└── uploads
│ ├── documents
│ └── .gitignore
│ └── images
│ └── .gitignore
├── resources
├── assets
│ ├── js
│ │ ├── admin.js
│ │ ├── bootstrap.js
│ │ ├── titan
│ │ │ ├── buttons.js
│ │ │ ├── datatables.js
│ │ │ ├── forms.js
│ │ │ ├── google_maps.js
│ │ │ ├── notifications.js
│ │ │ ├── notify.js
│ │ │ ├── pagination.js
│ │ │ ├── social_media.js
│ │ │ ├── titan.js
│ │ │ └── utils.js
│ │ ├── website.js
│ │ └── website
│ │ │ └── utils.js
│ └── sass
│ │ ├── admin.scss
│ │ ├── titan
│ │ ├── google_maps.scss
│ │ └── notify.scss
│ │ ├── website.scss
│ │ └── website
│ │ └── _overrides.scss
└── views
│ ├── admin
│ ├── accounts
│ │ ├── administrators
│ │ │ └── index.blade.php
│ │ └── clients
│ │ │ ├── create_edit.blade.php
│ │ │ └── index.blade.php
│ ├── admin.blade.php
│ ├── analytics
│ │ ├── demographics.blade.php
│ │ ├── devices.blade.php
│ │ ├── engagement.blade.php
│ │ ├── partials
│ │ │ ├── age.blade.php
│ │ │ ├── analytics_header.blade.php
│ │ │ ├── browsers.blade.php
│ │ │ ├── devices.blade.php
│ │ │ ├── devices_category.blade.php
│ │ │ ├── engagement_views.blade.php
│ │ │ ├── event_count_name.blade.php
│ │ │ ├── gender.blade.php
│ │ │ ├── locations.blade.php
│ │ │ ├── referrers.blade.php
│ │ │ ├── resolution.blade.php
│ │ │ ├── session_group.blade.php
│ │ │ ├── visited_pages.blade.php
│ │ │ └── visitors_views.blade.php
│ │ ├── summary.blade.php
│ │ └── visits_referrals.blade.php
│ ├── articles
│ │ ├── categories
│ │ │ ├── create_edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── create_edit.blade.php
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ ├── banners
│ │ ├── create_edit.blade.php
│ │ ├── index.blade.php
│ │ ├── order.blade.php
│ │ └── show.blade.php
│ ├── comments
│ │ ├── create_edit.blade.php
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ ├── dashboard.blade.php
│ ├── faqs
│ │ ├── categories
│ │ │ ├── create_edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── create_edit.blade.php
│ │ ├── index.blade.php
│ │ ├── order.blade.php
│ │ └── show.blade.php
│ ├── latest_activities
│ │ ├── admin.blade.php
│ │ └── website.blade.php
│ ├── locations
│ │ ├── cities
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ │ ├── continents
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ │ ├── countries
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ │ ├── provinces
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ │ └── suburbs
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ ├── pages
│ │ ├── create_edit.blade.php
│ │ ├── index.blade.php
│ │ ├── order.blade.php
│ │ └── show.blade.php
│ ├── partials
│ │ ├── boxes
│ │ │ ├── datatable_toolbar.blade.php
│ │ │ └── toolbar.blade.php
│ │ ├── breadcrumb.blade.php
│ │ ├── card
│ │ │ ├── buttons.blade.php
│ │ │ └── info.blade.php
│ │ ├── datatables.blade.php
│ │ ├── form
│ │ │ └── form_footer.blade.php
│ │ ├── header.blade.php
│ │ ├── modals.blade.php
│ │ ├── navigation.blade.php
│ │ ├── navigation
│ │ │ └── navigation_list.blade.php
│ │ ├── pagecrumb.blade.php
│ │ ├── pagination_footer.blade.php
│ │ ├── sortable.blade.php
│ │ └── summernote
│ │ │ └── document.blade.php
│ ├── profile.blade.php
│ ├── reports
│ │ ├── contactus.blade.php
│ │ └── summary.blade.php
│ ├── resources
│ │ ├── categories
│ │ │ ├── create_edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── create_edit.blade.php
│ │ ├── crop_resource.blade.php
│ │ ├── cropper.blade.php
│ │ ├── documents
│ │ │ ├── attach.blade.php
│ │ │ ├── create_edit.blade.php
│ │ │ ├── documentable.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── order.blade.php
│ │ ├── photos
│ │ │ ├── attach.blade.php
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ ├── order.blade.php
│ │ │ └── photoable.blade.php
│ │ ├── resourceable.blade.php
│ │ ├── sections
│ │ │ ├── collapse.blade.php
│ │ │ ├── components.blade.php
│ │ │ ├── components
│ │ │ │ ├── components.blade.php
│ │ │ │ ├── content.blade.php
│ │ │ │ ├── form_content.blade.php
│ │ │ │ ├── form_heading.blade.php
│ │ │ │ └── index.blade.php
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── section_components.blade.php
│ │ └── videos
│ │ │ ├── attach.blade.php
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ ├── order.blade.php
│ │ │ └── videoable.blade.php
│ ├── settings
│ │ ├── layouts
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ │ ├── navigations
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ ├── order.blade.php
│ │ │ └── show.blade.php
│ │ ├── roles
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ │ ├── settings
│ │ │ ├── create_edit.blade.php
│ │ │ └── index.blade.php
│ │ └── templates
│ │ │ ├── create_edit.blade.php
│ │ │ ├── index.blade.php
│ │ │ └── show.blade.php
│ └── shop
│ │ ├── categories
│ │ ├── create_edit.blade.php
│ │ ├── index.blade.php
│ │ └── order.blade.php
│ │ ├── checkouts
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ │ ├── features
│ │ ├── create_edit.blade.php
│ │ └── index.blade.php
│ │ ├── product_list.blade.php
│ │ ├── products
│ │ ├── create_edit.blade.php
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ │ ├── searches
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ │ ├── statuses
│ │ ├── create_edit.blade.php
│ │ └── index.blade.php
│ │ └── transactions
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ ├── auth
│ ├── auth.blade.php
│ ├── login.blade.php
│ ├── passwords
│ │ ├── email.blade.php
│ │ └── reset.blade.php
│ ├── register.blade.php
│ └── verify.blade.php
│ ├── dashboard.blade.php
│ ├── emails
│ └── contactus_client.blade.php
│ ├── errors
│ └── 503.blade.php
│ ├── partials
│ ├── analytics.blade.php
│ └── facebook.blade.php
│ ├── pdf
│ ├── order.blade.php
│ └── pdf.blade.php
│ ├── vendor
│ ├── mail
│ │ ├── html
│ │ │ ├── button.blade.php
│ │ │ ├── footer.blade.php
│ │ │ ├── header.blade.php
│ │ │ ├── layout.blade.php
│ │ │ ├── message.blade.php
│ │ │ ├── panel.blade.php
│ │ │ ├── subcopy.blade.php
│ │ │ ├── table.blade.php
│ │ │ └── themes
│ │ │ │ └── default.css
│ │ └── text
│ │ │ ├── button.blade.php
│ │ │ ├── footer.blade.php
│ │ │ ├── header.blade.php
│ │ │ ├── layout.blade.php
│ │ │ ├── message.blade.php
│ │ │ ├── panel.blade.php
│ │ │ ├── subcopy.blade.php
│ │ │ └── table.blade.php
│ └── notifications
│ │ └── email.blade.php
│ ├── website
│ ├── account
│ │ ├── account.blade.php
│ │ ├── profile.blade.php
│ │ ├── shipping_address.blade.php
│ │ ├── transaction_show.blade.php
│ │ └── transactions.blade.php
│ ├── articles
│ │ ├── index.blade.php
│ │ ├── pagination.blade.php
│ │ └── show.blade.php
│ ├── contact.blade.php
│ ├── faq
│ │ ├── faq.blade.php
│ │ └── index.blade.php
│ ├── home.blade.php
│ ├── pages
│ │ ├── page.blade.php
│ │ ├── page_components.blade.php
│ │ ├── page_content.blade.php
│ │ ├── page_documents.blade.php
│ │ ├── page_gallery.blade.php
│ │ ├── page_heading.blade.php
│ │ └── page_videos.blade.php
│ ├── partials
│ │ ├── banners.blade.php
│ │ ├── breadcrumb.blade.php
│ │ ├── comments.blade.php
│ │ ├── footer.blade.php
│ │ ├── form
│ │ │ ├── captcha.blade.php
│ │ │ ├── contact_form.blade.php
│ │ │ └── feedback.blade.php
│ │ ├── header.blade.php
│ │ ├── navigation
│ │ │ ├── sub_level.blade.php
│ │ │ └── top_level.blade.php
│ │ ├── page_header.blade.php
│ │ ├── page_side.blade.php
│ │ ├── paginator_footer.blade.php
│ │ ├── side_articles.blade.php
│ │ └── social_share.blade.php
│ ├── shop
│ │ ├── basket
│ │ │ ├── address.blade.php
│ │ │ ├── checkout.blade.php
│ │ │ ├── feedback.blade.php
│ │ │ └── index.blade.php
│ │ ├── index.blade.php
│ │ ├── list_item.blade.php
│ │ ├── pagination.blade.php
│ │ └── show.blade.php
│ └── website.blade.php
│ └── welcome.blade.php
├── routes
├── admin.php
├── api.php
├── channels.php
├── console.php
└── web.php
├── storage
├── app
│ ├── .gitignore
│ └── public
│ │ └── .gitignore
├── framework
│ ├── .gitignore
│ ├── cache
│ │ ├── .gitignore
│ │ └── data
│ │ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ ├── testing
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
└── logs
│ └── .gitignore
├── tests
├── CreatesApplication.php
├── Feature
│ ├── Auth
│ │ ├── AuthenticationTest.php
│ │ ├── EmailVerificationTest.php
│ │ ├── PasswordConfirmationTest.php
│ │ ├── PasswordResetTest.php
│ │ ├── PasswordUpdateTest.php
│ │ └── RegistrationTest.php
│ ├── Controllers
│ │ ├── Admin
│ │ │ ├── Accounts
│ │ │ │ ├── AdministratorsTest.php
│ │ │ │ └── ClientsTest.php
│ │ │ ├── Banners
│ │ │ │ └── BannersControllersTest.php
│ │ │ ├── FAQ
│ │ │ │ ├── CategoriesControllerTest.php
│ │ │ │ └── FAQControllerTest.php
│ │ │ ├── LatestActivity
│ │ │ │ ├── AdminActivitiesTest.php
│ │ │ │ └── WebsiteActivitiesTest.php
│ │ │ ├── Products
│ │ │ │ ├── CategoriesControllerTest.php
│ │ │ │ ├── FeaturesControllerTest.php
│ │ │ │ ├── ProductsControllerTest.php
│ │ │ │ └── StatusesControllerTest.php
│ │ │ └── Settings
│ │ │ │ ├── NavigationOrderTest.php
│ │ │ │ ├── NavigationTest.php
│ │ │ │ ├── RolesTest.php
│ │ │ │ └── SettingsTest.php
│ │ ├── Auth
│ │ │ ├── EmailVerificationTest.php
│ │ │ ├── ForgotPasswordTest.php
│ │ │ ├── LoginTest.php
│ │ │ ├── RegisterTest.php
│ │ │ └── ResetPasswordTest.php
│ │ └── VisitWebsitePagesTest.php
│ ├── ExampleTest.php
│ └── ProfileTest.php
├── TestCase.php
└── Unit
│ ├── ExampleTest.php
│ ├── Models
│ ├── BannerTest.php
│ ├── NavigationTest.php
│ └── RoleTest.php
│ └── Traits
│ ├── ActiveTraitTest.php
│ └── ImageThumbTest.php
├── vite.config.js
└── webpack.mix.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | indent_size = 4
7 | indent_style = space
8 | insert_final_newline = true
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 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 |
3 | *.blade.php diff=html
4 | *.css diff=css
5 | *.html diff=html
6 | *.md diff=markdown
7 | *.php diff=php
8 |
9 | /.github export-ignore
10 | CHANGELOG.md export-ignore
11 | .styleci.yml export-ignore
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.phpunit.cache
2 | /node_modules
3 | /public/build
4 | /public/hot
5 | /public/storage
6 | /storage/*.key
7 | /vendor
8 | .env
9 | .env.backup
10 | .env.production
11 | .phpunit.result.cache
12 | Homestead.json
13 | Homestead.yaml
14 | auth.json
15 | npm-debug.log
16 | yarn-error.log
17 | /.fleet
18 | /.idea
19 | /.vscode
20 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Ben-Piet O'Callaghan
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')->hourly();
16 | }
17 |
18 | /**
19 | * Register the commands for the application.
20 | */
21 | protected function commands(): void
22 | {
23 | $this->load(__DIR__.'/Commands');
24 |
25 | require base_path('routes/console.php');
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/Events/ContactUsFeedback.php:
--------------------------------------------------------------------------------
1 | type = $row->contactable_name;
26 | $this->eloquent = $row;
27 |
28 | log_activity($row->contactable_name, "{$row->fullname} submitted a feedback form.", $row);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 |
14 | */
15 | protected $dontFlash = [
16 | 'current_password',
17 | 'password',
18 | 'password_confirmation',
19 | ];
20 |
21 | /**
22 | * Register the exception handling callbacks for the application.
23 | */
24 | public function register(): void
25 | {
26 | $this->reportable(function (Throwable $e) {
27 | //
28 | });
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/Accounts/AdministratorsController.php:
--------------------------------------------------------------------------------
1 | whereRole(Role::$ADMIN)->get();
21 |
22 | return $this->view('accounts.administrators.index', compact('items'));
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/AnalyticsController.php:
--------------------------------------------------------------------------------
1 | view('analytics.summary');
12 | }
13 |
14 | public function devices()
15 | {
16 | return $this->view('analytics.devices');
17 | }
18 |
19 | public function visitsReferrals()
20 | {
21 | return $this->view('analytics.visits_referrals');
22 | }
23 |
24 | public function engagement()
25 | {
26 | return $this->view('analytics.engagement');
27 | }
28 |
29 | public function demographics()
30 | {
31 | return $this->view('analytics.demographics');
32 | }
33 | }
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/Banners/OrderController.php:
--------------------------------------------------------------------------------
1 | orderBy('list_order')->get();
20 |
21 | return $this->view('banners.order')->with('items', $items);
22 | }
23 |
24 | /**
25 | * Update the order
26 | * @param Request $request
27 | * @return array
28 | */
29 | public function update(Request $request)
30 | {
31 | $items = json_decode($request->get('list'), true);
32 |
33 | foreach ($items as $key => $item) {
34 | Banner::find($item['id'])->update(['list_order' => ($key + 1)]);
35 | }
36 |
37 | return ['result' => 'success'];
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/DashboardController.php:
--------------------------------------------------------------------------------
1 | view('dashboard');
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/FAQ/OrderController.php:
--------------------------------------------------------------------------------
1 | orderBy('name')->get();
20 |
21 | //$items = FAQ::with('category')->orderBy('list_order')->get();
22 |
23 | return $this->view('faqs.order')->with('items', $items);
24 | }
25 |
26 | /**
27 | * Update the order
28 | */
29 | public function update()
30 | {
31 | $items = json_decode(request()->get('list'), true);
32 |
33 | foreach ($items as $key => $item) {
34 | if(isset($item['id'])) {
35 | FAQ::findOrFail($item['id'])->update(['list_order' => ($key + 1)]);
36 | }
37 | }
38 |
39 | return ['result' => 'success'];
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/LatestActivities/LatestActivitiesController.php:
--------------------------------------------------------------------------------
1 | view('latest_activities.website')->with('items', $items);
17 | }
18 |
19 | public function admin()
20 | {
21 | $items = LogModelActivity::getLatest();
22 |
23 | return $this->view('latest_activities.admin')->with('items', $items);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/Reports/SummaryController.php:
--------------------------------------------------------------------------------
1 | getData();
16 |
17 | return $this->view('reports.summary', compact('items'));
18 | }
19 |
20 | private function getData()
21 | {
22 |
23 | $result = [];
24 |
25 | $result[] = ['', ''];
26 | $result[] = ['Feedback Forms ', ''];
27 | $result[] = ['Contact Us', FeedbackContactUs::count()];
28 |
29 |
30 | $result[] = ['', ''];
31 | $total = FeedbackContactUs::count();
32 | $result[] = ['Total', $total];
33 |
34 | return $result;
35 | }
36 | }
--------------------------------------------------------------------------------
/app/Http/Controllers/Admin/Shop/CheckoutsController.php:
--------------------------------------------------------------------------------
1 | with('transaction')
20 | ->with('products')->orderBy('created_at')->get()->take(200);
21 |
22 | return $this->view('shop.checkouts.index', compact('items'));
23 | }
24 |
25 | /**
26 | * Show Checkout
27 | * @param Checkout $checkout
28 | * @return mixed
29 | */
30 | public function show(Checkout $checkout)
31 | {
32 | return $this->view('shop.checkouts.show')->with('item', $checkout);
33 | }
34 | }
--------------------------------------------------------------------------------
/app/Http/Controllers/Api/AnalyticsController.php:
--------------------------------------------------------------------------------
1 | $item) {
40 | $items[$k] = [];
41 | $items[$k][0] = $item['country'];
42 | $items[$k][1] = intval($item['sessions']);
43 | }
44 | }
45 |
46 | return json_response($items);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Api/ApiController.php:
--------------------------------------------------------------------------------
1 | increment('social_shares');
19 | }
20 | }
21 |
22 | log_activity('Social Share', 'URL was shared: ' . input('url'));
23 |
24 | return json_response();
25 | }
26 | }
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/AuthController.php:
--------------------------------------------------------------------------------
1 | $request->get('email'),
22 | 'status' => $status,
23 | 'role' => 'website',
24 | 'client_ip' => $request->getClientIp(),
25 | 'client_agent' => $request->userAgent(),
26 | ]);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ConfirmPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ForgotPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
39 | $this->middleware('signed')->only('verify');
40 | $this->middleware('throttle:6,1')->only('verify', 'resend');
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Traits/GoogleCaptcha.php:
--------------------------------------------------------------------------------
1 | verify(input('g-recaptcha-response'), $request->getClientIp());
24 |
25 | return $response;
26 | }
27 |
28 | /**
29 | * Get the captcha json responses
30 | * @param $response
31 | * @return JsonResponse
32 | */
33 | private function captchaResponse($response)
34 | {
35 | $errors = ['g-recaptcha-response' => ['Oops, something went wrong']];
36 | foreach ($response->getErrorCodes() as $k => $code) {
37 | if ($code == 'missing-input-response') {
38 | $code = 'Please confirm you are not a robot.';
39 | }
40 | $errors['g-recaptcha-response'][$k] = $code;
41 | }
42 |
43 | return new JsonResponse($errors, 422);
44 | }
45 | }
--------------------------------------------------------------------------------
/app/Http/Controllers/Traits/PrintOrderHelper.php:
--------------------------------------------------------------------------------
1 | with('item', $transaction);
13 |
14 | // debug - show pdf
15 | if ($format == 'web') {
16 | return $view;
17 | }
18 |
19 | // show pdf
20 | $name = "Order - {$transaction->order_number}.pdf";
21 |
22 | return \PDF::loadHTML($view)->stream($name);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Website/CommentsController.php:
--------------------------------------------------------------------------------
1 | validate(Comment::$rules);
19 |
20 | $commentable = input('commentable_type')::find(input('commentable_id'));
21 |
22 | if (!$commentable) {
23 | return json_response_error('Whoops', 'We could not find the commentable.');
24 | }
25 |
26 | // validate google captcha
27 | $response = $this->validateCaptcha($request);
28 | if ($response->isSuccess()) {
29 |
30 | $row = $this->createEntry(Comment::class, $attributes);
31 | notify_admins(CommentSubmitted::class, $row);
32 |
33 | return json_response('Thank you for your comment, an administrator will review your comment in due time.');
34 | }
35 |
36 | return $this->captchaResponse($response);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Website/FAQ/FAQController.php:
--------------------------------------------------------------------------------
1 | orderBy('name')->get();
20 |
21 | return $this->view('faq.index', compact('items', 'categories'));
22 | }
23 |
24 | /**
25 | * Increments the total views
26 | * @param FAQ $faq
27 | * @param string $type
28 | * @return \Illuminate\Http\JsonResponse
29 | */
30 | public function incrementClick(FAQ $faq, $type = 'total_read'): \Illuminate\Http\JsonResponse
31 | {
32 | if ($type === 'total_read' || $type === 'helpful_yes' || $type === 'helpful_no') {
33 | $faq->increment($type);
34 | }
35 |
36 | return json_response('');
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Website/HomeController.php:
--------------------------------------------------------------------------------
1 | showPageBanner = true;
17 |
18 | $articles = Article::whereHas('photos')->with('photos')->isActiveDates()->orderBy('active_from', 'DESC')->get();
19 |
20 | return $this->view('home')
21 | ->with('articles', $articles);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | expectsJson() ? null : route('login');
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Middleware/AuthenticateAdmin.php:
--------------------------------------------------------------------------------
1 | isAdmin()) {
22 | \Auth::logout();
23 |
24 | return redirect()->route('login');
25 | }
26 |
27 | return $next($request);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Middleware/PreventRequestsDuringMaintenance.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Middleware/RedirectIfAuthenticated.php:
--------------------------------------------------------------------------------
1 | check()) {
24 | return redirect(RouteServiceProvider::HOME);
25 | }
26 | }
27 |
28 | return $next($request);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrimStrings.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | 'current_password',
16 | 'password',
17 | 'password_confirmation',
18 | ];
19 | }
20 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustHosts.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | public function hosts(): array
15 | {
16 | return [
17 | $this->allSubdomainsOfApplicationUrl(),
18 | ];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustProxies.php:
--------------------------------------------------------------------------------
1 | |string|null
14 | */
15 | protected $proxies;
16 |
17 | /**
18 | * The headers that should be used to detect proxies.
19 | *
20 | * @var int
21 | */
22 | protected $headers =
23 | Request::HEADER_X_FORWARDED_FOR |
24 | Request::HEADER_X_FORWARDED_HOST |
25 | Request::HEADER_X_FORWARDED_PORT |
26 | Request::HEADER_X_FORWARDED_PROTO |
27 | Request::HEADER_X_FORWARDED_AWS_ELB;
28 | }
29 |
--------------------------------------------------------------------------------
/app/Http/Middleware/ValidateRole.php:
--------------------------------------------------------------------------------
1 | getRolesList();
27 | $navValid = $selectedNavigation->roles()->whereIn('roles.id', $userRoles)->first();
28 |
29 | if (!$navValid) {
30 | return redirect(user()->roles()->first()->slug);
31 | }
32 |
33 | return $next($request);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/Http/Middleware/ValidateSignature.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | // 'fbclid',
16 | // 'utm_campaign',
17 | // 'utm_content',
18 | // 'utm_medium',
19 | // 'utm_source',
20 | // 'utm_term',
21 | ];
22 | }
23 |
--------------------------------------------------------------------------------
/app/Http/Middleware/VerifyCsrfToken.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Requests/ProfileUpdateRequest.php:
--------------------------------------------------------------------------------
1 |
15 | */
16 | public function rules(): array
17 | {
18 | return [
19 | 'name' => ['string', 'max:255'],
20 | 'email' => ['email', 'max:255', Rule::unique(User::class)->ignore($this->user()->id)],
21 | ];
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/Listeners/EmailContactUsToAdmin.php:
--------------------------------------------------------------------------------
1 | eloquent;
23 |
24 | notify_admins(ContactUsSubmitted::class, $data);
25 |
26 | log_activity($data->contactable->name, $data->fullname . ' submitted feedback form.', $data);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/Listeners/EmailContactUsToClient.php:
--------------------------------------------------------------------------------
1 | eloquent;
22 |
23 | \Mail::send(new ClientContactUs($data));
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/Mail/ClientContactUs.php:
--------------------------------------------------------------------------------
1 | contactUs = $contactUs;
28 | }
29 |
30 | /**
31 | * Build the message.
32 | *
33 | * @return $this
34 | */
35 | public function build()
36 | {
37 | return $this->subject($this->contactUs->contactable_name.' - ' . config('app.name'))
38 | ->to($this->contactUs->email, $this->contactUs->fullname)
39 | ->markdown('emails.contactus_client');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/Models/AdminModel.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | ];
26 |
27 | /**
28 | * Get all the rows as an array (ready for dropdowns)
29 | *
30 | * @return array
31 | */
32 | public static function getAllList()
33 | {
34 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
35 | }
36 |
37 | /**
38 | * Get the articles
39 | */
40 | public function articles()
41 | {
42 | return $this->hasMany(Article::class, 'category_id', 'id');
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/Models/Checkout.php:
--------------------------------------------------------------------------------
1 | belongsToMany(Product::class)->withPivot('quantity');
26 | }
27 |
28 | /**
29 | * Get the user
30 | */
31 | public function user()
32 | {
33 | return $this->belongsTo(User::class);
34 | }
35 |
36 | /**
37 | * Get the transaction
38 | */
39 | public function transaction()
40 | {
41 | return $this->belongsTo(Transaction::class);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/Models/City.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | 'province_id' => 'required|exists:provinces,id',
26 | 'zoom_level' => 'nullable',
27 | 'latitude' => 'nullable',
28 | 'longitude' => 'nullable',
29 | ];
30 |
31 | /**
32 | * Get the province
33 | */
34 | public function province()
35 | {
36 | return $this->belongsTo(Province::class);
37 | }
38 |
39 | /**
40 | * Get all the rows as an array (ready for dropdowns)
41 | *
42 | * @return array
43 | */
44 | public static function getAllLists()
45 | {
46 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/Models/Continent.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | 'zoom_level' => 'nullable',
26 | 'latitude' => 'nullable',
27 | 'longitude' => 'nullable',
28 | ];
29 |
30 | /**
31 | * Get the provinces
32 | */
33 | public function countries()
34 | {
35 | return $this->hasMany(Country::class);
36 | }
37 |
38 | /**
39 | * Get all the rows as an array (ready for dropdowns)
40 | *
41 | * @return array
42 | */
43 | public static function getAllList()
44 | {
45 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/Models/Country.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | 'zoom_level' => 'nullable',
26 | 'latitude' => 'nullable',
27 | 'longitude' => 'nullable',
28 | 'continent_id' => 'required|exists:continents,id',
29 | ];
30 |
31 | /**
32 | * Get the continent
33 | */
34 | public function continent()
35 | {
36 | return $this->belongsTo(Continent::class);
37 | }
38 |
39 | /**
40 | * Get all the rows as an array (ready for dropdowns)
41 | *
42 | * @return array
43 | */
44 | public static function getAllList()
45 | {
46 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/Models/Document.php:
--------------------------------------------------------------------------------
1 | 'required|file|max:5000|mimes:pdf'
28 | ];
29 |
30 | public function getUrlAttribute()
31 | {
32 | //return "/uploads/documents/{$this->filename}";
33 | // for summernote - 'full' url
34 | return url("/uploads/documents/{$this->filename}");
35 | }
36 |
37 | public function documentable()
38 | {
39 | return $this->morphTo();
40 | }
41 |
42 | /**
43 | * Get all the rows as an array (ready for dropdowns)
44 | *
45 | * @return array
46 | */
47 | public static function getAllList()
48 | {
49 | return self::with('documentable')->orderBy('name')->get()->pluck('name', 'id')->toArray();
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/Models/FAQ.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
28 | 'answer' => 'required|min:5|max:1500',
29 | 'category_id' => 'required|exists:faq_categories,id',
30 | ];
31 |
32 | protected function getSlugOptions(): SlugOptions
33 | {
34 | return SlugOptions::create()->generateSlugFrom('question');
35 | }
36 |
37 | /**
38 | * Get the summary text
39 | *
40 | * @return mixed
41 | */
42 | public function getAnswerSummaryAttribute()
43 | {
44 | return substr(strip_tags($this->attributes['answer']), 0, 80) . '...';
45 | }
46 |
47 | /**
48 | * Get the category
49 | */
50 | public function category(): \Illuminate\Database\Eloquent\Relations\BelongsTo
51 | {
52 | return $this->belongsTo(FAQCategory::class, 'category_id', 'id');
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/Models/FAQCategory.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
27 | ];
28 |
29 | /**
30 | * Get the faqs
31 | */
32 | public function faqs(): \Illuminate\Database\Eloquent\Relations\HasMany
33 | {
34 | return $this->hasMany(FAQ::class, 'category_id')->orderBy('list_order');
35 | }
36 |
37 | /**
38 | * Get all the rows as an array (ready for dropdowns)
39 | * @return array
40 | */
41 | public static function getAllList(): array
42 | {
43 | return (new self)->orderBy('name')->get()->pluck('name', 'id')->toArray();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/Models/FeedbackContactUs.php:
--------------------------------------------------------------------------------
1 | attributes['firstname'] . ' ' . $this->attributes['lastname'];
17 | }
18 |
19 | /**
20 | * Validation custom messages for this model
21 | */
22 | static public $rules = [
23 | 'firstname' => 'required|min:2|max:191',
24 | 'lastname' => 'required|min:2|max:191',
25 | 'email' => 'required|min:2|max:191|email',
26 | 'content' => 'required|min:2|max:1000',
27 | 'phone' => 'nullable|max:20',
28 | 'contactable_id' => 'required',
29 | 'contactable_type' => 'required',
30 | 'contactable_type_name' => 'required',
31 | 'contactable_name' => 'required',
32 | ];
33 |
34 |
35 | /**
36 | * Get the parent contactable model (pages or articles).
37 | */
38 | public function contactable()
39 | {
40 | return $this->morphTo();
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/Models/LogLogin.php:
--------------------------------------------------------------------------------
1 | limit(200)->get();
25 | }
26 | }
--------------------------------------------------------------------------------
/app/Models/Notification.php:
--------------------------------------------------------------------------------
1 | 'array',
26 | 'read_at' => 'datetime',
27 | ];
28 |
29 | /**
30 | * Get the notifiable entity that the notification belongs to.
31 | */
32 | public function notifiable()
33 | {
34 | return $this->morphTo();
35 | }
36 |
37 | /**
38 | * Mark the notification as read.
39 | *
40 | * @return void
41 | */
42 | public function markAsRead()
43 | {
44 | if (is_null($this->read_at)) {
45 | $this->forceFill(['read_at' => $this->freshTimestamp()])->save();
46 | }
47 | }
48 | }
--------------------------------------------------------------------------------
/app/Models/ProductFeature.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
26 | 'slug' => 'nullable',
27 | ];
28 |
29 | /**
30 | * Get the Product many to many
31 | */
32 | public function products()
33 | {
34 | return $this->belongsToMany(Product::class);
35 | }
36 |
37 | /**
38 | * Get all the rows as an array (ready for dropdowns)
39 | *
40 | * @param bool $addAll
41 | * @return array
42 | */
43 | public static function getAllList($addAll = false)
44 | {
45 | $items = self::all();
46 | if ($addAll) {
47 | $items->push((object) ['id' => 'all', 'name' => 'All']);
48 | }
49 |
50 | $items = $items->sortBy('name')->pluck('name', 'id')->toArray();
51 |
52 | return $items;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/Models/ProductStatus.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
26 | 'category' => 'required|min:3|max:191',
27 | ];
28 |
29 | public function getBadgeAttribute()
30 | {
31 | return "{$this->name} ";
32 | }
33 |
34 | /**
35 | * Get all the rows as an array (ready for dropdowns)
36 | *
37 | * @return array
38 | */
39 | public static function getAllList()
40 | {
41 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/Models/Province.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | 'country_id' => 'required|exists:countries,id',
26 | ];
27 |
28 | /**
29 | * Get the Country
30 | */
31 | public function country()
32 | {
33 | return $this->belongsTo(Country::class);
34 | }
35 |
36 | /**
37 | * Get all the rows as an array (ready for dropdowns)
38 | *
39 | * @return array
40 | */
41 | public static function getAllLists()
42 | {
43 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/Models/ResourceCategory.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
28 | ];
29 |
30 | /**
31 | * Get all the rows as an array (ready for dropdowns)
32 | *
33 | * @return array
34 | */
35 | public static function getAllList(): array
36 | {
37 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/Models/Settings.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | 'slogan' => 'nullable',
26 | 'description' => 'required|min:3|max:2000',
27 | 'keywords' => 'nullable',
28 | 'author' => 'required',
29 |
30 | // contact
31 | 'email' => 'nullable',
32 | 'cellphone' => 'nullable',
33 | 'telephone' => 'nullable',
34 | 'address' => 'nullable',
35 | 'po_box' => 'nullable',
36 |
37 | // social media
38 | 'facebook' => 'nullable',
39 | 'twitter' => 'nullable',
40 | 'googleplus' => 'nullable',
41 | 'linkedin' => 'nullable',
42 | 'youtube' => 'nullable',
43 | 'instagram' => 'nullable',
44 |
45 | // google maps
46 | 'zoom_level' => 'nullable',
47 | 'latitude' => 'nullable',
48 | 'longitude' => 'nullable',
49 | ];
50 |
51 | static public $messages = [];
52 | }
53 |
--------------------------------------------------------------------------------
/app/Models/ShippingAddress.php:
--------------------------------------------------------------------------------
1 | belongsTo(User::class);
26 | }
27 |
28 | /**
29 | * Get the Transaction
30 | */
31 | public function transaction()
32 | {
33 | return $this->belongsTo(Transaction::class, 'transaction_id', 'id');
34 | }
35 |
36 | public function getLabelAttribute()
37 | {
38 | $address = $this->attributes['address'];
39 | if($this->attributes['city']) {
40 | $address .= ", " . $this->attributes['city'];
41 | }
42 | if($this->attributes['province']) {
43 | $address .= ", " . $this->attributes['province'];
44 | }
45 | if($this->attributes['country']) {
46 | $address .= ", " . $this->attributes['country'];
47 | }
48 | return $address;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/Models/Suburb.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | 'city_id' => 'required|exists:cities,id',
26 | ];
27 |
28 | /**
29 | * Get the city
30 | */
31 | public function city()
32 | {
33 | return $this->belongsTo(City::class);
34 | }
35 |
36 | /**
37 | * Get all the rows as an array (ready for dropdowns)
38 | *
39 | * @return array
40 | */
41 | public static function getAllLists()
42 | {
43 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/Models/Template.php:
--------------------------------------------------------------------------------
1 | 'required|min:3|max:191',
25 | 'template' => 'required|min:3|max:191',
26 | 'controller_action' => 'nullable|min:3|max:191',
27 | ];
28 |
29 | /**
30 | * Get all the rows as an array (ready for dropdowns)
31 | *
32 | * @return array
33 | */
34 | public static function getAllList()
35 | {
36 | return self::orderBy('name')->get()->pluck('name', 'id')->toArray();
37 | }
38 |
39 | /**
40 | * Get the layouts
41 | * @return \Eloquent
42 | */
43 | public function layouts()
44 | {
45 | return $this->belongsToMany(Layout::class, 'layout_template');
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/Models/Traits/Commentable.php:
--------------------------------------------------------------------------------
1 | morphMany(Comment::class, 'commentable')->where('is_approved', 1);
15 | }
16 |
17 | /**
18 | * Scope filter to only allow where has photos
19 | *
20 | * @param $query
21 | * @return mixed
22 | */
23 | public function scopeHasComments($query)
24 | {
25 | return $query->whereHas('comments');
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/Models/Traits/Contactable.php:
--------------------------------------------------------------------------------
1 | contacts()->first();
16 | }
17 |
18 | /**
19 | * Get all of the sections.
20 | */
21 | public function contacts()
22 | {
23 | return $this->morphMany(FeedbackContactUs::class, 'contactable');
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/Models/Traits/Documentable.php:
--------------------------------------------------------------------------------
1 | documents()->first();
16 | }
17 |
18 | public function getDocumentUrlAttribute()
19 | {
20 | return url("/uploads/documents/{$this->document->filename}");
21 | }
22 |
23 | /**
24 | * Get all of the documentable documents.
25 | */
26 | public function documents()
27 | {
28 | return $this->morphMany(Document::class, 'documentable');
29 | }
30 |
31 | /**
32 | * Get all documents.
33 | */
34 | public function getAllDocumentsAttribute()
35 | {
36 | return Document::getAllList();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/Models/Traits/ModifyBy.php:
--------------------------------------------------------------------------------
1 | created_by = user()->id;
18 | $model->updated_by = user()->id;
19 | });
20 |
21 | static::updating(function ($model)
22 | {
23 | // if cronjob / no user
24 | if(user()->id >= 1) {
25 | $model->updated_by = user()->id;
26 | }
27 | });
28 |
29 | static::deleting(function ($model)
30 | {
31 | $model->deleted_by = user()->id;
32 | $model->save();
33 | });
34 | }
35 | }
--------------------------------------------------------------------------------
/app/Models/Traits/UserAdmin.php:
--------------------------------------------------------------------------------
1 | hasRole(Role::$ADMIN);
17 | }
18 |
19 | /**
20 | * If User is admin
21 | * @return bool
22 | */
23 | public function isSuperAdmin()
24 | {
25 | return $this->hasRole(Role::$ADMIN);
26 | }
27 |
28 | /**
29 | * If User is admin
30 | * @return bool
31 | */
32 | public function isDeveloper()
33 | {
34 | return $this->hasRole(Role::$DEVELOPER);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/Models/Traits/UserHelper.php:
--------------------------------------------------------------------------------
1 | attributes['firstname'] . ' ' . $this->attributes['lastname'];
15 | }
16 |
17 | public function getIsEmailVerifiedBadgeAttribute()
18 | {
19 | return $this->email_verified_at ? '' . $this->email_verified_at->format('d M Y') . ' ' : 'not yet ';
20 | }
21 | }
--------------------------------------------------------------------------------
/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 |
14 | */
15 | protected $policies = [
16 | //
17 | ];
18 |
19 | /**
20 | * Register any authentication / authorization services.
21 | */
22 | public function boot(): void
23 | {
24 | $this->registerPolicies();
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | >
17 | */
18 | protected $listen = [
19 | Registered::class => [
20 | SendEmailVerificationNotification::class,
21 | ],
22 |
23 | Verified::class => [],
24 |
25 | 'App\Events\ContactUsFeedback' => [
26 | 'App\Listeners\EmailContactUsToClient',
27 | 'App\Listeners\EmailContactUsToAdmin',
28 | ],
29 | ];
30 |
31 | /**
32 | * Register any events for your application.
33 | */
34 | public function boot(): void
35 | {
36 | //
37 | }
38 |
39 | /**
40 | * Determine if events and listeners should be automatically discovered.
41 | */
42 | public function shouldDiscoverEvents(): bool
43 | {
44 | return false;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/Providers/HelperServiceProvider.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/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
21 | 'scheme' => 'https',
22 | ],
23 |
24 | 'postmark' => [
25 | 'token' => env('POSTMARK_TOKEN'),
26 | ],
27 |
28 | 'ses' => [
29 | 'key' => env('AWS_ACCESS_KEY_ID'),
30 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
31 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
32 | ],
33 |
34 | ];
35 |
--------------------------------------------------------------------------------
/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/factories/BannerFactory.php:
--------------------------------------------------------------------------------
1 | 'Example Banner',
26 | 'description' => $this->faker->sentence,
27 | 'image' => 'banner-1.jpg',
28 | 'active_from' => now()->subWeek(),
29 | 'active_to' => now()->addWeek(),
30 | ];
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/database/factories/FaqCategoryFactory.php:
--------------------------------------------------------------------------------
1 | 'FAQ Category'
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/database/factories/FaqFactory.php:
--------------------------------------------------------------------------------
1 | 'Question',
27 | 'answer' => 'Answer',
28 | 'category_id' => FAQCategory::factory()->create(),
29 | ];
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/database/factories/LogActivityFactory.php:
--------------------------------------------------------------------------------
1 | $this->faker->name,
26 | 'description' => $this->faker->sentence,
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/database/factories/LogModelActivityFactory.php:
--------------------------------------------------------------------------------
1 | 1,
26 | 'subject_type' => 'App\Models\User',
27 | 'name' => 'user_created',
28 | 'before' => 'before',
29 | 'after' => 'after',
30 | 'user_id' => 1,
31 | ];
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/database/factories/NavigationFactory.php:
--------------------------------------------------------------------------------
1 | 'home',
26 | 'name' => 'Click Me',
27 | 'slug' => 'click-me',
28 | 'description' => 'Lorem Ipsum',
29 | 'url' => '/click-me',
30 | 'help_index_title' => '',
31 | 'help_index_content' => '',
32 | 'help_create_title' => '',
33 | 'help_create_content' => '',
34 | 'help_edit_title' => '',
35 | 'help_edit_content' => '',
36 | 'list_order' => 1,
37 | 'is_hidden' => 0,
38 | 'parent_id' => 0,
39 | 'url_parent_id' => 0,
40 | 'created_by' => 1,
41 | 'updated_by' => 1,
42 | ];
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/database/factories/PageFactory.php:
--------------------------------------------------------------------------------
1 | 'Click Me',
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/database/factories/PhotoFactory.php:
--------------------------------------------------------------------------------
1 | define(Photo::class, function (Faker $faker) {
9 | return [
10 | //
11 | ];
12 | });
13 |
--------------------------------------------------------------------------------
/database/factories/ProductCategoryFactory.php:
--------------------------------------------------------------------------------
1 | 'Example Category',
26 | 'image' => 'image-1.png',
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/database/factories/ProductFactory.php:
--------------------------------------------------------------------------------
1 | $this->faker->name,
27 | 'slug' => $this->faker->name,
28 | 'reference' => $this->faker->numberBetween(100000, 999999),
29 | 'amount' => 100,
30 | //'active_from' => now()->subDay(),
31 | //'active_to' => null,
32 | 'special_amount' => null,
33 | 'special_from' => null,
34 | 'special_to' => null,
35 | 'available' => null,
36 | 'content' => $this->faker->sentence,
37 | 'category_id' => ProductCategory::factory()->create()->id,
38 | ];
39 | }
40 |
41 | //$factory->afterCreating(Product::class, function ($user, $faker) {
42 | // $user->features()->save(factory(ProductFeature::class)->make());
43 | //});
44 | }
45 |
--------------------------------------------------------------------------------
/database/factories/ProductFeatureFactory.php:
--------------------------------------------------------------------------------
1 | 'Example Category',
27 | 'slug' => 'example-slug',
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/database/factories/ProductStatusFactory.php:
--------------------------------------------------------------------------------
1 | 'Example Name',
28 | 'category' => 'Example Category',
29 | 'slug' => 'example-slug',
30 | ];
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/database/factories/RoleFactory.php:
--------------------------------------------------------------------------------
1 | 'Example Role',
26 | 'slug' => '/slug',
27 | 'keyword' => 'example_role',
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/database/factories/SettingsFactory.php:
--------------------------------------------------------------------------------
1 | 'Titan Starter',
27 | 'description' => 'A Laravel Website with Admin access Starter project with AdminLTE theme and basic features.',
28 | 'author' => 'Ben-Piet O\'Callaghan',
29 | 'keywords' => 'cms, admin, titan, laravel, bpocallaghan',
30 | ];
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->string('name');
17 | $table->string('email')->unique();
18 | $table->timestamp('email_verified_at')->nullable();
19 | $table->string('password');
20 | $table->rememberToken();
21 | $table->timestamps();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | */
28 | public function down(): void
29 | {
30 | Schema::dropIfExists('users');
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php:
--------------------------------------------------------------------------------
1 | string('email')->primary();
16 | $table->string('token');
17 | $table->timestamp('created_at')->nullable();
18 | });
19 | }
20 |
21 | /**
22 | * Reverse the migrations.
23 | */
24 | public function down(): void
25 | {
26 | Schema::dropIfExists('password_reset_tokens');
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/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/2019_08_19_000000_create_failed_jobs_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->string('uuid')->unique();
17 | $table->text('connection');
18 | $table->text('queue');
19 | $table->longText('payload');
20 | $table->longText('exception');
21 | $table->timestamp('failed_at')->useCurrent();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | */
28 | public function down(): void
29 | {
30 | Schema::dropIfExists('failed_jobs');
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_03_124353_create_jobs_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->string('queue')->index();
19 | $table->longText('payload');
20 | $table->unsignedTinyInteger('attempts');
21 | $table->unsignedInteger('reserved_at')->nullable();
22 | $table->unsignedInteger('available_at');
23 | $table->unsignedInteger('created_at');
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('jobs');
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_10_065955_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/2019_12_14_000001_create_personal_access_tokens_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->morphs('tokenable');
17 | $table->string('name');
18 | $table->string('token', 64)->unique();
19 | $table->text('abilities')->nullable();
20 | $table->timestamp('last_used_at')->nullable();
21 | $table->timestamp('expires_at')->nullable();
22 | $table->timestamps();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | */
29 | public function down(): void
30 | {
31 | Schema::dropIfExists('personal_access_tokens');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_15_141543_create_log_logins_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('username', 50);
19 | $table->string('status'); // success, no-user, inactive, disabled
20 | $table->string('role'); // website, admin
21 | $table->string('client_ip');
22 | $table->text('client_agent');
23 | $table->timestamp('created_at');
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::drop('log_logins');
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_20_151143_create_roles_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('icon')->nullable();
19 | $table->string('name', 50);
20 | $table->string('slug', 50);
21 | $table->string('keyword', 50)->unique();
22 | $table->string('summary')->nullable();
23 | $table->timestamps();
24 | $table->softDeletes();
25 | $table->integer('created_by')->unsigned();
26 | $table->integer('updated_by')->unsigned()->nullable();
27 | $table->integer('deleted_by')->unsigned()->nullable();
28 | });
29 | }
30 |
31 | /**
32 | * Reverse the migrations.
33 | *
34 | * @return void
35 | */
36 | public function down()
37 | {
38 | Schema::dropIfExists('roles');
39 | }
40 | };
41 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_20_151151_create_role_user_pivot_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('role_id')->unsigned()->index();
19 | $table->integer('user_id')->unsigned()->index();
20 |
21 | //$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
22 | //$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
23 | //$table->primary(['role_id', 'user_id']);
24 | $table->timestamps();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::drop('role_user');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/migrations/2020_01_05_141724_create_log_activities_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name', 50);
19 | $table->text('description');
20 | $table->bigInteger('subject_id')->unsigned()->nullable();
21 | $table->string('subject_type', 150)->nullable();
22 | $table->bigInteger('user_id')->unsigned()->index()->nullable();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::drop('log_activities');
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/database/migrations/2020_01_05_151724_create_log_model_activities_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('subject_id')->unsigned()->index();
19 | $table->string('subject_type', 150)->index();
20 | $table->string('name', 191);
21 | $table->text('before')->nullable();
22 | $table->text('after')->nullable();
23 | $table->integer('user_id')->unsigned()->index();
24 | $table->timestamps();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::drop('log_model_activities');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/migrations/2020_01_15_083010_create_navigation_role_pivot_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('navigation_id')->unsigned()->index();
19 | $table->integer('role_id')->unsigned()->index();
20 | $table->timestamps();
21 |
22 | //$table->integer('navigation_id')->unsigned()->index();
23 | //$table->foreign('navigation_id')->references('id')->on('navigations')->onDelete('cascade');
24 | //$table->integer('role_id')->unsigned()->index();
25 | //$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
26 | //$table->primary(['navigation_id', 'role_id']);
27 | });
28 | }
29 |
30 | /**
31 | * Reverse the migrations.
32 | *
33 | * @return void
34 | */
35 | public function down()
36 | {
37 | Schema::drop('navigation_role');
38 | }
39 | };
40 |
--------------------------------------------------------------------------------
/database/migrations/2020_02_03_184930_create_banner_page_pivot_table.php:
--------------------------------------------------------------------------------
1 | integer('banner_id')->unsigned()->index();
18 | //$table->foreign('banner_id')->references('id')->on('banners')->onDelete('cascade');
19 | $table->integer('page_id')->unsigned()->index();
20 | //$table->foreign('page_id')->references('id')->on('pages')->onDelete('cascade');
21 | $table->primary(['banner_id', 'page_id']);
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | *
28 | * @return void
29 | */
30 | public function down()
31 | {
32 | Schema::drop('banner_page');
33 | }
34 | };
35 |
--------------------------------------------------------------------------------
/database/migrations/2020_02_04_082639_create_photos_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->boolean('is_cover')->default(false);
19 | $table->string('name');
20 | $table->string('filename');
21 | $table->bigInteger('photoable_id')->unsigned()->index();
22 | $table->string('photoable_type')->index();
23 | $table->integer('list_order')->default(999);
24 | $table->timestamps();
25 | $table->softDeletes();
26 | $table->integer('created_by')->unsigned();
27 | $table->integer('updated_by')->unsigned()->nullable();
28 | $table->integer('deleted_by')->unsigned()->nullable();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::drop('photos');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2020_02_04_141424_create_documents_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('filename');
20 | $table->bigInteger('documentable_id')->unsigned()->index();
21 | $table->string('documentable_type')->index();
22 | $table->integer('list_order')->default(999);
23 | $table->timestamps();
24 | $table->softDeletes();
25 | $table->integer('created_by')->unsigned();
26 | $table->integer('updated_by')->unsigned()->nullable();
27 | $table->integer('deleted_by')->unsigned()->nullable();
28 | });
29 | }
30 |
31 | /**
32 | * Reverse the migrations.
33 | *
34 | * @return void
35 | */
36 | public function down()
37 | {
38 | Schema::drop('documents');
39 | }
40 | };
41 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_16_122143_create_resource_categories_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->index();
19 | $table->string('slug');
20 | $table->timestamps();
21 | $table->softDeletes();
22 | $table->integer('created_by')->unsigned();
23 | $table->integer('updated_by')->unsigned()->nullable();
24 | $table->integer('deleted_by')->unsigned()->nullable();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::dropIfExists('resource_categories');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_204158_create_feedback_contact_us_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('firstname');
19 | $table->string('lastname');
20 | $table->string('email');
21 | $table->string('phone')->nullable();
22 | $table->text('content')->nullable();
23 | $table->string('client_ip');
24 | $table->text('client_agent');
25 | $table->integer('contactable_id')->unsigned()->index();
26 | $table->string('contactable_type')->index();
27 | $table->string('contactable_name');
28 | $table->string('contactable_type_name');
29 | $table->timestamps();
30 | });
31 | }
32 |
33 | /**
34 | * Reverse the migrations.
35 | *
36 | * @return void
37 | */
38 | public function down()
39 | {
40 | Schema::dropIfExists('feedback_contact_us');
41 | }
42 | };
43 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_204415_create_article_categories_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->index();
19 | $table->string('slug');
20 | $table->timestamps();
21 | $table->softDeletes();
22 | $table->integer('created_by')->unsigned();
23 | $table->integer('updated_by')->unsigned()->nullable();
24 | $table->integer('deleted_by')->unsigned()->nullable();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::dropIfExists('article_categories');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_204458_create_product_categories_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->index();
19 | $table->string('slug');
20 | $table->string('url')->nullable();
21 | $table->integer('list_order')->unsigned()->default(99);
22 | $table->integer('parent_id')->unsigned()->default(0);
23 | $table->string('image');
24 | $table->timestamps();
25 | $table->softDeletes();
26 | $table->integer('created_by')->unsigned();
27 | $table->integer('updated_by')->unsigned()->nullable();
28 | $table->integer('deleted_by')->unsigned()->nullable();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('product_categories');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_204738_create_product_features_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->index();
19 | $table->string('slug');
20 | $table->timestamps();
21 | $table->softDeletes();
22 | $table->integer('created_by')->unsigned();
23 | $table->integer('updated_by')->unsigned()->nullable();
24 | $table->integer('deleted_by')->unsigned()->nullable();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::dropIfExists('product_features');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_204758_create_product_feature_pivot_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('product_id')->unsigned()->index();
19 | $table->integer('product_feature_id')->unsigned()->index();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('product_feature_pivot');
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_205404_create_checkout_product_pivot_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('quantity');
19 | $table->integer('checkout_id')->unsigned()->index();
20 | $table->integer('product_id')->unsigned()->index();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::dropIfExists('checkout_product');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_205540_create_product_transaction_pivot_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('quantity');
19 | $table->integer('transaction_id')->unsigned()->index();
20 | $table->integer('product_id')->unsigned()->index();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::dropIfExists('product_transaction');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_205620_create_log_product_searches_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('slug')->index();
19 | $table->integer('searchable_id')->unsigned()->index()->nullable();
20 | $table->string('searchable_type')->index()->nullable();
21 | $table->timestamp('created_at')->nullable();
22 | $table->integer('created_by')->unsigned();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('log_product_searches');
34 | }
35 | };
36 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_205659_create_shipping_addresses_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('address');
19 | $table->string('city');
20 | $table->string('province')->nullable();
21 | $table->string('country');
22 | $table->string('postal_code')->nullable();
23 | $table->integer('user_id');
24 | $table->integer('transaction_id')->nullable();
25 | $table->timestamps();
26 | $table->softDeletes();
27 | $table->integer('created_by')->unsigned();
28 | $table->integer('updated_by')->unsigned()->nullable();
29 | $table->integer('deleted_by')->unsigned()->nullable();
30 | });
31 | }
32 |
33 | /**
34 | * Reverse the migrations.
35 | *
36 | * @return void
37 | */
38 | public function down()
39 | {
40 | Schema::dropIfExists('shipping_addresses');
41 | }
42 | };
43 |
--------------------------------------------------------------------------------
/database/migrations/2020_04_25_205731_create_product_statuses_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->index();
19 | $table->string('category');
20 | $table->string('slug');
21 | $table->timestamps();
22 | $table->softDeletes();
23 | $table->integer('created_by')->unsigned();
24 | $table->integer('updated_by')->unsigned()->nullable();
25 | $table->integer('deleted_by')->unsigned()->nullable();
26 | });
27 | }
28 |
29 | /**
30 | * Reverse the migrations.
31 | *
32 | * @return void
33 | */
34 | public function down()
35 | {
36 | Schema::dropIfExists('product_statuses');
37 | }
38 | };
39 |
--------------------------------------------------------------------------------
/database/migrations/2020_05_03_194805_create_faqs_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('question')->index();
19 | $table->string('slug')->index();
20 | $table->text('answer');
21 | $table->unsignedBigInteger('total_read')->default(0);
22 | $table->unsignedBigInteger('helpful_yes')->default(0);
23 | $table->unsignedBigInteger('helpful_no')->default(0);
24 | $table->unsignedBigInteger('category_id')->index();
25 | $table->unsignedBigInteger('list_order')->nullable();
26 | $table->timestamps();
27 | $table->softDeletes();
28 | $table->integer('created_by')->unsigned();
29 | $table->integer('updated_by')->unsigned()->nullable();
30 | $table->integer('deleted_by')->unsigned()->nullable();
31 | });
32 | }
33 |
34 | /**
35 | * Reverse the migrations.
36 | *
37 | * @return void
38 | */
39 | public function down()
40 | {
41 | Schema::dropIfExists('faqs');
42 | }
43 | };
44 |
--------------------------------------------------------------------------------
/database/migrations/2020_05_03_194835_create_faq_categories_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->index();
19 | $table->string('slug');
20 | $table->timestamps();
21 | $table->softDeletes();
22 | $table->integer('created_by')->unsigned();
23 | $table->integer('updated_by')->unsigned()->nullable();
24 | $table->integer('deleted_by')->unsigned()->nullable();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::dropIfExists('faq_categories');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/migrations/2020_05_22_130055_create_continents_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('slug')->index();
20 | $table->smallInteger('zoom_level')->default(10);
21 | $table->string('latitude', '50')->nullable();
22 | $table->string('longitude', '50')->nullable();
23 | $table->timestamps();
24 | $table->softDeletes();
25 | $table->integer('created_by')->unsigned();
26 | $table->integer('updated_by')->unsigned()->nullable();
27 | $table->integer('deleted_by')->unsigned()->nullable();
28 | });
29 | }
30 |
31 | /**
32 | * Reverse the migrations.
33 | *
34 | * @return void
35 | */
36 | public function down()
37 | {
38 | Schema::dropIfExists('continents');
39 | }
40 | };
41 |
--------------------------------------------------------------------------------
/database/migrations/2020_05_22_130125_create_countries_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('slug')->index();
20 | $table->smallInteger('zoom_level')->default(10);
21 | $table->string('latitude', '50')->nullable();
22 | $table->string('longitude', '50')->nullable();
23 | $table->unsignedBigInteger('continent_id')->index();
24 | $table->timestamps();
25 | $table->softDeletes();
26 | $table->integer('created_by')->unsigned();
27 | $table->integer('updated_by')->unsigned()->nullable();
28 | $table->integer('deleted_by')->unsigned()->nullable();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('countries');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2020_05_22_130145_create_provinces_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('slug')->index();
20 | $table->smallInteger('zoom_level')->default(10);
21 | $table->string('latitude', '50')->nullable();
22 | $table->string('longitude', '50')->nullable();
23 | $table->unsignedBigInteger('country_id')->index();
24 | $table->timestamps();
25 | $table->softDeletes();
26 | $table->integer('created_by')->unsigned();
27 | $table->integer('updated_by')->unsigned()->nullable();
28 | $table->integer('deleted_by')->unsigned()->nullable();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('provinces');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2020_05_22_130157_create_cities_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('slug')->index();
20 | $table->smallInteger('zoom_level')->default(10);
21 | $table->string('latitude', '50')->nullable();
22 | $table->string('longitude', '50')->nullable();
23 | $table->unsignedBigInteger('province_id')->index();
24 | $table->timestamps();
25 | $table->softDeletes();
26 | $table->integer('created_by')->unsigned();
27 | $table->integer('updated_by')->unsigned()->nullable();
28 | $table->integer('deleted_by')->unsigned()->nullable();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('cities');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2020_05_22_130235_create_suburbs_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('slug')->index();
20 | $table->smallInteger('zoom_level')->default(10);
21 | $table->string('latitude', '50')->nullable();
22 | $table->string('longitude', '50')->nullable();
23 | $table->unsignedBigInteger('city_id')->index();
24 | $table->timestamps();
25 | $table->softDeletes();
26 | $table->integer('created_by')->unsigned();
27 | $table->integer('updated_by')->unsigned()->nullable();
28 | $table->integer('deleted_by')->unsigned()->nullable();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('suburbs');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2020_12_09_073453_update_pages_table.php:
--------------------------------------------------------------------------------
1 | boolean('allow_comments')->nullable();
18 | $table->integer('template_id')->nullable();
19 | });
20 | }
21 |
22 | /**
23 | * Reverse the migrations.
24 | *
25 | * @return void
26 | */
27 | public function down()
28 | {
29 | //
30 | }
31 | };
32 |
--------------------------------------------------------------------------------
/database/migrations/2020_12_09_074146_create_comments_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->nullable();
19 | $table->string('email', 50)->nullable();
20 | $table->text('content');
21 | $table->boolean('is_approved')->nullable();
22 | $table->integer('approved_by')->unsigned()->nullable();
23 | $table->timestamp('approved_at')->nullable();
24 | $table->bigInteger('commentable_id')->unsigned()->index();
25 | $table->string('commentable_type')->index();
26 | $table->timestamps();
27 | $table->softDeletes();
28 | $table->integer('created_by')->unsigned();
29 | $table->integer('updated_by')->unsigned()->nullable();
30 | $table->integer('deleted_by')->unsigned()->nullable();
31 | });
32 | }
33 |
34 | /**
35 | * Reverse the migrations.
36 | *
37 | * @return void
38 | */
39 | public function down()
40 | {
41 | Schema::dropIfExists('comments');
42 | }
43 | };
44 |
--------------------------------------------------------------------------------
/database/migrations/2020_12_14_093823_create_templates_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('template');
20 | $table->string('controller_action')->nullable();
21 | $table->timestamps();
22 | $table->softDeletes();
23 | $table->integer('created_by')->unsigned();
24 | $table->integer('updated_by')->unsigned()->nullable();
25 | $table->integer('deleted_by')->unsigned()->nullable();
26 | });
27 | }
28 |
29 | /**
30 | * Reverse the migrations.
31 | *
32 | * @return void
33 | */
34 | public function down()
35 | {
36 | Schema::dropIfExists('templates');
37 | }
38 | };
39 |
--------------------------------------------------------------------------------
/database/migrations/2020_12_16_091634_create_sections_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('sectionable_id')->unsigned()->index();
19 | $table->string('sectionable_type')->index();
20 | $table->string('name')->nullable();
21 | $table->string('layout')->nullable();
22 | $table->text('content')->nullable();
23 | $table->integer('list_order')->nullable();
24 | $table->timestamps();
25 | $table->softDeletes();
26 | $table->integer('created_by')->unsigned();
27 | $table->integer('updated_by')->unsigned()->nullable();
28 | $table->integer('deleted_by')->unsigned()->nullable();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('sections');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2020_12_16_143624_create_content_section_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('content_id')->unsigned()->index();
19 | $table->integer('section_id')->unsigned()->index();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::dropIfExists('content_section');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2021_03_18_115830_create_layouts_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name')->index();
19 | $table->string('layout');
20 | $table->string('slug');
21 | $table->timestamps();
22 | $table->softDeletes();
23 | $table->integer('created_by')->unsigned();
24 | $table->integer('updated_by')->unsigned()->nullable();
25 | $table->integer('deleted_by')->unsigned()->nullable();
26 | });
27 | }
28 |
29 | /**
30 | * Reverse the migrations.
31 | *
32 | * @return void
33 | */
34 | public function down()
35 | {
36 | Schema::dropIfExists('layouts');
37 | }
38 | };
39 |
--------------------------------------------------------------------------------
/database/migrations/2021_03_18_115854_create_layout_template_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('layout_id')->unsigned()->index();
19 | $table->integer('template_id')->unsigned()->index();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::dropIfExists('layout_template');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/seeders/BannersTableSeeder.php:
--------------------------------------------------------------------------------
1 | $item)
16 | {
17 | Banner::create([
18 |
19 | ]);
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/database/seeders/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call(RolesTableSeeder::class);
16 | $this->call(UsersTableSeeder::class);
17 | $this->call(NavigationsTableSeeder::class);
18 | $this->call(SettingsTableSeeder::class);
19 | $this->call(PagesTableSeeder::class);
20 | $this->call(SectionsTableSeeder::class);
21 | $this->call(TemplatesTableSeeder::class);
22 | $this->call(LayoutsTableSeeder::class);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/database/seeders/LayoutsTableSeeder.php:
--------------------------------------------------------------------------------
1 | importBasic('layouts.csv', \App\Models\Layout::class);
12 | $this->importBasicTable('layout_template.csv', 'layout_template');
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/database/seeders/NavigationsTableSeeder.php:
--------------------------------------------------------------------------------
1 | importBasic('navigations.csv', \App\Models\Navigation::class);
12 | $this->importBasicTable('navigation_role.csv', 'navigation_role');
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/database/seeders/PagesTableSeeder.php:
--------------------------------------------------------------------------------
1 | importBasic('pages.csv', Page::class);
13 | //$this->importBasicTable('banner_page.csv', 'banner_page');
14 | //$this->importBasicTable('page_content.csv', 'page_content');
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/database/seeders/RolesTableSeeder.php:
--------------------------------------------------------------------------------
1 | importBasic('roles.csv', \App\Models\Role::class);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/database/seeders/SectionsTableSeeder.php:
--------------------------------------------------------------------------------
1 | importBasic('sections.csv', \App\Models\Section::class);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/database/seeders/SettingsTableSeeder.php:
--------------------------------------------------------------------------------
1 | 'Titan Starter',
17 | 'description' => 'A Laravel Website with Admin access Starter project with AdminLTE theme and basic features.',
18 | 'author' => 'Ben-Piet O\'Callaghan',
19 | 'keywords' => 'cms, admin, titan, laravel, bpocallaghan',
20 | 'email' => 'hello@example.com',
21 | 'telephone' => '123456789',
22 | 'cellphone' => 'cellphone',
23 | 'address' => 'Example Address',
24 | ]);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/database/seeders/TemplatesTableSeeder.php:
--------------------------------------------------------------------------------
1 | importBasic('templates.csv', \App\Models\Template::class);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/database/seeders/csv/layout_template.csv:
--------------------------------------------------------------------------------
1 | id,layout_id,template_id,created_at,updated_at
2 | "1","6","8","2021-03-19 09:21:35","2021-03-19 09:21:35"
3 | "2","7","10","2021-03-19 09:21:59","2021-03-19 09:21:59"
4 |
--------------------------------------------------------------------------------
/database/seeders/csv/layouts.csv:
--------------------------------------------------------------------------------
1 | id,name,layout,slug,created_at,updated_at,deleted_at,created_by,updated_by,deleted_by
2 | "1","1 Column","col-12","1-column","2021-03-19 09:19:59","2021-03-19 09:19:59","","2","2",
3 | "2","2 Columns","col-md-6","2-columns","2021-03-19 09:20:15","2021-03-19 09:20:15","","2","2",
4 | "3","3 Columns","col-md-4","3-columns","2021-03-19 09:20:32","2021-03-19 09:20:32","","2","2",
5 | "4","4 Columns","col-md-3","4-columns","2021-03-19 09:20:48","2021-03-19 09:20:48","","2","2",
6 | "5","Include Contact Form & Details","contact","include-contact-form-and-details","2021-03-19 09:21:16","2021-03-19 09:21:16","","2","2",
7 | "6","Include Articles","articles","include-articles","2021-03-19 09:21:35","2021-03-19 09:21:35","","2","2",
8 | "7","Include Products","products","include-products","2021-03-19 09:21:59","2021-03-19 09:21:59","","2","2",
9 |
--------------------------------------------------------------------------------
/database/seeders/csv/roles.csv:
--------------------------------------------------------------------------------
1 | id,icon,name,slug,keyword,summary,created_at,updated_at,deleted_at,created_by,updated_by,deleted_by
2 | "1","user","User","/","user",,"2020-01-23 14:23:30","2020-01-23 14:23:30",,"0","0",
3 | "2","user-secret","Admin","/admin","admin",,"2020-01-23 14:23:30","2020-01-23 14:23:30",,"0","0",
4 | "3","comments","Admin Notifications","/admin","admin_notify",,"2020-01-23 17:32:00","2020-01-23 09:55:26",,"1","1",
5 | "4","universal-access","Developer","/admin","developer",,"2020-01-23 14:23:30","2020-01-23 14:23:30",,"0","0",
6 |
--------------------------------------------------------------------------------
/database/seeders/csv/sections.csv:
--------------------------------------------------------------------------------
1 | id,sectionable_id,sectionable_type,name,layout,content,list_order,created_at,updated_at,deleted_at,created_by,updated_by,deleted_by
2 | "3","6","App\Models\Page","","faq","","","2021-01-28 10:16:38","2021-01-28 10:16:48","","2","2",""
3 | "4","14","App\Models\Page","","articles","","","2021-01-28 10:35:31","2021-01-28 10:35:31","","2","2",""
4 | "5","15","App\Models\Page","","products","","","2021-01-28 10:37:48","2021-01-28 10:37:48","","2","2",""
5 |
--------------------------------------------------------------------------------
/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/css/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/public/images/avatars/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/avatars/default.png
--------------------------------------------------------------------------------
/public/images/avatars/female.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/avatars/female.png
--------------------------------------------------------------------------------
/public/images/avatars/male.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/avatars/male.png
--------------------------------------------------------------------------------
/public/images/avatars/ninja.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/avatars/ninja.png
--------------------------------------------------------------------------------
/public/images/logo-secondary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/logo-secondary.png
--------------------------------------------------------------------------------
/public/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/logo.png
--------------------------------------------------------------------------------
/public/images/logo_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/logo_small.png
--------------------------------------------------------------------------------
/public/images/share.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/share.jpg
--------------------------------------------------------------------------------
/public/images/vendor/lightbox2/dist/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/vendor/lightbox2/dist/close.png
--------------------------------------------------------------------------------
/public/images/vendor/lightbox2/dist/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/vendor/lightbox2/dist/loading.gif
--------------------------------------------------------------------------------
/public/images/vendor/lightbox2/dist/next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/vendor/lightbox2/dist/next.png
--------------------------------------------------------------------------------
/public/images/vendor/lightbox2/dist/prev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/images/vendor/lightbox2/dist/prev.png
--------------------------------------------------------------------------------
/public/js/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/js/vendor/admin_compiled.js": "/js/vendor/admin_compiled.js",
3 | "/js/vendor/website_compiled.js": "/js/vendor/website_compiled.js",
4 | "/css/admin.css": "/css/admin.css",
5 | "/css/website.css": "/css/website.css",
6 | "/js/admin.js": "/js/admin.js",
7 | "/js/website.js": "/js/website.js"
8 | }
9 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/public/sounds/danger.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/sounds/danger.mp3
--------------------------------------------------------------------------------
/public/sounds/info.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bpocallaghan/titan-starter-website/9a3facaafb9838077b6535e5243af5b2be6bd15a/public/sounds/info.mp3
--------------------------------------------------------------------------------
/public/uploads/documents/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/public/uploads/images/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/resources/assets/js/admin.js:
--------------------------------------------------------------------------------
1 | require('./bootstrap');
2 |
3 | window.moment = require('moment');
4 |
5 | require('pace-js');
6 | require('select2');
7 | require('jquery.cookie');
8 |
9 | require('datatables.net-dt');
10 | require('datatables.net-bs4');
11 | require('datatables.net-responsive-dt');
12 |
13 | require('admin-lte');
14 |
15 | import Sortable from 'sortablejs';
16 | window.Sortable = Sortable;
17 |
18 | const { Dropzone } = require("dropzone");
19 | // window.Dropzone = require('dropzone');
20 | Dropzone.autoDiscover = false;
21 |
22 | require('lightbox2');
23 | require('summernote/dist/summernote-bs4.js');
24 |
25 | require('pc-bootstrap4-datetimepicker');
26 | require('daterangepicker');
27 |
28 | require('cropperjs');
29 | require('jquery-cropper');
30 |
31 | require('chart.js');
32 | /*
33 | window.Vue = require('vue');
34 | // const files = require.context('./', true, /\.vue$/i);
35 | // files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));
36 | Vue.component('example-component', require('./components/ExampleComponent.vue').default);
37 |
38 | const app = new Vue({
39 | el: '#app'
40 | });
41 | */
42 |
--------------------------------------------------------------------------------
/resources/assets/js/website.js:
--------------------------------------------------------------------------------
1 | require('./bootstrap');
2 |
3 | require('pace-js');
4 | require('select2');
5 | require('jquery.cookie');
6 |
7 | require('datatables.net');
8 | require('datatables.net-bs4');
9 |
10 | require('lightbox2/dist/js/lightbox.js');
--------------------------------------------------------------------------------
/resources/assets/sass/titan/google_maps.scss:
--------------------------------------------------------------------------------
1 | /*
2 | |------------------------------------------
3 | | GOOGLE MAPS - SEARCH BOX
4 | |------------------------------------------
5 | */
6 | #pac-input {
7 | padding: 0 11px 0 13px;
8 | margin-top: 50px;
9 | left: 10px !important;
10 | outline: none;
11 | font-family: Roboto;
12 | font-size: 15px;
13 | font-weight: 300;
14 | text-overflow: ellipsis;
15 | box-sizing: border-box;
16 | -moz-box-sizing: border-box;
17 | width: 250px;
18 | height: 32px;
19 | background-color: #fff;
20 | border: 1px solid transparent;
21 | border-radius: 2px 0 0 2px;
22 | box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
23 | }
24 |
25 | #pac-input:focus {
26 | border-color: #4d90fe;
27 | }
28 |
--------------------------------------------------------------------------------
/resources/assets/sass/website.scss:
--------------------------------------------------------------------------------
1 | $theme-colors: (
2 | "primary": #255d78,
3 | "secondary": #1f1f1f,
4 | "dark": #191919
5 | );
6 |
7 | //bootstrap
8 | @import "~bootstrap";
9 |
10 | // Font Awesome
11 | @import "~@fortawesome/fontawesome-free/scss/fontawesome";
12 | @import "~@fortawesome/fontawesome-free/scss/solid";
13 | @import "~@fortawesome/fontawesome-free/scss/brands";
14 | @import "~@fortawesome/fontawesome-free/scss/regular";
15 |
16 | //vendor packages
17 | @import "~lightbox2/dist/css/lightbox.css";
18 | @import "~datatables.net-bs4/css/dataTables.bootstrap4.css";
19 |
20 | // Fonts - Google Font: Source Sans Pro
21 | @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap");
22 | @import url("https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;700&display=swap");
23 |
24 | // website theme
25 | @import "website/overrides";
26 |
--------------------------------------------------------------------------------
/resources/views/admin/analytics/demographics.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 | {{-- demographics --}}
5 |
6 |
7 | @include('admin.analytics.partials.gender')
8 |
9 |
10 |
11 | @include('admin.analytics.partials.age')
12 |
13 |
14 | @endsection
--------------------------------------------------------------------------------
/resources/views/admin/analytics/devices.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 | {{-- devices + browsers --}}
5 |
6 |
7 | @include('admin.analytics.partials.devices_category')
8 |
9 |
10 |
11 | @include('admin.analytics.partials.browsers')
12 |
13 |
14 |
15 |
16 |
17 | @include('admin.analytics.partials.devices')
18 |
19 |
20 | @include('admin.analytics.partials.resolution')
21 |
22 |
23 | @endsection
--------------------------------------------------------------------------------
/resources/views/admin/analytics/summary.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 | @include('admin.analytics.partials.analytics_header', ['activeUsers' => true])
5 |
6 |
7 |
8 | @include('admin.analytics.partials.visitors_views')
9 |
10 |
11 |
12 | {{-- locations + devices_category --}}
13 |
14 |
15 | @include('admin.analytics.partials.locations')
16 |
17 |
18 | @include('admin.analytics.partials.devices_category')
19 |
20 |
21 | @endsection
--------------------------------------------------------------------------------
/resources/views/admin/analytics/visits_referrals.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 | {{-- most visited and referrers --}}
5 |
6 |
7 | @include('admin.analytics.partials.visited_pages')
8 |
9 |
10 |
11 | @include('admin.analytics.partials.referrers')
12 |
13 |
14 |
15 |
16 |
17 | @include('admin.analytics.partials.session_group')
18 |
19 |
20 | @endsection
--------------------------------------------------------------------------------
/resources/views/admin/articles/categories/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 |
6 |
9 |
10 |
11 |
12 | @include('admin.partials.card.info')
13 |
14 | @include('admin.partials.card.buttons')
15 |
16 |
17 |
18 |
19 | Name
20 | Slug
21 | Created
22 | Action
23 |
24 |
25 |
26 | @foreach ($items as $item)
27 |
28 | {{ $item->name }}
29 | {{ $item->slug }}
30 | {{ format_date($item->created_at) }}
31 | {!! action_row($selectedNavigation->url, $item->id, $item->name, ['edit', 'delete']) !!}
32 |
33 | @endforeach
34 |
35 |
36 |
37 |
38 |
39 | @endsection
40 |
--------------------------------------------------------------------------------
/resources/views/admin/dashboard.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 | @include('admin.analytics.partials.analytics_header')
5 |
6 |
7 |
8 | @include('admin.analytics.partials.visitors_views')
9 |
10 |
11 |
12 | {{-- locations + most visited pages --}}
13 |
14 |
15 | @include('admin.analytics.partials.visited_pages')
16 |
17 |
18 |
19 | @include('admin.analytics.partials.locations')
20 |
21 |
22 |
23 |
24 |
25 | @include('admin.analytics.partials.devices')
26 |
27 |
28 | @include('admin.analytics.partials.browsers')
29 |
30 |
31 | @endsection
32 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/boxes/datatable_toolbar.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{ isset($title)? $title:'DataTable' }}
3 | ({{ $fromDate->format('l, d F') }} - {{ $toDate->format('l, d F') }})
4 |
5 |
6 |
7 |
20 |
21 | @section('scripts')
22 | @parent
23 |
39 | @endsection
--------------------------------------------------------------------------------
/resources/views/admin/partials/boxes/toolbar.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/breadcrumb.blade.php:
--------------------------------------------------------------------------------
1 | @if(isset($breadcrumbItems))
2 | Breadcrumb
3 |
26 | @endif
27 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/card/buttons.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/card/info.blade.php:
--------------------------------------------------------------------------------
1 | @if($selectedNavigation)
2 | @if($selectedNavigation->{'help_'.$selectedNavigation->mode.'_title'})
3 |
4 |
{{ $selectedNavigation->{'help_'.$selectedNavigation->mode.'_title'} }}
5 |
{!! $selectedNavigation->{'help_'.$selectedNavigation->mode.'_content'} !!}
6 |
7 | @endif
8 | @endif
9 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/datatables.blade.php:
--------------------------------------------------------------------------------
1 | @section('scripts')
2 | @parent
3 |
22 | @endsection
--------------------------------------------------------------------------------
/resources/views/admin/partials/form/form_footer.blade.php:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/navigation.blade.php:
--------------------------------------------------------------------------------
1 | Navigation
2 |
16 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/navigation/navigation_list.blade.php:
--------------------------------------------------------------------------------
1 | @foreach ($collection as $nav)
2 |
19 | @endforeach
20 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/pagecrumb.blade.php:
--------------------------------------------------------------------------------
1 | @if(isset($pagecrumbItems))
2 | Pagecrumb
3 |
4 |
5 | @foreach($pagecrumbItems as $nav)
6 |
7 | @if($loop->first)
8 | @if(strlen($nav->icon) > 2)
9 |
10 | @endif
11 | {{ $nav->name }}
12 | @else
13 |
14 | @if(strlen($nav->icon) > 2)
15 |
16 | @endif
17 | {{ $nav->name }}
18 |
19 | @endif
20 | @endforeach
21 |
22 |
23 | @endif
24 |
--------------------------------------------------------------------------------
/resources/views/admin/reports/summary.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 |
6 |
12 |
13 |
14 |
15 | @include('admin.partials.card.info')
16 |
17 |
18 |
19 |
20 | Description
21 | Total
22 |
23 |
24 |
25 | @foreach ($items as $item)
26 |
27 | {!! $item[0] !!}
28 | {!! $item[1] !!}
29 |
30 | @endforeach
31 |
32 |
33 |
34 |
35 |
36 | @endsection
37 |
--------------------------------------------------------------------------------
/resources/views/admin/resources/create_edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 | @include('admin.resources.resourceable')
5 | @endsection
--------------------------------------------------------------------------------
/resources/views/admin/resources/documents/create_edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 | @include('admin.resources.documents.documentable')
6 |
7 | @endsection
8 |
--------------------------------------------------------------------------------
/resources/views/admin/resources/photos/create_edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 | @include('admin.resources.photos.photoable')
6 |
7 | @endsection
8 |
--------------------------------------------------------------------------------
/resources/views/admin/resources/sections/components/form_heading.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Heading (Optional)
5 |
6 | {!! form_error_message('heading', $errors) !!}
7 |
8 |
9 |
10 |
11 |
12 | Heading Element
13 | {!! form_select('heading_element', ([ 'h2' => 'Heading 2', 'h3' => 'Heading 3', 'h4' => 'Heading 4', 'h5' => 'Heading 5']), ($errors && $errors->any()? old('heading_element') : (isset($item)? $item->heading_element : 'h2')), ['class' => 'select2 form-control ' . form_error_class('heading_element', $errors)]) !!}
14 | {!! form_error_message('heading_element', $errors) !!}
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/resources/views/admin/resources/sections/create_edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 |
6 |
12 |
13 |
14 | @include('admin.resources.sections.collapse')
15 |
16 |
17 |
18 | @endsection
19 |
--------------------------------------------------------------------------------
/resources/views/admin/resources/sections/section_components.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 | @include('admin.resources.sections.components')
5 | @endsection
6 |
--------------------------------------------------------------------------------
/resources/views/admin/resources/videos/create_edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 | @include('admin.resources.videos.videoable')
6 |
7 | @endsection
8 |
--------------------------------------------------------------------------------
/resources/views/admin/shop/features/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 |
6 |
11 |
12 |
13 |
14 | @include('admin.partials.card.info')
15 |
16 | @include('admin.partials.card.buttons')
17 |
18 |
19 |
20 |
21 | Feature
22 | Created
23 | Action
24 |
25 |
26 |
27 | @foreach ($items as $item)
28 |
29 | {{ $item->name }}
30 | {{ $item->created_at->format('d M Y') }}
31 | {!! action_row($selectedNavigation->url, $item->id, $item->name, ['edit', 'delete']) !!}
32 |
33 | @endforeach
34 |
35 |
36 |
37 |
38 |
39 | @endsection
40 |
--------------------------------------------------------------------------------
/resources/views/admin/shop/searches/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.admin')
2 |
3 | @section('content')
4 |
5 |
6 |
11 |
12 |
13 |
14 |
15 |
16 | Slug
17 | Total
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | @endsection
27 |
28 | @include('admin.partials.datatables', [
29 | 'action' => false,
30 | 'displayLength' => 25,
31 | 'options' => [
32 | ['data' => 'slug', 'name' => 'slug'],
33 | ['data' => 'total', 'name' => 'total'],
34 | ]])
--------------------------------------------------------------------------------
/resources/views/auth/auth.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | {{ $HTMLTitle ?? config('app.name') }}
13 |
14 |
15 |
16 | @yield('styles')
17 |
18 |
19 |
20 | @yield('content')
21 |
22 |
23 |
24 | @yield('scripts')
25 |
26 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/resources/views/auth/verify.blade.php:
--------------------------------------------------------------------------------
1 | @extends('auth.auth')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | @if (session('resent'))
12 |
13 | {{ __('A fresh verification link has been sent to your email address.') }}
14 |
15 | @endif
16 |
17 | {{ __('Before proceeding, please check your email for a verification link.') }}
18 | {{ __('If you did not receive the email') }},
19 |
23 |
24 |
25 |
26 |
27 |
28 | @endsection
29 |
--------------------------------------------------------------------------------
/resources/views/dashboard.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ __('Dashboard') }}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | {{ __("You're logged in!") }}
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/resources/views/emails/contactus_client.blade.php:
--------------------------------------------------------------------------------
1 | @component('mail::message')
2 | # Dear {!! $contactUs->fullname !!}
3 |
4 | Thank you for getting in touch!
5 |
6 | We appreciate you contacting us. We have received your message and will respond as soon as possible.
7 |
8 | Regards, {{ config('app.name') }}
9 | @endcomponent
10 |
--------------------------------------------------------------------------------
/resources/views/partials/analytics.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/views/partials/facebook.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
24 |
--------------------------------------------------------------------------------
/resources/views/pdf/pdf.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ isset($HTMLTitle) ? $HTMLTitle : config('app.name') }}
9 |
10 |
11 |
12 |
13 |
14 | @yield('content')
15 |
16 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/button.blade.php:
--------------------------------------------------------------------------------
1 | @props([
2 | 'url',
3 | 'color' => 'primary',
4 | 'align' => 'center',
5 | ])
6 |
7 |
8 |
9 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/footer.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/header.blade.php:
--------------------------------------------------------------------------------
1 | @props(['url'])
2 |
3 |
12 |
13 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/message.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{-- Header --}}
3 |
4 |
5 | {{ config('app.name') }}
6 |
7 |
8 |
9 | {{-- Body --}}
10 | {!! $slot !!}
11 |
12 | {{-- Subcopy --}}
13 | @isset($subcopy)
14 |
15 |
16 | {!! $subcopy !!}
17 |
18 |
19 | @endisset
20 |
21 | {{-- Footer --}}
22 |
23 |
24 | © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/panel.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{ Illuminate\Mail\Markdown::parse($slot) }}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/subcopy.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ Illuminate\Mail\Markdown::parse($slot) }}
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/table.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{ Illuminate\Mail\Markdown::parse($slot) }}
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/button.blade.php:
--------------------------------------------------------------------------------
1 | {{ $slot }}: {{ $url }}
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/footer.blade.php:
--------------------------------------------------------------------------------
1 | {{ $slot }}
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/header.blade.php:
--------------------------------------------------------------------------------
1 | [{{ $slot }}]({{ $url }})
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/layout.blade.php:
--------------------------------------------------------------------------------
1 | {!! strip_tags($header) !!}
2 |
3 | {!! strip_tags($slot) !!}
4 | @isset($subcopy)
5 |
6 | {!! strip_tags($subcopy) !!}
7 | @endisset
8 |
9 | {!! strip_tags($footer) !!}
10 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/message.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{-- Header --}}
3 |
4 |
5 | {{ config('app.name') }}
6 |
7 |
8 |
9 | {{-- Body --}}
10 | {{ $slot }}
11 |
12 | {{-- Subcopy --}}
13 | @isset($subcopy)
14 |
15 |
16 | {{ $subcopy }}
17 |
18 |
19 | @endisset
20 |
21 | {{-- Footer --}}
22 |
23 |
24 | © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/panel.blade.php:
--------------------------------------------------------------------------------
1 | {{ $slot }}
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/subcopy.blade.php:
--------------------------------------------------------------------------------
1 | {{ $slot }}
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/table.blade.php:
--------------------------------------------------------------------------------
1 | {{ $slot }}
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/notifications/email.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{-- Greeting --}}
3 | @if (! empty($greeting))
4 | # {{ $greeting }}
5 | @else
6 | @if ($level === 'error')
7 | # @lang('Whoops!')
8 | @else
9 | # @lang('Hello!')
10 | @endif
11 | @endif
12 |
13 | {{-- Intro Lines --}}
14 | @foreach ($introLines as $line)
15 | {!! $line !!}
16 | @endforeach
17 |
18 | {{-- Action Button --}}
19 | @isset($actionText)
20 | $level,
23 | default => 'primary',
24 | };
25 | ?>
26 |
27 | {{ $actionText }}
28 |
29 | @endisset
30 |
31 | {{-- Outro Lines --}}
32 | @foreach ($outroLines as $line)
33 | {!! $line !!}
34 | @endforeach
35 |
36 | {{-- Salutation --}}
37 | @if (! empty($salutation))
38 | {!! $salutation !!}
39 | @else
40 | @lang('Regards'),
41 | {{ config('app.name') }}
42 | @endif
43 |
44 | {{-- Subcopy --}}
45 | @isset($actionText)
46 |
47 | @lang(
48 | "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
49 | 'into your web browser:',
50 | [
51 | 'actionText' => $actionText,
52 | ]
53 | ) [{{ $displayableActionUrl }}]({{ $actionUrl }})
54 |
55 | @endisset
56 |
57 |
--------------------------------------------------------------------------------
/resources/views/website/articles/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('website.website')
2 |
3 | @section('content')
4 |
5 |
6 | @include('website.partials.page_header')
7 |
8 |
9 |
10 |
11 | @include('website.pages.page_components', ['item' => $page])
12 |
13 |
14 |
15 | @include('website.partials.page_side')
16 |
17 |
18 |
19 |
20 | @endsection
21 |
22 | @section('scripts')
23 | @parent
24 |
30 | @endsection
31 |
--------------------------------------------------------------------------------
/resources/views/website/articles/pagination.blade.php:
--------------------------------------------------------------------------------
1 |
26 |
--------------------------------------------------------------------------------
/resources/views/website/pages/page_content.blade.php:
--------------------------------------------------------------------------------
1 | @if(!$content->media)
2 | @if($content->content && strlen($content->content) > 15)
3 |
4 | {!! $content->content !!}
5 |
6 | @endif
7 | @else
8 |
9 |
10 |
11 |
12 |
13 |
14 | {!! $content->caption !!}
15 |
16 |
17 |
18 | @if($content->content && strlen($content->content) > 15)
19 |
20 | {!! $content->content !!}
21 |
22 | @endif
23 |
24 |
25 | @endif
26 |
--------------------------------------------------------------------------------
/resources/views/website/pages/page_documents.blade.php:
--------------------------------------------------------------------------------
1 | @if($content->documents && $content->documents->count() > 0)
2 |
3 | @foreach($content->documents as $item)
4 |
5 | {{$item->name}}
6 |
7 | @if(!$loop->last)
8 |
|
9 | @endif
10 | @endforeach
11 |
12 | @endif
13 |
--------------------------------------------------------------------------------
/resources/views/website/pages/page_gallery.blade.php:
--------------------------------------------------------------------------------
1 | @if($content->photos && $content->photos->count() > 0)
2 |
3 |
4 | @foreach($content->photos->where('is_cover', 0)->sortBy('list_order') as $item)
5 |
6 |
7 |
8 |
9 |
10 | {!! $item->name !!}
11 |
12 |
13 | @endforeach
14 |
15 |
16 | @endif
17 |
--------------------------------------------------------------------------------
/resources/views/website/pages/page_heading.blade.php:
--------------------------------------------------------------------------------
1 | @if($content->heading)
2 | <{{$content->heading_element}}>
3 | {!! $content->heading !!}
4 | {{$content->heading_element}}>
5 | @endif
--------------------------------------------------------------------------------
/resources/views/website/pages/page_videos.blade.php:
--------------------------------------------------------------------------------
1 | @if($content->videos && $content->videos->count() > 0)
2 |
3 |
4 | @foreach($content->videos->sortBy('list_order') as $item)
5 |
6 |
7 |
8 | @if(!isset($item->filename))
9 |
10 | VIDEO
11 | {!! $item->name !!}
12 |
13 | @else
14 |
15 |
16 |
17 |
18 | {!! $item->name !!}
19 |
20 | @endif
21 |
22 |
23 | @endforeach
24 |
25 |
26 | @endif
27 |
--------------------------------------------------------------------------------
/resources/views/website/partials/breadcrumb.blade.php:
--------------------------------------------------------------------------------
1 | @if(isset($breadcrumbItems))
2 | @if($page->id != 1)
3 |
4 | @foreach($breadcrumbItems as $item)
5 |
6 | @if(!$loop->last)
7 | {{ $item->name }}
8 | @else
9 | {!! $item->name !!}
10 | @endif
11 |
12 | @endforeach
13 |
14 | @endif
15 | @endif
16 |
--------------------------------------------------------------------------------
/resources/views/website/partials/form/feedback.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/views/website/partials/navigation/sub_level.blade.php:
--------------------------------------------------------------------------------
1 | @foreach ($collection as $nav)
2 |
3 | @if($nav->icon)
4 |
5 | @endif
6 | {!! $nav->name !!}
7 |
8 |
9 | @if (isset($navigation[$nav->id]))
10 |
13 | @endif
14 | @endforeach
15 |
--------------------------------------------------------------------------------
/resources/views/website/partials/navigation/top_level.blade.php:
--------------------------------------------------------------------------------
1 | @foreach ($collection as $nav)
2 |
3 | id])) class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" id="{{ $nav->id }}" @else class="nav-link" @endif>
4 | @if($nav->icon)
5 |
6 | @endif
7 | {!! $nav->name !!}
8 |
9 |
10 | @if (isset($navigation[$nav->id]))
11 |
14 | @endif
15 |
16 | @endforeach
17 |
18 |
--------------------------------------------------------------------------------
/resources/views/website/partials/page_header.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | @include('website.partials.breadcrumb')
7 |
8 |
--------------------------------------------------------------------------------
/resources/views/website/partials/page_side.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Popular Links
5 |
10 |
11 |
12 |
13 | @include('website.partials.side_articles')
14 |
15 |
--------------------------------------------------------------------------------
/resources/views/website/partials/paginator_footer.blade.php:
--------------------------------------------------------------------------------
1 | @if($paginator->total() > 0)
2 |
26 | @endif
--------------------------------------------------------------------------------
/resources/views/website/partials/social_share.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/views/website/shop/pagination.blade.php:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
18 | });
19 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/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();
18 |
19 | return $app;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/AuthenticationTest.php:
--------------------------------------------------------------------------------
1 | get('/login');
17 |
18 | $response->assertStatus(200);
19 | }
20 |
21 | public function test_users_can_authenticate_using_the_login_screen(): void
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(): void
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/Auth/PasswordConfirmationTest.php:
--------------------------------------------------------------------------------
1 | create();
16 |
17 | $response = $this->actingAs($user)->get('/confirm-password');
18 |
19 | $response->assertStatus(200);
20 | }
21 |
22 | public function test_password_can_be_confirmed(): void
23 | {
24 | $user = User::factory()->create();
25 |
26 | $response = $this->actingAs($user)->post('/confirm-password', [
27 | 'password' => 'password',
28 | ]);
29 |
30 | $response->assertRedirect();
31 | $response->assertSessionHasNoErrors();
32 | }
33 |
34 | public function test_password_is_not_confirmed_with_invalid_password(): void
35 | {
36 | $user = User::factory()->create();
37 |
38 | $response = $this->actingAs($user)->post('/confirm-password', [
39 | 'password' => 'wrong-password',
40 | ]);
41 |
42 | $response->assertSessionHasErrors();
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/RegistrationTest.php:
--------------------------------------------------------------------------------
1 | get('/register');
16 |
17 | $response->assertStatus(200);
18 | }
19 |
20 | public function test_new_users_can_register(): void
21 | {
22 | $response = $this->post('/register', [
23 | 'name' => 'Test User',
24 | 'email' => 'test@example.com',
25 | 'password' => 'password',
26 | 'password_confirmation' => 'password',
27 | ]);
28 |
29 | $this->assertAuthenticated();
30 | $response->assertRedirect(RouteServiceProvider::HOME);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/tests/Feature/Controllers/Admin/Accounts/AdministratorsTest.php:
--------------------------------------------------------------------------------
1 | get($this->path)->assertRedirect($this->loginPath);
22 | }
23 |
24 | /** @test */
25 | public function authenticated_user_can_view()
26 | {
27 | $this->signInAdmin();
28 |
29 | $this->get($this->path)->assertStatus(200)->assertViewIs($this->viewPath);
30 | }
31 |
32 | /** @test */
33 | public function list_items()
34 | {
35 | $this->signInAdmin();
36 | $user = User::find(1);
37 |
38 | $response = $this->get($this->path);
39 |
40 | $response->assertStatus(200);
41 | $response->assertViewHas('items');
42 | $response->assertSee($user->fullname);
43 | $response->assertSee($user->cellphone);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
16 |
17 | $response->assertStatus(200);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/tests/Unit/ExampleTest.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/tests/Unit/Models/BannerTest.php:
--------------------------------------------------------------------------------
1 | count(5)->create();
18 |
19 | $rolesList = Banner::getAllList();
20 |
21 | $this->assertCount(5, $rolesList);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/tests/Unit/Models/RoleTest.php:
--------------------------------------------------------------------------------
1 | make([
16 | 'name' => 'Role',
17 | 'slug' => '/role',
18 | ]);
19 |
20 | $this->assertEquals('Role (/role)', $role->name_slug);
21 | }
22 |
23 | /** @test */
24 | public function can_get_icon_title()
25 | {
26 | $role = Role::factory()->make([
27 | 'name' => 'Role',
28 | 'icon' => 'smile',
29 | ]);
30 |
31 | $this->assertEquals(' Role', $role->icon_title);
32 | }
33 |
34 | ///** @test */
35 | //public function can_get_all_list()
36 | //{
37 | // $roles = factory(Role::class, 5)->make();
38 | //
39 | // $rolesList = Role::getAllLists();
40 | //
41 | // $this->assertCount(5, $rolesList);
42 | //}
43 | }
44 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import laravel from 'laravel-vite-plugin';
3 |
4 | export default defineConfig({
5 | plugins: [
6 | laravel({
7 | input: [
8 | 'resources/css/app.css',
9 | 'resources/js/app.js',
10 | ],
11 | refresh: true,
12 | }),
13 | ],
14 | });
15 |
--------------------------------------------------------------------------------