sitewide_alerts-1.0.0/src/Form/SiteAlertsFilterForm.php

src/Form/SiteAlertsFilterForm.php
<?php

namespace Drupal\sitewide_alerts\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Language\LanguageManager;
use Drupal\sitewide_alerts\SiteAlertService;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Defines a form for filtering site alerts.
 */
class SiteAlertsFilterForm extends FormBase {

  /**
   * The site alert service.
   */
  protected SiteAlertService $siteAlertService;

  /**
   * The language manager.
   */
  protected LanguageManager $languageManager;

  /**
   * The current language code.
   */
  protected string $language;

  /**
   * The constructor.
   *
   * @param \Drupal\sitewide_alerts\SiteAlertService $site_alert_service
   *   The site alert service.
   * @param \Drupal\Core\Language\LanguageManager $language_manager
   *   The language manager.
   */
  public function __construct(
    SiteAlertService $site_alert_service,
    LanguageManager $language_manager
  ) {
    $this->siteAlertService = $site_alert_service;
    $this->languageManager = $language_manager;
    $this->language = $language_manager->getCurrentLanguage()->getId();
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('sitewide_alerts.site_alert_service'),
      $container->get('language_manager')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId(): string {
    return "site_alerts_filter_form";
  }

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

    $form['filter'] = [
      '#type' => 'container',
      '#attributes' => [
        'class' => ['form--inline', 'clearfix'],
      ],
    ];

    $form['filter']['name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Site alert name'),
      '#default_value' => $this->getRequest()->get('name') ?? '',
      '#size' => 30,
    ];

    $form['filter']['status'] = [
      '#type' => 'select',
      '#title' => $this->t('Published status'),
      '#options' => [
        0 => $this->t('Unpublished'),
        1 => $this->t('Published'),
      ],
      '#empty_option' => $this->t('- Any -'),
      '#default_value' => $this->getRequest()->get('status') ?? '',
    ];

    $languages = [];
    foreach ($this->languageManager->getLanguages() as $language) {
      $languages[$language->getId()] = $language->getName();
    }
    $form['filter']['language'] = [
      '#type' => 'select',
      '#title' => $this->t('Language'),
      '#options' => $languages,
      '#empty_option' => $this->t('- Any -'),
      '#default_value' => $this->getRequest()->get('language') ?? '',
    ];

    $form['actions']['wrapper'] = [
      '#type' => 'container',
      '#attributes' => ['class' => ['form-item']],
    ];

    $form['actions']['wrapper']['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Filter'),
    ];

    if ($this->getRequest()->getQueryString()) {
      $form['actions']['wrapper']['reset'] = [
        '#type' => 'submit',
        '#value' => $this->t('Reset'),
        '#submit' => ['::resetForm'],
      ];
    }

    return $form;
  }

  /**
   * Reset form.
   *
   * @param array $form
   *   The form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The form state.
   */
  public function resetForm(array $form, FormStateInterface &$form_state): void {
    $form_state->setRedirect('entity.site_alert.collection');
  }

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

    $name = $form_state->getValue('name') ?? '';
    if (!empty($name)) {
      $query['name'] = $name;
    }

    $language = $form_state->getValue('language') ?? '';
    if (!empty($language)) {
      $query['language'] = $language;
    }

    $status = $form_state->getValue('status') ?? '';
    if ($status != '') {
      $query['status'] = $status;
    }

    $form_state->setRedirect('entity.site_alert.collection', $query);
  }

}

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

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