class DateRecurDefaultFormatter in Recurring Dates Field 8
Plugin implementation of the 'date_recur_default_formatter' formatter.
Plugin annotation
@FieldFormatter(
id = "date_recur_default_formatter",
label = @Translation("Date recur default formatter"),
field_types = {
"date_recur"
}
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeFormatterBase implements ContainerFactoryPluginInterface
- class \Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeDefaultFormatter
- class \Drupal\datetime_range\Plugin\Field\FieldFormatter\DateRangeDefaultFormatter uses DateTimeRangeTrait
- class \Drupal\date_recur\Plugin\Field\FieldFormatter\DateRecurDefaultFormatter
- class \Drupal\datetime_range\Plugin\Field\FieldFormatter\DateRangeDefaultFormatter uses DateTimeRangeTrait
- class \Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeDefaultFormatter
- class \Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeFormatterBase implements ContainerFactoryPluginInterface
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of DateRecurDefaultFormatter
File
- src/
Plugin/ Field/ FieldFormatter/ DateRecurDefaultFormatter.php, line 22
Namespace
Drupal\date_recur\Plugin\Field\FieldFormatterView source
class DateRecurDefaultFormatter extends DateRangeDefaultFormatter {
/** @var int */
protected $occurrenceCounter;
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return [
// Implement default settings.
'show_rrule' => TRUE,
'show_next' => 5,
'occurrence_format_type' => 'medium',
'same_end_date_format_type' => 'medium',
'count_per_item' => TRUE,
] + parent::defaultSettings();
}
protected function showNextOptions() {
// This cannot work for infinite fields.
// $next_options[-1] = $this->t('All');
$next_options[0] = $this
->t('None');
for ($i = 1; $i <= 20; $i++) {
$next_options[$i] = $i;
}
return $next_options;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$form = parent::settingsForm($form, $form_state);
$form['show_rrule'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Show repeat rule'),
'#default_value' => $this
->getSetting('show_rrule'),
];
$form['show_next'] = [
'#type' => 'select',
'#options' => $this
->showNextOptions(),
'#title' => $this
->t('Show next occurrences'),
'#default_value' => $this
->getSetting('show_next'),
];
$form['count_per_item'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Limit occurrences per field item'),
'#default_value' => $this
->getSetting('count_per_item'),
'#description' => $this
->t('If disabled, the number of occurrences shown is limited across all field items.'),
];
$form['occurrence_format_type'] = $form['format_type'];
$form['occurrence_format_type']['#title'] .= ' ' . t('(Occurrences)');
$form['occurrence_format_type']['#default_value'] = $this
->getSetting('occurrence_format_type');
$form['same_end_date_format_type'] = $form['format_type'];
$form['same_end_date_format_type']['#title'] .= ' ' . t('(End date if same day as start date)');
$form['same_end_date_format_type']['#default_value'] = $this
->getSetting('same_end_date_format_type');
return $form;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = parent::settingsSummary();
$summary[] = $this
->t('Show repeat rule') . ': ' . ($this
->getSetting('show_rrule') ? $this
->t('Yes') : $this
->t('No'));
$summary[] = $this
->t('Show next occurrences') . ': ' . $this
->showNextOptions()[$this
->getSetting('show_next')];
$date = new DrupalDateTime();
$date->_dateRecurIsOccurrence = TRUE;
$summary[] = t('Occurrence format: @display', [
'@display' => $this
->formatDate($date),
]);
return $summary;
}
protected function buildDateRangeValue($start_date, $end_date, $isOccurrence = FALSE) {
// Protection. @todo: Find out why sometimes a \DateTime arrives.
if ($start_date instanceof \DateTime) {
$start_date = DrupalDateTime::createFromDateTime($start_date);
}
if ($end_date instanceof \DateTime) {
$end_date = DrupalDateTime::createFromDateTime($end_date);
}
if ($isOccurrence) {
$start_date->_dateRecurIsOccurrence = $end_date->_dateRecurIsOccurrence = TRUE;
}
if ($start_date
->format('Ymd') == $end_date
->format('Ymd')) {
$end_date->_same_end_date = TRUE;
}
if ($start_date
->format('U') !== $end_date
->format('U')) {
$element = [
'start_date' => $this
->buildDateWithIsoAttribute($start_date),
'separator' => [
'#plain_text' => ' ' . $this
->getSetting('separator') . ' ',
],
'end_date' => $this
->buildDateWithIsoAttribute($end_date),
];
}
else {
$element = $this
->buildDateWithIsoAttribute($start_date);
}
return $element;
}
protected function formatDate($date) {
if (!empty($date->_same_end_date)) {
$format_type = $this
->getSetting('same_end_date_format_type');
}
else {
if (empty($date->_dateRecurIsOccurrence)) {
$format_type = $this
->getSetting('format_type');
}
else {
$format_type = $this
->getSetting('occurrence_format_type');
}
}
$timezone = $this
->getSetting('timezone_override') ?: $date
->getTimezone()
->getName();
return $this->dateFormatter
->format($date
->getTimestamp(), $format_type, '', $timezone != '' ? $timezone : NULL);
}
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = [];
$this->occurrenceCounter = 0;
foreach ($items as $delta => $item) {
$elements[$delta] = $this
->viewValue($item);
}
return $elements;
}
/**
* Generate the output appropriate for one field item.
*
* @param DateRecurItem $item
* One field item.
*
* @return string
* The textual output generated.
*/
protected function viewValue(DateRecurItem $item) {
$build = [
'#theme' => 'date_recur_default_formatter',
];
if (empty($item->end_date)) {
$item->end_date = clone $item->start_date;
}
$build['#date'] = $this
->buildDateRangeValue($item->start_date, $item->end_date);
if (empty($item->rrule)) {
$build['#isRecurring'] = FALSE;
}
else {
$build['#isRecurring'] = TRUE;
}
if ($this
->getSetting('show_rrule') && !empty($item->rrule)) {
$build['#repeatrule'] = $item
->getOccurrenceHandler()
->humanReadable();
}
$build['#occurrences'] = $this
->viewOccurrences($item);
if (!empty($item->_attributes)) {
$build += $item->_attributes;
// Unset field item attributes since they have been included in the
// formatter output and should not be rendered in the field template.
unset($item->_attributes);
}
return $build;
}
protected function viewOccurrences(DateRecurItem $item) {
$build = [];
$start = new \DateTime('now');
$count = $this
->getSetting('show_next');
if (!$this
->getSetting('count_per_item')) {
$count = $count - $this->occurrenceCounter;
}
if ($count <= 0) {
return $build;
}
$occurrences = $item
->getOccurrenceHandler()
->getOccurrencesForDisplay($start, NULL, $count);
foreach ($occurrences as $occurrence) {
if (!empty($occurrence['value'])) {
$build[] = $this
->buildDateRangeValue($occurrence['value'], $occurrence['end_value'], TRUE);
}
}
$this->occurrenceCounter += count($occurrences);
return $build;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DateRecurDefaultFormatter:: |
protected | property | @var int | |
DateRecurDefaultFormatter:: |
protected | function | ||
DateRecurDefaultFormatter:: |
public static | function |
Defines the default settings for this plugin. Overrides DateRangeDefaultFormatter:: |
|
DateRecurDefaultFormatter:: |
protected | function |
Creates a formatted date value as a string. Overrides DateTimeDefaultFormatter:: |
|
DateRecurDefaultFormatter:: |
public | function |
Returns a form to configure settings for the formatter. Overrides DateRangeDefaultFormatter:: |
|
DateRecurDefaultFormatter:: |
public | function |
Returns a short summary for the current formatter settings. Overrides DateRangeDefaultFormatter:: |
|
DateRecurDefaultFormatter:: |
protected | function | ||
DateRecurDefaultFormatter:: |
public | function |
Overrides DateTimeRangeTrait:: |
|
DateRecurDefaultFormatter:: |
protected | function | ||
DateRecurDefaultFormatter:: |
protected | function | Generate the output appropriate for one field item. | |
DateTimeFormatterBase:: |
protected | property | The date format entity storage. | |
DateTimeFormatterBase:: |
protected | property | The date formatter service. | |
DateTimeFormatterBase:: |
protected | function | Creates a render array from a date object. | |
DateTimeFormatterBase:: |
protected | function | Creates a render array from a date object with ISO date attribute. | |
DateTimeFormatterBase:: |
public static | function |
Creates an instance of the plugin. Overrides FormatterBase:: |
|
DateTimeFormatterBase:: |
protected | function | Gets a settings array suitable for DrupalDateTime::format(). | |
DateTimeFormatterBase:: |
protected | function | Sets the proper time zone on a DrupalDateTime object for the current user. | |
DateTimeFormatterBase:: |
public | function |
Constructs a new DateTimeDefaultFormatter. Overrides FormatterBase:: |
|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FormatterBase:: |
protected | property | The field definition. | |
FormatterBase:: |
protected | property | The label display setting. | |
FormatterBase:: |
protected | property |
The formatter settings. Overrides PluginSettingsBase:: |
|
FormatterBase:: |
protected | property | The view mode. | |
FormatterBase:: |
protected | function | Returns the value of a field setting. | |
FormatterBase:: |
protected | function | Returns the array of field settings. | |
FormatterBase:: |
public static | function |
Returns if the formatter can be used for the provided field. Overrides FormatterInterface:: |
14 |
FormatterBase:: |
public | function |
Allows formatters to load information for field values being displayed. Overrides FormatterInterface:: |
2 |
FormatterBase:: |
public | function |
Builds a renderable array for a fully themed field. Overrides FormatterInterface:: |
1 |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |