Send all Kanboard events to the webhook (breaking change)

This commit is contained in:
Frederic Guillot
2015-05-18 21:04:06 -04:00
parent db95e96f92
commit 6d5ffaa848
30 changed files with 501 additions and 154 deletions

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Skaber',
'Modification date' => 'Ændringsdato',
'Completion date' => 'Afslutningsdato',
'Webhook URL for task creation' => 'Webhook URL for opgave oprettelse',
'Webhook URL for task modification' => 'Webhook URL opgave redigering',
'Clone' => 'Kopier',
'Clone Project' => 'Kopier projekt',
'Project cloned successfully.' => 'Projektet er kopieret.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Erstellt von',
'Modification date' => 'Änderungsdatum',
'Completion date' => 'Abschlussdatum',
'Webhook URL for task creation' => 'Webhook URL zur Aufgabenerstellung',
'Webhook URL for task modification' => 'Webhook URL zur Aufgabenbearbeitung',
'Clone' => 'duplizieren',
'Clone Project' => 'Projekt duplizieren',
'Project cloned successfully.' => 'Projekt wurde dupliziert.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Creador',
'Modification date' => 'Fecha de modificación',
'Completion date' => 'Fecha de terminación',
'Webhook URL for task creation' => 'Disparador Web (Webhook) para la creación de tareas',
'Webhook URL for task modification' => 'Disparador Web (Webhook) para la modificación de tareas',
'Clone' => 'Clonar',
'Clone Project' => 'Clonar proyecto',
'Project cloned successfully.' => 'Proyecto clonado correctamente',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Luonut',
'Modification date' => 'Muokkauspäivä',
'Completion date' => 'Valmistumispäivä',
'Webhook URL for task creation' => 'Webhook URL tehtävän luomiselle',
'Webhook URL for task modification' => 'Webhook URL tehtävän muokkaamiselle',
'Clone' => 'Kahdenna',
'Clone Project' => 'Kahdenna projekti',
'Project cloned successfully.' => 'Projekti kahdennettu onnistuneesti',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Créateur',
'Modification date' => 'Date de modification',
'Completion date' => 'Date de complétion',
'Webhook URL for task creation' => 'URL du webhook pour la création de tâche',
'Webhook URL for task modification' => 'URL du webhook pour la modification de tâche',
'Clone' => 'Clone',
'Clone Project' => 'Cloner le projet',
'Project cloned successfully.' => 'Projet cloné avec succès.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Készítette',
'Modification date' => 'Módosítás dátuma',
'Completion date' => 'Befejezés határideje',
'Webhook URL for task creation' => 'Webhook URL a feladat létrehozásakor',
'Webhook URL for task modification' => 'Webhook URL a feladatot módosításakor',
'Clone' => 'Másolat',
'Clone Project' => 'Projekt másolása',
'Project cloned successfully.' => 'A projekt sikeresen másolva.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Creatore',
'Modification date' => 'Data di modifica',
'Completion date' => 'Data di termine',
'Webhook URL for task creation' => 'URL del Webhook per la creazione di compiti',
'Webhook URL for task modification' => 'URL del Webhook per la modifica di compiti',
'Clone' => 'Clona',
'Clone Project' => 'Clona il progetto',
'Project cloned successfully.' => 'Progetto clonato con successo.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => '作成者',
'Modification date' => '変更日',
'Completion date' => '完了日',
'Webhook URL for task creation' => 'タスク作成の Webhook URL',
'Webhook URL for task modification' => 'タスク変更の Webhook URL',
'Clone' => '複製',
'Clone Project' => 'プロジェクトの複製',
'Project cloned successfully.' => 'プロジェクトを複製しました。',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Aangemaakt door',
'Modification date' => 'Wijzigingsdatum',
'Completion date' => 'Afgerond op',
'Webhook URL for task creation' => 'Webhook URL voor aanmaken taak',
'Webhook URL for task modification' => 'Webhook URL voor wijzigen taak',
'Clone' => 'Kloon',
'Clone Project' => 'Project klonen',
'Project cloned successfully.' => 'Project succesvol gekloond.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Autor',
'Modification date' => 'Data modyfyfikacji',
'Completion date' => 'Data ukończenia',
'Webhook URL for task creation' => 'Webhook URL do tworzenia zadań',
'Webhook URL for task modification' => 'Webhook URL do modyfikacji zadań',
'Clone' => 'Sklonuj',
'Clone Project' => 'Sklonuj projekt',
'Project cloned successfully.' => 'Projekt sklonowany pomyślnie.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Criado por',
'Modification date' => 'Data da modificação',
'Completion date' => 'Data da finalização',
'Webhook URL for task creation' => 'Webhook URL para criação de tarefas',
'Webhook URL for task modification' => 'Webhook URL para modificação de tarefa',
'Clone' => 'Clonar',
'Clone Project' => 'Clonar Projeto',
'Project cloned successfully.' => 'Projeto clonado com sucesso.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Автор',
'Modification date' => 'Дата изменения',
'Completion date' => 'Дата завершения',
'Webhook URL for task creation' => 'Webhook URL для создания задачи',
'Webhook URL for task modification' => 'Webhook URL для изменения задачи',
'Clone' => 'Клонировать',
'Clone Project' => 'Клонировать проект',
'Project cloned successfully.' => 'Проект клонирован.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Autor',
'Modification date' => 'Datum izmene',
'Completion date' => 'Datum kompletiranja',
'Webhook URL for task creation' => 'Webhook URL zadatka za kreiranje',
'Webhook URL for task modification' => 'Webhook URL zadatka za izmenu',
'Clone' => 'Iskopiraj',
'Clone Project' => 'Iskopiraj projekat',
'Project cloned successfully.' => 'Projekat uspešno iskopiran.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Skapare',
'Modification date' => 'Ändringsdatum',
'Completion date' => 'Slutfört datum',
'Webhook URL for task creation' => 'Webhook URL för att skapa uppgift',
'Webhook URL for task modification' => 'Webhook URL för att ändra uppgift',
'Clone' => 'Klona',
'Clone Project' => 'Klona projekt',
'Project cloned successfully.' => 'Projektet har klonats.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'ผู้สร้าง',
'Modification date' => 'วันที่แก้ไข',
'Completion date' => 'วันที่เสร็จสิ้น',
'Webhook URL for task creation' => 'Webhook URL for task creation',
'Webhook URL for task modification' => 'Webhook URL for task modification',
'Clone' => 'เลียนแบบ',
// 'Clone Project' => '',
'Project cloned successfully.' => 'เลียนแบบโปรเจคเรียบร้อยแล้ว',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => 'Oluşturan',
'Modification date' => 'Değişiklik tarihi',
'Completion date' => 'Tamamlanma tarihi',
// 'Webhook URL for task creation' => '',
// 'Webhook URL for task modification' => '',
'Clone' => 'Kopya oluştur',
'Clone Project' => 'Projenin kopyasını oluştur',
'Project cloned successfully.' => 'Proje kopyası başarıyla oluşturuldu.',

