function new_query($criteria_values = NULL) { global $CONF, $USER; $result = new Query($this->module); $is_page_size_mandatory = TRUE; if (isset($this->config['is_page_size_mandatory'])) { $is_page_size_mandatory = $this->config['is_page_size_mandatory']; } // Table name if (@$this->config['table_name'] != '') { $result->table_name = $this->config['table_name']; } // Cache $cache_class = $this->config['cache_class']; $result->_cache = new $cache_class(@$CONF['query_cache_size']); // Encoder $encoder_class = $this->config['encoder_class']; $result->_encoder = new $encoder_class($result); // Filters if (@$this->config['filters']) { // Instantiate if necessary $filters = array(); foreach ($this->config['filters'] as $f) { if (is_string($f)) { if (class_exists($f)) { $filters[] = new $f(); } else { xlog(1, 'Filter not found: ' . $f, 'QUERY'); } } else { $filters[] = $f; } } $result->filters = $filters; } // Lists if (@$this->config['query_lists']) { foreach ($this->config['query_lists'] as $list_name => $list) { $result->add_list($list_name, $list); } } $result->criteria_container = new QueryCriteria(); if (@$this->config['criteria_defs']) { foreach ($this->config['criteria_defs'] as $criterion) { if ($criterion instanceof QueryCriterion) { $result->add_criterion($criterion); } else { if (is_array($criterion)) { $result->add_criterion(QueryCriterionFactory::create($criterion)); } } } if ($criteria_values) { $result->set_criteria_values($criteria_values); } } // if no page size QC has been added, then add the default if required if ($is_page_size_mandatory && !isset($result['page_size'])) { $result->add_criterion($this->create_page_size_criterion()); } // ask the criterion for any lists (date ranges for example) foreach ($result->criteria_container->get_lists() as $qs_key => $list) { $result->add_list($qs_key, $list); } // set default page size based on user prefs if (isset($result['page_size']) && isset($USER->prefs['page_size'])) { $result['page_size']->set_default($USER->prefs['page_size']); } return $result; }