Ejemplo n.º 1
-1
 public function unserialize($facetsAsString)
 {
     $urlFragmentSerializer = new URLFragmentSerializer();
     $facetsAsArray = $urlFragmentSerializer->unserialize($facetsAsString);
     $facets = [];
     foreach ($facetsAsArray as $label => $filters) {
         $facet = new Facet();
         $facet->setLabel($label);
         foreach ($filters as $filterLabel) {
             $filter = new Filter();
             $filter->setLabel($filterLabel)->setActive(true);
             $facet->addFilter($filter);
         }
         $facets[] = $facet;
     }
     return $facets;
 }
 public function setFiltersFromEncodedFacets(array $facets, $encodedFacets)
 {
     $urlSerializer = new URLFragmentSerializer();
     $facetAndFiltersLabels = $urlSerializer->unserialize($encodedFacets);
     foreach ($facetAndFiltersLabels as $facetLabel => $filters) {
         foreach ($facets as $facet) {
             if ($facet->getLabel() === $facetLabel) {
                 if (true === $facet->getProperty('range')) {
                     $symbol = $filters[0];
                     $from = $filters[1];
                     $to = $filters[2];
                     $found = false;
                     foreach ($facet->getFilters() as $filter) {
                         if ($from >= $filter->getValue()['from'] && $to <= $filter->getValue()['to']) {
                             $filter->setActive(true);
                             $found = true;
                         }
                     }
                     if (!$found) {
                         $filter = new Filter();
                         $filter->setValue(['from' => $from, 'to' => $to])->setProperty('symbol', $symbol);
                         $filter->setActive(true);
                         $facet->addFilter($filter);
                     }
                 } else {
                     foreach ($filters as $filterLabel) {
                         foreach ($facet->getFilters() as $filter) {
                             if ($filter->getLabel() === $filterLabel) {
                                 $filter->setActive(true);
                             }
                         }
                     }
                 }
             }
         }
     }
     return $facets;
 }
 /**
  * This method generates a URL stub for each filter inside the given facets
  * and assigns this stub to the filters.
  * The URL stub is called 'nextEncodedFacets' because it is used
  * to generate the URL of the search once a filter is activated.
  */
 private function addEncodedFacetsToFilters(array $facets)
 {
     // first get the currently active facetFilter in an array
     $activeFacetFilters = $this->facetsSerializer->getActiveFacetFiltersFromFacets($facets);
     $urlSerializer = new URLFragmentSerializer();
     foreach ($facets as $facet) {
         // If only one filter can be selected, we keep track of
         // the current active filter to disable it before generating the url stub
         // and not select two filters in a facet that can have only one active filter.
         if (!$facet->isMultipleSelectionAllowed()) {
             foreach ($facet->getFilters() as $filter) {
                 if ($filter->isActive()) {
                     // we have a currently active filter is the facet, remove it from the facetFilter array
                     $activeFacetFilters = $this->facetsSerializer->removeFilterFromFacetFilters($activeFacetFilters, $filter, $facet);
                     break;
                 }
             }
         }
         foreach ($facet->getFilters() as $filter) {
             $facetFilters = $activeFacetFilters;
             // toggle the current filter
             if ($filter->isActive()) {
                 $facetFilters = $this->facetsSerializer->removeFilterFromFacetFilters($facetFilters, $filter, $facet);
             } else {
                 $facetFilters = $this->facetsSerializer->addFilterToFacetFilters($facetFilters, $filter, $facet);
             }
             // We've toggled the filter, so the call to serialize
             // returns the "URL" for the search when user has toggled
             // the filter.
             $filter->setNextEncodedFacets($urlSerializer->serialize($facetFilters));
         }
     }
 }