View File

@@ -389,8 +389,6 @@ return array(
'Creator' => '创建者',
'Modification date' => '修改日期',
'Completion date' => '完成日期',
'Webhook URL for task creation' => '创建任务的Webhook URL',
'Webhook URL for task modification' => '修改任务的Webhook URL',
'Clone' => '克隆',
'Clone Project' => '复制项目',
'Project cloned successfully.' => '成功复制项目。',

View File

@@ -129,7 +129,9 @@ class Comment extends Base
->eq('id', $values['id'])
->update(array('comment' => $values['comment']));
$this->container['dispatcher']->dispatch(self::EVENT_UPDATE, new CommentEvent($values));
if ($result) {
$this->container['dispatcher']->dispatch(self::EVENT_UPDATE, new CommentEvent($values));
}
return $result;
}

View File

@@ -14,20 +14,23 @@ class Webhook extends Base
* Call the external URL
*
* @access public
* @param string $url URL to call
* @param array $task Task data
* @param array $values Event payload
*/
public function notify($url, array $task)
public function notify(array $values)
{
$url = $this->config->get('webhook_url');
$token = $this->config->get('webhook_token');
if (strpos($url, '?') !== false) {
$url .= '&token='.$token;
}
else {
$url .= '?token='.$token;
}
if (! empty($url)) {
return $this->httpClient->post($url, $task);
if (strpos($url, '?') !== false) {
$url .= '&token='.$token;
}
else {
$url .= '?token='.$token;
}
return $this->httpClient->post($url, $values);
}
}
}

View File

