ConfigTranslationDeleteForm.php 4.32 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
<?php

/**
 * @file
 * Contains \Drupal\config_translation\Form\ConfigTranslationDeleteForm.
 */

namespace Drupal\config_translation\Form;

use Drupal\config_translation\ConfigMapperManagerInterface;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\ConfirmFormBase;
14
use Drupal\Core\Form\FormStateInterface;
15
use Drupal\Core\Url;
16
use Drupal\language\ConfigurableLanguageManagerInterface;
17 18 19 20 21 22 23 24 25 26
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

/**
 * Builds a form to delete configuration translation.
 */
class ConfigTranslationDeleteForm extends ConfirmFormBase {

  /**
27
   * The language manager.
28
   *
29
   * @var \Drupal\language\ConfigurableLanguageManagerInterface
30
   */
31
  protected $languageManager;
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

  /**
   * The configuration mapper manager.
   *
   * @var \Drupal\config_translation\ConfigMapperManagerInterface
   */
  protected $configMapperManager;

  /**
   * The module handler.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface
   */
  protected $moduleHandler;

  /**
   * The configuration translation to be deleted.
   *
   * @var \Drupal\config_translation\ConfigMapperInterface
   */
  protected $mapper;

  /**
   * The language of configuration translation.
   *
57
   * @var \Drupal\Core\Language\LanguageInterface
58 59 60 61 62 63
   */
  protected $language;

  /**
   * Constructs a ConfigTranslationDeleteForm.
   *
64 65
   * @param \Drupal\language\ConfigurableLanguageManagerInterface $language_manager
   *   The language override configuration storage.
66 67 68 69 70
   * @param \Drupal\config_translation\ConfigMapperManagerInterface $config_mapper_manager
   *   The configuration mapper manager.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
   *   The module handler.
   */
71 72
  public function __construct(ConfigurableLanguageManagerInterface $language_manager, ConfigMapperManagerInterface $config_mapper_manager, ModuleHandlerInterface $module_handler) {
    $this->languageManager = $language_manager;
73 74 75 76 77 78 79 80 81
    $this->configMapperManager = $config_mapper_manager;
    $this->moduleHandler = $module_handler;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
82
      $container->get('language_manager'),
83
      $container->get('plugin.manager.config_translation.mapper'),
84
      $container->get('module_handler')
85 86 87 88 89 90 91
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getQuestion() {
92
    return $this->t('Are you sure you want to delete the @language translation of %label?', array('%label' => $this->mapper->getTitle(), '@language' => $this->language->getName()));
93 94 95 96 97 98 99 100 101 102 103 104
  }

  /**
   * {@inheritdoc}
   */
  public function getConfirmText() {
    return $this->t('Delete');
  }

  /**
   * {@inheritdoc}
   */
105
  public function getCancelUrl() {
106
    return new Url($this->mapper->getOverviewRouteName(), $this->mapper->getOverviewRouteParameters());
107 108 109 110 111 112 113 114 115 116 117 118
  }

  /**
   * {@inheritdoc}
   */
  public function getFormID() {
    return 'config_translation_delete_form';
  }

  /**
   * {@inheritdoc}
   */
119
  public function buildForm(array $form, FormStateInterface $form_state, Request $request = NULL, $plugin_id = NULL, $langcode = NULL) {
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
    /** @var \Drupal\config_translation\ConfigMapperInterface $mapper */
    $mapper = $this->configMapperManager->createInstance($plugin_id);
    $mapper->populateFromRequest($request);

    $language = language_load($langcode);
    if (!$language) {
      throw new NotFoundHttpException();
    }

    $this->mapper = $mapper;
    $this->language = $language;
    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
137
  public function submitForm(array &$form, FormStateInterface $form_state) {
138
    foreach ($this->mapper->getConfigNames() as $name) {
139
      $this->languageManager->getLanguageConfigOverride($this->language->getId(), $name)->delete();
140 141 142 143 144
    }

    // Flush all persistent caches.
    $this->moduleHandler->invokeAll('cache_flush');
    foreach (Cache::getBins() as $service_id => $cache_backend) {
145
      $cache_backend->deleteAll();
146 147
    }

148
    drupal_set_message($this->t('@language translation of %label was deleted', array('%label' => $this->mapper->getTitle(), '@language' => $this->language->getName())));
149

150
    $form_state->setRedirectUrl($this->getCancelUrl());
151 152 153
  }

}