Add new event subtask.create_update

This commit is contained in:
Timo
2020-04-05 23:50:11 +02:00
committed by GitHub
parent 1f6a42ace7
commit 490bcd17d8
38 changed files with 74 additions and 23 deletions

View File

@@ -3,6 +3,7 @@
namespace Kanboard\Core\Event; namespace Kanboard\Core\Event;
use Kanboard\Model\TaskModel; use Kanboard\Model\TaskModel;
use Kanboard\Model\SubtaskModel;
use Kanboard\Model\TaskLinkModel; use Kanboard\Model\TaskLinkModel;
/** /**
@@ -54,6 +55,7 @@ class EventManager
TaskModel::EVENT_ASSIGNEE_CHANGE => t('Task assignee change'), TaskModel::EVENT_ASSIGNEE_CHANGE => t('Task assignee change'),
TaskModel::EVENT_DAILY_CRONJOB => t('Daily background job for tasks'), TaskModel::EVENT_DAILY_CRONJOB => t('Daily background job for tasks'),
TaskModel::EVENT_MOVE_SWIMLANE => t('Move a task to another swimlane'), TaskModel::EVENT_MOVE_SWIMLANE => t('Move a task to another swimlane'),
SubtaskModel::EVENT_CREATE_UPDATE => t('Subtask creation or modification'),
); );
$events = array_merge($events, $this->events); $events = array_merge($events, $this->events);

View File

@@ -15,25 +15,25 @@ class SubtaskEventJob extends BaseJob
/** /**
* Set job params * Set job params
* *
* @param int $subtaskId * @param int $subtaskId
* @param string $eventName * @param array $eventNames
* @param array $values * @param array $values
* @return $this * @return $this
*/ */
public function withParams($subtaskId, $eventName, array $values = array()) public function withParams($subtaskId, array $eventNames, array $values = array())
{ {
$this->jobParams = array($subtaskId, $eventName, $values); $this->jobParams = array($subtaskId, $eventNames, $values);
return $this; return $this;
} }
/** /**
* Execute job * Execute job
* *
* @param int $subtaskId * @param int $subtaskId
* @param string $eventName * @param array $eventNames
* @param array $values * @param array $values
*/ */
public function execute($subtaskId, $eventName, array $values = array()) public function execute($subtaskId, array $eventNames, array $values = array())
{ {
$event = SubtaskEventBuilder::getInstance($this->container) $event = SubtaskEventBuilder::getInstance($this->container)
->withSubtaskId($subtaskId) ->withSubtaskId($subtaskId)
@@ -41,7 +41,9 @@ class SubtaskEventJob extends BaseJob
->buildEvent(); ->buildEvent();
if ($event !== null) { if ($event !== null) {
$this->dispatcher->dispatch($eventName, $event); foreach ($eventNames as $eventName) {
$this->dispatcher->dispatch($eventName, $event);
}
} }
} }
} }

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1409,14 +1409,16 @@ return array(
'XBT - bitcoin' => 'XBT - Bitcoin', 'XBT - bitcoin' => 'XBT - Bitcoin',
'Assigned' => 'Zugeordnet', 'Assigned' => 'Zugeordnet',
'Task limits apply to each swimlane individually' => 'Aufgabenlimit gilt pro Swimlane', 'Task limits apply to each swimlane individually' => 'Aufgabenlimit gilt pro Swimlane',
// 'Column task limits apply to each swimlane individually' => '', 'Column task limits apply to each swimlane individually' => 'Spaltenaufgabenlimit für jede Swimlane einzeln anwenden',
// 'Column task limits are applied to each swimlane individually' => '', 'Column task limits are applied to each swimlane individually' => 'Spaltenaufgabenlimit wird für jede Swimlane einzeln angewendet',
// 'Column task limits are applied across swimlanes' => '', 'Column task limits are applied across swimlanes' => 'Spaltenaufgabenlimit wird swimlaneübergreifend angewendet',
// 'Task limit: ' => '', 'Task limit: ' => 'Aufgabenlimit',
'Change to global tag' => 'Zu globalem Schlagwort machen', 'Change to global tag' => 'Zu globalem Schlagwort machen',
'Do you really want to make the tag "%s" global?' => 'Das Schlagwort "%s" wirklich global machen?', 'Do you really want to make the tag "%s" global?' => 'Das Schlagwort "%s" wirklich global machen?',
'Enable global tags for this project' => 'Globale Schlagworte für dieses Projekt aktivieren', 'Enable global tags for this project' => 'Globale Schlagworte für dieses Projekt aktivieren',
'Group membership(s):' => 'Gruppen-Mitgliedschaft(en):', 'Group membership(s):' => 'Gruppen-Mitgliedschaft(en):',
'%s is a member of the following group(s): %s' => '%s ist Mitglied in der/den folgenden Gruppe(n): %s', '%s is a member of the following group(s): %s' => '%s ist Mitglied in der/den folgenden Gruppe(n): %s',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
'Group membership(s):' => 'Gruppen Mitgliedschaft(en)',
'Subtask creation or modification' => 'Teilaufgabe erstellen oder ändern',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
'Group membership(s):' => 'Membre des groupes :', 'Group membership(s):' => 'Membre des groupes :',
'%s is a member of the following group(s): %s' => '%s est membre des groupes suivants: %s', '%s is a member of the following group(s): %s' => '%s est membre des groupes suivants: %s',
'%d/%d group(s) shown' => '%d/%d groupe(s) affiché(s)', '%d/%d group(s) shown' => '%d/%d groupe(s) affiché(s)',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,7 @@ return array(
'Group membership(s):' => 'Состоит в группах:', 'Group membership(s):' => 'Состоит в группах:',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Enable global tags for this project' => '',
// 'Group membership(s):' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -1419,4 +1419,5 @@ return array(
// 'Group membership(s):' => '', // 'Group membership(s):' => '',
// '%s is a member of the following group(s): %s' => '', // '%s is a member of the following group(s): %s' => '',
// '%d/%d group(s) shown' => '', // '%d/%d group(s) shown' => '',
// 'Subtask creation or modification' => '',
); );

