Full Code of izhan47/laravel-showcase for AI

master e50fbed76e86 cached
463 files
24.5 MB
6.5M tokens
1 requests
Copy disabled (too large) Download .txt
Showing preview only (25,820K chars total). Download the full file to get everything.
Repository: izhan47/laravel-showcase
Branch: master
Commit: e50fbed76e86
Files: 463
Total size: 24.5 MB

Directory structure:
gitextract_uwh3je2m/

├── .gitignore
├── README.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── BreedsImportCommand.php
│   │   │   ├── ScriptCompressExistingImages.php
│   │   │   ├── ScriptCompressExistingMediaImages.php
│   │   │   ├── ScriptCompressExistingPetProImages.php
│   │   │   ├── ScriptCompressExistingThumbOrImages.php
│   │   │   ├── ScriptCreatePetProSmallThumbImages.php
│   │   │   ├── StateShortcodeScript.php
│   │   │   ├── UpdateValidCitiesFlagCommand.php
│   │   │   └── addExistingPetProCategoriesCommand.php
│   │   └── Kernel.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminUsersController.php
│   │   │   │   ├── Auth/
│   │   │   │   │   └── LoginController.php
│   │   │   │   ├── BusinessRequestsController.php
│   │   │   │   ├── ContactsController.php
│   │   │   │   ├── DashboardController.php
│   │   │   │   ├── NewslettersController.php
│   │   │   │   ├── PetProBusinessController.php
│   │   │   │   ├── PetProCategoriesController.php
│   │   │   │   ├── PetProDealsController.php
│   │   │   │   ├── PetProEventsController.php
│   │   │   │   ├── PetProGalleriesController.php
│   │   │   │   ├── PetProsController.php
│   │   │   │   ├── PetProsRequestController.php
│   │   │   │   ├── PetTypeController.php
│   │   │   │   ├── ProductReviewCategoriesController.php
│   │   │   │   ├── ProductReviewController.php
│   │   │   │   ├── ProductReviewDealsController.php
│   │   │   │   ├── TestimonialController.php
│   │   │   │   ├── UsersController.php
│   │   │   │   ├── WatchAndLearnAuthorController.php
│   │   │   │   ├── WatchAndLearnCategoriesController.php
│   │   │   │   ├── WatchAndLearnController.php
│   │   │   │   └── WatchAndLearnMediaController.php
│   │   │   ├── Api/
│   │   │   │   └── V1/
│   │   │   │       ├── Auth/
│   │   │   │       │   ├── ForgotPasswordController.php
│   │   │   │       │   ├── LoginController.php
│   │   │   │       │   ├── RegisterController.php
│   │   │   │       │   ├── ResetPasswordController.php
│   │   │   │       │   ├── SocialLoginController.php
│   │   │   │       │   ├── SocialSignUpController.php
│   │   │   │       │   └── VerificationController.php
│   │   │   │       ├── BusinessRequestController.php
│   │   │   │       ├── ContactController.php
│   │   │   │       ├── HomeController.php
│   │   │   │       ├── NewsletterController.php
│   │   │   │       ├── PetProController.php
│   │   │   │       ├── ProductReviewController.php
│   │   │   │       ├── UsersController.php
│   │   │   │       └── WatchAndLearnController.php
│   │   │   ├── Auth/
│   │   │   │   ├── ConfirmPasswordController.php
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── RegisterController.php
│   │   │   │   ├── ResetPasswordController.php
│   │   │   │   └── VerificationController.php
│   │   │   ├── Controller.php
│   │   │   └── HomeController.php
│   │   ├── HubspotHelpers.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── AdminAuth.php
│   │   │   ├── Authenticate.php
│   │   │   ├── CheckForMaintenanceMode.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── SetAuthProviderUser.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── TrustProxies.php
│   │   │   ├── VerifyCsrfToken.php
│   │   │   └── VerifyJWTToken.php
│   │   ├── Requests/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminUsersRequest.php
│   │   │   │   ├── PetProBusinessRequest.php
│   │   │   │   ├── PetProCategoriesRequest.php
│   │   │   │   ├── PetProDealRequest.php
│   │   │   │   ├── PetProEventRequest.php
│   │   │   │   ├── PetProGalleryRequest.php
│   │   │   │   ├── PetProRequest.php
│   │   │   │   ├── PetTypeRequest.php
│   │   │   │   ├── TestimonialRequest.php
│   │   │   │   ├── WatchAndLearnAuthorRequest.php
│   │   │   │   ├── WatchAndLearnCategoriesRequest.php
│   │   │   │   ├── WatchAndLearnDealRequest.php
│   │   │   │   └── WatchAndLearnRequest.php
│   │   │   └── User/
│   │   │       └── UserPetProRequest.php
│   │   └── WagEnabledHelpers.php
│   ├── Imports/
│   │   └── BreedsImport.php
│   ├── Library/
│   │   └── GoogleMapHelper.php
│   ├── Mail/
│   │   ├── SendBusinessRequestMail.php
│   │   ├── SendCommentNotificaitonMail.php
│   │   ├── SendContactMail.php
│   │   └── UerPasswordResetMail.php
│   ├── Models/
│   │   ├── AdminUser.php
│   │   ├── Breed.php
│   │   ├── BusinessNature.php
│   │   ├── BusinessRequest.php
│   │   ├── City.php
│   │   ├── Contact.php
│   │   ├── Country.php
│   │   ├── Newsletter.php
│   │   ├── PasswordReset.php
│   │   ├── PetPro.php
│   │   ├── PetProCategory.php
│   │   ├── PetProDeal.php
│   │   ├── PetProDealClaim.php
│   │   ├── PetProEvent.php
│   │   ├── PetProGallery.php
│   │   ├── PetProReview.php
│   │   ├── PetProSelectedBusinessNature.php
│   │   ├── PetProSelectedCategory.php
│   │   ├── PetProServicesOffered.php
│   │   ├── PetProTimetable.php
│   │   ├── PetProsSelectedPetType.php
│   │   ├── PetType.php
│   │   ├── State.php
│   │   ├── Testimonial.php
│   │   ├── User.php
│   │   ├── UserLovedPetPro.php
│   │   ├── UserPet.php
│   │   ├── UserSavedVideo.php
│   │   ├── UsersPetBreed.php
│   │   ├── WatchAndLearn.php
│   │   ├── WatchAndLearnAuthor.php
│   │   ├── WatchAndLearnCategory.php
│   │   ├── WatchAndLearnComment.php
│   │   ├── WatchAndLearnDeal.php
│   │   ├── WatchAndLearnDealClaim.php
│   │   ├── WatchAndLearnMedias.php
│   │   └── WatchAndLearnSelectedCategory.php
│   ├── Observers/
│   │   ├── PetProObserver.php
│   │   ├── ProductReviewObserver.php
│   │   └── WatchAndLearnObserver.php
│   └── Providers/
│       ├── AppServiceProvider.php
│       ├── AuthServiceProvider.php
│       ├── BroadcastServiceProvider.php
│       ├── EventServiceProvider.php
│       └── RouteServiceProvider.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── api.php
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── jwt.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   ├── view.php
│   └── wagenabled.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2020_04_23_050448_create_admin_users_table.php
│   │   ├── 2020_04_25_052414_create_breeds_table.php
│   │   ├── 2020_04_25_063535_create_user_pets_table.php
│   │   ├── 2020_04_25_083408_create_contacts_table.php
│   │   ├── 2020_04_25_090404_create_business_requests_table.php
│   │   ├── 2020_04_25_092709_create_newsletters_table.php
│   │   ├── 2020_04_25_094050_create_watch_and_learn_categories_table.php
│   │   ├── 2020_04_25_104210_create_watch_and_learn_authors_table.php
│   │   ├── 2020_04_25_104211_create_watch_and_learn_table.php
│   │   ├── 2020_04_27_064153_create_watch_and_learn_comments_table.php
│   │   ├── 2020_04_27_070449_create_user_saved_videos_table.php
│   │   ├── 2020_04_27_093324_create_countries_table.php
│   │   ├── 2020_04_27_093329_create_states_table.php
│   │   ├── 2020_04_27_093333_create_cities_table.php
│   │   ├── 2020_04_27_093334_create_pet_pro_categories_table.php
│   │   ├── 2020_04_27_093335_create_pet_pros_table.php
│   │   ├── 2020_04_27_122139_create_pet_pro_timetables_table.php
│   │   ├── 2020_04_28_103645_create_user_loved_pet_pros_table.php
│   │   ├── 2020_04_28_103815_create_pet_pro_reviews_table.php
│   │   ├── 2020_04_28_103821_create_pet_pro_galleries_table.php
│   │   ├── 2020_04_28_103827_create_pet_pro_deals_table.php
│   │   ├── 2020_04_28_103833_create_pet_pro_deal_claims_table.php
│   │   ├── 2020_04_28_103839_create_pet_pro_events_table.php
│   │   ├── 2020_05_25_094716_create_users_pet_breed_table.php
│   │   ├── 2020_06_08_114705_create_watch_and_learn_medias_table.php
│   │   ├── 2020_06_30_055558_add_extra_fields_to_newsletters_table.php
│   │   ├── 2020_07_03_051223_add_status_to_watch_and_learn_table.php
│   │   ├── 2020_07_03_062408_alter_table_watch_and_learn_change_blog_meta_description.php
│   │   ├── 2020_07_11_100910_create_testimonials_table.php
│   │   ├── 2020_07_13_064659_add_is_valid_column_in_cities_table.php
│   │   ├── 2020_07_13_085917_create_pet_pro_selected_categories.php
│   │   ├── 2020_07_17_064151_add_website_url_to_pet_pros_table.php
│   │   ├── 2020_07_22_115515_add_is_cropped_image_to_pet_pro_galleries_table.php
│   │   ├── 2020_07_23_052716_create_pet_pro_services_offered_table.php
│   │   ├── 2020_07_30_054457_add_descriptionto_pet_pro_events_table.php
│   │   ├── 2020_08_04_043353_add_event_end_date_to_pet_pro_events_table.php
│   │   ├── 2020_08_05_043704_add_vet_place_name_to_users_table.php
│   │   ├── 2020_08_22_042827_change_total_rated_column_type.php
│   │   ├── 2020_09_14_042049_create_watch_and_learn_deals_table.php
│   │   ├── 2020_09_14_042054_create_watch_and_learn_deal_claims_table.php
│   │   ├── 2020_09_14_052137_add_parent_id_to_watch_and_learn_categories_table.php
│   │   ├── 2020_10_01_050437_add_short_name_column_to_states_table.php
│   │   ├── 2021_01_13_155451_create_pet_country_state_city_table.php
│   │   ├── 2021_01_26_191038_create_business_natures_table.php
│   │   ├── 2021_01_26_191322_create_pet_pro_selected_business_natures_table.php
│   │   ├── 2021_02_02_074857_create_watch_and_learn_selected_categories_table.php
│   │   ├── 2021_02_18_080850_add_column_user_to_table_pet_pros.php
│   │   ├── 2021_03_02_065300_add_column_new_detail_to_table_pet_pros.php
│   │   ├── 2021_06_01_080340_create_pet_types_table.php
│   │   ├── 2021_06_01_081012_create_pet_pros_selected_pet_types_table.php
│   │   ├── 2021_08_06_095431_add_column_adoption_date_in_user_pets_table.php
│   │   └── 2021_08_06_095832_add_column_address_in_users_table.php
│   └── seeds/
│       ├── CitiesTableSeeder.php
│       ├── CountriesTableSeeder.php
│       ├── DatabaseSeeder.php
│       └── StatesTableSeeder.php
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── admin-theme/
│   │   ├── css/
│   │   │   ├── admin-style.css
│   │   │   ├── classic.css
│   │   │   └── grapes-builder.css
│   │   ├── fonts/
│   │   │   └── stylesheet.css
│   │   └── js/
│   │       ├── app.js
│   │       └── settings.js
│   ├── bd_data/
│   │   ├── cities.sql
│   │   ├── countries.sql
│   │   └── states.sql
│   ├── breeds/
│   │   └── breeds.csv
│   ├── css/
│   │   └── app.css
│   ├── images/
│   │   └── favicons/
│   │       ├── browserconfig.xml
│   │       └── manifest.json
│   ├── index.php
│   ├── js/
│   │   └── app.js
│   ├── mix-manifest.json
│   ├── plugins/
│   │   ├── bootstrap-datepicker/
│   │   │   ├── css/
│   │   │   │   ├── bootstrap-datepicker.css
│   │   │   │   ├── bootstrap-datepicker.standalone.css
│   │   │   │   ├── bootstrap-datepicker3.css
│   │   │   │   └── bootstrap-datepicker3.standalone.css
│   │   │   └── js/
│   │   │       └── bootstrap-datepicker.js
│   │   ├── croppie/
│   │   │   └── croppie.js
│   │   ├── daterangepicker/
│   │   │   └── daterangepicker.css
│   │   ├── font-awesome/
│   │   │   └── css/
│   │   │       └── font-awesome.css
│   │   ├── iCheck/
│   │   │   └── custom.css
│   │   ├── jquery-validate/
│   │   │   └── jquery.form.js
│   │   ├── media/
│   │   │   ├── media.css
│   │   │   └── media.js
│   │   ├── new-croppie/
│   │   │   ├── cropper.css
│   │   │   ├── cropper.js
│   │   │   ├── main-new.js
│   │   │   └── main.js
│   │   └── summernote/
│   │       ├── summernote-bs3.css
│   │       └── summernote.css
│   ├── robots.txt
│   └── vendor/
│       └── content-builder/
│           ├── assets/
│           │   ├── emailsnippets/
│           │   │   ├── content.css
│           │   │   └── snippets.html
│           │   ├── frameworks/
│           │   │   └── foundation-emails/
│           │   │       ├── css/
│           │   │       │   ├── app.css
│           │   │       │   ├── foundation-emails.css
│           │   │       │   └── foundation.css
│           │   │       └── index.html
│           │   ├── icons/
│           │   │   ├── LICENSE.txt
│           │   │   ├── README.txt
│           │   │   ├── config.json
│           │   │   ├── css/
│           │   │   │   ├── animation.css
│           │   │   │   ├── fontello-codes.css
│           │   │   │   ├── fontello-embedded.css
│           │   │   │   ├── fontello-ie7-codes.css
│           │   │   │   ├── fontello-ie7.css
│           │   │   │   └── fontello.css
│           │   │   └── demo.html
│           │   ├── ionicons/
│           │   │   ├── LICENSE
│           │   │   ├── css/
│           │   │   │   └── ionicons.css
│           │   │   ├── selecticon-dark.html
│           │   │   └── selecticon.html
│           │   ├── minimalist-basic/
│           │   │   ├── content-bootstrap.css
│           │   │   ├── content-foundation.css
│           │   │   ├── content-material.css
│           │   │   ├── content-uikit.css
│           │   │   ├── content.css
│           │   │   ├── snippets-bootstrap.html
│           │   │   ├── snippets-bootstrap.php
│           │   │   ├── snippets-foundation.html
│           │   │   ├── snippets-material.html
│           │   │   ├── snippets-uikit.html
│           │   │   ├── snippets.html
│           │   │   └── thumbnails/
│           │   │       ├── index-C=D_O=A.html
│           │   │       ├── index-C=D_O=D.html
│           │   │       ├── index-C=M_O=A.html
│           │   │       ├── index-C=M_O=D.html
│           │   │       ├── index-C=N_O=A.html
│           │   │       ├── index-C=N_O=D.html
│           │   │       ├── index-C=S_O=A.html
│           │   │       ├── index-C=S_O=D.html
│           │   │       └── index.html
│           │   ├── modules/
│           │   │   └── slider.html
│           │   ├── scripts/
│           │   │   ├── simplelightbox/
│           │   │   │   ├── simple-lightbox.js
│           │   │   │   └── simplelightbox.css
│           │   │   └── slick/
│           │   │       ├── slick-theme.css
│           │   │       ├── slick.css
│           │   │       └── slick.js
│           │   └── simple/
│           │       ├── content.css
│           │       └── snippets.html
│           ├── contentbuilder/
│           │   ├── blank.html
│           │   ├── codemirror/
│           │   │   ├── LICENSE
│           │   │   ├── lib/
│           │   │   │   ├── codemirror.css
│           │   │   │   └── codemirror.js
│           │   │   └── mode/
│           │   │       ├── css/
│           │   │       │   ├── css.js
│           │   │       │   ├── index.html
│           │   │       │   ├── less.html
│           │   │       │   └── scss.html
│           │   │       ├── javascript/
│           │   │       │   ├── index.html
│           │   │       │   ├── javascript.js
│           │   │       │   ├── json-ld.html
│           │   │       │   └── typescript.html
│           │   │       └── xml/
│           │   │           ├── index.html
│           │   │           └── xml.js
│           │   ├── contentbuilder-src.js
│           │   ├── contentbuilder.css
│           │   ├── contentbuilder.js
│           │   ├── fonts.html
│           │   ├── fontsize.html
│           │   ├── headings.html
│           │   ├── icons/
│           │   │   ├── LICENSE.txt
│           │   │   ├── README.txt
│           │   │   ├── config.json
│           │   │   ├── css/
│           │   │   │   ├── animation.css
│           │   │   │   ├── fontello-codes.css
│           │   │   │   ├── fontello-embedded.css
│           │   │   │   └── fontello.css
│           │   │   └── demo.html
│           │   ├── new-contentbuilder.css
│           │   └── saveimages.js
│           ├── custom_example1.html
│           ├── example-email.html
│           ├── example1-bootstrap.html
│           ├── example1-foundation.html
│           ├── example1.html
│           ├── example2-bootstrap.aspx
│           ├── example2-bootstrap.php.html
│           ├── example2.aspx
│           ├── example2.html
│           ├── example2.php.html
│           ├── example3-bootstrap.aspx
│           ├── example3-bootstrap.php.html
│           ├── example3.aspx
│           ├── example3.php.html
│           ├── example4.html
│           ├── example5.html
│           ├── example6-lightbox.aspx
│           ├── example6-lightbox.php.html
│           ├── example7.html
│           ├── files.html
│           ├── images.html
│           ├── license.txt
│           ├── readme.txt
│           ├── saveimage-large.ashx
│           ├── saveimage-large.php.html
│           ├── saveimage-module.ashx
│           ├── saveimage-module.php.html
│           ├── saveimage.ashx
│           ├── saveimage.php.html
│           └── whatsnew.txt
├── resources/
│   ├── js/
│   │   ├── app.js
│   │   ├── bootstrap.js
│   │   └── components/
│   │       └── Example.js
│   ├── lang/
│   │   └── en/
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php
│   ├── sass/
│   │   ├── _variables.scss
│   │   └── app.scss
│   └── views/
│       ├── admin/
│       │   ├── auth/
│       │   │   └── login.blade.php
│       │   ├── includes/
│       │   │   ├── custom.blade.php
│       │   │   ├── footer.blade.php
│       │   │   ├── sidebar.blade.php
│       │   │   └── topbar.blade.php
│       │   ├── layouts/
│       │   │   ├── admin.blade.php
│       │   │   └── app.blade.php
│       │   └── main/
│       │       ├── admin-users/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── business-requests/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── contacts/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── dashboard.blade.php
│       │       ├── general/
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── newsletters/
│       │       │   └── index.blade.php
│       │       ├── pet-pro-business/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── pet-pro-categories/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── pet-pro-deals/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── pet-pro-events/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── pet-pro-gallery/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── pet-pro-request/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── pet-pros/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   ├── edit.blade.php
│       │       │   └── index.blade.php
│       │       ├── pet-type/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── product-review-categories/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── product-review-deals/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── product-reviews/
│       │       │   ├── _form.blade.php
│       │       │   ├── content-builder.blade.php
│       │       │   ├── create.blade.php
│       │       │   ├── edit.blade.php
│       │       │   ├── index.blade.php
│       │       │   ├── old_content-builder.blade.php
│       │       │   └── show.blade.php
│       │       ├── testimonials/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── users/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── watch-and-learn/
│       │       │   ├── _form.blade.php
│       │       │   ├── content-builder.blade.php
│       │       │   ├── create.blade.php
│       │       │   ├── edit.blade.php
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── watch-and-learn-author/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── watch-and-learn-categories/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       └── watch-and-learn-medias/
│       │           └── index.blade.php
│       └── emails/
│           ├── addSubscriber.blade.php
│           ├── api/
│           │   └── v1/
│           │       ├── auth/
│           │       │   └── passwordReset.blade.php
│           │       ├── businessRequest/
│           │       │   └── sendBusinessRequestEmail.blade.php
│           │       ├── contact/
│           │       │   └── sendContactEmail.blade.php
│           │       └── watchAndLearnComment/
│           │           └── sendWatchAndLearnCommentNotificationEmail.blade.php
│           └── contactForm.blade.php
├── routes/
│   ├── admin.php
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── server.php
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   ├── CreatesApplication.php
│   ├── Feature/
│   │   └── ExampleTest.php
│   ├── TestCase.php
│   └── Unit/
│       └── ExampleTest.php
└── webpack.mix.js

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

================================================
FILE: .gitignore
================================================
/vendor/
node_modules/
npm-debug.log
yarn-error.log

# Laravel 4 specific
bootstrap/compiled.php
app/storage/

# Laravel 5 & Lumen specific
public/storage
public/hot

# Laravel 5 & Lumen specific with changed public path
public_html/storage
public_html/hot

