From e2eabb87712cc8de18665754d2272697eee5b263 Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Tue, 29 Jun 2021 15:32:07 +0800 Subject: [PATCH 1/2] * Finish sync assign option. --- module/gitlab/model.php | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index e709b7db79..5755ae8601 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -980,6 +980,7 @@ class gitlabModel extends model $issue->issue = $body->object_attributes; $issue->objectType = $object->type; $issue->objectID = $object->id; + $issue->changes = $body->changes; $issue->issue->objectType = $object->type; $issue->issue->objectID = $object->id; @@ -1070,16 +1071,13 @@ class gitlabModel extends model * @access public * @return void */ - public function webhookIssueAssign($gitlabID, $issue) + public function webhookAssignIssue($issue) { $tableName = zget($this->config->gitlab->objectTables, $issue->objectType, ''); if(!$tableName) return false; - $gitlabUsers = $this->getUserIdAccountPairs($gitlabID); - $data = $issue->object; $data->assignedDate = $issue->object->lastEditedDate; - $data->assignedBy = $issue->object->lastEditedBy; $data->assignedTo = $issue->object->assignedTo; $this->dao->update($tableName)->data($data)->where('id')->eq($issue->objectID)->exec(); @@ -1087,7 +1085,36 @@ class gitlabModel extends model $oldObject = $this->dao->findById($issue->objectID)->from($tableName)->fetch(); $changes = common::createChanges($oldObject, $data); - $actionID = $this->action->create($issue->objectType, $issue->objectID, 'Assigned', '', $data->assignedTo); + $actionID = $this->loadModel('action')->create($issue->objectType, $issue->objectID, 'Assigned', "Assigned by webhook by gitlab issue : {$issue->issue->url}", $data->assignedTo); + $this->action->logHistory($actionID, $changes); + return true; + } + + /** + * Process issue close option. + * + * @param int $gitlabID + * @param object $issue + * @access public + * @return void + */ + public function webhookCloseIssue($issue) + { + $tableName = zget($this->config->gitlab->objectTables, $issue->objectType, ''); + if(!$tableName) return false; + + $data = $issue->object; + $data->assignedTo = 'closed'; + $data->status = 'closed'; + $data->closedBy = $issue->object->lastEditedBy; + $data->closedDate = $issue->object->lastEditedDate; + + $this->dao->update($tableName)->data($data)->where('id')->eq($issue->objectID)->exec(); + if(dao::isError()) return false; + + $oldObject = $this->dao->findById($issue->objectID)->from($tableName)->fetch(); + $changes = common::createChanges($oldObject, $data); + $actionID = $this->loadModel('action')->create($issue->objectType, $issue->objectID, 'Closed', "Closed by gitlab issue: {$issue->issue->url}."); $this->action->logHistory($actionID, $changes); return true; } @@ -1104,6 +1131,7 @@ class gitlabModel extends model { if(!isset($this->config->gitlab->maps->{$issue->objectType})) return null; + if(isset($changes->assignees)) $changes->assignee_id = true; $maps = $this->config->gitlab->maps->{$issue->objectType}; $gitlabUsers = $this->getUserIdAccountPairs($gitlabID); From 3b69fe594d5bd2ab1230519cd5ad26c83de4e2fe Mon Sep 17 00:00:00 2001 From: dingguodong Date: Tue, 29 Jun 2021 15:39:34 +0800 Subject: [PATCH 2/2] * Bug fixed for curl DELETE. --- module/gitlab/model.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/gitlab/model.php b/module/gitlab/model.php index d0891c6366..8daaf1a010 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -349,7 +349,7 @@ class gitlabModel extends model $apiRoot = $this->getApiRoot($gitlabID); $url = sprintf($apiRoot, "/projects/{$projectID}/labels/{$labelID}"); - return json_decode(commonModel::http($url, $options = array(CURLOPT_CUSTOMREQUEST => 'DELETE'))); + return json_decode(commonModel::http($url, null, $options = array(CURLOPT_CUSTOMREQUEST => 'DELETE'))); } /** @@ -946,7 +946,7 @@ class gitlabModel extends model $apiRoot = $this->getApiRoot($gitlabID); $apiPath = "/projects/{$projectID}/issues/{$issueID}"; $url = sprintf($apiRoot, $apiPath); - commonModel::http($url, $options = array(CURLOPT_CUSTOMREQUEST => 'DELETE')); + return commonModel::http($url, null, array(CURLOPT_CUSTOMREQUEST => 'DELETE')); } /**