From af7ac63f2edc11e39e43c17cb282b94f1eff7c02 Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Fri, 25 Jun 2021 17:20:40 +0800 Subject: [PATCH 1/7] * Add gitlab webhook filter config. --- config/filter.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/config/filter.php b/config/filter.php index f69a51cd97..680245f08b 100644 --- a/config/filter.php +++ b/config/filter.php @@ -56,6 +56,7 @@ $filter->webhook = new stdclass(); $filter->git = new stdclass(); $filter->svn = new stdclass(); $filter->search = new stdclass(); +$filter->gitlab = new stdclass(); $filter->block->default = new stdclass(); $filter->block->main = new stdclass(); @@ -130,6 +131,7 @@ $filter->webhook->bind = new stdclass(); $filter->user->ajaxgetmore = new stdclass(); $filter->repo->ajaxsynccommit = new stdclass(); $filter->search->index = new stdclass(); +$filter->gitlab->webhook = new stdclass(); $filter->bug->batchcreate->cookie['preBranch'] = 'int'; $filter->bug->browse->cookie['bugModule'] = 'int'; @@ -308,3 +310,8 @@ $filter->webhook->bind->cookie['selectedDepts'] = 'reg::checked'; $filter->search->index->get['words'] = 'reg::any'; $filter->search->index->get['type'] = 'code'; + +$filter->gitlab->webhook->get['gitlab'] = 'int'; +$filter->gitlab->webhook->get['product'] = 'int'; +$filter->gitlab->webhook->get['project'] = 'int'; +$filter->gitlab->webhook->get['token'] = 'reg::any'; From 898fd11a5895ffb0b2a59207a4f5fc20f1ba690c Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Fri, 25 Jun 2021 17:21:22 +0800 Subject: [PATCH 2/7] * Add gitlab objectTables config. --- module/gitlab/config.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/gitlab/config.php b/module/gitlab/config.php index 7a1656ad3b..daeb53eac6 100644 --- a/module/gitlab/config.php +++ b/module/gitlab/config.php @@ -82,3 +82,8 @@ $config->gitlab->bugStateMap['active'] = 'reopen'; $config->gitlab->bugStateMap['resolved'] = 'reopen'; $config->gitlab->bugStateMap['closed'] = 'close'; +$config->gitlab->objectTables = new stdclass; +$config->gitlab->objectTables->story = TABLE_STORY; +$config->gitlab->objectTables->task = TABLE_TASK; +$config->gitlab->objectTables->bug = TABLE_BUG; + From 2076a3aadb968c9303c15ca17e38fb3faa578750 Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Fri, 25 Jun 2021 17:55:19 +0800 Subject: [PATCH 3/7] * Change markdown description to html. --- module/gitlab/model.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 7f75fad7e3..c91272bf39 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -794,6 +794,9 @@ 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); return $issue; From 3907ff1ea7fd2c9d2c08317e9e465072edfceb3a Mon Sep 17 00:00:00 2001 From: lichengjun Date: Mon, 28 Jun 2021 11:24:55 +0800 Subject: [PATCH 4/7] * Add bug fix. --- module/gitlab/model.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index db3d77d6a5..e81f82cf6d 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -597,11 +597,11 @@ class gitlabModel extends model $issue = $this->bugToIssue($gitlab, $gitlabProject, $bug); $this->createZentaoObjectLabel($gitlab, $gitlabProject, 'bug', $bugID); - $issue->labels = sprintf($this->config->gitlab->zentaoObjectLabel->name, 'bug', $storyID); + 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', $story, $gitlab, $issue); + if($issue) $this->saveSyncedIssue('bug', $bug, $gitlab, $issue); } /** @@ -730,7 +730,7 @@ class gitlabModel extends model $gitlabUsers = $this->getUserAccountIdPairs($gitlabID); if(empty($gitlabUsers)) return false; - foreach($map as $storyField => $config) + foreach($map as $bugField => $config) { $value = ''; list($field, $optionType, $options) = explode('|', $config); @@ -738,7 +738,7 @@ class gitlabModel extends model if($optionType == 'fields') $value = $bug->$bugField . "\n\n" . $story->$options; if($optionType == 'userPairs') { - $value = zget($gitlabUsers, $story->$bugField); + $value = zget($gitlabUsers, $bug->$bugField); } if($optionType == 'configItems') { @@ -747,7 +747,6 @@ class gitlabModel extends model if($value) $issue->$field = $value; } - var_dump($issue);die; return $issue; } From e0e72bf4e3c78cd581a596601645162ab74a4556 Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Mon, 28 Jun 2021 13:08:33 +0800 Subject: [PATCH 5/7] * Fix parse gitlab user id error. --- module/gitlab/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 89951b3aab..1ec21a890b 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -946,7 +946,7 @@ class gitlabModel extends model if(!isset($this->config->gitlab->maps->{$issue->objectType})) return null; $maps = $this->config->gitlab->maps->{$issue->objectType}; - $gitlabUsers = $this->getUserAccountIdPairs($gitlabID); + $gitlabUsers = $this->getUserIdAccountPairs($gitlabID); $object = new stdclass; $object->id = $issue->objectID; From 6f424a14664450a520726a8bc8e304e53935b4c6 Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Mon, 28 Jun 2021 13:51:32 +0800 Subject: [PATCH 6/7] * Return object for webhook. --- module/gitlab/control.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/gitlab/control.php b/module/gitlab/control.php index 91e2b57aa6..1283e08487 100644 --- a/module/gitlab/control.php +++ b/module/gitlab/control.php @@ -216,7 +216,7 @@ class gitlab extends control //$input = file_get_contents('php://input'); $requestBody = json_decode($input); $result = $this->gitlab->webhookParseBody($requestBody, $gitlab); - a($result);exit; + $logFile = $this->app->getLogRoot() . 'webhook.'. date('Ymd') . '.log.php'; if(!file_exists($logFile)) file_put_contents($logFile, ''); @@ -233,7 +233,7 @@ class gitlab extends control $this->view->result = 'success'; $this->view->status = 'ok'; - $this->view->data = 'ougiugjvh'; + $this->view->data = $result->object; $this->display(); } From be619512c460b03c665de18cfc4c2d6c237acea8 Mon Sep 17 00:00:00 2001 From: lichengjun Date: Mon, 28 Jun 2021 14:04:02 +0800 Subject: [PATCH 7/7] * Adj Code. --- module/bug/model.php | 2 +- module/gitlab/config.php | 6 +++--- module/gitlab/model.php | 28 ++++++++++++++++++++++++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index c3e2283689..a7892a8a64 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -90,7 +90,7 @@ class bugModel extends model $bugID = $this->dao->lastInsertID(); /* Sync this bug to gitlab issue. */ - $this->loadModel('gitlab')->syncBug($bugID, $this->post->gitlab, $this->post->gitlabProject); + $this->loadModel('gitlab')->pushToissue($bugID, $this->post->gitlab, $this->post->gitlabProject,'bug'); $this->file->updateObjectID($this->post->uid, $bugID, 'bug'); $this->file->saveUpload('bug', $bugID); diff --git a/module/gitlab/config.php b/module/gitlab/config.php index 7a1656ad3b..17258a2c5d 100644 --- a/module/gitlab/config.php +++ b/module/gitlab/config.php @@ -42,14 +42,14 @@ $config->gitlab->maps->story = array(); $config->gitlab->maps->story['title'] = 'title|field|'; $config->gitlab->maps->story['spec'] = 'description|fields|verify'; $config->gitlab->maps->story['openedDate'] = 'created_at|field|'; -$config->gitlab->maps->story['openedBy'] = 'assignee_id|userPairs|'; +$config->gitlab->maps->story['assignedTo'] = 'assignee_id|userPairs|'; $config->gitlab->maps->story['pri'] = 'weight|configItems|storyWeightMap'; $config->gitlab->maps->bug = array(); $config->gitlab->maps->bug['title'] = 'title|field|'; -$config->gitlab->maps->bug['spec'] = 'description|field|'; +$config->gitlab->maps->bug['steps'] = 'description|field|'; $config->gitlab->maps->bug['openedDate'] = 'created_at|field|'; -$config->gitlab->maps->bug['openedBy'] = 'assignee_id|userPairs|'; +$config->gitlab->maps->bug['assignedTo'] = 'assignee_id|userPairs|'; $config->gitlab->maps->bug['pri'] = 'weight|configItems|bugWeightMap'; $config->gitlab->taskWeightMap = array(); diff --git a/module/gitlab/model.php b/module/gitlab/model.php index e81f82cf6d..83f8f1fa85 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -597,13 +597,37 @@ class gitlabModel extends model $issue = $this->bugToIssue($gitlab, $gitlabProject, $bug); $this->createZentaoObjectLabel($gitlab, $gitlabProject, 'bug', $bugID); - sprintf($this->config->gitlab->zentaoObjectLabel->name, '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); } + /** + * Push to gitlab issue. + * + * @param int $storyID + * @param int $gitlab + * @param int $gitlabProject + * @access public + * @return void + */ + public function PushToissue($ID, $gitlabID, $gitlabProject, $type) + { + $data = $this->loadModel($type)->getByID($ID); + + $syncedIssue = $this->getSyncedIssue($objectType = $type, $objectID = $ID, $gitlabID); + $issue = $this->bugToIssue($gitlabID, $gitlabProject, $data); + + $this->createZentaoObjectLabel($gitlabID, $gitlabProject, $type, $ID); + $issue->labels = sprintf($this->config->gitlab->zentaoObjectLabel->name, $type, $ID); + + if($syncedIssue) $issue = $this->apiUpdateIssue($gitlabID, $gitlabProject, $syncedIssue, $issue); + $issue = $this->apiCreateIssue($gitlabID, $gitlabProject, $issue); + if($issue) $this->saveSyncedIssue($type, $data, $gitlabID, $issue); + } + /** * Get synced issue from relation table. * @@ -735,7 +759,7 @@ class gitlabModel extends model $value = ''; list($field, $optionType, $options) = explode('|', $config); if($optionType == 'field') $value = $bug->$bugField; - if($optionType == 'fields') $value = $bug->$bugField . "\n\n" . $story->$options; + if($optionType == 'fields') $value = $bug->$bugField . "\n\n" . $bug->$options; if($optionType == 'userPairs') { $value = zget($gitlabUsers, $bug->$bugField);