group('general_settings', trans('storefront::storefront.tabs.group.general_settings')) ->active() ->add($this->general()) ->add($this->logo()) ->add($this->menus()) ->add($this->footer()) ->add($this->newsletter()) ->add($this->features()) ->add($this->productPage()) ->add($this->socialLinks()); $this->group('home_page_sections', trans('storefront::storefront.tabs.group.home_page_sections')) ->add($this->sliderBanners()) ->add($this->threeColumnFullWidthBanners()) ->add($this->featuredCategories()) ->add($this->productTabsOne()) ->add($this->topBrands()) ->add($this->flashSaleAndVerticalProducts()) ->add($this->twoColumnBanners()) ->add($this->productGrid()) ->add($this->threeColumnBanners()) ->add($this->productTabsTwo()) ->add($this->oneColumnBanner()); } private function general() { return tap(new Tab('general', trans('storefront::storefront.tabs.general')), function (Tab $tab) { $tab->active(); $tab->weight(5); $tab->fields(['storefront_slider', 'storefront_copyright_text']); $tab->view('admin.storefront.tabs.general', [ 'pages' => $this->getPages(), 'sliders' => $this->getSliders(), ]); }); } private function getPages() { return Page::all()->pluck('name', 'id') ->prepend(trans('storefront::storefront.form.please_select'), ''); } private function getSliders() { return Slider::all()->sortBy('name')->pluck('name', 'id') ->prepend(trans('storefront::storefront.form.please_select'), ''); } private function logo() { return tap(new Tab('logo', trans('storefront::storefront.tabs.logo')), function (Tab $tab) { $tab->weight(10); $tab->view('admin.storefront.tabs.logo', [ 'favicon' => $this->getMedia(setting('storefront_favicon')), 'headerLogo' => $this->getMedia(setting('storefront_header_logo')), 'footerLogo' => $this->getMedia(setting('storefront_footer_logo')), 'mailLogo' => $this->getMedia(setting('storefront_mail_logo')), ]); }); } private function getMedia($fileId) { return Cache::rememberForever(md5("files.{$fileId}"), function () use ($fileId) { return File::findOrNew($fileId); }); } private function menus() { return tap(new Tab('menus', trans('storefront::storefront.tabs.menus')), function (Tab $tab) { $tab->weight(15); $tab->fields([ 'storefront_primary_menu', 'storefront_category_menu', 'storefront_footer_menu', 'storefront_footer_menu_title', ]); $tab->view('admin.storefront.tabs.menus', [ 'menus' => $this->getMenus(), ]); }); } private function getMenus() { return Menu::all()->pluck('name', 'id') ->prepend(trans('storefront::storefront.form.please_select'), ''); } private function footer() { return tap(new Tab('footer', trans('storefront::storefront.tabs.footer')), function (Tab $tab) { $tab->weight(17); $tab->view('admin.storefront.tabs.footer', [ 'tags' => Tag::list(), 'acceptedPaymentMethodsImage' => $this->getMedia(setting('storefront_accepted_payment_methods_image')), ]); }); } private function newsletter() { if (!setting('newsletter_enabled')) { return; } return tap(new Tab('newsletter', trans('storefront::storefront.tabs.newsletter')), function (Tab $tab) { $tab->weight(18); $tab->view('admin.storefront.tabs.newsletter', [ 'newsletterBgImage' => $this->getMedia(setting('storefront_newsletter_bg_image')), ]); }); } private function features() { return tap(new Tab('features', trans('storefront::storefront.tabs.features')), function (Tab $tab) { $tab->weight(20); $tab->view('admin.storefront.tabs.features'); }); } private function productPage() { return tap(new Tab('product_page', trans('storefront::storefront.tabs.product_page')), function (Tab $tab) { $tab->weight(22); $tab->view('admin.storefront.tabs.product_page', [ 'banner' => Banner::getProductPageBanner(), ]); }); } private function socialLinks() { return tap(new Tab('social_links', trans('storefront::storefront.tabs.social_links')), function (Tab $tab) { $tab->weight(25); $tab->fields([ 'storefront_fb_link', 'storefront_twitter_link', 'storefront_instagram_link', 'storefront_linkedin_link', 'storefront_pinterest_link', 'storefront_gplus_link', 'storefront_youtube_link', ]); $tab->view('admin.storefront.tabs.social_links'); }); } private function sliderBanners() { return tap(new Tab('slider_banners', trans('storefront::storefront.tabs.slider_banners')), function (Tab $tab) { $tab->weight(30); $tab->view('admin.storefront.tabs.slider_banners', [ 'banners' => Banner::getSliderBanners(), ]); }); } private function threeColumnFullWidthBanners() { return tap(new Tab('three_column_full_width_banners', trans('storefront::storefront.tabs.three_column_full_width_banners')), function (Tab $tab) { $tab->weight(35); $tab->view('admin.storefront.tabs.three_column_full_width_banners', [ 'banners' => Banner::getThreeColumnFullWidthBanners(), ]); }); } private function featuredCategories() { return tap(new Tab('featured_categories', trans('storefront::storefront.tabs.featured_categories')), function (Tab $tab) { $tab->weight(40); $tab->view('admin.storefront.tabs.featured_categories', [ 'categoryOneProducts' => $this->getProductListFromSetting('storefront_featured_categories_section_category_1_products'), 'categoryTwoProducts' => $this->getProductListFromSetting('storefront_featured_categories_section_category_2_products'), 'categoryThreeProducts' => $this->getProductListFromSetting('storefront_featured_categories_section_category_3_products'), 'categoryFourProducts' => $this->getProductListFromSetting('storefront_featured_categories_section_category_4_products'), 'categoryFiveProducts' => $this->getProductListFromSetting('storefront_featured_categories_section_category_5_products'), 'categorySixProducts' => $this->getProductListFromSetting('storefront_featured_categories_section_category_6_products'), ]); }); } private function getProductListFromSetting($key) { return ProductRepository::list(setting($key, [])); } private function productTabsOne() { return tap(new Tab('product_tabs_one', trans('storefront::storefront.tabs.product_tabs_one')), function (Tab $tab) { $tab->weight(45); $tab->view('admin.storefront.tabs.product_tabs_one', [ 'tabOneProducts' => $this->getProductListFromSetting('storefront_product_tabs_1_section_tab_1_products'), 'tabTwoProducts' => $this->getProductListFromSetting('storefront_product_tabs_1_section_tab_2_products'), 'tabThreeProducts' => $this->getProductListFromSetting('storefront_product_tabs_1_section_tab_3_products'), 'tabFourProducts' => $this->getProductListFromSetting('storefront_product_tabs_1_section_tab_4_products'), ]); }); } private function topBrands() { if (!auth()->user()->hasAccess(['admin.brands.index'])) { return; } return tap(new Tab('top_brands', trans('storefront::storefront.tabs.top_brands')), function (Tab $tab) { $tab->weight(50); $tab->view('admin.storefront.tabs.top_brands', [ 'brands' => Brand::list(), ]); }); } private function flashSaleAndVerticalProducts() { return tap(new Tab('flash_sale_and_vertical_products', trans('storefront::storefront.tabs.flash_sale_and_vertical_products')), function (Tab $tab) { $tab->weight(60); $tab->view('admin.storefront.tabs.flash_sale_and_vertical_products', [ 'flashSales' => $this->getFlashSales(), 'verticalProductsOne' => $this->getProductListFromSetting('storefront_vertical_products_1_products'), 'verticalProductsTwo' => $this->getProductListFromSetting('storefront_vertical_products_2_products'), 'verticalProductsThree' => $this->getProductListFromSetting('storefront_vertical_products_3_products'), ]); }); } private function getFlashSales() { return FlashSale::all()->pluck('campaign_name', 'id') ->prepend(trans('admin::admin.form.please_select'), ''); } private function twoColumnBanners() { return tap(new Tab('two_column_banners', trans('storefront::storefront.tabs.two_column_banners')), function (Tab $tab) { $tab->weight(65); $tab->view('admin.storefront.tabs.two_column_banners', [ 'banners' => Banner::getTwoColumnBanners(), ]); }); } private function productGrid() { return tap(new Tab('product_grid', trans('storefront::storefront.tabs.product_grid')), function (Tab $tab) { $tab->weight(70); $tab->view('admin.storefront.tabs.product_grid', [ 'tabOneProducts' => $this->getProductListFromSetting('storefront_product_grid_section_tab_1_products'), 'tabTwoProducts' => $this->getProductListFromSetting('storefront_product_grid_section_tab_2_products'), 'tabThreeProducts' => $this->getProductListFromSetting('storefront_product_grid_section_tab_3_products'), 'tabFourProducts' => $this->getProductListFromSetting('storefront_product_grid_section_tab_4_products'), ]); }); } private function threeColumnBanners() { return tap(new Tab('three_column_banners', trans('storefront::storefront.tabs.three_column_banners')), function (Tab $tab) { $tab->weight(75); $tab->view('admin.storefront.tabs.three_column_banners', [ 'banners' => Banner::getThreeColumnBanners(), ]); }); } private function productTabsTwo() { return tap(new Tab('product_tabs_two', trans('storefront::storefront.tabs.product_tabs_two')), function (Tab $tab) { $tab->weight(80); $tab->view('admin.storefront.tabs.product_tabs_two', [ 'tabOneProducts' => $this->getProductListFromSetting('storefront_product_tabs_2_section_tab_1_products'), 'tabTwoProducts' => $this->getProductListFromSetting('storefront_product_tabs_2_section_tab_2_products'), 'tabThreeProducts' => $this->getProductListFromSetting('storefront_product_tabs_2_section_tab_3_products'), 'tabFourProducts' => $this->getProductListFromSetting('storefront_product_tabs_2_section_tab_4_products'), ]); }); } private function oneColumnBanner() { return tap(new Tab('one_column_banner', trans('storefront::storefront.tabs.one_column_banner')), function (Tab $tab) { $tab->weight(85); $tab->view('admin.storefront.tabs.one_column_banner', [ 'banner' => Banner::getOneColumnBanner(), ]); }); } }