function webform_menu_local_tasks_alter in Webform 8.5
Same name and namespace in other branches
- 6.x webform.module \webform_menu_local_tasks_alter()
Implements hook_menu_local_tasks_alter().
File
- ./
webform.module, line 222 - Enables the creation of webforms and questionnaires.
Code
function webform_menu_local_tasks_alter(&$data, $route_name, RefinableCacheableDependencyInterface $cacheability) {
// Change config entities 'Translate *' tab to be just label 'Translate'.
$webform_entities = [
'webform',
'webform_options',
];
foreach ($webform_entities as $webform_entity) {
if (isset($data['tabs'][0]["config_translation.local_tasks:entity.{$webform_entity}.config_translation_overview"]['#link']['title'])) {
$data['tabs'][0]["config_translation.local_tasks:entity.{$webform_entity}.config_translation_overview"]['#link']['title'] = t('Translate');
}
}
// Change simple config 'Translate *' tab to be just label 'Translate'.
if (isset($data['tabs'][1]['config_translation.local_tasks:config_translation.item.overview.webform.config'])) {
$data['tabs'][1]['config_translation.local_tasks:config_translation.item.overview.webform.config']['#link']['title'] = t('Translate');
}
// ISSUE:
// Devel routes do not use 'webform' parameter which throws the below error.
// Some mandatory parameters are missing ("webform") to generate a URL for
// route "entity.webform_submission.canonical"
//
// WORKAROUND:
// Make sure webform parameter is set for all routes.
if (strpos($route_name, 'entity.webform_submission.devel_') === 0 || $route_name === 'entity.webform_submission.token_devel') {
foreach ($data['tabs'] as $tab_level) {
foreach ($tab_level as $tab) {
/** @var Drupal\Core\Url $url */
$url = $tab['#link']['url'];
$tab_route_name = $url
->getRouteName();
$tab_route_parameters = $url
->getRouteParameters();
if (strpos($tab_route_name, 'entity.webform_submission.devel_') !== 0) {
$webform_submission = WebformSubmission::load($tab_route_parameters['webform_submission']);
$url
->setRouteParameter('webform', $webform_submission
->getWebform()
->id());
}
}
}
}
// Allow webform query string parameters to be transferred
// from a canonical URL to a test URL.
//
// Please note: This behavior is only applicable when a user can
// test a webform.
$route_names = [
'entity.webform.test_form' => 'entity.webform.canonical',
'entity.node.webform.test_form' => 'entity.node.canonical',
];
if (in_array($route_name, $route_names) || array_key_exists($route_name, $route_names)) {
$query = \Drupal::request()->query
->all();
$has_test_tab = FALSE;
foreach ($route_names as $test_route_name => $view_route_name) {
if (isset($data['tabs'][0][$test_route_name])) {
$has_test_tab = TRUE;
if ($query) {
$data['tabs'][0][$test_route_name]['#link']['url']
->setOption('query', $query);
$data['tabs'][0][$view_route_name]['#link']['url']
->setOption('query', $query);
}
}
}
// Query string to cache context webform canonical and test routes.
if ($has_test_tab) {
$cacheability
->addCacheContexts([
'url.query_args',
]);
}
}
}