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)
|
public function autocompleteAction(FilterSettings $filterSettings, $search)
|
||||||
{
|
{
|
||||||
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']);
|
$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);
|
return json_encode($destinations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ class AjaxSearchController extends ActionController
|
|||||||
$organic = true;
|
$organic = true;
|
||||||
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
||||||
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']);
|
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']);
|
||||||
|
$excludedRegionUids = GeneralUtility::trimExplode(',', $this->settings['excludedRegionUids']);
|
||||||
|
|
||||||
if ($filterSettings === null) {
|
if ($filterSettings === null) {
|
||||||
$filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUids);
|
$filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUids);
|
||||||
@@ -109,7 +110,11 @@ class AjaxSearchController extends ActionController
|
|||||||
$organic = false;
|
$organic = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$filterOptions = $this->filterService->getFilterOptions($filterSettings, $excludedConceptUids);
|
$filterOptions = $this->filterService->getFilterOptions(
|
||||||
|
$filterSettings,
|
||||||
|
$excludedConceptUids,
|
||||||
|
$excludedRegionUids
|
||||||
|
);
|
||||||
|
|
||||||
$options = [
|
$options = [
|
||||||
'defaultDetailPageUid' => $this->settings['defaultDetailPageUid'],
|
'defaultDetailPageUid' => $this->settings['defaultDetailPageUid'],
|
||||||
|
|||||||
@@ -73,7 +73,9 @@ class AjaxSearchbarController extends ActionController
|
|||||||
} else {
|
} else {
|
||||||
$filterSettings = FilterSettings::fromSearchParams($searchParams);
|
$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([
|
return json_encode([
|
||||||
'filterOptions' => $filterOptions,
|
'filterOptions' => $filterOptions,
|
||||||
'searchParams' => $searchParams,
|
'searchParams' => $searchParams,
|
||||||
|
|||||||
@@ -72,7 +72,12 @@ class SearchController extends ActionController
|
|||||||
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
||||||
$this->defaultFilterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUids);
|
$this->defaultFilterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUids);
|
||||||
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']);
|
$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()
|
public function searchbarAction()
|
||||||
|
|||||||
@@ -75,10 +75,11 @@ class DateRepository extends AbstractRepository
|
|||||||
/**
|
/**
|
||||||
* @param FilterSettings $filterSettings
|
* @param FilterSettings $filterSettings
|
||||||
* @param array $excludedConceptUids
|
* @param array $excludedConceptUids
|
||||||
|
* @param array $excludedRegionUids
|
||||||
* @return array
|
* @return array
|
||||||
* @throws \Doctrine\DBAL\DBALException
|
* @throws \Doctrine\DBAL\DBALException
|
||||||
*/
|
*/
|
||||||
public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = [])
|
public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = [], $excludedRegionUids = [])
|
||||||
{
|
{
|
||||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
$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);
|
$this->addFiltersettingsConditions($query, $filterSettings);
|
||||||
|
|
||||||
return $query->execute()->fetchAll();
|
return $query->execute()->fetchAll();
|
||||||
@@ -205,10 +213,11 @@ class DateRepository extends AbstractRepository
|
|||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $search
|
* @param string $search
|
||||||
* @param FilterSettings $filterSettings
|
* @param FilterSettings $filterSettings
|
||||||
|
* @param array $excludedRegionUids
|
||||||
* @return array
|
* @return array
|
||||||
* @throws \Doctrine\DBAL\DBALException
|
* @throws \Doctrine\DBAL\DBALException
|
||||||
*/
|
*/
|
||||||
public function searchDestinations($type, $search, FilterSettings $filterSettings)
|
public function searchDestinations($type, $search, FilterSettings $filterSettings, $excludedRegionUids = [])
|
||||||
{
|
{
|
||||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||||
|
|
||||||
@@ -234,6 +243,13 @@ class DateRepository extends AbstractRepository
|
|||||||
$this->addPaxFilterConditions($query, $filterSettings);
|
$this->addPaxFilterConditions($query, $filterSettings);
|
||||||
$this->addConceptFilterConditions($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();
|
return $query->execute()->fetchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -175,10 +175,17 @@ class DateService implements SingletonInterface
|
|||||||
* @param FilterSettings $filterSettings
|
* @param FilterSettings $filterSettings
|
||||||
* @param string $search
|
* @param string $search
|
||||||
* @param array $excludedConceptUids
|
* @param array $excludedConceptUids
|
||||||
*
|
* @param array $excludedRegionUids
|
||||||
* @return array
|
* @return array
|
||||||
|
* @throws \Doctrine\DBAL\DBALException
|
||||||
*/
|
*/
|
||||||
public function getAutocompleteOptions(FilterSettings $filterSettings, $search, $excludedConceptUids = [])
|
public function getAutocompleteOptions
|
||||||
|
(
|
||||||
|
FilterSettings $filterSettings,
|
||||||
|
$search,
|
||||||
|
$excludedConceptUids = [],
|
||||||
|
$excludedRegionUids = []
|
||||||
|
)
|
||||||
{
|
{
|
||||||
$destinations = [
|
$destinations = [
|
||||||
'country' => [
|
'country' => [
|
||||||
@@ -216,7 +223,12 @@ class DateService implements SingletonInterface
|
|||||||
$result = $this->dateRepository->searchProducts($search, $filterSettings, $excludedConceptUids);
|
$result = $this->dateRepository->searchProducts($search, $filterSettings, $excludedConceptUids);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$result = $this->dateRepository->searchDestinations($type, $search, $filterSettings);
|
$result = $this->dateRepository->searchDestinations(
|
||||||
|
$type,
|
||||||
|
$search,
|
||||||
|
$filterSettings,
|
||||||
|
$excludedRegionUids
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($result as $row)
|
foreach ($result as $row)
|
||||||
|
|||||||
@@ -80,14 +80,19 @@ class FilterService implements SingletonInterface
|
|||||||
/**
|
/**
|
||||||
* @param FilterSettings $filterSettings
|
* @param FilterSettings $filterSettings
|
||||||
* @param array $excludedConceptUids
|
* @param array $excludedConceptUids
|
||||||
|
* @param array $excludedRegionUids
|
||||||
* @return FilterOptions
|
* @return FilterOptions
|
||||||
* @throws \Doctrine\DBAL\DBALException
|
* @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])) {
|
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];
|
$filterOptionsData = static::$cache['filterOptions'][$key];
|
||||||
if (count($filterOptionsData) === 0) {
|
if (count($filterOptionsData) === 0) {
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ plugin.tx_epproducts {
|
|||||||
defaultDetailPageUid =
|
defaultDetailPageUid =
|
||||||
# cat=plugin.tx_epproducts//a; type=string; label=Exclude products with concept UIDs from search result (CSV)
|
# cat=plugin.tx_epproducts//a; type=string; label=Exclude products with concept UIDs from search result (CSV)
|
||||||
excludedConceptUids =
|
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)
|
# cat=plugin.tx_epproducts//a; type=string; label=Force concept UID in all search related parts (CSV)
|
||||||
forcedConceptUids =
|
forcedConceptUids =
|
||||||
# cat=plugin.tx_epproducts//a; type=string; label=Don't show availability info for products with these concept UIDs
|
# 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}
|
defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid}
|
||||||
defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid}
|
defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid}
|
||||||
excludedConceptUids = {$plugin.tx_epproducts.settings.excludedConceptUids}
|
excludedConceptUids = {$plugin.tx_epproducts.settings.excludedConceptUids}
|
||||||
|
excludedRegionUids = {$plugin.tx_epproducts.settings.excludedRegionUids}
|
||||||
forcedConceptUids = {$plugin.tx_epproducts.settings.forcedConceptUids}
|
forcedConceptUids = {$plugin.tx_epproducts.settings.forcedConceptUids}
|
||||||
noInfoConceptUids = {$plugin.tx_epproducts.settings.noInfoConceptUids}
|
noInfoConceptUids = {$plugin.tx_epproducts.settings.noInfoConceptUids}
|
||||||
priceTableRoomTypes = {$plugin.tx_epproducts.settings.priceTableRoomTypes}
|
priceTableRoomTypes = {$plugin.tx_epproducts.settings.priceTableRoomTypes}
|
||||||
|
|||||||
Reference in New Issue
Block a user