public function getFilterSet() { if ($this->filterSetCache) { return $this->filterSetCache; } Classloader::import('application.model.filter.Filter'); Classloader::import('application.model.filter.SelectorFilter'); // get filter groups $groups = $this->getFilterGroupArray(); $ids = array(); $specFields = array(); $filterGroups = array(); foreach ($groups as $group) { if (in_array($group['SpecField']['type'], array(SpecField::TYPE_NUMBERS_SELECTOR, SpecField::TYPE_TEXT_SELECTOR))) { $specFields[] = $group['SpecField']['ID']; $filterGroups[$group['SpecField']['ID']] = $group['ID']; $ids[] = $group['ID']; } else { $ids[] = $group['ID']; } } $ret = array(); if ($ids) { // get specification simple value filters $filterCond = new INCond(new ARFieldHandle('Filter', 'filterGroupID'), $ids); $filterFilter = new ARSelectFilter(); $filterFilter->setCondition($filterCond); $filterFilter->setOrder(new ARFieldHandle('Filter', 'filterGroupID')); $filterFilter->setOrder(new ARFieldHandle('Filter', 'position')); $valueFilters = ActiveRecord::getRecordSet('Filter', $filterFilter, array('FilterGroup', 'SpecField')); foreach ($valueFilters as $filter) { $ret[] = $filter; } } // get specification selector value filters if ($specFields) { $selectFilter = new ARSelectFilter(); $selectFilter->setCondition(new INCond(new ARFieldHandle('SpecFieldValue', 'specFieldID'), $specFields)); $selectFilter->setOrder(new ARFieldHandle('SpecFieldValue', 'specFieldID')); $selectFilter->setOrder(new ARFieldHandle('SpecFieldValue', 'position')); $specFieldValues = ActiveRecord::getRecordSet('SpecFieldValue', $selectFilter); foreach ($specFieldValues as $value) { $ret[] = new SelectorFilter($value, FilterGroup::getInstanceByID($filterGroups[$value->specField->get()->getID()])); } } $this->filterSetCache = $ret; return $ret; }
/** * Sort filter groups * * @role sort * * @return JSONResponse Status */ public function sort() { foreach ($this->request->get($this->request->get('target'), array()) as $position => $key) { if (!empty($key)) { $group = FilterGroup::getInstanceByID((int) $key); $group->setFieldValue('position', (int) $position); $group->save(); } } return new JSONResponse(false, 'success'); }