diff --git a/module/mr/control.php b/module/mr/control.php index 5b856ef19b..cf57c98c72 100644 --- a/module/mr/control.php +++ b/module/mr/control.php @@ -14,56 +14,30 @@ class mr extends control */ public function browse($objectID = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { - $this->loadModel('mr'); - - $mrList = $this->mr->getList(0, $orderBy); - - /* Pager. */ $this->app->loadClass('pager', $static = true); - $recTotal = count($mrList); - $pager = new pager($recTotal, $recPerPage, $pageID); - $mrList = array_chunk($mrList, $pager->recPerPage); - - $this->view->title = $this->lang->mr->common . $this->lang->colon . $this->lang->mr->browse; + $pager = new pager($recTotal, $recPerPage, $pageID); + $this->view->title = $this->lang->mr->common . $this->lang->colon . $this->lang->mr->browse; + $this->view->MRList = $this->mr->getList(0, $orderBy, $pager); $this->view->orderBy = $orderBy; $this->view->objectID = $objectID; $this->view->pager = $pager; - $this->view->mrList = empty($mrList) ? $mrList: $mrList[$pageID - 1];; - $this->display(); - } - - public function list($mrID, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) - { - $this->loadModel('gitlab'); - $gitlab = $this->mr->getGitlabProjectByRepo($mrID); - $mrList = $this->mr->apiGetMRList($gitlab->gitlabID, $gitlab->projectID); - - $this->app->loadClass('pager', $static = true); - $recTotal = count($mrList); - $pager = new pager($recTotal, $recPerPage, $pageID); - $mrList = array_chunk($mrList, $pager->recPerPage); - - $this->view->title = $this->lang->mr->browse; - $this->view->orderBy = $orderBy; - $this->view->pager = $pager; - $this->view->mrList = empty($mrList) ? $mrList: $mrList[$pageID - 1];; - $this->display(); } + /** + * Create MR function. + * + * @access public + * @return void + */ public function create() { - $this->loadModel('mr'); if($_POST) { - $mrID = $this->mr->create(); - + $this->mr->create(); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - - if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $mrID)); - $link = helper::createLink('mr', 'browse', '', '', false); - return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $link)); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse'))); } $this->view->title = $this->lang->mr->create; @@ -73,28 +47,29 @@ class mr extends control } /** - * Delete a mr. + * update * - * @param int $gitlabID - * @param int $projectID - * @param int $mrID * @access public * @return void */ - public function delete($gitlabID, $projectID, $mrID, $confim = 'no') - { - if($confim != 'yes') die(js::confirm($this->lang->gitlab->confirmDelete, inlink('delete', "productID=$projectID&gitlabID=$gitlabID&mrID=$mrID&confirm=yes"))); - - $this->mr->apiDeleteMR($gitlabID, $projectID, $mrID); - - $this->gitlab->delete(TABLE_PIPELINE, $id); - die(js::reload('parent')); - } - public function update() { } + /** + * Delete a mr. + * + * @param int $MR + * @access public + * @return void + */ + public function delete($MR, $confim = 'no') + { + if($confim != 'yes') die(js::confirm($this->lang->gitlab->confirmDelete, inlink('delete', "productID=$projectID&gitlabID=$gitlabID&MR=$MR&confirm=yes"))); + $this->mr->apiDeleteMR($MR); + die(js::reload('parent')); + } + /** * AJAX: Get forked projects. * @@ -109,6 +84,7 @@ class mr extends control if(!$projects) return $this->send(array('message' => array())); $projectIdList = $projectIdList ? explode(',', $projectIdList) : null; + $options = ""; foreach($projects as $project) { @@ -116,7 +92,6 @@ class mr extends control $options .= ""; } - return $this->send($options); + $this->send($options); } } - diff --git a/module/mr/js/create.js b/module/mr/js/create.js index 3ab3aa2b2f..a1492677f9 100644 --- a/module/mr/js/create.js +++ b/module/mr/js/create.js @@ -27,6 +27,4 @@ $(function() $('#targetProject').chosen().trigger("chosen:updated");; }); - }); - diff --git a/module/mr/lang/zh-cn.php b/module/mr/lang/zh-cn.php index b4da6d65be..326919596f 100644 --- a/module/mr/lang/zh-cn.php +++ b/module/mr/lang/zh-cn.php @@ -5,28 +5,20 @@ $lang->mr->browse = "浏览{$lang->mr->common}"; $lang->mr->list = $lang->mr->browse; $lang->mr->edit = "编辑{$lang->mr->common}"; $lang->mr->delete = "删除{$lang->mr->common}"; -$lang->mr->detail = "详情"; +$lang->mr->view = "详情"; -$lang->mr->addGitlab = "添加GitLab项目"; - -$lang->mr->id = 'ID'; -$lang->mr->iid = "{$lang->mr->common}ID"; -$lang->mr->name = '名称'; -$lang->mr->title = $lang->mr->name; -$lang->mr->status = '状态'; -$lang->mr->author = '创建人'; -$lang->mr->assignee = '指派给'; -$lang->mr->reviewer = '评审人'; -$lang->mr->link = 'GitLab链接'; -$lang->mr->mrStatus = '合并状态'; +$lang->mr->id = 'ID'; +$lang->mr->iid = "MR原始ID"; +$lang->mr->name = '名称'; +$lang->mr->status = '状态'; +$lang->mr->author = '创建人'; +$lang->mr->assignee = '指派给'; +$lang->mr->reviewer = '评审人'; +$lang->mr->link = 'GitLab链接'; +$lang->mr->canMerge = '是否可合并'; $lang->mr->confirmDelete = '确认删除该merge request吗?'; $lang->mr->sourceProject = '源项目'; $lang->mr->sourceBranch = '源分支'; $lang->mr->targetProject = '目标项目'; $lang->mr->targetBranch = '目标分支'; - -$lang->mr->compareBranch = '比较分支'; -$lang->mr->and = '并'; -$lang->mr->continue = '继续'; -$lang->mr->cmpAndContinue = $lang->mr->compareBranch . $lang->mr->and . $lang->mr->continue; diff --git a/module/mr/model.php b/module/mr/model.php index 1b9cd670fd..91c2ccb20c 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -23,18 +23,6 @@ class mrModel extends model $this->loadModel('gitlab'); } - public function getGitlabProjectByRepo($repoID) - { - $repo = $this->loadModel('repo')->getRepoByID($repoID); - - $gitlab = new stdclass; - $gitlab->product = explode(',', $repo->product); - $gitlab->gitlabID = $repo->gitlab; - $gitlab->projectID = $repo->project; - - return $gitlab; - } - /** * Get a MR by id. * @@ -50,63 +38,58 @@ class mrModel extends model /** * Get MR list of gitlab project. * - * @param int $orderBy - * @param object $pager + * @param string $orderBy + * @param object $pager * @access public * @return array */ public function getList($orderBy = 'id_desc', $pager = null) { - $mrList = $this->dao->select('*') - ->from(TABLE_MR) - ->where('deleted')->eq('0') - ->orderBy($orderBy) - ->page($pager) - ->fetchAll('id'); + $MRList = $this->dao->select('*') + ->from(TABLE_MR) + ->where('deleted')->eq('0') + ->orderBy($orderBy) + ->page($pager) + ->fetchAll('id'); - if(!empty($mrList)) - { - $lists = array(); - foreach($mrList as $mr) - { - foreach($this->apiGetMRList($mr->gitlabID, $mr->projectID) as $subMR) - { - $list = new stdclass; + foreach($MRList as $MR) $MR = $this->processMR($MR); - $list->id = $subMR->id; - $list->projectID = $subMR->project_id; - $list->gitlabID = $mr->gitlabID; - $list->mrID = $subMR->iid; - $list->name = $subMR->title; - $list->target_branch = $subMR->target_branch; - $list->source_branch = $subMR->source_branch; - $list->status = $subMR->state; - $list->mrStatus = $subMR->merge_status; - - $lists[] = $list; - } - } - return $lists; - } + return $MRList; } /** - * Delete MR. + * ProcessMR info by api. + * + * @param object $MR + * @access public + * @return object + */ + public function processMR($MR) + { + $rawMR = $this->apiGetSingleMR($MR->gitlabID, $MR->projectID, $MR->id); + + $MR->name = $rawMR->title; + $MR->targetBranch = $rawMR->target_branch; + $MR->sourceBranch = $rawMR->source_branch; + $MR->targetProject = $rawMR->target_project_id; + $MR->canMerge = $rawMR->merge_status; + $MR->status = $rawMR->state; + return $MR; + } + + /** + * Delete one MR. * * condition: when user deleting a repo. * - * @param int $gitlabID - * @param int $projectID - * @param int $mrID + * @param int $MRID * @access public * @return void */ - public function deleteMR($gitlabID, $projectID, $mrID ) + public function deleteMR($MRID) { $this->dao->delete()->from(TABLE_MR) - ->where('gitlabID')->eq($gitlabID) - ->andWhere('projectID')->eq($projectID) - ->andWhere('mrID')->eq($mrID) + ->andWhere('mrID')->eq($MRID) ->exec(); } @@ -118,14 +101,20 @@ class mrModel extends model */ public function getPairs($repoID) { - $mr = $this->dao->select('id,title') - ->from(TABLE_MR) - ->where('deleted')->eq('0') - ->AndWhere('repoID')->eq($repoID) - ->orderBy('id')->fetchPairs('id', 'title'); - return array('' => '') + $mr; + $MR = $this->dao->select('id,title') + ->from(TABLE_MR) + ->where('deleted')->eq('0') + ->AndWhere('repoID')->eq($repoID) + ->orderBy('id')->fetchPairs('id', 'title'); + return array('' => '') + $MR; } + /** + * Create MR function. + * + * @access public + * @return bool + */ public function create() { $gitlabID = $this->post->gitlabID; @@ -137,62 +126,48 @@ class mrModel extends model $targetBranch = $this->post->targetBranch; if($projectID != $sourceProject) return false; - - } - - /** - * Get gitlab api base url by gitlab ID. - * - * @param int $gitlabID - * @access public - * @return string - */ - public function getApiRoot($gitlabID) - { - return $this->gitlab->getApiRoot($gitlabID); } /** * Get Forks of a project. * + * @docs https://docs.gitlab.com/ee/api/projects.html#list-forks-of-a-project * @param int $gitlabID * @param int $projectID * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/projects.html#list-forks-of-a-project */ public function apiGetForks($gitlabID, $projectID) { $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/forks"); - $mr = new stdclass; return json_decode(commonModel::http($url)); } /** * Create MR by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#create-mr * @param int $gitlabID * @param int $projectID * @param object $params * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#create-mr */ public function apiCreateMR($gitlabID, $projectID, $params) { $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests"); - $mr = new stdclass; - return json_decode(commonModel::http($url, $mr)); + $MR = new stdclass; + return json_decode(commonModel::http($url, $MR)); } /** * Get MR list by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#list-project-merge-requests * @param int $gitlabID * @param int $projectID * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#list-project-merge-requests */ public function apiGetMRList($gitlabID, $projectID) { @@ -203,99 +178,98 @@ class mrModel extends model /** * Get single MR by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr * @param int $gitlabID * @param int $projectID - * @param int $mrID + * @param int $MRID * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr */ - public function apiGetSingleMR($gitlabID, $projectID, $mrID) + public function apiGetSingleMR($gitlabID, $projectID, $MRID) { - $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$mrID"); + $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$MRID"); return json_decode(commonModel::http($url)); } /** * Update MR by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#update-mr * @param int $gitlabID * @param int $projectID - * @param int $mrID + * @param int $MRID * @param object $params * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#update-mr */ - public function apiUpdateMR($gitlabID, $projectID, $mrID, $params) + public function apiUpdateMR($gitlabID, $projectID, $MRID, $params) { - $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$mrID"); - $mr = new stdclass; - return json_decode(commonModel::http($url, $mr, $options = array(CURLOPT_CUSTOMREQUEST => 'PUT'))); + $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$MRID"); + return json_decode(commonModel::http($url, $MR, $options = array(CURLOPT_CUSTOMREQUEST => 'PUT'))); } /** * Delete MR by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#delete-a-merge-request * @param int $gitlabID * @param int $projectID - * @param int $mrID + * @param int $MRID * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#delete-a-merge-request */ - public function apiDeleteMR($gitlabID, $projectID, $mrID) + public function apiDeleteMR($gitlabID, $projectID, $MRID) { - $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$mrID"); + $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$MRID"); return json_decode(commonModel::http($url, null, array(CURLOPT_CUSTOMREQUEST => 'DELETE'))); } /** * Accept MR by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr * @param int $gitlabID * @param int $projectID - * @param int $mrID + * @param int $MRID * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr */ - public function apiAcceptMR($gitlabID, $projectID, $mrID) + public function apiAcceptMR($gitlabID, $projectID, $MRID) { - $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$mrID"); + $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$MRID"); return json_decode(commonModel::http($url, $data, $options = array(CURLOPT_CUSTOMREQUEST => 'PUT'))); } /** * Get MR diff versions by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#get-mr-diff-versions * @param int $gitlabID * @param int $projectID - * @param int $mrID + * @param int $MRID * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#get-mr-diff-versions */ - public function apiGetDiffVersions($gitlabID, $projectID, $mrID) + public function apiGetDiffVersions($gitlabID, $projectID, $MRID) { - $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$mrID"); + $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$MRID"); return json_decode(commonModel::http($url)); } /** * Get single diff version by API. * + * @docs https://docs.gitlab.com/ee/api/merge_requests.html#get-a-single-mr-diff-version * @param int $gitlabID * @param int $projectID - * @param int $mrID + * @param int $MRID * @param int $versionID * @access public * @return object - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#get-a-single-mr-diff-version */ - public function apiGetSingleDiffVersion($gitlabID, $projectID, $mrID, $versionID) + public function apiGetSingleDiffVersion($gitlabID, $projectID, $MRID, $versionID) { - $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$mrID/versions/$versionID"); + $url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/merge_requests/$MRID/versions/$versionID"); return json_decode(commonModel::http($url)); } }