arch-8.x-1.x-dev/modules/checkout/src/Element/CheckoutAddress.php

modules/checkout/src/Element/CheckoutAddress.php
<?php

namespace Drupal\arch_checkout\Element;

use Drupal\address\Element\Address;
use Drupal\Core\Form\FormStateInterface;

/**
 * Provides an address form element for checkout form.
 *
 * @FormElement("checkout_address")
 */
class CheckoutAddress extends Address {

  /**
   * {@inheritdoc}
   */
  public static function processAddress(array &$element, FormStateInterface $form_state, array &$complete_form) {
    $element = parent::processAddress($element, $form_state, $complete_form);

    if (!empty($element['#ajax'])) {
      $fields = ['country_code'];
      if (!empty($element['#ajax']['fields'])) {
        $fields = array_unique(array_merge($fields, $element['#ajax']['fields']));
        unset($element['#ajax']['fields']);
      }
      foreach ($element['#value'] as $field_name => $value) {
        if (empty($element[$field_name])) {
          continue;
        }

        if (
          !empty($fields)
          && !in_array($field_name, $fields)
          && $field_name != 'country_code'
        ) {
          continue;
        }

        $element[$field_name]['#ajax'] = $element['#ajax'];
      }
    }
    else {
      $element['country_code']['#ajax']['wrapper'] = $complete_form['#wrapper_id'];
    }
    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public static function clearValues(array $element, FormStateInterface $form_state) {
    $triggering_element = $form_state->getTriggeringElement();
    if (!$triggering_element) {
      return $element;
    }

    if (!in_array($element['#name'], $triggering_element['#parents'])) {
      return $element;
    }

    return parent::clearValues($element, $form_state);
  }

}

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

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