View File

@@ -34,9 +34,10 @@ class SubtaskModel extends Base
* *
* @var string * @var string
*/ */
const EVENT_UPDATE = 'subtask.update'; const EVENT_UPDATE = 'subtask.update';
const EVENT_CREATE = 'subtask.create'; const EVENT_CREATE = 'subtask.create';
const EVENT_DELETE = 'subtask.delete'; const EVENT_DELETE = 'subtask.delete';
const EVENT_CREATE_UPDATE = 'subtask.create_update';
/** /**
* Get projectId from subtaskId * Get projectId from subtaskId
@@ -216,7 +217,10 @@ class SubtaskModel extends Base
if ($subtaskId !== false) { if ($subtaskId !== false) {
$this->subtaskTimeTrackingModel->updateTaskTimeTracking($values['task_id']); $this->subtaskTimeTrackingModel->updateTaskTimeTracking($values['task_id']);
$this->queueManager->push($this->subtaskEventJob->withParams($subtaskId, self::EVENT_CREATE)); $this->queueManager->push($this->subtaskEventJob->withParams(
$subtaskId,
array(self::EVENT_CREATE_UPDATE, self::EVENT_CREATE)
));
} }
return $subtaskId; return $subtaskId;
@@ -240,7 +244,11 @@ class SubtaskModel extends Base
$this->subtaskTimeTrackingModel->updateTaskTimeTracking($subtask['task_id']); $this->subtaskTimeTrackingModel->updateTaskTimeTracking($subtask['task_id']);
if ($fireEvent) { if ($fireEvent) {
$this->queueManager->push($this->subtaskEventJob->withParams($subtask['id'], self::EVENT_UPDATE, $values)); $this->queueManager->push($this->subtaskEventJob->withParams(
$subtask['id'],
array(self::EVENT_CREATE_UPDATE, self::EVENT_UPDATE),
$values
));
} }
} }
@@ -256,7 +264,7 @@ class SubtaskModel extends Base
*/ */
public function remove($subtaskId) public function remove($subtaskId)
{ {
$this->subtaskEventJob->execute($subtaskId, self::EVENT_DELETE); $this->subtaskEventJob->execute($subtaskId, array(self::EVENT_DELETE));
return $this->db->table(self::TABLE)->eq('id', $subtaskId)->remove(); return $this->db->table(self::TABLE)->eq('id', $subtaskId)->remove();
} }

