aboutsummaryrefslogtreecommitdiff
path: root/app/class/Modeltimeline.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/class/Modeltimeline.php')
-rw-r--r--app/class/Modeltimeline.php143
1 files changed, 143 insertions, 0 deletions
diff --git a/app/class/Modeltimeline.php b/app/class/Modeltimeline.php
new file mode 100644
index 0000000..248e0f6
--- /dev/null
+++ b/app/class/Modeltimeline.php
@@ -0,0 +1,143 @@
+<?php
+
+namespace Wcms;
+
+use JamesMoss\Flywheel\Document;
+
+class Modeltimeline extends Modeldb
+{
+ const EVENT_BASE = ['message'];
+ const EVENT_ART = ['page_add', 'page_edit', 'page_delete'];
+ const EVENT_MEDIA = ['media_add', 'media_delete'];
+ const EVENT_FONT = ['font_add', 'font_delete'];
+
+ public function __construct()
+ {
+ parent::__construct();
+ $this->storeinit('timeline');
+ }
+
+ public function get(int $id)
+ {
+ $eventdata = $this->repo->findById($id);
+ if ($eventdata !== false) {
+ return new Event($eventdata);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Retrun a list of Event objects
+ *
+ * @return array array of Event where the key is the Event id.
+ */
+ public function getlister() : array
+ {
+ $eventlist = [];
+ $datalist = $this->repo->findAll();
+ foreach ($datalist as $eventdata) {
+ $event = new Event($eventdata);
+ $id = intval($event->id());
+ $eventlist[$id] = $event;
+ }
+ return $eventlist;
+ }
+
+
+ public function getlisterid(array $idlist = []) : array
+ {
+ $eventdatalist = $this->repo->query()
+ ->where('__id', 'IN', $idlist)
+ ->execute();
+
+ $eventlist = [];
+ foreach ($eventdatalist as $id => $eventdata) {
+ $eventlist[$id] = new Event($eventdata);
+ }
+ return $eventlist;
+ }
+
+
+ /**
+ * Store event
+ *
+ * @param Event The event to be stored in the repositery
+ *
+ * @return bool retrun true if it works, false if it fails
+ */
+ public function add(Event $event) : bool
+ {
+ $eventdata = new Document($event->dry());
+ $eventdata->setId($event->id());
+ $result = $this->repo->store($eventdata);
+ return $result;
+ }
+
+ /**
+ * Return last free id
+ *
+ * @return int id
+ */
+ public function getlastfreeid() : int
+ {
+ $idlist = $this->list();
+
+ if (!empty($idlist)) {
+ $id = max($idlist);
+ $id++;
+ } else {
+ $id = 1;
+ }
+ return $id;
+ }
+
+ public function group(array $events)
+ {
+ $id = 0;
+ $subid = 0;
+ $lastuser = null;
+ foreach ($events as $event) {
+ if($event->user() !== $lastuser) {
+ $subid = 0;
+ $id ++;
+ $groupedevents[$id]['user'] = $event->user();
+ } else {
+ $subid ++;
+ }
+ $groupedevents[$id][$subid] = $event;
+ $lastuser = $event->user();
+ }
+ return $groupedevents;
+ }
+
+ public function showlast(array $types, int $qty = 25, int $offset = 0)
+ {
+ $types = array_intersect($types, $this->types());
+
+ $eventdatalist = $this->repo->query()
+ ->where('type', 'IN', $types)
+ ->orderBy('date DESC')
+ ->limit($qty, $offset)
+ ->execute();
+
+ $eventlist = [];
+ foreach ($eventdatalist as $id => $eventdata) {
+ $eventlist[] = new Event($eventdata);
+ }
+
+ $eventlist = array_reverse($eventlist);
+ return $eventlist;
+ }
+
+
+ public function types()
+ {
+ return array_merge(self::EVENT_ART, self::EVENT_BASE, self::EVENT_MEDIA, self::EVENT_MEDIA);
+ }
+
+
+}
+
+
+?> \ No newline at end of file