storage/*.key
.env
Homestead.yaml
Homestead.json
/.vagrant
.phpunit.result.cache

================================================
FILE: README.md
================================================
# Laravel Project

This Laravel Project is a business website built with Laravel and React, featuring a variety of modules and functionalities for users, pet professionals, and administrators.

## Preview

![Main Demp](demo.png)

## Tech Stacks & Versions

- PHP 7.2.5
- Laravel 7.0
- React 16.13.1
- MySQL 5.7.27
- jQuery
- JavaScript
- GitHub

## Technology

- **Front End:** React Js
- **Back End:** Laravel

## Server

- **Amazon AWS EC2 (Hosting)**
- **AWS Route53 (DNS Management)**

## External Tools

- Facebook Login / Signup
- Google Login / Signup
- Hubspot
- Google Analytics
- Google Map

## Getting Started: Setting Up Local Environment & Prerequisites

### GitHub Repo Structure

- **Master:**  Live Server
- **Develop:**  Dev Server
- **Branch from Develop:** Task-wise branch

### To set up locally:

1. Clone the develop branch from the GitHub repository.
2. Install prerequisites: Composer, Node, MySQL, Apache, PHP >= 7.1.3.

### Setup Steps

```bash
composer install
npm install
```

3. Copy `.env.example` to create a `.env` file and configure the database settings.
4. Run the development server:

```bash
php artisan serve
```

### Making Changes and Working on Tasks

1. Create a branch for a specific task.
2. Make changes and work on the task.
3. Create a pull request to the parent repo (Develop/Master).

### Deployment Steps

#### Develop/Staging Server Deployment:

```bash
# Update server with changes on develop branch
git pull origin develop
```

#### Live Server Deployment:

```bash
# Update server with changes on master branch
git pull origin master
```

### Branch Process

- Task branch/Child branch -> Develop Branch -> Master Branch

### Urgent Task on Live Server

1. Create a branch from master for the urgent task.
2. Merge changes to the Master branch and deploy to the live server.
3. Merge the child branch into the Develop branch.

## Admin Capabilities

- User's chart and view count of users, pet pros, deals of watch and learn, deal claimed of watch and learn, deals of product reviews, deal claimed of product reviews.
- Add / Update / Delete Admin User.
- Manage Pet Pro categories, Pet Pros, gallery images, deals, and events.
- Manage Watch and Learn categories and content.
- Manage Product Reviews categories and content.
- Manage Authors, Medias, Testimonials.
- View and manage Business Requests, Contact, and Newsletters.

## Developer Information

- **Developer Email:** izhan47@gmail.com
- **Developer Website/Support:** [izhan.me](https://izhan.me)




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

namespace App\Console\Commands;

use App\Imports\BreedsImport;
use Illuminate\Console\Command;
use Excel;

class BreedsImportCommand extends Command
{
    protected $signature = 'import:breeds';

    protected $description = 'Import breeds data to db';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        Excel::import(new BreedsImport, public_path('breeds/breeds.csv'));
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
use Image;
use App\Http\WagEnabledHelpers;

class ScriptCompressExistingImages extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'script:compress-existing-images {--type=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Script for compress existing images';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {   
        $this->info("*************************************");
        $this->info("Process Started....");
        $this->info("*************************************");

        $modyleType = $this->option('type');

       if($modyleType == "user") {
            $classObj = app()->make("App\Models\User");
            $storagePath = config('wagenabled.path.doc.user_profile_image_path');
            $imageColumn = "profile_image";
        }
        else if($modyleType == "users-pet") {
            $classObj = app()->make("App\Models\UserPet");
            $storagePath = config('wagenabled.path.doc.users_pet_image_path');
            $imageColumn = "pet_image";
        }            
        else {
            $this->error("Invalid Type, Please double check it");
            return false;
        }

        $this->compressModuleWiseImages($classObj, $storagePath, $imageColumn);
    
        $this->info("*************************************");
        $this->info("Process Completed....");
        $this->info("*************************************");

    }

    protected function compressModuleWiseImages($model, $storagePath, $imageColumn = "image")
    {
        $images = $model->select(["id", $imageColumn])
                        ->whereNotNull($imageColumn)
                        ->get();


        $this->info("===>>>> Total Records: " . $images->count());
        $this->info("*************************************************");
        
        $totalimages = $images->count();
        if($totalimages) {
            $thumbPath = $storagePath . "thumb/";
            $randomStringTemplate = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

            $recCount = 0;

            foreach ($images as $image) {
                try {

                    $recCount++;
                    $oldImageName = $image->$imageColumn;
                    $filePathInfo = pathinfo($oldImageName);
                    $fileExtension = (isset($filePathInfo['extension']) && !empty($filePathInfo['extension'])) ? $filePathInfo['extension'] : "jpg" ;
                    $randomString = substr(str_shuffle(str_repeat($randomStringTemplate, 7)), 0, 7);                    
                    $name = $randomString . '-' . $oldImageName;                    
                    $oldFilePath = $storagePath . $oldImageName;
                  
                    $originalImageContents = Storage::get($oldFilePath);
                    $originalImage = Image::make($originalImageContents)
                                                ->orientate()
                                                ->encode($fileExtension);
                    Storage::put($storagePath . $name, $originalImage);

                
                    $thumbImageContent = Image::make($originalImageContents)
                                                ->resize(380, 250, function ($constraint) {
                                                    $constraint->aspectRatio();
                                                    $constraint->upsize();
                                                })
                                                ->orientate()
                                                ->encode($fileExtension);                    
                    Storage::put($thumbPath . $name, $thumbImageContent);                

                    $image->$imageColumn = $name;
                    $image->save();

                    if (!empty($oldImageName)) {
                        $deleteFileList = [
                            $storagePath.$oldImageName,
                            $thumbPath.$oldImageName,
                        ];
                        WagEnabledHelpers::deleteIfFileExist($deleteFileList);
                    }

                    $this->info("----------------------------------");
                    $this->info("[". $recCount ."/$totalimages] Module ID: " . $image->id);
                    $this->info("New File: " . $name . "  <<-------->>  Old File: " . $oldImageName);

                } catch (\Illuminate\Contracts\Filesystem\FileNotFoundException $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error("File Not Found: " . $e->getMessage());
                } catch (Exception $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error($e->getMessage());
                }
            }
        }
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
use Image;
use App\Http\WagEnabledHelpers;

class ScriptCompressExistingMediaImages extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'script:compress-existing-media-images {--type=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Script for compress existing media images';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {   
        $this->info("*************************************");
        $this->info("Process Started....");
        $this->info("*************************************");

        $modyleType = $this->option('type');

       
        if($modyleType == "watch-and-learn-media") {
            $classObj = app()->make("App\Models\WatchAndLearnMedias");
            $storagePath = config('wagenabled.path.doc.watch_and_learn_media_path');
            $imageColumn = "filename";
        }      
        else {
            $this->error("Invalid Type, Please double check it");
            return false;
        }

        $this->compressModuleWiseImages($classObj, $storagePath, $imageColumn);
    
        $this->info("*************************************");
        $this->info("Process Completed....");
        $this->info("*************************************");

    }

    protected function compressModuleWiseImages($model, $storagePath, $imageColumn = "image")
    {
        $images = $model->select(["id", $imageColumn])
                        ->whereNotNull($imageColumn)
                        ->get();


        $this->info("===>>>> Total Records: " . $images->count());
        $this->info("*************************************************");
        
        $totalimages = $images->count();
        if($totalimages) {
            $thumbPath = $storagePath . "thumb/";            
            $recCount = 0;

            foreach ($images as $image) {
                try {
                    $recCount++;
                   
                    $oldImageName = $image->$imageColumn;    
                    $filePathInfo = pathinfo($oldImageName);
                    $fileExtension = (isset($filePathInfo['extension']) && !empty($filePathInfo['extension'])) ? $filePathInfo['extension'] : "jpg" ;
                                                    
                    $oldFilePath = $storagePath . $oldImageName;
                    $oldThumbFilePath = $thumbPath . $oldImageName;  
                    if( Storage::exists($oldFilePath) ) {                    

                        $imageSize = Storage::size($oldFilePath);

                        if( $imageSize > 100000 ) {

                            $originalImageContents = Storage::get($oldFilePath);
                            $originalImage = Image::make($originalImageContents)
                                                        ->orientate()
                                                        ->encode($fileExtension, 75);
                            Storage::put($storagePath . $image->$imageColumn, $originalImage);
                                              
                            $thumbImageContent = Image::make($originalImageContents)
                                                        ->orientate()
                                                        ->resize(500, null, function ($constraints) {
                                                            $constraints->aspectRatio();
                                                        })
                                                        ->encode($fileExtension, 75);                
                            Storage::put($thumbPath . $image->$imageColumn, $thumbImageContent);                    
                          
                        
                            $this->info("----------------------------------");
                            $this->info("[". $recCount ."/$totalimages] Module ID: " . $image->id);
                            $this->info("New File: " . $image->$imageColumn . "  <<-------->>  Old File: " . $oldImageName);
                        }
                    }


                } catch (\Illuminate\Contracts\Filesystem\FileNotFoundException $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error("File Not Found: " . $e->getMessage());
                } catch (Exception $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error($e->getMessage());
                }
            }
        }
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
use Image;
use App\Http\WagEnabledHelpers;

class ScriptCompressExistingPetProImages extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'script:compress-existing-pet-pro-images {--type=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Script for compress existing images';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {   
        $this->info("*************************************");
        $this->info("Process Started....");
        $this->info("*************************************");

        $modyleType = $this->option('type');

        if($modyleType == "pet-pro") {
            $classObj = app()->make("App\Models\PetProGallery");
            $storagePath = config('wagenabled.path.doc.pet_pro_gallery_image_path');
            $imageColumn = "gallery_image";
        }                 
        else {
            $this->error("Invalid Type, Please double check it");
            return false;
        }

        $this->compressModuleWiseImages($classObj, $storagePath, $imageColumn);
    
        $this->info("*************************************");
        $this->info("Process Completed....");
        $this->info("*************************************");

    }

    protected function compressModuleWiseImages($model, $storagePath, $imageColumn = "image")
    {
        $images = $model->select(["id", $imageColumn, 'is_cropped_image'])
                        ->whereNotNull($imageColumn)
                        ->get();


        $this->info("===>>>> Total pet pro Records: " . $images->count());
        $this->info("*************************************************");
        
        $totalimages = $images->count();
        if($totalimages) {
            $thumbPath = $storagePath . "thumb/";
            $randomStringTemplate = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

            $recCount = 0;

            foreach ($images as $image) {
                try {
                   
                    $recCount++;
                    $oldImageName = $image->$imageColumn;
                    $filePathInfo = pathinfo($oldImageName);
                    $fileExtension = (isset($filePathInfo['extension']) && !empty($filePathInfo['extension'])) ? $filePathInfo['extension'] : "jpg" ;
                    $randomString = substr(str_shuffle(str_repeat($randomStringTemplate, 7)), 0, 7);
                    
                    $name = $randomString . '-' . $oldImageName;
                    
                    $oldFilePath = $storagePath . $oldImageName;
                    $oldThumbFilePath = $thumbPath . $oldImageName;


                    $originalImageContents = Storage::get($oldFilePath);
                    $originalImage = Image::make($originalImageContents)
                                                ->orientate()
                                                ->encode($fileExtension);
                    Storage::put($storagePath . $name, $originalImage);
                    
                    //make thumb if not cropped
                    if( ! $image->is_cropped_image ) {
                        $thumbImageContent = Image::make($originalImageContents)
                                                    ->orientate()
                                                    ->encode($fileExtension, 50); 
                        Storage::put($thumbPath . $name, $thumbImageContent);
                        $image->is_cropped_image = 1;
                    } 
                   

                    if( $image->is_cropped_image ) {
                        if( Storage::exists($oldThumbFilePath) ) {
                            $originalThumbImageContents = Storage::get($oldThumbFilePath);
                            $thumbImageContent = Image::make($originalThumbImageContents)
                                                        ->orientate()
                                                        ->encode($fileExtension, 50);                    

                            Storage::put($thumbPath . $name, $thumbImageContent);
                        }
                    }

                    $image->$imageColumn = $name;
                    $image->save();

                    if (!empty($oldImageName)) {
                        $deleteFileList = [
                            $storagePath.$oldImageName,
                            $thumbPath.$oldImageName,
                        ];

                        WagEnabledHelpers::deleteIfFileExist($deleteFileList);
                    }

                    $this->info("----------------------------------");
                    $this->info("[". $recCount ."/$totalimages] Module ID: " . $image->id);
                    $this->info("New File: " . $name . "  <<-------->>  Old File: " . $oldImageName);
                    

                } catch (\Illuminate\Contracts\Filesystem\FileNotFoundException $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error("File Not Found: " . $e->getMessage());
                } catch (Exception $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error($e->getMessage());
                }
            }
        }
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
use Image;
use App\Http\WagEnabledHelpers;

class ScriptCompressExistingThumbOrImages extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'script:compress-existing-thumb-or-images {--type=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Script for compress existing images';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {   
        $this->info("*************************************");
        $this->info("Process Started....");
        $this->info("*************************************");

        $modyleType = $this->option('type');

        if($modyleType == "watch-and-learn-author") {
            $classObj = app()->make("App\Models\WatchAndLearnAuthor");
            $storagePath = config('wagenabled.path.doc.watch_and_learn_author_path');
            $imageColumn = "profile_image";
            $width = 380;
            $height = 250;
        }   
        else if($modyleType == "watch-and-learn") {
            $classObj = app()->make("App\Models\WatchAndLearn");
            $storagePath = config('wagenabled.path.doc.watch_and_learn_thumbnail_path');
            $imageColumn = "thumbnail";
            $width = 380;
            $height = 250;
        }     
        else if($modyleType == "testimonial") {
            $classObj = app()->make("App\Models\Testimonial");
            $storagePath = config('wagenabled.path.doc.testimonial_image_path');
            $imageColumn = "image";
            $width = 300;
            $height = 350;
        }         
        else {
            $this->error("Invalid Type, Please double check it");
            return false;
        }

        $this->compressModuleWiseImages($classObj, $storagePath, $imageColumn, $width, $height);
    
        $this->info("*************************************");
        $this->info("Process Completed....");
        $this->info("*************************************");

    }

    protected function compressModuleWiseImages($model, $storagePath, $imageColumn = "image", $width, $height)
    {
        $images = $model->select(["id", $imageColumn])
                        ->whereNotNull($imageColumn)
                        ->limit(4)
                        ->get();


        $this->info("===>>>> Total Records: " . $images->count());
        $this->info("*************************************************");
        
        $totalimages = $images->count();
        if($totalimages) {
            $thumbPath = $storagePath . "thumb/";
            $randomStringTemplate = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

            $recCount = 0;

            foreach ($images as $image) {
                try {
                    $recCount++;
                    $oldImageName = $image->$imageColumn;
                    $filePathInfo = pathinfo($oldImageName);
                    $fileExtension = (isset($filePathInfo['extension']) && !empty($filePathInfo['extension'])) ? $filePathInfo['extension'] : "jpg" ;

                    $randomString = substr(str_shuffle(str_repeat($randomStringTemplate, 7)), 0, 7);                    
                    $name = $randomString . '-' . $oldImageName;                    
                    $oldFilePath = $storagePath . $oldImageName;
                    $oldThumbFilePath = $thumbPath . $oldImageName;

 
                    $originalImageContents = Storage::get($oldFilePath);
                    $originalImage = Image::make($originalImageContents)
                                                ->orientate()
                                                ->encode($fileExtension);
                    Storage::put($storagePath . $name, $originalImage);

                    $originalThumbImageContents = Storage::get($oldThumbFilePath);
                    $oldThumbImageContent = Image::make($originalThumbImageContents);
                    
                        /*$this->info("===>>>> height: ".$oldThumbImageContent->height());
                        $this->info("===>>>> width: ".$oldThumbImageContent->width() );*/

                    if( $oldThumbImageContent->height() > $height || $oldThumbImageContent->width() > $width ) {
                        // image is cropped
                        $thumbImageContent = Image::make($originalThumbImageContents)
                                                    ->orientate()
                                                    ->encode($fileExtension, 50);                    

                        Storage::put($thumbPath . $name, $thumbImageContent);
                        $this->info("===>>>> not cropped: " );
                    }                                      

                    $image->$imageColumn = $name;
                    $image->save();

                    if (!empty($oldImageName)) {
                        $deleteFileList = [
                            $storagePath.$oldImageName,
                            $thumbPath.$oldImageName,
                        ];

                        WagEnabledHelpers::deleteIfFileExist($deleteFileList);
                    }

                    $this->info("----------------------------------");
                    $this->info("[". $recCount ."/$totalimages] Module ID: " . $image->id);
                    $this->info("New File: " . $name . "  <<-------->>  Old File: " . $oldImageName);

                } catch (\Illuminate\Contracts\Filesystem\FileNotFoundException $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error("File Not Found: " . $e->getMessage());
                } catch (Exception $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error($e->getMessage());
                }
            }
        }
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
use Image;
use App\Http\WagEnabledHelpers;

class ScriptCreatePetProSmallThumbImages extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'script:create-pet-pro-small-thumb {--type=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Script for create thumb images';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {   
        $this->info("*************************************");
        $this->info("Process Started....");
        $this->info("*************************************");

        $modyleType = $this->option('type');

        if($modyleType == "pet-pro") {
            $classObj = app()->make("App\Models\PetProGallery");
            $storagePath = config('wagenabled.path.doc.pet_pro_gallery_image_path');
            $imageColumn = "gallery_image";
        }                 
        else {
            $this->error("Invalid Type, Please double check it");
            return false;
        }

        $this->compressModuleWiseImages($classObj, $storagePath, $imageColumn);
    
        $this->info("*************************************");
        $this->info("Process Completed....");
        $this->info("*************************************");

    }

    protected function compressModuleWiseImages($model, $storagePath, $imageColumn = "image")
    {
        $images = $model->select(["id", $imageColumn])
                        ->whereNotNull($imageColumn)
                        ->get();


        $this->info("===>>>> Total pet pro Records: " . $images->count());
        $this->info("*************************************************");
        
        $totalimages = $images->count();
        if($totalimages) {
            $thumbPath = $storagePath . "thumb/";
            $smallThumbPath = $storagePath . "small-thumb/";
            $randomStringTemplate = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

            $recCount = 0;

            foreach ($images as $image) {
                try {
                   
                    $recCount++;
                    $oldImageName = $image->$imageColumn;
                    $filePathInfo = pathinfo($oldImageName);
                    $fileExtension = (isset($filePathInfo['extension']) && !empty($filePathInfo['extension'])) ? $filePathInfo['extension'] : "jpg" ;                  
                    
                    $oldThumbFilePath = $thumbPath . $oldImageName;


                    if( Storage::exists($oldThumbFilePath) ) {
                        $originalThumbImageContents = Storage::get($oldThumbFilePath);

                        $thumbImageContent = Image::make($originalThumbImageContents)
                                                    ->resize(500, null, function ($constraint) {
                                                        $constraint->aspectRatio();
                                                        $constraint->upsize();
                                                    })
                                                    ->orientate()
                                                    ->encode($fileExtension);                                                            
                        Storage::put($smallThumbPath . $oldImageName, $thumbImageContent);
                    }                                            

                    $this->info("----------------------------------");
                    $this->info("[". $recCount ."/$totalimages] Module ID: " . $image->id);
                    $this->info("New File: " . $oldImageName . "  <<-------->>  Old File: " . $oldImageName);
                    

                } catch (\Illuminate\Contracts\Filesystem\FileNotFoundException $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error("File Not Found: " . $e->getMessage());
                } catch (Exception $e) {
                    $this->error("Error for module id: " . $image->id);
                    $this->error($e->getMessage());
                }
            }
        }
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\State;

class StateShortcodeScript extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'state:add-shortcode';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

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

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $states = State::where('country_id', 231)->get();
        foreach($states as $state) {
            $googleMapApiKey = config("wagenabled.google_map.api_key");
            $geo = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($state->name).'&key='.$googleMapApiKey);
            $geo = json_decode($geo, true); // Convert the JSON to an array
            if(isset($geo['results'][0])) {
                foreach ($geo['results'][0]['address_components'] as $comp) {
                    //loop through each component in ['address_components']
                    foreach ($comp['types'] as $currType){
                        //for every type in the current component, check if it = the check
                        if($currType == 'country') {
                            if($comp['long_name'] == $state->name) {
                                $state->short_name = $comp['short_name'];
                                $state->save();
                            }
                            if($comp['long_name'] == "U.S. Virgin Islands" && $state->name == 'Virgin Islands') {
                                $state->short_name = $comp['short_name'];
                                $state->save();
                            }
                        }
                        if($currType == 'administrative_area_level_1'){
                            if($comp['long_name'] == $state->name) {
                                $state->short_name = $comp['short_name'];
                                $state->save();
                            } else {
                                if($state->name == 'Armed Forces America') {
                                    $state->short_name = 'AA';
                                }
                                if($state->name == 'Armed Forces Europe') {
                                    $state->short_name = 'AE';
                                }
                                $state->save();
                            }
                            //Do whatever with the component, print longname, whatever you need
                            //You can add $comp into another array to have an array of 'administrative_area_level_1' types
                        }
                    }
                }
            } else {
                if($state->name == 'Armed Forces Pacific') {
                    $state->short_name = 'AP';
                    $state->save();
                }
            }
            echo $state->name."\n";
        }
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\City;

class UpdateValidCitiesFlagCommand extends Command
{
    protected $signature = 'update:cities';

    protected $description = 'update valid city flag to 1';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
		$model = new City;

        $model->setConnection('mysql2');

        $citiesFromNextplay = $model->pluck('name')->toArray();
		
		$model->setConnection('mysql');
		
		$cities = $model->whereIn('name', $citiesFromNextplay)->update([
			'is_valid' => 1
		]);
    }
}


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

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\PetPro;
use App\Models\PetProSelectedCategory;
use Carbon\Carbon;

class addExistingPetProCategoriesCommand extends Command
{
    protected $signature = 'add:petprocategory';

    protected $description = 'add existing pet pro categories in new table';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
		$currentTime = Carbon::now();  
		$petPros = PetPro::select(['id', 'category_id'])->get();
		foreach ($petPros as $key => $petPro) {
			PetProSelectedCategory::create([
				"pet_pro_id" => $petPro->id,
				"category_id" => $petPro->category_id,
				"created_at" => $currentTime,
				"updated_at" => $currentTime,
			]);
		}
    }
}


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

namespace App\Console;

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

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

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

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}


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

