From 993d966824e2662928d7b77a149f389ea1208f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 23 Aug 2022 08:36:02 +0200 Subject: [PATCH] Enable filtering of region and city records by pid --- .../Classes/Controller/CityController.php | 3 +- .../Classes/Controller/RegionController.php | 3 +- .../Domain/Repository/CityRepository.php | 13 ++-- .../Domain/Repository/RegionRepository.php | 13 ++-- .../TypoScript/constants.typoscript | 64 +++++++++++-------- .../Configuration/TypoScript/setup.typoscript | 2 + 6 files changed, 54 insertions(+), 44 deletions(-) diff --git a/public/typo3conf/ext/ep_products/Classes/Controller/CityController.php b/public/typo3conf/ext/ep_products/Classes/Controller/CityController.php index 79087863..37d64929 100644 --- a/public/typo3conf/ext/ep_products/Classes/Controller/CityController.php +++ b/public/typo3conf/ext/ep_products/Classes/Controller/CityController.php @@ -85,7 +85,8 @@ class CityController extends ActionController { $regionUid = $this->settings['regionUid']; $season = $this->settings['season']; - $cities = $this->cityRepository->getTeasersByRegionAndSeason($regionUid, $season); + $citiesPid = $this->settings['citiesPid']; + $cities = $this->cityRepository->getTeasersByRegionAndSeason($regionUid, $season, $citiesPid); $data = $this->configurationManager->getContentObject()->data; $this->view->assign('data', $data); $this->view->assign('teasers', $cities); diff --git a/public/typo3conf/ext/ep_products/Classes/Controller/RegionController.php b/public/typo3conf/ext/ep_products/Classes/Controller/RegionController.php index 434767dc..f32f9b8b 100644 --- a/public/typo3conf/ext/ep_products/Classes/Controller/RegionController.php +++ b/public/typo3conf/ext/ep_products/Classes/Controller/RegionController.php @@ -85,7 +85,8 @@ class RegionController extends ActionController { $countryUid = $this->settings['countryUid']; $season = $this->settings['season']; - $regions = $this->regionRepository->getTeasersByCountryAndSeason($countryUid, $season); + $regionsPid = $this->settings['regionsStoragePid']; + $regions = $this->regionRepository->getTeasersByCountryAndSeason($countryUid, $season, $regionsPid); $data = $this->configurationManager->getContentObject()->data; $this->view->assign('data', $data); $this->view->assign('teasers', $regions); diff --git a/public/typo3conf/ext/ep_products/Classes/Domain/Repository/CityRepository.php b/public/typo3conf/ext/ep_products/Classes/Domain/Repository/CityRepository.php index b285bce6..e768b837 100644 --- a/public/typo3conf/ext/ep_products/Classes/Domain/Repository/CityRepository.php +++ b/public/typo3conf/ext/ep_products/Classes/Domain/Repository/CityRepository.php @@ -31,14 +31,7 @@ use EP\EpProducts\Domain\Model\AbstractDestination; class CityRepository extends AbstractRepository { - - /** - * @param int $regionUid - * @param string $season - * - * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface - */ - public function getTeasersByRegionAndSeason($regionUid, $season = 'w') + public function getTeasersByRegionAndSeason(int $regionUid, string $season = 'w', int $storagePid = 0) { if ($season === null) { $season = AbstractDestination::SEASON_WINTER; @@ -49,6 +42,10 @@ class CityRepository extends AbstractRepository $query->equals('season', $season), $query->equals('excludeFromTeasergroups', 0) ]; + if (0 < $storagePid) { + $constraints[] = $query->equals('pid', $storagePid); + } + return $query ->matching($query->logicalAnd($constraints)) ->execute() diff --git a/public/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php b/public/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php index a29d8456..5f3baa6c 100644 --- a/public/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php +++ b/public/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php @@ -31,13 +31,7 @@ use EP\EpProducts\Domain\Model\AbstractDestination; class RegionRepository extends AbstractRepository { - - /** - * @param int $countryUid - * @param string $season - * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface - */ - public function getTeasersByCountryAndSeason($countryUid, $season = 'w') + public function getTeasersByCountryAndSeason(int $countryUid, string $season = 'w', int $storagePid = 0) { if ($season === null) { $season = AbstractDestination::SEASON_WINTER; @@ -48,6 +42,11 @@ class RegionRepository extends AbstractRepository $query->equals('season', $season), $query->equals('excludeFromTeasergroups', 0) ]; + + if (0 < $storagePid) { + $constraints[] = $query->equals('pid', $storagePid); + } + return $query ->matching($query->logicalAnd($constraints)) ->execute() diff --git a/public/typo3conf/ext/ep_products/Configuration/TypoScript/constants.typoscript b/public/typo3conf/ext/ep_products/Configuration/TypoScript/constants.typoscript index 0840078d..3c472230 100644 --- a/public/typo3conf/ext/ep_products/Configuration/TypoScript/constants.typoscript +++ b/public/typo3conf/ext/ep_products/Configuration/TypoScript/constants.typoscript @@ -1,48 +1,58 @@ +# customsubcategory=100=Storage +# customsubcategory=110=Pages +# customsubcategory=120=Search/Filtering +# customsubcategory=130=Email +# customsubcategory=140=Misc + plugin.tx_epproducts { settings { - # cat=plugin.tx_epproducts//a; type=string; label=Products storage PID + # cat=epproducts/100/100; type=string; label=Products storage PID productsStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Hotels storage PID + # cat=epproducts/100/110; type=string; label=Hotels storage PID hotelsStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Concepts storage PID + # cat=epproducts/100/120; type=string; label=Concepts storage PID conceptsStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Facts storage PID + # cat=epproducts/100/130; type=string; label=Facts storage PID factsStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Faqs storage PID + # cat=epproducts/100/140; type=string; label=Faqs storage PID faqsStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Destinations storage PID + # cat=epproducts/100/150; type=string; label=Destinations storage PID destinationsStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Teammember storage PID + # cat=epproducts/100/160; type=string; label=Regions storage PID + regionsStoragePid = + # cat=epproducts/100/160; type=string; label=Cities storage PID + citiesStoragePid = + # cat=epproducts/100/170; type=string; label=Teammember storage PID teammemberStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Officetip storage PID + # cat=epproducts/100/180; type=string; label=Officetip storage PID officetipStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Snow report storage PID + # cat=epproducts/100/190; type=string; label=Snow report storage PID snowReportStoragePid = - # cat=plugin.tx_epproducts//a; type=string; label=Default search page UID + # cat=epproducts/110/100; type=string; label=Default search page UID defaultSearchPageUid = - # cat=plugin.tx_epproducts//a; type=string; label=Default product detail page UID + # cat=epproducts/110/110; type=string; label=Default product detail page UID defaultDetailPageUid = - # cat=plugin.tx_epproducts//a; type=string; label=Exclude products with concept UIDs from search result (CSV) - excludedConceptUids = - # cat=plugin.tx_epproducts//a; type=string; label=Exclude regions with these UIDs from filter options (CSV) - excludedRegionUids = - # cat=plugin.tx_epproducts//a; type=string; label=Force concept UID in all search related parts (CSV) - forcedConceptUids = - # cat=plugin.tx_epproducts//a; type=string; label=Don't show availability info for products with these concept UIDs - noInfoConceptUids = - # cat=plugin.tx_epproducts//a; type=string; label=Room types for pricetables (CSV) - priceTableRoomTypes = 1,2,3,4,5,6,7,8,9,10 - # cat=plugin.tx_epproducts//a; type=string; label=Ignore following IPs in searchlog - searchLogIgnoreIps = - # cat=plugin.tx_epproducts//a; type=string; label=Page UID with reseller export plugin + # cat=epproducts/110/120; type=string; label=Page UID with reseller export plugin resellerExportPageUid = - # cat=plugin.tx_epproducts//a; type=string; label=Email recipient for groups price inquiries + # cat=epproducts/120/100; type=string; label=Exclude products with concept UIDs from search result (CSV) + excludedConceptUids = + # cat=epproducts/120/110; type=string; label=Exclude regions with these UIDs from filter options (CSV) + excludedRegionUids = + # cat=epproducts/120/120; type=string; label=Force concept UID in all search related parts (CSV) + forcedConceptUids = + # cat=epproducts/120/130; type=string; label=Don't show availability info for products with these concept UIDs + noInfoConceptUids = + # cat=epproducts/130/110; type=string; label=Email recipient for groups price inquiries groupsPriceToEmail = gruppen@ep-reisen.de - # cat=plugin.tx_epproducts//a; type=string; label=Email recipient for groups price inquiries + # cat=epproducts/130/120; type=string; label=Email recipient for groups price inquiries groupsPriceToName = EP Reisen + # cat=epproducts/140/100; type=string; label=Room types for pricetables (CSV) + priceTableRoomTypes = 1,2,3,4,5,6,7,8,9,10 + # cat=epproducts/140/110; type=string; label=Ignore following IPs in searchlog + searchLogIgnoreIps = } persistence { - # cat=plugin.tx_epproducts//a; type=string; label=Default storage PID + # cat=epproducts/100/100; type=string; label=Default storage PID storagePid = } } diff --git a/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript b/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript index 9c4e4db5..17170686 100644 --- a/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript +++ b/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript @@ -26,6 +26,8 @@ plugin.tx_epproducts { settings { productsPid = {$plugin.tx_epproducts.settings.productsStoragePid} destinationsStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid} + regionsStoragePid = {$plugin.tx_epproducts.settings.regionsStoragePid} + citiesStoragePid = {$plugin.tx_epproducts.settings.citiesStoragePid} snowReportStoragePid = {$plugin.tx_epproducts.settings.snowReportStoragePid} defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid} defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid}