Implement exclusion of regions in filters
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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'],
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user