コード例 #1
0
ファイル: IssueController.php プロジェクト: nyeholt/relapse
 /**
  * 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);
 }