public static function get($paramarray = array())
{
$params = array();
$fns = array('get_results', 'get_row', 'get_value');
$select = '';
// what to select -- by default, everything
foreach (UserGroup::default_fields() as $field => $value) {
$select .= '' == $select ? "{groups}.{$field}" : ", {groups}.{$field}";
}
// defaults
$orderby = 'id ASC';
$nolimit = true;
// Put incoming parameters into the local scope
$paramarray = Utils::get_params($paramarray);
// Transact on possible multiple sets of where information that is to be OR'ed
if (isset($paramarray['where']) && is_array($paramarray['where'])) {
$wheresets = $paramarray['where'];
} else {
$wheresets = array(array());
}
$wheres = array();
$join = '';
if (isset($paramarray['where']) && is_string($paramarray['where'])) {
$wheres[] = $paramarray['where'];
} else {
foreach ($wheresets as $paramset) {
// safety mechanism to prevent empty queries
$where = array();
$paramset = array_merge((array) $paramarray, (array) $paramset);
$default_fields = UserGroup::default_fields();
foreach (UserGroup::default_fields() as $field => $scrap) {
if (!isset($paramset[$field])) {
continue;
}
switch ($field) {
case 'id':
if (!is_numeric($paramset[$field])) {
continue;
}
default:
$where[] = "{$field} = ?";
$params[] = $paramset[$field];
}
}
if (count($where) > 0) {
$wheres[] = ' (' . implode(' AND ', $where) . ') ';
}
}
}
// Get any full-query parameters
$possible = array('fetch_fn', 'count', 'nolimit', 'limit', 'offset');
foreach ($possible as $varname) {
if (isset($paramarray[$varname])) {
${$varname} = $paramarray[$varname];
}
}
if (isset($fetch_fn)) {
if (!in_array($fetch_fn, $fns)) {
$fetch_fn = $fns[0];
}
} else {
$fetch_fn = $fns[0];
}
// is a count being request?
if (isset($count)) {
$select = "COUNT({$count})";
$fetch_fn = 'get_value';
$orderby = '';
}
// Are we asking for a single UserGroup or possibly multiple UserGroups
$single = false;
if (isset($limit)) {
$single = $limit == 1;
$limit = " LIMIT {$limit}";
if (isset($offset)) {
$limit .= " OFFSET {$offset}";
}
}
if (isset($nolimit)) {
$limit = '';
}
$query = ' SELECT ' . $select . ' FROM {groups} ' . $join;
if (count($wheres) > 0) {
$query .= ' WHERE ' . implode(" \nOR\n ", $wheres);
}
$query .= ($orderby == '' ? '' : ' ORDER BY ' . $orderby) . $limit;
DB::set_fetch_mode(\PDO::FETCH_CLASS);
$results = DB::$fetch_fn($query, $params, 'UserGroup');
if ('get_results' != $fetch_fn) {
// return the results
return $results;
} elseif (is_array($results)) {
$c = __CLASS__;
$return_value = new $c($results);
$return_value->get_param_cache = $paramarray;
return $return_value;
}
}