class ActivityEndDateFieldItemList in CiviCRM Entity 8.3
A computed field item list for Activities to provide an end date and time.
In this class, you will notice timezone conversions from the default timezone to UTC. CiviCRM stores dates in the expected timezone, and Drupal always stores them in UTC. So we have to do a bit of conversion.
This is also automatically done when a CivicrmEntity instance is saved and when an entity is loaded.
Hierarchy
- class \Drupal\Core\TypedData\TypedData implements PluginInspectionInterface, TypedDataInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Core\TypedData\Plugin\DataType\ItemList implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, ListInterface
- class \Drupal\Core\Field\FieldItemList implements FieldItemListInterface
- class \Drupal\civicrm_entity\Plugin\Field\ActivityEndDateFieldItemList uses ComputedItemListTrait
- class \Drupal\Core\Field\FieldItemList implements FieldItemListInterface
- class \Drupal\Core\TypedData\Plugin\DataType\ItemList implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, ListInterface
Expanded class hierarchy of ActivityEndDateFieldItemList
See also
\Drupal\civicrm_entity\Entity\CivicrmEntity::civicrmApiNormalize
\Drupal\civicrm_entity\CiviEntityStorage::initFieldValues
1 file declares its use of ActivityEndDateFieldItemList
- CivicrmEntity.php in src/
Entity/ CivicrmEntity.php
File
- src/
Plugin/ Field/ ActivityEndDateFieldItemList.php, line 23
Namespace
Drupal\civicrm_entity\Plugin\FieldView source
class ActivityEndDateFieldItemList extends FieldItemList {
use ComputedItemListTrait;
/**
* {@inheritdoc}
*/
protected function computeValue() {
$entity = $this
->getEntity();
assert($entity instanceof CivicrmEntity);
$activity_date_time = $entity
->get('activity_date_time')->value;
$duration = $entity
->get('duration')->value;
if (!$activity_date_time) {
return;
}
// The time is already in UTC due to ::initFieldValues in storage.
// @see \Drupal\civicrm_entity\CiviEntityStorage::initFieldValues
$date = new \DateTime($activity_date_time, new \DateTimeZone('UTC'));
// We have to change this _back_ to the default timezone, as initFieldValues
// will be called again and it assumes the value is from CiviCRM, in the
// default timezone.
$date
->setTimezone(new \DateTimeZone(date_default_timezone_get()));
if (is_numeric($duration)) {
$date
->add(new \DateInterval("PT{$duration}M"));
}
$this->list[0] = $this
->createItem(0, $date
->format(DateTimeItemInterface::DATETIME_STORAGE_FORMAT));
}
/**
* {@inheritdoc}
*
* Recalculate the activities duration if the end date has been changed.
*/
public function onChange($delta) {
$entity = $this
->getEntity();
assert($entity instanceof CivicrmEntity);
// Since we're calculating a difference in times, we can use UTC.
$activity_date_time = new \DateTime($entity
->get('activity_date_time')->value, new \DateTimeZone('UTC'));
$new_end_date = new \DateTime($this
->get($delta)->value, new \DateTimeZone('UTC'));
$diff = $new_end_date
->getTimestamp() - $activity_date_time
->getTimestamp();
$minutes = $diff / 60;
$entity
->get('duration')
->setValue($minutes);
parent::onChange($delta);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ActivityEndDateFieldItemList:: |
protected | function |
Computes the values for an item list. Overrides ComputedItemListTrait:: |
|
ActivityEndDateFieldItemList:: |
public | function |
Recalculate the activities duration if the end date has been changed. Overrides ItemList:: |
|
ComputedItemListTrait:: |
protected | property | Whether the values have already been computed or not. | |
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
protected | function | Ensures that values are only computed once. | |
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | ||
ComputedItemListTrait:: |
public | function | 1 | |
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 | |
FieldItemList:: |
protected | property | The langcode of the field values held in the object. | |
FieldItemList:: |
protected | property |
Numerically indexed array of field items. Overrides ItemList:: |
1 |
FieldItemList:: |
public | function |
Checks data value access. Overrides AccessibleInterface:: |
1 |
FieldItemList:: |
protected | function |
Helper for creating a list item object. Overrides ItemList:: |
|
FieldItemList:: |
public | function |
Contains the default access logic of this field. Overrides FieldItemListInterface:: |
3 |
FieldItemList:: |
public | function |
Returns a form for the default value input. Overrides FieldItemListInterface:: |
2 |
FieldItemList:: |
public | function |
Processes the submitted default value. Overrides FieldItemListInterface:: |
2 |
FieldItemList:: |
public | function |
Validates the submitted default value. Overrides FieldItemListInterface:: |
1 |
FieldItemList:: |
protected | function | Returns the widget object used in default value form. | |
FieldItemList:: |
protected | function | Calls a method on each FieldItem. | |
FieldItemList:: |
public | function |
Defines custom delete behavior for field values. Overrides FieldItemListInterface:: |
2 |
FieldItemList:: |
public | function |
Defines custom revision delete behavior for field values. Overrides FieldItemListInterface:: |
1 |
FieldItemList:: |
public | function |
Determines equality to another object implementing FieldItemListInterface. Overrides FieldItemListInterface:: |
2 |
FieldItemList:: |
public | function |
Filters out empty field items and re-numbers the item deltas. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Populates a specified number of field items with valid sample data. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Gets a list of validation constraints. Overrides TypedData:: |
1 |
FieldItemList:: |
public | function |
Gets the entity that field belongs to. Overrides FieldItemListInterface:: |
1 |
FieldItemList:: |
public | function |
Gets the field definition. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Gets the langcode of the field values held in the object. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Returns the value of a given field setting. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Returns the array of field settings. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Determines whether the field has relevant changes. Overrides FieldItemListInterface:: |
1 |
FieldItemList:: |
public | function |
Defines custom post-save behavior for field values. Overrides FieldItemListInterface:: |
1 |
FieldItemList:: |
public | function |
Defines custom presave behavior for field values. Overrides FieldItemListInterface:: |
1 |
FieldItemList:: |
public static | function |
Processes the default value before being applied. Overrides FieldItemListInterface:: |
2 |
FieldItemList:: |
public | function |
Sets the langcode of the field values held in the object. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Returns a renderable array for the field items. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Magic method: Gets a property value of to the first field item. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Magic method: Determines whether a property of the first field item is set. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Magic method: Sets a property value of the first field item. Overrides FieldItemListInterface:: |
|
FieldItemList:: |
public | function |
Magic method: Unsets a property of the first field item. Overrides FieldItemListInterface:: |
|
ItemList:: |
public | function |
Filters the items in the list using a custom callback. Overrides ListInterface:: |
|
ItemList:: |
public | function |
Returns the first item in this list. Overrides ListInterface:: |
|
ItemList:: |
public | function |
Gets the definition of a contained item. Overrides ListInterface:: |
|
ItemList:: |
public | function | ||
ItemList:: |
public | function | ||
ItemList:: |
public | function | ||
ItemList:: |
protected | function | Renumbers the items in the list. | |
ItemList:: |
public | function | Magic method: Implements a deep clone. | |
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. | |
TypedData:: |
protected | property | The data definition. | 1 |
TypedData:: |
protected | property | The property name. | |
TypedData:: |
protected | property | The parent typed data object. | |
TypedData:: |
public static | function |
Constructs a TypedData object given its definition and context. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets the data definition. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the name of a property or item. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the parent data structure; i.e. either complex data or a list. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Returns the property path of the data. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the root of the typed data tree. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Sets the context of a property or item via a context aware parent. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Validates the currently set data value. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function | Constructs a TypedData object given its definition and context. | 3 |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |