From 667cf60e421cd042eec0189201407d99cb8d9a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Tue, 28 Dec 2021 15:16:08 +0800 Subject: [PATCH] * code for task #46552. --- module/mr/control.php | 15 +++++++++++++++ module/mr/js/create.js | 19 +++++++++++++++++++ module/mr/js/edit.js | 20 ++++++++++---------- module/mr/lang/en.php | 9 +++++---- module/mr/lang/zh-cn.php | 10 ++++++---- module/mr/model.php | 32 ++++++++++++++++++++++++++++++++ module/product/model.php | 2 +- 7 files changed, 88 insertions(+), 19 deletions(-) diff --git a/module/mr/control.php b/module/mr/control.php index fb54593a39..5905fff006 100644 --- a/module/mr/control.php +++ b/module/mr/control.php @@ -937,4 +937,19 @@ class mr extends control foreach($compileList as $compile) $options .= ""; $this->send($options); } + + /** + * Ajax check opened mr. + * + * @param int $gitlabID + * @param int $projectID + * @access public + * @return void + */ + public function ajaxCheckOpened($gitlabID, $projectID) + { + $sourceBranch = $this->post->sourceBranch; + $result = $this->mr->hasOpened($gitlabID, $projectID, $sourceBranch); + die(json_encode($result)); + } } diff --git a/module/mr/js/create.js b/module/mr/js/create.js index 5999afdfa9..a929fd61ad 100644 --- a/module/mr/js/create.js +++ b/module/mr/js/create.js @@ -44,6 +44,25 @@ $(function() }); }); + $('#sourceBranch').change(function() + { + var gitlabID = $('#gitlabID').val(); + var sourceProject = $('#sourceProject').val(); + repoUrl = createLink('mr', 'ajaxCheckOpened', "gitlabID=" + gitlabID + "&projectID=" + sourceProject); + + var sourceBranch = $(this).val(); + $.post(repoUrl, {"sourceBranch": sourceBranch}, function(response) + { + response = $.parseJSON(response); + if(response.result == 'fail') + { + alert(response.message); + $('#sourceBranch').val('').trigger('chosen:updated'); + return false; + } + }); + }); + /* $('#targetProject').change(function() { diff --git a/module/mr/js/edit.js b/module/mr/js/edit.js index 9c443fa984..332f0425bc 100644 --- a/module/mr/js/edit.js +++ b/module/mr/js/edit.js @@ -1,26 +1,26 @@ $(function () - { +{ $('#repoID').change(function () - { + { repoID = $(this).val(); jobUrl = createLink('mr', 'ajaxGetJobList', "repoID=" + repoID); $.get(jobUrl, function (response) - { + { $('#jobID').html('').append(response); $('#jobID').chosen().trigger("chosen:updated");; - }); - }); + }); + }); $('#jobID').change(function () - { + { jobID = $(this).val(); compileUrl = createLink('mr', 'ajaxGetCompileList', "job=" + jobID); $.get(compileUrl, function (response) - { + { $('#compile').html('').append(response); $('#compile').chosen().trigger("chosen:updated");; - }); - }); + }); + }); $("#needCI").change(function() { @@ -28,4 +28,4 @@ $(function () if(this.checked == true) $("#jobID").parent().parent().removeClass('hidden'); }); $("#needCI").trigger('change'); - }); +}); diff --git a/module/mr/lang/en.php b/module/mr/lang/en.php index 22bdd4d3b4..a7ba3050cc 100644 --- a/module/mr/lang/en.php +++ b/module/mr/lang/en.php @@ -105,6 +105,7 @@ $lang->mr->apiError->createMR = "Failed to create a merge request through API. R $lang->mr->apiError->sudo = "Unable to operate with the GitLab account bound to the current user. Reason: %s"; $lang->mr->createFailedFromAPI = "Failed to create Merge Request."; +$lang->mr->hasOpenedMR = "There are other unclosed merge requests in the current source branch."; $lang->mr->accessGitlabFailed = "Unable to connect to the GitLab server."; $lang->mr->reopenSuccess = "The merge request was reopened."; $lang->mr->closeSuccess = "Merge request closed."; @@ -119,11 +120,11 @@ $lang->mr->from = "from"; $lang->mr->to = "to"; $lang->mr->at = "at"; -$lang->mr->pipeline = "Pipeline"; -$lang->mr->pipelineSuccess = "Success"; -$lang->mr->pipelineFailed = "Failed"; +$lang->mr->pipeline = "Pipeline"; +$lang->mr->pipelineSuccess = "Success"; +$lang->mr->pipelineFailed = "Failed"; $lang->mr->pipelineCanceled = "Canceled"; -$lang->mr->pipelineUnknown = "Unknown"; +$lang->mr->pipelineUnknown = "Unknown"; $lang->mr->pipelineStatus = array(); $lang->mr->pipelineStatus['success'] = "success"; diff --git a/module/mr/lang/zh-cn.php b/module/mr/lang/zh-cn.php index a3cf83111e..f64efc541c 100644 --- a/module/mr/lang/zh-cn.php +++ b/module/mr/lang/zh-cn.php @@ -105,6 +105,7 @@ $lang->mr->apiError->createMR = "通过API创建合并请求失败,失败原 $lang->mr->apiError->sudo = "无法以当前用户绑定的GitLab账户进行操作,失败原因:%s"; $lang->mr->createFailedFromAPI = "创建合并请求失败。"; +$lang->mr->hasOpenedMR = "当前源分支存在其他未关闭的合并请求"; $lang->mr->accessGitlabFailed = "当前无法连接到GitLab服务器。"; $lang->mr->reopenSuccess = "已重新打开合并请求。"; $lang->mr->closeSuccess = "已关闭合并请求。"; @@ -119,11 +120,11 @@ $lang->mr->from = "从"; $lang->mr->to = "合并到"; $lang->mr->at = "于"; -$lang->mr->pipeline = "流水线"; -$lang->mr->pipelineSuccess = "已通过"; -$lang->mr->pipelineFailed = "未通过"; +$lang->mr->pipeline = "流水线"; +$lang->mr->pipelineSuccess = "已通过"; +$lang->mr->pipelineFailed = "未通过"; $lang->mr->pipelineCanceled = "已取消"; -$lang->mr->pipelineUnknown = "未知"; +$lang->mr->pipelineUnknown = "未知"; $lang->mr->pipelineStatus = array(); $lang->mr->pipelineStatus['success'] = "已通过"; @@ -136,6 +137,7 @@ $lang->mr->hasNoConflict = "可以合并"; $lang->mr->acceptMR = "合并"; $lang->mr->mergeFailed = "无法合并,请核对合并请求状态"; $lang->mr->mergeSuccess = "已成功合并"; +$lang->mr->mergeSuccess = "已成功合并"; $lang->mr->todomessage = "项目中指派给你了"; diff --git a/module/mr/model.php b/module/mr/model.php index b1b900ed44..00d2fc94c3 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -93,6 +93,9 @@ class mrModel extends model ->add('createdDate', helper::now()) ->get(); + $result = $this->hasOpened($MR->gitlabID, $MR->sourceProject, $MR->sourceBranch); + if($result['result'] == 'fail') return $result; + /* Exec Job */ if(isset($MR->jobID) && $MR->jobID) { @@ -1398,4 +1401,33 @@ class mrModel extends model $this->action->create('task', $task->id, 'mergedmr', '', helper::createLink('mr', 'view', "mr={$MR->id}")); } } + + /** + * Check has opened mr + * + * @param int $gitlabID + * @param int $projectID + * @param string $sourceBranch + * @access public + * @return array + */ + public function hasOpened($gitlabID, $projectID, $sourceBranch) + { + if(empty($sourceBranch)) return array('result' => 'success'); + + $dbOpenedCount = $this->dao->select('count(*) as count')->from(TABLE_MR) + ->where('gitlabID')->eq($gitlabID) + ->andWhere('sourceProject')->eq($projectID) + ->andWhere('sourceBranch')->eq($sourceBranch) + ->andWhere('status')->eq('opened') + ->andWhere('deleted')->eq('0') + ->fetch('count'); + if($dbOpenedCount > 0) return array('result' => 'fail', 'message' => $this->lang->mr->hasOpenedMR); + + $url = sprintf($this->loadModel('gitlab')->getApiRoot($gitlabID), "/projects/$projectID/merge_requests") . "&view=simple&state=opened&source_branch={$sourceBranch}"; + $response = json_decode(commonModel::http($url)); + if(!empty($response)) return array('result' => 'fail', 'message' => $this->lang->mr->hasOpenedMR); + + return array('result' => 'success'); + } } diff --git a/module/product/model.php b/module/product/model.php index 8d5c25ca81..f510624b06 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -852,7 +852,7 @@ class productModel extends model * @access public * @return array */ - public function getStories($productID, $branch, $browseType, $queryID, $moduleID, $type = 'story', $sort, $pager) + public function getStories($productID, $branch, $browseType, $queryID, $moduleID, $type = 'story', $sort = 'id_desc', $pager = null) { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getStories();