Skip to content
Snippets Groups Projects
Commit dfa8da60 authored by Kunal Sachdev's avatar Kunal Sachdev
Browse files

apply !2.diff

parent a1aeef48
No related branches found
No related tags found
No related merge requests found
Pipeline #49199 failed
Pipeline: drupal-2794481

#49202

    ...@@ -7,12 +7,12 @@ field.storage_settings.daterange: ...@@ -7,12 +7,12 @@ field.storage_settings.daterange:
    label: 'Date range settings' label: 'Date range settings'
    field.field_settings.daterange: field.field_settings.daterange:
    type: field.field_settings.datetime type: mapping
    label: 'Date range settings' label: 'Date range settings'
    mapping: mapping:
    optional_end_date: optional_values:
    type: boolean type: integer
    label: 'Optional end date' label: 'Optional values'
    field.value.daterange: field.value.daterange:
    type: mapping type: mapping
    ......
    ...@@ -29,7 +29,7 @@ class DateRangeItem extends DateTimeItem { ...@@ -29,7 +29,7 @@ class DateRangeItem extends DateTimeItem {
    */ */
    public static function defaultFieldSettings() { public static function defaultFieldSettings() {
    return [ return [
    'optional_end_date' => FALSE, 'optional_values' => FALSE,
    ] + parent::defaultFieldSettings(); ] + parent::defaultFieldSettings();
    } }
    ...@@ -38,6 +38,16 @@ public static function defaultFieldSettings() { ...@@ -38,6 +38,16 @@ public static function defaultFieldSettings() {
    */ */
    const DATETIME_TYPE_ALLDAY = 'allday'; const DATETIME_TYPE_ALLDAY = 'allday';
    /**
    * Optional values setting, require a bounded datetime range.
    */
    const OPTIONAL_NONE = 0x01;
    /**
    * Optional values setting, do not require an end date.
    */
    const OPTIONAL_END = 0x02;
    /** /**
    * {@inheritdoc} * {@inheritdoc}
    */ */
    ...@@ -89,11 +99,15 @@ public static function schema(FieldStorageDefinitionInterface $field_definition) ...@@ -89,11 +99,15 @@ public static function schema(FieldStorageDefinitionInterface $field_definition)
    */ */
    public function fieldSettingsForm(array $form, FormStateInterface $form_state) { public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
    $element = []; $element = [];
    $element['optional_end_date'] = [ $element['optional_values'] = [
    '#type' => 'checkbox', '#type' => 'radios',
    '#title' => $this->t('Optional end date'), '#title' => $this->t('End date'),
    '#description' => $this->t('Allow end date to be optional opposed to the default behaviour where end date is required when "Required field" is checked.'), '#description' => $this->t('Applies regardless of whether the whole field is required'),
    '#default_value' => $this->getSetting('optional_end_date'), '#default_value' => $this->getSetting('optional_values'),
    '#options' => [
    static::OPTIONAL_NONE => $this->t('Required'),
    static::OPTIONAL_END => $this->t('Optional end date'),
    ],
    ]; ];
    return $element; return $element;
    ...@@ -151,19 +165,29 @@ public function getConstraints() { ...@@ -151,19 +165,29 @@ public function getConstraints() {
    ->getValidationConstraintManager(); ->getValidationConstraintManager();
    $constraints = parent::getConstraints(); $constraints = parent::getConstraints();
    if (!empty($this->getSetting('optional_end_date'))) { if (!$this->getFieldDefinition()->isRequired()) {
    return $constraints; $label = $this->getFieldDefinition()->getLabel();
    } // If the end date triggers constraint validation then test the start date.
    $constraints[] = $constraint_manager
    $label = $this->getFieldDefinition()->getLabel(); ->create('ComplexData', [
    $constraints[] = $constraint_manager 'value' => [
    ->create('ComplexData', [ 'NotNull' => [
    'end_value' => [ 'message' => $this->t('The @title start date is required', ['@title' => $label]),
    'NotNull' => [ ],
    'message' => $this->t('The @title end date is required', ['@title' => $label]),
    ], ],
    ], ]);
    ]); // Testing the end date is only needed if not required and not optional.
    if ($this->getSetting('optional_values') == static::OPTIONAL_NONE) {
    $constraints[] = $constraint_manager
    ->create('ComplexData', [
    'end_value' => [
    'NotNull' => [
    'message' => $this->t('The @title end date is required', ['@title' => $label]),
    ],
    ],
    ]);
    }
    }
    return $constraints; return $constraints;
    } }
    ......
    ...@@ -19,7 +19,7 @@ class DateRangeWidgetBase extends DateTimeWidgetBase { ...@@ -19,7 +19,7 @@ class DateRangeWidgetBase extends DateTimeWidgetBase {
    */ */
    public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
    $element = parent::formElement($items, $delta, $element, $form, $form_state); $element = parent::formElement($items, $delta, $element, $form, $form_state);
    $optional_end_date = $this->getFieldSetting('optional_end_date'); $optional_values = $this->getFieldSetting('optional_values');
    // Wrap all of the select elements with a fieldset. // Wrap all of the select elements with a fieldset.
    $element['#theme_wrappers'][] = 'fieldset'; $element['#theme_wrappers'][] = 'fieldset';
    ...@@ -31,7 +31,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen ...@@ -31,7 +31,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
    '#title' => $this->t('End date'), '#title' => $this->t('End date'),
    ] + $element['value']; ] + $element['value'];
    if ($element['#required'] && $optional_end_date) { if ($element['#required'] && $optional_values == DateRangeItem::OPTIONAL_END) {
    $element['end_value']['#required'] = FALSE; $element['end_value']['#required'] = FALSE;
    $element['#required'] = FALSE; $element['#required'] = FALSE;
    } }
    ......
    ...@@ -110,7 +110,7 @@ public function testOptionalEndDate() { ...@@ -110,7 +110,7 @@ public function testOptionalEndDate() {
    $field_name = $this->fieldStorage->getName(); $field_name = $this->fieldStorage->getName();
    $this->field->setSettings([ $this->field->setSettings([
    'optional_end_date' => FALSE, 'optional_values' => DateRangeItem::OPTIONAL_NONE,
    ]) ])
    ->save(); ->save();
    ...@@ -126,7 +126,7 @@ public function testOptionalEndDate() { ...@@ -126,7 +126,7 @@ public function testOptionalEndDate() {
    $this->assertNotEquals(count($entity->validate()), 0); $this->assertNotEquals(count($entity->validate()), 0);
    // Verify entity with the optional_end_date enabled. // Verify entity with the optional_end_date enabled.
    $this->field->setSetting('optional_end_date', TRUE) $this->field->setSetting('optional_values', DateRangeItem::OPTIONAL_END)
    ->save(); ->save();
    $entity = EntityTest::create([ $entity = EntityTest::create([
    'name' => $this->randomString(), 'name' => $this->randomString(),
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment