function getTitles($ordered = true, $genericKeys = false, $ignoreLimit = false) { $app =& Dataface_Application::getInstance(); if (!isset($this->_titles[$ordered][$genericKeys][$ignoreLimit])) { $titleColumn = $this->_table->titleColumn(); $keys = array_keys($this->_table->keys()); if (!is_array($keys) || count($keys) == 0) { throw new Exception(df_translate('No primary key defined', 'There is no primary key defined on table "' . $this->_table->tablename . '". Please define a primary key.', array('table' => $this->_table->tablename, 'stack_trace' => '')), E_USER_ERROR); } $len = strlen($titleColumn); if ($titleColumn[$len - 1] != ')' and $titleColumn[$len - 1] != '`') { $titleColumn = '`' . $titleColumn . '`'; } $builder = new Dataface_QueryBuilder($this->_tablename, $this->_query); $builder->action = 'select'; $from = $builder->_from(); $sql = "SELECT `" . implode('`,`', $keys) . "`,{$titleColumn} as `__titleColumn__` {$from}"; $where = $builder->_where(); $where = $builder->_secure($where); $limit = $builder->_limit(); if (strlen($where) > 0) { $sql .= " {$where}"; } if ($ordered) { $sql .= " ORDER BY `__titleColumn__`"; } else { $sql .= $builder->_orderby(); } if (strlen($limit) > 0 and !$ignoreLimit) { $sql .= " {$limit}"; } else { if (!$ignoreLimit) { $sql .= " LIMIT 250"; } } $res = $this->dbObj->query($sql, $this->_table->db, null, true); if (!$res and !is_array($res)) { $app->refreshSchemas($this->_table->tablename); // updates meta tables such as workflow tables to make sure that they // are up to date. $res = $this->dbObj->query($sql, $this->_table->db, null, true); if (!$res and !is_array($res)) { throw new Exception(df_translate('scripts.Dataface.QueryTool.getTitles.ERROR_ERROR_RETRIEVING_TITLES', "Error retrieving title from database in Dataface_QueryTool::getTitles(): ") . $sql . xf_db_error($this->_table->db), E_USER_ERROR); } } $titles = array(); //while ( $row = xf_db_fetch_row($res) ){ foreach ($res as $row) { $title = array_pop($row); if (!$genericKeys) { $keyvals = array(); reset($keys); while (sizeof($row) > 0) { $keyvals[current($keys)] = array_shift($row); next($keys); } $keystr = ''; foreach ($keyvals as $keykey => $keyval) { $keystr .= urlencode($keykey) . "=" . urlencode($keyval) . "&"; } $keystr = substr($keystr, 0, strlen($keystr) - 1); $titles[$keystr] = $title; } else { $titles[] = $title; } } //@xf_db_free_result($res); $this->_titles[$ordered][$genericKeys][$ignoreLimit] =& $titles; } return $this->_titles[$ordered][$genericKeys][$ignoreLimit]; }