Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      86.49%  | 
      32 / 37  | 
      CRAP |         | 
      86.27%  | 
      88 / 102  | 
     
| ConfigNamesMapper |         | 
      0.00%  | 
      0 / 1  | 
              | 
      86.49%  | 
      32 / 37  | 
      53.96 |         | 
      86.27%  | 
      88 / 102  | 
     
| __construct |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      10 / 10  | 
     |||
| create |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 8  | 
     |||
| setRouteCollection |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| getTitle |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getBaseRouteName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getBaseRouteParameters |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getBaseRoute |         | 
      0.00%  | 
      0 / 1  | 
      2.15 |         | 
      66.67%  | 
      2 / 3  | 
     |||
| processRoute |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getBasePath |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getOverviewRouteName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getOverviewRouteParameters |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getOverviewRoute |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      7 / 7  | 
     |||
| getOverviewPath |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getAddRouteName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getAddRouteParameters |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      3 / 3  | 
     |||
| getAddRoute |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      7 / 7  | 
     |||
| getEditRouteName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getEditRouteParameters |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getEditRoute |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      7 / 7  | 
     |||
| getDeleteRouteName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getDeleteRouteParameters |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getDeleteRoute |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      7 / 7  | 
     |||
| getConfigNames |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| addConfigName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      2 / 2  | 
     |||
| getWeight |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| populateFromRouteMatch |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      2 / 2  | 
     |||
| getTypeLabel |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getLangcode |         | 
      100.00%  | 
      1 / 1  | 
      3 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| anonymous function |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      2 / 2  | 
     |||
| setLangcode |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| getConfigData |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      4 / 4  | 
     |||
| hasSchema |         | 
      100.00%  | 
      1 / 1  | 
      3 |         | 
      100.00%  | 
      4 / 4  | 
     |||
| hasTranslatable |         | 
      100.00%  | 
      1 / 1  | 
      3 |         | 
      100.00%  | 
      4 / 4  | 
     |||
| hasTranslation |         | 
      100.00%  | 
      1 / 1  | 
      3 |         | 
      100.00%  | 
      4 / 4  | 
     |||
| getTypeName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getOperations |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      2 / 2  | 
     |||
