public function index(DataObjectCollection $collection, $sh = '', &$c_query = null) { $display_fields = array(); $model = $collection->getModel(); // If selection of display fields is disabled, don't set them up if (!$this->search->disable_field_selection) { foreach ($model->getFields() as $fieldname => $field) { if ($fieldname != 'id' && $fieldname != 'usercompanyid' && substr($fieldname, -3) != '_id' && !isset($model->belongsToField[$fieldname])) { $display_fields[$fieldname] = $field->tag; } } $selected_fields = array(); if (isset($this->_data['Search']['display_fields'])) { foreach ($this->_data['Search']['display_fields'] as $fieldname => $field) { $selected_fields[$fieldname] = prettify($field); } } else { foreach ($collection->getFields() as $fieldname => $field) { if (substr($fieldname, -3) != '_id') { $selected_fields[$fieldname] = $field->tag; } } } $this->view->set('selected_fields', $selected_fields); $display_fields = array_diff($display_fields, $selected_fields); $this->view->set('display_fields', $display_fields); } if (!isset($this->_data['ajax_print'])) { parent::index($collection, $sh, $c_query); return; } showtime('start-controller-index'); $collection->setParams(); if (!$sh instanceof SearchHandler) { $sh = $this->setSearchHandler($collection); } showtime('sh-extracted'); // Need to set the orderby of the collection in the searchhandler? // But if this is set in the collection, seems to take it // so why not here? showtime('pre-load'); // TODO: Printing needs looking at; the model is too complicated and // therefore maintenance is difficult. Needs breaking down into more // logical discrete units. // BEWARE: the following may not work for all cases // needs extensive testing; this is implemented for selectorController output if ($this->_data['session_key'] == 'undefined') { $sh->setLimit(0); $collection->load($sh); $this->PrintCollection($collection); } // echo 'controller::index setting printing session data<br>'; // in this instance we can only pass the data through the session // but it's only the collection name and search id :-) $_SESSION['printing'][$this->_data['session_key']]['collection'] = get_class($collection); $_SESSION['printing'][$this->_data['session_key']]['search_id'] = $this->_data['search_id']; exit; showtime('end-controller-index'); }
public function __construct(DataObjectCollection $collection, $use_session = TRUE, $use_system_company = TRUE, $search_id = '') { $tablename = $collection->getViewName(); $this->tablename = $tablename; $this->use_session = $use_session; $this->search_id = $search_id; $this->constraints = new ConstraintChain(); $this->use_system_company = $use_system_company; $this->setOrderby($collection->orderby, $collection->direction); if (strpos($tablename, ' ')) { $this->tablename = substr($tablename, strrpos($tablename, ' ') + 1); } $cache_id = array('searches', EGS_USERNAME, $this->tablename . '_' . $this->search_id); $cache = Cache::Instance(); $cached_search = $cache->get($cache_id, 1800); if ($this->use_session && $cached_search !== FALSE) { foreach ($cached_search as $key => $val) { if ($key == 'constraints' || $key == 'fields') { $this->{$key} = unserialize($val); } else { $this->{$key} = $val; } } debug('SearchHandler::__construct ' . $tablename . ' ' . print_r($this, TRUE)); // echo 'SearchHandler::__construct<pre>'.print_r($this, true).'</pre>'; } elseif ($this->use_system_company) { //if usercompanyid is a field, then it's always a constraint // TODO: Need to revisit this; // gets added in DataObject(?)/DataObjectCollection(?) // if the search is access controlled $model = $collection->getModel(); if ($model->isField('usercompanyid')) { $this->constraints = new ConstraintChain(); $this->addConstraint(new Constraint('usercompanyid', '=', EGS_COMPANY_ID)); } } $this->collection = $collection; }