diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxFilterpanelController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxFilterpanelController.php index c1aee5f1..1826d3af 100644 --- a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxFilterpanelController.php +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxFilterpanelController.php @@ -74,7 +74,14 @@ class AjaxFilterpanelController extends ActionController public function autocompleteAction(FilterSettings $filterSettings, $search) { $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); - $destinations = $this->dateService->getAutocompleteOptions($filterSettings, $search, $excludedConceptUids); + $excludedRegionUids = GeneralUtility::trimExplode(',', $this->settings['excludedRegionUids']); + + $destinations = $this->dateService->getAutocompleteOptions( + $filterSettings, + $search, + $excludedConceptUids, + $excludedRegionUids + ); return json_encode($destinations); } diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchController.php index c6c6ebc8..0cf84ab1 100644 --- a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchController.php +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchController.php @@ -92,6 +92,7 @@ class AjaxSearchController extends ActionController $organic = true; $forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true); $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $excludedRegionUids = GeneralUtility::trimExplode(',', $this->settings['excludedRegionUids']); if ($filterSettings === null) { $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUids); @@ -109,7 +110,11 @@ class AjaxSearchController extends ActionController $organic = false; } - $filterOptions = $this->filterService->getFilterOptions($filterSettings, $excludedConceptUids); + $filterOptions = $this->filterService->getFilterOptions( + $filterSettings, + $excludedConceptUids, + $excludedRegionUids + ); $options = [ 'defaultDetailPageUid' => $this->settings['defaultDetailPageUid'], diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchbarController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchbarController.php index f38394b4..c44ecce4 100644 --- a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchbarController.php +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchbarController.php @@ -73,7 +73,9 @@ class AjaxSearchbarController extends ActionController } else { $filterSettings = FilterSettings::fromSearchParams($searchParams); } - $filterOptions = $this->filterService->getFilterOptions($filterSettings); + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $excludedRegionUids = GeneralUtility::trimExplode(',', $this->settings['excludedRegionUids']); + $filterOptions = $this->filterService->getFilterOptions($filterSettings, $excludedConceptUids, $excludedRegionUids); return json_encode([ 'filterOptions' => $filterOptions, 'searchParams' => $searchParams, diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/SearchController.php b/web/typo3conf/ext/ep_products/Classes/Controller/SearchController.php index 0ac2424a..2d0e6f46 100644 --- a/web/typo3conf/ext/ep_products/Classes/Controller/SearchController.php +++ b/web/typo3conf/ext/ep_products/Classes/Controller/SearchController.php @@ -72,7 +72,12 @@ class SearchController extends ActionController $forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true); $this->defaultFilterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUids); $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); - $this->defaultFilterOptions = $this->filterService->getFilterOptions($this->defaultFilterSettings, $excludedConceptUids); + $excludedRegionUids = GeneralUtility::trimExplode(',', $this->settings['excludedRegionUids']); + $this->defaultFilterOptions = $this->filterService->getFilterOptions( + $this->defaultFilterSettings, + $excludedConceptUids, + $excludedRegionUids + ); } public function searchbarAction() diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php index 2b661552..020011db 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php @@ -75,10 +75,11 @@ class DateRepository extends AbstractRepository /** * @param FilterSettings $filterSettings * @param array $excludedConceptUids + * @param array $excludedRegionUids * @return array * @throws \Doctrine\DBAL\DBALException */ - public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = []) + public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = [], $excludedRegionUids = []) { $qb = $this->getDbConnection()->createQueryBuilder(); @@ -113,6 +114,13 @@ class DateRepository extends AbstractRepository ; } + if (count($excludedRegionUids) > 0) { + $query + ->andWhere('date.region NOT IN (:excludedRegionUids)') + ->setParameter('excludedRegionUids', $excludedRegionUids, Connection::PARAM_INT_ARRAY) + ; + } + $this->addFiltersettingsConditions($query, $filterSettings); return $query->execute()->fetchAll(); @@ -205,10 +213,11 @@ class DateRepository extends AbstractRepository * @param string $type * @param string $search * @param FilterSettings $filterSettings + * @param array $excludedRegionUids * @return array * @throws \Doctrine\DBAL\DBALException */ - public function searchDestinations($type, $search, FilterSettings $filterSettings) + public function searchDestinations($type, $search, FilterSettings $filterSettings, $excludedRegionUids = []) { $qb = $this->getDbConnection()->createQueryBuilder(); @@ -234,6 +243,13 @@ class DateRepository extends AbstractRepository $this->addPaxFilterConditions($query, $filterSettings); $this->addConceptFilterConditions($query, $filterSettings); + if (count($excludedRegionUids) > 0) { + $query + ->andWhere('date.region NOT IN (:excludedRegionUids)') + ->setParameter('excludedRegionUids', $excludedRegionUids, Connection::PARAM_INT_ARRAY) + ; + } + return $query->execute()->fetchAll(); } diff --git a/web/typo3conf/ext/ep_products/Classes/Service/DateService.php b/web/typo3conf/ext/ep_products/Classes/Service/DateService.php index cb55f7bc..1e1eac9a 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/DateService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/DateService.php @@ -175,10 +175,17 @@ class DateService implements SingletonInterface * @param FilterSettings $filterSettings * @param string $search * @param array $excludedConceptUids - * + * @param array $excludedRegionUids * @return array + * @throws \Doctrine\DBAL\DBALException */ - public function getAutocompleteOptions(FilterSettings $filterSettings, $search, $excludedConceptUids = []) + public function getAutocompleteOptions + ( + FilterSettings $filterSettings, + $search, + $excludedConceptUids = [], + $excludedRegionUids = [] + ) { $destinations = [ 'country' => [ @@ -216,7 +223,12 @@ class DateService implements SingletonInterface $result = $this->dateRepository->searchProducts($search, $filterSettings, $excludedConceptUids); break; default: - $result = $this->dateRepository->searchDestinations($type, $search, $filterSettings); + $result = $this->dateRepository->searchDestinations( + $type, + $search, + $filterSettings, + $excludedRegionUids + ); } foreach ($result as $row) diff --git a/web/typo3conf/ext/ep_products/Classes/Service/FilterService.php b/web/typo3conf/ext/ep_products/Classes/Service/FilterService.php index c6007c2c..4d835a66 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/FilterService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/FilterService.php @@ -80,14 +80,19 @@ class FilterService implements SingletonInterface /** * @param FilterSettings $filterSettings * @param array $excludedConceptUids + * @param array $excludedRegionUids * @return FilterOptions * @throws \Doctrine\DBAL\DBALException */ - public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = []) + public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = [], $excludedRegionUids = []) { - $key = md5(serialize($filterSettings) . serialize($excludedConceptUids)); + $key = md5(serialize($filterSettings) . serialize($excludedConceptUids). serialize($excludedRegionUids)); if (empty(static::$cache['filterOptions'][$key])) { - static::$cache['filterOptions'][$key] = $this->dateRepository->getFilterOptions($filterSettings, $excludedConceptUids); + static::$cache['filterOptions'][$key] = $this->dateRepository->getFilterOptions( + $filterSettings, + $excludedConceptUids, + $excludedRegionUids + ); } $filterOptionsData = static::$cache['filterOptions'][$key]; if (count($filterOptionsData) === 0) { diff --git a/web/typo3conf/ext/ep_products/Configuration/TypoScript/constants.txt b/web/typo3conf/ext/ep_products/Configuration/TypoScript/constants.txt index 33489bc8..8bb0ae81 100644 --- a/web/typo3conf/ext/ep_products/Configuration/TypoScript/constants.txt +++ b/web/typo3conf/ext/ep_products/Configuration/TypoScript/constants.txt @@ -24,6 +24,8 @@ plugin.tx_epproducts { 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 diff --git a/web/typo3conf/ext/ep_products/Configuration/TypoScript/setup.txt b/web/typo3conf/ext/ep_products/Configuration/TypoScript/setup.txt index 22067850..4e2d6ea2 100644 --- a/web/typo3conf/ext/ep_products/Configuration/TypoScript/setup.txt +++ b/web/typo3conf/ext/ep_products/Configuration/TypoScript/setup.txt @@ -29,6 +29,7 @@ plugin.tx_epproducts { defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid} defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid} excludedConceptUids = {$plugin.tx_epproducts.settings.excludedConceptUids} + excludedRegionUids = {$plugin.tx_epproducts.settings.excludedRegionUids} forcedConceptUids = {$plugin.tx_epproducts.settings.forcedConceptUids} noInfoConceptUids = {$plugin.tx_epproducts.settings.noInfoConceptUids} priceTableRoomTypes = {$plugin.tx_epproducts.settings.priceTableRoomTypes}