public ConfigTranslationController::itemPage(Request $request, RouteMatchInterface $route_match, $plugin_id)
Language translations overview page for a configuration name.
Parameters
\Symfony\Component\HttpFoundation\Request $request: Page request object.
\Drupal\Core\Routing\RouteMatchInterface $route_match: The route match.
string $plugin_id: The plugin ID of the mapper.
Return value
array Page render array.
File
- core/modules/config_translation/src/Controller/ConfigTranslationController.php, line 132
Class
- ConfigTranslationController
- Provides page callbacks for the configuration translation interface.
Namespace
Drupal\config_translation\Controller
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | 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' ); } try { $original_langcode = $mapper ->getLangcode(); $operations_access = TRUE; } catch (ConfigMapperLanguageException $exception ) { $items = []; foreach ( $mapper ->getConfigNames() as $config_name ) { $langcode = $mapper ->getLangcodeFromConfig( $config_name ); $items [] = $this ->t( '@name: @langcode' , [ '@name' => $config_name , '@langcode' => $langcode , ]); } $message = [ 'message' => [ '#markup' => $this ->t( 'The configuration objects have different language codes so they cannot be translated:' )], 'items' => [ '#theme' => 'item_list' , '#items' => $items , ], ]; drupal_set_message( $this ->renderer->renderPlain( $message ), 'warning' ); $original_langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED; $operations_access = FALSE; } 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 , // Even if the mapper contains multiple language codes, the source // configuration can still be edited. '#access' => ( $langcode == $original_langcode ) || $operations_access , ); } return $page ; } |
Please login to continue.