Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 80 |
ConfigTranslationController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
90 | |
0.00% |
0 / 80 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
itemPage | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 64 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\config_translation\Controller\ConfigTranslationController. | |
*/ | |
namespace Drupal\config_translation\Controller; | |
use Drupal\config_translation\ConfigMapperManagerInterface; | |
use Drupal\Core\Access\AccessManagerInterface; | |
use Drupal\Core\Controller\ControllerBase; | |
use Drupal\Core\Language\Language; | |
use Drupal\Core\Language\LanguageManagerInterface; | |
use Drupal\Core\PathProcessor\InboundPathProcessorInterface; | |
use Drupal\Core\Routing\RouteMatch; | |
use Drupal\Core\Routing\RouteMatchInterface; | |
use Drupal\Core\Session\AccountInterface; | |
use Drupal\Core\Url; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\Routing\Matcher\RequestMatcherInterface; | |
/** | |
* Provides page callbacks for the configuration translation interface. | |
*/ | |
class ConfigTranslationController extends ControllerBase { | |
/** | |
* The configuration mapper manager. | |
* | |
* @var \Drupal\config_translation\ConfigMapperManagerInterface | |
*/ | |
protected $configMapperManager; | |
/** | |
* The menu link access service. | |
* | |
* @var \Drupal\Core\Access\AccessManagerInterface | |
*/ | |
protected $accessManager; | |
/** | |
* The dynamic router service. | |
* | |
* @var \Symfony\Component\Routing\Matcher\RequestMatcherInterface | |
*/ | |
protected $router; | |
/** | |
* The path processor service. | |
* | |
* @var \Drupal\Core\PathProcessor\InboundPathProcessorInterface | |
*/ | |
protected $pathProcessor; | |
/** | |
* The current user. | |
* | |
* @var \Drupal\Core\Session\AccountInterface | |
*/ | |
protected $account; | |
/** | |
* The language manager. | |
* | |
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
*/ | |
protected $languageManager; | |
/** | |
* Constructs a ConfigTranslationController. | |
* | |
* @param \Drupal\config_translation\ConfigMapperManagerInterface $config_mapper_manager | |
* The configuration mapper manager. | |
* @param \Drupal\Core\Access\AccessManagerInterface $access_manager | |
* The menu link access service. | |
* @param \Symfony\Component\Routing\Matcher\RequestMatcherInterface $router | |
* The dynamic router service. | |
* @param \Drupal\Core\PathProcessor\InboundPathProcessorInterface $path_processor | |
* The inbound path processor. | |
* @param \Drupal\Core\Session\AccountInterface $account | |
* The current user. | |
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
* The language manager. | |
*/ | |
public function __construct(ConfigMapperManagerInterface $config_mapper_manager, AccessManagerInterface $access_manager, RequestMatcherInterface $router, InboundPathProcessorInterface $path_processor, AccountInterface $account, LanguageManagerInterface $language_manager) { | |
$this->configMapperManager = $config_mapper_manager; | |
$this->accessManager = $access_manager; | |
$this->router = $router; | |
$this->pathProcessor = $path_processor; | |
$this->account = $account; | |
$this->languageManager = $language_manager; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container) { | |
return new static( | |
$container->get('plugin.manager.config_translation.mapper'), | |
$container->get('access_manager'), | |
$container->get('router'), | |
$container->get('path_processor_manager'), | |
$container->get('current_user'), | |
$container->get('language_manager') | |
); | |
} | |
/** | |
* Language translations overview page for a configuration name. | |
* | |
* @param \Symfony\Component\HttpFoundation\Request $request | |
* Page request object. | |
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match | |
* The route match. | |
* @param string $plugin_id | |
* The plugin ID of the mapper. | |
* | |
* @return array | |
* Page render array. | |
*/ | |
public function itemPage(Request $request, RouteMatchInterface $route_match, $plugin_id) { | |
/** @var \Drupal\config_translation\ConfigMapperInterface $mapper */ | |
$mapper = $this->configMapperManager->createInstance($plugin_id); | |
$mapper->populateFromRouteMatch($route_match); | |
$page = array(); | |
$page['#title'] = $this->t('Translations for %label', array('%label' => $mapper->getTitle())); | |
$languages = $this->languageManager->getLanguages(); | |
if (count($languages) == 1) { | |
drupal_set_message($this->t('In order to translate configuration, the website must have at least two <a href=":url">languages</a>.', array(':url' => $this->url('entity.configurable_language.collection'))), 'warning'); | |
} | |
$original_langcode = $mapper->getLangcode(); | |
if (!isset($languages[$original_langcode])) { | |
// If the language is not configured on the site, create a dummy language | |
// object for this listing only to ensure the user gets useful info. | |
$language_name = $this->languageManager->getLanguageName($original_langcode); | |
$languages[$original_langcode] = new Language(array('id' => $original_langcode, 'name' => $language_name)); | |
} | |
// We create a fake request object to pass into | |
// ConfigMapperInterface::populateFromRouteMatch() for the different languages. | |
// Creating a separate request for each language and route is neither easily | |
// possible nor performant. | |
$fake_request = $request->duplicate(); | |
$page['languages'] = array( | |
'#type' => 'table', | |
'#header' => array($this->t('Language'), $this->t('Operations')), | |
); | |
foreach ($languages as $language) { | |
$langcode = $language->getId(); | |
// This is needed because | |
// ConfigMapperInterface::getAddRouteParameters(), for example, | |
// needs to return the correct language code for each table row. | |
$fake_route_match = RouteMatch::createFromRequest($fake_request); | |
$mapper->populateFromRouteMatch($fake_route_match); | |
$mapper->setLangcode($langcode); | |
// Prepare the language name and the operations depending on whether this | |
// is the original language or not. | |
if ($langcode == $original_langcode) { | |
$language_name = '<strong>' . $this->t('@language (original)', array('@language' => $language->getName())) . '</strong>'; | |
// Check access for the path/route for editing, so we can decide to | |
// include a link to edit or not. | |
$edit_access = $this->accessManager->checkNamedRoute($mapper->getBaseRouteName(), $route_match->getRawParameters()->all(), $this->account); | |
// Build list of operations. | |
$operations = array(); | |
if ($edit_access) { | |
$operations['edit'] = array( | |
'title' => $this->t('Edit'), | |
'url' => Url::fromRoute($mapper->getBaseRouteName(), $mapper->getBaseRouteParameters(), ['query' => ['destination' => $mapper->getOverviewPath()]]), | |
); | |
} | |
} | |
else { | |
$language_name = $language->getName(); | |
$operations = array(); | |
// If no translation exists for this language, link to add one. | |
if (!$mapper->hasTranslation($language)) { | |
$operations['add'] = array( | |
'title' => $this->t('Add'), | |
'url' => Url::fromRoute($mapper->getAddRouteName(), $mapper->getAddRouteParameters()), | |
); | |
} | |
else { | |
// Otherwise, link to edit the existing translation. | |
$operations['edit'] = array( | |
'title' => $this->t('Edit'), | |
'url' => Url::fromRoute($mapper->getEditRouteName(), $mapper->getEditRouteParameters()), | |
); | |
$operations['delete'] = array( | |
'title' => $this->t('Delete'), | |
'url' => Url::fromRoute($mapper->getDeleteRouteName(), $mapper->getDeleteRouteParameters()), | |
); | |
} | |
} | |
$page['languages'][$langcode]['language'] = array( | |
'#markup' => $language_name, | |
); | |
$page['languages'][$langcode]['operations'] = array( | |
'#type' => 'operations', | |
'#links' => $operations, | |
); | |
} | |
return $page; | |
} | |
} |