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
|
<?php
namespace Wcms;
use JamesMoss\Flywheel\Document;
class Modeltimeline extends Modeldb
{
protected const EVENT_BASE = ['message'];
protected const EVENT_ART = ['page_add', 'page_edit', 'page_delete'];
protected const EVENT_MEDIA = ['media_add', 'media_delete'];
protected 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 pagelistbyid(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 $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;
$groupedevents = [];
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);
}
}
|