| getContextualLinkGroup |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 1  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\config_translation\ConfigNamesMapper. | |
| */ | |
| namespace Drupal\config_translation; | |
| use Drupal\Core\Config\ConfigFactoryInterface; | |
| use Drupal\Core\Config\TypedConfigManagerInterface; | |
| use Drupal\Core\Language\LanguageInterface; | |
| use Drupal\Core\Language\LanguageManagerInterface; | |
| use Drupal\Core\Plugin\PluginBase; | |
| use Drupal\Core\Routing\RouteMatchInterface; | |
| use Drupal\Core\Routing\RouteProviderInterface; | |
| use Drupal\Core\StringTranslation\TranslationInterface; | |
| use Drupal\Core\Plugin\ContainerFactoryPluginInterface; | |
| use Drupal\Core\Url; | |
| use Drupal\locale\LocaleConfigManager; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| use Symfony\Component\Routing\Route; | |
| use Symfony\Component\Routing\RouteCollection; | |
| /** | |
| * Configuration mapper base implementation. | |
| */ | |
| class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, ContainerFactoryPluginInterface { | |
| /** | |
| * The configuration factory. | |
| * | |
| * @var \Drupal\Core\Config\ConfigFactoryInterface | |
| */ | |
| protected $configFactory; | |
| /** | |
| * The typed config manager. | |
| * | |
| * @var \Drupal\Core\Config\TypedConfigManagerInterface | |
| */ | |
| protected $typedConfigManager; | |
| /** | |
| * The typed configuration manager. | |
| * | |
| * @var \Drupal\locale\LocaleConfigManager | |
| */ | |
| protected $localeConfigManager; | |
| /** | |
| * The mapper plugin discovery service. | |
| * | |
| * @var \Drupal\config_translation\ConfigMapperManagerInterface | |
| */ | |
| protected $configMapperManager; | |
| /** | |
| * The route provider. | |
| * | |
| * @var \Drupal\Core\Routing\RouteProviderInterface | |
| */ | |
| protected $routeProvider; | |
| /** | |
| * The base route object that the mapper is attached to. | |
| * | |
| * @return \Symfony\Component\Routing\Route | |
| */ | |
| protected $baseRoute; | |
| /** | |
| * The available routes. | |
| * | |
| * @var \Symfony\Component\Routing\RouteCollection | |
| */ | |
| protected $routeCollection; | |
| /** | |
| * The language code of the language this mapper, if any. | |
| * | |
| * @var string|null | |
| */ | |
| protected $langcode = NULL; | |
| /** | |
| * The language manager. | |
| * | |
| * @var \Drupal\Core\Language\LanguageManagerInterface | |
| */ | |
| protected $languageManager; | |
| /** | |
| * Constructs a ConfigNamesMapper. | |
| * | |
| * @param $plugin_id | |
| * The config mapper plugin ID. | |
| * @param mixed $plugin_definition | |
| * An array of plugin information with the following keys: | |
| * - title: The title of the mapper, used for generating page titles. | |
| * - base_route_name: The route name of the base route this mapper is | |
| * attached to. | |
| * - names: (optional) An array of configuration names. | |
| * - weight: (optional) The weight of this mapper, used in mapper listings. | |
| * Defaults to 20. | |
| * - list_controller: (optional) Class name for list controller used to | |
| * generate lists of this type of configuration. | |
| * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
| * The configuration factory. | |
| * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config | |
| * The typed configuration manager. | |
| * @param \Drupal\locale\LocaleConfigManager $locale_config_manager | |
| * The locale configuration manager. | |
| * @param \Drupal\config_translation\ConfigMapperManagerInterface $config_mapper_manager | |
| * The mapper plugin discovery service. | |
| * @param \Drupal\Core\Routing\RouteProviderInterface | |
| * The route provider. | |
| * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation | |
| * The string translation manager. | |
| * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
| * The language manager. | |
| * | |
| * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException | |
| * Throws an exception if the route specified by the 'base_route_name' in | |
| * the plugin definition could not be found by the route provider. | |
| */ | |
| public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $string_translation, LanguageManagerInterface $language_manager) { | |
| $this->pluginId = $plugin_id; | |
| $this->pluginDefinition = $plugin_definition; | |
| $this->routeProvider = $route_provider; | |
| $this->configFactory = $config_factory; | |
| $this->typedConfigManager = $typed_config; | |
| $this->localeConfigManager = $locale_config_manager; | |
| $this->configMapperManager = $config_mapper_manager; | |
| $this->stringTranslation = $string_translation; | |
| $this->languageManager = $language_manager; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { | |
| // Note that we ignore the plugin $configuration because mappers have | |
| // nothing to configure in themselves. | |
| return new static ( | |
| $plugin_id, | |
| $plugin_definition, | |
| $container->get('config.factory'), | |
| $container->get('config.typed'), | |
| $container->get('locale.config_manager'), | |
| $container->get('plugin.manager.config_translation.mapper'), | |
| $container->get('router.route_provider'), | |
| $container->get('string_translation'), | |
| $container->get('language_manager') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setRouteCollection(RouteCollection $collection) { | |
| $this->routeCollection = $collection; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTitle() { | |
| // A title from a *.config_translation.yml. Should be translated for | |
| // display in the current page language. | |
| return $this->t($this->pluginDefinition['title']); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBaseRouteName() { | |
| return $this->pluginDefinition['base_route_name']; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBaseRouteParameters() { | |
| return array(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBaseRoute() { | |
| if ($this->routeCollection) { | |
| return $this->routeCollection->get($this->getBaseRouteName()); | |
| } | |
| else { | |
| return $this->routeProvider->getRouteByName($this->getBaseRouteName()); | |
| } | |
| } | |
| /** | |
| * Allows to process all config translation routes. | |
| * | |
| * @param \Symfony\Component\Routing\Route $route | |
| * The route object to process. | |
| */ | |
| protected function processRoute(Route $route) { | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBasePath() { | |
| return Url::fromRoute($this->getBaseRouteName(), $this->getBaseRouteParameters())->getInternalPath(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOverviewRouteName() { | |
| return 'config_translation.item.overview.' . $this->getBaseRouteName(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOverviewRouteParameters() { | |
| return $this->getBaseRouteParameters(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOverviewRoute() { | |
| $route = new Route( | |
| $this->getBaseRoute()->getPath() . '/translate', | |
| array( | |
| '_controller' => '\Drupal\config_translation\Controller\ConfigTranslationController::itemPage', | |
| 'plugin_id' => $this->getPluginId(), | |
| ), | |
| array('_config_translation_overview_access' => 'TRUE') | |
| ); | |
| $this->processRoute($route); | |
| return $route; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOverviewPath() { | |
| return Url::fromRoute($this->getOverviewRouteName(), $this->getOverviewRouteParameters())->getInternalPath(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAddRouteName() { | |
| return 'config_translation.item.add.' . $this->getBaseRouteName(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAddRouteParameters() { | |
| // If sub-classes provide route parameters in getBaseRouteParameters(), they | |
| // probably also want to provide those for the add, edit, and delete forms. | |
| $parameters = $this->getBaseRouteParameters(); | |
| $parameters['langcode'] = $this->langcode; | |
| return $parameters; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAddRoute() { | |
| $route = new Route( | |
| $this->getBaseRoute()->getPath() . '/translate/{langcode}/add', | |
| array( | |
| '_form' => '\Drupal\config_translation\Form\ConfigTranslationAddForm', | |
| 'plugin_id' => $this->getPluginId(), | |
| ), | |
| array('_config_translation_form_access' => 'TRUE') | |
| ); | |
| $this->processRoute($route); | |
| return $route; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getEditRouteName() { | |
| return 'config_translation.item.edit.' . $this->getBaseRouteName(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getEditRouteParameters() { | |
| return $this->getAddRouteParameters(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getEditRoute() { | |
| $route = new Route( | |
| $this->getBaseRoute()->getPath() . '/translate/{langcode}/edit', | |
| array( | |
| '_form' => '\Drupal\config_translation\Form\ConfigTranslationEditForm', | |
| 'plugin_id' => $this->getPluginId(), | |
| ), | |
| array('_config_translation_form_access' => 'TRUE') | |
| ); | |
| $this->processRoute($route); | |
| return $route; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getDeleteRouteName() { | |
| return 'config_translation.item.delete.' . $this->getBaseRouteName(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getDeleteRouteParameters() { | |
| return $this->getAddRouteParameters(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getDeleteRoute() { | |
| $route = new Route( | |
| $this->getBaseRoute()->getPath() . '/translate/{langcode}/delete', | |
| array( | |
| '_form' => '\Drupal\config_translation\Form\ConfigTranslationDeleteForm', | |
| 'plugin_id' => $this->getPluginId(), | |
| ), | |
| array('_config_translation_form_access' => 'TRUE') | |
| ); | |
| $this->processRoute($route); | |
| return $route; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getConfigNames() { | |
| return $this->pluginDefinition['names']; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function addConfigName($name) { | |
| $this->pluginDefinition['names'][] = $name; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getWeight() { | |
| return $this->pluginDefinition['weight']; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function populateFromRouteMatch(RouteMatchInterface $route_match) { | |
| $this->langcode = $route_match->getParameter('langcode'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTypeLabel() { | |
| return $this->getTitle(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getLangcode() { | |
| $config_factory = $this->configFactory; | |
| $langcodes = array_map(function($name) use ($config_factory) { | |
| // Default to English if no language code was provided in the file. | |
| // Although it is a best practice to include a language code, if the | |
| // developer did not think about a multilingual use-case, we fall back | |
| // on assuming the file is English. | |
| return $config_factory->get($name)->get('langcode') ?: 'en'; | |
| }, $this->getConfigNames()); | |
| if (count(array_unique($langcodes)) > 1) { | |
| throw new \RuntimeException('A config mapper can only contain configuration for a single language.'); | |
| } | |
| return reset($langcodes); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setLangcode($langcode) { | |
| $this->langcode = $langcode; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getConfigData() { | |
| $config_data = array(); | |
| foreach ($this->getConfigNames() as $name) { | |
| $config_data[$name] = $this->configFactory->getEditable($name)->get(); | |
| } | |
| return $config_data; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasSchema() { | |
| foreach ($this->getConfigNames() as $name) { | |
| if (!$this->typedConfigManager->hasConfigSchema($name)) { | |
| return FALSE; | |
| } | |
| } | |
| return TRUE; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasTranslatable() { | |
| foreach ($this->getConfigNames() as $name) { | |
| if ($this->configMapperManager->hasTranslatable($name)) { | |
| return TRUE; | |
| } | |
| } | |
| return FALSE; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasTranslation(LanguageInterface $language) { | |
| foreach ($this->getConfigNames() as $name) { | |
| if ($this->localeConfigManager->hasTranslation($name, $language->getId())) { | |
| return TRUE; | |
| } | |
| } | |
| return FALSE; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTypeName() { | |
| return $this->t('Settings'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOperations() { | |
| return array( | |
| 'translate' => array( | |
| 'title' => $this->t('Translate'), | |
| 'url' => Url::fromRoute($this->getOverviewRouteName(), $this->getOverviewRouteParameters()), | |
| ), | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getContextualLinkGroup() { | |
| return NULL; | |
| } | |
| } |