diff options
Diffstat (limited to 'app/Integration')
-rw-r--r-- | app/Integration/BitbucketWebhook.php | 312 | ||||
-rw-r--r-- | app/Integration/GithubWebhook.php | 380 | ||||
-rw-r--r-- | app/Integration/GitlabWebhook.php | 265 |
3 files changed, 0 insertions, 957 deletions
diff --git a/app/Integration/BitbucketWebhook.php b/app/Integration/BitbucketWebhook.php deleted file mode 100644 index 97a39437..00000000 --- a/app/Integration/BitbucketWebhook.php +++ /dev/null @@ -1,312 +0,0 @@ -<?php - -namespace Kanboard\Integration; - -use Kanboard\Event\GenericEvent; - -/** - * Bitbucket Webhook - * - * @package integration - * @author Frederic Guillot - */ -class BitbucketWebhook extends \Kanboard\Core\Base -{ - /** - * Events - * - * @var string - */ - const EVENT_COMMIT = 'bitbucket.webhook.commit'; - const EVENT_ISSUE_OPENED = 'bitbucket.webhook.issue.opened'; - const EVENT_ISSUE_CLOSED = 'bitbucket.webhook.issue.closed'; - const EVENT_ISSUE_REOPENED = 'bitbucket.webhook.issue.reopened'; - const EVENT_ISSUE_ASSIGNEE_CHANGE = 'bitbucket.webhook.issue.assignee'; - const EVENT_ISSUE_COMMENT = 'bitbucket.webhook.issue.commented'; - - /** - * Project id - * - * @access private - * @var integer - */ - private $project_id = 0; - - /** - * Set the project id - * - * @access public - * @param integer $project_id Project id - */ - public function setProjectId($project_id) - { - $this->project_id = $project_id; - } - - /** - * Parse incoming events - * - * @access public - * @param string $type Bitbucket event type - * @param array $payload Bitbucket event - * @return boolean - */ - public function parsePayload($type, array $payload) - { - switch ($type) { - case 'issue:comment_created': - return $this->handleCommentCreated($payload); - case 'issue:created': - return $this->handleIssueOpened($payload); - case 'issue:updated': - return $this->handleIssueUpdated($payload); - case 'repo:push': - return $this->handlePush($payload); - } - - return false; - } - - /** - * Parse comment issue events - * - * @access public - * @param array $payload - * @return boolean - */ - public function handleCommentCreated(array $payload) - { - $task = $this->taskFinder->getByReference($this->project_id, $payload['issue']['id']); - - if (! empty($task)) { - $user = $this->user->getByUsername($payload['actor']['username']); - - if (! empty($user) && ! $this->projectPermission->isMember($this->project_id, $user['id'])) { - $user = array(); - } - - $event = array( - 'project_id' => $this->project_id, - 'reference' => $payload['comment']['id'], - 'comment' => $payload['comment']['content']['raw']."\n\n[".t('By @%s on Bitbucket', $payload['actor']['display_name']).']('.$payload['comment']['links']['html']['href'].')', - 'user_id' => ! empty($user) ? $user['id'] : 0, - 'task_id' => $task['id'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_COMMENT, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Handle new issues - * - * @access public - * @param array $payload - * @return boolean - */ - public function handleIssueOpened(array $payload) - { - $event = array( - 'project_id' => $this->project_id, - 'reference' => $payload['issue']['id'], - 'title' => $payload['issue']['title'], - 'description' => $payload['issue']['content']['raw']."\n\n[".t('Bitbucket Issue').']('.$payload['issue']['links']['html']['href'].')', - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_OPENED, - new GenericEvent($event) - ); - - return true; - } - - /** - * Handle issue updates - * - * @access public - * @param array $payload - * @return boolean - */ - public function handleIssueUpdated(array $payload) - { - $task = $this->taskFinder->getByReference($this->project_id, $payload['issue']['id']); - - if (empty($task)) { - return false; - } - - if (isset($payload['changes']['status'])) { - return $this->handleStatusChange($task, $payload); - } elseif (isset($payload['changes']['assignee'])) { - return $this->handleAssigneeChange($task, $payload); - } - - return false; - } - - /** - * Handle issue status change - * - * @access public - * @param array $task - * @param array $payload - * @return boolean - */ - public function handleStatusChange(array $task, array $payload) - { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'reference' => $payload['issue']['id'], - ); - - switch ($payload['issue']['state']) { - case 'closed': - $this->container['dispatcher']->dispatch(self::EVENT_ISSUE_CLOSED, new GenericEvent($event)); - return true; - case 'open': - $this->container['dispatcher']->dispatch(self::EVENT_ISSUE_REOPENED, new GenericEvent($event)); - return true; - } - - return false; - } - - /** - * Handle issue assignee change - * - * @access public - * @param array $task - * @param array $payload - * @return boolean - */ - public function handleAssigneeChange(array $task, array $payload) - { - if (empty($payload['issue']['assignee'])) { - return $this->handleIssueUnassigned($task, $payload); - } - - return $this->handleIssueAssigned($task, $payload); - } - - /** - * Handle issue assigned - * - * @access public - * @param array $task - * @param array $payload - * @return boolean - */ - public function handleIssueAssigned(array $task, array $payload) - { - $user = $this->user->getByUsername($payload['issue']['assignee']['username']); - - if (empty($user)) { - return false; - } - - if (! $this->projectPermission->isMember($this->project_id, $user['id'])) { - return false; - } - - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'owner_id' => $user['id'], - 'reference' => $payload['issue']['id'], - ); - - $this->container['dispatcher']->dispatch(self::EVENT_ISSUE_ASSIGNEE_CHANGE, new GenericEvent($event)); - - return true; - } - - /** - * Handle issue unassigned - * - * @access public - * @param array $task - * @param array $payload - * @return boolean - */ - public function handleIssueUnassigned(array $task, array $payload) - { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'owner_id' => 0, - 'reference' => $payload['issue']['id'], - ); - - $this->container['dispatcher']->dispatch(self::EVENT_ISSUE_ASSIGNEE_CHANGE, new GenericEvent($event)); - - return true; - } - - /** - * Parse push events - * - * @access public - * @param array $payload - * @return boolean - */ - public function handlePush(array $payload) - { - if (isset($payload['push']['changes'])) { - foreach ($payload['push']['changes'] as $change) { - if (isset($change['new']['target']) && $this->handleCommit($change['new']['target'], $payload['actor'])) { - return true; - } - } - } - - return false; - } - - /** - * Parse commit - * - * @access public - * @param array $commit Bitbucket commit - * @param array $actor Bitbucket actor - * @return boolean - */ - public function handleCommit(array $commit, array $actor) - { - $task_id = $this->task->getTaskIdFromText($commit['message']); - - if (empty($task_id)) { - return false; - } - - $task = $this->taskFinder->getById($task_id); - - if (empty($task)) { - return false; - } - - if ($task['project_id'] != $this->project_id) { - return false; - } - - $this->container['dispatcher']->dispatch( - self::EVENT_COMMIT, - new GenericEvent(array( - 'task_id' => $task_id, - 'commit_message' => $commit['message'], - 'commit_url' => $commit['links']['html']['href'], - 'commit_comment' => $commit['message']."\n\n[".t('Commit made by @%s on Bitbucket', $actor['display_name']).']('.$commit['links']['html']['href'].')', - ) + $task) - ); - - return true; - } -} diff --git a/app/Integration/GithubWebhook.php b/app/Integration/GithubWebhook.php deleted file mode 100644 index c8b53e37..00000000 --- a/app/Integration/GithubWebhook.php +++ /dev/null @@ -1,380 +0,0 @@ -<?php - -namespace Kanboard\Integration; - -use Kanboard\Event\GenericEvent; - -/** - * Github Webhook - * - * @package integration - * @author Frederic Guillot - */ -class GithubWebhook extends \Kanboard\Core\Base -{ - /** - * Events - * - * @var string - */ - const EVENT_ISSUE_OPENED = 'github.webhook.issue.opened'; - const EVENT_ISSUE_CLOSED = 'github.webhook.issue.closed'; - const EVENT_ISSUE_REOPENED = 'github.webhook.issue.reopened'; - const EVENT_ISSUE_ASSIGNEE_CHANGE = 'github.webhook.issue.assignee'; - const EVENT_ISSUE_LABEL_CHANGE = 'github.webhook.issue.label'; - const EVENT_ISSUE_COMMENT = 'github.webhook.issue.commented'; - const EVENT_COMMIT = 'github.webhook.commit'; - - /** - * Project id - * - * @access private - * @var integer - */ - private $project_id = 0; - - /** - * Set the project id - * - * @access public - * @param integer $project_id Project id - */ - public function setProjectId($project_id) - { - $this->project_id = $project_id; - } - - /** - * Parse Github events - * - * @access public - * @param string $type Github event type - * @param array $payload Github event - * @return boolean - */ - public function parsePayload($type, array $payload) - { - switch ($type) { - case 'push': - return $this->parsePushEvent($payload); - case 'issues': - return $this->parseIssueEvent($payload); - case 'issue_comment': - return $this->parseCommentIssueEvent($payload); - } - - return false; - } - - /** - * Parse Push events (list of commits) - * - * @access public - * @param array $payload Event data - * @return boolean - */ - public function parsePushEvent(array $payload) - { - foreach ($payload['commits'] as $commit) { - $task_id = $this->task->getTaskIdFromText($commit['message']); - - if (empty($task_id)) { - continue; - } - - $task = $this->taskFinder->getById($task_id); - - if (empty($task)) { - continue; - } - - if ($task['project_id'] != $this->project_id) { - continue; - } - - $this->container['dispatcher']->dispatch( - self::EVENT_COMMIT, - new GenericEvent(array( - 'task_id' => $task_id, - 'commit_message' => $commit['message'], - 'commit_url' => $commit['url'], - 'commit_comment' => $commit['message']."\n\n[".t('Commit made by @%s on Github', $commit['author']['username']).']('.$commit['url'].')' - ) + $task) - ); - } - - return true; - } - - /** - * Parse issue events - * - * @access public - * @param array $payload Event data - * @return boolean - */ - public function parseIssueEvent(array $payload) - { - switch ($payload['action']) { - case 'opened': - return $this->handleIssueOpened($payload['issue']); - case 'closed': - return $this->handleIssueClosed($payload['issue']); - case 'reopened': - return $this->handleIssueReopened($payload['issue']); - case 'assigned': - return $this->handleIssueAssigned($payload['issue']); - case 'unassigned': - return $this->handleIssueUnassigned($payload['issue']); - case 'labeled': - return $this->handleIssueLabeled($payload['issue'], $payload['label']); - case 'unlabeled': - return $this->handleIssueUnlabeled($payload['issue'], $payload['label']); - } - - return false; - } - - /** - * Parse comment issue events - * - * @access public - * @param array $payload Event data - * @return boolean - */ - public function parseCommentIssueEvent(array $payload) - { - $task = $this->taskFinder->getByReference($this->project_id, $payload['issue']['number']); - - if (! empty($task)) { - $user = $this->user->getByUsername($payload['comment']['user']['login']); - - if (! empty($user) && ! $this->projectPermission->isMember($this->project_id, $user['id'])) { - $user = array(); - } - - $event = array( - 'project_id' => $this->project_id, - 'reference' => $payload['comment']['id'], - 'comment' => $payload['comment']['body']."\n\n[".t('By @%s on Github', $payload['comment']['user']['login']).']('.$payload['comment']['html_url'].')', - 'user_id' => ! empty($user) ? $user['id'] : 0, - 'task_id' => $task['id'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_COMMENT, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Handle new issues - * - * @access public - * @param array $issue Issue data - * @return boolean - */ - public function handleIssueOpened(array $issue) - { - $event = array( - 'project_id' => $this->project_id, - 'reference' => $issue['number'], - 'title' => $issue['title'], - 'description' => $issue['body']."\n\n[".t('Github Issue').']('.$issue['html_url'].')', - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_OPENED, - new GenericEvent($event) - ); - - return true; - } - - /** - * Handle issue closing - * - * @access public - * @param array $issue Issue data - * @return boolean - */ - public function handleIssueClosed(array $issue) - { - $task = $this->taskFinder->getByReference($this->project_id, $issue['number']); - - if (! empty($task)) { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'reference' => $issue['number'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_CLOSED, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Handle issue reopened - * - * @access public - * @param array $issue Issue data - * @return boolean - */ - public function handleIssueReopened(array $issue) - { - $task = $this->taskFinder->getByReference($this->project_id, $issue['number']); - - if (! empty($task)) { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'reference' => $issue['number'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_REOPENED, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Handle issue assignee change - * - * @access public - * @param array $issue Issue data - * @return boolean - */ - public function handleIssueAssigned(array $issue) - { - $user = $this->user->getByUsername($issue['assignee']['login']); - $task = $this->taskFinder->getByReference($this->project_id, $issue['number']); - - if (! empty($user) && ! empty($task) && $this->projectPermission->isMember($this->project_id, $user['id'])) { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'owner_id' => $user['id'], - 'reference' => $issue['number'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_ASSIGNEE_CHANGE, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Handle unassigned issue - * - * @access public - * @param array $issue Issue data - * @return boolean - */ - public function handleIssueUnassigned(array $issue) - { - $task = $this->taskFinder->getByReference($this->project_id, $issue['number']); - - if (! empty($task)) { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'owner_id' => 0, - 'reference' => $issue['number'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_ASSIGNEE_CHANGE, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Handle labeled issue - * - * @access public - * @param array $issue Issue data - * @param array $label Label data - * @return boolean - */ - public function handleIssueLabeled(array $issue, array $label) - { - $task = $this->taskFinder->getByReference($this->project_id, $issue['number']); - - if (! empty($task)) { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'reference' => $issue['number'], - 'label' => $label['name'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_LABEL_CHANGE, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Handle unlabeled issue - * - * @access public - * @param array $issue Issue data - * @param array $label Label data - * @return boolean - */ - public function handleIssueUnlabeled(array $issue, array $label) - { - $task = $this->taskFinder->getByReference($this->project_id, $issue['number']); - - if (! empty($task)) { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'reference' => $issue['number'], - 'label' => $label['name'], - 'category_id' => 0, - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_LABEL_CHANGE, - new GenericEvent($event) - ); - - return true; - } - - return false; - } -} diff --git a/app/Integration/GitlabWebhook.php b/app/Integration/GitlabWebhook.php deleted file mode 100644 index b3f9b0b5..00000000 --- a/app/Integration/GitlabWebhook.php +++ /dev/null @@ -1,265 +0,0 @@ -<?php - -namespace Kanboard\Integration; - -use Kanboard\Event\GenericEvent; - -/** - * Gitlab Webhook - * - * @package integration - * @author Frederic Guillot - */ -class GitlabWebhook extends \Kanboard\Core\Base -{ - /** - * Events - * - * @var string - */ - const EVENT_ISSUE_OPENED = 'gitlab.webhook.issue.opened'; - const EVENT_ISSUE_CLOSED = 'gitlab.webhook.issue.closed'; - const EVENT_COMMIT = 'gitlab.webhook.commit'; - const EVENT_ISSUE_COMMENT = 'gitlab.webhook.issue.commented'; - - /** - * Supported webhook events - * - * @var string - */ - const TYPE_PUSH = 'push'; - const TYPE_ISSUE = 'issue'; - const TYPE_COMMENT = 'comment'; - - /** - * Project id - * - * @access private - * @var integer - */ - private $project_id = 0; - - /** - * Set the project id - * - * @access public - * @param integer $project_id Project id - */ - public function setProjectId($project_id) - { - $this->project_id = $project_id; - } - - /** - * Parse events - * - * @access public - * @param array $payload Gitlab event - * @return boolean - */ - public function parsePayload(array $payload) - { - switch ($this->getType($payload)) { - case self::TYPE_PUSH: - return $this->handlePushEvent($payload); - case self::TYPE_ISSUE; - return $this->handleIssueEvent($payload); - case self::TYPE_COMMENT; - return $this->handleCommentEvent($payload); - } - - return false; - } - - /** - * Get event type - * - * @access public - * @param array $payload Gitlab event - * @return string - */ - public function getType(array $payload) - { - if (empty($payload['object_kind'])) { - return ''; - } - - switch ($payload['object_kind']) { - case 'issue': - return self::TYPE_ISSUE; - case 'note': - return self::TYPE_COMMENT; - case 'push': - return self::TYPE_PUSH; - default: - return ''; - } - } - - /** - * Parse push event - * - * @access public - * @param array $payload Gitlab event - * @return boolean - */ - public function handlePushEvent(array $payload) - { - foreach ($payload['commits'] as $commit) { - $this->handleCommit($commit); - } - - return true; - } - - /** - * Parse commit - * - * @access public - * @param array $commit Gitlab commit - * @return boolean - */ - public function handleCommit(array $commit) - { - $task_id = $this->task->getTaskIdFromText($commit['message']); - - if (empty($task_id)) { - return false; - } - - $task = $this->taskFinder->getById($task_id); - - if (empty($task)) { - return false; - } - - if ($task['project_id'] != $this->project_id) { - return false; - } - - $this->container['dispatcher']->dispatch( - self::EVENT_COMMIT, - new GenericEvent(array( - 'task_id' => $task_id, - 'commit_message' => $commit['message'], - 'commit_url' => $commit['url'], - 'commit_comment' => $commit['message']."\n\n[".t('Commit made by @%s on Gitlab', $commit['author']['name']).']('.$commit['url'].')' - ) + $task) - ); - - return true; - } - - /** - * Parse issue event - * - * @access public - * @param array $payload Gitlab event - * @return boolean - */ - public function handleIssueEvent(array $payload) - { - switch ($payload['object_attributes']['action']) { - case 'open': - return $this->handleIssueOpened($payload['object_attributes']); - case 'close': - return $this->handleIssueClosed($payload['object_attributes']); - } - - return false; - } - - /** - * Handle new issues - * - * @access public - * @param array $issue Issue data - * @return boolean - */ - public function handleIssueOpened(array $issue) - { - $event = array( - 'project_id' => $this->project_id, - 'reference' => $issue['id'], - 'title' => $issue['title'], - 'description' => $issue['description']."\n\n[".t('Gitlab Issue').']('.$issue['url'].')', - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_OPENED, - new GenericEvent($event) - ); - - return true; - } - - /** - * Handle issue closing - * - * @access public - * @param array $issue Issue data - * @return boolean - */ - public function handleIssueClosed(array $issue) - { - $task = $this->taskFinder->getByReference($this->project_id, $issue['id']); - - if (! empty($task)) { - $event = array( - 'project_id' => $this->project_id, - 'task_id' => $task['id'], - 'reference' => $issue['id'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_CLOSED, - new GenericEvent($event) - ); - - return true; - } - - return false; - } - - /** - * Parse comment issue events - * - * @access public - * @param array $payload Event data - * @return boolean - */ - public function handleCommentEvent(array $payload) - { - if (! isset($payload['issue'])) { - return false; - } - - $task = $this->taskFinder->getByReference($this->project_id, $payload['issue']['id']); - - if (! empty($task)) { - $user = $this->user->getByUsername($payload['user']['username']); - - if (! empty($user) && ! $this->projectPermission->isMember($this->project_id, $user['id'])) { - $user = array(); - } - - $event = array( - 'project_id' => $this->project_id, - 'reference' => $payload['object_attributes']['id'], - 'comment' => $payload['object_attributes']['note']."\n\n[".t('By @%s on Gitlab', $payload['user']['username']).']('.$payload['object_attributes']['url'].')', - 'user_id' => ! empty($user) ? $user['id'] : 0, - 'task_id' => $task['id'], - ); - - $this->container['dispatcher']->dispatch( - self::EVENT_ISSUE_COMMENT, - new GenericEvent($event) - ); - - return true; - } - - return false; - } -} |