<?php
/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Commercial License (PCL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PCL
*/
namespace Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\FilterType;
use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ProductListInterface;
use Pimcore\Bundle\EcommerceFrameworkBundle\Model\AbstractFilterDefinitionType;
use Pimcore\Db;
class Select extends AbstractFilterType
{
public function getFilterValues(AbstractFilterDefinitionType $filterDefinition, ProductListInterface $productList, array $currentFilter): array
{
$field = $this->getField($filterDefinition);
return [
'hideFilter' => $filterDefinition->getRequiredFilterField() && empty($currentFilter[$filterDefinition->getRequiredFilterField()]),
'label' => $filterDefinition->getLabel(),
'currentValue' => $currentFilter[$field],
'values' => $productList->getGroupByValues($field, true),
'fieldname' => $field,
'metaData' => $filterDefinition->getMetaData(),
'resultCount' => $productList->count(),
];
}
public function addCondition(AbstractFilterDefinitionType $filterDefinition, ProductListInterface $productList, $currentFilter, $params, $isPrecondition = false)
{
$field = $this->getField($filterDefinition);
$preSelect = $this->getPreSelect($filterDefinition);
$value = $params[$field] ?? null;
$isReload = $params['is_reload'] ?? null;
if ($value == AbstractFilterType::EMPTY_STRING) {
$value = null;
} elseif (empty($value) && !$isReload) {
$value = $preSelect;
}
$value = trim($value);
$currentFilter[$field] = $value;
if (!empty($value)) {
$db = Db::get();
if ($isPrecondition) {
$productList->addCondition('TRIM(`' . $field . '`) = ' . $db->quote($value), 'PRECONDITION_' . $field);
} else {
$productList->addCondition('TRIM(`' . $field . '`) = ' . $db->quote($value), $field);
}
}
return $currentFilter;
}
}