aboutsummaryrefslogtreecommitdiff
path: root/app/class/Modeltimeline.php
blob: 248e0f68decd77c490c86b7115354365769b9160 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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);
	}


}


?>