Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 26 |
DateTimeComputed | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
132 | |
0.00% |
0 / 26 |
__construct | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
getValue | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 16 |
|||
setValue | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\datetime\DateTimeComputed. | |
*/ | |
namespace Drupal\datetime; | |
use Drupal\Core\Datetime\DrupalDateTime; | |
use Drupal\Core\TypedData\DataDefinitionInterface; | |
use Drupal\Core\TypedData\TypedDataInterface; | |
use Drupal\Core\TypedData\TypedData; | |
/** | |
* A computed property for dates of date time field items. | |
* | |
* Required settings (below the definition's 'settings' key) are: | |
* - date source: The date property containing the to be computed date. | |
*/ | |
class DateTimeComputed extends TypedData { | |
/** | |
* Cached computed date. | |
* | |
* @var \DateTime|null | |
*/ | |
protected $date = NULL; | |
/** | |
* {@inheritdoc} | |
*/ | |
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."); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getValue($langcode = NULL) { | |
if ($this->date !== NULL) { | |
return $this->date; | |
} | |
$item = $this->getParent(); | |
$value = $item->{($this->definition->getSetting('date source'))}; | |
$storage_format = $item->getFieldDefinition()->getSetting('datetime_type') == 'date' ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT; | |
try { | |
$date = DrupalDateTime::createFromFormat($storage_format, $value, DATETIME_STORAGE_TIMEZONE); | |
if ($date instanceof DrupalDateTime && !$date->hasErrors()) { | |
$this->date = $date; | |
} | |
} | |
catch (\Exception $e) { | |
// @todo Handle this. | |
} | |
return $this->date; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setValue($value, $notify = TRUE) { | |
$this->date = $value; | |
// Notify the parent of any changes. | |
if ($notify && isset($this->parent)) { | |
$this->parent->onChange($this->name); | |
} | |
} | |
} |