From 87d2c6d99e6eb26b526f5da22b3496e3d02d11ed Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Thu, 26 Mar 2015 22:40:46 -0400 Subject: Add task transitions history --- app/Controller/Task.php | 15 ++++++ app/Locale/da_DK/translations.php | 3 ++ app/Locale/de_DE/translations.php | 3 ++ app/Locale/es_ES/translations.php | 3 ++ app/Locale/fi_FI/translations.php | 3 ++ app/Locale/fr_FR/translations.php | 3 ++ app/Locale/hu_HU/translations.php | 3 ++ app/Locale/it_IT/translations.php | 3 ++ app/Locale/ja_JP/translations.php | 3 ++ app/Locale/nl_NL/translations.php | 3 ++ app/Locale/pl_PL/translations.php | 3 ++ app/Locale/pt_BR/translations.php | 3 ++ app/Locale/ru_RU/translations.php | 3 ++ app/Locale/sr_Latn_RS/translations.php | 3 ++ app/Locale/sv_SE/translations.php | 3 ++ app/Locale/th_TH/translations.php | 3 ++ app/Locale/tr_TR/translations.php | 3 ++ app/Locale/zh_CN/translations.php | 3 ++ app/Model/TaskPosition.php | 3 ++ app/Model/Transition.php | 67 +++++++++++++++++++++++++ app/Schema/Mysql.php | 26 +++++++++- app/Schema/Postgres.php | 25 ++++++++- app/Schema/Sqlite.php | 25 ++++++++- app/ServiceProvider/ClassProvider.php | 1 + app/ServiceProvider/EventDispatcherProvider.php | 2 + app/Subscriber/TransitionSubscriber.php | 26 ++++++++++ app/Template/task/sidebar.php | 3 ++ app/Template/task/transitions.php | 26 ++++++++++ composer.lock | 43 +++++++++------- 29 files changed, 291 insertions(+), 22 deletions(-) create mode 100644 app/Model/Transition.php create mode 100644 app/Subscriber/TransitionSubscriber.php create mode 100644 app/Template/task/transitions.php diff --git a/app/Controller/Task.php b/app/Controller/Task.php index ace40a01..64017582 100644 --- a/app/Controller/Task.php +++ b/app/Controller/Task.php @@ -526,4 +526,19 @@ class Task extends Base 'subtask_paginator' => $subtask_paginator, ))); } + + /** + * Display the task transitions + * + * @access public + */ + public function transitions() + { + $task = $this->getTask(); + + $this->response->html($this->taskLayout('task/transitions', array( + 'task' => $task, + 'transitions' => $this->transition->getAllByTask($task['id']), + ))); + } } diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index f9fe1bab..8263cbb9 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index 9898e7f3..6202cd1b 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index 0f576376..edd49a33 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index a5c76cd1..9a62bf54 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index 7a88669c..6baca123 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -811,4 +811,7 @@ return array( 'Move the task to another column when assignee is cleared' => 'Déplacer la tâche dans une autre colonne lorsque celle-ci n\'est plus assignée', 'Source column' => 'Colonne d\'origine', 'Show subtask estimates in the user calendar' => 'Afficher le temps estimé des sous-tâches dans le calendrier utilisateur', + 'Transitions' => 'Transitions', + 'Executer' => 'Exécutant', + 'Time spent in the column' => 'Temps passé dans la colonne', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index c6bf929f..42252f2b 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -809,4 +809,7 @@ return array( 'Move the task to another column when assignee is cleared' => 'Feladat másik oszlopba helyezése felhasználóhoz rendélés törlésekor', 'Source column' => 'Forrás oszlop', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index 08444549..33072967 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index aa6c51f0..cbc40254 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php index 1a22bc30..bf6c3665 100644 --- a/app/Locale/nl_NL/translations.php +++ b/app/Locale/nl_NL/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index 983b42a8..da4bd8ac 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index 79856921..dae703ea 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index 181b035c..bd26ea53 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php index 0f7df233..bfd9352d 100644 --- a/app/Locale/sr_Latn_RS/translations.php +++ b/app/Locale/sr_Latn_RS/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 4da013bb..31c5bf91 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index c478c9ba..228b5e3c 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php index 93638f89..9d7cfdd2 100644 --- a/app/Locale/tr_TR/translations.php +++ b/app/Locale/tr_TR/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index aa679327..8859cd17 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -809,4 +809,7 @@ return array( // 'Move the task to another column when assignee is cleared' => '', // 'Source column' => '', // 'Show subtask estimates in the user calendar' => '', + // 'Transitions' => '', + // 'Executer' => '', + // 'Time spent in the column' => '', ); diff --git a/app/Model/TaskPosition.php b/app/Model/TaskPosition.php index 6dd10b02..ab5fe43b 100644 --- a/app/Model/TaskPosition.php +++ b/app/Model/TaskPosition.php @@ -143,6 +143,9 @@ class TaskPosition extends Base 'position' => $new_position, 'column_id' => $new_column_id, 'swimlane_id' => $new_swimlane_id, + 'src_column_id' => $task['column_id'], + 'dst_column_id' => $new_column_id, + 'date_moved' => $task['date_moved'], ); if ($task['swimlane_id'] != $new_swimlane_id) { diff --git a/app/Model/Transition.php b/app/Model/Transition.php new file mode 100644 index 00000000..583d3aca --- /dev/null +++ b/app/Model/Transition.php @@ -0,0 +1,67 @@ +db->table(self::TABLE)->insert(array( + 'user_id' => $user_id, + 'project_id' => $task['project_id'], + 'task_id' => $task['task_id'], + 'src_column_id' => $task['src_column_id'], + 'dst_column_id' => $task['dst_column_id'], + 'date' => time(), + 'time_spent' => time() - $task['date_moved'] + )); + } + + /** + * Get all transitions by task + * + * @access public + * @param integer $task_id + * @return array + */ + public function getAllByTask($task_id) + { + return $this->db->table(self::TABLE) + ->columns( + 'src.title as src_column', + 'dst.title as dst_column', + User::TABLE.'.name', + User::TABLE.'.username', + self::TABLE.'.user_id', + self::TABLE.'.date', + self::TABLE.'.time_spent' + ) + ->eq('task_id', $task_id) + ->desc('date') + ->join(User::TABLE, 'id', 'user_id') + ->join(Board::TABLE.' as src', 'id', 'src_column_id', self::TABLE, 'src') + ->join(Board::TABLE.' as dst', 'id', 'dst_column_id', self::TABLE, 'dst') + ->findAll(); + } +} diff --git a/app/Schema/Mysql.php b/app/Schema/Mysql.php index 3669a647..30fccbfa 100644 --- a/app/Schema/Mysql.php +++ b/app/Schema/Mysql.php @@ -6,7 +6,31 @@ use PDO; use Core\Security; use Model\Link; -const VERSION = 55; +const VERSION = 56; + +function version_56($pdo) +{ + $pdo->exec('CREATE TABLE transitions ( + `id` INT NOT NULL AUTO_INCREMENT, + `user_id` INT NOT NULL, + `project_id` INT NOT NULL, + `task_id` INT NOT NULL, + `src_column_id` INT NOT NULL, + `dst_column_id` INT NOT NULL, + `date` INT NOT NULL, + `time_spent` INT DEFAULT 0, + FOREIGN KEY(src_column_id) REFERENCES columns(id) ON DELETE CASCADE, + FOREIGN KEY(dst_column_id) REFERENCES columns(id) ON DELETE CASCADE, + FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE, + FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE, + PRIMARY KEY(id) + ) ENGINE=InnoDB CHARSET=utf8'); + + $pdo->exec("CREATE INDEX transitions_task_index ON transitions(task_id)"); + $pdo->exec("CREATE INDEX transitions_project_index ON transitions(project_id)"); + $pdo->exec("CREATE INDEX transitions_user_index ON transitions(user_id)"); +} function version_55($pdo) { diff --git a/app/Schema/Postgres.php b/app/Schema/Postgres.php index b60e441b..ecf8664d 100644 --- a/app/Schema/Postgres.php +++ b/app/Schema/Postgres.php @@ -6,7 +6,30 @@ use PDO; use Core\Security; use Model\Link; -const VERSION = 36; +const VERSION = 37; + +function version_37($pdo) +{ + $pdo->exec('CREATE TABLE transitions ( + "id" SERIAL PRIMARY KEY, + "user_id" INTEGER NOT NULL, + "project_id" INTEGER NOT NULL, + "task_id" INTEGER NOT NULL, + "src_column_id" INTEGER NOT NULL, + "dst_column_id" INTEGER NOT NULL, + "date" INTEGER NOT NULL, + "time_spent" INTEGER DEFAULT 0, + FOREIGN KEY(src_column_id) REFERENCES columns(id) ON DELETE CASCADE, + FOREIGN KEY(dst_column_id) REFERENCES columns(id) ON DELETE CASCADE, + FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE, + FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE + )'); + + $pdo->exec("CREATE INDEX transitions_task_index ON transitions(task_id)"); + $pdo->exec("CREATE INDEX transitions_project_index ON transitions(project_id)"); + $pdo->exec("CREATE INDEX transitions_user_index ON transitions(user_id)"); +} function version_36($pdo) { diff --git a/app/Schema/Sqlite.php b/app/Schema/Sqlite.php index 34ac2c6f..19af5dd3 100644 --- a/app/Schema/Sqlite.php +++ b/app/Schema/Sqlite.php @@ -6,7 +6,30 @@ use Core\Security; use PDO; use Model\Link; -const VERSION = 54; +const VERSION = 55; + +function version_55($pdo) +{ + $pdo->exec('CREATE TABLE transitions ( + "id" INTEGER PRIMARY KEY, + "user_id" INTEGER NOT NULL, + "project_id" INTEGER NOT NULL, + "task_id" INTEGER NOT NULL, + "src_column_id" INTEGER NOT NULL, + "dst_column_id" INTEGER NOT NULL, + "date" INTEGER NOT NULL, + "time_spent" INTEGER DEFAULT 0, + FOREIGN KEY(src_column_id) REFERENCES columns(id) ON DELETE CASCADE, + FOREIGN KEY(dst_column_id) REFERENCES columns(id) ON DELETE CASCADE, + FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE, + FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE + )'); + + $pdo->exec("CREATE INDEX transitions_task_index ON transitions(task_id)"); + $pdo->exec("CREATE INDEX transitions_project_index ON transitions(project_id)"); + $pdo->exec("CREATE INDEX transitions_user_index ON transitions(user_id)"); +} function version_54($pdo) { diff --git a/app/ServiceProvider/ClassProvider.php b/app/ServiceProvider/ClassProvider.php index 2373ab01..c25ceb62 100644 --- a/app/ServiceProvider/ClassProvider.php +++ b/app/ServiceProvider/ClassProvider.php @@ -56,6 +56,7 @@ class ClassProvider implements ServiceProviderInterface 'TimetableWeek', 'TimetableOff', 'TimetableExtra', + 'Transition', 'User', 'UserSession', 'Webhook', diff --git a/app/ServiceProvider/EventDispatcherProvider.php b/app/ServiceProvider/EventDispatcherProvider.php index ec382206..f002db74 100644 --- a/app/ServiceProvider/EventDispatcherProvider.php +++ b/app/ServiceProvider/EventDispatcherProvider.php @@ -14,6 +14,7 @@ use Subscriber\ProjectModificationDateSubscriber; use Subscriber\WebhookSubscriber; use Subscriber\SubtaskTimesheetSubscriber; use Subscriber\TaskMovedDateSubscriber; +use Subscriber\TransitionSubscriber; class EventDispatcherProvider implements ServiceProviderInterface { @@ -29,6 +30,7 @@ class EventDispatcherProvider implements ServiceProviderInterface $container['dispatcher']->addSubscriber(new NotificationSubscriber($container)); $container['dispatcher']->addSubscriber(new SubtaskTimesheetSubscriber($container)); $container['dispatcher']->addSubscriber(new TaskMovedDateSubscriber($container)); + $container['dispatcher']->addSubscriber(new TransitionSubscriber($container)); // Automatic actions $container['action']->attachEvents(); diff --git a/app/Subscriber/TransitionSubscriber.php b/app/Subscriber/TransitionSubscriber.php new file mode 100644 index 00000000..347dd37d --- /dev/null +++ b/app/Subscriber/TransitionSubscriber.php @@ -0,0 +1,26 @@ + array('execute', 0), + ); + } + + public function execute(TaskEvent $event) + { + $user_id = $this->userSession->getId(); + + if (! empty($user_id)) { + $this->transition->save($user_id, $event->getAll()); + } + } +} \ No newline at end of file diff --git a/app/Template/task/sidebar.php b/app/Template/task/sidebar.php index f41be14d..cb3b3c69 100644 --- a/app/Template/task/sidebar.php +++ b/app/Template/task/sidebar.php @@ -4,6 +4,9 @@
  • a(t('Summary'), 'task', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>
  • +
  • + a(t('Transitions'), 'task', 'transitions', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> +
  • 0 || $task['time_spent'] > 0): ?>
  • a(t('Time tracking'), 'task', 'timesheet', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?> diff --git a/app/Template/task/transitions.php b/app/Template/task/transitions.php new file mode 100644 index 00000000..2f45eb39 --- /dev/null +++ b/app/Template/task/transitions.php @@ -0,0 +1,26 @@ + + + +

    + + + + + + + + + + + + + + + + + + +
    e($transition['src_column']) ?>e($transition['dst_column']) ?>a($this->e($transition['name'] ?: $transition['username']), 'user', 'show', array('user_id' => $transition['user_id'])) ?>
    + \ No newline at end of file diff --git a/composer.lock b/composer.lock index 3d68e4eb..3331ecd1 100644 --- a/composer.lock +++ b/composer.lock @@ -88,12 +88,12 @@ "source": { "type": "git", "url": "https://github.com/fguillot/picoDb.git", - "reference": "d7ef5561d6d76c50717492822813125f9699700a" + "reference": "cd6a571d2de5c0b30d538d7cd6603dc16b25b844" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fguillot/picoDb/zipball/d7ef5561d6d76c50717492822813125f9699700a", - "reference": "d7ef5561d6d76c50717492822813125f9699700a", + "url": "https://api.github.com/repos/fguillot/picoDb/zipball/cd6a571d2de5c0b30d538d7cd6603dc16b25b844", + "reference": "cd6a571d2de5c0b30d538d7cd6603dc16b25b844", "shasum": "" }, "require": { @@ -117,7 +117,7 @@ ], "description": "Minimalist database query builder", "homepage": "https://github.com/fguillot/picoDb", - "time": "2015-03-15 21:03:40" + "time": "2015-03-27 02:21:18" }, { "name": "fguillot/simple-validator", @@ -393,17 +393,17 @@ }, { "name": "symfony/console", - "version": "v2.6.4", + "version": "v2.6.5", "target-dir": "Symfony/Component/Console", "source": { "type": "git", "url": "https://github.com/symfony/Console.git", - "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34" + "reference": "53f86497ccd01677e22435cfb7262599450a90d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/e44154bfe3e41e8267d7a3794cd9da9a51cfac34", - "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34", + "url": "https://api.github.com/repos/symfony/Console/zipball/53f86497ccd01677e22435cfb7262599450a90d1", + "reference": "53f86497ccd01677e22435cfb7262599450a90d1", "shasum": "" }, "require": { @@ -412,6 +412,7 @@ "require-dev": { "psr/log": "~1.0", "symfony/event-dispatcher": "~2.1", + "symfony/phpunit-bridge": "~2.7", "symfony/process": "~2.1" }, "suggest": { @@ -446,21 +447,21 @@ ], "description": "Symfony Console Component", "homepage": "http://symfony.com", - "time": "2015-01-25 04:39:26" + "time": "2015-03-13 17:37:22" }, { "name": "symfony/event-dispatcher", - "version": "v2.6.4", + "version": "v2.6.5", "target-dir": "Symfony/Component/EventDispatcher", "source": { "type": "git", "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "f75989f3ab2743a82fe0b03ded2598a2b1546813" + "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/f75989f3ab2743a82fe0b03ded2598a2b1546813", - "reference": "f75989f3ab2743a82fe0b03ded2598a2b1546813", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284", + "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284", "shasum": "" }, "require": { @@ -471,6 +472,7 @@ "symfony/config": "~2.0,>=2.0.5", "symfony/dependency-injection": "~2.6", "symfony/expression-language": "~2.6", + "symfony/phpunit-bridge": "~2.7", "symfony/stopwatch": "~2.3" }, "suggest": { @@ -504,28 +506,31 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "http://symfony.com", - "time": "2015-02-01 16:10:57" + "time": "2015-03-13 17:37:22" } ], "packages-dev": [ { "name": "symfony/stopwatch", - "version": "v2.6.4", + "version": "v2.6.5", "target-dir": "Symfony/Component/Stopwatch", "source": { "type": "git", "url": "https://github.com/symfony/Stopwatch.git", - "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c" + "reference": "ba4e774f71e2ce3e3f65cabac4031b9029972af5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/e8da5286132ba75ce4b4275fbf0f4cd369bfd71c", - "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c", + "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/ba4e774f71e2ce3e3f65cabac4031b9029972af5", + "reference": "ba4e774f71e2ce3e3f65cabac4031b9029972af5", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, "type": "library", "extra": { "branch-alias": { @@ -553,7 +558,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "http://symfony.com", - "time": "2015-01-03 08:01:59" + "time": "2015-02-24 11:52:21" } ], "aliases": [], -- cgit v1.2.3