@@ -6,7 +6,16 @@ use PDO;
use Core\Security;
use Model\Link;
const VERSION = 70;
const VERSION = 71;
function version_71($pdo)
{
$rq = $pdo->prepare('INSERT INTO `settings` VALUES (?, ?)');
$rq->execute(array('webhook_url', ''));
$pdo->exec("DELETE FROM `settings` WHERE `option`='webhook_url_task_creation'");
$pdo->exec("DELETE FROM `settings` WHERE `option`='webhook_url_task_modification'");
}
function version_70($pdo)
{

View File

@@ -6,7 +6,16 @@ use PDO;
use Core\Security;
use Model\Link;
const VERSION = 51;
const VERSION = 52;
function version_52($pdo)
{
$rq = $pdo->prepare('INSERT INTO settings VALUES (?, ?)');
$rq->execute(array('webhook_url', ''));
$pdo->exec("DELETE FROM settings WHERE option='webhook_url_task_creation'");
$pdo->exec("DELETE FROM settings WHERE option='webhook_url_task_modification'");
}
function version_51($pdo)
{

View File

@@ -6,7 +6,16 @@ use Core\Security;
use PDO;
use Model\Link;
const VERSION = 69;
const VERSION = 70;
function version_70($pdo)
{
$rq = $pdo->prepare('INSERT INTO settings VALUES (?, ?)');
$rq->execute(array('webhook_url', ''));
$pdo->exec("DELETE FROM settings WHERE option='webhook_url_task_creation'");
$pdo->exec("DELETE FROM settings WHERE option='webhook_url_task_modification'");
}
function version_69($pdo)
{

View File

@@ -2,8 +2,13 @@
namespace Subscriber;
use Event\CommentEvent;
use Event\GenericEvent;
use Event\TaskEvent;
use Model\Comment;
use Model\Task;
use Model\File;
use Model\Subtask;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class WebhookSubscriber extends Base implements EventSubscriberInterface
@@ -11,32 +16,30 @@ class WebhookSubscriber extends Base implements EventSubscriberInterface
public static function getSubscribedEvents()
{
return array(
Task::EVENT_CREATE => array('onTaskCreation', 0),
Task::EVENT_UPDATE => array('onTaskModification', 0),
Task::EVENT_CLOSE => array('onTaskModification', 0),
Task::EVENT_OPEN => array('onTaskModification', 0),
Task::EVENT_MOVE_COLUMN => array('onTaskModification', 0),
Task::EVENT_MOVE_POSITION => array('onTaskModification', 0),
Task::EVENT_ASSIGNEE_CHANGE => array('onTaskModification', 0),
Task::EVENT_CREATE => array('execute', 0),
Task::EVENT_UPDATE => array('execute', 0),
Task::EVENT_CLOSE => array('execute', 0),
Task::EVENT_OPEN => array('execute', 0),
Task::EVENT_MOVE_COLUMN => array('execute', 0),
Task::EVENT_MOVE_POSITION => array('execute', 0),
Task::EVENT_ASSIGNEE_CHANGE => array('execute', 0),
Task::EVENT_MOVE_PROJECT => array('execute', 0),
Task::EVENT_MOVE_SWIMLANE => array('execute', 0),
Comment::EVENT_CREATE => array('execute', 0),
Comment::EVENT_UPDATE => array('execute', 0),
File::EVENT_CREATE => array('execute', 0),
Subtask::EVENT_CREATE => array('execute', 0),
Subtask::EVENT_UPDATE => array('execute', 0),
);
}
public function onTaskCreation(TaskEvent $event)
public function execute(GenericEvent $event, $event_name)
{
$this->executeRequest('webhook_url_task_creation', $event);
}
$payload = array(
'event_name' => $event_name,
'event_data' => $event->getAll(),
);
public function onTaskModification(TaskEvent $event)
{
$this->executeRequest('webhook_url_task_modification', $event);
}
public function executeRequest($parameter, TaskEvent $event)
{
$url = $this->config->get($parameter);
if (! empty($url)) {
$this->webhook->notify($url, $event->getAll());
}
$this->webhook->notify($payload);
}
}

View File

@@ -7,6 +7,7 @@
<?= $this->formCsrf() ?>
<?= $this->formHidden('id', $values) ?>
<?= $this->formHidden('task_id', $values) ?>
<?= $this->formHidden('user_id', $values) ?>
<div class="form-tabs">
<ul class="form-tabs-nav">

View File

@@ -6,11 +6,8 @@
<?= $this->formCsrf() ?>
<?= $this->formLabel(t('Webhook URL for task creation'), 'webhook_url_task_creation') ?>
<?= $this->formText('webhook_url_task_creation', $values, $errors) ?><br/>
<?= $this->formLabel(t('Webhook URL for task modification'), 'webhook_url_task_modification') ?>
<?= $this->formText('webhook_url_task_modification', $values, $errors) ?><br/>
<?= $this->formLabel(t('Webhook URL'), 'webhook_url') ?>
<?= $this->formText('webhook_url', $values, $errors) ?>
<div class="form-actions">
<input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>

View File

@@ -33,7 +33,7 @@
<div class="listing">
<ul class="no-bullet">
<li><strong><i class="fa fa-calendar"></i> <?= $this->a(t('iCalendar (iCal format, *.ics)'), 'ical', 'user', array('token' => $user['token']), false, '', '', true) ?></strong></li>
<li><strong><i class="fa fa-calendar"></i> <?= $this->a(t('iCal feed'), 'ical', 'user', array('token' => $user['token']), false, '', '', true) ?></strong></li>
</ul>
</div>
<?php endif ?>