From dfbf69a2110bbdd4e92fd8e47f67e99c47747a45 Mon Sep 17 00:00:00 2001 From: caoyanyi Date: Tue, 21 Jun 2022 10:33:12 +0800 Subject: [PATCH] * Finish task #57664. --- module/common/lang/menu.php | 2 +- module/mr/control.php | 31 +++++++++++------------- module/mr/model.php | 8 +++++-- module/mr/view/browse.html.php | 44 +++++++++++++++++++++++++++------- 4 files changed, 57 insertions(+), 28 deletions(-) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index a5effd5d81..278ab5452a 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -396,7 +396,7 @@ $lang->qa->dividerMenu = ',bug,testtask,caselib,'; $lang->devops->menu = new stdclass(); $lang->devops->menu->code = array('link' => "{$lang->repo->common}|repo|browse|repoID=%s", 'alias' => 'diff,view,revision,log,blame,showsynccommit'); $lang->devops->menu->compile = array('link' => "{$lang->devops->compile}|job|browse", 'subModule' => 'compile,job'); -$lang->devops->menu->mr = array('link' => "{$lang->devops->mr}|mr|browse"); +$lang->devops->menu->mr = array('link' => "{$lang->devops->mr}|mr|browse|repoID=%s"); $lang->devops->menu->gitlab = array('link' => "GitLab|gitlab|browse", 'alias' => 'create,edit'); $lang->devops->menu->sonarqube = array('link' => "SonarQube|sonarqube|browse"); $lang->devops->menu->jenkins = array('link' => "Jenkins|jenkins|browse", 'alias' => 'create,edit'); diff --git a/module/mr/control.php b/module/mr/control.php index 633050d734..003b06817b 100644 --- a/module/mr/control.php +++ b/module/mr/control.php @@ -1,23 +1,10 @@ session->repoID); */ - $this->loadModel('ci')->setMenu(); - } - /** * Browse mr. * + * @param int $repoID * @param string $mode * @param string $param * @param int $objectID @@ -28,13 +15,20 @@ class mr extends control * @access public * @return void */ - public function browse($mode = 'status', $param = 'opened', $objectID = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) + public function browse($repoID = 0, $mode = 'status', $param = 'opened', $objectID = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { $this->app->loadClass('pager', $static = true); $pager = new pager($recTotal, $recPerPage, $pageID); - $projects = $this->mr->getAllGitlabProjects(); - $MRList = $this->mr->getList($mode, $param, $orderBy, $pager, empty($projects) ? false : $projects); + $repos = $this->loadModel('repo')->getListBySCM('Gitlab'); + if(empty($repos)) $this->locate($this->repo->createLink('create')); + + if($repoID == 0) $repoID = $this->repo->saveState($repoID, $objectID); + $repo = $this->repo->getRepoByID($repoID); + $this->loadModel('ci')->setMenu(); + + $projects = $this->mr->getAllGitlabProjects($repoID); + $MRList = $this->mr->getList($mode, $param, $orderBy, $pager, empty($projects) ? false : $projects, $repoID); /* Save current URI to session. */ $this->session->set('mrList', $this->app->getURI(true), 'repo'); @@ -62,7 +56,10 @@ class mr extends control $this->view->pager = $pager; $this->view->mode = $mode; $this->view->param = $param; + $this->view->repoID = $repoID; $this->view->objectID = $objectID; + $this->view->repos = $repos; + $this->view->repo = $repo; $this->view->orderBy = $orderBy; $this->view->openIDList = $openIDList; $this->view->users = $this->loadModel('user')->getPairs('noletter'); diff --git a/module/mr/model.php b/module/mr/model.php index 995ea43fbd..113fec43b4 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -43,10 +43,11 @@ class mrModel extends model * @param string $orderBy * @param object $pager * @param array|bool $filterProjects + * @param int $repoID * @access public * @return array */ - public function getList($mode = 'all', $param = 'all', $orderBy = 'id_desc', $pager = null, $filterProjects = array()) + public function getList($mode = 'all', $param = 'all', $orderBy = 'id_desc', $pager = null, $filterProjects = array(), $repoID = 0) { /* If filterProjects equals false,it means no permission. */ if($filterProjects === false) return array(); @@ -70,6 +71,7 @@ class mrModel extends model ->beginIF($mode == 'assignee' and $param != 'all')->andWhere('assignee')->eq($param)->fi() ->beginIF($mode == 'creator' and $param != 'all')->andWhere('createdBy')->eq($param)->fi() ->beginIF($filterProjectSql)->andWhere($filterProjectSql)->fi() + ->beginIF($repoID)->andWhere('repoID')->eq($repoID)->fi() ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); @@ -96,13 +98,15 @@ class mrModel extends model /** * Get all gitlab server projects. If not an administrator, the role of project member should be higher than guest. * + * @param int $repoID * @access public * @return array */ - public function getAllGitlabProjects() + public function getAllGitlabProjects($repoID = 0) { $gitlabIDList = $this->dao->select('distinct gitlabID')->from(TABLE_MR) ->where('deleted')->eq('0') + ->beginIF($repoID)->andWhere('repoID')->eq($repoID)->fi() ->fetchPairs('gitlabID'); $allProjects = array(); diff --git a/module/mr/view/browse.html.php b/module/mr/view/browse.html.php index 056075e64d..2d28e541aa 100644 --- a/module/mr/view/browse.html.php +++ b/module/mr/view/browse.html.php @@ -10,28 +10,56 @@ ?>