From d6c1c1ea33de6386fabe7c9546bfae1c38d3b9e7 Mon Sep 17 00:00:00 2001
From: Frederic Guillot <fred@kanboard.net>
Date: Sat, 28 May 2016 17:36:55 -0400
Subject: Improve notification classes and move interface to core

---
 app/Notification/ActivityStream.php             |  47 --------
 app/Notification/ActivityStreamNotification.php |  48 ++++++++
 app/Notification/Mail.php                       | 150 -----------------------
 app/Notification/MailNotification.php           | 151 ++++++++++++++++++++++++
 app/Notification/NotificationInterface.php      |  32 -----
 app/Notification/Web.php                        |  46 --------
 app/Notification/WebNotification.php            |  47 ++++++++
 app/Notification/Webhook.php                    |  55 ---------
 app/Notification/WebhookNotification.php        |  56 +++++++++
 9 files changed, 302 insertions(+), 330 deletions(-)
 delete mode 100644 app/Notification/ActivityStream.php
 create mode 100644 app/Notification/ActivityStreamNotification.php
 delete mode 100644 app/Notification/Mail.php
 create mode 100644 app/Notification/MailNotification.php
 delete mode 100644 app/Notification/NotificationInterface.php
 delete mode 100644 app/Notification/Web.php
 create mode 100644 app/Notification/WebNotification.php
 delete mode 100644 app/Notification/Webhook.php
 create mode 100644 app/Notification/WebhookNotification.php

(limited to 'app/Notification')

