* @copyright 2007-2019 PrestaShop SA * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) * International Registered Trademark & Property of PrestaShop SA */ namespace PrestaShop\Module\StFacetedSearch; use PrestaShop\PrestaShop\Core\Product\Search\URLFragmentSerializer; use PrestaShop\PrestaShop\Core\Product\Search\Filter; use PrestaShop\PrestaShop\Core\Product\Search\Facet; class URLSerializer { /** * Add filter * * @param array $facetFilters * @param Filter $facetFilter * @param Facet $facet * * @return array */ public function addFilterToFacetFilters(array $facetFilters, Filter $facetFilter, Facet $facet) { if($facet->getType()=='price' || $facet->getType()=='weight') { $facetValue = $facet->getProperty('values'); $facetFilters[$facet->getLabel()] = [ $facetFilter->getProperty('symbol'), isset($facetValue[0]) ? $facetValue[0] : $facet->getProperty('min'), isset($facetValue[1]) ? $facetValue[1] : $facet->getProperty('max'), ]; } else { $facetFilters[$facet->getLabel()][$facetFilter->getLabel()] = $facetFilter->getLabel(); } return $facetFilters; } /** * Remove filter * * @param array $facetFilters * @param Filter $facetFilter * @param Facet $facet * * @return array */ public function removeFilterFromFacetFilters(array $facetFilters, Filter $facetFilter, $facet) { if($facet->getType()=='price' || $facet->getType()=='weight') { unset($facetFilters[$facet->getLabel()]); } else { unset($facetFilters[$facet->getLabel()][$facetFilter->getLabel()]); if (empty($facetFilters[$facet->getLabel()])) { unset($facetFilters[$facet->getLabel()]); } } return $facetFilters; } /** * Get active facet filters * * @return array */ public function getActiveFacetFiltersFromFacets(array $facets) { $facetFilters = []; foreach ($facets as $facet) { foreach ($facet->getFilters() as $facetFilter) { if (!$facetFilter->isActive()) { // Filter is not active continue; } if($facet->getType()=='price' || $facet->getType()=='weight') { $facetValue = $facetFilter->getValue(); $facetFilters[$facet->getLabel()] = [ $facetFilter->getProperty('symbol'), $facetValue[0], $facetValue[1], ]; }else{ $facetFilters[$facet->getLabel()][$facetFilter->getLabel()] = $facetFilter->getLabel(); } } } return $facetFilters; } /** * Serialize facets * * @param array $facets * * @return string */ public function serialize(array $facets) { $facetFilters = $this->getActiveFacetFiltersFromFacets($facets); $urlSerializer = new URLFragmentSerializer(); return $urlSerializer->serialize($facetFilters); } }