summaryrefslogtreecommitdiff
path: root/app/Model
diff options
context:
space:
mode:
Diffstat (limited to 'app/Model')
-rw-r--r--app/Model/NotificationType.php36
-rw-r--r--app/Model/OverdueNotification.php2
-rw-r--r--app/Model/ProjectNotification.php29
-rw-r--r--app/Model/ProjectNotificationType.php57
-rw-r--r--app/Model/Webhook.php34
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);
- }
- }
-}