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; | |
| } | |
| } |