/** * Returns a sorted list of required criteria keys. * * @param MW_Common_Criteria_Interface $criteria Search criteria object * @param string[] $required List of prefixes of required search conditions * @return string[] Sorted list of criteria keys */ private function _getCriteriaKeyList(MW_Common_Criteria_Interface $criteria, array $required) { $keys = array_merge($required, $this->_getCriteriaKeys($required, $criteria->getConditions())); foreach ($criteria->getSortations() as $sortation) { $keys = array_merge($keys, $this->_getCriteriaKeys($required, $sortation)); } $keys = array_unique(array_merge($required, $keys)); sort($keys); return $keys; }
/** * Initializes the criteria object with sortations based on the given parameter. * * @param MW_Common_Criteria_Interface $criteria Criteria object * @param stdClass $params Object that may contain the properties "condition", "sort", "dir", "start" and "limit" */ private function _initCriteriaSortations(MW_Common_Criteria_Interface $criteria, stdClass $params) { if (isset($params->sort) && isset($params->dir)) { $sortation = array(); switch ($params->dir) { case 'ASC': $sortation[] = $criteria->sort('+', $params->sort); break; case 'DESC': $sortation[] = $criteria->sort('-', $params->sort); break; default: throw new Controller_ExtJS_Exception(sprintf('Invalid sort direction "%1$s"', $params->sort)); } $criteria->setSortations($sortation); } if ($this->_sort !== null) { $sort = $criteria->getSortations(); $sort[] = $criteria->sort('+', $this->_sort); $criteria->setSortations($sort); } }