/** * Get search form filters * * @param array &$filters list filters * * @return void */ private function getSearchFormFilters(&$filters) { $fromFormId = $this->getSearchFormId(); if (!empty($fromFormId)) { $formModel = $this->listModel->getFormModel(); $db = FabrikWorker::getDbo(); $lookupKeys = FArrayHelper::getValue($filters, 'key', array()); if ($fromFormId != $formModel->get('id')) { $fromForm = JModelLegacy::getInstance('Form', 'FabrikFEModel'); $fromForm->setId($fromFormId); //$fromFormParams = $fromForm->getParams(); /** * $$$ hugh Added $filter_elements from 'filter_name' * which we'll need in the case of $elid not being in $elements for search forms */ $elements = $this->listModel->getElements('id'); $filter_elements = $this->listModel->getElements('filtername'); $tableName = $db->qn($this->listModel->getTable()->db_table_name); $searchFilters = $this->app->getUserState('com_' . $this->package . '.searchform.form' . $fromFormId . '.filters'); for ($i = 0; $i < count($searchFilters['key']); $i++) { $eval = FABRIKFILTER_TEXT; $found = false; $key = $searchFilters['key'][$i]; $elid = $searchFilters['elementid'][$i]; if (array_key_exists($elid, $elements)) { $found = true; $elementModel = $elements[$elid]; } else { // If sent from a search form - the table name will be blank $key = explode('.', $key); $key = $tableName . '.' . array_pop($key); if (array_key_exists($key, $filter_elements)) { $found = true; $elementModel = $filter_elements["{$key}"]; } else { // $$$ rob - I've not actually tested this code $joins = $this->listModel->getJoins(); foreach ($joins as $join) { $key = $db->qn($join->table_join) . '.' . array_pop(explode('.', $key)); if (array_key_exists($key, $filter_elements)) { $found = true; $elementModel = $filter_elements[$key]; break; } } } } if (!isset($elementModel) || !is_a($elementModel, 'plgFabrik_Element') || $found === false) { // Could be looking for an element which exists in a join continue; } $index = array_key_exists('key', $filters) ? array_search($key, $lookupKeys) : false; $element = $elementModel->getElement(); $elParams = $elementModel->getParams(); $grouped = array_key_exists($i, $searchFilters['grouped_to_previous']) ? $searchFilters['grouped_to_previous'][$i] : 0; $join = $searchFilters['join'][$i]; if ($index === false) { $filters['value'][] = $searchFilters['value'][$i]; $filters['condition'][] = $elementModel->getDefaultFilterCondition(); $filters['join'][] = $join; $filters['no-filter-setup'][] = $element->filter_type == '' ? 1 : 0; $filters['hidden'][] = $element->filter_type == '' ? 1 : 0; $filters['key'][] = $key; $filters['search_type'][] = 'search'; $filters['match'][] = $element->filter_exact_match; $filters['full_words_only'][] = $elParams->get('full_words_only'); $filters['eval'][] = $eval; $filters['required'][] = $elParams->get('filter_required'); $filters['access'][] = $elParams->get('filter_access'); $filters['grouped_to_previous'][] = $grouped; $filters['label'][] = $elementModel->getListHeading(); $filters['raw'][] = false; } else { unset($lookupKeys[$index]); $filters['value'][$index] = $searchFilters['value'][$i]; $filters['condition'][$index] = $elementModel->getDefaultFilterCondition(); $filters['join'][$index] = $join; $filters['no-filter-setup'][$index] = $element->filter_type == '' ? 1 : 0; $filters['hidden'][$index] = $element->filter_type == '' ? 1 : 0; $filters['key'][$index] = $key; $filters['search_type'][$index] = 'search'; $filters['match'][$index] = $element->filter_exact_match; $filters['full_words_only'][$index] = $elParams->get('full_words_only'); $filters['eval'][$index] = $eval; $filters['required'][$index] = $elParams->get('filter_required'); $filters['access'][$index] = $elParams->get('filter_access'); $filters['grouped_to_previous'][$index] = $grouped; $filters['label'][$index] = $elementModel->getListHeading(); $filters['raw'][$index] = false; } $filters['elementid'][] = $element->id; } } /** * unset the search form id so we wont reuse the search data * until a new search is performed */ $this->setSearchFormId(null); } }