/** * Filter menu items * * @access public * @param array $data filter data */ public function filterMenuItems($data) { $menuItemFilterFields = array("type", "title", "directUrl", "menu", "status"); $menuItemFieldsFilterByLike = array("title", "directUrl"); $data = array_intersect_key($data, array_flip($menuItemFilterFields)); if (!empty($data["menu"])) { $data["menu"] = $this->query->find('CMS\\Entity\\Menu', $data["menu"]); } $criteria = Criteria::create(); $expr = Criteria::expr(); foreach ($data as $fieldName => $fieldValue) { // only submitted values are used in filter if ($fieldValue != "") { $expressionMethod = "eq"; if (in_array($fieldName, $menuItemFieldsFilterByLike)) { $expressionMethod = "contains"; } $criteria->andWhere($expr->{$expressionMethod}($fieldName, $fieldValue)); } } $this->setCriteria($criteria); }