You are here

function webform_group_form_webform_ui_element_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_ui_element_form_alter()

Implements hook_form_FORM_ID_alter() for webform ui element form.

File

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

Code

function webform_group_form_webform_ui_element_form_alter(&$form, FormStateInterface $form_state) {
  $default_properties = $form_state
    ->get('default_properties');
  $custom_default_value =& $form['properties']['custom']['properties']['#default_value'];
  $operations = [
    'create',
    'update',
    'view',
  ];
  foreach ($operations as $operation) {
    $user_roles_property = 'access_' . $operation . '_roles';
    $group_roles_property = 'access_' . $operation . '_group_roles';

    // Get default value from custom properties.
    if (isset($custom_default_value[$group_roles_property])) {
      $default_value = $custom_default_value[$group_roles_property];
      unset($custom_default_value[$group_roles_property]);
    }
    else {
      $default_value = [];
    }
    $form['properties']['access']['access_' . $operation][$group_roles_property] = [
      '#type' => 'webform_group_roles',
      '#title' => t('Group roles'),
      '#parents' => [
        'properties',
        $group_roles_property,
      ],
      '#default_value' => $default_value,
    ];
    $form['properties']['access']['access_' . $operation][$group_roles_property . '_message'] = [
      '#type' => 'webform_message',
      '#message_message' => t('Anonymous or authenticated users are able to access this element, which will result in group roles being ignored.'),
      '#message_type' => 'warning',
      '#message_close' => TRUE,
      '#message_storage' => WebformMessage::STORAGE_SESSION,
      '#states' => [
        'visible' => [
          [
            ':input[name="properties[' . $user_roles_property . '][anonymous]"]' => [
              'checked' => TRUE,
            ],
          ],
          'or',
          [
            ':input[name="properties[' . $user_roles_property . '][authenticated]"]' => [
              'checked' => TRUE,
            ],
          ],
        ],
      ],
    ];

    // Set default property so that these custom properties are processed.
    $default_properties[$group_roles_property] = [];
  }
  $form_state
    ->set('default_properties', $default_properties);
}