geysir-8.x-1.2/src/Form/GeysirModalParagraphAddSelectTypeForm.php

src/Form/GeysirModalParagraphAddSelectTypeForm.php
<?php

namespace Drupal\geysir\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;

/**
 * Functionality to select a paragraph type.
 */
class GeysirModalParagraphAddSelectTypeForm extends FormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'geysir_modal_add_select_type_form';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['#prefix'] = '<div id="geysir-modal-form">';
    $form['#suffix'] = '</div>';

    $routeParams = $form_state->getBuildInfo()['args'][0];
    $bundles = $form_state->getBuildInfo()['args'][1];

    $parent_entity_type = $routeParams['parent_entity_type'];
    $parent_entity_bundle = $routeParams['parent_entity_bundle'];
    $form_mode = 'default';
    $field = $routeParams['field'];

    $parent_field_settings = \Drupal::entityTypeManager()
      ->getStorage('entity_form_display')
      ->load($parent_entity_type . '.' . $parent_entity_bundle . '.' . $form_mode)
      ->getComponent($field);

    $form['actions'] = [
      '#type' => 'actions',
    ];

    $bundles = $this->getAllowedBundles($bundles);
    $paragraphs_type_storage = \Drupal::entityTypeManager()->getStorage('paragraphs_type');

    $default_icon = \Drupal::service('extension.list.module')->getPath('geysir') . '/images/geysir-puzzle.svg';

    foreach ($bundles as $bundle => $label) {
      $icon_url = $default_icon;
      if ($paragraphs_type_storage->load($bundle)->getIconUrl()) {
        $icon_url = $paragraphs_type_storage->load($bundle)->getIconUrl();
      }
      $routeParams['bundle'] = $bundle;
      $form['description'][$bundle] = [
        '#type' => 'image_button',
        '#prefix' => '<div class="geysir-add-type">',
        '#suffix' => '<span>' . $label . '</span></div>',
        '#src' => $icon_url,
        '#value' => $label,
        '#ajax' => [
          'url' => Url::fromRoute(isset($routeParams['paragraph'])? 'geysir.modal.add_form': 'geysir.modal.add_form_first', $routeParams),
          'wrapper' => 'geysir-modal-form',
        ],
      ];
    }

    return $form;
  }

  /**
   * Returns a list of allowed Paragraph bundles to add.
   *
   * @param array $allowed_bundles
   *   An array with Paragraph bundles which are allowed to add.
   *
   * @return array
   *   Array with allowed Paragraph bundles.
   */
  protected function getAllowedBundles($allowed_bundles) {
    $bundles = \Drupal::service('entity_type.bundle.info')->getBundleInfo('paragraph');

    if (is_array($allowed_bundles) && count($allowed_bundles)) {
      // Only keep allowed bundles.
      $bundles = array_intersect_key(
        array_replace($allowed_bundles, $bundles),
        $allowed_bundles
      );
    }

    // Enrich bundles with their label.
    foreach ($bundles as $bundle => $props) {
      $label = empty($props['label']) ? ucfirst($bundle) : $props['label'];
      $bundles[$bundle] = $label;
    }

    return $bundles;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    return [];
  }

}

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

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