contacts_events-8.x-1.x-dev/src/Form/BookingAdminAdditionalChargesFormAlter.php

src/Form/BookingAdminAdditionalChargesFormAlter.php
<?php

namespace Drupal\contacts_events\Form;

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;

/**
 * Form alter handler for the booking admin additional charges form.
 */
class BookingAdminAdditionalChargesFormAlter {

  /**
   * Form alter for the booking admin additional charges form.
   *
   * @param array $form
   *   The form array.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The form state.
   * @param string $form_id
   *   The form ID.
   */
  public function alter(array &$form, FormStateInterface $form_state, string $form_id) : void {
    // Disable the outer form actions - the tickets are auto saved and there
    // should be nothing else on this page, otherwise it gets confusing.
    $form['actions']['#access'] = FALSE;

    // Grab the widget form so we don't have to keep using the full path.
    $widget = &$form['order_items']['widget'];

    // Remove the type to drop the fieldset.
    unset($widget['#type']);

    // Move the actions to the top of the page.
    if (isset($widget['actions'])) {
      $widget['actions']['#weight'] = -99;

      // Convert into an actions, removing the inline container class.
      $widget['actions']['#type'] = 'actions';
      unset($widget['actions']['#attributes']);

      // Set the primary class on the add button.
      if (isset($widget['actions']['ief_add'])) {
        $widget['actions']['ief_add']['#attributes']['class'][] = 'button';
        $widget['actions']['ief_add']['#attributes']['class'][] = 'button--primary';
      }
    }

    // Add the process callback to the general IEF.
    if (isset($widget['form']['inline_entity_form'])) {
      // phpcs:ignore Drupal.Arrays.Array.LongLineDeclaration
      $widget['form']['inline_entity_form']['#process'][] = [$this, 'processIefForm'];
    }

    // Modify the entity rows.
    if (isset($widget['entities'])) {
      foreach (Element::children($widget['entities']) as $key) {
        $row = &$widget['entities'][$key];

        // Demote the cancel button to a 'danger' button.
        if (isset($row['actions']['cancel'])) {
          $row['actions']['cancel']['#attributes']['class'][] = 'button';
          $row['actions']['cancel']['#attributes']['class'][] = 'button--danger';
        }

        // Add the process callback to the entity IEF.
        if (isset($row['form']['inline_entity_form'])) {
          // phpcs:ignore Drupal.Arrays.Array.LongLineDeclaration
          $row['form']['inline_entity_form']['#process'][] = [$this, 'processIefForm'];
        }
      }
    }
  }

  /**
   * Process callback for the IEF ticket form.
   *
   * @param array $element
   *   The EIF ticket form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The form state.
   *
   * @return array
   *   The element array.
   */
  public function processIefForm(array $element, FormStateInterface $form_state) : array {
    // Make the 'save' action for the operation the primary.
    if (isset($element['actions']["ief_{$element['#op']}_save"])) {
      $element['actions']["ief_{$element['#op']}_save"]['#attributes']['class'][] = 'button';
      $element['actions']["ief_{$element['#op']}_save"]['#attributes']['class'][] = 'button--primary';
    }

    // Remove the inner container and fieldset.
    unset($element['purchased_entity']['#type']);
    unset($element['purchased_entity']['widget'][0]['#type']);

    return $element;
  }

}

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

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