diff options
Diffstat (limited to 'app/Model/GithubWebhook.php')
| -rw-r--r-- | app/Model/GithubWebhook.php | 81 | 
1 files changed, 81 insertions, 0 deletions
diff --git a/app/Model/GithubWebhook.php b/app/Model/GithubWebhook.php new file mode 100644 index 00000000..688ab601 --- /dev/null +++ b/app/Model/GithubWebhook.php @@ -0,0 +1,81 @@ +<?php + +namespace Model; + +/** + * Github Webhook model + * + * @package  model + * @author   Frederic Guillot + */ +class GithubWebhook extends Base +{ +    /** +     * Events +     * +     * @var string +     */ +    const EVENT_ISSUE_OPENED  = 'github.webhook.issue.opened'; +    const EVENT_ISSUE_CLOSED  = 'github.webhook.issue.closed'; +    const EVENT_ISSUE_LABELED = 'github.webhook.issue.labeled'; +    const EVENT_ISSUE_COMMENT = 'github.webhook.issue.commented'; +    const EVENT_COMMIT        = 'github.webhook.commit'; + +    /** +     * Parse Github events +     * +     * @access public +     * @param  string  $type      Github event type +     * @param  string  $payload   Raw Github event (JSON) +     */ +    public function parsePayload($type, $payload) +    { +        $payload = json_decode($payload, true); + +        switch ($type) { +            case 'push': +                return $this->parsePushEvent($payload); +            case 'issues': +                return $this->parseIssueEvent($payload); +        } +    } + +    /** +     * Parse Push events (list of commits) +     * +     * @access public +     * @param  array   $payload   Event data +     */ +    public function parsePushEvent(array $payload) +    { +        foreach ($payload['commits'] as $commit) { + +            $task_id = $this->task->getTaskIdFromText($commit['message']); + +            if (! $task_id) { +                continue; +            } + +            $task = $this->task->getById($task_id); + +            if (! $task) { +                continue; +            } + +            if ($task['is_active'] == Task::STATUS_OPEN) { +                $this->event->trigger(self::EVENT_COMMIT, array('task_id' => $task_id) + $task); +            } +        } +    } + +    /** +     * Parse issue events +     * +     * @access public +     * @param  array   $payload   Event data +     */ +    public function parseIssueEvent(array $payload) +    { + +    } +}  | 
