コード例 #1
0
ファイル: listfilter.php プロジェクト: LGBGit/tierno
 /**
  * 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);
     }
 }