summaryrefslogtreecommitdiff
path: root/app/Model/NotificationTypeModel.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Model/NotificationTypeModel.php')
-rw-r--r--app/Model/NotificationTypeModel.php128
1 files changed, 128 insertions, 0 deletions
diff --git a/app/Model/NotificationTypeModel.php b/app/Model/NotificationTypeModel.php
new file mode 100644
index 00000000..432832ee
--- /dev/null
+++ b/app/Model/NotificationTypeModel.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace Kanboard\Model;
+
+use Pimple\Container;
+use Kanboard\Core\Base;
+
+/**
+ * Notification Type
+ *
+ * @package model
+ * @author Frederic Guillot
+ */
+abstract class NotificationTypeModel extends Base
+{
+ /**
+ * Container
+ *
+ * @access private
+ * @var \Pimple\Container
+ */
+ private $classes;
+
+ /**
+ * Notification type labels
+ *
+ * @access private
+ * @var array
+ */
+ private $labels = array();
+
+ /**
+ * Hidden notification types
+ *
+ * @access private
+ * @var array
+ */
+ private $hiddens = array();
+
+ /**
+ * Constructor
+ *
+ * @access public
+ * @param \Pimple\Container $container
+ */
+ public function __construct(Container $container)
+ {
+ parent::__construct($container);
+ $this->classes = new Container;
+ }
+
+ /**
+ * Add a new notification type
+ *
+ * @access public
+ * @param string $type
+ * @param string $label
+ * @param string $class
+ * @param boolean $hidden
+ * @return NotificationTypeModel
+ */
+ public function setType($type, $label, $class, $hidden = false)
+ {
+ $container = $this->container;
+
+ if ($hidden) {
+ $this->hiddens[] = $type;
+ } else {
+ $this->labels[$type] = $label;
+ }
+
+ $this->classes[$type] = function () use ($class, $container) {
+ return new $class($container);
+ };
+
+ return $this;
+ }
+
+ /**
+ * Get mail notification type instance
+ *
+ * @access public
+ * @param string $type
+ * @return \Kanboard\Core\Notification\NotificationInterface
+ */
+ public function getType($type)
+ {
+ return $this->classes[$type];
+ }
+
+ /**
+ * Get all notification types with labels
+ *
+ * @access public
+ * @return array
+ */
+ public function getTypes()
+ {
+ return $this->labels;
+ }
+
+ /**
+ * Get all hidden notification types
+ *
+ * @access public
+ * @return array
+ */
+ public function getHiddenTypes()
+ {
+ return $this->hiddens;
+ }
+
+ /**
+ * Keep only loaded notification types
+ *
+ * @access public
+ * @param string[] $types
+ * @return array
+ */
+ public function filterTypes(array $types)
+ {
+ $classes = $this->classes;
+
+ return array_filter($types, function ($type) use ($classes) {
+ return isset($classes[$type]);
+ });
+ }
+}