function webform_group_form_webform_handler_form_alter in Webform 8.5
Same name and namespace in other branches
- 6.x modules/webform_group/webform_group.module \webform_group_form_webform_handler_form_alter()
Implements hook_form_FORM_ID_alter() for webform handler form.
Adds group role token options to email handler elements.
File
- modules/
webform_group/ webform_group.module, line 48 - Provides a Webform integration with the Group module.
Code
function webform_group_form_webform_handler_form_alter(&$form, FormStateInterface $form_state) {
/** @var \Drupal\webform\Form\WebformHandlerFormBase $form_object */
$form_object = $form_state
->getFormObject();
$webform_handler = $form_object
->getWebformHandler();
if (!$webform_handler instanceof EmailWebformHandler) {
return;
}
/** @var \Drupal\webform_group\WebformGroupManagerInterface $webform_group_manager */
$webform_group_manager = \Drupal::service('webform_group.manager');
// Get available group tokens as options.
// @see webform_group_token_info()
$group_role_options = [];
/** @var \Drupal\group\Entity\GroupTypeInterface[] $group_types */
$group_types = \Drupal::entityTypeManager()
->getStorage('group_type')
->loadMultiple();
$group_role_names = [];
foreach ($group_types as $group_type_id => $group_type) {
$group_roles = $group_type
->getRoles();
foreach ($group_roles as $group_role_id => $group_role) {
if ($group_role
->isInternal() && $group_role_id !== "{$group_type_id}-member" || !$group_role
->inPermissionsUI() || $group_role
->isAnonymous()) {
continue;
}
// Make sure the group role is allowed to be used by email handlers.
// @see webform_group_form_webform_admin_config_handlers_form_alter()
if ($webform_group_manager
->isGroupRoleTokenEnabled($group_role_id)) {
$t_args = [
'@group_type' => $group_type
->label(),
'@group_role' => $group_role
->label(),
];
$group_role_options["[webform_group:role:{$group_role_id}]"] = t('@group_type: @group_role', $t_args);
}
$group_role_name = preg_replace("/^{$group_type_id}-/", "", $group_role_id);
// Make sure the group name is allowed to be used by email handlers.
// @see webform_group_form_webform_admin_config_handlers_form_alter()
if ($webform_group_manager
->isGroupRoleTokenEnabled($group_role_name)) {
$group_role_names[$group_role_name] = $group_role
->label();
}
}
}
foreach ($group_role_names as $group_role_name => $group_role_label) {
$group_role_options["[webform_group:role:{$group_role_name}]"] = $group_role_label;
}
if ($webform_group_manager
->isGroupOwnerTokenEnable()) {
$group_role_options['[webform_group:owner:mail]'] = t('Owner');
}
if ($group_role_options) {
_webform_group_form_webform_handler_form_alter_email_element_recursive($form, $group_role_options);
}
if (empty($group_role_options) && \Drupal::currentUser()
->hasPermission('administer webform')) {
$route_name = 'webform.config.handlers';
$route_destination = Url::fromRoute('entity.webform.handlers', [
'webform' => $webform_handler
->getWebform()
->id(),
])
->toString();
$route_options = [
'query' => [
'destination' => $route_destination,
],
];
$t_args = [
':href' => Url::fromRoute($route_name, [], $route_options)
->toString(),
];
$form['settings']['to']['group_roles_message'] = [
'#type' => 'webform_message',
'#message_type' => 'warning',
'#message_message' => t('Please note: You can select which <strong>group roles</strong> are available to receive webform emails by going to the Webform module\'s <a href=":href">admin settings</a> form.', $t_args),
'#message_close' => TRUE,
'#message_id' => 'webform_email_group_roles_message',
'#message_storage' => WebformMessage::STORAGE_USER,
];
}
}