View File

@@ -12,9 +12,9 @@ class SubtaskEventJobTest extends Base
public function testJobParams() public function testJobParams()
{ {
$subtaskEventJob = new SubtaskEventJob($this->container); $subtaskEventJob = new SubtaskEventJob($this->container);
$subtaskEventJob->withParams(123, 'foobar', array('k' => 'v')); $subtaskEventJob->withParams(123, array('foobar'), array('k' => 'v'));
$this->assertSame(array(123, 'foobar', array('k' => 'v')), $subtaskEventJob->getJobParams()); $this->assertSame(array(123, array('foobar'), array('k' => 'v')), $subtaskEventJob->getJobParams());
} }
public function testWithMissingSubtask() public function testWithMissingSubtask()
@@ -22,7 +22,7 @@ class SubtaskEventJobTest extends Base
$this->container['dispatcher']->addListener(SubtaskModel::EVENT_CREATE, function() {}); $this->container['dispatcher']->addListener(SubtaskModel::EVENT_CREATE, function() {});
$subtaskEventJob = new SubtaskEventJob($this->container); $subtaskEventJob = new SubtaskEventJob($this->container);
$subtaskEventJob->execute(42, SubtaskModel::EVENT_CREATE); $subtaskEventJob->execute(42, array(SubtaskModel::EVENT_CREATE));
$called = $this->container['dispatcher']->getCalledListeners(); $called = $this->container['dispatcher']->getCalledListeners();
$this->assertEmpty($called); $this->assertEmpty($called);
@@ -33,6 +33,7 @@ class SubtaskEventJobTest extends Base
$this->container['dispatcher']->addListener(SubtaskModel::EVENT_CREATE, function() {}); $this->container['dispatcher']->addListener(SubtaskModel::EVENT_CREATE, function() {});
$this->container['dispatcher']->addListener(SubtaskModel::EVENT_UPDATE, function() {}); $this->container['dispatcher']->addListener(SubtaskModel::EVENT_UPDATE, function() {});
$this->container['dispatcher']->addListener(SubtaskModel::EVENT_DELETE, function() {}); $this->container['dispatcher']->addListener(SubtaskModel::EVENT_DELETE, function() {});
$this->container['dispatcher']->addListener(SubtaskModel::EVENT_CREATE_UPDATE, function() {});
$subtaskModel = new SubtaskModel($this->container); $subtaskModel = new SubtaskModel($this->container);
$taskCreationModel = new TaskCreationModel($this->container); $taskCreationModel = new TaskCreationModel($this->container);
@@ -48,5 +49,6 @@ class SubtaskEventJobTest extends Base
$this->assertArrayHasKey(SubtaskModel::EVENT_CREATE.'.closure', $called); $this->assertArrayHasKey(SubtaskModel::EVENT_CREATE.'.closure', $called);
$this->assertArrayHasKey(SubtaskModel::EVENT_UPDATE.'.closure', $called); $this->assertArrayHasKey(SubtaskModel::EVENT_UPDATE.'.closure', $called);
$this->assertArrayHasKey(SubtaskModel::EVENT_DELETE.'.closure', $called); $this->assertArrayHasKey(SubtaskModel::EVENT_DELETE.'.closure', $called);
$this->assertArrayHasKey(SubtaskModel::EVENT_CREATE_UPDATE.'.closure', $called);
} }
} }