public ConfigTranslationFormBase::buildForm(array $form, FormStateInterface $form_state, RouteMatchInterface $route_match = NULL, $plugin_id = NULL, $langcode = NULL)
Implements \Drupal\Core\Form\FormInterface::buildForm().
Builds configuration form with metadata and values from the source language.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
\Drupal\Core\Routing\RouteMatchInterface $route_match: (optional) The route match.
string $plugin_id: (optional) The plugin ID of the mapper.
string $langcode: (optional) The language code of the language the form is adding or editing.
Return value
array The form structure.
Throws
\Symfony\Component\HttpKernel\Exception\NotFoundHttpException Throws an exception if the language code provided as a query parameter in the request does not match an active language.
Overrides FormInterface::buildForm
File
- core/modules/config_translation/src/Form/ConfigTranslationFormBase.php, line 129
Class
- ConfigTranslationFormBase
- Provides a base form for configuration translations.
Namespace
Drupal\config_translation\Form
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 | public function buildForm( array $form , FormStateInterface $form_state , RouteMatchInterface $route_match = NULL, $plugin_id = NULL, $langcode = NULL) { /** @var \Drupal\config_translation\ConfigMapperInterface $mapper */ $mapper = $this ->configMapperManager->createInstance( $plugin_id ); $mapper ->populateFromRouteMatch( $route_match ); $language = $this ->languageManager->getLanguage( $langcode ); if (! $language ) { throw new NotFoundHttpException(); } $this ->mapper = $mapper ; $this ->language = $language ; // ConfigTranslationFormAccess will not grant access if this raises an // exception, so we can call this without a try-catch block here. $langcode = $this ->mapper->getLangcode(); $this ->sourceLanguage = $this ->languageManager->getLanguage( $langcode ); // Get base language configuration to display in the form before setting the // language to use for the form. This avoids repetitively settings and // resetting the language to get original values later. $this ->baseConfigData = $this ->mapper->getConfigData(); // Set the translation target language on the configuration factory. $original_language = $this ->languageManager->getConfigOverrideLanguage(); $this ->languageManager->setConfigOverrideLanguage( $this ->language); // Add some information to the form state for easier form altering. $form_state ->set( 'config_translation_mapper' , $this ->mapper); $form_state ->set( 'config_translation_language' , $this ->language); $form_state ->set( 'config_translation_source_language' , $this ->sourceLanguage); $form [ '#attached' ][ 'library' ][] = 'config_translation/drupal.config_translation.admin' ; // Even though this is a nested form, we do not set #tree to TRUE because // the form value structure is generated by using #parents for each element. // @see \Drupal\config_translation\FormElement\FormElementBase::getElements() $form [ 'config_names' ] = array ( '#type' => 'container' ); foreach ( $this ->mapper->getConfigNames() as $name ) { $form [ 'config_names' ][ $name ] = array ( '#type' => 'container' ); $schema = $this ->typedConfigManager->get( $name ); $source_config = $this ->baseConfigData[ $name ]; $translation_config = $this ->configFactory()->get( $name )->get(); if ( $form_element = $this ->createFormElement( $schema )) { $parents = array ( 'config_names' , $name ); $form [ 'config_names' ][ $name ] += $form_element ->getTranslationBuild( $this ->sourceLanguage, $this ->language, $source_config , $translation_config , $parents ); } } $form [ 'actions' ][ '#type' ] = 'actions' ; $form [ 'actions' ][ 'submit' ] = array ( '#type' => 'submit' , '#value' => $this ->t( 'Save translation' ), '#button_type' => 'primary' , ); // Set the configuration language back. $this ->languageManager->setConfigOverrideLanguage( $original_language ); return $form ; } |
Please login to continue.