You are here

class RollingInterval in Recurring Time Period 8

Provides a period based on a rolling interval from the start date.

Plugin annotation


@RecurringPeriod(
  id = "rolling_interval",
  label = @Translation("Rolling interval"),
  description = @Translation("Provide a period based on a rolling interval"),
)

Hierarchy

Expanded class hierarchy of RollingInterval

File

src/Plugin/RecurringPeriod/RollingInterval.php, line 16

Namespace

Drupal\recurring_period\Plugin\RecurringPeriod
View source
class RollingInterval extends RecurringPeriodBase {

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      // The interval configuration.
      'interval' => [
        // The interval period. This is the ID of an interval plugin, for
        // example 'month'.
        'period' => '',
        // The interval. This is a value which multiplies the period.
        'interval' => '',
      ],
    ] + parent::defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $config = $this
      ->getConfiguration();
    $form['interval'] = [
      '#type' => 'interval',
      '#title' => 'Interval',
      '#default_value' => $config['interval'],
    ];
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state
      ->getValue($form['#parents']);
    $this->configuration['interval'] = $values['interval'];
  }

  /**
   * {@inheritdoc}
   */
  public function calculateDate(\DateTimeImmutable $start) {
    return $this
      ->calculateEnd($start);
  }

  /**
   * {@inheritdoc}
   */
  public function calculateStart(\DateTimeImmutable $date) {

    // For a rolling interval, the start date is the same as the given date.
    return $date;
  }

  /**
   * {@inheritdoc}
   */
  public function calculateEnd(\DateTimeImmutable $start) {

    // Get our interval values from our configuration.
    $config = $this
      ->getConfiguration();
    $interval_configuration = $config['interval'];

    // The interval plugin ID is the 'period' value.
    $interval_plugin_id = $interval_configuration['period'];

    // Create a DateInterval that represents the interval.
    // TODO: This can be removed when https://www.drupal.org/node/2900435 lands.
    $interval_plugin_definition = $this->pluginManagerIntervals
      ->getDefinition($interval_plugin_id);
    $value = $interval_configuration['interval'] * $interval_plugin_definition['multiplier'];
    $date_interval = \DateInterval::createFromDateString($value . ' ' . $interval_plugin_definition['php']);
    return $start
      ->add($date_interval);
  }

  /**
   * {@inheritdoc}
   */
  public function getPeriodLabel(\DateTimeImmutable $start, \DateTimeImmutable $end) {

    // Get our interval values from our configuration.
    $config = $this
      ->getConfiguration();
    $interval_configuration = $config['interval'];

    // The interval plugin ID is the 'period' value.
    $interval_plugin_id = $interval_configuration['period'];
    $interval_plugin_definition = $this->pluginManagerIntervals
      ->getDefinition($interval_plugin_id);
    return $this
      ->t("@count @interval from @start-date", [
      '@count' => $config['interval']['interval'],
      '@interval' => $config['interval']['interval'] == 1 ? $interval_plugin_definition['singular'] : $interval_plugin_definition['plural'],
      '@start-date' => $start
        ->format(\DateTimeInterface::RSS),
    ]);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
RecurringPeriodBase::$pluginManagerIntervals protected property The Interval Plugin Manager service.
RecurringPeriodBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
RecurringPeriodBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
RecurringPeriodBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
RecurringPeriodBase::getDescription public function Gets the plugin description. Overrides RecurringPeriodInterface::getDescription
RecurringPeriodBase::getLabel public function Gets the plugin label. Overrides RecurringPeriodInterface::getLabel
RecurringPeriodBase::getNextPeriod public function Calculates the period after the given period. Overrides RecurringPeriodInterface::getNextPeriod
RecurringPeriodBase::getPeriodContainingDate public function Gets a period object that contains the given date. Overrides RecurringPeriodInterface::getPeriodContainingDate
RecurringPeriodBase::getPeriodFromDate public function Gets a period object that begins on a given date. Overrides RecurringPeriodInterface::getPeriodFromDate
RecurringPeriodBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
RecurringPeriodBase::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
RecurringPeriodBase::__construct public function Constructs a new plugin instance. Overrides PluginBase::__construct
RecurringPeriodInterface::UNLIMITED constant Represents an unlimited end time.
RollingInterval::buildConfigurationForm public function Form constructor. Overrides RecurringPeriodBase::buildConfigurationForm
RollingInterval::calculateDate public function Calculates the end date and time for the period. Overrides RecurringPeriodInterface::calculateDate
RollingInterval::calculateEnd public function Calculates the end date and time for the period. Overrides RecurringPeriodBase::calculateEnd
RollingInterval::calculateStart public function Calculates the end of the previous period. Overrides RecurringPeriodBase::calculateStart
RollingInterval::defaultConfiguration public function Gets default configuration for this plugin. Overrides RecurringPeriodBase::defaultConfiguration
RollingInterval::getPeriodLabel public function Gets a label for the period starting from the given date. Overrides RecurringPeriodBase::getPeriodLabel
RollingInterval::submitConfigurationForm public function Form submission handler. Overrides RecurringPeriodBase::submitConfigurationForm
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.