DateTimeComputed.php in Drupal 10
File
core/modules/datetime/src/DateTimeComputed.php
View source
<?php
namespace Drupal\datetime;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\TypedData\DataDefinitionInterface;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\Core\TypedData\TypedData;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
class DateTimeComputed extends TypedData {
protected $date = NULL;
public function __construct(DataDefinitionInterface $definition, $name = NULL, TypedDataInterface $parent = NULL) {
parent::__construct($definition, $name, $parent);
if (!$definition
->getSetting('date source')) {
throw new \InvalidArgumentException("The definition's 'date source' key has to specify the name of the date property to be computed.");
}
}
public function getValue() {
if ($this->date !== NULL) {
return $this->date;
}
$item = $this
->getParent();
$value = $item->{$this->definition
->getSetting('date source')};
if ($value === NULL) {
return NULL;
}
$datetime_type = $item
->getFieldDefinition()
->getSetting('datetime_type');
$storage_format = $datetime_type === DateTimeItem::DATETIME_TYPE_DATE ? DateTimeItemInterface::DATE_STORAGE_FORMAT : DateTimeItemInterface::DATETIME_STORAGE_FORMAT;
try {
$date = DrupalDateTime::createFromFormat($storage_format, $value, DateTimeItemInterface::STORAGE_TIMEZONE);
if ($date instanceof DrupalDateTime && !$date
->hasErrors()) {
$this->date = $date;
if ($datetime_type === DateTimeItem::DATETIME_TYPE_DATE) {
$this->date
->setDefaultDateTime();
}
}
} catch (\Exception $e) {
}
return $this->date;
}
public function setValue($value, $notify = TRUE) {
$this->date = $value;
if ($notify && isset($this->parent)) {
$this->parent
->onChange($this->name);
}
}
}