summaryrefslogtreecommitdiff
path: root/app/frontend/dto/EventDTO.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/frontend/dto/EventDTO.php')
-rw-r--r--app/frontend/dto/EventDTO.php85
1 files changed, 85 insertions, 0 deletions
diff --git a/app/frontend/dto/EventDTO.php b/app/frontend/dto/EventDTO.php
new file mode 100644
index 0000000..8f5cdf5
--- /dev/null
+++ b/app/frontend/dto/EventDTO.php
@@ -0,0 +1,85 @@
+<?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;
+
+ private $_utc;
+ private $_targetTZ;
+
+ public function __construct(TimezoneDTO $tz = NULL) {
+ $this->_utc = new DateTimeZone('UTC');
+ $this->_targetTZ = new DateTimeZone(
+ $tz
+ ? $tz->Name
+ : UserFacade::getInstance()->getTimezonePreference(
+ Prado::getApplication()->getUser()
+ )->Name
+ );
+ }
+
+ private $_beginDate;
+ protected function getBeginDate(Entry $event) {
+ if (!$this->_beginDate) {
+ $this->_beginDate = new DateTime($event->BeginDate, $this->_utc);
+ }
+ return $this->_beginDate;
+ }
+
+ private $_endDate;
+ protected function getEndDate(Entry $event) {
+ if (!$this->_endDate) {
+ $this->_endDate = new DateTime($event->EndDate, $this->_utc);
+ if ($event->AllDay) {
+ $this->_endDate = $this->_endDate->modify('-1 day');
+ }
+ }
+ return $this->_endDate;
+ }
+
+ public function loadRecord(Entry $event, array $calendars) {
+ $this->Name = $event->Name;
+ $this->Location = $event->Location;
+
+ if ($event->AllDay) {
+ $this->DateString = $this->getBeginDate($event)->format('Y-m-d');
+ if ($this->getBeginDate($event) != $this->getEndDate($event)) {
+ $this->DateString .= sprintf(
+ ' - %s',
+ $this->getEndDate($event)->format('Y-m-d')
+ );
+ }
+ } else {
+ $beginDate = $this->getBeginDate($event)->setTimezone($this->_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);
+ }
+
+}
+
+?>