recurring_events-2.0.x-dev/src/Plugin/RecurringEventsFieldTrait.php

src/Plugin/RecurringEventsFieldTrait.php
<?php

declare(strict_types=1);

namespace Drupal\recurring_events\Plugin;

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;

/**
 * A trait to provide some time related reusable static methods.
 */
trait RecurringEventsFieldTrait {

  /**
   * Generate times based on specific intervals and min/max times.
   *
   * @return array
   *   An array of times suitable for a select list.
   */
  protected function getTimeOptions() {
    $times = [];

    $config = \Drupal::config('recurring_events.eventseries.config');

    // Take interval in minutes, and multiply it by 60 to convert to seconds.
    $interval = $config->get('interval') * 60;
    if ($interval) {
      $min_time = $config->get('min_time');
      $max_time = $config->get('max_time');
      $format = $config->get('time_format');

      $min_time = DrupalDateTime::createFromFormat('h:ia', $min_time);
      $max_time = DrupalDateTime::createFromFormat('h:ia', $max_time);

      // Convert the minimum time to a number of seconds after midnight.
      $lower_hour = $min_time->format('H') * 60 * 60;
      $lower_minute = $min_time->format('i') * 60;
      $lower = $lower_hour + $lower_minute;

      // Convert the maximum time to a number of seconds after midnight.
      $upper_hour = $max_time->format('H') * 60 * 60;
      $upper_minute = $max_time->format('i') * 60;
      $upper = $upper_hour + $upper_minute;

      $range = range($lower, $upper, $interval);
      $utc_timezone = new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE);

      foreach ($range as $time) {
        $time_option = DrupalDateTime::createFromTimestamp($time, $utc_timezone);
        $times[$time_option->format('h:i a', ['langcode' => 'en'])] = $time_option->format($format);
      }
    }

    \Drupal::moduleHandler()->alter('recurring_events_times', $times);

    return $times;
  }

  /**
   * Return durations for events.
   *
   * @return array
   *   An array of durations suitable for a select list.
   */
  protected function getDurationOptions() {
    $durations = [
      '900' => t('15 minutes'),
      '1800' => t('30 minutes'),
      '2700' => t('45 minutes'),
      '3600' => t('1 hour'),
      '5400' => t('1.5 hours'),
      '7200' => t('2 hours'),
      '9000' => t('2.5 hours'),
      '10800' => t('3 hours'),
      '12600' => t('3.5 hours'),
      '14400' => t('4 hours'),
      '16200' => t('4.5 hours'),
      '18000' => t('5 hours'),
      '19800' => t('5.5 hours'),
      '21600' => t('6 hours'),
      '25200' => t('7 hours'),
      '28800' => t('8 hours'),
      '32400' => t('9 hours'),
      '36000' => t('10 hours'),
      '39600' => t('11 hours'),
      '43200' => t('12 hours'),
      '46800' => t('13 hours'),
      '50400' => t('14 hours'),
      '54000' => t('15 hours'),
      '57600' => t('16 hours'),
      '61200' => t('17 hours'),
      '64800' => t('18 hours'),
      '68400' => t('19 hours'),
      '72000' => t('20 hours'),
      '75600' => t('21 hours'),
      '79200' => t('22 hours'),
      '82800' => t('23 hours'),
      '86400' => t('24 hours'),
    ];

    \Drupal::moduleHandler()->alter('recurring_events_durations', $durations);

    return $durations;
  }

  /**
   * Convert a time from 12 hour format to 24 hour format.
   *
   * @var string $time
   *   The time to convert to 24 hour format.
   *
   * @return array
   *   An array of time parts.
   */
  protected static function convertTimeTo24hourFormat($time) {
    $time_parts = [];
    $timestamp = strtotime($time);
    $time_24hr = \Drupal::service('date.formatter')->format($timestamp, 'html_time');

    // Split the start time up to separate out hours and minutes.
    $time_parts = explode(':', $time_24hr);

    return $time_parts;
  }

  /**
   * Return unit options for events.
   *
   * @return array
   *   An array of unit options suitable for a select list.
   */
  protected function getUnitOptions() {
    $units = [
      'second' => t('Second(s)'),
      'minute' => t('Minute(s)'),
      'hour' => t('Hour(s)'),
    ];

    \Drupal::moduleHandler()->alter('recurring_events_units', $units);

    return $units;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc