getComponent($field_name); if (!empty($field_display['third_party_settings']['addtocalendar'])) { $build['addtocalendar'] = []; $settings = $field_display['third_party_settings']['addtocalendar']; $style = []; if ($settings['addtocalendar_show']) { $token_service = \Drupal::token(); $token_options = ['langcode' => $entity->language()->getId(), 'callback' => '', 'clear' => TRUE]; $timeZone = date_default_timezone_get(); $values = $entity->{$field_name}->getValue(); $delta = !empty($settings['addtocalendar_settings']['delta']) ? $settings['addtocalendar_settings']['delta'] : 0; if (empty($values[$delta]['value'])) { return; } // Unsetting values other than delta if single value is selected. if ($settings['addtocalendar_settings']['multiple_value'] == 1) { $temp = $values[$delta]; unset($values); $values = array($delta => $temp); unset($temp); } foreach ($values as $index => $date_val) { $date = new DrupalDateTime(preg_replace('/T/', ' ', $values[$index]['value']), 'UTC'); if (!empty($values[$index]['end_value']) && isset($values[$index]['end_value'])) { $end_date = new DrupalDateTime(preg_replace('/T/', ' ', $values[$index]['end_value']), 'UTC'); } $build['addtocalendar'][$index]['atc_date_start'] = [ '#type' => 'html_tag', '#tag' => 'var', '#value' => $date->format('Y-m-d H:i:s', ['timezone' => $timeZone]), '#attributes' => [ 'class' => 'atc_date_start', ], ]; $info = [ 'atc_date_end', 'atc_title', 'atc_description', 'atc_location', 'atc_organizer', 'atc_organizer_email', ]; foreach ($info as $value) { switch ($settings['addtocalendar_settings'][$value]['field']) { case 'token': $class_value = $settings['addtocalendar_settings'][$value]['tokenized']; $class_value = $token_service->replace($class_value, array('node' => $entity), $token_options); break; case 'title': $class_value = $entity->getTitle(); break; default: $field = $settings['addtocalendar_settings'][$value]['field']; if (strip_tags($entity->{$field}->getFieldDefinition() ->getType()) == 'daterange' ) { $class_value = strip_tags($entity->{$field}->end_value); } else { $class_value = strip_tags($entity->{$field}->value); } break; } $build['addtocalendar'][$index][$value] = [ '#type' => 'html_tag', '#tag' => 'var', '#value' => $class_value, '#attributes' => [ 'class' => $value, ], ]; } // Assign end date the value of start date if no end date is present and its not a daterange field. if (empty($end_date)) { $build['addtocalendar'][$index]['atc_date_end']['#value'] = (!empty($build['addtocalendar'][$index]['atc_date_end']['#value'])) ? $build['addtocalendar'][$index]['atc_date_end']['#value'] : $build['addtocalendar'][$index]['atc_date_start']['#value']; $build['addtocalendar'][$index]['atc_date_end']['#value'] = (!empty($build['addtocalendar'][$index]['atc_date_end']['#value'])) ? $build['addtocalendar'][$index]['atc_date_start']['#value'] : $date->format('Y-m-d H:i:s', ['timezone' => $timeZone]); } // Assign end date the value of end date if no end date is present and its a daterange field. else { $end_date_val = $end_date->__toString(); $build['addtocalendar'][$index]['atc_date_end']['#value'] = (!empty($build['addtocalendar'][$index]['atc_date_end']['#value'])) ? $build['addtocalendar'][$index]['atc_date_end']['#value'] : $end_date_val; $build['addtocalendar'][$index]['atc_date_end']['#value'] = $end_date->format('Y-m-d H:i:s', ['timezone' => $timeZone]); } $build['addtocalendar'][$index]['atc_timezone'] = [ '#type' => 'html_tag', '#tag' => 'var', '#value' => $timeZone, '#attributes' => [ 'class' => 'atc_timezone', ], ]; $build['addtocalendar'][$index]['atc_privacy'] = [ '#type' => 'html_tag', '#tag' => 'var', '#value' => $settings['addtocalendar_settings']['atc_privacy'], '#attributes' => [ 'class' => 'atc_privacy', ], ]; $build['addtocalendar'][$index] = [ '#type' => 'html_tag', '#tag' => 'span', '#value' => '' . render($build['addtocalendar'][$index]) . '', '#attributes' => [ 'class' => [ 'addtocalendar', ], ], ]; if ($settings['addtocalendar_settings']['data_calendars']) { $value = ''; foreach ($settings['addtocalendar_settings']['data_calendars'] as $key => $set) { if ($set) { $value .= $key . ', '; } } if ($value) { $build['addtocalendar'][$index]['#attributes']['data-calendars'] = $value; } } $build['addtocalendar'][$index]['#attributes']['data-secure'] = $settings['addtocalendar_settings']['data_secure']; // Styling. switch ($settings['addtocalendar_settings']['style']) { case 'blue': $style['class'] = 'atc-style-blue'; $style['library'] = 'addtocalendar/blue'; break; case 'glow_orange': $style['class'] = 'atc-style-glow-orange'; $style['library'] = 'addtocalendar/glow_orange'; break; } if (!empty($style)) { $build['addtocalendar'][$index]['#attributes']['class'][] = $style['class']; $variables['#attached']['library'][] = $style['library']; } } } // Setting #markup for all the date or daterange fields if multivalue is selected. if ($settings['addtocalendar_settings']['multiple_value'] == 2) { foreach ($variables['items'] as $k => $content) { if (isset($variables['items'][$k]['content']['#markup'])) { $variables['items'][$k]['content']['#markup'] .= render($build['addtocalendar'][$k]); } elseif (isset($variables['items'][$k]['content'])) { unset($variables['items'][$k]['content']['#theme']); $variables['items'][$k]['content']['#markup'] = $variables['items'][$k]['content']['#text'] . render($build['addtocalendar'][$k]); } $variables['#attached']['library'][] = 'addtocalendar/base'; } } // Setting #markup for all the date or daterange fields if single value is selected. else { if (isset($variables['items'][$delta]['content']['#markup'])) { $variables['items'][$delta]['content']['#markup'] .= render($build['addtocalendar']); } elseif (isset($variables['items'][$delta]['content'])) { unset($variables['items'][$delta]['content']['#theme']); $variables['items'][$delta]['content']['#markup'] = $variables['items'][$delta]['content']['#text'] . render($build['addtocalendar']); } $variables['#attached']['library'][] = 'addtocalendar/base'; } } }