From ad05859fadce946c83958a98674653046a802137 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 11:05:48 +0800 Subject: [PATCH 01/11] * Update bugToIssue and meet the gitlab API. --- module/gitlab/model.php | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 1c91b29c8a..020009290a 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -570,12 +570,11 @@ class gitlabModel extends model } $syncedIssue = $this->getSyncedIssue($objectType = 'task', $objectID = $taskID, $gitlab); - $issue = $this->taskToIssue($gitlab, $gitlabProject, $task); if($syncedIssue) { - $issue = $this->apiUpdateIssue($gitlab, $gitlabProject, $syncedIssue, $issue); + $this->apiUpdateIssue($gitlab, $gitlabProject, $syncedIssue->BID, $issue); } else { @@ -612,7 +611,7 @@ class gitlabModel extends model if($syncedIssue) { - $this->apiUpdateIssue($gitlabID, $projectID, $syncedIssue->AID, $issue); + $this->apiUpdateIssue($gitlabID, $projectID, $syncedIssue->BID, $issue); } else { @@ -627,12 +626,12 @@ class gitlabModel extends model * Push bug to gitlab issue. * * @param int $bugID - * @param int $gitlab - * @param int $gitlabProject + * @param int $gitlabID + * @param int $projectID * @access public * @return void */ - public function pushBug($bugID, $gitlab, $gitlabProject) + public function pushBug($bugID, $gitlabID, $projectID) { $bug = $this->loadModel('bug')->getByID($bugID); @@ -643,19 +642,19 @@ class gitlabModel extends model $projectID = $result->projectID; } - $syncedIssue = $this->getSyncedIssue($objectType = 'bug', $objectID = $bugID, $gitlab); - $issue = $this->bugToIssue($gitlab, $gitlabProject, $bug); - + $syncedIssue = $this->getSyncedIssue($objectType = 'bug', $objectID = $bugID, $gitlabID); + $issue = $this->bugToIssue($gitlabID, $projectID, $bug); + if($syncedIssue) { - $issue = $this->apiUpdateIssue($gitlab, $gitlabProject, $syncedIssue, $issue); + $this->apiUpdateIssue($gitlabID, $projectID, $syncedIssue->BID, $issue); } else { - $this->createZentaoObjectLabel($gitlab, $gitlabProject, 'bug', $bugID); + $this->createZentaoObjectLabel($gitlabID, $projectID, 'bug', $bugID); $issue->labels = sprintf($this->config->gitlab->zentaoObjectLabel->name, 'bug', $bugID); - $issue = $this->apiCreateIssue($gitlab, $gitlabProject, $issue); - if($issue) $this->saveSyncedIssue('bug', $bug, $gitlab, $issue); + $issue = $this->apiCreateIssue($gitlabID, $projectID, $issue); + if($issue) $this->saveSyncedIssue('bug', $bug, $gitlabID, $issue); } } @@ -664,7 +663,7 @@ class gitlabModel extends model * * @param string $objectType * @param int $objectID - * @param int $gitlab + * @param int $gitlabID * @param int $projectID * @access public * @return void @@ -686,7 +685,7 @@ class gitlabModel extends model if($syncedIssue) { - $this->apiUpdateIssue($gitlabID, $projectID, $syncedIssue, $issue); + $this->apiUpdateIssue($gitlabID, $projectID, $syncedIssue->BID, $issue); } else { @@ -845,12 +844,12 @@ class gitlabModel extends model * Parse bug to issue. * * @param int $gitlabID - * @param int $gitlabProjectID + * @param int $projectID * @param object $story * @access public * @return object */ - public function bugToIssue($gitlabID, $gitlabProjectID, $bug) + public function bugToIssue($gitlabID, $projectID, $bug) { $map = $this->config->gitlab->maps->bug; $issue = new stdclass; @@ -874,6 +873,9 @@ class gitlabModel extends model if($value) $issue->$field = $value; } + /* issue->state is null when creating it, we should put status_event when updating it. */ + if(isset($issue->state)) $issue->status_event=$issue->state; + return $issue; } From bf9d28ef7f0f9317542dc8e81024c5e482d55d1d Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 11:13:29 +0800 Subject: [PATCH 02/11] + Update issue status when close bug. --- module/bug/control.php | 2 ++ module/gitlab/model.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/module/bug/control.php b/module/bug/control.php index f40ca35713..13714a464b 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -1247,6 +1247,8 @@ class bug extends control $this->executeHooks($bugID); + $this->loadModel('gitlab')->pushBug($bugID, $this->post->gitlab, $this->post->gitlabProject); + if($bug->toTask != 0) { /* If task is not finished, update it's status. */ diff --git a/module/gitlab/model.php b/module/gitlab/model.php index f12dd1ab3f..1fbbaa4647 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -874,7 +874,7 @@ class gitlabModel extends model } /* issue->state is null when creating it, we should put status_event when updating it. */ - if(isset($issue->state)) $issue->status_event=$issue->state; + if(isset($issue->state) and $issue->state == 'closed') $issue->state_event='close'; return $issue; } From d31184ccd3e5d83a6b5444bf2a3784cb95329bcb Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 13:32:01 +0800 Subject: [PATCH 03/11] + Add func to get gitlab and project by productID. --- module/gitlab/model.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 1fbbaa4647..802b544688 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -478,6 +478,16 @@ class gitlabModel extends model ->fetchGroup('AID'); } + public function getProjectsByProduct($productID) + { + return $this->dao->select('AID, BID as gitlabProject')->from(TABLE_RELATION) + ->where('relation')->eq('interrated') + ->andWhere('AType')->eq('gitlab') + ->andWhere('BType')->eq('gitlabProject') + ->andWhere('product')->eq($productID) + ->fetchGroup('AID'); + } + /** * Get gitlabID and projectID. * From b3a5fff35ece8ed37a421da01d97e0c19c081ea9 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 13:32:39 +0800 Subject: [PATCH 04/11] * Push bug when creating bug using productID. --- module/bug/control.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/bug/control.php b/module/bug/control.php index 13714a464b..f9ed3666a1 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -559,7 +559,9 @@ class bug extends control /* Set gitlabProjects. */ $allGitlabs = $this->loadModel('gitlab')->getPairs(); - $gitlabProjects = $this->loadModel('gitlab')->getProjectsByExecution($executionID); + if(!empty($executionID)) $gitlabProjects = $this->loadModel('gitlab')->getProjectsByExecution($executionID); + elseif(!empty($productID)) $gitlabProjects = $this->loadModel('gitlab')->getProjectsByProduct($productID); + foreach($allGitlabs as $id => $name) if($id and !isset($gitlabProjects[$id])) unset($allGitlabs[$id]); $this->view->gitlabList = $allGitlabs; $this->view->gitlabProjects = $gitlabProjects; From af524d455b6aa61129b56067c090f36846985974 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 13:43:08 +0800 Subject: [PATCH 05/11] * Resolve hidden error. --- module/bug/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/bug/model.php b/module/bug/model.php index aef3b6b84a..153b944028 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -1185,6 +1185,7 @@ class bugModel extends model foreach($openedBuilds as $openedBuild) { $build = $this->build->getByID($openedBuild); + if(empty($build)) continue; $build->bugs = trim(str_replace(",$bugID,", ',', ",$build->bugs,"), ','); $this->dao->update(TABLE_BUILD)->set('bugs')->eq($build->bugs)->where('id')->eq((int)$openedBuild)->exec(); } From 7f42605c3118d06b6cf1ca3652af7ebd7fbef297 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 13:58:53 +0800 Subject: [PATCH 06/11] * Reactivate issue when reopen the bug. --- module/gitlab/model.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 802b544688..5b4835db21 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -707,7 +707,7 @@ class gitlabModel extends model } /** - * Delete ans issue. + * Delete an issue. * * @param int $gitlabID * @param int $projectID @@ -885,6 +885,7 @@ class gitlabModel extends model /* issue->state is null when creating it, we should put status_event when updating it. */ if(isset($issue->state) and $issue->state == 'closed') $issue->state_event='close'; + if(isset($issue->state) and $issue->state == 'opened') $issue->state_event='reopen'; return $issue; } From 16c4e340e8bc4ee94318582b5d88e02d38ab9bbd Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 14:00:05 +0800 Subject: [PATCH 07/11] * Resolve whoes the bug. --- module/bug/model.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/module/bug/model.php b/module/bug/model.php index 153b944028..f93105c564 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -1178,6 +1178,9 @@ class bugModel extends model $this->dao->update(TABLE_BUG)->data($bug)->autoCheck()->where('id')->eq((int)$bugID)->exec(); $this->dao->update(TABLE_BUG)->set('activatedCount = activatedCount + 1')->where('id')->eq((int)$bugID)->exec(); + $relation = $this->loadModel('gitlab')->getGitlabIDprojectID('bug',$bugID); + if($relation) $this->loadModel('gitlab')->pushToIssue('bug', $bugID, $relation->gitlabID, $relation->projectID); + $openedBuilds = $this->post->openedBuild; if($openedBuilds) { @@ -1221,7 +1224,7 @@ class bugModel extends model $this->dao->update(TABLE_BUG)->data($bug)->autoCheck()->where('id')->eq((int)$bugID)->exec(); $objectID = $this->loadModel('gitlab')->getGitlabIDprojectID('bug',$bugID); - if($objectID) $this->loadModel('bug')->pushToissue('bug', $bugID, $objectID->gitlabID, $objectID->projectID); + if($objectID) $this->loadModel('gitlab')->pushToIssue('bug', $bugID, $objectID->gitlabID, $objectID->projectID); return common::createChanges($oldBug, $bug); } From d863acfdd918057c0349985661a5980f83107062 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 14:10:36 +0800 Subject: [PATCH 08/11] * Update issue when updating the bug. --- module/bug/model.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module/bug/model.php b/module/bug/model.php index f93105c564..9f44bebf2a 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -646,6 +646,10 @@ class bugModel extends model if(!empty($bug->resolvedBy)) $this->loadModel('score')->create('bug', 'resolve', $bugID); $this->file->updateObjectID($this->post->uid, $bugID, 'bug'); + + $relation = $this->loadModel('gitlab')->getGitlabIDprojectID('bug',$bugID); + if($relation) $this->loadModel('gitlab')->pushToIssue('bug', $bugID, $relation->gitlabID, $relation->projectID); + return common::createChanges($oldBug, $bug); } } From 391b57776630a313686566a924c4f92a562b7dfb Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 14:29:35 +0800 Subject: [PATCH 09/11] * Optimize codes for deleting issue when deleting object. --- module/bug/control.php | 2 +- module/gitlab/model.php | 4 +++- module/story/control.php | 2 +- module/task/control.php | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/module/bug/control.php b/module/bug/control.php index f9ed3666a1..fc59536a2f 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -1553,7 +1553,7 @@ class bug extends control { /* Delete related issue in gitlab. */ $relation = $this->loadModel('gitlab')->getGitlabIssueFromRelation('bug', $bugID); - $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'bug', $bugID); + $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'bug', $bugID, $relation->issueID); $this->bug->delete(TABLE_BUG, $bugID); if($bug->toTask != 0) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 5b4835db21..b4fed35049 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -713,14 +713,16 @@ class gitlabModel extends model * @param int $projectID * @param string $objectType * @param int $objectID + * @param int $issueID * @access public * @return void */ - public function deleteIssue($gitlabID, $projectID, $objectType, $objectID) + public function deleteIssue($gitlabID, $projectID, $objectType, $objectID, $issueID) { $object = $this->loadModel($objectType)->getByID($objectID); $relationID = $this->getRelationID($objectType, $objectID); if(!empty($relationID)) $this->dao->delete(TABLE_RELATION, $relationID); + $this->apiDeleteIssue($gitlabID, $projectID, $issueID); } /** diff --git a/module/story/control.php b/module/story/control.php index 1a43a84db7..e0bad0cb9e 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -989,7 +989,7 @@ class story extends control { /* Delete related issue in gitlab. */ $relation = $this->loadModel('gitlab')->getGitlabIssueFromRelation('story', $storyID); - $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'story', $storyID); + $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'story', $storyID, $relation->issueID); $this->story->delete(TABLE_STORY, $storyID); if($story->parent > 0) diff --git a/module/task/control.php b/module/task/control.php index 7cbefe3cbd..869db13dc4 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -1282,7 +1282,7 @@ class task extends control { /* Delete related issue in gitlab. */ $relation = $this->loadModel('gitlab')->getGitlabIssueFromRelation('task', $taskID); - $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'task', $taskID); + $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'task', $taskID, $relation->issueID); $this->task->delete(TABLE_TASK, $taskID); if($task->parent > 0) From 5f68564d28c280bcd286f1788de4e9b89ac3f854 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 14:52:37 +0800 Subject: [PATCH 10/11] * Optimize codes for deleting issue when deleting object. --- module/bug/control.php | 2 +- module/gitlab/model.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/bug/control.php b/module/bug/control.php index fc59536a2f..9b92147752 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -1553,7 +1553,7 @@ class bug extends control { /* Delete related issue in gitlab. */ $relation = $this->loadModel('gitlab')->getGitlabIssueFromRelation('bug', $bugID); - $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'bug', $bugID, $relation->issueID); + if(!empty($relation)) $this->loadModel('gitlab')->deleteIssue($relation->gitlabID, $relation->projectID, 'bug', $bugID, $relation->issueID); $this->bug->delete(TABLE_BUG, $bugID); if($bug->toTask != 0) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index b4fed35049..315b65c466 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -721,7 +721,7 @@ class gitlabModel extends model { $object = $this->loadModel($objectType)->getByID($objectID); $relationID = $this->getRelationID($objectType, $objectID); - if(!empty($relationID)) $this->dao->delete(TABLE_RELATION, $relationID); + if(!empty($relationID)) $this->dao->delete()->from(TABLE_RELATION)->where('id')->eq($relationID)->exec(); $this->apiDeleteIssue($gitlabID, $projectID, $issueID); } From 925a7417eaebf3048080f451e7875613d5edc174 Mon Sep 17 00:00:00 2001 From: lichengjun Date: Tue, 29 Jun 2021 14:52:49 +0800 Subject: [PATCH 11/11] * fix code. --- module/gitlab/model.php | 1 - module/story/model.php | 4 ++-- module/task/model.php | 6 +++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 1fbbaa4647..af1f28317d 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -682,7 +682,6 @@ class gitlabModel extends model if($objectType == 'story') $issue = $this->storyToIssue($gitlabID, $projectID, $object); if($objectType == 'task') $issue = $this->taskToIssue($gitlabID, $projectID, $object); if($objectType == 'bug') $issue = $this->bugToIssue($gitlabID, $projectID, $object); - if($syncedIssue) { $this->apiUpdateIssue($gitlabID, $projectID, $syncedIssue->BID, $issue); diff --git a/module/story/model.php b/module/story/model.php index 1656103c23..24e9c9b44b 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -830,8 +830,8 @@ class storyModel extends model $this->dao->insert(TABLE_STORYREVIEW)->data($reviewData)->exec(); } /* update story to gitlab issue. */ - $objectID = $this->loadModel('gitlab')->getGitlabIDprojectID('story',$storyID); - if($objectID) $this->loadModel('gitlab')->pushToissue('story', $storyID, $objectID->gitlabID, $objectID->projectID); + $objectID = $this->loadModel('gitlab')->getGitlabidProjectID('story',$storyID); + if($objectID) $this->loadModel('gitlab')->pushToIssue('story', $storyID, $objectID->gitlabID, $objectID->projectID); unset($oldStory->parent); unset($story->parent); diff --git a/module/task/model.php b/module/task/model.php index 300d3e3c68..029a9e17b4 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -122,7 +122,7 @@ class taskModel extends model $taskID = $this->dao->lastInsertID(); /* Sync this task to gitlab issue. */ - $this->loadModel('gitlab')->pushTask($taskID, $this->post->gitlab, $this->post->gitlabProject); + $this->loadModel('gitlab')->pushToIssue('task', $taskID, $this->post->gitlab, $this->post->gitlabProject); /* Mark design version.*/ if(isset($task->design) && !empty($task->design)) @@ -941,6 +941,10 @@ class taskModel extends model ->batchCheckIF($task->closedReason == 'cancel', 'finishedBy, finishedDate', 'empty') ->where('id')->eq((int)$taskID)->exec(); + /* update story to gitlab issue. */ + $objectID = $this->loadModel('gitlab')->getGitlabidProjectID('task',$taskID); + if($objectID) $this->loadModel('gitlab')->pushToIssue('task', $taskID, $objectID->gitlabID, $objectID->projectID); + if(!dao::isError()) { /* Mark design version.*/