_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 = self::getTranslation( $event->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 $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); } } ?>