You are here

function webform_group_form_webform_settings_access_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_settings_access_form_alter()

Implements hook_form_FORM_ID_alter() for webform settings access form.

File

modules/webform_group/webform_group.module, line 150
Provides a Webform integration with the Group module.

Code

function webform_group_form_webform_settings_access_form_alter(&$form, FormStateInterface $form_state) {

  /** @var \Drupal\webform_group\WebformGroupManagerInterface $webform_group_manager */
  $webform_group_manager = \Drupal::service('webform_group.manager');

  /** @var Drupal\webform\EntitySettings\WebformEntitySettingsAccessForm $entity_form */
  $entity_form = $form_state
    ->getFormObject();

  /** @var \Drupal\webform\WebformInterface $webform */
  $webform = $entity_form
    ->getEntity();
  $weight = 0;
  $access_rules = $webform_group_manager
    ->getAccessRules($webform);
  foreach ($access_rules as $permission => $access_rule) {
    if ($permission === 'administer') {

      // Create dedicated 'Administer submission' details.
      $form['access']['administer_submissions'] = [
        '#type' => 'details',
        '#title' => t('Administer submissions (Groups only)'),
        '#open' => FALSE,
        '#weight' => $weight++,
      ];
      $form['access']['administer_submissions']['group_roles'] = [
        '#type' => 'webform_group_roles',
        '#title' => t('Group (node) roles'),
        '#default_value' => $access_rules[$permission]['group_roles'],
      ];
    }
    else {
      $form['access'][$permission]['group_roles'] = [
        '#type' => 'webform_group_roles',
        '#title' => t('Group (node) roles'),
        '#default_value' => $access_rules[$permission]['group_roles'],
      ];
      $form['access'][$permission]['group_roles_message'] = [
        '#type' => 'webform_message',
        '#message_message' => t('Anonymous and authenticated users are able to access this webform, which will result in group roles being ignored.'),
        '#message_type' => 'warning',
        '#message_close' => TRUE,
        '#message_storage' => WebformMessage::STORAGE_SESSION,
        '#states' => [
          'visible' => [
            [
              ':input[name="access[' . $permission . '][roles][anonymous]"]' => [
                'checked' => TRUE,
              ],
            ],
            'or',
            [
              ':input[name="access[' . $permission . '][roles][authenticated]"]' => [
                'checked' => TRUE,
              ],
            ],
          ],
        ],
      ];
    }
    $form['access'][$permission]['#weight'] = $weight++;
  }
}