namespace App\Exceptions;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * @param  \Throwable  $exception
     * @return void
     *
     * @throws \Exception
     */
    public function report(Throwable $exception)
    {
        parent::report($exception);
    }

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


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\AdminUsersRequest;
use App\Models\AdminUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class AdminUsersController extends Controller
{
    public function __construct(AdminUser $model)
    {        
        $this->moduleName = "Admin Users";
        $this->singularModuleName = "Admin User";
        $this->moduleRoute = url('admin/admin-users');
        $this->moduleView = "admin.main.admin-users";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->orderBy('id', 'desc');

        return Datatables::of($result)->addIndexColumn()->make(true);        
    }
    
    public function create()
    {
        return view("admin.main.general.create");
    }
 
    public function store(AdminUsersRequest $request)
    {
        $input = $request->except(['_token']);

        try {
            $input['password'] = Hash::make($request->password);
            $isSaved = $this->model->create($input);

            if ($isSaved) {
                return redirect($this->moduleRoute)->with("success", "Admin user created");
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function show($id)
    {        

    }
    
    public function edit($id)
    {
        $result = $this->model->find($id);
        if ($result) {
            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Admin user not found");
    }
   
    public function update(AdminUsersRequest $request, $id)
    {               
        $ignore_field = ['_token'];
        if( ! $request->password ) {
           array_push($ignore_field ,'password');
        } 
        $input = $request->except($ignore_field);        
        try {
            $result = $this->model->find($id);            

            if ($result) {              
               
                if ($request->password != "" && $request->password) {
                    $input['password'] = Hash::make($request->password);
                }

                $isSaved = $result->update($input);
            
                if ($isSaved) {
                    return redirect($this->moduleRoute)->with("success", "Admin user updated");
                }
            }

            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {            
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }
  
    public function destroy($id)
    {
        $result = array();

        $data = $this->model->find($id);

        if ($data) {            
            if( ! $data->is_super ) {
                $res = $data->delete();
                if ($res) {
                    $result['message'] =  "Admin user deleted.";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while deleting admin user";
                    $result['code'] = 400;
                }
            }
            else {
                $result['message'] = "You can not delete super admin!";
                $result['code'] = 400;
            }
           
        } else {
            $result['message'] = "Admin user not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Auth;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/admin';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //$this->middleware('guest:admin')->except('logout');
    }

    public function showLoginForm()
    {
        if ( !empty(auth()->guard('admin')->id()) ) {
            return redirect("admin");
        }
        return view('admin.auth.login');
    }

    function login(Request $request)
    {
        $request->validate([
            'email' => 'required|email|max:255',
            'password' => 'required|min:6',
        ]);
      
        $input = $request->all();

        if (Auth::guard('admin')->attempt(['email' => $input['email'], 'password' => $input['password']])) {
            // Authentication passed...
            return redirect("admin");
        }
        else {
            $request->session()->flash('error', 'Invalid Login Information');
            return redirect()->to(url('/admin/login'))->withInput($request->all());
        }
    }

    protected function credentials(Request $request)
    {
        return array_merge($request->only($this->username(), 'password'), ['active' => '1']);
    }

    public function logout()
    {
        Auth::guard('admin')->logout();
        return redirect('admin/login');
    }

}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\BusinessRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class BusinessRequestsController extends Controller
{
    public function __construct(BusinessRequest $model)
    {        
        $this->moduleName = "Business Requests";
        $this->singularModuleName = "Business Request";
        $this->moduleRoute = url('admin/business-requests');
        $this->moduleView = "admin.main.business-requests";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->orderBy('id', 'desc');
        return Datatables::of($result)
        ->editColumn('message', function ($result) {
            if( $result->message  ) {
                if( strlen($result->message) > 50 ){
                    return substr($result->message, 0, 50).'...';
                }
            }
            return $result->message;            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create()
    {
        
    }
 
    public function store(Request $request)
    {       

    }

    public function show($id)
    {        
        $result = $this->model->find($id);
        if ($result) {
            return view("$this->moduleView.show", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Admin user not found");
    }
    
    public function edit($id)
    {
       
    }
   
    public function update(Request $request, $id)
    {   

    }
  
    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);

        if ($data) {                   
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "User deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting user";
                $result['code'] = 400;
            }          
           
        } else {
            $result['message'] = "User not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Contact;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class ContactsController extends Controller
{
    public function __construct(Contact $model)
    {        
        $this->moduleName = "Contacts";
        $this->singularModuleName = "Contact";
        $this->moduleRoute = url('admin/contacts');
        $this->moduleView = "admin.main.contacts";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->orderBy('id', 'desc');
        return Datatables::of($result)
        ->editColumn('message', function ($result) {
            if( $result->message  ) {
                if( strlen($result->message) > 50 ){
                    return substr($result->message, 0, 50).'...';
                }
            }
            return $result->message;            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create()
    {
        
    }
 
    public function store(Request $request)
    {       

    }

    public function show($id)
    {        
        $result = $this->model->find($id);
        if ($result) {
            return view("$this->moduleView.show", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Admin user not found");
    }
    
    public function edit($id)
    {
       
    }
   
    public function update(Request $request, $id)
    {   

    }
  
    public function destroy($id)
    {
            
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\WagEnabledHelpers;
use App\Models\PetPro;
use App\Models\PetProDeal;
use App\Models\PetProDealClaim;
use App\Models\User;
use App\Models\WatchAndLearnDeal;
use App\Models\WatchAndLearnDealClaim;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class DashboardController extends Controller
{   
    public function index()
    {      
        $monthStart = Carbon::today()->startOfMonth()->format('m-d-Y');            
        $monthEnd = Carbon::now()->format('m-d-Y');   

        $users_count = User::count();
        $pet_pros_count = PetPro::count();
        $pet_pro_deals_count = PetProDeal::count();
        $pet_pro_deal_claimed_count = PetProDealClaim::count();
        $watch_and_learn_deals_count = WatchAndLearnDeal::count();
        $watch_and_learn_deal_claimed_count = WatchAndLearnDealClaim::count();

        return view('admin.main.dashboard', compact('users_count', 'pet_pros_count', 'pet_pro_deals_count', 'pet_pro_deal_claimed_count', 'monthStart', 'monthEnd', 'watch_and_learn_deals_count', 'watch_and_learn_deal_claimed_count'));
    }

    public function getUsersGraphData(Request $request)
    { 
        $code = config("wagenabled.status_codes.normal_error");
        $message = "";
        $graph_data = [];
        $graph_key = [];
        $graph_value = [];

        try {

            $monthStart = Carbon::createFromFormat('m-d-Y', $request->get('monthStart'));           
            $monthEnd = Carbon::createFromFormat('m-d-Y', $request->get('monthEnd')); 
            
            $dayCount = $monthEnd->diffInDays($monthStart);
           
            $today = Carbon::today();
            $start = $monthStart; 

            for ($i = 0 ; $i <= $dayCount; $i++) {   
                $dates[$start->copy()->addDays($i)->format('m-d-Y')] = 0;         
                $graph_key[] = $start->copy()->addDays($i)->format('m-d-y');         
            } 

            $user_raw = User::select([DB::raw('DATE_FORMAT(created_at,  "%m-%d-%Y") as date') ,DB::raw('count(id) as total_users')])->whereDate('created_at', $monthEnd)->first();   
          
            //monthly uploaded apps
            $user_monthly_raw = User::select(["*", DB::raw('DATE_FORMAT(created_at, "%m-%d-%Y") as date'),DB::raw('count(id) as total_count') ])->whereBetween('created_at', [ $monthStart->setTime(0,0)->format('Y-m-d H:i:s'), $monthEnd->setTime(0,0)->format('Y-m-d H:i:s') ] )->groupBy("date")->orderBy('date', 'asc')->get()->toArray();
            
            $users_monthly = array(); 
            foreach($user_monthly_raw as $month_array) {
                $users_monthly[$month_array["date"]] = $month_array["total_count"];
            }  
            if( $user_raw->date ) {
                $users_monthly[$user_raw->date] = $user_raw->total_users;            
            }

            $graph_value = (array_values(array_replace($dates, $users_monthly)) );        
            $graph_data['graph_key'] = $graph_key;
            $graph_data['graph_value'] = $graph_value;        
            $code = config("wagenabled.status_codes.success");

        }
        catch (Exception $e) {
            $message = "Please, try again!";
        }

        return WagEnabledHelpers::apiJsonResponse($graph_data, $code, $message);
    }
    
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Newsletter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class NewslettersController extends Controller
{
    public function __construct(Newsletter $model)
    {        
        $this->moduleName = "Newsletters";
        $this->singularModuleName = "Newsletter";
        $this->moduleRoute = url('admin/newsletters');
        $this->moduleView = "admin.main.newsletters";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->orderBy('id', 'desc');
        return Datatables::of($result)        
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create()
    {
        
    }
 
    public function store(Request $request)
    {       

    }

    public function show($id)
    {               
    }
    
    public function edit($id)
    {
       
    }
   
    public function update(Request $request, $id)
    {   

    }
  
    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);

        if ($data) {                   
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "User deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting user";
                $result['code'] = 400;
            }          
           
        } else {
            $result['message'] = "User not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PetProBusinessRequest;
use App\Models\BusinessNature;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetProBusinessController extends Controller
{
    public function __construct(BusinessNature $model)
    {
        $this->moduleName = "Pet Pro Business";
        $this->singularModuleName = "Pet Pro business";
        $this->moduleRoute = url('admin/pet-pro-business');
        $this->moduleView = "admin.main.pet-pro-business";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->withCount('petPro')->orderBy('name', 'asc');
        \Log::error(json_encode($result));
        return Datatables::of($result)->addIndexColumn()->make(true);
    }

    public function create()
    {
        return view("admin.main.general.create");
    }

    public function store(PetProBusinessRequest $request)
    {
        $input = $request->except(['_token']);

        $isExist = $this->model->where('name', '=', $input['name'])->withTrashed()->first();
        if ($isExist) {
            if ($isExist->deleted_at == null) {
                return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro business nature alerady exist");
            } else {
                $isExist->deleted_at = null;
                $isExist->save();
                return redirect($this->moduleRoute)->with("success", "Pet pro business nature created");
            }
        }
        try {
            $isSaved = $this->model->create($input);
            if ($isSaved) {
                return redirect($this->moduleRoute)->with("success", "Pet pro business nature created");
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function show($id)
    {

    }

    public function edit($id)
    {
        $result = $this->model->find($id);
        if ($result) {
            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro business nature not found");
    }

    public function update(PetProBusinessRequest $request, $id)
    {
        $input = $request->except(['_token']);
        $isExist = $this->model->where('name', '=', $input['name'])->where('id', '!=', $id)->first();
        if ($isExist) {
            return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro business nature already exist");
        } else {
            try {
                $result = $this->model->find($id);
                if ($result) {
                    $isSaved = $result->update($input);
                    if ($isSaved) {
                        return redirect($this->moduleRoute)->with("success", "Pet pro business nature updated");
                    }
                }
                return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

            } catch (\Exception $e) {
                return redirect($this->moduleRoute)->with('error', $e->getMessage());
            }
        }
    }

    public function destroy($id)
    {
        $result = array();

        $data = $this->model->find($id);

        if ($data) {

            $res = $data->delete();
            if ($res) {
                $result['message'] = "Pet pro busniess nature deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting watch and learn business nature";
                $result['code'] = 400;
            }

        } else {
            $result['message'] = "Pet pro business nature not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PetProCategoriesRequest;
use App\Models\PetProCategory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetProCategoriesController extends Controller
{
    public function __construct(PetProCategory $model)
    {        
        $this->moduleName = "Pet Pro Categories";
        $this->singularModuleName = "Pet Pro Category";
        $this->moduleRoute = url('admin/pet-pro-categories');
        $this->moduleView = "admin.main.pet-pro-categories";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->withCount('petPro')->orderBy('name', 'asc');

        return Datatables::of($result)->addIndexColumn()->make(true);        
    }
    
    public function create()
    {
        return view("admin.main.general.create");
    }
 
    public function store(PetProCategoriesRequest $request)
    {
		$input = $request->except(['_token']);
		
		$isExist = $this->model->where('name', '=', $input['name'])->withTrashed()->first();
		if($isExist){
			if($isExist->deleted_at == null){
				return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro category alerady exist");
			} else {
				$isExist->deleted_at = null;
				$isExist->save();
				return redirect($this->moduleRoute)->with("success", "Pet pro category created");
			}
		}
        try {           
            $isSaved = $this->model->create($input);
            if ($isSaved) {
                return redirect($this->moduleRoute)->with("success", "Pet pro category created");
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function show($id)
    {        

    }
    
    public function edit($id)
    {
        $result = $this->model->find($id);
        if ($result) {
            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro category not found");
    }
   
    public function update(PetProCategoriesRequest $request, $id)
    {               
		$input = $request->except(['_token']);      
		$isExist = $this->model->where('name', '=', $input['name'])->where('id', '!=', $id)->first();
		if($isExist){
			return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro category alerady exist");
		} else { 
			try {
				$result = $this->model->find($id);            
				if ($result) {                                  
					$isSaved = $result->update($input);        
					if ($isSaved) {
						return redirect($this->moduleRoute)->with("success", "Pet pro category updated");
					}
				}
				return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

			} catch (\Exception $e) {            
				return redirect($this->moduleRoute)->with('error', $e->getMessage());
			}
		}
    }
  
    public function destroy($id)
    {
        $result = array();

        $data = $this->model->find($id);

        if ($data) {            
          
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "Pet pro category deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting watch and learn category";
                $result['code'] = 400;
            }
                       
           
        } else {
            $result['message'] = "Pet pro category not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PetProDealRequest;
use App\Models\PetPro;
use App\Models\PetProDeal;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetProDealsController extends Controller
{
    public function __construct(PetProDeal $model)
    {            
        $this->moduleName = "Pet Pro Deals";
        $this->singularModuleName = "Pet Pro Deal";
        $this->moduleView = "admin.main.pet-pro-deals";
        $this->moduleRoute = url('admin/pet-pros');
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request, $pet_pro_id)
    {
        $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/deals');
        View::share('module_route', $moduleRoute);

        $result = $this->model->select("*")->where('pet_pro_id', $pet_pro_id)->orderBy('id', 'desc');
        return Datatables::of($result)
        ->addColumn('claimed', function ($result) {            
            return $result->claims->count();            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create($pet_pro_id)
    {
        $petPro = PetPro::find($pet_pro_id);
        if( $petPro ) {
            $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/deals');
            View::share('module_route', $moduleRoute);
            return view("admin.main.pet-pro-deals.create", compact('pet_pro_id'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");
    }
 
    public function store(PetProDealRequest $request, $pet_pro_id)
    {
        $input = $request->except(['_token']);
        try {    
            $petPro = PetPro::find($pet_pro_id);
            if( $petPro ) {
                $input["pet_pro_id"] = $pet_pro_id;
                $isSaved = $this->model->create($input);
                if ($isSaved) {
                    return redirect($this->moduleRoute.'/'.$pet_pro_id.'/edit')->with("success", "Pet pro deal created");
                }            
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function edit($pet_pro_id, $id)
    {
        $petPro = PetPro::find($pet_pro_id);
        if( $petPro ) {
            $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/deals');
            View::share('module_route', $moduleRoute);
            $result = $this->model->find($id);
            if ($result) {
                return view("admin.main.pet-pro-deals.edit", compact("result", "pet_pro_id"));
            }
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro deal not found");
    }
   
    public function update(PetProDealRequest $request, $pet_pro_id, $id)
    {               
        $input = $request->except(['_token']);       
        try {
            $petPro = PetPro::find($pet_pro_id);
            if( $petPro ) {
                $result = $this->model->find($id);            
                if ($result) {                                  
                    $isSaved = $result->update($input);        
                    if ($isSaved) {
                        return redirect($this->moduleRoute.'/'.$pet_pro_id.'/edit')->with("success", "Pet pro deal updated");
                    }
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {            
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }
    
    public function changeStatus($pet_pro_id, $id)
    {
        $result = array();
        $petPro = PetPro::find($pet_pro_id);     

        if ($petPro) {            
            $data = $this->model->find($id);
            if ($data) { 
                
                if($data->status == 'active' ) {
                    $data->status = 'pause';
                } else {
                    $data->status = 'active';
                }
                $isSaved = $data->save();

                if ($isSaved) {
                    $result['message'] =  "Change pet pro status";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while change pet pro status";
                    $result['code'] = 400;
                }
            } else {
                $result['message'] = "Pet pro deal not Found!";
                $result['code'] = 400;
            }                                
        } else {
            $result['message'] = "Sorry, Something went wrong please try again!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }

    public function destroy($pet_pro_id, $id)
    {
        $result = array();
        $petPro = PetPro::find($pet_pro_id);     

        if ($petPro) {            
            $data = $this->model->find($id);
            if ($data) { 
                $res = $data->delete();
                if ($res) {
                    $result['message'] =  "Pet pro deal deleted.";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while deleting pet pro deal";
                    $result['code'] = 400;
                }
            } else {
                $result['message'] = "Pet pro deal not Found!";
                $result['code'] = 400;
            }                                
        } else {
            $result['message'] = "Sorry, Something went wrong please try again!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PetProEventRequest;
use App\Models\PetPro;
use App\Models\PetProEvent;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetProEventsController extends Controller
{
    public function __construct(PetProEvent $model)
    {            
        $this->moduleName = "Pet Pro Events";
        $this->singularModuleName = "Pet Pro Event";
        $this->moduleView = "admin.main.pet-pro-events";
        $this->moduleRoute = url('admin/pet-pros');
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request, $pet_pro_id)
    {
        $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/events');
        View::share('module_route', $moduleRoute);

        $result = $this->model->select("*")->where('pet_pro_id', $pet_pro_id)->orderBy('id', 'desc');
        return Datatables::of($result)
        ->addColumn('time', function ($result) {            
            return $result->start_time.' - '.$result->end_time;            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create($pet_pro_id)
    {
        $petPro = PetPro::find($pet_pro_id);
        if( $petPro ) {
            $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/events');
            View::share('module_route', $moduleRoute);
            return view("admin.main.pet-pro-events.create", compact('pet_pro_id'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");
    }
 
    public function store(PetProEventRequest $request, $pet_pro_id)
    {
        $input = $request->except(['_token']);
        try {    
            $petPro = PetPro::find($pet_pro_id);
            if( $petPro ) {
                $input["pet_pro_id"] = $pet_pro_id;
                if( isset($input["start_time"]) ) {
                    $input["start_time"] =  Carbon::parse( $input["start_time"])->format('H:i:s');                    
                }               

                if( isset($input["end_time"]) ) {
                    $input["end_time"] =  Carbon::parse( $input["end_time"])->format('H:i:s');                    
                }
                                
                $isSaved = $this->model->create($input);
                if ($isSaved) {
                    return redirect($this->moduleRoute.'/'.$pet_pro_id.'/edit')->with("success", "Pet Pro event created");
                }            
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function edit($pet_pro_id, $id)
    {
        $petPro = PetPro::find($pet_pro_id);
        if( $petPro ) {
            $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/events');
            View::share('module_route', $moduleRoute);
            $result = $this->model->find($id);
            if ($result) {
                return view("admin.main.pet-pro-events.edit", compact("result", "pet_pro_id"));
            }
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet Pro event not found");
    }
   
    public function update(PetProEventRequest $request, $pet_pro_id, $id)
    {               
        $input = $request->except(['_token']);       
        try {
            $petPro = PetPro::find($pet_pro_id);
            if( $petPro ) {

                $result = $this->model->find($id);            
                if ($result) {  

                    if( isset($input["start_time"]) ) {
                        $input["start_time"] =  Carbon::parse( $input["start_time"])->format('H:i:s');                    
                    }
                    else {
                        $input["start_time"] = null;                 
                    } 

                    if( isset($input["end_time"]) ) {
                        $input["end_time"] =  Carbon::parse( $input["end_time"])->format('H:i:s');                    
                    }
                    else {
                        $input["end_time"] = null;                 
                    } 


                    $isSaved = $result->update($input);        
                    if ($isSaved) {
                        return redirect($this->moduleRoute.'/'.$pet_pro_id.'/edit')->with("success", "Pet Pro event updated");
                    }
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {            
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }

    public function changeStatus($pet_pro_id, $id)
    {
        $result = array();
        $petPro = PetPro::find($pet_pro_id);     

        if ($petPro) {            
            $data = $this->model->find($id);
            if ($data) { 
                
                if($data->status == 'active' ) {
                    $data->status = 'pause';
                } else {
                    $data->status = 'active';
                }
                $isSaved = $data->save();

                if ($isSaved) {
                    $result['message'] =  "Change pet pro status";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while change pet pro status";
                    $result['code'] = 400;
                }
            } else {
                $result['message'] = "Pet pro deal not Found!";
                $result['code'] = 400;
            }                                
        } else {
            $result['message'] = "Sorry, Something went wrong please try again!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }

  
    public function destroy($pet_pro_id, $id)
    {
        $result = array();
        $petPro = PetPro::find($pet_pro_id);     

        if ($petPro) {            
            $data = $this->model->find($id);
            if ($data) { 
                $res = $data->delete();
                if ($res) {
                    $result['message'] =  "Pet pro event deleted.";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while deleting pet pro event";
                    $result['code'] = 400;
                }
            } else {
                $result['message'] = "Pet pro event not Found!";
                $result['code'] = 400;
            }                                
        } else {
            $result['message'] = "Sorry, Something went wrong please try again!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PetProGalleryRequest;
use App\Http\WagEnabledHelpers;
use App\Models\PetPro;
use App\Models\PetProGallery;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetProGalleriesController extends Controller
{
    public function __construct(PetProGallery $model)
    {     
        set_time_limit(0);       
        $this->moduleName = "Pet Pro Galleries";
        $this->singularModuleName = "Pet Pro Gallery";
        $this->moduleView = "admin.main.pet-pro-gallery";
        $this->moduleRoute = url('admin/pet-pros');
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {

    }

    public function getDatatable(Request $request, $pet_pro_id)
    {
    
    }
    
    public function create($pet_pro_id)
    {
        $petPro = PetPro::find($pet_pro_id);
        if( $petPro ) {
            $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/gallery');
            View::share('module_route', $moduleRoute);
            return view("admin.main.pet-pro-gallery.create", compact('pet_pro_id'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");
    }
 
    public function store(PetProGalleryRequest $request, $pet_pro_id)
    {   
        $input = [];
        try {    
            $petPro = PetPro::find($pet_pro_id);
            if( $petPro ) {
                
                $input["pet_pro_id"] = $pet_pro_id;

                foreach ($request->row as $index => $row) {
                    if( isset($row["image"]) ) {       
                        if(! $row['cropped_image'] ) {
                            $isCreateThumb="0";
                            $input["is_cropped_image"] = 0;
                        } else {
                            $isCreateThumb="1";
                            $input["is_cropped_image"] = 1;
                        }
                        $imageStore = WagEnabledHelpers::saveUploadedImage($row["image"], config("wagenabled.path.doc.pet_pro_gallery_image_path"), "", $isCreateThumb, $height=250, $width=250, $row['cropped_image']);            
                        if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                            $input["gallery_image"] = $imageStore['name'];                    
                        }                                          
                        if( $request->get('is_cover_image') ){
                            if( $index == $request->get('is_cover_image') ) {
                                $input['is_cover_image'] = 1;
                                PetProGallery::where('pet_pro_id', $pet_pro_id)->update(['is_cover_image' => 0]); 
                            }
                        }
                        $isSaved = $this->model->create($input);                    
                    }   
                }   

                return WagEnabledHelpers::apiJsonResponse([] , config("wagenabled.status_codes.success"), 'File Uploaded Successfully');                    
                //return redirect($this->moduleRoute.'/'.$pet_pro_id.'/edit')->with("success", "Pet pro gallery created");
                        
            }
            return WagEnabledHelpers::apiJsonResponse([] , config("wagenabled.status_codes.normal_error"), 'Sorry, Something went wrong please try again');                    
            //return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return WagEnabledHelpers::apiJsonResponse([] , config("wagenabled.status_codes.normal_error"), $e->getMessage());                    
            //return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function edit($pet_pro_id, $id)
    {
        $petPro = PetPro::find($pet_pro_id);
        if( $petPro ) {
            $moduleRoute = url('admin/pet-pros/'.$pet_pro_id.'/gallery');
            View::share('module_route', $moduleRoute);
            $result = $this->model->find($id);
            if ($result) {
                return view("admin.main.pet-pro-gallery.edit", compact("result", "pet_pro_id"));
            }
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro gallery not found");
    }
   
    public function update(PetProGalleryRequest $request, $pet_pro_id, $id)
    {         
        $input = [];       
        try {
            $petPro = PetPro::find($pet_pro_id);
            if( $petPro ) {
                $result = $this->model->find($id);            
                if ($result) {  

                    if ($request->file('image', false)) {    
                        if(! $request->get('cropped_image')) {
                            $isCreateThumb="0";
                            $input["is_cropped_image"] = 0;
                        } else {
                            $isCreateThumb="1";
                            $input["is_cropped_image"] = 1;
                        }    
                        $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.pet_pro_gallery_image_path"), $result->gallery_image, $isCreateThumb, $height=250, $width=250, $request->get('cropped_image'));            
                        if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                            $input["gallery_image"] = $imageStore['name'];                    
                        }                    
                    } 

                    if( $request->get('is_cover_image') ) {
                        $input['is_cover_image'] = 1;                        
                        PetProGallery::where('pet_pro_id', $pet_pro_id)->where('id', "!=", $result->id )->update(['is_cover_image' => 0]);
                    } else {                       
                        $input['is_cover_image'] = 0;                        
                    }

                    $isSaved = $result->update($input);        
                    if ($isSaved) {
                        return WagEnabledHelpers::apiJsonResponse([] , config("wagenabled.status_codes.success"), 'Pet pro gallery updated');   
                        //return redirect($this->moduleRoute.'/'.$pet_pro_id.'/edit')->with("success", "Pet pro gallery updated");
                    }
                }
            }
            return WagEnabledHelpers::apiJsonResponse([] , config("wagenabled.status_codes.normal_error"), 'Sorry, Something went wrong please try again'); 

        } catch (\Exception $e) {            
            return WagEnabledHelpers::apiJsonResponse([] , config("wagenabled.status_codes.server_side"), $e->getMessage());
        }
    }

    public function destroy($pet_pro_id, $id)
    {
        $result = array();
        $petPro = PetPro::find($pet_pro_id);     

        if ($petPro) {            
            $data = $this->model->find($id);
            if ($data) { 

                $fileOldName = $data->gallery_image;        
                $res = $data->delete();
                
                if( $fileOldName ) {
                    // delete old file 
                    $deleteFileList = array();
                    $deleteFileList[] =  config("wagenabled.path.doc.pet_pro_gallery_image_path").$fileOldName;
                    $deleteFileList[] =  config("wagenabled.path.doc.pet_pro_gallery_image_path").'thumb/'.$fileOldName;
                    WagEnabledHelpers::deleteIfFileExist($deleteFileList);
                }
                if ($res) {
                    $result['message'] =  "Pet pro gallery deleted.";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while deleting pet pro gallery";
                    $result['code'] = 400;
                }
            } else {
                $result['message'] = "Pet pro gallery not Found!";
                $result['code'] = 400;
            }                                
        } else {
            $result['message'] = "Sorry, Something went wrong please try again!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PetProRequest;
use App\Http\WagEnabledHelpers;
use App\Library\GoogleMapHelper;
use App\Models\BusinessNature;
use App\Models\City;
use App\Models\Country;
use App\Models\PetPro;
use App\Models\PetProCategory;
use App\Models\PetProGallery;
use App\Models\PetProServicesOffered;
use App\Models\PetProTimetable;
use App\Models\PetType;
use App\Models\State;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetProsController extends Controller
{
    public function __construct(PetPro $model)
    {
        set_time_limit(0);
        ini_set('memory_limit', -1);
        $this->moduleName = "Pet Pros";
        $this->singularModuleName = "Pet Pro";
        $this->moduleRoute = url('admin/pet-pros');
        $this->moduleView = "admin.main.pet-pros";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        // $result = $this->model->where('status', 'approved')->with('categories', 'city', 'state')->orderBy('id', 'desc')->get();
        // dd($result);
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->where('status', 'approved')->with('categories', 'city', 'state')->orderBy('id', 'desc')->get();
        return Datatables::of($result)
            ->addColumn('city_state', function ($result) {
                $str = "";
                if ($result->city_id) {
                    $str .= $result->city->name;
                }
                if ($result->state_id) {
                    $str .= ', ' . $result->state->name;
                }
                return $str;
            })
            ->addIndexColumn()
            ->make(true);
    }

    public function create()
    {
        $countries = Country::pluck('name', 'id')->toArray();
        $states = [];
        $cities = [];

        $categories = PetProCategory::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        $businessNatures = BusinessNature::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        $petType = PetType::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        return view("$this->moduleView.create", compact('categories', 'countries', 'states', 'cities', 'businessNatures', 'petType'));
    }

    public function store(PetProRequest $request)
    {

        $pet_pro_input = $request->only(['store_name', 'website_url', 'email', 'phone_number', 'address_line_1', 'address_line_2', 'postal_code', 'description']);
        $time_input = $request->only(['monday_open', 'monday_close', 'tuesday_open', 'tuesday_close', 'wednesday_open', 'wednesday_close', 'thursday_open', 'thursday_close', 'friday_open', 'friday_close', 'saturday_open', 'saturday_close', 'sunday_open', 'sunday_close']);
        $inputCategories = $request['category_id'];
        $inputBusinessNatures = $request['business_id'];
        $inputPetType = $request['pet_type_id'];

        try {
            if ($request->get('is_featured_pet_pro')) {
                $pet_pro_input['is_featured_pet_pro'] = 1;
                $pet_pro_input['featured_title'] = $request->get('featured_title');
                $pet_pro_input['featured_description'] = $request->get('featured_description');
            }

            $isSaved = $this->model->create($pet_pro_input);
            $pet_pro = $this->model->where('id', $isSaved->id)->first();
            if ($request->country_id && $request->state_id && $request->city_id) {
                foreach ($request->country_id as $index => $row) {
                    $city_latitude = null;
                    $city_longitude = null;
                    $city = City::where('id', $request->city_id[$index])->first();
                    if ($city) {
                        $city_latitude = $city->city_latitude;
                        $city_longitude = $city->city_longitude;
                    }
                    $pet_pro->countries()->attach($row, ['state_id' => $request->state_id[$index], 'city_id' => $request->city_id[$index], 'latitude' => $city_latitude, 'longitude' => $city_longitude]);
                }
            }
            // $city =  City::where('id',$isSaved->city_id)->first();
            // if($city){
            //     $this->model->where('id', $id)->update([
            //         "latitude" => $city->city_latitude,
            //         "longitude" => $city->city_longitude,
            //     ]);
            // }
            if ($isSaved) {
                if (count($inputCategories)) {
                    $currentTime = Carbon::now();
                    $insertArray = [];
                    foreach ($inputCategories as $categoryId) {
                        $insertArray[] = [
                            "pet_pro_id" => $isSaved->id,
                            "category_id" => $categoryId,
                            "created_at" => $currentTime,
                            "updated_at" => $currentTime,
                        ];
                    }
                    $isSaved->categories()->insert($insertArray);
                }

                if (count($inputBusinessNatures)) {
                    $currentTime = Carbon::now();
                    $insertArray = [];
                    foreach ($inputBusinessNatures as $businessId) {
                        $insertArray[] = [
                            "pet_pro_id" => $isSaved->id,
                            "business_id" => $businessId,
                            "created_at" => $currentTime,
                            "updated_at" => $currentTime,
                        ];
                    }
                    $isSaved->business()->insert($insertArray);
                }
                if (count($inputPetType)) {
                    $currentTime = Carbon::now();
                    $insertArray = [];
                    foreach ($inputPetType as $petType) {
                        $insertArray[] = [
                            "pet_pro_id" => $isSaved->id,
                            "pet_type_id" => $petType,
                            "created_at" => $currentTime,
                            "updated_at" => $currentTime,
                        ];
                    }
                    $isSaved->petType()->insert($insertArray);
                }
                if ($isSaved->address_line_1 || $isSaved->address_line_2 || $isSaved->city_id || $isSaved->state_id || $isSaved->postal_code) {
                    $addressLatLong = GoogleMapHelper::getLatLongFromAddress($isSaved);
                    $isSaved->update($addressLatLong);
                }
                /*$googleData = GoogleMapHelper::getTimezone($isSaved);
                if( $googleData["timezone"] ) {
                $isSaved->timezone = Carbon::now()->timezone($googleData["timezone"])->format('P');
                $isSaved->save();
                } else {
                $isSaved->timezone = 'GMT-4';
                $isSaved->save();
                }*/

                $days = config('wagenabled.days');
                //if( $isSaved->timezone ) {
                foreach ($days as $day) {
                    $open_day = $day . "_open";
                    $close_day = $day . "_close";

                    if (isset($time_input[$open_day])) {
                        $time_input[$open_day] = Carbon::parse($time_input[$open_day]/*, $isSaved->timezone*/)->format('H:i:s');
                    } else {
                        $time_input[$open_day] = "";
                    }

                    if (isset($time_input[$close_day])) {
                        $time_input[$close_day] = Carbon::parse($time_input[$close_day]/*, $isSaved->timezone*/)->format('H:i:s');
                    } else {
                        $time_input[$close_day] = "";
                    }

                    PetProTimetable::create([
                        "pet_pro_id" => $isSaved->id,
                        "day" => $day,
                        "open" => $time_input[$open_day] ? $time_input[$open_day] : null,
                        "close" => $time_input[$close_day] ? $time_input[$close_day] : null,
                    ]);

                }
                //}

                $services = $request->get('services');
                if ($services) {
                    foreach ($services as $service) {
                        PetProServicesOffered::create([
                            "pet_pro_id" => $isSaved->id,
                            "service" => $service,
                        ]);
                    }
                }

                $galleryInput["pet_pro_id"] = $isSaved->id;
                if ($request->row) {
                    foreach ($request->row as $index => $row) {
                        if (isset($row["image"])) {
                            /*if(! $row["cropped_image"]) {
                            $isCreateThumb="0";
                            $galleryInput["is_cropped_image"] = 0;
                            } else {
                            $isCreateThumb="1";
                            $galleryInput["is_cropped_image"] = 1;
                            }*/
                            $galleryInput["is_cropped_image"] = 1;
                            $isCreateThumb = "1";
                            $imageStore = WagEnabledHelpers::saveUploadedImage($row["image"], config("wagenabled.path.doc.pet_pro_gallery_image_path"), "", $isCreateThumb, $height = 250, $width = 380, $row['cropped_image'], $isThumbOptimized = true);
                            if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                                $galleryInput["gallery_image"] = $imageStore['name'];
                            }
                            if ($request->get('is_cover_image')) {
                                if ($index == $request->get('is_cover_image')) {
                                    $galleryInput['is_cover_image'] = 1;
                                } else {
                                    $galleryInput['is_cover_image'] = 0;
                                }
                            }
                            $isSaved = PetProGallery::create($galleryInput);
                        }
                    }
                }
                return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.success"), 'Pet pro created');
                //return redirect($this->moduleRoute)->with("success", "Pet pro created");
            }
            return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.normal_error"), 'Sorry, Something went wrong please try again');
        } catch (\Exception $e) {
            return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.server_side"), $e->getMessage());
        }

    }

    public function show($id)
    {

    }

    public function edit($id)
    {
        $result = $this->model->with('timetable', 'images', 'categories')->find($id);

        if ($result) {
            $selectedCategories = $result->categories()->pluck("category_id", "category_id")->all();
            $categories = PetProCategory::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
            $countries = Country::pluck('name', 'id')->toArray();
            $selectedBusiness = $result->business()->pluck("business_id", "business_id")->all();
            $businessNatures = BusinessNature::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
            $selectedPetType = $result->petType()->pluck("pet_type_id", "pet_type_id")->all();
            $petType = PetType::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
            $states = State::where('country_id', 231)->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
            if ($result->city_id) {
                $cities = City::where('state_id', $result->state_id)->where('is_valid', '=', 1)->pluck('name', 'id')->toArray();
            } else {
                $cities = [];
            }

            return view("$this->moduleView.edit", compact("result", "categories", "states", "cities", "selectedCategories", 'countries', 'businessNatures', 'selectedBusiness', 'petType', 'selectedPetType'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro not found");
    }

    public function update(PetProRequest $request, $id)
    {

        $inputCategories = $request->get("category_id", []);
        $inputBusinessNatures = $request->get("business_id", []);
        $inputPetType = $request['pet_type_id'];
        $city = City::where('id', $request->get("city_id"))->first();

        try {
            $result = $this->model->find($id);
            if ($result) {

                $pet_pro_input = $request->only(['store_name', 'website_url', 'email', 'phone_number', 'address_line_1', 'address_line_2', 'city_id', 'state_id', 'postal_code', 'description', 'donation_link']);

                $time_input = $request->only(['monday_open', 'monday_close', 'tuesday_open', 'tuesday_close', 'wednesday_open', 'wednesday_close', 'thursday_open', 'thursday_close', 'friday_open', 'friday_close', 'saturday_open', 'saturday_close', 'sunday_open', 'sunday_close']);

                if ($request->get('is_featured_pet_pro')) {
                    $pet_pro_input['is_featured_pet_pro'] = 1;
                    $pet_pro_input['featured_title'] = $request->get('featured_title');
                    $pet_pro_input['featured_description'] = $request->get('featured_description');
                } else {
                    $pet_pro_input['is_featured_pet_pro'] = 0;
                    $pet_pro_input['featured_title'] = null;
                    $pet_pro_input['featured_description'] = null;
                }

                if ($request->get('is_featured_pet_pro')) {
                    $pet_pro_input['is_featured_pet_pro'] = 1;
                    $pet_pro_input['featured_title'] = $request->get('featured_title');
                    $pet_pro_input['featured_description'] = $request->get('featured_description');
                } else {
                    $pet_pro_input['is_featured_pet_pro'] = 0;
                    $pet_pro_input['featured_title'] = null;
                    $pet_pro_input['featured_description'] = null;
                }

                $isSaved = $result->update($pet_pro_input);
                if ($isSaved) {
                    $currentTime = Carbon::now();
                    if (count($inputCategories)) {
                        foreach ($inputCategories as $categoryId) {
                            $insertArray = [
                                "pet_pro_id" => $result->id,
                                "category_id" => $categoryId,
                            ];

                            $res = $result->categories()->updateOrCreate($insertArray, $insertArray);

                            $insertedCategories[] = $categoryId;
                        }
                    }

                    if (count($inputBusinessNatures)) {
                        foreach ($inputBusinessNatures as $businessId) {
                            $insertArray = [
                                "pet_pro_id" => $result->id,
                                "business_id" => $businessId,
                            ];

                            $res = $result->business()->updateOrCreate($insertArray, $insertArray);

                            $insertedBusiness[] = $businessId;
                        }
                    }
                    if (count($inputPetType)) {
                        foreach ($inputPetType as $PetTypeId) {
                            $insertArray = [
                                "pet_pro_id" => $result->id,
                                "business_id" => $PetTypeId,
                            ];

                            $res = $result->petType()->updateOrCreate($insertArray, $insertArray);

                            $insertedPetType[] = $PetTypeId;
                        }
                    }
                    $result->categories()->whereNotIn("category_id", $insertedCategories)->delete();
                    $result->business()->whereNotIn("business_id", $insertedBusiness)->delete();
                    $result->petType()->whereNotIn("business_id", $insertedPetType)->delete();

                    if ($city) {
                        $this->model->where('id', $id)->update([
                            "latitude" => $city->city_latitude,
                            "longitude" => $city->city_longitude,
                        ]);
                    }

                    if ($result->address_line_1 || $result->address_line_2 || $result->city_id || $result->state_id || $result->postal_code) {
                        $addressLatLong = GoogleMapHelper::getLatLongFromAddress($result);
                        $result->update($addressLatLong);
                    } elseif (!$city) {
                        $returnArr = [
                            "latitude" => null,
                            "longitude" => null,
                        ];
                        $result->update($returnArr);
                    }

                    /* $googleData = GoogleMapHelper::getTimezone($result);
                    if( $googleData["timezone"] ) {
                    $result->timezone = Carbon::now()->timezone($googleData["timezone"])->format('P');
                    $result->save();
                    }  else {
                    $result->timezone = 'GMT-4';
                    $result->save();
                    }*/

                    $days = config('wagenabled.days');
                    //if( $result->timezone ) {
                    foreach ($days as $day) {
                        $open_day = $day . "_open";
                        $close_day = $day . "_close";

                        if (isset($time_input[$open_day])) {
                            $time_input[$open_day] = Carbon::parse($time_input[$open_day]/*, $result->timezone*/)->format('H:i:s');
                        } else {
                            $time_input[$open_day] = "";
                        }

                        if (isset($time_input[$close_day])) {
                            $time_input[$close_day] = Carbon::parse($time_input[$close_day]/*, $result->timezone*/)->format('H:i:s');
                        } else {
                            $time_input[$close_day] = "";
                        }

                        $pet_pro_timetable = PetProTimetable::where("pet_pro_id", $result->id)
                            ->where("day", $day)
                            ->first();
                        if ($pet_pro_timetable) {
                            $pet_pro_timetable->open = $time_input[$open_day] ? $time_input[$open_day] : null;
                            $pet_pro_timetable->close = $time_input[$close_day] ? $time_input[$close_day] : null;
                            $pet_pro_timetable->save();
                        } else {
                            PetProTimetable::create([
                                "pet_pro_id" => $result->id,
                                "day" => $day,
                                "open" => $time_input[$open_day] ? $time_input[$open_day] : null,
                                "close" => $time_input[$close_day] ? $time_input[$close_day] : null,
                            ]);
                        }

                    }
                    //}

                    $services = $request->get('services');
                    if ($services) {
                        foreach ($services as $service) {
                            PetProServicesOffered::create([
                                "pet_pro_id" => $result->id,
                                "service" => $service,
                            ]);
                        }
                    }

                    $old_services = $request->get('old_services');
                    if ($old_services) {
                        foreach ($old_services as $old_service_id => $service_name) {
                            PetProServicesOffered::where('id', $old_service_id)->update([
                                "service" => $service_name,
                            ]);
                        }
                    }

                    $deletedServices = $request->get('deletedServices');
                    if ($deletedServices) {
                        $delete_services = explode(",", $deletedServices);
                        foreach ($delete_services as $id) {
                            PetProServicesOffered::where('id', $id)->delete();
                        }
                    }

                    $galleryInput["pet_pro_id"] = $result->id;
                    if ($request->row) {
                        foreach ($request->row as $index => $row) {
                            if (isset($row["image"])) {

                                /*if(! $row["cropped_image"]) {
                                $isCreateThumb="0";
                                $galleryInput["is_cropped_image"] = 0;
                                } else {
                                $isCreateThumb="1";
                                $galleryInput["is_cropped_image"] = 1;
                                }*/
                                $isCreateThumb = "1";
                                $galleryInput["is_cropped_image"] = 1;
                                $imageStore = WagEnabledHelpers::saveUploadedImage($row["image"], config("wagenabled.path.doc.pet_pro_gallery_image_path"), "", $isCreateThumb, $height = 250, $width = 380, $row['cropped_image'], $isThumbOptimized = true);
                                if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                                    $galleryInput["gallery_image"] = $imageStore['name'];
                                }
                                if ($request->get('is_cover_image')) {
                                    if ($index == $request->get('is_cover_image')) {
                                        $galleryInput['is_cover_image'] = 1;
                                        PetProGallery::where('pet_pro_id', $result->id)->update(['is_cover_image' => 0]);
                                    } else {
                                        $galleryInput['is_cover_image'] = 0;

                                    }
                                }
                                PetProGallery::create($galleryInput);
                            }
                        }
                    }

                    if ($request->old_row) {
                        foreach ($request->old_row as $index => $row) {
                            $galleryResult = PetProGallery::find($index);

                            if (isset($row["image"])) {
                                /*if(! $row["cropped_image"]) {
                                $isCreateThumb="0";
                                $updateGalleryInput["is_cropped_image"] = 0;
                                } else {
                                $isCreateThumb="1";
                                $updateGalleryInput["is_cropped_image"] = 1;
                                }*/
                                $isCreateThumb = "1";
                                $galleryInput["is_cropped_image"] = 1;
                                $imageStore = WagEnabledHelpers::saveUploadedImage($row["image"], config("wagenabled.path.doc.pet_pro_gallery_image_path"), $galleryResult->gallery_image, $isCreateThumb, $height = 250, $width = 380, $row['cropped_image'], $isThumbOptimized = true);
                                if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                                    $updateGalleryInput["gallery_image"] = $imageStore['name'];
                                }
                            }

                            if ($request->get('is_cover_image')) {
                                if (strpos($request->get('is_cover_image'), 'old_') !== false) {
                                    if ($index == str_replace('old_', '', $request->get('is_cover_image'))) {
                                        $updateGalleryInput['is_cover_image'] = 1;
                                        PetProGallery::where('pet_pro_id', $result->id)->where('id', '!=', $galleryResult->id)->update(['is_cover_image' => 0]);
                                    }
                                } else {
                                    $updateGalleryInput['is_cover_image'] = 0;
                                }
                            }
                            if (isset($updateGalleryInput)) {
                                $galleryResult->update($updateGalleryInput);
                            }
                            $updateGalleryInput = [];
                        }
                    }

                    $deletedGallery = $request->get('deletedGallery');
                    if ($deletedGallery) {
                        $delete_gallery = explode(",", $deletedGallery);
                        foreach ($delete_gallery as $id) {
                            $galleryResult = PetProGallery::find($id);
                            $fileOldName = $galleryResult->gallery_image;
                            $galleryResult->delete();
                            if ($fileOldName) {
                                $deleteFileList = array();
                                $deleteFileList[] = config("wagenabled.path.doc.pet_pro_gallery_image_path") . $fileOldName;
                                $deleteFileList[] = config("wagenabled.path.doc.pet_pro_gallery_image_path") . 'thumb/' . $fileOldName;
                                WagEnabledHelpers::deleteIfFileExist($deleteFileList);
                            }
                        }
                    }
                    return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.success"), 'Pet pro updated');
                    //return redirect($this->moduleRoute)->with("success", "Pet pro updated");
                }
            }

            return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.normal_error"), 'Sorry, Something went wrong please try again');
        } catch (\Exception $e) {
            return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.server_side"), $e->getMessage());
        }
    }

    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);
        if ($data) {
            $res = $data->delete();
            if ($res) {
                $result['message'] = "Pet pro deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting pet pro";
                $result['code'] = 400;
            }
        } else {
            $result['message'] = "Pet pro not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }

    public function getCities(Request $request, $state_id)
    {
        $code = config("wagenabled.status_codes.normal_error");
        $message = "";
        $cities = [];

        try {
            $cities = City::select(["id", "state_id", "name"])->where('state_id', $state_id)->orderBy('name')->orderBy('id')->groupBy('name')->get();
            $code = config("wagenabled.status_codes.success");

        } catch (Exception $e) {
            $message = "Please, try again!";
        }

        return WagEnabledHelpers::apiJsonResponse($cities, $code, $message);
    }

    public function getStates(Request $request, $country_id)
    {
        $code = config("wagenabled.status_codes.normal_error");
        $message = "";
        $states = [];

        try {
            $states = State::select(["id", "name"])->where('country_id', $country_id)->orderBy('name', 'asc')->get();
            $code = config("wagenabled.status_codes.success");

        } catch (Exception $e) {
            $message = "Please, try again!";
        }

        return WagEnabledHelpers::apiJsonResponse($states, $code, $message);
    }

    public function getGeocodeData(Request $request)
    {
        $code = config("wagenabled.status_codes.normal_error");
        $message = "";
        $data = [];
        $responseData = [];
        try {
            if ($request->get('postal_code', '')) {
                $isExistingCityGetCount = City::where('zipcode', trim($request->get('postal_code')))->where('is_valid', 1)->count();
                if ($isExistingCityGetCount != 1) {
                    $data[] = $request->get('postal_code', '');
                    $GooogleResponseData = GoogleMapHelper::getGeocodeData($data);

                    if (count($GooogleResponseData) > 0) {
                        $responseData = $GooogleResponseData;
                        $state_name = $GooogleResponseData["state"];
                        $city_name = $GooogleResponseData["city"];
                        $zipcode = $request->get('postal_code', '');
                        $latitude = $GooogleResponseData["latitude"];
                        $longitude = $GooogleResponseData["longitude"];

                        if ($city_name) {
                            $isExistingCity = City::where('name', 'like', $city_name);
                            $cities = clone $isExistingCity;
                            $isExistingCity = $isExistingCity->first();
                            if ($isExistingCity) {

                                $responseData["state_id"] = $isExistingCity->state_id;
                                $responseData["city_id"] = $isExistingCity->id;

                                $isInvalidCity = $cities->where('is_valid', '0')->first();
                                if ($isInvalidCity) {
                                    $cities = City::where('name', 'like', $city_name)->update([
                                        'is_valid' => 1,
                                    ]);
                                }
                            } else {
                                if ($state_name) {
                                    $state = State::where('name', 'like', $state_name)->first();
                                    if (!$state) {
                                        $country = Country::where('name', 'United States')->first();
                                        if ($country) {
                                            $state = State::create([
                                                "country_id" => $country->id,
                                                "name" => $state_name,
                                            ]);
                                        }
                                    }
                                    if ($state) {
                                        $isSavedCity = City::create([
                                            'name' => $city_name,
                                            'state_id' => $state->id,
                                            'zipcode' => $zipcode,
                                            'city_latitude' => $latitude,
                                            'city_longitude' => $longitude,
                                            'is_valid' => 1,
                                        ]);

                                        $responseData["city_id"] = $isSavedCity->id;
                                        $responseData["state_id"] = $state->state_id;
                                    }
                                }
                            }
                        }
                    }
                } else {
                    $isExistingCityGet = City::where('zipcode', $request->get('postal_code'))->where('is_valid', 1)->orderBy('name')->orderBy('id')->first();
                    $responseData["city_id"] = $isExistingCityGet->id;
                    $responseData["state_id"] = $isExistingCityGet->state_id;
                }
                $code = config("wagenabled.status_codes.success");
            }
        } catch (Exception $e) {
            $message = "Please, try again!";
        }

        return WagEnabledHelpers::apiJsonResponse($responseData, $code, $message);
    }

}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\WagEnabledHelpers;
use App\Models\PetPro;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetProsRequestController extends Controller
{
    public function __construct(PetPro $model)
    {
        set_time_limit(0);
        ini_set('memory_limit', -1);
        $this->moduleName = "Pet Pros";
        $this->singularModuleName = "Pet Pro";
        $this->moduleRoute = url('admin/pet-pros-request');
        $this->moduleView = "admin.main.pet-pro-request";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    ///////////////
    // By Umar
    //////////////
    public function approvePetPro($id)
    {
        $petpros = $this->model->find($id);
        $data = [];
        if ($petpros) {
            $data = json_decode($petpros->new_detail);

            $petpros->update((array)$data);

            $petpros->new_detail = null;
            $petpros->status = "approved";
            $petpros->update();
            // return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.success"), "Pet Pros is approved.");
            return redirect($this->moduleRoute)->with("success", "Pet pro approved");
        } else {
            // return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.server_side"), "Something Went Wrong.");
            return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro approval failed");

        }
    }
    public function rejectPetPro($id)
    {
        $data = $this->model->find($id);
        if ($data) {
            $data->status = "reject";
            $data->update();
            // return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.success"), "Pet Pros is rejected.");
            return redirect($this->moduleRoute)->with("success", "Pet pro rejected");
        } else {
            // return WagEnabledHelpers::apiJsonResponse([], config("wagenabled.status_codes.server_side"), "Something Went Wrong.");
				return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro rejection failed");

        }
    }
    public function getAllPetProsRequestDatatable()
    {
        
        view()->share('isIndexPage', true);
        return view($this->moduleView.".index");
    }
    public function getPetProsRequestDatatable(Request $request)
    {
        $result = $this->model->where('status',null)->orWhere('status','pending')->orWhere('status','approved')->where('new_detail','!=',null)->orderBy('id', 'desc')->get();
        return Datatables::of($result)
            ->editColumn('message', function ($result) {
                if ($result->message) {
                    if (strlen($result->message) > 50) {
                        return substr($result->message, 0, 50) . '...';
                    }
                }
                return $result->message;
            })
            ->addIndexColumn()
            ->make(true);
    }
    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);
        if ($data) {
            $res = $data->delete();
            if ($res) {
                $result['message'] = "Pet pro deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting pet pro";
                $result['code'] = 400;
            }
        } else {
            $result['message'] = "Pet pro not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
    public function show($id)
    {        
        $result = $this->model->find($id);
        if ($result) {
            return view("$this->moduleView.show", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Admin user not found");
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PetTypeRequest;
use App\Models\PetType;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class PetTypeController extends Controller
{
    public function __construct(PetType $model)
    {
        $this->moduleName = "Pet Type";
        $this->singularModuleName = "Pet Type";
        $this->moduleRoute = url('admin/pet-type');
        $this->moduleView = "admin.main.pet-type";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->withCount('petPro')->orderBy('name', 'asc');
        \Log::error(json_encode($result));
        return Datatables::of($result)->addIndexColumn()->make(true);
    }

    public function create()
    {
        return view("admin.main.general.create");
    }

    public function store(PetTypeRequest $request)
    {
        $input = $request->except(['_token']);

        $isExist = $this->model->where('name', '=', $input['name'])->withTrashed()->first();
        if ($isExist) {
            if ($isExist->deleted_at == null) {
                return redirect($this->moduleRoute)->with("error", "Sorry, Pet typ alerady exist");
            } else {
                $isExist->deleted_at = null;
                $isExist->save();
                return redirect($this->moduleRoute)->with("success", "Pet typee created");
            }
        }
        try {
            $isSaved = $this->model->create($input);
            if ($isSaved) {
                return redirect($this->moduleRoute)->with("success", "Pet type created");
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function show($id)
    {

    }

    public function edit($id)
    {
        $result = $this->model->find($id);
        if ($result) {
            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet type not found");
    }

    public function update(PetTypeRequest $request, $id)
    {

        $input = $request->except(['_token']);
        $isExist = $this->model->where('name', '=', $input['name'])->where('id', '!=', $id)->first();
        if ($isExist) {
            return redirect($this->moduleRoute)->with("error", "Sorry, Pet type already exist");
        } else {
            try {
                $result = $this->model->find($id);
                if ($result) {
                    $isSaved = $result->update($input);
                    if ($isSaved) {
                        return redirect($this->moduleRoute)->with("success", "Pet type updated");
                    }
                }
                return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

            } catch (\Exception $e) {
                return redirect($this->moduleRoute)->with('error', $e->getMessage());
            }
        }
    }

    public function destroy($id)
    {
        $result = array();

        $data = $this->model->find($id);

        if ($data) {

            $res = $data->delete();
            if ($res) {
                $result['message'] = "Pet type deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting watch and learn pet type";
                $result['code'] = 400;
            }

        } else {
            $result['message'] = "Pet type not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\WatchAndLearnCategoriesRequest;
use App\Models\WatchAndLearnCategory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class ProductReviewCategoriesController extends Controller
{
    public function __construct(WatchAndLearnCategory $model)
    {        
        $this->moduleName = "Product Review Categories";
        $this->singularModuleName = "Product Review Category";
        $this->moduleRoute = url('admin/product-review-categories');
        $this->moduleView = "admin.main.product-review-categories";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->ProductReviewCategory()->orderBy('name', 'asc');

        return Datatables::of($result)->addIndexColumn()->make(true);        
    }
    
    public function create()
    {
        return view("admin.main.general.create");
    }
 
    public function store(WatchAndLearnCategoriesRequest $request)
    {
        $input = $request->except(['_token']);
	
		$isExist = $this->model->where('name', '=', $input['name'])->where('parent_id', config("wagenabled.product_review_category_id"))->withTrashed()->first();
		if($isExist){
			if($isExist->deleted_at == null){
				return redirect($this->moduleRoute)->with("error", "Sorry, Product Review category alerady exist");
			} else {
				$isExist->deleted_at = null;
				$isExist->save();
				return redirect($this->moduleRoute)->with("success", "Product Review category created");
			}
		}
		else {
			try {      
                $input['parent_id'] = config("wagenabled.product_review_category_id");        
				$isSaved = $this->model->create($input);
				if ($isSaved) {
					return redirect($this->moduleRoute)->with("success", "Product Review category created");
				}
				return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

			} catch (\Exception $e) {
				return redirect($this->moduleRoute)->with('error', $e->getMessage());
			}
		}
    }

    public function show($id)
    {        

    }
    
    public function edit($id)
    {
        $result = $this->model->find($id);
        if ($result) {
            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Product Review category not found");
    }
   
    public function update(WatchAndLearnCategoriesRequest $request, $id)
    {               
		$input = $request->except(['_token']); 
		
		$isExist = $this->model->where('name', '=', $input['name'])->where('parent_id', config("wagenabled.product_review_category_id"))->where('id', '!=', $id)->first();
		if($isExist){
			return redirect($this->moduleRoute)->with("error", "Sorry, Product Review category alerady exist");
		} else {
			try {
				$result = $this->model->find($id);            
				if ($result) {                                  
					$isSaved = $result->update($input);        
					if ($isSaved) {
						return redirect($this->moduleRoute)->with("success", "Product Review category updated");
					}
				}
				return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

			} catch (\Exception $e) {            
				return redirect($this->moduleRoute)->with('error', $e->getMessage());
			}
		}
    }
  
    public function destroy($id)
    {
        $result = array();

        $data = $this->model->find($id);

        if ($data) {            
          
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "Product Review category deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting Product Review category";
                $result['code'] = 400;
            }
                       
           
        } else {
            $result['message'] = "Product Review category not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\WatchAndLearnRequest;
use App\Http\WagEnabledHelpers;
use App\Models\WatchAndLearn;
use App\Models\WatchAndLearnAuthor;
use App\Models\WatchAndLearnCategory;
use App\Models\WatchAndLearnMedias;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\View;
use Intervention\Image\Facades\Image;
use Storage;
use Yajra\Datatables\Datatables;
use App\Models\WatchAndLearnComment;

class ProductReviewController extends Controller
{
    public function __construct(WatchAndLearn $model)
    {        
        $this->moduleName = "Product Reviews";
        $this->singularModuleName = "Product Review";
        $this->moduleRoute = url('admin/product-reviews');
        $this->moduleView = "admin.main.product-reviews";
        $this->model = $model;
		$this->statusCodes = config("wagenabled.status_codes");

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {      
        $frontUrl = env('REACT_SERVER_BASE_URL');
		view()->share('isIndexPage', true);
		
		$categories = WatchAndLearnCategory::ProductReviewCategory()->pluck('name', 'id')->toArray();

        return view("$this->moduleView.index", compact('frontUrl', 'categories'));
    }

    public function getDatatable(Request $request)
    {
        $blogMode = $request->get('blogMode');
		$category_id = $request->get('category_id');
        $parent_product_review_id = config("wagenabled.product_review_category_id");
        if($category_id != ""){
        
        $result = $this->model->with('categories.category', 'author')->whereHas('categories',function($q) use($category_id,$parent_product_review_id){
            $q->where('selected_category_id',$category_id);
            $q->whereHas('category',function($q) use($parent_product_review_id){
                $q->where('parent_id', $parent_product_review_id);
            });
            
            
        })->select("*")->where('status', $blogMode)->orderBy('id', 'desc');
    }else{
        $result = $this->model->with('categories.category', 'author')->whereHas('categories',function($q) use($category_id,$parent_product_review_id){
            $q->whereHas('category',function($q) use($parent_product_review_id){
                $q->where('parent_id', $parent_product_review_id);
            });
            
        })->select("*")->where('status', $blogMode)->orderBy('id', 'desc');
    }
		
            
		

        return Datatables::of($result)
        ->addColumn('formated_author', function ($result) {
            if( $result->author  ) {
                return $result->author->name;
            }
            return '-';            
        })
        ->addColumn('formated_category', function ($result) {
             $categoryString = "-";
            if(count($result->categories)){
            foreach ($result->categories as $key => $category) {
                if($key == 0){
                    if($category){
                        $categoryString = $category->category->name;
                    }
                }else{
                    if($categoryString == "-" && $category){
                        $categoryString = $category->name;
                    }else{

                        $categoryString = $categoryString.", ".$category->name;
                    }
                    
                }
            }
        }
        return $categoryString;         
        })


       
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create()
    {
        $categories = WatchAndLearnCategory::ProductReviewCategory()->orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        $authors = WatchAndLearnAuthor::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        return view("$this->moduleView.create", compact('categories', 'authors'));
    }
 
    public function store(WatchAndLearnRequest $request)
    {
        $input = $request->except(['_token', 'image','cropped_image', 'blogMode']);
        $input['category_id'] = null;
        $inputCategories = $request['category_id'];
        try {   
            if ($request->file('image', false)) {        
                $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.watch_and_learn_thumbnail_path"), "", $isCreateThumb="1", $height=250, $width=380, $request->get('cropped_image'));            
                if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                    $input["thumbnail"] = $imageStore['name'];                    
                }                    
            } 

            $isSaved = $this->model->create($input);
            if ($isSaved) {
                if(count($inputCategories)) {  
					$currentTime = Carbon::now();   
					$insertArray = [];             
                    foreach ($inputCategories as $categoryId) {
                        $insertArray[] = [
							"watch_and_learn_id" => $isSaved->id,
							"selected_category_id" => $categoryId,
                            "created_at" => $currentTime,
                            "updated_at" => $currentTime,
						];						
					}
					$isSaved->categories()->insert($insertArray);
                }
                if( $request->get('blogMode') == 'draft' ) {
                    return redirect($this->moduleRoute)->with("success", "Product Review created");
                }
                $viewData['watchAndLearn'] = $isSaved;                       
                return view("$this->moduleView.content-builder", $viewData);
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function show($id)
    {    
		$result = $this->model->withCount(['comments' => function($query){
			$query->where('parent_comment_id', 0);
		}])
		->find($id);               
        $back_url_path = $this->moduleRoute;
        if ($result) {
            return view("$this->moduleView.show", compact("result", 'back_url_path'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Product Review not found");            
    }
    
    public function edit($id)
    {
        $result = $this->model->find($id);
        $selectedCategories = $result->categories()->pluck("selected_category_id")->all();
        $categories = WatchAndLearnCategory::ProductReviewCategory()->orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        $authors = WatchAndLearnAuthor::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        if ($result) {
            return view("$this->moduleView.edit", compact("result","categories", 'authors', 'selectedCategories'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Product Review not found");
    }    

    public function update(WatchAndLearnRequest $request, $id)
    {               
        $input = $request->except(['_token', 'image','cropped_image', 'video', 'blogMode']);      
        $input['category_id'] = null;
        $inputCategories = $request['category_id'];
        
        try {
            $result = $this->model->find($id);            
            if ($result) {   
                $old_file_name = '';
                if ($request->file('image', false)) {        
                    $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.watch_and_learn_thumbnail_path"), $result->thumbnail, $isCreateThumb="1", $height=250, $width=380, $request->get('cropped_image'));            
                    if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                        $input["thumbnail"] = $imageStore['name'];                    
                    }                    
                } 

                if( $request->get('blogMode') == 'draft' ) {                        
                    $input["status"] = 'draft';  
                }
                $isSaved = $result->update($input);  

                if ($isSaved) {                                    
                    if(count($inputCategories)) {  
                        $result->categories()->delete();
                        $currentTime = Carbon::now();   
                        $insertArray = [];             
                        foreach ($inputCategories as $categoryId) {
                            $insertArray[] = [
                                "watch_and_learn_id" => $id,
                                "selected_category_id" => $categoryId,
                                "created_at" => $currentTime,
                                "updated_at" => $currentTime,
                            ];						
                        }
                        $result->categories()->insert($insertArray);
                    }
                    if( $request->get('blogMode') == 'draft' ) {                        
                        return redirect($this->moduleRoute);
                    } 
                    if( $request->get('blogMode') == 'publish'  ) {
                        return redirect($this->moduleRoute);                        
                    }            

                    $viewData['watchAndLearn'] = $result;                      
                    return view("$this->moduleView.content-builder", $viewData);

                    return redirect($this->moduleRoute)->with("success", "Product Review updated");
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {            
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }

    public function buildWithContentBuilder(Request $request, $id = null)
    {
        $viewData = [];
        $WatchAndLearn = $this->model::whereId($id)->first();
        if ($WatchAndLearn) {
            $viewData['watchAndLearn'] = $WatchAndLearn;
        }

        return view("$this->moduleView.content-builder", $viewData);
    }

    public function setDescriptionByContentBuilder(Request $request, $id)
    {
        try {
            $data = $this->model::whereId($id)->first();

            if ($data) {
                $input = $request->only(['description']);

                $status = $data->update($input);

                if ($status) {
                    $result = $this->model->with('categories.category')->find($id);        
                    $back_url_path = $this->moduleRoute.'/'.$id.'/edit/buildwithcontentbuilder';
                    if ($result) {
                        return view("$this->moduleView.show", compact("result", 'back_url_path'));
                    }
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");
        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }

    public function changeStatus($id, $status, Request $request)
    {
        $result = $this->model->find($id);                
        if ($result) {
            $result->status = $status;
            $result->Save();           
            $result['message'] =  "success";
            $result['code'] = 200;
        } else {
            
            $result['message'] = "Sorry, Product Review not found";
            $result['code'] = 400;
        }

        return response()->json($result, $result['code']);
    }  

    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);
        if ($data) {                    
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "Product Review deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting Product Review";
                $result['code'] = 400;
            }                        
        } else {
            $result['message'] = "Product Review not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
	
	public function CommentList(Request $request, $slug, $lastId = 0, $parent_id = 0) {

        $this->responseData = []; 
        $comments = [];
       
        $perPage = config("wagenabled.no_of_comment_display", 6);    
        $NoOfchildrenCount = config("wagenabled.no_of_comment_children_display", 2);      
        $depth = config("wagenabled.comment_depth", 2);   

        $this->responseData["comments"] = [];
        $this->responseData["children_count"] = 0;
        $this->responseData["no_of_comments_display"] = $perPage;
        $this->responseData["no_of_children_display"] = $NoOfchildrenCount;
        $this->responseData["depth_count"] = $depth;
        $this->responseData["comment_count"] = 0;
                
        $watch_and_learn = $this->model->Where('slug', $slug)
                            ->Where('status', 'published')
                            ->first();

        if( $watch_and_learn ) {   

            $total_count = WatchAndLearnComment::where('parent_comment_id', 0)
                                ->where("watch_and_learn_id", $watch_and_learn->id)
                                ->count();

            $total_count = $total_count ? $total_count : 0;                            
            if( $lastId == 0 ) {
                $last_comment = WatchAndLearnComment::select('id')
                                ->where("watch_and_learn_id", $watch_and_learn->id)                                    
                                ->orderBy('id', 'desc')
                                ->first(); 
                if( $last_comment ){                        
                    $lastId = $last_comment->id;
                    $lastId++;
                }
            } 

            if( $lastId !=0 ) {     
                //Comment ids get           
                $ids = WatchAndLearnComment::where('parent_comment_id', $parent_id)
                                    ->where("watch_and_learn_id", $watch_and_learn->id)
                                    ->where("id", '<', $lastId)
                                    ->orderBy('id', 'desc')
                                    ->limit($perPage)
                                    ->pluck('id')
                                    ->toArray(); 

                //Children Comments -          
                $childrenIds = [];
                $parentId = $ids;
                for ($i=1; $i <=$depth ; $i++) {                         
                    $newParentIds = [];                       
                    foreach ($parentId as $id) {
                        $childrenId = WatchAndLearnComment::where('parent_comment_id', $id)
                                        ->orderBy('id', 'desc')
                                        ->limit($NoOfchildrenCount)
                                        ->pluck('id')
                                        ->toArray();   
                        $childrenIds = array_merge($childrenIds, $childrenId);
                        $newParentIds = array_merge($newParentIds, $childrenId);
                    }
                    $parentId = $newParentIds;
                }
            
                $ids = array_merge($ids, $childrenIds);                   
                $comments = WatchAndLearnComment::with('user')->whereIn('id', $ids)
                                    ->orderBy('id', 'desc')                                    
                                    ->get()
                                    ->toArray();                       
                $count = [];

                foreach ($ids as $id ) {
                    $count[$id] = WatchAndLearnComment::where('parent_comment_id', $id)
                                        ->where("watch_and_learn_id", $watch_and_learn->id)
                                        ->count();
                }

                $this->responseData["comments"] = WagEnabledHelpers::buildTreeStructure($comments, $parent_id);
                $this->responseData["children_count"] = $count;
                $this->responseData["no_of_comments_display"] = $perPage;
                $this->responseData["no_of_children_display"] = $NoOfchildrenCount;
                $this->responseData["depth_count"] = $depth;
            }

            $this->responseData["comment_count"] = $total_count;                               
            $this->code = $this->statusCodes['success'];    
            $this->message = "";   

        }
        else{
            $this->code = $this->statusCodes['success'];
            $this->message = "";
        }

        return WagEnabledHelpers::apiJsonResponse($this->responseData, $this->code, $this->message);       
	}
	
	public function deleteComment(Request $request, $slug, $id) 
	{
		$responseData = [];
		$code = 403;
		$message = "Please, try again!";

        $watch_and_learn = $this->model->Where('slug', $slug)
                                ->first();
        if( $watch_and_learn ) {
            $watch_and_learn_comment = WatchAndLearnComment::with('allChildren')
                                        ->where('watch_and_learn_id', $watch_and_learn->id)
                                        ->where('id', $id)
                                        ->first(); 

            if( $watch_and_learn_comment ) {     

                $this->watch_and_learn_comment_ids[] = $watch_and_learn_comment->id;
                $this->getChildreanIDs($watch_and_learn_comment->allChildren);
               
                $comments = WatchAndLearnComment::with('user')->whereIn('id', $this->watch_and_learn_comment_ids)->delete();                  
                $message = "Comment deleted successfully";
                $code = $this->statusCodes['success']; 
            } 
        }
        return WagEnabledHelpers::apiJsonResponse($responseData, $code, $message);
	}
	
    public function getChildreanIDs($watch_and_learn_comments)
    {   
        $childrenId = [];
        foreach ($watch_and_learn_comments as $watch_and_learn_comment) {
            $childrenId[] = $watch_and_learn_comment->id;
            $this->watch_and_learn_comment_ids = array_merge($this->watch_and_learn_comment_ids, $childrenId);
            $this->getChildreanIDs($watch_and_learn_comment->allChildren);
        }         
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\WatchAndLearnDealRequest;
use App\Models\WatchAndLearn;
use App\Models\WatchAndLearnDeal;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class ProductReviewDealsController extends Controller
{
    public function __construct(WatchAndLearnDeal $model)
    {            
        $this->moduleName = "Product Review Deals";
        $this->singularModuleName = "Product Review Deal";
        $this->moduleView = "admin.main.product-review-deals";
        $this->moduleRoute = url('admin/product-reviews');
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request, $watch_and_learn_id)
    {
        $moduleRoute = url('admin/product-reviews/'.$watch_and_learn_id.'/deals');
        View::share('module_route', $moduleRoute);

        $result = $this->model->select("*")->where('watch_and_learn_id', $watch_and_learn_id)->orderBy('id', 'desc');
        return Datatables::of($result)
        ->addColumn('claimed', function ($result) {            
            return $result->claims->count();            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create($watch_and_learn_id)
    {
        $watchAndLearn = WatchAndLearn::find($watch_and_learn_id);
        if( $watchAndLearn ) {
            $moduleRoute = url('admin/product-reviews/'.$watch_and_learn_id.'/deals');
            View::share('module_route', $moduleRoute);         
            return view("admin.main.product-review-deals.create", compact('watch_and_learn_id'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");
    }
 
    public function store(WatchAndLearnDealRequest $request, $watch_and_learn_id)
    {
        $input = $request->except(['_token']);
        try {    
            $watchAndLearn = WatchAndLearn::find($watch_and_learn_id);
            if( $watchAndLearn ) {
                $input["watch_and_learn_id"] = $watch_and_learn_id;
                $isSaved = $this->model->create($input);
                if ($isSaved) {
                    return redirect($this->moduleRoute.'/'.$watch_and_learn_id.'/edit')->with("success", "Pet pro deal created");
                }            
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function edit($watch_and_learn_id, $id)
    {
        $watchAndLearn = WatchAndLearn::find($watch_and_learn_id);
        if( $watchAndLearn ) {
            $moduleRoute = url('admin/product-reviews/'.$watch_and_learn_id.'/deals');
            View::share('module_route', $moduleRoute);
            $result = $this->model->find($id);
            if ($result) {
                return view("admin.main.product-review-deals.edit", compact("result", "watch_and_learn_id"));
            }
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Pet pro deal not found");
    }
   
    public function update(WatchAndLearnDealRequest $request, $watch_and_learn_id, $id)
    {               
        $input = $request->except(['_token']);       
        try {
            $watchAndLearn = WatchAndLearn::find($watch_and_learn_id);
            if( $watchAndLearn ) {
                $result = $this->model->find($id);            
                if ($result) {                                  
                    $isSaved = $result->update($input);        
                    if ($isSaved) {
                        return redirect($this->moduleRoute.'/'.$watch_and_learn_id.'/edit')->with("success", "Pet pro deal updated");
                    }
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {            
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }
    
    public function changeStatus($watch_and_learn_id, $id)
    {
        $result = array();
        $watchAndLearn = WatchAndLearn::find($watch_and_learn_id);     

        if ($watchAndLearn) {            
            $data = $this->model->find($id);
            if ($data) { 
                
                if($data->status == 'active' ) {
                    $data->status = 'pause';
                } else {
                    $data->status = 'active';
                }
                $isSaved = $data->save();

                if ($isSaved) {
                    $result['message'] =  "Change pet pro status";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while change pet pro status";
                    $result['code'] = 400;
                }
            } else {
                $result['message'] = "Pet pro deal not Found!";
                $result['code'] = 400;
            }                                
        } else {
            $result['message'] = "Sorry, Something went wrong please try again!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }

    public function destroy($watch_and_learn_id, $id)
    {
        $result = array();
        $watchAndLearn = WatchAndLearn::find($watch_and_learn_id);     

        if ($watchAndLearn) {            
            $data = $this->model->find($id);
            if ($data) { 
                $res = $data->delete();
                if ($res) {
                    $result['message'] =  "Pet pro deal deleted.";
                    $result['code'] = 200;
                } else {
                    $result['message'] = "Error while deleting pet pro deal";
                    $result['code'] = 400;
                }
            } else {
                $result['message'] = "Pet pro deal not Found!";
                $result['code'] = 400;
            }                                
        } else {
            $result['message'] = "Sorry, Something went wrong please try again!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Testimonial;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;
use App\Http\Requests\Admin\TestimonialRequest;
use App\Http\WagEnabledHelpers;

class TestimonialController extends Controller
{
    public function __construct(Testimonial $model) {
        $this->moduleName = "Testimonial";
        $this->singularModuleName = "Testimonial";
        $this->moduleRoute = url('admin/testimonial');
        $this->moduleView = "admin.main.testimonials";
        $this->model = $model;

        $this->breadcrumb = [['title' => $this->moduleName, 'url' => $this->moduleRoute]];

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute );
		View::share('moduleView', $this->moduleView );
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable()
    {  
        $result = $this->model->all();
        return Datatables::of($result)->addIndexColumn()->make(true);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $this->breadcrumb[] = ['title' => "Add ".$this->moduleName, 'url' => ''];
        view()->share('breadcrumb', $this->breadcrumb);

        return view("admin.main.general.create");
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(TestimonialRequest $request)
    {
        $input = $request->except(['_token', 'image','cropped_image']);

        try {
			if ($request->file('image', false)) {        
                $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.testimonial_image_path"), "", $isCreateThumb="1", $height=350, $width=300, $request->get('cropped_image'));            
                if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                    $input["image"] = $imageStore['name'];                    
                }                    
            } 
            $isSaved = $this->model->create($input);

            if ($isSaved) {
                return redirect($this->moduleRoute)->with("success", $this->moduleName." Added Successfully");
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
       //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $result = $this->model->find($id);
        if($result) {
            $this->breadcrumb[] = ['title' => "Edit ".$this->moduleName, 'url' => ''];
            view()->share('breadcrumb', $this->breadcrumb);

            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, $this->moduleName not found");
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(TestimonialRequest $request, $id)
    {
        $input = $request->except(['_token', 'image','cropped_image']);
        try {
            $result = $this->model->find($id);

            if($result) {
                if ($request->file('image', false)) {        
                    $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.testimonial_image_path"), $result->image, $isCreateThumb="1", $height=350, $width=300, $request->get('cropped_image'));            
                    if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                        $input["image"] = $imageStore['name'];                    
                    }                    
                } 
                $isSaved = $result->update($input);
                
                if ($isSaved) {
                    return redirect($this->moduleRoute)->with("success", $this->moduleName." Updated Successfully");
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $result = array();
        try {
            $res = $this->model->find($id);
            if ($res) {
                $res->delete();

                $result['message'] = "$this->moduleName Deleted Successfully.";
                $result['code'] = 200;
            } else {
                $result['code'] = 400;
                $result['message'] = "Something went wrong";
            }
        } catch (\Exception $e) {
            $result['message'] = $e->getMessage();
            $result['code'] = 400;
        }

        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class UsersController extends Controller
{
    public function __construct(User $model)
    {        
        $this->moduleName = "Users";
        $this->singularModuleName = "User";
        $this->moduleRoute = url('admin/users');
        $this->moduleView = "admin.main.users";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->with('city')->orderBy('id', 'desc');
        return Datatables::of($result)
        ->addColumn('city_state', function ($result) {
            $str = "";
            if( $result->city_id  ) {
                $str .= $result->city->name;
            }
            if( $result->state_id ) {
                $str .= ', '. $result->state->name;
            }
            return $str;            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create()
    {
        
    }
 
    public function store(Request $request)
    {       

    }

    public function show($id)
    {        
        $result = $this->model->with('pets', 'pets.breed')->find($id);
        if ($result) {
            return view("$this->moduleView.show", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Admin user not found");
    }
    
    public function edit($id)
    {
       
    }
   
    public function update(Request $request, $id)
    {   

    }
  
    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);

        if ($data) {                   
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "User deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting user";
                $result['code'] = 400;
            }          
           
        } else {
            $result['message'] = "User not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\WatchAndLearnAuthorRequest;
use App\Http\WagEnabledHelpers;
use App\Models\WatchAndLearn;
use App\Models\WatchAndLearnAuthor;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class WatchAndLearnAuthorController extends Controller
{
    public function __construct(WatchAndLearnAuthor $model)
    {        
        $this->moduleName = "Watch And Learn Authors";
        $this->singularModuleName = "Watch And Learn Author";
        $this->moduleRoute = url('admin/watch-and-learn-author');
        $this->moduleView = "admin.main.watch-and-learn-author";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->orderBy('name', 'asc');
        return Datatables::of($result)
        ->editColumn('about', function ($result) {
            if( $result->about  ) {
                if( strlen($result->about) > 50 ){
                    return substr($result->about, 0, 50).'...';
                }
            }
            return $result->about;            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create()
    {        
        return view("admin.main.general.create");
    }
 
    public function store(WatchAndLearnAuthorRequest $request)
    {
        $input = $request->except(['_token', 'image','cropped_image']);

        try {   
            if ($request->file('image', false)) {        
                $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.watch_and_learn_author_path"), "", $isCreateThumb="1", $height=250, $width=380, $request->get('cropped_image'));            
                if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                    $input["profile_image"] = $imageStore['name'];                    
                }                    
            }     
            $isSaved = $this->model->create($input);
            if ($isSaved) {
                return redirect($this->moduleRoute)->with("success", "Watch and learn author created");
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function show($id)
    {        

    }
    
    public function edit($id)
    {
        $result = $this->model->find($id);
        if ($result) {
            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Watch and learn author not found");
    }
   
    public function update(WatchAndLearnAuthorRequest $request, $id)
    {               
        $input = $request->except(['_token', 'image','cropped_image']);      
        try {
            $result = $this->model->find($id);            
            if ($result) {   
                if ($request->file('image', false)) {        
                    $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.watch_and_learn_author_path"), $result->profile_image, $isCreateThumb="1", $height=250, $width=380, $request->get('cropped_image'));            
                    if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                        $input["profile_image"] = $imageStore['name'];                    
                    }                    
                }                
               
                $isSaved = $result->update($input);        
                if ($isSaved) {
                    return redirect($this->moduleRoute)->with("success", "Watch and learn author updated");
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {            
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }
  
    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);
        if ($data) {                    
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "Watch and learn author deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting watch and learn author";
                $result['code'] = 400;
            }                        
        } else {
            $result['message'] = "Watch and learn author not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\WatchAndLearnCategoriesRequest;
use App\Models\WatchAndLearnCategory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\View;
use Yajra\Datatables\Datatables;

class WatchAndLearnCategoriesController extends Controller
{
    public function __construct(WatchAndLearnCategory $model)
    {        
        $this->moduleName = "Watch And Learn Categories";
        $this->singularModuleName = "Watch And Learn Category";
        $this->moduleRoute = url('admin/watch-and-learn-categories');
        $this->moduleView = "admin.main.watch-and-learn-categories";
        $this->model = $model;

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {
        view()->share('isIndexPage', true);
        return view("$this->moduleView.index");
    }

    public function getDatatable(Request $request)
    {
        $result = $this->model->select("*")->GetWatchAndLearnCategory()->orderBy('name', 'asc');

        return Datatables::of($result)->addIndexColumn()->make(true);        
    }
    
    public function create()
    {
        return view("admin.main.general.create");
    }
 
    public function store(WatchAndLearnCategoriesRequest $request)
    {
        $input = $request->except(['_token']);
	
		$isExist = $this->model->where('name', '=', $input['name'])->where('parent_id', '!=', config("wagenabled.product_review_category_id"))->where('watch_and_learn_categories.parent_id', 0)->withTrashed()->first();
		if($isExist){
			if($isExist->deleted_at == null){
				return redirect($this->moduleRoute)->with("error", "Sorry, Watch and learn category alerady exist");
			} else {
				$isExist->deleted_at = null;
				$isExist->save();
				return redirect($this->moduleRoute)->with("success", "Watch and learn category created");
			}
		}
		else {
			try {           
				$isSaved = $this->model->create($input);
				if ($isSaved) {
					return redirect($this->moduleRoute)->with("success", "Watch and learn category created");
				}
				return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

			} catch (\Exception $e) {
				return redirect($this->moduleRoute)->with('error', $e->getMessage());
			}
		}
    }

    public function show($id)
    {        

    }
    
    public function edit($id)
    {
        $result = $this->model->find($id);
        if ($result) {
            return view("admin.main.general.edit", compact("result"));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Watch and learn category not found");
    }
   
    public function update(WatchAndLearnCategoriesRequest $request, $id)
    {               
		$input = $request->except(['_token']); 
		
		$isExist = $this->model->where('name', '=', $input['name'])->where('parent_id', '!=', config("wagenabled.product_review_category_id"))->where('watch_and_learn_categories.parent_id', 0)->where('id', '!=', $id)->first();
		if($isExist){
			return redirect($this->moduleRoute)->with("error", "Sorry, Watch and learn category alerady exist");
		} else {
			try {
				$result = $this->model->find($id);            
				if ($result) {                                  
					$isSaved = $result->update($input);        
					if ($isSaved) {
						return redirect($this->moduleRoute)->with("success", "Watch and learn category updated");
					}
				}
				return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

			} catch (\Exception $e) {            
				return redirect($this->moduleRoute)->with('error', $e->getMessage());
			}
		}
    }
  
    public function destroy($id)
    {
        $result = array();

        $data = $this->model->find($id);

        if ($data) {            
          
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "Watch and learn category deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting watch and learn category";
                $result['code'] = 400;
            }
                       
           
        } else {
            $result['message'] = "Watch and learn category not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
    }
}


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

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\WatchAndLearnRequest;
use App\Http\WagEnabledHelpers;
use App\Models\WatchAndLearn;
use App\Models\WatchAndLearnAuthor;
use App\Models\WatchAndLearnCategory;
use App\Models\WatchAndLearnMedias;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\View;
use Intervention\Image\Facades\Image;
use Storage;
use Yajra\Datatables\Datatables;
use App\Models\WatchAndLearnComment;

class WatchAndLearnController extends Controller
{
    public function __construct(WatchAndLearn $model)
    {        
        $this->moduleName = "Watch And Learn";
        $this->singularModuleName = "Watch And Learn";
        $this->moduleRoute = url('admin/watch-and-learn');
        $this->moduleView = "admin.main.watch-and-learn";
        $this->model = $model;
		$this->statusCodes = config("wagenabled.status_codes");

        View::share('module_name', $this->moduleName);
        View::share('singular_module_name', $this->singularModuleName);
        View::share('module_route', $this->moduleRoute);
        View::share('moduleView', $this->moduleView);
    }

    public function index()
    {      
        $frontUrl = env('REACT_SERVER_BASE_URL');
		view()->share('isIndexPage', true);
		
		$categories = WatchAndLearnCategory::GetWatchAndLearnCategory()->pluck('name', 'id')->toArray();

        return view("$this->moduleView.index", compact('frontUrl', 'categories'));
    }

    public function getDatatable(Request $request)
    {
        $blogMode = $request->get('blogMode');
		$category_id = $request->get('category_id');

        $result = $this->model->with('category', 'author')->GetWatchAndLearnCategory()->select("*")->where('status', $blogMode)->orderBy('id', 'desc');

		if($category_id != ""){
            $result = $result->where('category_id','=',$category_id);
		}

        return Datatables::of($result)
        ->addColumn('formated_author', function ($result) {
            if( $result->author  ) {
                return $result->author->name;
            }
            return '-';            
        })
        ->addIndexColumn()
        ->make(true);        
    }
    
    public function create()
    {
        $categories = WatchAndLearnCategory::GetWatchAndLearnCategory()->orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        $authors = WatchAndLearnAuthor::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        return view("$this->moduleView.create", compact('categories', 'authors'));
    }
 
    public function store(WatchAndLearnRequest $request)
    {
        $input = $request->except(['_token', 'image','cropped_image', 'video_file', 'blogMode']);
        try {   
            if ($request->file('image', false)) {        
                $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.watch_and_learn_thumbnail_path"), "", $isCreateThumb="1", $height=250, $width=380, $request->get('cropped_image'));            
                if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                    $input["thumbnail"] = $imageStore['name'];                    
                }                    
            } 

            // if ($request->get('video_type') == 'video_upload') {                       
            //     if ($request->file('video_file', false)) {        
            //         $imageStore = WagEnabledHelpers::uploadFile($request->file('video_file'), config("wagenabled.path.doc.watch_and_learn_video_path"), "");            
            //         if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
            //             $input["video_file"] = $imageStore['name']; 
            //             $input["embed_link"] = null; 

            //             $video_file = $request->file('video_file');
            //             $input['duration'] =  exec("ffmpeg -i $video_file 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");                   
            //         }                    
            //     }  
            // } else {
            //     //$file_path='https://www.youtube.com/watch?v=uilkmUoXoLU';
            //     if($input['embed_link']) {
            //         $input['duration'] = WagEnabledHelpers::getYouTubeVideoDuration($input['embed_link']);
            //     }
            // }
            $isSaved = $this->model->create($input);
            if ($isSaved) {
                if( $request->get('blogMode') == 'draft' ) {
                    return redirect($this->moduleRoute)->with("success", "Watch and learn created");
                }
                $viewData['watchAndLearn'] = $isSaved;                       
                return view("$this->moduleView.content-builder", $viewData);
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }

    }

    public function show($id)
    {    
        $result = $this->model->withCount(['comments' => function($query){
			$query->where('parent_comment_id', 0);
		}])
		->find($id);        
		$back_url_path = $this->moduleRoute;

		if ($result) {
            return view("$this->moduleView.show", compact("result", 'back_url_path'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Watch and learn not found");            
    }
    
    public function edit($id)
    {
        $result = $this->model->find($id);
        $categories = WatchAndLearnCategory::GetWatchAndLearnCategory()->orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        $authors = WatchAndLearnAuthor::orderBy('name', 'asc')->get()->pluck("name", "id")->toArray();
        if ($result) {
            return view("$this->moduleView.edit", compact("result","categories", 'authors'));
        }
        return redirect($this->moduleRoute)->with("error", "Sorry, Watch and learn not found");
    }    

    public function update(WatchAndLearnRequest $request, $id)
    {               
        $input = $request->except(['_token', 'image','cropped_image', 'video', 'blogMode']);      
        try {
            $result = $this->model->find($id);            
            if ($result) {   
                $old_file_name = '';
                if ($request->file('image', false)) {        
                    $imageStore = WagEnabledHelpers::saveUploadedImage($request->file('image'), config("wagenabled.path.doc.watch_and_learn_thumbnail_path"), $result->thumbnail, $isCreateThumb="1", $height=250, $width=380, $request->get('cropped_image'));            
                    if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                        $input["thumbnail"] = $imageStore['name'];                    
                    }                    
                } 

                // if ($request->get('video_type') == 'video_upload') {        
                //     if ($request->file('video_file', false)) {        
                //         $imageStore = WagEnabledHelpers::uploadFile($request->file('video_file'), config("wagenabled.path.doc.watch_and_learn_video_path"), $result->video_file);            
                //         if (isset($imageStore['error_msg']) && $imageStore['error_msg'] == '' && isset($imageStore['name']) && !empty($imageStore['name'])) {
                //             $input["video_file"] = $imageStore['name']; 
                //             $input["embed_link"] = null; 
                //             $video_file = $request->file('video_file');
                //             $input['duration'] =  exec("ffmpeg -i $video_file 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//"); 

                //         }                    
                //     }  
                // } else {
                //     $input["video_file"] = null;  
                //     if( $input['embed_link'] ) {                    
                //         if( $input['embed_link'] !=  $result->embed_link) {
                //             $input['duration'] = WagEnabledHelpers::getYouTubeVideoDuration($input['embed_link']);  
                //         }
                //     } else {
                //         $input['duration'] = null;
                //     }
                // }

                // if( $result->video_type == 'video_upload' ) {
                //     $old_file_name = $result->video_file;
                // }

                if( $request->get('blogMode') == 'draft' ) {                        
                    $input["status"] = 'draft';  
                }
                $isSaved = $result->update($input);  

                if ($isSaved) {
                    
                    if( $old_file_name ) {
                        $deleteFileList[] =  config("wagenabled.path.doc.watch_and_learn_video_path").$old_file_name;
                        WagEnabledHelpers::deleteIfFileExist($deleteFileList);  
                    }

                    if( $request->get('blogMode') == 'draft' ) {                        
                        return redirect($this->moduleRoute);
                    } 
                    if( $request->get('blogMode') == 'publish'  ) {
                        return redirect($this->moduleRoute);                        
                    }            

                    $viewData['watchAndLearn'] = $result;                      
                    return view("$this->moduleView.content-builder", $viewData);

                    return redirect($this->moduleRoute)->with("success", "Watch and learn updated");
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");

        } catch (\Exception $e) {            
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }

    public function buildWithContentBuilder(Request $request, $id = null)
    {
        $viewData = [];
        $watchAndLearn = $this->model::whereId($id)->first();
        if ($watchAndLearn) {
            $viewData['watchAndLearn'] = $watchAndLearn;
        }

        return view("$this->moduleView.content-builder", $viewData);
    }

    public function setDescriptionByContentBuilder(Request $request, $id)
    {
        try {
            $data = $this->model::whereId($id)->first();

            if ($data) {
                $input = $request->only(['description']);

                $status = $data->update($input);

                if ($status) {
                    $result = $this->model->find($id);                    
                    $back_url_path = $this->moduleRoute.'/'.$id.'/edit/buildwithcontentbuilder';
                    if ($result) {
                        return view("$this->moduleView.show", compact("result", 'back_url_path'));
                    }
                }
            }
            return redirect($this->moduleRoute)->with("error", "Sorry, Something went wrong please try again");
        } catch (\Exception $e) {
            return redirect($this->moduleRoute)->with('error', $e->getMessage());
        }
    }

    public function storeMedia(Request $request)
    {
        $media_folder_path = config("wagenabled.path.doc.watch_and_learn_media_path");
        $photos_thumb_path = $media_folder_path."thumb";

        $uploadedImgs = [];

        $photos = $request->file('file');

        if (!is_array($photos)) {
            $photos = [$photos];
        }

        if (!Storage::exists($media_folder_path)) {
            Storage::makeDirectory($media_folder_path);
        }

        if (!Storage::exists($photos_thumb_path)) {
            Storage::makeDirectory($photos_thumb_path);
        }

        $randomStringTemplate = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        for ($i = 0; $i < count($photos); $i++) {
            $photo = $photos[$i];
           
            $randomString = substr(str_shuffle(str_repeat($randomStringTemplate, 5)), 0, 5);

            $timestamp = Carbon::createFromFormat('U.u', microtime(true))->format("YmdHisu");
            $nameWithoutExtension = preg_replace("/[^a-zA-Z0-9]/", "", '') . '' . $timestamp;
            $nameWithoutExtension = $nameWithoutExtension.'-'.$randomString;

            $fileExtension = $photo->getClientOriginalExtension();
            if ($fileExtension == '') {
                $fileExtension = $photo->guessClientExtension();
            }

            $name = $nameWithoutExtension. '.' . $fileExtension;
            $save_name = str_replace([' ', ':', '-'], "", $name);            

            $original_photo = Image::make($photo)
                            ->orientate()
                            ->encode($fileExtension); 

            $resize_photo = Image::make($photo)
                            ->orientate()
                            ->encode($fileExtension); 

            Storage::put($media_folder_path . $save_name, $original_photo);
            Storage::put($photos_thumb_path . '/' . $save_name, $resize_photo);

            $upload = new WatchAndLearnMedias();
            $upload->filename = $save_name;        
            $upload->original_name = basename($photo->getClientOriginalName());
            $upload->save();


            //$upload->img_url = Storage::url($media_folder_path . $save_name);
            $upload->img_thumb_url = Storage::url($photos_thumb_path."/" . $save_name);           
            $upload->img_url = Storage::url($photos_thumb_path."/" . $save_name);           
            array_push($uploadedImgs, $upload);
        }

        if ($request->ajax()) {
            return response()->json([
                'data' => $uploadedImgs
            ]);
        }

        return redirect()->back()->with('success', 'Media added successfully');
    }

    public function changeStatus($id, $status, Request $request)
    {
        $result = $this->model->find($id);                
        if ($result) {
            $result->status = $status;
            $result->Save();           
            $result['message'] =  "success";
            $result['code'] = 200;
        } else {
            
            $result['message'] = "Sorry, Watch and learn not found";
            $result['code'] = 400;
        }

        return response()->json($result, $result['code']);
    }  

    public function destroy($id)
    {
        $result = array();
        $data = $this->model->find($id);
        if ($data) {                    
            $res = $data->delete();
            if ($res) {
                $result['message'] =  "Watch and learn deleted.";
                $result['code'] = 200;
            } else {
                $result['message'] = "Error while deleting watch and learn";
                $result['code'] = 400;
            }                        
        } else {
            $result['message'] = "Watch and learn not Found!";
            $result['code'] = 400;
        }
        return response()->json($result, $result['code']);
	}
	
	public function CommentList(Request $request, $slug, $lastId = 0, $parent_id = 0) {

        $responseData = []; 
        $comments = [];
       
        $perPage = config("wagenabled.no_of_comment_display", 6);    
        $NoOfchildrenCount = config("wagenabled.no_of_comment_children_display", 2);      
        $depth = config("wagenabled.comment_depth", 2);   

        $responseData["comments"] = [];
        $responseData["children_count"] = 0;
        $responseData["no_of_comments_display"] = $perPage;
        $responseData["no_of_children_display"] = $NoOfchildrenCount;
        $responseData["depth_count"] = $depth;
        $responseData["comment_count"] = 0;
        $message = ""; 
        $statusCodes = 200;

        $watch_and_learn = $this->model->Where('slug', $slug)
                            ->Where('status', 'published')
                            ->first();

        if( $watch_and_learn ) {   

            $total_count = WatchAndLearnComment::where('parent_comment_id', 0)
                                ->where("watch_and_learn_id", $watch_and_learn->id)
                                ->count();

            $total_count = $total_count ? $total_count : 0;                            
            if( $lastId == 0 ) {
                $last_comment = WatchAndLearnComment::select('id')
                                ->where("watch_and_learn_id", $watch_and_learn->id)                                    
                                ->orderBy('id', 'desc')
                                ->first(); 
                if( $last_comment ){                        
                    $lastId = $last_comment->id;
                    $lastId++;
                }
            } 

            if( $lastId !=0 ) {     
                //Comment ids get           
                $ids = WatchAndLearnComment::where('parent_comment_id', $parent_id)
                                    ->where("watch_and_learn_id", $watch_and_learn->id)
                                    ->where("id", '<', $lastId)
                                    ->orderBy('id', 'desc')
                                    ->limit($perPage)
                                    ->pluck('id')
                                    ->toArray(); 

                //Children Comments -          
                $childrenIds = [];
                $parentId = $ids;
                for ($i=1; $i <=$depth ; $i++) {                         
                    $newParentIds = [];                       
                    foreach ($parentId as $id) {
                        $childrenId = WatchAndLearnComment::where('parent_comment_id', $id)
                                        ->orderBy('id', 'desc')
                                        ->limit($NoOfchildrenCount)
                                        ->pluck('id')
                                        ->toArray();   
                        $childrenIds = array_merge($childrenIds, $childrenId);
                        $newParentIds = array_merge($newParentIds, $childrenId);
                    }
                    $parentId = $newParentIds;
                }
            
                $ids = array_merge($ids, $childrenIds);                   
                $comments = WatchAndLearnComment::with('user')->whereIn('id', $ids)
                                    ->orderBy('id', 'desc')                                    
                                    ->get()
                                    ->toArray();                       
                $count = [];

                foreach ($ids as $id ) {
                    $count[$id] = WatchAndLearnComment::where('parent_comment_id', $id)
                                        ->where("watch_and_learn_id", $watch_and_learn->id)
                                        ->count();
                }

                $responseData["comments"] = WagEnabledH
Download .txt
gitextract_uwh3je2m/

├── .gitignore
├── README.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── BreedsImportCommand.php
│   │   │   ├── ScriptCompressExistingImages.php
│   │   │   ├── ScriptCompressExistingMediaImages.php
│   │   │   ├── ScriptCompressExistingPetProImages.php
│   │   │   ├── ScriptCompressExistingThumbOrImages.php
│   │   │   ├── ScriptCreatePetProSmallThumbImages.php
│   │   │   ├── StateShortcodeScript.php
│   │   │   ├── UpdateValidCitiesFlagCommand.php
│   │   │   └── addExistingPetProCategoriesCommand.php
│   │   └── Kernel.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminUsersController.php
│   │   │   │   ├── Auth/
│   │   │   │   │   └── LoginController.php
│   │   │   │   ├── BusinessRequestsController.php
│   │   │   │   ├── ContactsController.php
│   │   │   │   ├── DashboardController.php
│   │   │   │   ├── NewslettersController.php
│   │   │   │   ├── PetProBusinessController.php
│   │   │   │   ├── PetProCategoriesController.php
│   │   │   │   ├── PetProDealsController.php
│   │   │   │   ├── PetProEventsController.php
│   │   │   │   ├── PetProGalleriesController.php
│   │   │   │   ├── PetProsController.php
│   │   │   │   ├── PetProsRequestController.php
│   │   │   │   ├── PetTypeController.php
│   │   │   │   ├── ProductReviewCategoriesController.php
│   │   │   │   ├── ProductReviewController.php
│   │   │   │   ├── ProductReviewDealsController.php
│   │   │   │   ├── TestimonialController.php
│   │   │   │   ├── UsersController.php
│   │   │   │   ├── WatchAndLearnAuthorController.php
│   │   │   │   ├── WatchAndLearnCategoriesController.php
│   │   │   │   ├── WatchAndLearnController.php
│   │   │   │   └── WatchAndLearnMediaController.php
│   │   │   ├── Api/
│   │   │   │   └── V1/
│   │   │   │       ├── Auth/
│   │   │   │       │   ├── ForgotPasswordController.php
│   │   │   │       │   ├── LoginController.php
│   │   │   │       │   ├── RegisterController.php
│   │   │   │       │   ├── ResetPasswordController.php
│   │   │   │       │   ├── SocialLoginController.php
│   │   │   │       │   ├── SocialSignUpController.php
│   │   │   │       │   └── VerificationController.php
│   │   │   │       ├── BusinessRequestController.php
│   │   │   │       ├── ContactController.php
│   │   │   │       ├── HomeController.php
│   │   │   │       ├── NewsletterController.php
│   │   │   │       ├── PetProController.php
│   │   │   │       ├── ProductReviewController.php
│   │   │   │       ├── UsersController.php
│   │   │   │       └── WatchAndLearnController.php
│   │   │   ├── Auth/
│   │   │   │   ├── ConfirmPasswordController.php
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── RegisterController.php
│   │   │   │   ├── ResetPasswordController.php
│   │   │   │   └── VerificationController.php
│   │   │   ├── Controller.php
│   │   │   └── HomeController.php
│   │   ├── HubspotHelpers.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── AdminAuth.php
│   │   │   ├── Authenticate.php
│   │   │   ├── CheckForMaintenanceMode.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── SetAuthProviderUser.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── TrustProxies.php
│   │   │   ├── VerifyCsrfToken.php
│   │   │   └── VerifyJWTToken.php
│   │   ├── Requests/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminUsersRequest.php
│   │   │   │   ├── PetProBusinessRequest.php
│   │   │   │   ├── PetProCategoriesRequest.php
│   │   │   │   ├── PetProDealRequest.php
│   │   │   │   ├── PetProEventRequest.php
│   │   │   │   ├── PetProGalleryRequest.php
│   │   │   │   ├── PetProRequest.php
│   │   │   │   ├── PetTypeRequest.php
│   │   │   │   ├── TestimonialRequest.php
│   │   │   │   ├── WatchAndLearnAuthorRequest.php
│   │   │   │   ├── WatchAndLearnCategoriesRequest.php
│   │   │   │   ├── WatchAndLearnDealRequest.php
│   │   │   │   └── WatchAndLearnRequest.php
│   │   │   └── User/
│   │   │       └── UserPetProRequest.php
│   │   └── WagEnabledHelpers.php
│   ├── Imports/
│   │   └── BreedsImport.php
│   ├── Library/
│   │   └── GoogleMapHelper.php
│   ├── Mail/
│   │   ├── SendBusinessRequestMail.php
│   │   ├── SendCommentNotificaitonMail.php
│   │   ├── SendContactMail.php
│   │   └── UerPasswordResetMail.php
│   ├── Models/
│   │   ├── AdminUser.php
│   │   ├── Breed.php
│   │   ├── BusinessNature.php
│   │   ├── BusinessRequest.php
│   │   ├── City.php
│   │   ├── Contact.php
│   │   ├── Country.php
│   │   ├── Newsletter.php
│   │   ├── PasswordReset.php
│   │   ├── PetPro.php
│   │   ├── PetProCategory.php
│   │   ├── PetProDeal.php
│   │   ├── PetProDealClaim.php
│   │   ├── PetProEvent.php
│   │   ├── PetProGallery.php
│   │   ├── PetProReview.php
│   │   ├── PetProSelectedBusinessNature.php
│   │   ├── PetProSelectedCategory.php
│   │   ├── PetProServicesOffered.php
│   │   ├── PetProTimetable.php
│   │   ├── PetProsSelectedPetType.php
│   │   ├── PetType.php
│   │   ├── State.php
│   │   ├── Testimonial.php
│   │   ├── User.php
│   │   ├── UserLovedPetPro.php
│   │   ├── UserPet.php
│   │   ├── UserSavedVideo.php
│   │   ├── UsersPetBreed.php
│   │   ├── WatchAndLearn.php
│   │   ├── WatchAndLearnAuthor.php
│   │   ├── WatchAndLearnCategory.php
│   │   ├── WatchAndLearnComment.php
│   │   ├── WatchAndLearnDeal.php
│   │   ├── WatchAndLearnDealClaim.php
│   │   ├── WatchAndLearnMedias.php
│   │   └── WatchAndLearnSelectedCategory.php
│   ├── Observers/
│   │   ├── PetProObserver.php
│   │   ├── ProductReviewObserver.php
│   │   └── WatchAndLearnObserver.php
│   └── Providers/
│       ├── AppServiceProvider.php
│       ├── AuthServiceProvider.php
│       ├── BroadcastServiceProvider.php
│       ├── EventServiceProvider.php
│       └── RouteServiceProvider.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── api.php
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── jwt.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   ├── view.php
│   └── wagenabled.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2020_04_23_050448_create_admin_users_table.php
│   │   ├── 2020_04_25_052414_create_breeds_table.php
│   │   ├── 2020_04_25_063535_create_user_pets_table.php
│   │   ├── 2020_04_25_083408_create_contacts_table.php
│   │   ├── 2020_04_25_090404_create_business_requests_table.php
│   │   ├── 2020_04_25_092709_create_newsletters_table.php
│   │   ├── 2020_04_25_094050_create_watch_and_learn_categories_table.php
│   │   ├── 2020_04_25_104210_create_watch_and_learn_authors_table.php
│   │   ├── 2020_04_25_104211_create_watch_and_learn_table.php
│   │   ├── 2020_04_27_064153_create_watch_and_learn_comments_table.php
│   │   ├── 2020_04_27_070449_create_user_saved_videos_table.php
│   │   ├── 2020_04_27_093324_create_countries_table.php
│   │   ├── 2020_04_27_093329_create_states_table.php
│   │   ├── 2020_04_27_093333_create_cities_table.php
│   │   ├── 2020_04_27_093334_create_pet_pro_categories_table.php
│   │   ├── 2020_04_27_093335_create_pet_pros_table.php
│   │   ├── 2020_04_27_122139_create_pet_pro_timetables_table.php
│   │   ├── 2020_04_28_103645_create_user_loved_pet_pros_table.php
│   │   ├── 2020_04_28_103815_create_pet_pro_reviews_table.php
│   │   ├── 2020_04_28_103821_create_pet_pro_galleries_table.php
│   │   ├── 2020_04_28_103827_create_pet_pro_deals_table.php
│   │   ├── 2020_04_28_103833_create_pet_pro_deal_claims_table.php
│   │   ├── 2020_04_28_103839_create_pet_pro_events_table.php
│   │   ├── 2020_05_25_094716_create_users_pet_breed_table.php
│   │   ├── 2020_06_08_114705_create_watch_and_learn_medias_table.php
│   │   ├── 2020_06_30_055558_add_extra_fields_to_newsletters_table.php
│   │   ├── 2020_07_03_051223_add_status_to_watch_and_learn_table.php
│   │   ├── 2020_07_03_062408_alter_table_watch_and_learn_change_blog_meta_description.php
│   │   ├── 2020_07_11_100910_create_testimonials_table.php
│   │   ├── 2020_07_13_064659_add_is_valid_column_in_cities_table.php
│   │   ├── 2020_07_13_085917_create_pet_pro_selected_categories.php
│   │   ├── 2020_07_17_064151_add_website_url_to_pet_pros_table.php
│   │   ├── 2020_07_22_115515_add_is_cropped_image_to_pet_pro_galleries_table.php
│   │   ├── 2020_07_23_052716_create_pet_pro_services_offered_table.php
│   │   ├── 2020_07_30_054457_add_descriptionto_pet_pro_events_table.php
│   │   ├── 2020_08_04_043353_add_event_end_date_to_pet_pro_events_table.php
│   │   ├── 2020_08_05_043704_add_vet_place_name_to_users_table.php
│   │   ├── 2020_08_22_042827_change_total_rated_column_type.php
│   │   ├── 2020_09_14_042049_create_watch_and_learn_deals_table.php
│   │   ├── 2020_09_14_042054_create_watch_and_learn_deal_claims_table.php
│   │   ├── 2020_09_14_052137_add_parent_id_to_watch_and_learn_categories_table.php
│   │   ├── 2020_10_01_050437_add_short_name_column_to_states_table.php
│   │   ├── 2021_01_13_155451_create_pet_country_state_city_table.php
│   │   ├── 2021_01_26_191038_create_business_natures_table.php
│   │   ├── 2021_01_26_191322_create_pet_pro_selected_business_natures_table.php
│   │   ├── 2021_02_02_074857_create_watch_and_learn_selected_categories_table.php
│   │   ├── 2021_02_18_080850_add_column_user_to_table_pet_pros.php
│   │   ├── 2021_03_02_065300_add_column_new_detail_to_table_pet_pros.php
│   │   ├── 2021_06_01_080340_create_pet_types_table.php
│   │   ├── 2021_06_01_081012_create_pet_pros_selected_pet_types_table.php
│   │   ├── 2021_08_06_095431_add_column_adoption_date_in_user_pets_table.php
│   │   └── 2021_08_06_095832_add_column_address_in_users_table.php
│   └── seeds/
│       ├── CitiesTableSeeder.php
│       ├── CountriesTableSeeder.php
│       ├── DatabaseSeeder.php
│       └── StatesTableSeeder.php
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── admin-theme/
│   │   ├── css/
│   │   │   ├── admin-style.css
│   │   │   ├── classic.css
│   │   │   └── grapes-builder.css
│   │   ├── fonts/
│   │   │   └── stylesheet.css
│   │   └── js/
│   │       ├── app.js
│   │       └── settings.js
│   ├── bd_data/
│   │   ├── cities.sql
│   │   ├── countries.sql
│   │   └── states.sql
│   ├── breeds/
│   │   └── breeds.csv
│   ├── css/
│   │   └── app.css
│   ├── images/
│   │   └── favicons/
│   │       ├── browserconfig.xml
│   │       └── manifest.json
│   ├── index.php
│   ├── js/
│   │   └── app.js
│   ├── mix-manifest.json
│   ├── plugins/
│   │   ├── bootstrap-datepicker/
│   │   │   ├── css/
│   │   │   │   ├── bootstrap-datepicker.css
│   │   │   │   ├── bootstrap-datepicker.standalone.css
│   │   │   │   ├── bootstrap-datepicker3.css
│   │   │   │   └── bootstrap-datepicker3.standalone.css
│   │   │   └── js/
│   │   │       └── bootstrap-datepicker.js
│   │   ├── croppie/
│   │   │   └── croppie.js
│   │   ├── daterangepicker/
│   │   │   └── daterangepicker.css
│   │   ├── font-awesome/
│   │   │   └── css/
│   │   │       └── font-awesome.css
│   │   ├── iCheck/
│   │   │   └── custom.css
│   │   ├── jquery-validate/
│   │   │   └── jquery.form.js
│   │   ├── media/
│   │   │   ├── media.css
│   │   │   └── media.js
│   │   ├── new-croppie/
│   │   │   ├── cropper.css
│   │   │   ├── cropper.js
│   │   │   ├── main-new.js
│   │   │   └── main.js
│   │   └── summernote/
│   │       ├── summernote-bs3.css
│   │       └── summernote.css
│   ├── robots.txt
│   └── vendor/
│       └── content-builder/
│           ├── assets/
│           │   ├── emailsnippets/
│           │   │   ├── content.css
│           │   │   └── snippets.html
│           │   ├── frameworks/
│           │   │   └── foundation-emails/
│           │   │       ├── css/
│           │   │       │   ├── app.css
│           │   │       │   ├── foundation-emails.css
│           │   │       │   └── foundation.css
│           │   │       └── index.html
│           │   ├── icons/
│           │   │   ├── LICENSE.txt
│           │   │   ├── README.txt
│           │   │   ├── config.json
│           │   │   ├── css/
│           │   │   │   ├── animation.css
│           │   │   │   ├── fontello-codes.css
│           │   │   │   ├── fontello-embedded.css
│           │   │   │   ├── fontello-ie7-codes.css
│           │   │   │   ├── fontello-ie7.css
│           │   │   │   └── fontello.css
│           │   │   └── demo.html
│           │   ├── ionicons/
│           │   │   ├── LICENSE
│           │   │   ├── css/
│           │   │   │   └── ionicons.css
│           │   │   ├── selecticon-dark.html
│           │   │   └── selecticon.html
│           │   ├── minimalist-basic/
│           │   │   ├── content-bootstrap.css
│           │   │   ├── content-foundation.css
│           │   │   ├── content-material.css
│           │   │   ├── content-uikit.css
│           │   │   ├── content.css
│           │   │   ├── snippets-bootstrap.html
│           │   │   ├── snippets-bootstrap.php
│           │   │   ├── snippets-foundation.html
│           │   │   ├── snippets-material.html
│           │   │   ├── snippets-uikit.html
│           │   │   ├── snippets.html
│           │   │   └── thumbnails/
│           │   │       ├── index-C=D_O=A.html
│           │   │       ├── index-C=D_O=D.html
│           │   │       ├── index-C=M_O=A.html
│           │   │       ├── index-C=M_O=D.html
│           │   │       ├── index-C=N_O=A.html
│           │   │       ├── index-C=N_O=D.html
│           │   │       ├── index-C=S_O=A.html
│           │   │       ├── index-C=S_O=D.html
│           │   │       └── index.html
│           │   ├── modules/
│           │   │   └── slider.html
│           │   ├── scripts/
│           │   │   ├── simplelightbox/
│           │   │   │   ├── simple-lightbox.js
│           │   │   │   └── simplelightbox.css
│           │   │   └── slick/
│           │   │       ├── slick-theme.css
│           │   │       ├── slick.css
│           │   │       └── slick.js
│           │   └── simple/
│           │       ├── content.css
│           │       └── snippets.html
│           ├── contentbuilder/
│           │   ├── blank.html
│           │   ├── codemirror/
│           │   │   ├── LICENSE
│           │   │   ├── lib/
│           │   │   │   ├── codemirror.css
│           │   │   │   └── codemirror.js
│           │   │   └── mode/
│           │   │       ├── css/
│           │   │       │   ├── css.js
│           │   │       │   ├── index.html
│           │   │       │   ├── less.html
│           │   │       │   └── scss.html
│           │   │       ├── javascript/
│           │   │       │   ├── index.html
│           │   │       │   ├── javascript.js
│           │   │       │   ├── json-ld.html
│           │   │       │   └── typescript.html
│           │   │       └── xml/
│           │   │           ├── index.html
│           │   │           └── xml.js
│           │   ├── contentbuilder-src.js
│           │   ├── contentbuilder.css
│           │   ├── contentbuilder.js
│           │   ├── fonts.html
│           │   ├── fontsize.html
│           │   ├── headings.html
│           │   ├── icons/
│           │   │   ├── LICENSE.txt
│           │   │   ├── README.txt
│           │   │   ├── config.json
│           │   │   ├── css/
│           │   │   │   ├── animation.css
│           │   │   │   ├── fontello-codes.css
│           │   │   │   ├── fontello-embedded.css
│           │   │   │   └── fontello.css
│           │   │   └── demo.html
│           │   ├── new-contentbuilder.css
│           │   └── saveimages.js
│           ├── custom_example1.html
│           ├── example-email.html
│           ├── example1-bootstrap.html
│           ├── example1-foundation.html
│           ├── example1.html
│           ├── example2-bootstrap.aspx
│           ├── example2-bootstrap.php.html
│           ├── example2.aspx
│           ├── example2.html
│           ├── example2.php.html
│           ├── example3-bootstrap.aspx
│           ├── example3-bootstrap.php.html
│           ├── example3.aspx
│           ├── example3.php.html
│           ├── example4.html
│           ├── example5.html
│           ├── example6-lightbox.aspx
│           ├── example6-lightbox.php.html
│           ├── example7.html
│           ├── files.html
│           ├── images.html
│           ├── license.txt
│           ├── readme.txt
│           ├── saveimage-large.ashx
│           ├── saveimage-large.php.html
│           ├── saveimage-module.ashx
│           ├── saveimage-module.php.html
│           ├── saveimage.ashx
│           ├── saveimage.php.html
│           └── whatsnew.txt
├── resources/
│   ├── js/
│   │   ├── app.js
│   │   ├── bootstrap.js
│   │   └── components/
│   │       └── Example.js
│   ├── lang/
│   │   └── en/
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php
│   ├── sass/
│   │   ├── _variables.scss
│   │   └── app.scss
│   └── views/
│       ├── admin/
│       │   ├── auth/
│       │   │   └── login.blade.php
│       │   ├── includes/
│       │   │   ├── custom.blade.php
│       │   │   ├── footer.blade.php
│       │   │   ├── sidebar.blade.php
│       │   │   └── topbar.blade.php
│       │   ├── layouts/
│       │   │   ├── admin.blade.php
│       │   │   └── app.blade.php
│       │   └── main/
│       │       ├── admin-users/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── business-requests/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── contacts/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── dashboard.blade.php
│       │       ├── general/
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── newsletters/
│       │       │   └── index.blade.php
│       │       ├── pet-pro-business/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── pet-pro-categories/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── pet-pro-deals/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── pet-pro-events/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── pet-pro-gallery/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── pet-pro-request/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── pet-pros/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   ├── edit.blade.php
│       │       │   └── index.blade.php
│       │       ├── pet-type/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── product-review-categories/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── product-review-deals/
│       │       │   ├── _form.blade.php
│       │       │   ├── create.blade.php
│       │       │   └── edit.blade.php
│       │       ├── product-reviews/
│       │       │   ├── _form.blade.php
│       │       │   ├── content-builder.blade.php
│       │       │   ├── create.blade.php
│       │       │   ├── edit.blade.php
│       │       │   ├── index.blade.php
│       │       │   ├── old_content-builder.blade.php
│       │       │   └── show.blade.php
│       │       ├── testimonials/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── users/
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── watch-and-learn/
│       │       │   ├── _form.blade.php
│       │       │   ├── content-builder.blade.php
│       │       │   ├── create.blade.php
│       │       │   ├── edit.blade.php
│       │       │   ├── index.blade.php
│       │       │   └── show.blade.php
│       │       ├── watch-and-learn-author/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       ├── watch-and-learn-categories/
│       │       │   ├── _form.blade.php
│       │       │   └── index.blade.php
│       │       └── watch-and-learn-medias/
│       │           └── index.blade.php
│       └── emails/
│           ├── addSubscriber.blade.php
│           ├── api/
│           │   └── v1/
│           │       ├── auth/
│           │       │   └── passwordReset.blade.php
│           │       ├── businessRequest/
│           │       │   └── sendBusinessRequestEmail.blade.php
│           │       ├── contact/
│           │       │   └── sendContactEmail.blade.php
│           │       └── watchAndLearnComment/
│           │           └── sendWatchAndLearnCommentNotificationEmail.blade.php
│           └── contactForm.blade.php
├── routes/
│   ├── admin.php
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── server.php
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   ├── CreatesApplication.php
│   ├── Feature/
│   │   └── ExampleTest.php
│   ├── TestCase.php
│   └── Unit/
│       └── ExampleTest.php
└── webpack.mix.js
Copy disabled (too large) Download .json
Condensed preview — 463 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (26,504K chars).
[
  {
    "path": ".gitignore",
    "chars": 338,
    "preview": "/vendor/\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# Laravel 4 specific\nbootstrap/compiled.php\napp/storage/\n\n# Laravel"
  },
  {
    "path": "README.md",
    "chars": 2515,
    "preview": "# Laravel Project\n\nThis Laravel Project is a business website built with Laravel and React, featuring a variety of modul"
  },
  {
    "path": "app/Console/Commands/BreedsImportCommand.php",
    "chars": 457,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Imports\\BreedsImport;\nuse Illuminate\\Console\\Command;\nuse Excel;\n\nclass "
  },
  {
    "path": "app/Console/Commands/ScriptCompressExistingImages.php",
    "chars": 5318,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facade"
  },
  {
    "path": "app/Console/Commands/ScriptCompressExistingMediaImages.php",
    "chars": 4974,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facade"
  },
  {
    "path": "app/Console/Commands/ScriptCompressExistingPetProImages.php",
    "chars": 5740,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facade"
  },
  {
    "path": "app/Console/Commands/ScriptCompressExistingThumbOrImages.php",
    "chars": 6265,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facade"
  },
  {
    "path": "app/Console/Commands/ScriptCreatePetProSmallThumbImages.php",
    "chars": 4545,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facade"
  },
  {
    "path": "app/Console/Commands/StateShortcodeScript.php",
    "chars": 3261,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse App\\Models\\State;\n\nclass StateShortcodeScrip"
  },
  {
    "path": "app/Console/Commands/UpdateValidCitiesFlagCommand.php",
    "chars": 634,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse App\\Models\\City;\n\nclass UpdateValidCitiesFla"
  },
  {
    "path": "app/Console/Commands/addExistingPetProCategoriesCommand.php",
    "chars": 788,
    "preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse App\\Models\\PetPro;\nuse App\\Models\\PetProSele"
  },
  {
    "path": "app/Console/Kernel.php",
    "chars": 827,
    "preview": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as C"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "chars": 1141,
    "preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\nuse Throwable;\n\nclas"
  },
  {
    "path": "app/Http/Controllers/Admin/AdminUsersController.php",
    "chars": 4214,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\AdminUser"
  },
  {
    "path": "app/Http/Controllers/Admin/Auth/LoginController.php",
    "chars": 2082,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\A"
  },
  {
    "path": "app/Http/Controllers/Admin/BusinessRequestsController.php",
    "chars": 2686,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\BusinessRequest;\nuse I"
  },
  {
    "path": "app/Http/Controllers/Admin/ContactsController.php",
    "chars": 2041,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Contact;\nuse Illuminat"
  },
  {
    "path": "app/Http/Controllers/Admin/DashboardController.php",
    "chars": 3392,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;\nuse A"
  },
  {
    "path": "app/Http/Controllers/Admin/NewslettersController.php",
    "chars": 2123,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\Newsletter;\nuse Illumi"
  },
  {
    "path": "app/Http/Controllers/Admin/PetProBusinessController.php",
    "chars": 4438,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\PetProBus"
  },
  {
    "path": "app/Http/Controllers/Admin/PetProCategoriesController.php",
    "chars": 4287,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\PetProCat"
  },
  {
    "path": "app/Http/Controllers/Admin/PetProDealsController.php",
    "chars": 6286,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\PetProDea"
  },
  {
    "path": "app/Http/Controllers/Admin/PetProEventsController.php",
    "chars": 7368,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\PetProEve"
  },
  {
    "path": "app/Http/Controllers/Admin/PetProGalleriesController.php",
    "chars": 8699,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\PetProGal"
  },
  {
    "path": "app/Http/Controllers/Admin/PetProsController.php",
    "chars": 33070,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\PetProReq"
  },
  {
    "path": "app/Http/Controllers/Admin/PetProsRequestController.php",
    "chars": 4156,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;\nuse A"
  },
  {
    "path": "app/Http/Controllers/Admin/PetTypeController.php",
    "chars": 4238,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\PetTypeRe"
  },
  {
    "path": "app/Http/Controllers/Admin/ProductReviewCategoriesController.php",
    "chars": 4605,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\WatchAndL"
  },
  {
    "path": "app/Http/Controllers/Admin/ProductReviewController.php",
    "chars": 19113,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\WatchAndL"
  },
  {
    "path": "app/Http/Controllers/Admin/ProductReviewDealsController.php",
    "chars": 6725,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\WatchAndL"
  },
  {
    "path": "app/Http/Controllers/Admin/TestimonialController.php",
    "chars": 6101,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\nuse App\\"
  },
  {
    "path": "app/Http/Controllers/Admin/UsersController.php",
    "chars": 2672,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse Illuminate\\H"
  },
  {
    "path": "app/Http/Controllers/Admin/WatchAndLearnAuthorController.php",
    "chars": 5438,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\WatchAndL"
  },
  {
    "path": "app/Http/Controllers/Admin/WatchAndLearnCategoriesController.php",
    "chars": 4643,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\WatchAndL"
  },
  {
    "path": "app/Http/Controllers/Admin/WatchAndLearnController.php",
    "chars": 21534,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\WatchAndL"
  },
  {
    "path": "app/Http/Controllers/Admin/WatchAndLearnMediaController.php",
    "chars": 8004,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Admin\\WatchAndL"
  },
  {
    "path": "app/Http/Controllers/Api/V1/Auth/ForgotPasswordController.php",
    "chars": 3659,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;"
  },
  {
    "path": "app/Http/Controllers/Api/V1/Auth/LoginController.php",
    "chars": 2556,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;"
  },
  {
    "path": "app/Http/Controllers/Api/V1/Auth/RegisterController.php",
    "chars": 2223,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\HubspotHelpers;\nus"
  },
  {
    "path": "app/Http/Controllers/Api/V1/Auth/ResetPasswordController.php",
    "chars": 2442,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;"
  },
  {
    "path": "app/Http/Controllers/Api/V1/Auth/SocialLoginController.php",
    "chars": 3555,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;"
  },
  {
    "path": "app/Http/Controllers/Api/V1/Auth/SocialSignUpController.php",
    "chars": 3028,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\HubspotHelpers;\nus"
  },
  {
    "path": "app/Http/Controllers/Api/V1/Auth/VerificationController.php",
    "chars": 1078,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\"
  },
  {
    "path": "app/Http/Controllers/Api/V1/BusinessRequestController.php",
    "chars": 1948,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;\nuse "
  },
  {
    "path": "app/Http/Controllers/Api/V1/ContactController.php",
    "chars": 1598,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;\nuse "
  },
  {
    "path": "app/Http/Controllers/Api/V1/HomeController.php",
    "chars": 2262,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;\nuse "
  },
  {
    "path": "app/Http/Controllers/Api/V1/NewsletterController.php",
    "chars": 2750,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\HubspotHelpers;\nuse App"
  },
  {
    "path": "app/Http/Controllers/Api/V1/PetProController.php",
    "chars": 50139,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\User\\UserPetPr"
  },
  {
    "path": "app/Http/Controllers/Api/V1/ProductReviewController.php",
    "chars": 7775,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;\nuse "
  },
  {
    "path": "app/Http/Controllers/Api/V1/UsersController.php",
    "chars": 23511,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\HubspotHelpers;\nuse App"
  },
  {
    "path": "app/Http/Controllers/Api/V1/WatchAndLearnController.php",
    "chars": 17253,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\WagEnabledHelpers;\nuse "
  },
  {
    "path": "app/Http/Controllers/Auth/ConfirmPasswordController.php",
    "chars": 1024,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
    "chars": 667,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\SendsPa"
  },
  {
    "path": "app/Http/Controllers/Auth/LoginController.php",
    "chars": 1002,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "chars": 1957,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/ResetPasswordController.php",
    "chars": 844,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/VerificationController.php",
    "chars": 1130,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "chars": 361,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundat"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "chars": 467,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass HomeController extends Controller\n{\n    /**\n"
  },
  {
    "path": "app/Http/HubspotHelpers.php",
    "chars": 1862,
    "preview": "<?php\nnamespace App\\Http;\n\nuse Request;\nuse Response;\n\nclass HubspotHelpers\n{   \n    public static function storeForm($p"
  },
  {
    "path": "app/Http/Kernel.php",
    "chars": 2671,
    "preview": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    "
  },
  {
    "path": "app/Http/Middleware/AdminAuth.php",
    "chars": 533,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\n\nclass AdminAuth\n{\n    /**\n     * Handle an incoming request.\n     *"
  },
  {
    "path": "app/Http/Middleware/Authenticate.php",
    "chars": 469,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Auth\\Middleware\\Authenticate as Middleware;\n\nclass Authenticate ex"
  },
  {
    "path": "app/Http/Middleware/CheckForMaintenanceMode.php",
    "chars": 335,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode as Middleware;\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "chars": 294,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCook"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "chars": 582,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Providers\\RouteServiceProvider;\nuse Closure;\nuse Illuminate\\Support\\Facad"
  },
  {
    "path": "app/Http/Middleware/SetAuthProviderUser.php",
    "chars": 616,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\nuse Config;\nuse Closure;\n\nclass SetAuthProviderUser\n{\n    /**\n     * Handle an inc"
  },
  {
    "path": "app/Http/Middleware/TrimStrings.php",
    "chars": 340,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimS"
  },
  {
    "path": "app/Http/Middleware/TrustProxies.php",
    "chars": 436,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Fideloper\\Proxy\\TrustProxies as Middleware;\nuse Illuminate\\Http\\Request;\n\ncla"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "chars": 312,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass V"
  },
  {
    "path": "app/Http/Middleware/VerifyJWTToken.php",
    "chars": 1338,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\nuse Tymon\\JWTAuth\\Exceptions\\JWTException;\nuse Tymon\\JWTAuth\\Exceptions\\TokenExpir"
  },
  {
    "path": "app/Http/Requests/Admin/AdminUsersRequest.php",
    "chars": 1063,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/PetProBusinessRequest.php",
    "chars": 613,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/PetProCategoriesRequest.php",
    "chars": 725,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/PetProDealRequest.php",
    "chars": 867,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/PetProEventRequest.php",
    "chars": 1046,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/PetProGalleryRequest.php",
    "chars": 870,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/PetProRequest.php",
    "chars": 1254,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/PetTypeRequest.php",
    "chars": 606,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/TestimonialRequest.php",
    "chars": 909,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/WatchAndLearnAuthorRequest.php",
    "chars": 1024,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/WatchAndLearnCategoriesRequest.php",
    "chars": 748,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/WatchAndLearnDealRequest.php",
    "chars": 874,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/Admin/WatchAndLearnRequest.php",
    "chars": 1481,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\n"
  },
  {
    "path": "app/Http/Requests/User/UserPetProRequest.php",
    "chars": 1249,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\User;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nc"
  },
  {
    "path": "app/Http/WagEnabledHelpers.php",
    "chars": 15581,
    "preview": "<?php\nnamespace App\\Http;\n\nuse Carbon\\Carbon;\nuse Config;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support"
  },
  {
    "path": "app/Imports/BreedsImport.php",
    "chars": 492,
    "preview": "<?php\n\nnamespace App\\Imports;\n\nuse App\\Models\\Breed;\nuse Illuminate\\Validation\\Rule;\nuse Maatwebsite\\Excel\\Concerns\\ToMo"
  },
  {
    "path": "app/Library/GoogleMapHelper.php",
    "chars": 5665,
    "preview": "<?php\n\nnamespace App\\Library;\n\nuse Illuminate\\Http\\Request;\nuse Carbon\\Carbon;\nuse DB;\nuse Response;\nuse Storage;\nuse Ap"
  },
  {
    "path": "app/Mail/SendBusinessRequestMail.php",
    "chars": 1208,
    "preview": "<?php\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesM"
  },
  {
    "path": "app/Mail/SendCommentNotificaitonMail.php",
    "chars": 1223,
    "preview": "<?php\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesM"
  },
  {
    "path": "app/Mail/SendContactMail.php",
    "chars": 1057,
    "preview": "<?php\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesM"
  },
  {
    "path": "app/Mail/UerPasswordResetMail.php",
    "chars": 1135,
    "preview": "<?php\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesM"
  },
  {
    "path": "app/Models/AdminUser.php",
    "chars": 559,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\n\nclass AdminUse"
  },
  {
    "path": "app/Models/Breed.php",
    "chars": 303,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Breed extends Model\n{\n\tprotected $table = \""
  },
  {
    "path": "app/Models/BusinessNature.php",
    "chars": 705,
    "preview": "<?php\n\nnamespace App\\Models;\n\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloque"
  },
  {
    "path": "app/Models/BusinessRequest.php",
    "chars": 498,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass BusinessRequest extends "
  },
  {
    "path": "app/Models/City.php",
    "chars": 849,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass City extends Model\n{\n    protected $table ="
  },
  {
    "path": "app/Models/Contact.php",
    "chars": 490,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Contact extends Model\n{\n"
  },
  {
    "path": "app/Models/Country.php",
    "chars": 846,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Country extends Model\n{\n    protected $tabl"
  },
  {
    "path": "app/Models/Newsletter.php",
    "chars": 492,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Newsletter extends Model"
  },
  {
    "path": "app/Models/PasswordReset.php",
    "chars": 169,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PasswordReset extends Model\n{\n    protected"
  },
  {
    "path": "app/Models/PetPro.php",
    "chars": 3996,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Http\\WagEnabledHelpers;\nuse App\\Models\\PetProTimetable;\nuse App\\Observers\\PetProOb"
  },
  {
    "path": "app/Models/PetProCategory.php",
    "chars": 694,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquen"
  },
  {
    "path": "app/Models/PetProDeal.php",
    "chars": 2231,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\PetProDealClaim;\nuse Auth;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloqu"
  },
  {
    "path": "app/Models/PetProDealClaim.php",
    "chars": 172,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PetProDealClaim extends Model\n{\n    protect"
  },
  {
    "path": "app/Models/PetProEvent.php",
    "chars": 3118,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquen"
  },
  {
    "path": "app/Models/PetProGallery.php",
    "chars": 1703,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass Pet"
  },
  {
    "path": "app/Models/PetProReview.php",
    "chars": 689,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PetProReview extends Mod"
  },
  {
    "path": "app/Models/PetProSelectedBusinessNature.php",
    "chars": 406,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PetProSelectedBusinessNature extends Model\n"
  },
  {
    "path": "app/Models/PetProSelectedCategory.php",
    "chars": 385,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PetProSelectedCategory e"
  },
  {
    "path": "app/Models/PetProServicesOffered.php",
    "chars": 355,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PetProServicesOffered ex"
  },
  {
    "path": "app/Models/PetProTimetable.php",
    "chars": 308,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PetProTimetable extends Model\n{\n\tprotected "
  },
  {
    "path": "app/Models/PetProsSelectedPetType.php",
    "chars": 393,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PetProsSelectedPetType extends Model\n{\n    "
  },
  {
    "path": "app/Models/PetType.php",
    "chars": 687,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquen"
  },
  {
    "path": "app/Models/State.php",
    "chars": 942,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass State extends Model\n{\n    protected $table "
  },
  {
    "path": "app/Models/Testimonial.php",
    "chars": 1644,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Http\\WagEnabledHelpers;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;"
  },
  {
    "path": "app/Models/User.php",
    "chars": 3396,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Http\\WagEnabledHelpers;\nuse Carbon\\Carbon;\nuse Illuminate\\Contracts\\Auth\\MustVerif"
  },
  {
    "path": "app/Models/UserLovedPetPro.php",
    "chars": 386,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n"
  },
  {
    "path": "app/Models/UserPet.php",
    "chars": 1742,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Http\\WagEnabledHelpers;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Sup"
  },
  {
    "path": "app/Models/UserSavedVideo.php",
    "chars": 470,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\nclass UserSavedVideo extends Pivot\n{\n\tp"
  },
  {
    "path": "app/Models/UsersPetBreed.php",
    "chars": 443,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Relations\\Pivot;\n\nclass UsersPetBreed extends Pivot\n{\n\tpr"
  },
  {
    "path": "app/Models/WatchAndLearn.php",
    "chars": 5017,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Http\\WagEnabledHelpers;\nuse App\\Observers\\WatchAndLearnObserver;\nuse Carbon\\Carbon"
  },
  {
    "path": "app/Models/WatchAndLearnAuthor.php",
    "chars": 2164,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Http\\WagEnabledHelpers;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;"
  },
  {
    "path": "app/Models/WatchAndLearnCategory.php",
    "chars": 1666,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquen"
  },
  {
    "path": "app/Models/WatchAndLearnComment.php",
    "chars": 1213,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass WatchAndLearnComment ext"
  },
  {
    "path": "app/Models/WatchAndLearnDeal.php",
    "chars": 2309,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\WatchAndLearnDealClaim;\nuse Auth;\nuse Carbon\\Carbon;\nuse Illuminate\\Databas"
  },
  {
    "path": "app/Models/WatchAndLearnDealClaim.php",
    "chars": 179,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass WatchAndLearnDealClaim extends Model\n{\n    "
  },
  {
    "path": "app/Models/WatchAndLearnMedias.php",
    "chars": 238,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass WatchAndLearnMedias exte"
  },
  {
    "path": "app/Models/WatchAndLearnSelectedCategory.php",
    "chars": 428,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Model;\nclass WatchAndLearnSelectedCate"
  },
  {
    "path": "app/Observers/PetProObserver.php",
    "chars": 1642,
    "preview": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Http\\WagEnabledHelpers;\nuse App\\Models\\PetPro;\n\nclass PetProObserver\n{\n    /**\n"
  },
  {
    "path": "app/Observers/ProductReviewObserver.php",
    "chars": 1725,
    "preview": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Http\\WagEnabledHelpers;\nuse App\\Models\\ProductReview;\n\nclass ProductReviewObser"
  },
  {
    "path": "app/Observers/WatchAndLearnObserver.php",
    "chars": 1725,
    "preview": "<?php\n\nnamespace App\\Observers;\n\nuse App\\Http\\WagEnabledHelpers;\nuse App\\Models\\WatchAndLearn;\n\nclass WatchAndLearnObser"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "chars": 403,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AppServiceProvider extends ServiceProvid"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "chars": 578,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "chars": 380,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclas"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "chars": 710,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Auth\\Listeners\\SendEmailVerificat"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "chars": 1923,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\nus"
  },
  {
    "path": "artisan",
    "chars": 1686,
    "preview": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|-----------------------------------------------"
  },
  {
    "path": "bootstrap/app.php",
    "chars": 1620,
    "preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "chars": 1973,
    "preview": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"The Laravel Framework.\",\n    \"keywords\": [\n "
  },
  {
    "path": "config/api.php",
    "chars": 7348,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Standards "
  },
  {
    "path": "config/app.php",
    "chars": 9435,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Applicatio"
  },
  {
    "path": "config/auth.php",
    "chars": 4015,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "config/broadcasting.php",
    "chars": 1601,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Br"
  },
  {
    "path": "config/cache.php",
    "chars": 3100,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/cors.php",
    "chars": 823,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cross-Orig"
  },
  {
    "path": "config/database.php",
    "chars": 5337,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/filesystems.php",
    "chars": 2740,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Fi"
  },
  {
    "path": "config/hashing.php",
    "chars": 1571,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ha"
  },
  {
    "path": "config/jwt.php",
    "chars": 9976,
    "preview": "<?php\n\n/*\n * This file is part of jwt-auth.\n *\n * (c) Sean Tymon <tymon148@gmail.com>\n *\n * For the full copyright and l"
  },
  {
    "path": "config/logging.php",
    "chars": 2896,
    "preview": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn"
  },
  {
    "path": "config/mail.php",
    "chars": 3339,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ma"
  },
  {
    "path": "config/queue.php",
    "chars": 2760,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Qu"
  },
  {
    "path": "config/services.php",
    "chars": 950,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Part"
  },
  {
    "path": "config/session.php",
    "chars": 6972,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/view.php",
    "chars": 1053,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Stora"
  },
  {
    "path": "config/wagenabled.php",
    "chars": 3211,
    "preview": "<?php\n\n$uploadsUrlPath = 'uploads/';\n$uploadsDocPath = \"/uploads/\";\n\nreturn [\n    \"app_url\" => env('APP_URL'),\n    \"app_"
  },
  {
    "path": "database/.gitignore",
    "chars": 26,
    "preview": "*.sqlite\n*.sqlite-journal\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "chars": 883,
    "preview": "<?php\n\n/** @var \\Illuminate\\Database\\Eloquent\\Factory $factory */\n\nuse App\\Models\\User;\nuse Faker\\Generator as Faker;\nus"
  },
  {
    "path": "database/migrations/2014_10_12_000000_create_users_table.php",
    "chars": 1519,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "chars": 686,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2019_08_19_000000_create_failed_jobs_table.php",
    "chars": 774,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_23_050448_create_admin_users_table.php",
    "chars": 1067,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_052414_create_breeds_table.php",
    "chars": 625,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_063535_create_user_pets_table.php",
    "chars": 829,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_083408_create_contacts_table.php",
    "chars": 729,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_090404_create_business_requests_table.php",
    "chars": 889,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_092709_create_newsletters_table.php",
    "chars": 651,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_094050_create_watch_and_learn_categories_table.php",
    "chars": 717,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_104210_create_watch_and_learn_authors_table.php",
    "chars": 867,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_25_104211_create_watch_and_learn_table.php",
    "chars": 1537,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_064153_create_watch_and_learn_comments_table.php",
    "chars": 1137,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_070449_create_user_saved_videos_table.php",
    "chars": 909,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_093324_create_countries_table.php",
    "chars": 749,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_093329_create_states_table.php",
    "chars": 681,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_093333_create_cities_table.php",
    "chars": 895,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_093334_create_pet_pro_categories_table.php",
    "chars": 694,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_093335_create_pet_pros_table.php",
    "chars": 1831,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_27_122139_create_pet_pro_timetables_table.php",
    "chars": 894,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_28_103645_create_user_loved_pet_pros_table.php",
    "chars": 891,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_28_103815_create_pet_pro_reviews_table.php",
    "chars": 1033,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_28_103821_create_pet_pro_galleries_table.php",
    "chars": 868,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_28_103827_create_pet_pro_deals_table.php",
    "chars": 1052,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_28_103833_create_pet_pro_deal_claims_table.php",
    "chars": 906,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_04_28_103839_create_pet_pro_events_table.php",
    "chars": 1152,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_05_25_094716_create_users_pet_breed_table.php",
    "chars": 890,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_06_08_114705_create_watch_and_learn_medias_table.php",
    "chars": 731,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_06_30_055558_add_extra_fields_to_newsletters_table.php",
    "chars": 806,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_03_051223_add_status_to_watch_and_learn_table.php",
    "chars": 725,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_03_062408_alter_table_watch_and_learn_change_blog_meta_description.php",
    "chars": 748,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_11_100910_create_testimonials_table.php",
    "chars": 783,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_13_064659_add_is_valid_column_in_cities_table.php",
    "chars": 689,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_13_085917_create_pet_pro_selected_categories.php",
    "chars": 877,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_17_064151_add_website_url_to_pet_pros_table.php",
    "chars": 682,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_22_115515_add_is_cropped_image_to_pet_pro_galleries_table.php",
    "chars": 732,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_23_052716_create_pet_pro_services_offered_table.php",
    "chars": 844,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_07_30_054457_add_descriptionto_pet_pro_events_table.php",
    "chars": 697,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_08_04_043353_add_event_end_date_to_pet_pro_events_table.php",
    "chars": 710,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2020_08_05_043704_add_vet_place_name_to_users_table.php",
    "chars": 686,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  }
]

// ... and 263 more files (download for full content)

About this extraction

This page contains the full source code of the izhan47/laravel-showcase GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 463 files (24.5 MB), approximately 6.5M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!