summaryrefslogtreecommitdiff
path: root/app/Formatter
diff options
context:
space:
mode:
Diffstat (limited to 'app/Formatter')
-rw-r--r--app/Formatter/ProjectActivityEventFormatter.php61
1 files changed, 61 insertions, 0 deletions
diff --git a/app/Formatter/ProjectActivityEventFormatter.php b/app/Formatter/ProjectActivityEventFormatter.php
new file mode 100644
index 00000000..ae80e5e7
--- /dev/null
+++ b/app/Formatter/ProjectActivityEventFormatter.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Kanboard\Formatter;
+
+use Kanboard\Core\Filter\FormatterInterface;
+
+class ProjectActivityEventFormatter extends BaseFormatter implements FormatterInterface
+{
+ /**
+ * Apply formatter
+ *
+ * @access public
+ * @return array
+ */
+ public function format()
+ {
+ $events = $this->query->findAll();
+
+ foreach ($events as &$event) {
+ $event += $this->unserializeEvent($event['data']);
+ unset($event['data']);
+
+ $event['author'] = $event['author_name'] ?: $event['author_username'];
+ $event['event_title'] = $this->notification->getTitleWithAuthor($event['author'], $event['event_name'], $event);
+ $event['event_content'] = $this->renderEvent($event);
+ }
+
+ return $events;
+ }
+
+ /**
+ * Decode event data, supports unserialize() and json_decode()
+ *
+ * @access protected
+ * @param string $data Serialized data
+ * @return array
+ */
+ protected function unserializeEvent($data)
+ {
+ if ($data{0} === 'a') {
+ return unserialize($data);
+ }
+
+ return json_decode($data, true) ?: array();
+ }
+
+ /**
+ * Get the event html content
+ *
+ * @access protected
+ * @param array $params Event properties
+ * @return string
+ */
+ protected function renderEvent(array $params)
+ {
+ return $this->template->render(
+ 'event/'.str_replace('.', '_', $params['event_name']),
+ $params
+ );
+ }
+}