Пример #1
0
 public function get_fullcalendar_events($params, $entity_manager, $with_title = true)
 {
     // TODO: convert this to how the is_open/get_instances works
     $rrule_transformer = new RRuleTransformer();
     $cal_start = new \Datetime($params['start']);
     $cal_end = new \DateTime($params['end']);
     $event_instances = array();
     $event_dates = array();
     if (isset($params['event']['id']) && empty($params['event']['id'])) {
         $current_event = new Event();
         $this->events->add($current_event);
     }
     foreach ($this->events as $event) {
         if (isset($params['event']['id']) && $params['event']['id'] == $event->id) {
             $event->fromParams($params, $entity_manager);
         } else {
             if ($event->is_recurring) {
                 $event->recurrence_rule = new RRule($event->recurrence_rule, $event->start, $event->end);
             } else {
                 $event->recurrence_rule = new RRule(null, $event->start, $event->end);
             }
         }
         if (!$event->is_visible) {
             continue;
         }
         // get all recurrences
         $cal_range = new BetweenConstraint($cal_start, $cal_end, true);
         $recurrences = $rrule_transformer->transform($event->recurrence_rule, 60, $cal_range)->toArray();
         foreach ($recurrences as $recurrence) {
             $event_instances[] = array('event' => $event, 'recurrence' => $recurrence);
         }
     }
     $event_instances = Utils::remove_overlapping_events($event_instances);
     // TODO: refactor the 24 hours / formatting as it is gross
     $events = array();
     foreach ($event_instances as $instance) {
         $prev_all_day = Utils::prev_was_all_day($instance, $event_instances);
         $next_all_day = Utils::next_is_all_day($instance, $event_instances);
         if ($prev_all_day && $next_all_day) {
             $title = $with_title ? $instance['event']->title . "\n" : '';
             $title .= Utils::format_time($instance['recurrence']->getStart(), $instance['recurrence']->getEnd());
         } elseif ($prev_all_day) {
             $title = sprintf("%s24 Hours -\n%s", $with_title ? $instance['event']->title . "\n" : '', Utils::format_time($instance['recurrence']->getEnd()));
         } elseif ($next_all_day) {
             $title = sprintf("%s%s -\n24 Hours", $with_title ? $instance['event']->title . "\n" : '', Utils::format_time($instance['recurrence']->getStart()));
         } elseif ($instance['event']->is_all_day) {
             $title = sprintf("%sOpen\n24 Hours", $with_title ? $instance['event']->title . "\n" : '');
         } elseif ($instance['event']->is_closed) {
             $title = sprintf("%sClosed", $with_title ? $instance['event']->title . "\n" : '');
         } else {
             $title = $with_title ? $instance['event']->title . "\n" : '';
             $title .= Utils::format_time($instance['recurrence']->getStart(), $instance['recurrence']->getEnd());
         }
         $events[] = array('id' => $instance['event']->id, 'title' => $title, 'start' => $instance['recurrence']->getStart()->format(\DateTime::ISO8601), 'end' => $instance['recurrence']->getEnd()->format(\DateTime::ISO8601), 'color' => $instance['event']->category->color);
     }
     return $events;
 }