From db68646908a5b28ad0a17751616fd13900cd91b3 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 09:31:29 +0800 Subject: [PATCH 1/7] - Remove old pushObject function. --- module/gitlab/model.php | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 568d05c41f..d849c5d6d4 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -911,20 +911,6 @@ class gitlabModel extends model commonModel::http($url, $options = array(CURLOPT_CUSTOMREQUEST => 'DELETE')); } - public function pushTask($gitlabID, $projectID, $task) - { - $task->label = $this->config->gitlab->taskLabel->name; - $response = $this->apiCreateIssue($gitlabID, $projectID, $task); - return $response; - } - - public function pushBug($gitlabID, $projectID, $bug) - { - $bug->label = $this->config->gitlab->bugLabel->name; - $response = $this->apiCreateIssue($gitlabID, $projectID, $bug); - return $response; - } - /** * webhook check token. * From 3906982fdb04b25300eabce04faeb2accfd1031b Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 09:36:34 +0800 Subject: [PATCH 2/7] * Rename syncObject to pushObject. --- module/gitlab/model.php | 8 ++++---- module/task/model.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index d849c5d6d4..41b95ddf97 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -550,7 +550,7 @@ class gitlabModel extends model } /** - * Sync task to gitlab issue. + * Push task to gitlab issue. * * @param int $taskID * @param int $gitlab @@ -558,7 +558,7 @@ class gitlabModel extends model * @access public * @return void */ - public function syncTask($taskID, $gitlab, $gitlabProject) + public function pushTask($taskID, $gitlab, $gitlabProject) { $task = $this->loadModel('task')->getByID($taskID); $syncedIssue = $this->getSyncedIssue($objectType = 'task', $objectID = $taskID, $gitlab); @@ -612,7 +612,7 @@ class gitlabModel extends model } /** - * Sync bug to gitlab issue. + * Push bug to gitlab issue. * * @param int $bugID * @param int $gitlab @@ -620,7 +620,7 @@ class gitlabModel extends model * @access public * @return void */ - public function syncBug($bugID, $gitlab, $gitlabProject) + public function pushBug($bugID, $gitlab, $gitlabProject) { $bug = $this->loadModel('bug')->getByID($bugID); diff --git a/module/task/model.php b/module/task/model.php index 246a17f9c0..1b785e095b 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')->syncTask($taskID, $this->post->gitlab, $this->post->gitlabProject); + $this->loadModel('gitlab')->pushTask($taskID, $this->post->gitlab, $this->post->gitlabProject); /* Mark design version.*/ if(isset($task->design) && !empty($task->design)) From 38ca3cbb9e386ef22adf28752b089f0c2d8eb592 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 09:40:45 +0800 Subject: [PATCH 3/7] * Optimize codes and bug fix. --- module/gitlab/model.php | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 41b95ddf97..dd9e1824ed 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -565,13 +565,17 @@ class gitlabModel extends model $issue = $this->taskToIssue($gitlab, $gitlabProject, $task); - $this->createZentaoObjectLabel($gitlab, $gitlabProject, 'task', $taskID); - $issue->labels = sprintf($this->config->gitlab->zentaoObjectLabel->name, 'task', $taskID); - - if($syncedIssue) $issue = $this->apiUpdateIssue($gitlab, $gitlabProject, $syncedIssue, $issue); - $issue = $this->apiCreateIssue($gitlab, $gitlabProject, $issue); - - $this->saveSyncedIssue('task', $task, $gitlab, $issue); + if($syncedIssue) + { + $issue = $this->apiUpdateIssue($gitlab, $gitlabProject, $syncedIssue, $issue); + } + else + { + $this->createZentaoObjectLabel($gitlab, $gitlabProject, 'task', $taskID); + $issue->labels = sprintf($this->config->gitlab->zentaoObjectLabel->name, 'task', $taskID); + $issue = $this->apiCreateIssue($gitlab, $gitlabProject, $issue); + $this->saveSyncedIssue('task', $task, $gitlab, $issue); + } } /** @@ -627,12 +631,17 @@ class gitlabModel extends model $syncedIssue = $this->getSyncedIssue($objectType = 'bug', $objectID = $bugID, $gitlab); $issue = $this->bugToIssue($gitlab, $gitlabProject, $bug); - $this->createZentaoObjectLabel($gitlab, $gitlabProject, 'bug', $bugID); - $issue->labels = sprintf($this->config->gitlab->zentaoObjectLabel->name, 'bug', $bugID); - - if($syncedIssue) $issue = $this->apiUpdateIssue($gitlab, $gitlabProject, $syncedIssue, $issue); - $issue = $this->apiCreateIssue($gitlab, $gitlabProject, $issue); - if($issue) $this->saveSyncedIssue('bug', $bug, $gitlab, $issue); + if($syncedIssue) + { + $issue = $this->apiUpdateIssue($gitlab, $gitlabProject, $syncedIssue, $issue); + } + else + { + $this->createZentaoObjectLabel($gitlab, $gitlabProject, '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); + } } /** From 9d7b8901fce9369728ada8977d2dced1ae06e967 Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Tue, 29 Jun 2021 10:00:04 +0800 Subject: [PATCH 4/7] * Fix gitlab issue state. --- module/gitlab/config.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/gitlab/config.php b/module/gitlab/config.php index daeb53eac6..ce4f5d7d79 100644 --- a/module/gitlab/config.php +++ b/module/gitlab/config.php @@ -37,6 +37,7 @@ $config->gitlab->maps->task['lastEditedDate'] = 'updated_at|field|'; $config->gitlab->maps->task['deadline'] = 'due_date|field|'; $config->gitlab->maps->task['status'] = 'state|configItems|taskStateMap'; $config->gitlab->maps->task['pri'] = 'weight|configItems|taskWeightMap'; +$config->gitlab->maps->task['lastEditedBy'] = 'updated_by_id|userPairs|'; $config->gitlab->maps->story = array(); $config->gitlab->maps->story['title'] = 'title|field|'; @@ -58,11 +59,11 @@ $config->gitlab->taskWeightMap['2'] = '2'; $config->gitlab->taskWeightMap['3'] = '3'; $config->gitlab->taskStateMap = array(); -$config->gitlab->taskStateMap['doing'] = 'reopen'; -$config->gitlab->taskStateMap['wait'] = 'reopen'; +$config->gitlab->taskStateMap['doing'] = 'opened'; +$config->gitlab->taskStateMap['wait'] = 'opened'; +$config->gitlab->taskStateMap['closed'] = 'close'; $config->gitlab->taskStateMap['done'] = 'close'; $config->gitlab->taskStateMap['cancel'] = 'close'; -$config->gitlab->taskStateMap['closed'] = 'close'; $config->gitlab->taskTypesToSync = 'design,devel,request,discuss,ui,affair,misc'; From 9459443016108bec7e7fd8b4288b6be9827e02f5 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 10:00:45 +0800 Subject: [PATCH 5/7] * Preparing for merge them to pushObject. --- module/gitlab/model.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index dd9e1824ed..8cf41777ce 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -561,6 +561,14 @@ class gitlabModel extends model public function pushTask($taskID, $gitlab, $gitlabProject) { $task = $this->loadModel('task')->getByID($taskID); + + if(!$gitlabID or !$projectID) + { + $result = $this->getGitlabIDprojectID('task', $taskID); + $gitlabID = $result->gitlabID; + $projectID = $result->projectID; + } + $syncedIssue = $this->getSyncedIssue($objectType = 'task', $objectID = $taskID, $gitlab); $issue = $this->taskToIssue($gitlab, $gitlabProject, $task); @@ -628,6 +636,13 @@ class gitlabModel extends model { $bug = $this->loadModel('bug')->getByID($bugID); + if(!$gitlabID or !$projectID) + { + $result = $this->getGitlabIDprojectID('bug', $bugID); + $gitlabID = $result->gitlabID; + $projectID = $result->projectID; + } + $syncedIssue = $this->getSyncedIssue($objectType = 'bug', $objectID = $bugID, $gitlab); $issue = $this->bugToIssue($gitlab, $gitlabProject, $bug); From cb733a018660e584f9b0b6b468ee8f1023290d7c Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Tue, 29 Jun 2021 10:01:34 +0800 Subject: [PATCH 6/7] * Add webhookIssueAssign function. --- module/gitlab/model.php | 53 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 1ec21a890b..1aa7c492e8 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -853,12 +853,12 @@ class gitlabModel extends model $issue->issue->objectType = $object->type; $issue->issue->objectID = $object->id; - + /* Parse markdown description to html. */ $issue->issue->description = $this->app->loadClass('hyperdown')->makeHtml($issue->issue->description); if(!isset($this->config->gitlab->maps->{$object->type})) return false; - $issue->object = $this->issueToZentaoObject($issue->issue, $gitlabID); + $issue->object = $this->issueToZentaoObject($issue->issue, $gitlabID, $body->changes); return $issue; } @@ -905,7 +905,6 @@ class gitlabModel extends model { $tableName = zget($this->config->gitlab->objectTables, $issue->objectType, ''); if($tableName) $this->dao->update($tableName)->data($issue->object)->where('id')->eq($issue->objectID)->exec(); - a($this->dao->get());exit; return !dao::isError(); } @@ -933,6 +932,51 @@ class gitlabModel extends model return $object; } + /** + * Process webhook issue assign option. + * + * @param int $gitlabID + * @param object $issue + * @access public + * @return void + */ + public function webhookIssueAssign($gitlabID, $issue) + { + $gitlabUsers = $this->getUserIdAccountPairs($gitlabID); + if($issue->objectType == 'task') + { + $oldTask = $this->loadModel('task')->getByID($issue->objectID); + $_POST['left'] = $oldTask->left; + $_POST['lastEditedBy'] = $issue->object->lastEditedBy; + $_POST['lastEditedDate'] = $issue->object->lastEditedDate; + $_POST['assignedDate'] = $issue->object->lastEditedDate; + $_POST['assignedBy'] = $issue->object->lastEditedBy; + $this->task->assign($issue->objectID); + } + + if($issue->objectType == 'bug') + { + $oldBug = $this->loadModel('bug')->getByID($issue->objectID); + $_POST['lastEditedBy'] = $issue->object->lastEditedBy; + $_POST['lastEditedDate'] = $issue->object->lastEditedDate; + $_POST['assignedDate'] = $issue->object->lastEditedDate; + $_POST['assignedBy'] = $issue->object->lastEditedBy; + $this->bug->assign($issue->objectID); + } + + if($issue->objectType == 'story') + { + $oldBug = $this->loadModel('story')->getByID($issue->objectID); + $_POST['lastEditedBy'] = $issue->object->lastEditedBy; + $_POST['lastEditedDate'] = $issue->object->lastEditedDate; + $_POST['assignedDate'] = $issue->object->lastEditedDate; + $_POST['assignedBy'] = $issue->object->lastEditedBy; + $this->story->assign($issue->objectID); + } + + + } + /** * Parse issue to zentao object. * @@ -941,7 +985,7 @@ class gitlabModel extends model * @access public * @return object */ - public function issueToZentaoObject($issue, $gitlabID) + public function issueToZentaoObject($issue, $gitlabID, $changes = null) { if(!isset($this->config->gitlab->maps->{$issue->objectType})) return null; @@ -954,6 +998,7 @@ class gitlabModel extends model { $value = ''; list($gitlabField, $optionType, $options) = explode('|', $config); + if(!isset($changes->gitlabField)) continue; if($optionType == 'field') $value = $issue->$gitlabField; if($optionType == 'field') $value = $issue->$gitlabField; if($optionType == 'userPairs') $value = zget($gitlabUsers, $issue->$gitlabField); From 1bad02c282be6ed7d06327f561697ddba9bf7003 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 10:13:26 +0800 Subject: [PATCH 7/7] * Correct issue state. --- module/gitlab/config.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/module/gitlab/config.php b/module/gitlab/config.php index 5b21c8d084..4f3117f015 100644 --- a/module/gitlab/config.php +++ b/module/gitlab/config.php @@ -52,6 +52,7 @@ $config->gitlab->maps->bug['title'] = 'title|field|'; $config->gitlab->maps->bug['steps'] = 'description|field|'; $config->gitlab->maps->bug['openedDate'] = 'created_at|field|'; $config->gitlab->maps->bug['assignedTo'] = 'assignee_id|userPairs|'; +$config->gitlab->maps->bug['status'] = 'state|configItems|bugStateMap'; $config->gitlab->maps->bug['pri'] = 'weight|configItems|bugWeightMap'; $config->gitlab->taskWeightMap = array(); @@ -62,9 +63,9 @@ $config->gitlab->taskWeightMap['3'] = '3'; $config->gitlab->taskStateMap = array(); $config->gitlab->taskStateMap['doing'] = 'opened'; $config->gitlab->taskStateMap['wait'] = 'opened'; -$config->gitlab->taskStateMap['closed'] = 'close'; -$config->gitlab->taskStateMap['done'] = 'close'; -$config->gitlab->taskStateMap['cancel'] = 'close'; +$config->gitlab->taskStateMap['closed'] = 'closed'; +$config->gitlab->taskStateMap['done'] = 'closed'; +$config->gitlab->taskStateMap['cancel'] = 'closed'; $config->gitlab->taskTypesToSync = 'design,devel,request,discuss,ui,affair,misc'; @@ -80,9 +81,9 @@ $config->gitlab->bugWeightMap['3'] = '3'; $config->gitlab->bugWeightMap['4'] = '4'; $config->gitlab->bugStateMap = array(); -$config->gitlab->bugStateMap['active'] = 'reopen'; -$config->gitlab->bugStateMap['resolved'] = 'reopen'; -$config->gitlab->bugStateMap['closed'] = 'close'; +$config->gitlab->bugStateMap['active'] = 'opened'; +$config->gitlab->bugStateMap['resolved'] = 'closed'; +$config->gitlab->bugStateMap['closed'] = 'closed'; $config->gitlab->objectTables = new stdclass; $config->gitlab->objectTables->story = TABLE_STORY;