/** * Cache method to populate auto-complete options * * @param plgFabrik_Element $elementModel Element model * @param string $search Search string * @param array $opts Options, 'label' => field to use for label (db join) * * @since 3.0.7 * * @return string json encoded search results */ public static function cacheAutoCompleteOptions($elementModel, $search, $opts = array()) { $listModel = $elementModel->getListModel(); $table = $listModel->getTable(); $db = $listModel->getDb(); $name = $elementModel->getFullName(false, false); $query = $db->getQuery(true); $params = $elementModel->getParams(); $format = $params->get('date_table_format'); $elementModel->strftimeTFormatToMySQL($format); $search = $db->quote('%' . addslashes($search) . '%'); $query->select('DISTINCT(' . $name . ') AS value, ' . $name . ' AS text')->from($table->db_table_name)->where($name . ' LIKE ' . $search . ' OR DATE_FORMAT(' . $name . ', "' . $format . '" ) LIKE ' . $search); $db->setQuery($query); $tmp = $db->loadObjectList(); $ddData = array(); foreach ($tmp as &$t) { $elementModel->toLabel($t->text); if (!array_key_exists($t->text, $ddData)) { $ddData[$t->text] = $t; } } $ddData = array_values($ddData); echo json_encode($ddData); }
/** * Cache method to populate autocomplete options * * @param plgFabrik_Element $elementModel element model * @param string $search search string * @param array $opts options, 'label' => field to use for label (db join) * * @since 3.0.7 * * @return string json encoded search results */ public static function cacheAutoCompleteOptions($elementModel, $search, $opts = array()) { $params = $elementModel->getParams(); $c = $elementModel->getLabelOrConcatVal(); if (!strstr($c, 'CONCAT')) { $c = FabrikString::safeColName($c); } $filterMethod = $elementModel->getFilterBuildMethod(); if ($filterMethod == 1) { $join = $elementModel->getJoin()->table_join; $opts = array(); if (!strstr($c, 'CONCAT')) { $opts['label'] = strstr($c, '.') ? $c : $join . '.' . $c; } else { $opts['label'] = $c; } return parent::cacheAutoCompleteOptions($elementModel, $search, $opts); } // $$$ hugh - added 'autocomplete_how', currently just "starts_with" or "contains" // default to "contains" for backward compat. $elementModel->autocomplete_where = $elementModel->_autocompleteWhere($params->get('dbjoin_autocomplete_how', 'contains'), $c, $search); $opts = array('mode' => 'filter'); $tmp = $elementModel->_getOptions(array(), 0, true, $opts); return json_encode($tmp); }