/** * Clone core folders and queries and assign * them to a given user ID * * @param integer $user_id User ID * @return array */ public function cloneCore($user_id = 0) { // Get all the default folders $folders = $this->find('list', array('user_id' => 0, 'sort' => 'ordering', 'sort_Dir' => 'asc', 'iscore' => 1)); $sq = new Query($this->_db); if (count($folders) <= 0) { $defaults = array(1 => array('Common', 'Mine', 'Custom'), 2 => array('Common', 'Mine')); foreach ($defaults as $iscore => $fldrs) { $i = 1; foreach ($fldrs as $fldr) { $f = new self($this->_db); $f->iscore = $iscore; $f->title = $fldr; $f->check(); $f->ordering = $i; $f->user_id = 0; $f->store(); switch ($f->alias) { case 'common': $j = $iscore == 1 ? $sq->populateDefaults('common', $f->id) : $sq->populateDefaults('commonnotacl', $f->id); break; case 'mine': $sq->populateDefaults('mine', $f->id); break; default: // Nothing for custom folder break; } $i++; if ($iscore == 1) { $folders[] = $f; } } } } $user_id = $user_id ?: User::get('id'); $fid = 0; // Loop through each folder foreach ($folders as $k => $folder) { // Copy the folder for the user $stqf = new self($this->_db); $stqf->bind($folder); $stqf->created_by = $user_id; $stqf->created = Date::toSql(); $stqf->id = null; $stqf->user_id = $user_id; $stqf->iscore = 0; $stqf->store(); $queries = $sq->find('list', array('folder_id' => $folder->id)); // Copy all the queries from the folder to the user foreach ($queries as $query) { $stq = new Query($this->_db); $stq->bind($query); $stq->created_by = $user_id; $stq->created = Date::toSql(); $stq->id = null; $stq->user_id = $user_id; $stq->folder_id = $stqf->get('id'); $stq->iscore = 0; $stq->store(); } // If the folder is "custom", get its ID if ($folder->alias == 'custom') { $fid = $stqf->get('id'); } $folders[$k] = $stqf; } if ($fid) { $this->_db->setQuery("UPDATE `#__support_queries` SET `folder_id`=" . $this->_db->quote($fid) . " WHERE `user_id`=" . $this->_db->quote($user_id) . " AND `iscore`=0 AND `folder_id`=0"); $this->_db->query(); } return $folders; }
/** * Build the query list * * @return void */ public function listTask() { $obj = new Ticket($this->database); // Get query list $sf = new QueryFolder($this->database); $this->view->folders = $sf->find('list', array('user_id' => User::get('id'), 'sort' => 'ordering', 'sort_Dir' => 'asc')); $sq = new Query($this->database); $queries = $sq->find('list', array('user_id' => User::get('id'), 'sort' => 'ordering', 'sort_Dir' => 'asc')); foreach ($queries as $query) { $query->query = $sq->getQuery($query->conditions); $query->count = $obj->getCount($query->query); foreach ($this->view->folders as $k => $v) { if (!isset($this->view->folders[$k]->queries)) { $this->view->folders[$k]->queries = array(); } if ($query->folder_id == $v->id) { $this->view->folders[$k]->queries[] = $query; } } } $this->view->show = 0; // Set any errors foreach ($this->getErrors() as $error) { $this->view->setError($error); } // Output the HTML $this->view->setLayout('list')->display(); }
/** * Displays a list of support tickets * * @return void */ public function displayTask() { if (User::isGuest()) { $return = base64_encode(Request::getVar('REQUEST_URI', Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&task=' . $this->_task, false, true), 'server')); App::redirect(Route::url('index.php?option=com_users&view=login&return=' . $return, false)); return; } $this->view->database = $this->database; // Create a Ticket object $obj = new Tables\Ticket($this->database); $this->view->total = 0; $this->view->rows = array(); $this->view->filters = $this->_getFilters(); // Paging $this->view->filters['limit'] = Request::getState($this->_option . '.' . $this->_controller . '.limit', 'limit', Config::get('list_limit'), 'int'); $this->view->filters['start'] = Request::getState($this->_option . '.' . $this->_controller . '.limitstart', 'limitstart', 0, 'int'); // Query to filter by $this->view->filters['show'] = Request::getState($this->_option . '.' . $this->_controller . '.show', 'show', 0, 'int'); // Search $this->view->filters['search'] = urldecode(Request::getState($this->_option . '.' . $this->_controller . '.search', 'search', '')); // Get query list $sf = new Tables\QueryFolder($this->database); $sq = new Tables\Query($this->database); if (!$this->acl->check('read', 'tickets')) { $this->view->folders = $sf->find('list', array('user_id' => 0, 'sort' => 'ordering', 'sort_Dir' => 'asc', 'iscore' => 2)); $queries = $sq->find('list', array('user_id' => 0, 'sort' => 'ordering', 'sort_Dir' => 'asc', 'iscore' => 4)); } else { $this->view->folders = $sf->find('list', array('user_id' => User::get('id'), 'sort' => 'ordering', 'sort_Dir' => 'asc')); // Does the user have any folders? if (!count($this->view->folders)) { // Get all the default folders $this->view->folders = $sf->cloneCore(User::get('id')); } $queries = $sq->find('list', array('user_id' => User::get('id'), 'sort' => 'ordering', 'sort_Dir' => 'asc')); } $this->view->filters['sort'] = 'id'; $this->view->filters['sortdir'] = 'DESC'; foreach ($queries as $query) { $filters = $this->view->filters; if ($query->id != $this->view->filters['show']) { $filters['search'] = ''; } $query->query = $sq->getQuery($query->conditions); // Get a record count $query->count = $obj->getCount($query->query, $filters); foreach ($this->view->folders as $k => $v) { if (!isset($this->view->folders[$k]->queries)) { $this->view->folders[$k]->queries = array(); } if ($query->folder_id == $v->id) { $this->view->folders[$k]->queries[] = $query; } } if ($query->id == $this->view->filters['show']) { // Search $this->view->filters['search'] = urldecode(Request::getState($this->_option . '.' . $this->_controller . '.search', 'search', '')); // Set the total for the pagination $this->view->total = $this->view->filters['search'] ? $obj->getCount($query->query, $this->view->filters) : $query->count; // Incoming sort $this->view->filters['sort'] = trim(Request::getState($this->_option . '.' . $this->_controller . '.sort', 'sort', $query->sort)); $this->view->filters['sortdir'] = trim(Request::getState($this->_option . '.' . $this->_controller . '.sortdir', 'sortdir', $query->sort_dir)); // Get the records $this->view->rows = $obj->getRecords($query->query, $this->view->filters); } } if (!$this->view->filters['show']) { // Jump back to the beginning of the folders list // and try to find the first query available // to make it the current "active" query reset($this->view->folders); foreach ($this->view->folders as $folder) { if (!empty($folder->queries)) { $query = $folder->queries[0]; $this->view->filters['show'] = $query->id; break; } else { // for no custom queries. $query = new Tables\Query($this->database); $query->count = 0; } } //$folder = reset($this->view->folders); //$query = $folder->queries[0]; // Search $this->view->filters['search'] = urldecode(Request::getState($this->_option . '.' . $this->_controller . '.search', 'search', '')); // Set the total for the pagination $this->view->total = $this->view->filters['search'] ? $obj->getCount($query->query, $this->view->filters) : $query->count; // Incoming sort $this->view->filters['sort'] = trim(Request::getState($this->_option . '.' . $this->_controller . '.sort', 'filter_order', $query->sort)); $this->view->filters['sortdir'] = trim(Request::getState($this->_option . '.' . $this->_controller . '.sortdir', 'filter_order_Dir', $query->sort_dir)); // Get the records $this->view->rows = $obj->getRecords($query->query, $this->view->filters); } $watching = new Tables\Watching($this->database); $this->view->watch = array('open' => $watching->count(array('user_id' => User::get('id'), 'open' => 1)), 'closed' => $watching->count(array('user_id' => User::get('id'), 'open' => 0))); if ($this->view->filters['show'] < 0) { $records = $watching->find(array('user_id' => User::get('id'), 'open' => $this->view->filters['show'] == -1 ? 1 : 0)); if (count($records)) { $ids = array(); foreach ($records as $record) { $ids[] = $record->ticket_id; } $this->view->rows = $obj->getRecords("(f.id IN ('" . implode("','", $ids) . "'))", $this->view->filters); } else { $this->view->rows = array(); } } // Set the page title $this->_buildTitle(); $this->view->title = $this->_title; // Set the pathway $this->_buildPathway(); $this->view->acl = $this->acl; // Output HTML foreach ($this->getErrors() as $error) { $this->view->setError($error); } $this->view->display(); }