You are here

function webform_group_form_webform_handler_form_alter in Webform 6.x

Same name and namespace in other branches
  1. 8.5 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,
    ];
  }
}