diff --git a/app/Notification/ActivityStream.php b/app/Notification/ActivityStream.php
deleted file mode 100644
index 325732ec..00000000
--- a/app/Notification/ActivityStream.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-namespace Kanboard\Notification;
-
-use Kanboard\Core\Base;
-
-/**
- * Activity Stream Notification
- *
- * @package  notification
- * @author   Frederic Guillot
- */
-class ActivityStream extends Base implements NotificationInterface
-{
-    /**
-     * Send notification to a user
-     *
-     * @access public
-     * @param  array     $user
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyUser(array $user, $event_name, array $event_data)
-    {
-    }
-
-    /**
-     * Send notification to a project
-     *
-     * @access public
-     * @param  array     $project
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyProject(array $project, $event_name, array $event_data)
-    {
-        if ($this->userSession->isLogged()) {
-            $this->projectActivity->createEvent(
-                $project['id'],
-                $event_data['task']['id'],
-                $this->userSession->getId(),
-                $event_name,
-                $event_data
-            );
-        }
-    }
-}
diff --git a/app/Notification/ActivityStreamNotification.php b/app/Notification/ActivityStreamNotification.php
new file mode 100644
index 00000000..8ac265d3
--- /dev/null
+++ b/app/Notification/ActivityStreamNotification.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Kanboard\Notification;
+
+use Kanboard\Core\Base;
+use Kanboard\Core\Notification\NotificationInterface;
+
+/**
+ * Activity Stream Notification
+ *
+ * @package  Kanboard\Notification
+ * @author   Frederic Guillot
+ */
+class ActivityStreamNotification extends Base implements NotificationInterface
+{
+    /**
+     * Send notification to a user
+     *
+     * @access public
+     * @param  array     $user
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyUser(array $user, $event_name, array $event_data)
+    {
+    }
+
+    /**
+     * Send notification to a project
+     *
+     * @access public
+     * @param  array     $project
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyProject(array $project, $event_name, array $event_data)
+    {
+        if ($this->userSession->isLogged()) {
+            $this->projectActivity->createEvent(
+                $project['id'],
+                $event_data['task']['id'],
+                $this->userSession->getId(),
+                $event_name,
+                $event_data
+            );
+        }
+    }
+}
diff --git a/app/Notification/Mail.php b/app/Notification/Mail.php
deleted file mode 100644
index c924fb50..00000000
--- a/app/Notification/Mail.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-namespace Kanboard\Notification;
-
-use Kanboard\Core\Base;
-use Kanboard\Model\Task;
-use Kanboard\Model\TaskFile;
-use Kanboard\Model\Comment;
-use Kanboard\Model\Subtask;
-
-/**
- * Email Notification
- *
- * @package  notification
- * @author   Frederic Guillot
- */
-class Mail extends Base implements NotificationInterface
-{
-    /**
-     * Notification type
-     *
-     * @var string
-     */
-    const TYPE = 'email';
-
-    /**
-     * Send notification to a user
-     *
-     * @access public
-     * @param  array     $user
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyUser(array $user, $event_name, array $event_data)
-    {
-        if (! empty($user['email'])) {
-            $this->emailClient->send(
-                $user['email'],
-                $user['name'] ?: $user['username'],
-                $this->getMailSubject($event_name, $event_data),
-                $this->getMailContent($event_name, $event_data)
-            );
-        }
-    }
-
-    /**
-     * Send notification to a project
-     *
-     * @access public
-     * @param  array     $project
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyProject(array $project, $event_name, array $event_data)
-    {
-    }
-
-    /**
-     * Get the mail content for a given template name
-     *
-     * @access public
-     * @param  string    $event_name  Event name
-     * @param  array     $event_data  Event data
-     * @return string
-     */
-    public function getMailContent($event_name, array $event_data)
-    {
-        return $this->template->render(
-            'notification/'.str_replace('.', '_', $event_name),
-            $event_data + array('application_url' => $this->config->get('application_url'))
-        );
-    }
-
-    /**
-     * Get the mail subject for a given template name
-     *
-     * @access public
-     * @param  string    $event_name  Event name
-     * @param  array     $event_data  Event data
-     * @return string
-     */
-    public function getMailSubject($event_name, array $event_data)
-    {
-        switch ($event_name) {
-            case TaskFile::EVENT_CREATE:
-                $subject = $this->getStandardMailSubject(e('New attachment'), $event_data);
-                break;
-            case Comment::EVENT_CREATE:
-                $subject = $this->getStandardMailSubject(e('New comment'), $event_data);
-                break;
-            case Comment::EVENT_UPDATE:
-                $subject = $this->getStandardMailSubject(e('Comment updated'), $event_data);
-                break;
-            case Subtask::EVENT_CREATE:
-                $subject = $this->getStandardMailSubject(e('New subtask'), $event_data);
-                break;
-            case Subtask::EVENT_UPDATE:
-                $subject = $this->getStandardMailSubject(e('Subtask updated'), $event_data);
-                break;
-            case Task::EVENT_CREATE:
-                $subject = $this->getStandardMailSubject(e('New task'), $event_data);
-                break;
-            case Task::EVENT_UPDATE:
-                $subject = $this->getStandardMailSubject(e('Task updated'), $event_data);
-                break;
-            case Task::EVENT_CLOSE:
-                $subject = $this->getStandardMailSubject(e('Task closed'), $event_data);
-                break;
-            case Task::EVENT_OPEN:
-                $subject = $this->getStandardMailSubject(e('Task opened'), $event_data);
-                break;
-            case Task::EVENT_MOVE_COLUMN:
-                $subject = $this->getStandardMailSubject(e('Column change'), $event_data);
-                break;
-            case Task::EVENT_MOVE_POSITION:
-                $subject = $this->getStandardMailSubject(e('Position change'), $event_data);
-                break;
-            case Task::EVENT_MOVE_SWIMLANE:
-                $subject = $this->getStandardMailSubject(e('Swimlane change'), $event_data);
-                break;
-            case Task::EVENT_ASSIGNEE_CHANGE:
-                $subject = $this->getStandardMailSubject(e('Assignee change'), $event_data);
-                break;
-            case Task::EVENT_USER_MENTION:
-            case Comment::EVENT_USER_MENTION:
-                $subject = $this->getStandardMailSubject(e('Mentioned'), $event_data);
-                break;
-            case Task::EVENT_OVERDUE:
-                $subject = e('[%s] Overdue tasks', $event_data['project_name']);
-                break;
-            default:
-                $subject = e('Notification');
-        }
-
-        return $subject;
-    }
-
-    /**
-     * Get the mail subject for a given label
-     *
-     * @access private
-     * @param  string    $label       Label
-     * @param  array     $data        Template data
-     * @return string
-     */
-    private function getStandardMailSubject($label, array $data)
-    {
-        return sprintf('[%s][%s] %s (#%d)', $data['task']['project_name'], $label, $data['task']['title'], $data['task']['id']);
-    }
-}
diff --git a/app/Notification/MailNotification.php b/app/Notification/MailNotification.php
new file mode 100644
index 00000000..0ba06715
--- /dev/null
+++ b/app/Notification/MailNotification.php
@@ -0,0 +1,151 @@
+<?php
+
+namespace Kanboard\Notification;
+
+use Kanboard\Core\Base;
+use Kanboard\Core\Notification\NotificationInterface;
+use Kanboard\Model\Task;
+use Kanboard\Model\TaskFile;
+use Kanboard\Model\Comment;
+use Kanboard\Model\Subtask;
+
+/**
+ * Email Notification
+ *
+ * @package  Kanboard\Notification
+ * @author   Frederic Guillot
+ */
+class MailNotification extends Base implements NotificationInterface
+{
+    /**
+     * Notification type
+     *
+     * @var string
+     */
+    const TYPE = 'email';
+
+    /**
+     * Send notification to a user
+     *
+     * @access public
+     * @param  array     $user
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyUser(array $user, $event_name, array $event_data)
+    {
+        if (! empty($user['email'])) {
+            $this->emailClient->send(
+                $user['email'],
+                $user['name'] ?: $user['username'],
+                $this->getMailSubject($event_name, $event_data),
+                $this->getMailContent($event_name, $event_data)
+            );
+        }
+    }
+
+    /**
+     * Send notification to a project
+     *
+     * @access public
+     * @param  array     $project
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyProject(array $project, $event_name, array $event_data)
+    {
+    }
+
+    /**
+     * Get the mail content for a given template name
+     *
+     * @access public
+     * @param  string    $event_name  Event name
+     * @param  array     $event_data  Event data
+     * @return string
+     */
+    public function getMailContent($event_name, array $event_data)
+    {
+        return $this->template->render(
+            'notification/'.str_replace('.', '_', $event_name),
+            $event_data + array('application_url' => $this->config->get('application_url'))
+        );
+    }
+
+    /**
+     * Get the mail subject for a given template name
+     *
+     * @access public
+     * @param  string    $event_name  Event name
+     * @param  array     $event_data  Event data
+     * @return string
+     */
+    public function getMailSubject($event_name, array $event_data)
+    {
+        switch ($event_name) {
+            case TaskFile::EVENT_CREATE:
+                $subject = $this->getStandardMailSubject(e('New attachment'), $event_data);
+                break;
+            case Comment::EVENT_CREATE:
+                $subject = $this->getStandardMailSubject(e('New comment'), $event_data);
+                break;
+            case Comment::EVENT_UPDATE:
+                $subject = $this->getStandardMailSubject(e('Comment updated'), $event_data);
+                break;
+            case Subtask::EVENT_CREATE:
+                $subject = $this->getStandardMailSubject(e('New subtask'), $event_data);
+                break;
+            case Subtask::EVENT_UPDATE:
+                $subject = $this->getStandardMailSubject(e('Subtask updated'), $event_data);
+                break;
+            case Task::EVENT_CREATE:
+                $subject = $this->getStandardMailSubject(e('New task'), $event_data);
+                break;
+            case Task::EVENT_UPDATE:
+                $subject = $this->getStandardMailSubject(e('Task updated'), $event_data);
+                break;
+            case Task::EVENT_CLOSE:
+                $subject = $this->getStandardMailSubject(e('Task closed'), $event_data);
+                break;
+            case Task::EVENT_OPEN:
+                $subject = $this->getStandardMailSubject(e('Task opened'), $event_data);
+                break;
+            case Task::EVENT_MOVE_COLUMN:
+                $subject = $this->getStandardMailSubject(e('Column change'), $event_data);
+                break;
+            case Task::EVENT_MOVE_POSITION:
+                $subject = $this->getStandardMailSubject(e('Position change'), $event_data);
+                break;
+            case Task::EVENT_MOVE_SWIMLANE:
+                $subject = $this->getStandardMailSubject(e('Swimlane change'), $event_data);
+                break;
+            case Task::EVENT_ASSIGNEE_CHANGE:
+                $subject = $this->getStandardMailSubject(e('Assignee change'), $event_data);
+                break;
+            case Task::EVENT_USER_MENTION:
+            case Comment::EVENT_USER_MENTION:
+                $subject = $this->getStandardMailSubject(e('Mentioned'), $event_data);
+                break;
+            case Task::EVENT_OVERDUE:
+                $subject = e('[%s] Overdue tasks', $event_data['project_name']);
+                break;
+            default:
+                $subject = e('Notification');
+        }
+
+        return $subject;
+    }
+
+    /**
+     * Get the mail subject for a given label
+     *
+     * @access private
+     * @param  string    $label       Label
+     * @param  array     $data        Template data
+     * @return string
+     */
+    private function getStandardMailSubject($label, array $data)
+    {
+        return sprintf('[%s][%s] %s (#%d)', $data['task']['project_name'], $label, $data['task']['title'], $data['task']['id']);
+    }
+}
diff --git a/app/Notification/NotificationInterface.php b/app/Notification/NotificationInterface.php
deleted file mode 100644
index 8431a77c..00000000
--- a/app/Notification/NotificationInterface.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace Kanboard\Notification;
-
-/**
- * Notification Interface
- *
- * @package  core
- * @author   Frederic Guillot
- */
-interface NotificationInterface
-{
-    /**
-     * Send notification to a user
-     *
-     * @access public
-     * @param  array     $user
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyUser(array $user, $event_name, array $event_data);
-
-    /**
-     * Send notification to a project
-     *
-     * @access public
-     * @param  array     $project
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyProject(array $project, $event_name, array $event_data);
-}
diff --git a/app/Notification/Web.php b/app/Notification/Web.php
deleted file mode 100644
index 9271c193..00000000
--- a/app/Notification/Web.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-namespace Kanboard\Notification;
-
-use Kanboard\Core\Base;
-
-/**
- * Web Notification
- *
- * @package  notification
- * @author   Frederic Guillot
- */
-class Web extends Base implements NotificationInterface
-{
-    /**
-     * Notification type
-     *
-     * @var string
-     */
-    const TYPE = 'web';
-
-    /**
-     * Send notification to a user
-     *
-     * @access public
-     * @param  array     $user
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyUser(array $user, $event_name, array $event_data)
-    {
-        $this->userUnreadNotification->create($user['id'], $event_name, $event_data);
-    }
-
-    /**
-     * Send notification to a project
-     *
-     * @access public
-     * @param  array     $project
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyProject(array $project, $event_name, array $event_data)
-    {
-    }
-}
diff --git a/app/Notification/WebNotification.php b/app/Notification/WebNotification.php
new file mode 100644
index 00000000..99c0c903
--- /dev/null
+++ b/app/Notification/WebNotification.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Kanboard\Notification;
+
+use Kanboard\Core\Base;
+use Kanboard\Core\Notification\NotificationInterface;
+
+/**
+ * Web Notification
+ *
+ * @package  Kanboard\Notification
+ * @author   Frederic Guillot
+ */
+class WebNotification extends Base implements NotificationInterface
+{
+    /**
+     * Notification type
+     *
+     * @var string
+     */
+    const TYPE = 'web';
+
+    /**
+     * Send notification to a user
+     *
+     * @access public
+     * @param  array     $user
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyUser(array $user, $event_name, array $event_data)
+    {
+        $this->userUnreadNotification->create($user['id'], $event_name, $event_data);
+    }
+
+    /**
+     * Send notification to a project
+     *
+     * @access public
+     * @param  array     $project
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyProject(array $project, $event_name, array $event_data)
+    {
+    }
+}
diff --git a/app/Notification/Webhook.php b/app/Notification/Webhook.php
deleted file mode 100644
index e187909f..00000000
--- a/app/Notification/Webhook.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace Kanboard\Notification;
-
-use Kanboard\Core\Base;
-
-/**
- * Webhook Notification
- *
- * @package  notification
- * @author   Frederic Guillot
- */
-class Webhook extends Base implements NotificationInterface
-{
-    /**
-     * Send notification to a user
-     *
-     * @access public
-     * @param  array     $user
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyUser(array $user, $event_name, array $event_data)
-    {
-    }
-
-    /**
-     * Send notification to a project
-     *
-     * @access public
-     * @param  array     $project
-     * @param  string    $event_name
-     * @param  array     $event_data
-     */
-    public function notifyProject(array $project, $event_name, array $event_data)
-    {
-        $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;
-            }
-
-            $payload = array(
-                'event_name' => $event_name,
-                'event_data' => $event_data,
-            );
-
-            $this->httpClient->postJson($url, $payload);
-        }
-    }
-}
diff --git a/app/Notification/WebhookNotification.php b/app/Notification/WebhookNotification.php
new file mode 100644
index 00000000..25d59251
--- /dev/null
+++ b/app/Notification/WebhookNotification.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Kanboard\Notification;
+
+use Kanboard\Core\Base;
+use Kanboard\Core\Notification\NotificationInterface;
+
+/**
+ * Webhook Notification
+ *
+ * @package  Kanboard\Notification
+ * @author   Frederic Guillot
+ */
+class WebhookNotification extends Base implements NotificationInterface
+{
+    /**
+     * Send notification to a user
+     *
+     * @access public
+     * @param  array     $user
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyUser(array $user, $event_name, array $event_data)
+    {
+    }
+
+    /**
+     * Send notification to a project
+     *
+     * @access public
+     * @param  array     $project
+     * @param  string    $event_name
+     * @param  array     $event_data
+     */
+    public function notifyProject(array $project, $event_name, array $event_data)
+    {
+        $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;
+            }
+
+            $payload = array(
+                'event_name' => $event_name,
+                'event_data' => $event_data,
+            );
+
+            $this->httpClient->postJson($url, $payload);
+        }
+    }
+}
-- 
cgit v1.2.3