useDbConfig); $tableName = $db->fullTableName($this, false); //Get the values for the specified column (database and version specific, needs testing) $result = $this->query("SHOW COLUMNS FROM {$tableName} LIKE '{$columnName}'"); //figure out where in the result our Types are (this varies between mysql versions) $types = null; if ( isset( $result[0]['COLUMNS']['Type'] ) ) { //MySQL 5 $types = $result[0]['COLUMNS']['Type']; $default = $result[0]['COLUMNS']['Default']; } elseif ( isset( $result[0][0]['Type'] ) ) { //MySQL 4 $types = $result[0][0]['Type']; $default = $result[0][0]['Default']; } else { //types return not accounted for return array(); } //Get the values return array_flip(array_merge(array(''), // MySQL sets 0 to be the empty string explode("','", preg_replace("/(enum)\('(.+?)'\)/","\\2", $types)) )); } //end getEnumValues /************************************************************************** ************************************************************************** ************************************************************************** * function: statMerge * - Merges summary data from $b into $a */ function statsMerge (&$a, $b) { if (!isset($b)) return; if (!isset($a)) { $a = $b; } elseif (!is_array($a) && !is_array($b)) { $a += $b; } elseif (is_array($a) && is_array($b)) { foreach (array_intersect_key($a, $b) AS $k => $v) { if (preg_match("/^sp\./", $k)) $a[$k] .= '; ' . $b[$k]; else $this->statsMerge($a[$k], $b[$k]); } $a = array_merge($a, array_diff_key($b, $a)); } else { die ("Can't yet merge array and non-array stats"); } } // Overriding pagination, since the stupid count mechanism blows. // This is also a crappy solution, especially if the query returns // a really large number of rows. However, trying to untagle this // without changing a bunch of core code is near impossible. //var $paginate_rows_save; function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, &$extra = null) { /* pr("paginate"); */ /* pr(array_merge(compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive', 'extra'))); */ if ($page > 1 && isset($limit)) $offset = ($page - 1) * $limit; else $offset = 0; if (!isset($extra['results'])) die("Why isn't results set!?!"); $results = $extra['results']; unset($extra['results']); return array_slice($results, $offset, $limit); } function paginateCount($conditions = null, $recursive = null, &$extra = null) { /* pr("paginateCount"); */ /* pr(compact('conditions', 'recursive', 'extra')); */ if (isset($extra['results'])) { // Beauty! The results are already in! // This happens if the user sets up a complex query // and passes us the result to paginate. $results = $extra['results']; } elseif (isset($extra['query'])) { // Perform the query directly... forget all the find B.S. $results = $this->query($extra['query']); } else { if (!isset($recursive)) $recursive = $this->recursive; $parameters = array_merge(compact('conditions', 'recursive'), $extra); $results = $this->find('all', $parameters); } //$this->paginate_rows_save = $results; //return count($this->paginate_rows_save); if (!isset($extra['results'])) $extra['results'] = $results; return count($results); } }