container; // Per-board setup/reset/disable on Settings -> Integrations. $this->template->hook->attach('template:project:integrations', 'qualKard:project/integration'); // New card on a QualKard board -> reset it (unread, armed inert, moved to Drafts). $this->hook->on('model:task:creation:aftersave', function ($task_id) use ($container) { $helper = new \Kanboard\Plugin\QualKard\Helper\QualKardHelper($container); $task = $container['taskFinderModel']->getById($task_id); if (! empty($task) && $helper->isEnabled($task['project_id'])) { $helper->resetCard($task_id, (int) $task['project_id']); } }); // Card dragged INTO a grade column -> grade it (RecoReco then handles the movement). The // plugin on() wrapper drops the event, so we subscribe on the dispatcher to get the TaskEvent. $this->dispatcher->addListener(TaskModel::EVENT_MOVE_COLUMN, function ($event) use ($container) { $task = $event['task']; $helper = new \Kanboard\Plugin\QualKard\Helper\QualKardHelper($container); if (! $helper->isEnabled($task['project_id'])) { return; } $dst = (int) $event['dst_column_id']; foreach (array('hairy', 'hard', 'medium', 'easy') as $role) { if ($dst === $helper->col($task['project_id'], $role)) { $helper->grade($task['id'], \Kanboard\Plugin\QualKard\Helper\QualKardHelper::SCORE[$role]); return; } } }); } public function getHelpers() { return array( 'Plugin\QualKard\Helper' => array('QualKardHelper'), ); } public function getPluginName() { return 'QualKard'; } public function getPluginDescription() { return t('Flashcard spaced repetition: grade a card by dragging it to a column, and it comes back when due (needs RecoReco).'); } public function getPluginAuthor() { return 'Ruben (drbeco)'; } public function getPluginVersion() { return '0.4.0'; } public function getPluginHomepage() { return 'https://code.beco.cc/beco/QualKard'; } public function getCompatibleVersion() { return '>=1.2.0'; } }