private function restoreActiveStates(Facet $facet, array $activeStates) { foreach ($facet->getFilters() as $key => $filter) { $filter->setActive($activeStates[$key]); } return $facet; }
private function isFilterActive(Facet $facet, $filterLabel) { foreach ($facet->getFilters() as $facetFilter) { if ($facetFilter->getLabel() === $filterLabel) { return $facetFilter->isActive(); } } return false; }
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())))); }
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; }