bim_gdpr-1.0.0-rc3/src/Form/TranslateListForm.php

src/Form/TranslateListForm.php
<?php

namespace Drupal\bim_gdpr\Form;

use Drupal\bim_gdpr\Tools\DragTable;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Class TranslateListForm.
 *
 * Translate list.
 *
 * @package Drupal\bim_gdpr\Form
 */
class TranslateListForm extends FormBase {

  /**
   * Renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;

  /**
   * Entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected EntityTypeManagerInterface $entityTypeManager;

  /**
   * Language Manager.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface
   */
  protected $languageManager;

  /**
   * BimGdrpOverview constructor.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config
   *   The config factory.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
   *   The entity type manager.
   * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager
   *   The language manager.
   * @param \Drupal\Core\Render\RendererInterface $renderer
   *   The renderer.
   * @param \Drupal\Core\Routing\RouteMatchInterface $routeMatch
   *   The route match.
   * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
   *   The request stack.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function __construct(ConfigFactoryInterface $config, EntityTypeManagerInterface $entityTypeManager, LanguageManagerInterface $languageManager, RendererInterface $renderer, RouteMatchInterface $routeMatch, RequestStack $requestStack) {
    $this->configFactory = $config;
    $this->entityTypeManager = $entityTypeManager;
    $this->languageManager = $languageManager;
    $this->renderer = $renderer;

    // Init entity.
    $parameters = $routeMatch
      ->getRouteObject()
      ->getOptions()['parameters'];
    $entityTypeId = $parameters['config_type'];
    $entityId = $requestStack->getCurrentRequest()
      ->get($parameters['arg_name']);

    $this->entity = $this->entityTypeManager->getStorage($entityTypeId)
      ->load($entityId);
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('config.factory'),
      $container->get('entity_type.manager'),
      $container->get('language_manager'),
      $container->get('renderer'),
      $container->get('current_route_match'),
      $container->get('request_stack')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'bim_gdpr_service.translate_list';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $data = $this->getColumnData();

    // Init table.
    $table = new DragTable($this->renderer, FALSE, FALSE);
    $table->addHeader(array_column($data, 'header'));

    foreach ($this->languageManager->getLanguages() as $language) {
      $values = array_map(function ($callbackData) use ($language) {
        return call_user_func($callbackData['value_callback'], $language);
      }, $data);

      $table->addRow($language->getId(), $values, $language->getName());
    }

    return [
      'table' => $table->getTable(),
    ];
  }

  /**
   * Return the list of data.
   *
   * @return array
   *   Return the list of data.
   */
  protected function getColumnData(): array {
    return [
      'label'      => [
        'header'         => $this->t('Label'),
        'value_callback' => function (LanguageInterface $entity) {
          return [
            '#markup' => $entity->getName(),
          ];
        },
      ],
      'operations' => [
        'header'         => $this->t('Operations'),
        'value_callback' => function (LanguageInterface $language) {
          $links = [];

          if ($this->entity->hasLinkTemplate('edit-form')) {
            $url = $this->entity->toUrl('edit-form');
            $url->setOption('language', $language);

            $links['action'] = [
              "title" => $this->entity->hasTranslation($language->getId()) ? $this->t('Edit') : $this->t('Add'),
              "url"   => $url,
            ];
          }

          return [
            '#type'  => 'operations',
            '#links' => $links,
          ];
        },
      ],
    ];
  }

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

}

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

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