summaryrefslogtreecommitdiff
path: root/app/frontend/facades/EventFacade.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/frontend/facades/EventFacade.php')
-rw-r--r--app/frontend/facades/EventFacade.php115
1 files changed, 115 insertions, 0 deletions
diff --git a/app/frontend/facades/EventFacade.php b/app/frontend/facades/EventFacade.php
new file mode 100644
index 0000000..14f809d
--- /dev/null
+++ b/app/frontend/facades/EventFacade.php
@@ -0,0 +1,115 @@
+<?php
+
+Prado::using('Application.facades.Facade');
+Prado::using('Application.dto.EventDTO');
+Prado::using('Application.dto.TimezoneDTO');
+Prado::using('Application.dto.GridEventDTO');
+Prado::using('Application.dto.CalendarGridDTO');
+Prado::using('Application.model.Calendar');
+Prado::using('Application.facades.CalendarFacade');
+Prado::using('Application.user.DbUser');
+
+class EventFacade extends Facade {
+
+ public function getEventList(string $dateFrom=NULL, string $dateTo=NULL,
+ array $calendars=NULL, string $order='ASC') {
+ $calendarClause = '1=1';
+ if ($calendars) {
+ $calendarClause = sprintf(
+ '_calendar IN (%s)',
+ implode(
+ ',',
+ array_map(
+ function($calendar) {
+ return $this->quoteString($calendar->UID);
+ },
+ $calendars
+ )
+ )
+ );
+ }
+ return $this->fetchList(
+ 'getEvents',
+ [
+ 'date_from' => $dateFrom ?: '0000-00-00 00:00:00',
+ 'date_to' => $dateTo ?: '9999-99-99',
+ 'calendar_clause' => $calendarClause,
+ 'order_clause' => $order
+ ]
+ );
+ }
+
+ private function _compileEventObjects(array $events, array $calendars,
+ TimezoneDTO $tz,
+ string $class = 'Application.dto.EventDTO') {
+ return array_map(
+ function($event) use($calendars, $class, $tz) {
+ $dto = Prado::createComponent($class, $tz);
+ $dto->loadRecord($event, $calendars);
+ return $dto;
+ },
+ $events
+ );
+ }
+
+ public function getTimeframeListForUser(
+ DbUser $user,
+ DateTime $dateFrom, DateTime $dateTo,
+ string $returnClass = 'Application.dto.EventDTO') {
+ $calendars = CalendarFacade::getInstance()->getCalendarPreference($user);
+ if ($calendars) {
+ $events = $this->getEventList(
+ $dateFrom->format('Y-m-d H:i:s'),
+ $dateTo->format('Y-m-d H:i:s'),
+ $calendars
+ );
+ $calendars = $this->_getCalendarsForEvents($events);
+ return $this->_compileEventObjects(
+ $events, $calendars,
+ UserFacade::getInstance()->getTimezonePreference($user),
+ $returnClass);
+ }
+ return [];
+ }
+
+ public function getCalendarListForUser(DbUser $user,
+ $month, $year) {
+ if (!$year) {
+ $year = intval(date('Y'));
+ }
+ if (!$month) {
+ $month = intval(date('m'));
+ }
+ $timezone = $user
+ ? UserFacade::getInstance()->getTimezonePreference($user)
+ : new TimezoneDTO(date_default_timezone_get());
+ $timeframe = CalendarFacade::getInstance()->getCalendarBoundaries(
+ $year, $month, $timezone
+ );
+ return new CalendarGridDTO(
+ $this->getTimeframeListForUser(
+ $user,
+ $timeframe[0], $timeframe[1],
+ 'Application.dto.GridEventDTO'
+ ),
+ ...$timeframe
+ );
+ }
+
+ private function _getCalendarsForEvents(array $events) {
+ if ($events) {
+ return Calendar::finder()->findAllByPks(
+ array_map(
+ function($event) {
+ return $event->CalendarID;
+ },
+ $events
+ )
+ );
+ }
+ return [];
+ }
+
+}
+
+?>