You are here

function _webform_access_form_node_form_submit in Webform 6.x

Same name and namespace in other branches
  1. 8.5 modules/webform_access/webform_access.module \_webform_access_form_node_form_submit()

Webform access group submit handler.

1 string reference to '_webform_access_form_node_form_submit'
webform_access_form_node_form_alter in modules/webform_access/webform_access.module
Implements hook_form_BASE_FORM_ID_alter().

File

modules/webform_access/webform_access.module, line 356
Provides webform access controls for webform nodes.

Code

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

  /** @var \Drupal\webform\WebformEntityReferenceManagerInterface $entity_reference_manager */
  $entity_reference_manager = \Drupal::service('webform.entity_reference_manager');
  $node = $form_state
    ->getFormObject()
    ->getEntity();
  $field_names = $entity_reference_manager
    ->getFieldNames($node);
  $record = [
    'entity_type' => 'node',
    'entity_id' => $node
      ->id(),
  ];
  foreach ($field_names as $field_name) {
    $value = $form_state
      ->getValue($field_name);

    // Handle hidden webform fields.
    if ($value === NULL) {
      continue;
    }
    $record['field_name'] = $field_name;

    // Delete all existing records.
    \Drupal::database()
      ->delete('webform_access_group_entity')
      ->condition('entity_type', $record['entity_type'])
      ->condition('entity_id', $record['entity_id'])
      ->condition('field_name', $record['field_name'])
      ->execute();
    foreach ($value as $item) {
      $record['webform_id'] = $item['target_id'];
      foreach ($item['settings']['webform_access_group'] as $group_id) {
        $record['group_id'] = $group_id;

        // Insert new record.
        \Drupal::database()
          ->insert('webform_access_group_entity')
          ->fields([
          'group_id',
          'entity_type',
          'entity_id',
          'field_name',
          'webform_id',
        ])
          ->values($record)
          ->execute();

        // Invalidate cache tags.
        WebformAccessGroup::load($group_id)
          ->invalidateTags();
      }
    }
  }
}