/** * Generates the appropriate query for returning a list of issues * * @param array $where * @return arrayobject */ protected function getIssueList($where = array()) { $sortDir = $this->_getParam('sortorder', $this->_getParam('dir', 'desc')); if ($sortDir == 'up' || $sortDir == 'asc') { $sortDir = 'asc'; $issueParams = array('dir' => 'up'); } else { $sortDir = 'desc'; $issueParams = array('dir' => 'down'); } $mineOnly = $this->_getParam('mineOnly'); if ($mineOnly) { $where['issue.userid='] = za()->getUser()->getUsername(); $issueParams['mineOnly'] = $mineOnly; } $query = $this->_getParam('query'); if (mb_strlen($query) >= 2) { $where[] = new Zend_Db_Expr("issue.title like " . $this->issueService->dbService->quote('%' . $query . '%') . " OR issue.description like " . $this->issueService->dbService->quote('%' . $query . '%')); } $filter = $this->_getParam('titletext'); if (mb_strlen($filter) >= 2) { // add some filtering to the query $where['issue.title like '] = '%' . $filter . '%'; $issueParams['titletext'] = $filter; } $filter = $this->_getParam('severity'); if (mb_strlen($filter)) { // add some filtering to the query $where['issue.severity = '] = $filter; $issueParams['severity'] = $filter; } $filter = $this->_getParam('status'); if ($filter !== null && !is_array($filter) && strlen($filter)) { $filter = array($filter); $issueParams['status'] = $filter; } if (is_array($filter)) { $where['status'] = $filter; $issueParams['status'] = $filter; } $filter = $this->_getParam('type'); if (mb_strlen($filter)) { // add some filtering to the query $where['issue.issuetype = '] = $filter; $issueParams['type'] = $filter; } $filter = $this->_getParam('clientid'); if (mb_strlen($filter)) { // add some filtering to the query $where['issue.clientid = '] = $filter; $issueParams['clientid'] = $filter; } $filter = $this->_getParam('projectid'); if (mb_strlen($filter)) { // add some filtering to the query $where['issue.projectid = '] = $filter; $issueParams['projectid'] = $filter; } $filter = $this->_getParam('startdate'); if (mb_strlen($filter)) { $where['issue.updated >= '] = date('Y-m-d 00:00:00', strtotime($filter)); $issueParams['startdate'] = $filter; } $filter = $this->_getParam('enddate'); if (mb_strlen($filter)) { $where['issue.updated <= '] = date('Y-m-d 23:59:59', strtotime($filter)); $issueParams['enddate'] = $filter; } // If not a User, can only see non-private issues if (!za()->getUser()->hasRole(User::ROLE_USER)) { $where['issue.isprivate='] = 0; } $sort = $this->_getParam('sortname', $this->_getParam('sort', 'updated')); $this->view->sort = $sort; $issueParams['sort'] = $sort; $this->view->sortDir = $sortDir; $tmp = new Issue(); $this->view->severities = $tmp->constraints['severity']->getValues(); $this->view->types = $tmp->constraints['issuetype']->getValues(); $this->view->statuses = $tmp->constraints['status']->getValues(); $sort .= ' ' . $sortDir; $totalCount = $this->issueService->getIssueCount($where); $this->view->pagerName = 'page'; $currentPage = ifset($this->_getAllParams(), $this->view->pagerName, 1); $this->view->clients = $this->clientService->getClients(); $this->view->totalCount = $totalCount; $this->view->listSize = $this->_getParam('rp', za()->getConfig('project_list_size', 10)); if ($this->_getParam("unlimited")) { $currentPage = null; } $this->view->searchParams = $issueParams; return $this->issueService->getIssues($where, $sort, $currentPage, $this->view->listSize); }