protected function generateCriteria($attr = 'search')
{
if (is_array($attr)) {
$search = $attr;
$sensitive = false;
} else {
$search = $this->request->getParam($attr);
$sensitive = $this->request->getParam('case_sensitive', false);
}
if (is_array($search)) {
foreach ($search as $key => $value) {
if ($key === 'exact') {
continue;
}
$exactMatch = isset($search['exact'][$key]) && $search['exact'][$key];
if (!is_array($value)) {
$this->addCompare($this->criteria, $key, $value, $sensitive, 'AND', $exactMatch);
} else {
if ($key === 'filterid') {
foreach ($value as $fieldName => $fieldValue) {
if ($fieldValue > 0) {
$this->addCompare($this->criteria, $fieldName, $fieldValue, $sensitive, 'AND', true);
}
}
}
if (!isset($value['value'])) {
//no value provided to search against
continue;
}
$searchTerm = $value['value'];
$this->addCompare($this->criteria, $key, $searchTerm, $sensitive, 'AND', $exactMatch);
if (array_key_exists('compare_to', $value) && is_array($value['compare_to'])) {
foreach ($value['compare_to'] as $compareTo) {
$this->addCompare($this->criteria, $compareTo, $searchTerm, $sensitive, 'OR', $exactMatch);
}
}
}
}
}
if ($this->model->hasAttribute('display_order')) {
$this->criteria->order = 'display_order asc';
} else {
$order = $this->request->getParam('d');
$sortColumn = $this->request->getParam('c');
if ($sortColumn) {
$this->relationalAttribute($this->criteria, $sortColumn, $attr);
if ($order) {
$sortColumn .= ' DESC';
}
$this->criteria->order = $sortColumn;
}
}
}