123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <?php
- /**
- * @file
- * Contains preprocess helper function.
- */
- use \Drupal\Core\Entity\Entity\EntityViewDisplay;
- use \Drupal\Core\Datetime\DrupalDateTime;
- /**
- * Helper function to preprocess datetime field.
- */
- function _addtocalendar_preprocess_field(&$variables) {
- $entity = $variables['element']['#object'];
- $view_mode = $variables['element']['#view_mode'];
- $field_name = $variables['element']['#field_name'];
- // Get the field formatter settings...
- $entity_display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
- $field_display = $entity_display->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' => '<var class="atc_event">' . render($build['addtocalendar'][$index]) . '</var>',
- '#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';
- }
- }
- }
|