public function LingotekInterfaceTranslationForm::buildForm in Lingotek Translation 3.5.x
Same name and namespace in other branches
- 4.0.x src/Form/LingotekInterfaceTranslationForm.php \Drupal\lingotek\Form\LingotekInterfaceTranslationForm::buildForm()
- 3.2.x src/Form/LingotekInterfaceTranslationForm.php \Drupal\lingotek\Form\LingotekInterfaceTranslationForm::buildForm()
- 3.3.x src/Form/LingotekInterfaceTranslationForm.php \Drupal\lingotek\Form\LingotekInterfaceTranslationForm::buildForm()
- 3.4.x src/Form/LingotekInterfaceTranslationForm.php \Drupal\lingotek\Form\LingotekInterfaceTranslationForm::buildForm()
- 3.6.x src/Form/LingotekInterfaceTranslationForm.php \Drupal\lingotek\Form\LingotekInterfaceTranslationForm::buildForm()
- 3.7.x src/Form/LingotekInterfaceTranslationForm.php \Drupal\lingotek\Form\LingotekInterfaceTranslationForm::buildForm()
- 3.8.x src/Form/LingotekInterfaceTranslationForm.php \Drupal\lingotek\Form\LingotekInterfaceTranslationForm::buildForm()
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides FormInterface::buildForm
File
- src/
Form/ LingotekInterfaceTranslationForm.php, line 95
Class
- LingotekInterfaceTranslationForm
- Class LingotekInterfaceTranslationForm.
Namespace
Drupal\lingotek\FormCode
public function buildForm(array $form, FormStateInterface $form_state) {
if ($redirect = $this
->checkSetup()) {
return $redirect;
}
if (!$this->moduleHandler
->moduleExists('potx')) {
$form['missing_potx'] = [
'#type' => 'markup',
'#markup' => $this
->t('The <a href=":potx">potx</a> module is required for interface translation with Lingotek', [
':potx' => 'https://www.drupal.org/project/potx',
]),
];
return $form;
}
$form['theme_vtab'] = [
'#type' => 'vertical_tabs',
'#title' => $this
->t('Themes'),
];
$form['module_vtab'] = [
'#type' => 'vertical_tabs',
'#title' => $this
->t('Modules'),
];
$form['profile_vtab'] = [
'#type' => 'vertical_tabs',
'#title' => $this
->t('Profiles'),
];
$form['theme']['custom'] = [
'#type' => 'details',
'#title' => $this
->t('Custom themes'),
'#open' => TRUE,
'#group' => 'theme_vtab',
];
$form['theme']['contrib'] = [
'#type' => 'details',
'#title' => $this
->t('Contributed themes'),
'#open' => FALSE,
'#group' => 'theme_vtab',
];
$form['theme']['core'] = [
'#type' => 'details',
'#title' => $this
->t('Drupal Core themes'),
'#open' => FALSE,
'#group' => 'theme_vtab',
];
$form['module']['custom'] = [
'#type' => 'details',
'#title' => $this
->t('Custom modules'),
'#open' => TRUE,
'#group' => 'module_vtab',
];
$form['module']['contrib'] = [
'#type' => 'details',
'#title' => $this
->t('Contributed modules'),
'#open' => FALSE,
'#group' => 'module_vtab',
];
$form['module']['core'] = [
'#type' => 'details',
'#title' => $this
->t('Drupal Core modules'),
'#open' => FALSE,
'#group' => 'module_vtab',
];
$form['profile']['custom'] = [
'#type' => 'details',
'#title' => $this
->t('Custom profiles'),
'#open' => TRUE,
'#group' => 'profile_vtab',
];
$form['profile']['contrib'] = [
'#type' => 'details',
'#title' => $this
->t('Contributed profiles'),
'#open' => FALSE,
'#group' => 'profile_vtab',
];
$form['profile']['core'] = [
'#type' => 'details',
'#title' => $this
->t('Drupal Core profiles'),
'#open' => FALSE,
'#group' => 'profile_vtab',
];
$tables = [
'core',
'custom',
'contrib',
];
$componentTypes = [
'theme',
'module',
'profile',
];
foreach ($componentTypes as $componentType) {
foreach ($tables as $table) {
$form[$componentType][$table]['table'] = [
'#type' => 'table',
'#header' => [
'label' => $this
->t('Label'),
'machine_name' => $this
->t('Machine name'),
'source' => $this
->t('Source'),
'translations' => $this
->t('Translations'),
],
'#empty' => $this
->t('No %component to translate in this category', [
'%component' => $componentType,
]),
'#rows' => [],
];
}
}
$themes = $this->themeHandler
->listInfo();
foreach ($themes as $theme => $themeInfo) {
$component = $themeInfo
->getPath();
$targetStatuses = $this->lingotekInterfaceTranslation
->getTargetStatuses($component);
unset($targetStatuses['EN']);
$row = [
'label' => $themeInfo->info['name'],
'machine_name' => $themeInfo
->getName(),
'source' => [
'data' => [
'#type' => 'lingotek_source_status',
'#ui_component' => $component,
'#language' => $this->languageManager
->getLanguage('en'),
'#status' => $this->lingotekInterfaceTranslation
->getSourceStatus($component),
],
],
'translations' => [
'data' => [
'#type' => 'lingotek_target_statuses',
'#ui_component' => $component,
'#source_langcode' => 'en',
'#statuses' => $this->lingotekInterfaceTranslation
->getTargetStatuses($component),
],
],
];
[
$path_part1,
$path_part2,
] = explode('/', $themeInfo
->getPath());
if ($path_part1 == 'core') {
$form['theme']['core']['table']['#rows'][] = $row;
}
elseif ($path_part1 == 'contrib' || $path_part2 == 'contrib') {
$form['theme']['contrib']['table']['#rows'][] = $row;
}
elseif ($path_part1 == 'custom' || $path_part2 == 'custom') {
$form['theme']['custom']['table']['#rows'][] = $row;
}
else {
$form['theme']['custom']['table']['#rows'][] = $row;
}
}
if ($this->moduleHandler
->moduleExists('cohesion')) {
$template_location = COHESION_TEMPLATE_PATH;
// Get real path to templates and extract relative path for interface translation.
if ($wrapper = \Drupal::service('stream_wrapper_manager')
->getViaUri($template_location)) {
$template_path = $wrapper
->basePath() . '/cohesion/templates';
}
// This is a fake component.
$component = $template_path;
$row = [
'label' => 'Cohesion templates',
'machine_name' => 'cohesion_templates',
'source' => [
'data' => [
'#type' => 'lingotek_source_status',
'#ui_component' => $component,
'#language' => $this->languageManager
->getLanguage('en'),
'#status' => $this->lingotekInterfaceTranslation
->getSourceStatus($component),
],
],
'translations' => [
'data' => [
'#type' => 'lingotek_target_statuses',
'#ui_component' => $component,
'#source_langcode' => 'en',
'#statuses' => $this->lingotekInterfaceTranslation
->getTargetStatuses($component),
],
],
];
$form['theme']['custom']['table']['#rows'][] = $row;
}
$modules = $this->moduleHandler
->getModuleList();
foreach ($modules as $module => $moduleInfo) {
$component = $moduleInfo
->getPath();
$type = $moduleInfo
->getType();
// We don't inject this service as its interface is not considered "stable".
/** @var \Drupal\Core\Extension\ModuleExtensionList $moduleExtensionList */
$moduleExtensionList = \Drupal::service('extension.list.module');
$userFriendlyName = $moduleExtensionList
->getName($module);
$row = [
'label' => $userFriendlyName,
'machine_name' => $moduleInfo
->getName(),
'source' => [
'data' => [
'#type' => 'lingotek_source_status',
'#ui_component' => $component,
'#language' => $this->languageManager
->getLanguage('en'),
'#status' => $this->lingotekInterfaceTranslation
->getSourceStatus($component),
],
],
'translations' => [
'data' => [
'#type' => 'lingotek_target_statuses',
'#ui_component' => $component,
'#source_langcode' => 'en',
'#statuses' => $this->lingotekInterfaceTranslation
->getTargetStatuses($component),
],
],
];
[
$path_part1,
$path_part2,
] = explode('/', $moduleInfo
->getPath());
if ($path_part1 == 'core') {
$form[$type]['core']['table']['#rows'][] = $row;
}
elseif ($path_part1 == 'contrib' || $path_part2 == 'contrib') {
$form[$type]['contrib']['table']['#rows'][] = $row;
}
elseif ($path_part1 == 'custom' || $path_part2 == 'custom') {
$form[$type]['custom']['table']['#rows'][] = $row;
}
else {
$form[$type]['custom']['table']['#rows'][] = $row;
}
}
$form['actions'] = [
'#type' => 'actions',
];
$form['actions']['clear_metadata'] = [
'#type' => 'submit',
'#value' => $this
->t('Clear Lingotek interface translation metadata'),
'#button_type' => 'danger',
'#submit' => [
[
$this,
'clearInterfaceMetadata',
],
],
];
return $form;
}