diff --git a/app/Http/Controllers/CMS/CMSSidebarController.php b/app/Http/Controllers/CMS/CMSSidebarController.php index aaa74b8..f6c40ec 100755 --- a/app/Http/Controllers/CMS/CMSSidebarController.php +++ b/app/Http/Controllers/CMS/CMSSidebarController.php @@ -70,7 +70,11 @@ class CMSSidebarController extends Controller $component = isset($data['component']) ? $data['component'] : null; - if (in_array($component, [SidebarWidget::HOMEPAGE_PLANNABLE_TRIPS, SidebarWidget::HOMEPAGE_POPULAR_TRIPS])) { + if (in_array($component, [ + SidebarWidget::HOMEPAGE_PLANNABLE_TRIPS, + SidebarWidget::HOMEPAGE_POPULAR_TRIPS, + SidebarWidget::HOMEPAGE_TRAVEL_CATEGORIES, + ])) { $pageIds = isset($data['homepage_page_ids']) ? array_values(array_filter($data['homepage_page_ids'])) : []; $newPageIds = isset($data['homepage_new_page_ids']) ? array_values(array_filter($data['homepage_new_page_ids'])) : []; diff --git a/app/Models/SidebarWidget.php b/app/Models/SidebarWidget.php index 39ea6a6..c58d85a 100644 --- a/app/Models/SidebarWidget.php +++ b/app/Models/SidebarWidget.php @@ -34,6 +34,7 @@ class SidebarWidget extends Model { const HOMEPAGE_PLANNABLE_TRIPS = 'homepagePlannableTrips'; const HOMEPAGE_POPULAR_TRIPS = 'homepagePopularTrips'; + const HOMEPAGE_TRAVEL_CATEGORIES = 'homepageTravelCategories'; const NEWS_SIDEBAR_WIDGET = 'newsSidebarWidget'; @@ -61,6 +62,7 @@ class SidebarWidget extends Model self::NEWS_SIDEBAR_WIDGET => 'News', self::HOMEPAGE_PLANNABLE_TRIPS => 'Startseite: Aktuell planbare Reisen', self::HOMEPAGE_POPULAR_TRIPS => 'Startseite: Beliebte Kulturreisen', + self::HOMEPAGE_TRAVEL_CATEGORIES => 'Startseite: Reisekategorien', ]; @@ -125,6 +127,16 @@ class SidebarWidget extends Model return in_array($this->component, [self::HOMEPAGE_PLANNABLE_TRIPS, self::HOMEPAGE_POPULAR_TRIPS]); } + public function isHomepageTravelCategoriesComponent() + { + return $this->component === self::HOMEPAGE_TRAVEL_CATEGORIES; + } + + public function isHomepagePagePickerComponent() + { + return $this->isHomepageTripsComponent() || $this->isHomepageTravelCategoriesComponent(); + } + public function isNewsComponent() { return $this->component === self::NEWS_SIDEBAR_WIDGET; @@ -132,7 +144,7 @@ class SidebarWidget extends Model public function isStructuredConfigComponent() { - return $this->isHomepageTripsComponent() || $this->isNewsComponent(); + return $this->isHomepagePagePickerComponent() || $this->isNewsComponent(); } public function getConfig() @@ -254,6 +266,99 @@ class SidebarWidget extends Model return $items; } + public static function getHomepageCountryPageOptions($selectedIds = []) + { + $selectedIds = array_map('intval', (array) $selectedIds); + $items = self::getHomepageCountryPageItems($selectedIds); + $ret = ''; + + foreach ($items as $item) { + $attr = $item['selected'] ? 'selected="selected"' : ''; + $label = e($item['label']); + $ret .= ''."\n"; + } + + return $ret; + } + + public static function getHomepageCountryPageItems($selectedIds = []) + { + $selectedIds = array_map('intval', (array) $selectedIds); + $pages = Page::with('travel_country') + ->where('status', '>', 0) + ->where('template', 'overview') + ->where('lvl', 0) + ->whereNotNull('country_id') + ->orderBy('lft') + ->orderBy('title') + ->get(); + + $items = []; + foreach ($pages as $page) { + $items[] = [ + 'id' => (int) $page->id, + 'label' => self::getHomepageCountryPageLabel($page), + 'selected' => in_array((int) $page->id, $selectedIds), + ]; + } + + return $items; + } + + public function getHomepageSelectedCountryPageItems() + { + $selectedIds = array_map('intval', $this->getHomepagePageIds()); + + if (empty($selectedIds)) { + return []; + } + + $pages = Page::with('travel_country') + ->whereIn('id', $selectedIds) + ->where('status', '>', 0) + ->where('template', 'overview') + ->where('lvl', 0) + ->whereNotNull('country_id') + ->get() + ->keyBy('id'); + + $items = []; + foreach ($selectedIds as $pageId) { + if (!$pages->has($pageId)) { + continue; + } + + $page = $pages->get($pageId); + $items[] = [ + 'id' => (int) $page->id, + 'label' => self::getHomepageCountryPageLabel($page), + 'is_new' => false, + ]; + } + + return $items; + } + + public function getHomepageSelectedPagePickerItems() + { + return $this->isHomepageTravelCategoriesComponent() + ? $this->getHomepageSelectedCountryPageItems() + : $this->getHomepageSelectedTravelPageItems(); + } + + protected static function getHomepageCountryPageLabel(Page $page) + { + $country = $page->travel_country && $page->travel_country->name + ? $page->travel_country->name + : null; + + if ($country) { + return $page->title.' | '.$country.' (#'.$page->id.')'; + } + + return $page->title.' (#'.$page->id.')'; + } + public function getHomepageSelectedTravelPageItems() { $selectedIds = array_map('intval', $this->getHomepagePageIds()); diff --git a/resources/views/cms/sidebar/detail.blade.php b/resources/views/cms/sidebar/detail.blade.php index 87a0a10..30211d7 100755 --- a/resources/views/cms/sidebar/detail.blade.php +++ b/resources/views/cms/sidebar/detail.blade.php @@ -52,33 +52,59 @@ -