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'; 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 5f802dcc6c..b3b54f5ebe 100644 --- a/module/gitlab/config.php +++ b/module/gitlab/config.php @@ -48,9 +48,9 @@ $config->gitlab->maps->story['pri'] = 'weight|configItems|storyWeightMa $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(); @@ -83,3 +83,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; + 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(); } diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 9d03b2bc4d..d3144c65f6 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -626,11 +626,35 @@ 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); + $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', $story, $gitlab, $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); } /** @@ -759,15 +783,15 @@ 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); 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, $story->$bugField); + $value = zget($gitlabUsers, $bug->$bugField); } if($optionType == 'configItems') { @@ -776,7 +800,6 @@ class gitlabModel extends model if($value) $issue->$field = $value; } - var_dump($issue);die; return $issue; } @@ -884,6 +907,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; @@ -973,7 +999,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;