summaryrefslogtreecommitdiff
path: root/app/php/dto/EventDTO.php
blob: 4131210181fadd126343c28c1033b5306878fe2c (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
<?php

Prado::using('Application.model.Entry');
Prado::using('Application.dto.CalendarDTO');
Prado::using('Application.facades.UserFacade');

class EventDTO {

    public $DateString;
    public $Name;
    public $Location;
    public $Calendar;

    public function loadRecord(Entry $event, array $calendars) {
        $this->Name = $event->Name;
        $this->Location = $event->Location;

        $utc = new DateTimeZone('UTC');
        $targetTz = new DateTimeZone(
            UserFacade::getInstance()->getTimezonePreference(
                Prado::getApplication()->getUser()
            )->Name
        );
        $beginDate = new DateTime($event->BeginDate, $utc);
        $endDate = new DateTime($event->EndDate, $utc);
        if ($event->AllDay) {
            $endDate = $endDate->modify('-1 day');
            $this->DateString = $beginDate->format('Y-m-d');
            if ($beginDate != $endDate) {
                $this->DateString .= sprintf(
                    ' - %s',
                    $endDate->format('Y-m-d')
                );
            }
        } else {
            $beginDate = $beginDate->setTimezone($targetTz);
            $this->DateString = $beginDate->format('Y-m-d H:i');
        }

        $calendars = array_filter(
            $calendars,
            function ($calendar) use($event) {
                return $calendar->UID == $event->CalendarID;
            }
        );
        $this->Calendar = new CalendarDTO();
        $this->Calendar->loadRecord($calendars ? array_values($calendars)[0] : $event->Calendar);
    }

    public static function __compare(EventDTO $ev1, EventDTO $ev2) {
        if ($ev1->DateString === $ev2->DateString) {
            return strcmp($ev1->Calendar->Name, $ev2->Calendar->Name);
        }
        return strcmp($ev1->DateString, $ev2->DateString);
    }

}

?>