Ejemplo n.º 1
0
 private function restoreActiveStates(Facet $facet, array $activeStates)
 {
     foreach ($facet->getFilters() as $key => $filter) {
         $filter->setActive($activeStates[$key]);
     }
     return $facet;
 }
Ejemplo n.º 2
0
 private function isFilterActive(Facet $facet, $filterLabel)
 {
     foreach ($facet->getFilters() as $facetFilter) {
         if ($facetFilter->getLabel() === $filterLabel) {
             return $facetFilter->isActive();
         }
     }
     return false;
 }
Ejemplo n.º 3
0
 private function copyFacetFilters(Facet $target, Facet $source)
 {
     // FIXME: dirty hack, but don't want to touch the Core Facet class at the moment
     // -- what it needs is a setFilters() method.
     $refl = new ReflectionClass($target);
     $filters = $refl->getProperty("filters");
     $filters->setAccessible(true);
     $filters->setValue($target, $source->getFilters());
 }
 /**
  * Converts a Facet to an array with all necessary
  * information for templating.
  *
  * @param Facet $facet
  *
  * @return array ready for templating
  */
 protected function prepareFacetForTemplate(Facet $facet)
 {
     $facetsArray = $facet->toArray();
     foreach ($facetsArray['filters'] as &$filter) {
         $filter['facetLabel'] = $facet->getLabel();
         if ($filter['nextEncodedFacets']) {
             $filter['nextEncodedFacetsURL'] = $this->updateQueryString(array('q' => $filter['nextEncodedFacets'], 'page' => null));
         } else {
             $filter['nextEncodedFacetsURL'] = $this->updateQueryString(array('q' => null));
         }
     }
     unset($filter);
     return $facetsArray;
 }
 public function getFacetsFromFacetedSearchFilters(array $facetedSearchFilters)
 {
     $facets = [];
     foreach ($facetedSearchFilters as $facetArray) {
         $facet = new Facet();
         $facet->setLabel($facetArray['name'])->setMultipleSelectionAllowed(true);
         switch ($facetArray['type']) {
             case 'category':
             case 'quantity':
             case 'condition':
             case 'manufacturer':
             case 'id_attribute_group':
             case 'id_feature':
                 $type = $facetArray['type'];
                 if ($facetArray['type'] == 'quantity') {
                     $type = 'availability';
                 } elseif ($facetArray['type'] == 'id_attribute_group') {
                     $type = 'attribute_group';
                     $facet->setProperty('id_attribute_group', $facetArray['id_key']);
                 } elseif ($facetArray['type'] == 'id_feature') {
                     $type = 'feature';
                     $facet->setProperty('id_feature', $facetArray['id_key']);
                 }
                 $facet->setType($type);
                 foreach ($facetArray['values'] as $id => $filterArray) {
                     $filter = new Filter();
                     $filter->setType($type)->setLabel($filterArray['name'])->setMagnitude($filterArray['nbr'])->setValue($id);
                     if (isset($filterArray['color']) && $filterArray['color'] != '') {
                         $filter->setProperty('color', $filterArray['color']);
                     }
                     if (isset($filterArray['url_name']) && $filterArray['url_name'] != '') {
                         $filter->setProperty('texture', _THEME_COL_DIR_ . $id . '.jpg');
                     }
                     $facet->addFilter($filter);
                 }
                 break;
             case 'weight':
             case 'price':
                 $facet->setType($facetArray['type'])->setProperty('min', $facetArray['min'])->setProperty('max', $facetArray['max'])->setMultipleSelectionAllowed(false)->setProperty('range', true);
                 foreach ($facetArray['list_of_values'] as $value) {
                     $filter = new Filter();
                     $filter->setType($facetArray['type'])->setMagnitude($value['nbr'])->setProperty('symbol', $facetArray['unit'])->setValue(['from' => $value[0], 'to' => $value[1]]);
                     $facet->addFilter($filter);
                 }
                 break;
         }
         switch ((int) $facetArray['filter_type']) {
             case 0:
                 // checkbox
                 $facet->setMultipleSelectionAllowed(true);
                 $facet->setWidgetType('checkboxes');
                 break;
             case 1:
                 // radio
                 $facet->setMultipleSelectionAllowed(false);
                 $facet->setWidgetType('radio-buttons');
                 break;
             case 2:
                 // drop down
                 $facet->setMultipleSelectionAllowed(false);
                 $facet->setWidgetType('dropdown');
                 break;
         }
         $facets[] = $facet;
     }
     return $facets;
 }
 private function getFilterByLabel(Facet $facet, $label)
 {
     foreach ($facet->getFilters() as $filter) {
         if ($filter->getLabel() === $label) {
             return $filter;
         }
     }
     throw new Exception(sprintf('Could not find a filter labelled `%1$s` in the `%2$s` facet containing `%3$s` filters (%4$s).', $label, $facet->getLabel(), count($facet->getFilters()), implode(", ", array_map(function (Filter $f) {
         return $f->getLabel();
     }, $facet->getFilters()))));
 }
Ejemplo n.º 7
-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;
 }