BillingPeriodItem.php in Commerce Recurring Framework 8
File
src/Plugin/Field/FieldType/BillingPeriodItem.php
View source
<?php
namespace Drupal\commerce_recurring\Plugin\Field\FieldType;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\commerce_recurring\BillingPeriod;
use Drupal\Core\TypedData\DataDefinition;
class BillingPeriodItem extends FieldItemBase {
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$properties['starts'] = DataDefinition::create('timestamp')
->setLabel(t('Start date'))
->setRequired(TRUE);
$properties['ends'] = DataDefinition::create('timestamp')
->setLabel(t('End date'))
->setRequired(TRUE);
return $properties;
}
public static function schema(FieldStorageDefinitionInterface $field_definition) {
return [
'columns' => [
'starts' => [
'type' => 'int',
],
'ends' => [
'type' => 'int',
],
],
'indexes' => [
'range' => [
'starts',
'ends',
],
],
];
}
public static function mainPropertyName() {
return NULL;
}
public function isEmpty() {
return empty($this->starts) || empty($this->ends);
}
public function setValue($values, $notify = TRUE) {
if ($values instanceof BillingPeriod) {
$values = [
'starts' => $values
->getStartDate(),
'ends' => $values
->getEndDate(),
];
}
if (isset($values['starts']) && $values['starts'] instanceof DrupalDateTime) {
$values['starts']
->setTimezone(new \DateTimezone('UTC'));
$values['starts'] = $values['starts']
->format('U');
}
if (isset($values['ends']) && $values['ends'] instanceof DrupalDateTime) {
$values['ends']
->setTimezone(new \DateTimezone('UTC'));
$values['ends'] = $values['ends']
->format('U');
}
parent::setValue($values, $notify);
}
public function toBillingPeriod() {
return new BillingPeriod($this
->get('starts')
->getDateTime(), $this
->get('ends')
->getDateTime());
}
}