You are here

private function FullCalendar::prepareEvent in FullCalendar 8.4

Same name and namespace in other branches
  1. 8.5 src/Plugin/views/style/FullCalendar.php \Drupal\fullcalendar\Plugin\views\style\FullCalendar::prepareEvent()
  2. 8 src/Plugin/views/style/FullCalendar.php \Drupal\fullcalendar\Plugin\views\style\FullCalendar::prepareEvent()
  3. 8.2 src/Plugin/views/style/FullCalendar.php \Drupal\fullcalendar\Plugin\views\style\FullCalendar::prepareEvent()
  4. 8.3 src/Plugin/views/style/FullCalendar.php \Drupal\fullcalendar\Plugin\views\style\FullCalendar::prepareEvent()

Helper method to prepare an event.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: Event entity.

$fields:

int $delta: Field delta.

Return value

array

Throws

\Exception

1 call to FullCalendar::prepareEvent()
FullCalendar::prepareEvents in src/Plugin/views/style/FullCalendar.php
Prepare events for calendar.

File

src/Plugin/views/style/FullCalendar.php, line 425

Class

FullCalendar
Plugin annotation @ViewsStyle( id = "fullcalendar", title = @Translation("FullCalendar"), help = @Translation("Displays items on a calendar."), theme = "views_view--fullcalendar", display_types = {"normal"} )

Namespace

Drupal\fullcalendar\Plugin\views\style

Code

private function prepareEvent($entity, $fields, $delta) {
  $classes = $this->moduleHandler
    ->invokeAll('fullcalendar_classes', [
    $entity,
  ]);
  $this->moduleHandler
    ->alter('fullcalendar_classes', $classes, $entity);
  $classes = array_map([
    '\\Drupal\\Component\\Utility\\Html',
    'getClass',
  ], $classes);
  $class = count($classes) ? implode(' ', array_unique($classes)) : '';
  $palette = $this->moduleHandler
    ->invokeAll('fullcalendar_palette', [
    $entity,
  ]);
  $this->moduleHandler
    ->alter('fullcalendar_palette', $palette, $entity);

  // Start/end dates.
  $event_start_end = $this
    ->getEventStartEndDates($fields);
  $event_start = $event_start_end['start'];
  $event_end = $event_start_end['end'];
  $all_day = $this
    ->isAllDayEvent($event_start_end);
  $request_time = \Drupal::time()
    ->getRequestTime();
  $current_time = new DateTime();
  $current_time
    ->setTimestamp($request_time)
    ->format(DateTime::ATOM);

  // Add a class if the event was in the past or is in the future, based
  // on the end time. We can't do this in hook_fullcalendar_classes()
  // because the date hasn't been processed yet.
  if ($all_day && $event_start < $current_time || !$all_day && $event_end < $current_time) {
    $time_class = 'fc-event-past';
  }
  elseif ($event_start > $current_time) {
    $time_class = 'fc-event-future';
  }
  else {
    $time_class = 'fc-event-now';
  }
  $editable = !empty($settings['fullcalendar']['editable']) ? $entity
    ->access('update', NULL, TRUE)
    ->isAllowed() : FALSE;
  return [
    'id' => $entity
      ->id(),
    'groupId' => $entity
      ->getEntityTypeId(),
    'allDay' => $all_day,
    'start' => $event_start,
    'end' => $event_end,
    'editable' => $editable,
    'className' => $class . ' ' . $time_class,
    'title' => strip_tags(htmlspecialchars_decode($entity
      ->label(), ENT_QUOTES)),
    'url' => $entity
      ->toUrl('canonical', [
      'language' => \Drupal::languageManager()
        ->getCurrentLanguage(),
    ])
      ->toString(),
    'backgroundColor' => !empty($palette['backgroundColor']) ? $palette['backgroundColor'] : '',
    'borderColor' => !empty($palette['borderColor']) ? $palette['borderColor'] : '',
    'textColor' => !empty($palette['textColor']) ? $palette['textColor'] : '',
  ];
}