ModelSearch::generateCriteria PHP Method

generateCriteria() protected method

Generates the required Criteria object for the search.
protected generateCriteria ( string | array $attr = 'search' )
$attr string | array
    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;
            }
        }
    }