diff options
Diffstat (limited to 'app/php/facades/CalendarFacade.php')
-rw-r--r-- | app/php/facades/CalendarFacade.php | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/app/php/facades/CalendarFacade.php b/app/php/facades/CalendarFacade.php deleted file mode 100644 index 1f78594..0000000 --- a/app/php/facades/CalendarFacade.php +++ /dev/null @@ -1,212 +0,0 @@ -<?php - -Prado::using('Application.facades.Facade'); -Prado::using('Application.facades.EventFacade'); -Prado::using('Application.dto.CalendarDTO'); -Prado::using('Application.dto.CalendarGroupDTO'); -Prado::using('Application.dto.TimezoneDTO'); -Prado::using('Application.model.Calendar'); -Prado::using('Application.model.Category'); -Prado::using('Application.model.UserPreference'); -Prado::using('Application.user.DbUser'); - -class CalendarFacade extends Facade { - - private function _getCategoriesForCalendars(array $calendars) { - return Category::finder()->findAllByPks( - array_map( - function($calendar) { - return $calendar->CategoryID; - }, - $calendars - ) - ); - } - - private $_defaultPreference = NULL; - public function getDefaultPreference() { - if ($this->_defaultPreference === NULL) { - $this->_defaultPreference = Calendar::finder()->findAllByIsVisible(1); - } - return $this->_defaultPreference; - } - - public function getCalendarPreference(DbUser $user) { - if ($user->IsGuest) { - return $this->getDefaultPreference(); - } else { - return $user->DbRecord->Calendars; - } - } - - public function getPreferenceList(DbUser $user) { - $calendars = $this->getCalendarPreference($user); - if ($calendars) { - $categories = array_map( - function($category) use($calendars) { - $dto = new CalendarGroupDTO(); - $dto->loadRecord($category, $calendars); - return $dto; - }, - $this->_getCategoriesForCalendars($calendars) - ); - usort($categories, ['CalendarGroupDTO', '__compare']); - return $categories; - } - return []; - } - - public function isCalendarPreferred(DbUser $user, $calendarID) { - return in_array( - $calendarID, - array_map( - function($calendar) { - return $calendar->UID; - }, - $this->getCalendarPreference($user) - ) - ); - } - - public function addToPreference(DbUser $user, $calendarID) { - if (!$user->IsGuest) { - $calendar = Calendar::finder()->findByPk($calendarID); - if ($calendar) { - $this->setPreferredCalendar($user->DbRecord, $calendar); - } - } - } - - public function removeFromPreference(DbUser $user, $calendarID) { - if (!$user->IsGuest) { - $preferenceRecord = UserPreference::finder()->find( - '_user = ? AND _calendar = ?', - $user->DbRecord->ID, - $calendarID - ); - if ($preferenceRecord) { - $preferenceRecord->delete(); - } - } - } - - public function setPreferredCalendar(User $user, Calendar $calendar) { - $preference = new UserPreference(); - $preference->CalendarID = $calendar->UID; - $preference->UserID = $user->ID; - $preference->save(); - } - - public function setPreferredCalendars(User $user, array $calendars) { - //TODO: remove old preference, optionally - $transaction = $this->beginTransaction(); - try { - foreach ($calendars as $calendar) { - $this->setPreferredCalendar($user, $calendar); - } - $transaction->commit(); - } catch (Exception $e) { - $transaction->rollback(); - throw $e; - } - } - - public function getEventsForTimeframe(CalendarDTO $calendar, - DateTime $dateFrom, - DateTime $dateTo, - string $order = 'ASC') { - $calendar = Calendar::finder()->findAllByUID($calendar->ID); - if ($calendar) { - $events = EventFacade::getInstance()->getEventList( - $dateFrom->format('Y-m-d H:i:s'), - $dateTo->format('Y-m-d H:i:s'), - $calendar, - $order - ); - return array_map( - function($event) use($calendar) { - $dto = new EventDTO(); - $dto->loadRecord($event, $calendar); - return $dto; - }, - $events - ); - } - return []; - } - - public function getAll() { - $records = Calendar::finder()->withCategory()->findAll('ORDER BY name ASC'); - foreach ($records as $record) { - $this->_fillUrlCache($record); - } - return $records; - } - - public function getCategories() { - $categories = array_map( - function($record) { - $dto = new CalendarGroupDTO(); - $dto->loadRecord($record, []); - return $dto; - }, - Category::finder()->findAll() - ); - usort($categories, ['CalendarGroupDTO', '__compare']); - return $categories; - } - - public function get($uid) { - $records = Calendar::finder()->withCategory()->findAllByPks($uid); - foreach ($records as $record) { - $this->_fillUrlCache($record); - } - return $records; - } - - private $_urlCache = []; - private function _fillUrlCache(Calendar $record = NULL) { - if ($record && $record->CustomUrl - && !isset($this->_urlCache[$record->CustomUrl])) { - $dto = new CalendarDTO(); - if ($record) { - $dto->loadRecord($record); - } else { - $dto = NULL; - } - return $this->_urlCache[$record->CustomUrl] = $dto; - } - } - - public function resolveUrl(string $url = NULL) { - if ($url) { - if (isset($this->_urlCache[$url])) { - return $this->_urlCache[$url]; - } - $record = Calendar::finder()->findByCustomUrl($url); - if ($record) { - return $this->_fillUrlCache($record); - } - } - return NULL; - } - - public function getCalendarBoundaries($year, $month, TimezoneDTO $timezone) { - $firstDay = new DateTime(sprintf('%d-%02d', $year, $month), - new DateTimeZone($timezone->Name)); - $firstDayAfter = clone $firstDay; - $firstDayAfter->modify('last day of this month')->modify('+1 day'); - $firstDayOfTheWeek = $timezone->FirstDayOfTheWeek; - if ($firstDay->format('D') !== $firstDayOfTheWeek) { - $firstDay->modify('last ' . $firstDayOfTheWeek); - } - if ($firstDayAfter->format('D') !== $firstDayOfTheWeek) { - $firstDayAfter->modify('next ' . $firstDayOfTheWeek); - } - $firstDayAfter->modify('-1 day'); - return [$firstDay, $firstDayAfter]; - } - -} - -?> |