arch-8.x-1.x-dev/modules/shipping/src/ConfigurableShippingMethodBase.php

modules/shipping/src/ConfigurableShippingMethodBase.php
<?php

namespace Drupal\arch_shipping;

use Drupal\arch\ConfigurableArchPluginInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Form\SubformState;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\Core\Plugin\PluginWithFormsTrait;

/**
 * Base configurable shipping method.
 *
 * @package Drupal\arch_shipping
 */
abstract class ConfigurableShippingMethodBase extends ShippingMethodBase implements ConfigurableArchPluginInterface {

  use PluginWithFormsTrait;

  /**
   * {@inheritdoc}
   */
  public function configFormAlter(array &$form, FormStateInterface $form_state) {
    $plugin_configuration_form = $this->getPluginForm();
    if ($plugin_configuration_form instanceof PluginFormInterface) {
      $form['#tree'] = TRUE;
      $form['#parents'] = [];
      $form['plugin_configuration'] = [];
      $form['plugin_configuration']['#parents'] = ['plugin_configuration'];
      $subform_state = SubformState::createForSubform($form['plugin_configuration'], $form, $form_state);
      $form['plugin_configuration'] = $plugin_configuration_form->buildConfigurationForm($form['plugin_configuration'], $subform_state);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function configFormValidate(array &$form, FormStateInterface $form_state) {
    $plugin_configuration_form = $this->getPluginForm();
    if ($plugin_configuration_form instanceof PluginFormInterface) {
      $subform_state = SubformState::createForSubform($form['plugin_configuration'], $form, $form_state);
      $plugin_configuration_form->validateConfigurationForm($form['plugin_configuration'], $subform_state);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function configFormPreSubmit(array &$form, FormStateInterface $form_state) {}

  /**
   * {@inheritdoc}
   */
  public function configFormPostSubmit(array &$form, FormStateInterface $form_state) {
    $plugin_configuration_form = $this->getPluginForm();
    if ($plugin_configuration_form instanceof PluginFormInterface) {
      $subform_state = SubformState::createForSubform($form['plugin_configuration'], $form, $form_state);
      $plugin_configuration_form->submitConfigurationForm($form['plugin_configuration'], $subform_state);
    }
  }

  /**
   * Get config form instance.
   *
   * @return \Drupal\Core\Plugin\PluginFormInterface
   *   Form instance.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   */
  protected function getConfigForm() {
    return $this->pluginFormFactory->createInstance($this, 'configure');
  }

  /**
   * Get plugin configure form.
   *
   * @return $this|\Drupal\Core\Plugin\PluginFormInterface|null
   *   Form.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   */
  protected function getPluginForm() {
    if ($this instanceof PluginFormInterface) {
      return $this;
    }

    if ($this->hasFormClass('configure')) {
      return $this->getConfigForm();
    }

    return NULL;
  }

}

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

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