Move bitbucket webhook to an external plugin

This commit is contained in:
Frederic Guillot
2016-01-07 20:16:05 -05:00
parent 1ef6e6c2bf
commit 54b3cfe8a1
45 changed files with 2 additions and 2388 deletions

View File

@@ -2,7 +2,6 @@
namespace Kanboard\Action;
use Kanboard\Integration\BitbucketWebhook;
use Kanboard\Integration\GitlabWebhook;
/**
@@ -33,8 +32,6 @@ class CommentCreation extends Base
public function getCompatibleEvents()
{
return array(
BitbucketWebhook::EVENT_ISSUE_COMMENT,
BitbucketWebhook::EVENT_COMMIT,
GitlabWebhook::EVENT_COMMIT,
GitlabWebhook::EVENT_ISSUE_COMMENT,
);

View File

@@ -2,8 +2,6 @@
namespace Kanboard\Action;
use Kanboard\Integration\BitbucketWebhook;
/**
* Assign a task to someone
*
@@ -31,9 +29,7 @@ class TaskAssignUser extends Base
*/
public function getCompatibleEvents()
{
return array(
BitbucketWebhook::EVENT_ISSUE_ASSIGNEE_CHANGE,
);
return array();
}
/**

View File

@@ -3,7 +3,6 @@
namespace Kanboard\Action;
use Kanboard\Integration\GitlabWebhook;
use Kanboard\Integration\BitbucketWebhook;
use Kanboard\Model\Task;
/**
@@ -36,8 +35,6 @@ class TaskClose extends Base
return array(
GitlabWebhook::EVENT_COMMIT,
GitlabWebhook::EVENT_ISSUE_CLOSED,
BitbucketWebhook::EVENT_COMMIT,
BitbucketWebhook::EVENT_ISSUE_CLOSED,
);
}

View File

@@ -3,7 +3,6 @@
namespace Kanboard\Action;
use Kanboard\Integration\GitlabWebhook;
use Kanboard\Integration\BitbucketWebhook;
/**
* Create automatically a task from a webhook
@@ -34,7 +33,6 @@ class TaskCreation extends Base
{
return array(
GitlabWebhook::EVENT_ISSUE_OPENED,
BitbucketWebhook::EVENT_ISSUE_OPENED,
);
}

View File

@@ -3,7 +3,6 @@
namespace Kanboard\Action;
use Kanboard\Integration\GitlabWebhook;
use Kanboard\Integration\BitbucketWebhook;
/**
* Open automatically a task
@@ -34,7 +33,6 @@ class TaskOpen extends Base
{
return array(
GitlabWebhook::EVENT_ISSUE_REOPENED,
BitbucketWebhook::EVENT_ISSUE_REOPENED,
);
}

View File

@@ -54,23 +54,4 @@ class Webhook extends Base
echo $result ? 'PARSED' : 'IGNORED';
}
/**
* Handle Bitbucket webhooks
*
* @access public
*/
public function bitbucket()
{
$this->checkWebhookToken();
$this->bitbucketWebhook->setProjectId($this->request->getIntegerParam('project_id'));
$result = $this->bitbucketWebhook->parsePayload(
$this->request->getHeader('X-Event-Key'),
$this->request->getJson()
);
echo $result ? 'PARSED' : 'IGNORED';
}
}

View File

@@ -45,7 +45,6 @@ use Pimple\Container;
* @property \Kanboard\Core\Lexer $lexer
* @property \Kanboard\Core\Paginator $paginator
* @property \Kanboard\Core\Template $template
* @property \Kanboard\Integration\BitbucketWebhook $bitbucketWebhook
* @property \Kanboard\Integration\GitlabWebhook $gitlabWebhook
* @property \Kanboard\Formatter\ProjectGanttFormatter $projectGanttFormatter
* @property \Kanboard\Formatter\TaskFilterGanttFormatter $taskFilterGanttFormatter

View File

@@ -3,7 +3,6 @@
namespace Kanboard\Core\Event;
use Kanboard\Integration\GitlabWebhook;
use Kanboard\Integration\BitbucketWebhook;
use Kanboard\Model\Task;
use Kanboard\Model\TaskLink;
@@ -59,12 +58,6 @@ class EventManager
GitlabWebhook::EVENT_ISSUE_REOPENED => t('Gitlab issue reopened'),
GitlabWebhook::EVENT_ISSUE_CLOSED => t('Gitlab issue closed'),
GitlabWebhook::EVENT_ISSUE_COMMENT => t('Gitlab issue comment created'),
BitbucketWebhook::EVENT_COMMIT => t('Bitbucket commit received'),
BitbucketWebhook::EVENT_ISSUE_OPENED => t('Bitbucket issue opened'),
BitbucketWebhook::EVENT_ISSUE_CLOSED => t('Bitbucket issue closed'),
BitbucketWebhook::EVENT_ISSUE_REOPENED => t('Bitbucket issue reopened'),
BitbucketWebhook::EVENT_ISSUE_ASSIGNEE_CHANGE => t('Bitbucket issue assignee change'),
BitbucketWebhook::EVENT_ISSUE_COMMENT => t('Bitbucket issue comment created'),
);
$events = array_merge($events, $this->events);

View File

@@ -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->isAssignable($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->isAssignable($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'],
'comment' => $commit['message']."\n\n[".t('Commit made by @%s on Bitbucket', $actor['display_name']).']('.$commit['links']['html']['href'].')',
) + $task)
);
return true;
}
}

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Već imaš jedan pod-zadatak "u radu"',
'Which parts of the project do you want to duplicate?' => 'Koje delove projekta želiš duplicirati?',
'Disallow login form' => 'Zabrani prijavnu formu',
'Bitbucket commit received' => 'Bitbucket: commit dobijen',
'Bitbucket webhooks' => 'Bitbucket: webhooks',
'Help on Bitbucket webhooks' => 'Pomoć na Bitbucket webhooks',
'Start' => 'Početak',
'End' => 'Kraj',
'Task age in days' => 'Trajanje zadatka u danima',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'Korisnik će dobiti email',
'Email subject' => 'Predmet email-a',
'Date' => 'Datum',
'By @%s on Bitbucket' => 'Od @%s na Bitbucket',
'Bitbucket Issue' => 'Bitbucket problem',
'Commit made by @%s on Bitbucket' => 'Commit-ao @%s na Bitbucket',
'Commit made by @%s on Gitlab' => 'Commit-ao @%s na Gitlab',
'Add a comment log when moving the task between columns' => 'Dodaj komentar u dnevnik kada se pomjeri zadatak između kolona',
'Move the task to another column when the category is changed' => 'Pomjeri zadatak u drugu kolonu kada je kategorija promijenjena',
'Send a task by email to someone' => 'Pošalji zadatak nekome emailom',
'Reopen a task' => 'Ponovo otvori zadatak',
'Bitbucket issue opened' => 'Bitbucket: otvoren problem',
'Bitbucket issue closed' => 'Bitbucket: zatvoren problem',
'Bitbucket issue reopened' => 'Bitbucket: problem ponovo otvoren',
'Bitbucket issue assignee change' => 'Bitbucket: promijenjen izvršilac problema',
'Bitbucket issue comment created' => 'Bitbucket: dodan komentar na problemu',
'Column change' => 'Promijena kolone',
'Position change' => 'Promjena pozicije',
'Swimlane change' => 'Promjena swimline trake',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Jeden dílčí úkol již aktuálně řešíte',
'Which parts of the project do you want to duplicate?' => 'Které části projektu chcete duplikovat?',
// 'Disallow login form' => '',
'Bitbucket commit received' => 'Bitbucket commit erhalten',
'Bitbucket webhooks' => 'Bitbucket webhooks',
'Help on Bitbucket webhooks' => 'Hilfe für Bitbucket webhooks',
'Start' => 'Začátek',
'End' => 'Konec',
'Task age in days' => 'Doba trvání úkolu ve dnech',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'Uživatel, který dostane E-mail',
'Email subject' => 'E-mail Předmět',
'Date' => 'Datum',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
'Add a comment log when moving the task between columns' => 'Přidat komentář když je úkol přesouván mezi sloupci',
'Move the task to another column when the category is changed' => 'Přesun úkolu do jiného sloupce když je změněna kategorie',
'Send a task by email to someone' => 'Poslat někomu úkol poštou',
'Reopen a task' => 'Znovu otevřít úkol',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
'Column change' => 'Spalte geändert',
'Position change' => 'Position geändert',
'Swimlane change' => 'Swimlane geändert',

View File

@@ -578,9 +578,6 @@ return array(
// 'You already have one subtask in progress' => '',
// 'Which parts of the project do you want to duplicate?' => '',
// 'Disallow login form' => '',
// 'Bitbucket commit received' => '',
// 'Bitbucket webhooks' => '',
// 'Help on Bitbucket webhooks' => '',
// 'Start' => '',
// 'End' => '',
// 'Task age in days' => '',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Bereits eine Teilaufgabe in Bearbeitung',
'Which parts of the project do you want to duplicate?' => 'Welcher Teil des Projekts soll kopiert werden?',
'Disallow login form' => 'Verbiete Login-Formular',
'Bitbucket commit received' => 'Bitbucket-Commit erhalten',
'Bitbucket webhooks' => 'Bitbucket-Webhooks',
'Help on Bitbucket webhooks' => 'Hilfe für Bitbucket-Webhooks',
'Start' => 'Start',
'End' => 'Ende',
'Task age in days' => 'Aufgabenalter in Tagen',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'Empfänger der E-Mail',
'Email subject' => 'E-Mail-Betreff',
'Date' => 'Datum',
'By @%s on Bitbucket' => 'Durch @%s auf Bitbucket',
'Bitbucket Issue' => 'Bitbucket-Issue',
'Commit made by @%s on Bitbucket' => 'Commit von @%s auf Bitbucket',
'Commit made by @%s on Gitlab' => 'Commit von @%s auf Gitlab',
'Add a comment log when moving the task between columns' => 'Kommentar hinzufügen, wenn Aufgabe in andere Spalte verschoben wird',
'Move the task to another column when the category is changed' => 'Aufgabe in andere Spalte verschieben, wenn Kategorie geändert wird',
'Send a task by email to someone' => 'Aufgabe per E-Mail versenden',
'Reopen a task' => 'Aufgabe wieder öffnen',
'Bitbucket issue opened' => 'Bitbucket Ticket eröffnet',
'Bitbucket issue closed' => 'Bitbucket Ticket geschlossen',
'Bitbucket issue reopened' => 'Bitbucket Ticket wieder eröffnet',
'Bitbucket issue assignee change' => 'Bitbucket Ticket Zuordnung geändert',
'Bitbucket issue comment created' => 'Bitbucket Ticket Kommentar erstellt',
'Column change' => 'Spalte geändert',
'Position change' => 'Position geändert',
'Swimlane change' => 'Swimlane geändert',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Ya dispones de una subtarea en progreso',
'Which parts of the project do you want to duplicate?' => '¿Qué partes del proyecto desea duplicar?',
'Disallow login form' => 'Deshabilitar formulario de ingreso',
'Bitbucket commit received' => 'Recibido envío desde Bitbucket',
'Bitbucket webhooks' => 'Disparadores Web (webhooks) de Bitbucket',
'Help on Bitbucket webhooks' => 'Ayuda sobre disparadores web (webhooks) de Bitbucket',
'Start' => 'Inicio',
'End' => 'Fin',
'Task age in days' => 'Edad de la tarea en días',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'Usuario que recibirá el correo',
'Email subject' => 'Asunto del correo',
'Date' => 'Fecha',
'By @%s on Bitbucket' => 'Mediante @%s en Bitbucket',
'Bitbucket Issue' => 'Asunto de Bitbucket',
'Commit made by @%s on Bitbucket' => 'Envío realizado por @%s en Bitbucket',
'Commit made by @%s on Gitlab' => 'Envío realizado por @%s en Gitlab',
'Add a comment log when moving the task between columns' => 'Añadir un comentario al mover la tarea entre columnas',
'Move the task to another column when the category is changed' => 'Mover la tarea a otra columna cuando cambia la categoría',
'Send a task by email to someone' => 'Enviar una tarea a alguien por correo',
'Reopen a task' => 'Reabrir tarea',
'Bitbucket issue opened' => 'Abierto asunto de Bitbucket',
'Bitbucket issue closed' => 'Cerrado asunto de Bitbucket',
'Bitbucket issue reopened' => 'Reabierto asunto de Bitbucket',
'Bitbucket issue assignee change' => 'Cambiado concesionario de asunto de Bitbucket',
'Bitbucket issue comment created' => 'Creado comentario de asunto de Bitbucket',
'Column change' => 'Cambio de columna',
'Position change' => 'Cambio de posición',
'Swimlane change' => 'Cambio de calle',

View File

@@ -578,9 +578,6 @@ return array(
// 'You already have one subtask in progress' => '',
// 'Which parts of the project do you want to duplicate?' => '',
// 'Disallow login form' => '',
// 'Bitbucket commit received' => '',
// 'Bitbucket webhooks' => '',
// 'Help on Bitbucket webhooks' => '',
// 'Start' => '',
// 'End' => '',
// 'Task age in days' => '',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -580,9 +580,6 @@ return array(
'You already have one subtask in progress' => 'Vous avez déjà une sous-tâche en progrès',
'Which parts of the project do you want to duplicate?' => 'Quelles parties du projet voulez-vous dupliquer ?',
'Disallow login form' => 'Interdire le formulaire d\'authentification',
'Bitbucket commit received' => 'Commit reçu via Bitbucket',
'Bitbucket webhooks' => 'Webhook Bitbucket',
'Help on Bitbucket webhooks' => 'Aide sur les webhooks Bitbucket',
'Start' => 'Début',
'End' => 'Fin',
'Task age in days' => 'Âge de la tâche en jours',
@@ -752,19 +749,10 @@ return array(
'User that will receive the email' => 'Utilisateur qui va reçevoir l\'email',
'Email subject' => 'Sujet de l\'email',
'Date' => 'Date',
'By @%s on Bitbucket' => 'Par @%s sur Bitbucket',
'Bitbucket Issue' => 'Ticket Bitbucket',
'Commit made by @%s on Bitbucket' => 'Commit fait par @%s sur Bitbucket',
'Commit made by @%s on Gitlab' => 'Commit fait par @%s sur Gitlab',
'Add a comment log when moving the task between columns' => 'Ajouter un commentaire d\'information lorsque une tâche est déplacée dans une autre colonne',
'Move the task to another column when the category is changed' => 'Déplacer une tâche vers une autre colonne lorsque la catégorie a changé',
'Send a task by email to someone' => 'Envoyer une tâche par email à quelqu\'un',
'Reopen a task' => 'Rouvrir une tâche',
'Bitbucket issue opened' => 'Ticket Bitbucket ouvert',
'Bitbucket issue closed' => 'Ticket Bitbucket fermé',
'Bitbucket issue reopened' => 'Ticket Bitbucket rouvert',
'Bitbucket issue assignee change' => 'Changement d\'assigné sur un ticket Bitbucket',
'Bitbucket issue comment created' => 'Commentaire créé sur un ticket Bitbucket',
'Column change' => 'Changement de colonne',
'Position change' => 'Changement de position',
'Swimlane change' => 'Changement de swimlane',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Már van egy folyamatban levő részfeladata',
'Which parts of the project do you want to duplicate?' => 'A projekt mely részeit szeretné másolni?',
// 'Disallow login form' => '',
'Bitbucket commit received' => 'Bitbucket commit érkezett',
'Bitbucket webhooks' => 'Bitbucket webhooks',
'Help on Bitbucket webhooks' => 'Bitbucket webhooks súgó',
'Start' => 'Kezdet',
'End' => 'Vég',
'Task age in days' => 'Feladat életkora napokban',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Anda sudah ada satu subtugas dalam proses',
'Which parts of the project do you want to duplicate?' => 'Bagian dalam proyek mana yang ingin anda duplikasi?',
'Disallow login form' => 'Larang formulir masuk',
'Bitbucket commit received' => 'Menerima komit Bitbucket',
'Bitbucket webhooks' => 'Webhook Bitbucket',
'Help on Bitbucket webhooks' => 'Bantuan pada webhook Bitbucket',
'Start' => 'Mulai',
'End' => 'Selesai',
'Task age in days' => 'Usia tugas dalam hari',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'Pengguna yang akan menerima email',
'Email subject' => 'Subjek Email',
'Date' => 'Tanggal',
'By @%s on Bitbucket' => 'Oleh @%s pada Bitbucket',
'Bitbucket Issue' => 'Tiket Bitbucket',
'Commit made by @%s on Bitbucket' => 'Komit dibuat oleh @%s pada Bitbucket',
'Commit made by @%s on Gitlab' => 'Komit dibuat oleh @%s pada Gitlab',
'Add a comment log when moving the task between columns' => 'Menambahkan log komentar ketika memindahkan tugas antara kolom',
'Move the task to another column when the category is changed' => 'Pindahkan tugas ke kolom lain ketika kategori berubah',
'Send a task by email to someone' => 'Kirim tugas melalui email ke seseorang',
'Reopen a task' => 'Membuka kembali tugas',
'Bitbucket issue opened' => 'Tiket Bitbucket dibuka',
'Bitbucket issue closed' => 'Tiket Bitbucket ditutup',
'Bitbucket issue reopened' => 'Tiket Bitbucket dibuka kembali',
'Bitbucket issue assignee change' => 'Perubahan penugasan tiket Bitbucket',
'Bitbucket issue comment created' => 'Komentar dibuat tiket Bitbucket',
'Column change' => 'Kolom berubah',
'Position change' => 'Posisi berubah',
'Swimlane change' => 'Swimlane berubah',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Hai già un sotto-compito in progresso',
'Which parts of the project do you want to duplicate?' => 'Quali parti del progetto vuoi duplicare?',
// 'Disallow login form' => '',
'Bitbucket commit received' => 'Commit ricevuto da Bitbucket',
'Bitbucket webhooks' => 'Webhooks di Bitbucket',
'Help on Bitbucket webhooks' => 'Guida ai Webhooks di Bitbucket',
'Start' => 'Inizio',
'End' => 'Fine',
'Task age in days' => 'Anzianità del compito in giorni',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'すでに進行中のサブタスクがあります。',
'Which parts of the project do you want to duplicate?' => 'プロジェクトの何を複製しますか?',
// 'Disallow login form' => '',
'Bitbucket commit received' => 'Bitbucket コミットを受信しました',
'Bitbucket webhooks' => 'Bitbucket Webhooks',
'Help on Bitbucket webhooks' => 'Bitbucket Webhooks のヘルプ',
'Start' => '開始',
'End' => '終了',
'Task age in days' => 'タスクの経過日数',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
// 'You already have one subtask in progress' => '',
'Which parts of the project do you want to duplicate?' => 'Hvilke deler av dette prosjektet ønsker du å kopiere?',
// 'Disallow login form' => '',
// 'Bitbucket commit received' => '',
// 'Bitbucket webhooks' => '',
// 'Help on Bitbucket webhooks' => '',
'Start' => 'Start',
'End' => 'Slutt',
'Task age in days' => 'Dager siden oppgaven ble opprettet',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
'Date' => 'Dato',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
'Add a comment log when moving the task between columns' => 'Legg til en kommentar i loggen når en oppgave flyttes mellom kolonnene',
'Move the task to another column when the category is changed' => 'Flytt oppgaven til en annen kolonne når kategorien endres',
'Send a task by email to someone' => 'Send en oppgave på epost til noen',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
'Column change' => 'Endret kolonne',
'Position change' => 'Posisjonsendring',
'Swimlane change' => 'Endret svømmebane',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'U heeft al een subtaak in behandeling',
'Which parts of the project do you want to duplicate?' => 'Welke onderdelen van het project wilt u dupliceren?',
// 'Disallow login form' => '',
'Bitbucket commit received' => 'Bitbucket commit ontvangen',
'Bitbucket webhooks' => 'Bitbucket webhooks',
'Help on Bitbucket webhooks' => 'Help bij Bitbucket webhooks',
'Start' => 'Start',
'End' => 'Eind',
'Task age in days' => 'Leeftijd taak in dagen',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Masz już zadanie o statusie "w trakcie"',
'Which parts of the project do you want to duplicate?' => 'Które elementy projektu chcesz zduplikować?',
// 'Disallow login form' => '',
// 'Bitbucket commit received' => '',
// 'Bitbucket webhooks' => '',
// 'Help on Bitbucket webhooks' => '',
'Start' => 'Początek',
'End' => 'Koniec',
'Task age in days' => 'Wiek zadania w dniach',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
'Send a task by email to someone' => 'Wyślij zadanie mailem do kogokolwiek',
'Reopen a task' => 'Otwórz ponownie zadanie',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
'Column change' => 'Zmiana kolumny',
'Position change' => 'Zmiana pozycji',
'Swimlane change' => 'Zmiana Swimlane',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Você já tem um subtarefa em andamento',
'Which parts of the project do you want to duplicate?' => 'Quais partes do projeto você deseja duplicar?',
'Disallow login form' => 'Proibir o formulário de login',
'Bitbucket commit received' => '"Commit" recebido via Bitbucket',
'Bitbucket webhooks' => 'Webhook Bitbucket',
'Help on Bitbucket webhooks' => 'Ajuda sobre os webhooks do Bitbucket',
'Start' => 'Início',
'End' => 'Fim',
'Task age in days' => 'Idade da tarefa em dias',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'O usuário que vai receber o e-mail',
'Email subject' => 'Assunto do e-mail',
'Date' => 'Data',
'By @%s on Bitbucket' => 'Por @%s no Bitbucket',
'Bitbucket Issue' => 'Bitbucket Issue',
'Commit made by @%s on Bitbucket' => 'Commit feito por @%s no Bitbucket',
'Commit made by @%s on Gitlab' => 'Commit feito por @%s no Gitlab',
'Add a comment log when moving the task between columns' => 'Adicionar um comentário de log quando uma tarefa é movida para uma outra coluna',
'Move the task to another column when the category is changed' => 'Mover uma tarefa para outra coluna quando a categoria mudou',
'Send a task by email to someone' => 'Enviar uma tarefa por e-mail a alguém',
'Reopen a task' => 'Reabrir uma tarefa',
'Bitbucket issue opened' => 'Bitbucket issue opened',
'Bitbucket issue closed' => 'Bitbucket issue closed',
'Bitbucket issue reopened' => 'Bitbucket issue reopened',
'Bitbucket issue assignee change' => 'Bitbucket issue assignee change',
'Bitbucket issue comment created' => 'Bitbucket issue comment created',
'Column change' => 'Mudança de coluna',
'Position change' => 'Mudança de posição',
'Swimlane change' => 'Mudança de swimlane',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Já tem uma subtarefa em andamento',
'Which parts of the project do you want to duplicate?' => 'Quais as partes do projecto que deseja duplicar?',
'Disallow login form' => 'Desactivar login',
'Bitbucket commit received' => '"Commit" recebido via Bitbucket',
'Bitbucket webhooks' => 'Webhook Bitbucket',
'Help on Bitbucket webhooks' => 'Ajuda sobre os webhooks Bitbucket',
'Start' => 'Inicio',
'End' => 'Fim',
'Task age in days' => 'Idade da tarefa em dias',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'O utilizador que vai receber o e-mail',
'Email subject' => 'Assunto do e-mail',
'Date' => 'Data',
'By @%s on Bitbucket' => 'Por @%s no Bitbucket',
'Bitbucket Issue' => 'Problema Bitbucket',
'Commit made by @%s on Bitbucket' => 'Commit feito por @%s no Bitbucket',
'Commit made by @%s on Gitlab' => 'Commit feito por @%s no Gitlab',
'Add a comment log when moving the task between columns' => 'Adicionar um comentário de log quando uma tarefa é movida para uma outra coluna',
'Move the task to another column when the category is changed' => 'Mover uma tarefa para outra coluna quando a categoria mudar',
'Send a task by email to someone' => 'Enviar uma tarefa por e-mail a alguém',
'Reopen a task' => 'Reabrir uma tarefa',
'Bitbucket issue opened' => 'Problema aberto no Bitbucket',
'Bitbucket issue closed' => 'Problema fechado no Bitbucket',
'Bitbucket issue reopened' => 'Problema reaberto no Bitbucket',
'Bitbucket issue assignee change' => 'Alterar assignação do problema no Bitbucket',
'Bitbucket issue comment created' => 'Comentário ao problema adicionado ao Bitbucket',
'Column change' => 'Mudança de coluna',
'Position change' => 'Mudança de posição',
'Swimlane change' => 'Mudança de swimlane',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'У вас уже есть одна задача в разработке',
'Which parts of the project do you want to duplicate?' => 'Какие части проекта должны быть дублированы?',
'Disallow login form' => 'Запретить форму входа',
'Bitbucket commit received' => 'Получен коммит с Bitbucket',
'Bitbucket webhooks' => 'BitBucket webhooks',
'Help on Bitbucket webhooks' => 'Помощь по BitBucket webhooks',
'Start' => 'Начало',
'End' => 'Конец',
'Task age in days' => 'Возраст задачи в днях',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'Пользователь, который будет получать e-mail',
'Email subject' => 'Тема e-mail',
'Date' => 'Дата',
'By @%s on Bitbucket' => 'Польз. @%s на Bitbucket',
'Bitbucket Issue' => 'Задача Bitbucket',
'Commit made by @%s on Bitbucket' => 'Коммит сделан польз. @%s на Bitbucket',
'Commit made by @%s on Gitlab' => 'Коммит сделан польз. @%s в Gitlab',
'Add a comment log when moving the task between columns' => 'Добавлять запись при перемещении задачи между колонками',
'Move the task to another column when the category is changed' => 'Переносить задачи в другую колонку при изменении категории',
'Send a task by email to someone' => 'Отправить задачу по email',
'Reopen a task' => 'Переоткрыть задачу',
'Bitbucket issue opened' => 'Открыта задача Bitbucket',
'Bitbucket issue closed' => 'Закрыта задача Bitbucket',
'Bitbucket issue reopened' => 'Переоткрыта задача Bitbucket',
'Bitbucket issue assignee change' => 'Изменный назначенный для задачи на Bitbucket',
'Bitbucket issue comment created' => 'Создан комментарий для задачи на Bitbucket',
'Column change' => 'Изменение колонки',
'Position change' => 'Позиция изменена',
'Swimlane change' => 'Дорожка изменена',

View File

@@ -578,9 +578,6 @@ return array(
// 'You already have one subtask in progress' => '',
'Which parts of the project do you want to duplicate?' => 'Koje delove projekta želite da kopirate',
// 'Disallow login form' => '',
// 'Bitbucket commit received' => '',
// 'Bitbucket webhooks' => '',
// 'Help on Bitbucket webhooks' => '',
// 'Start' => '',
// 'End' => '',
// 'Task age in days' => '',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Du har redan en deluppgift igång',
'Which parts of the project do you want to duplicate?' => 'Vilka delar av projektet vill du duplicera?',
// 'Disallow login form' => '',
'Bitbucket commit received' => 'Bitbucket bidrag mottaget',
'Bitbucket webhooks' => 'Bitbucket webhooks',
'Help on Bitbucket webhooks' => 'Hjälp för Bitbucket webhooks',
'Start' => 'Start',
'End' => 'Slut',
'Task age in days' => 'Uppgiftsålder i dagar',
@@ -750,19 +747,10 @@ return array(
'User that will receive the email' => 'Användare som kommer att ta emot mailet',
'Email subject' => 'E-post ämne',
'Date' => 'Datum',
'By @%s on Bitbucket' => 'Av @%s på Bitbucket',
'Bitbucket Issue' => 'Bitbucket fråga',
'Commit made by @%s on Bitbucket' => 'Bidrag gjort av @%s på Bitbucket',
'Commit made by @%s on Gitlab' => 'Bidrag gjort av @%s på Gitlab',
'Add a comment log when moving the task between columns' => 'Lägg till en kommentarslogg när en uppgift flyttas mellan kolumner',
'Move the task to another column when the category is changed' => 'Flyttas uppgiften till en annan kolumn när kategorin ändras',
'Send a task by email to someone' => 'Skicka en uppgift med e-post till någon',
'Reopen a task' => 'Återöppna en uppgift',
'Bitbucket issue opened' => 'Bitbucketfråga öppnad',
'Bitbucket issue closed' => 'Bitbucketfråga stängd',
'Bitbucket issue reopened' => 'Bitbucketfråga återöppnad',
'Bitbucket issue assignee change' => 'Bitbucketfråga tilldelningsändring',
'Bitbucket issue comment created' => 'Bitbucketfråga kommentar skapad',
'Column change' => 'Kolumnändring',
'Position change' => 'Positionsändring',
'Swimlane change' => 'Swimlaneändring',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'คุณมีหนึ่งงานย่อยที่กำลังทำงาน',
// 'Which parts of the project do you want to duplicate?' => '',
// 'Disallow login form' => '',
// 'Bitbucket commit received' => '',
// 'Bitbucket webhooks' => '',
// 'Help on Bitbucket webhooks' => '',
'Start' => 'เริ่ม',
'End' => 'จบ',
'Task age in days' => 'อายุงาน',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => 'Zaten işlemde olan bir alt görev var',
'Which parts of the project do you want to duplicate?' => 'Projenin hangi kısımlarının kopyasını oluşturmak istiyorsunuz?',
// 'Disallow login form' => '',
'Bitbucket commit received' => 'Bitbucket commit alındı',
'Bitbucket webhooks' => 'Bitbucket webhooks',
'Help on Bitbucket webhooks' => 'Bitbucket webhooks için yardım',
'Start' => 'Başlangıç',
'End' => 'Son',
'Task age in days' => 'Görev yaşı gün olarak',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
// 'Email subject' => '',
// 'Date' => '',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
// 'Reopen a task' => '',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -578,9 +578,6 @@ return array(
'You already have one subtask in progress' => '你已经有了一个进行中的子任务',
'Which parts of the project do you want to duplicate?' => '要复制项目的哪些内容?',
// 'Disallow login form' => '',
'Bitbucket commit received' => '收到Bitbucket提交',
'Bitbucket webhooks' => 'Bitbucket网络钩子',
'Help on Bitbucket webhooks' => 'Bitbucket网络钩子帮助',
'Start' => '开始',
'End' => '结束',
'Task age in days' => '任务存在天数',
@@ -750,19 +747,10 @@ return array(
// 'User that will receive the email' => '',
'Email subject' => '邮件主题',
'Date' => '日期',
// 'By @%s on Bitbucket' => '',
// 'Bitbucket Issue' => '',
// 'Commit made by @%s on Bitbucket' => '',
// 'Commit made by @%s on Gitlab' => '',
// 'Add a comment log when moving the task between columns' => '',
// 'Move the task to another column when the category is changed' => '',
// 'Send a task by email to someone' => '',
'Reopen a task' => '重新开始一个任务',
// 'Bitbucket issue opened' => '',
// 'Bitbucket issue closed' => '',
// 'Bitbucket issue reopened' => '',
// 'Bitbucket issue assignee change' => '',
// 'Bitbucket issue comment created' => '',
// 'Column change' => '',
// 'Position change' => '',
// 'Swimlane change' => '',

View File

@@ -116,7 +116,6 @@ class ClassProvider implements ServiceProviderInterface
'UserProfile',
),
'Integration' => array(
'BitbucketWebhook',
'GitlabWebhook',
)
);

View File

@@ -12,10 +12,4 @@
<input type="text" class="auto-select" readonly="readonly" value="<?= $this->url->href('webhook', 'gitlab', array('token' => $webhook_token, 'project_id' => $project['id']), false, '', true) ?>"/><br/>
<p class="form-help"><?= $this->url->doc(t('Help on Gitlab webhooks'), 'gitlab-webhooks') ?></p>
</div>
<h3><i class="fa fa-bitbucket fa-fw"></i>&nbsp;<?= t('Bitbucket webhooks') ?></h3>
<div class="listing">
<input type="text" class="auto-select" readonly="readonly" value="<?= $this->url->href('webhook', 'bitbucket', array('token' => $webhook_token, 'project_id' => $project['id']), false, '', true) ?>"/><br/>
<p class="form-help"><?= $this->url->doc(t('Help on Bitbucket webhooks'), 'bitbucket-webhooks') ?></p>
</div>
</form>