contacts_events-8.x-1.x-dev/modules/accommodation/src/Form/AccommodationForm.php

modules/accommodation/src/Form/AccommodationForm.php
<?php

namespace Drupal\contacts_events_accommodation\Form;

use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Form\FormStateInterface;

/**
 * Form controller for the accommodation entity edit forms.
 */
class AccommodationForm extends ContentEntityForm {

  /**
   * {@inheritdoc}
   */
  protected function prepareEntity() {
    parent::prepareEntity();
    if ($this->entity->isNew()) {
      $this->entity->set('event', $this->getRouteMatch()->getParameter('contacts_event'));
    }
  }

  /**
   * {@inheritdoc}
   */
  public function form(array $form, FormStateInterface $form_state) {
    $form = parent::form($form, $form_state);

    // Min is required if max is set.
    $form['delegates_min']['widget'][0]['value']['#states']['required'] = [
      ':input[name="delegates_max[0][value]"]' => ['filled' => TRUE],
    ];

    // Max is required if min is set.
    $form['delegates_max']['widget'][0]['value']['#states']['required'] = [
      ':input[name="delegates_min[0][value]"]' => ['filled' => TRUE],
    ];

    // Show max if min or max are set.
    $form['delegates_max']['widget'][0]['value']['#states']['visible'] = [
      [':input[name="delegates_min[0][value]"]' => ['filled' => TRUE]],
      [':input[name="delegates_max[0][value]"]' => ['filled' => TRUE]],
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    /** @var \Drupal\contacts_events_accommodation\AccommodationInterface $entity */
    $entity = parent::validateForm($form, $form_state);

    // Check that neither or both delegate numbers are set.
    $min = $entity->getMinDelegates();
    $max = $entity->getMaxDelegates();

    if ($min !== NULL && $max === NULL) {
      $form_state->setError($form['delegates_max']['widget'][0]['value'], $this->t('Maximum delegates is required if a minimum is given.'));
    }

    if ($max !== NULL && $min === NULL) {
      $form_state->setError($form['delegates_min']['widget'][0]['value'], $this->t('Minimum delegates is required if a maximum is given.'));
    }

    return $entity;
  }

  /**
   * {@inheritdoc}
   */
  public function save(array $form, FormStateInterface $form_state) {
    /** @var \Drupal\contacts_events_accommodation\AccommodationInterface $entity */
    $entity = $this->getEntity();
    $result = $entity->save();

    $message_arguments = ['%label' => $entity->label()];
    if ($result == SAVED_NEW) {
      $this->messenger()->addStatus($this->t('New accommodation %label has been created.', $message_arguments));
    }
    else {
      $this->messenger()->addStatus($this->t('The accommodation %label has been updated.', $message_arguments));
    }

    $form_state->setRedirect('entity.c_events_accommodation.collection', [
      'contacts_event' => $entity->get('event')->target_id,
    ]);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc