diff options
Diffstat (limited to 'app/Model')
-rw-r--r-- | app/Model/NotificationType.php | 36 | ||||
-rw-r--r-- | app/Model/OverdueNotification.php | 2 | ||||
-rw-r--r-- | app/Model/ProjectNotification.php | 29 | ||||
-rw-r--r-- | app/Model/ProjectNotificationType.php | 57 | ||||
-rw-r--r-- | app/Model/Webhook.php | 34 |
5 files changed, 118 insertions, 40 deletions
diff --git a/app/Model/NotificationType.php b/app/Model/NotificationType.php index 50d6080f..e05cc686 100644 --- a/app/Model/NotificationType.php +++ b/app/Model/NotificationType.php @@ -13,7 +13,7 @@ use Pimple\Container; abstract class NotificationType extends Base { /** - * Mail transport instances + * Container * * @access private * @var \Pimple\Container @@ -21,7 +21,7 @@ abstract class NotificationType extends Base private $classes; /** - * Mail transport instances + * Notification type labels * * @access private * @var array @@ -29,6 +29,14 @@ abstract class NotificationType extends Base private $labels = array(); /** + * Hidden notification types + * + * @access private + * @var array + */ + private $hiddens = array(); + + /** * Constructor * * @access public @@ -47,15 +55,24 @@ abstract class NotificationType extends Base * @param string $type * @param string $label * @param string $class + * @param boolean $hidden + * @return NotificationType */ - public function setType($type, $label, $class) + public function setType($type, $label, $class, $hidden = false) { $container = $this->container; - $this->labels[$type] = $label; + + if ($hidden) { + $this->hiddens[] = $type; + } else { + $this->labels[$type] = $label; + } $this->classes[$type] = function () use ($class, $container) { return new $class($container); }; + + return $this; } /** @@ -80,4 +97,15 @@ abstract class NotificationType extends Base { return $this->labels; } + + /** + * Get all hidden notification types + * + * @access public + * @return array + */ + public function getHiddenTypes() + { + return $this->hiddens; + } } diff --git a/app/Model/OverdueNotification.php b/app/Model/OverdueNotification.php index d8c2fef4..84565548 100644 --- a/app/Model/OverdueNotification.php +++ b/app/Model/OverdueNotification.php @@ -20,8 +20,6 @@ class OverdueNotification extends Base $tasks = $this->taskFinder->getOverdueTasks(); foreach ($this->groupByColumn($tasks, 'project_id') as $project_id => $project_tasks) { - - // Get the list of users that should receive notifications for each projects $users = $this->userNotification->getUsersWithNotificationEnabled($project_id); foreach ($users as $user) { diff --git a/app/Model/ProjectNotification.php b/app/Model/ProjectNotification.php new file mode 100644 index 00000000..49fcc61d --- /dev/null +++ b/app/Model/ProjectNotification.php @@ -0,0 +1,29 @@ +<?php + +namespace Kanboard\Model; + +/** + * Project Notification + * + * @package model + * @author Frederic Guillot + */ +class ProjectNotification extends Base +{ + /** + * Send notifications + * + * @access public + * @param integer $project_id + * @param string $event_name + * @param array $event_data + */ + public function sendNotifications($project_id, $event_name, array $event_data) + { + $project = $this->project->getById($project_id); + + foreach ($this->projectNotificationType->getSelectedTypes($project_id) as $type) { + $this->projectNotificationType->getType($type)->notifyProject($project, $event_name, $event_data); + } + } +} diff --git a/app/Model/ProjectNotificationType.php b/app/Model/ProjectNotificationType.php new file mode 100644 index 00000000..d8568589 --- /dev/null +++ b/app/Model/ProjectNotificationType.php @@ -0,0 +1,57 @@ +<?php + +namespace Kanboard\Model; + +/** + * Project Notification Type + * + * @package model + * @author Frederic Guillot + */ +class ProjectNotificationType extends NotificationType +{ + /** + * SQL table name + * + * @var string + */ + const TABLE = 'project_has_notification_types'; + + /** + * Get selected notification types for a given project + * + * @access public + * @param integer $project_id + * @return array + */ + public function getSelectedTypes($project_id) + { + $selectedTypes = $this->db + ->table(self::TABLE) + ->eq('project_id', $project_id) + ->asc('notification_type') + ->findAllByColumn('notification_type'); + + return array_merge($this->getHiddenTypes(), $selectedTypes); + } + + /** + * Save notification types for a given project + * + * @access public + * @param integer $project_id + * @param string[] $types + * @return boolean + */ + public function saveSelectedTypes($project_id, array $types) + { + $results = array(); + $this->db->table(self::TABLE)->eq('project_id', $project_id)->remove(); + + foreach ($types as $type) { + $results[] = $this->db->table(self::TABLE)->insert(array('project_id' => $project_id, 'notification_type' => $type)); + } + + return ! in_array(false, $results); + } +} diff --git a/app/Model/Webhook.php b/app/Model/Webhook.php deleted file mode 100644 index 7c17e61e..00000000 --- a/app/Model/Webhook.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php - -namespace Kanboard\Model; - -/** - * Webhook model - * - * @package model - * @author Frederic Guillot - */ -class Webhook extends Base -{ - /** - * Call the external URL - * - * @access public - * @param array $values Event payload - */ - public function notify(array $values) - { - $url = $this->config->get('webhook_url'); - $token = $this->config->get('webhook_token'); - - if (! empty($url)) { - if (strpos($url, '?') !== false) { - $url .= '&token='.$token; - } else { - $url .= '?token='.$token; - } - - return $this->httpClient->postJson($url, $values); - } - } -} |