You are here

function webform_node_webform_submission_query_access_alter in Webform 6.x

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

Implements hook_webform_submission_query_access_alter().

File

modules/webform_node/webform_node.module, line 90
Provides a webform content type which allows webforms to be integrated into a website as nodes.

Code

function webform_node_webform_submission_query_access_alter(AlterableInterface $query, array $webform_submission_tables) {
  $route_name = \Drupal::routeMatch()
    ->getRouteName();
  if (!preg_match('/entity\\.([^.]+)\\.webform\\.results_submissions/', $route_name, $match)) {
    return;
  }
  $entity_type = $match[1];
  $account = $query
    ->getMetaData('account') ?: \Drupal::currentUser();
  if ($account
    ->hasPermission('view webform submissions any node')) {
    foreach ($webform_submission_tables as $table) {
      $table['condition']
        ->condition($table['alias'] . '.entity_type', $entity_type);
    }
  }
  elseif ($account
    ->hasPermission('view webform submissions own node')) {
    $entity_id = \Drupal::routeMatch()
      ->getRawParameter($entity_type);
    foreach ($webform_submission_tables as $table) {

      /** @var \Drupal\Core\Database\Query\SelectInterface $query */
      $condition = $query
        ->andConditionGroup();
      $condition
        ->condition($table['alias'] . '.entity_type', $entity_type);
      $condition
        ->condition($table['alias'] . '.entity_id', $entity_id);
      $table['condition']
        ->condition($condition);
    }
  }
}