You are here

protected function WebformAccessGroupForm::getEntitiesAsOptions in Webform 8.5

Same name and namespace in other branches
  1. 6.x modules/webform_access/src/WebformAccessGroupForm.php \Drupal\webform_access\WebformAccessGroupForm::getEntitiesAsOptions()

Get webform entities as options.

Return value

array An associative array container webform node options.

1 call to WebformAccessGroupForm::getEntitiesAsOptions()
WebformAccessGroupForm::form in modules/webform_access/src/WebformAccessGroupForm.php
Gets the actual form array to be built.

File

modules/webform_access/src/WebformAccessGroupForm.php, line 393

Class

WebformAccessGroupForm
Provides a form to define a webform access group.

Namespace

Drupal\webform_access

Code

protected function getEntitiesAsOptions() {

  // Collects webform nodes.
  $webform_nodes = [];
  $nids = [];
  $webform_ids = [];
  $table_names = $this->webformEntityReferenceManager
    ->getTableNames();
  foreach ($table_names as $table_name => $field_name) {
    if (strpos($table_name, 'node_revision__') !== 0) {
      continue;
    }
    $query = $this->database
      ->select($table_name, 'n');
    $query
      ->distinct();
    $query
      ->fields('n', [
      'entity_id',
      $field_name . '_target_id',
    ]);
    $query
      ->condition($field_name . '_target_id', '', '<>');
    $query
      ->isNotNull($field_name . '_target_id');
    $result = $query
      ->execute()
      ->fetchAllKeyed();
    foreach ($result as $nid => $webform_id) {
      $webform_nodes[$nid][$field_name][$webform_id] = $webform_id;
      $webform_ids[$webform_id] = $webform_id;
      $nids[$nid] = $nid;
    }
  }

  /** @var \Drupal\webform\WebformInterface[] $webforms */
  $webforms = Webform::loadMultiple($webform_ids);

  /** @var \Drupal\node\NodeInterface[] $nodes */
  $nodes = $this->entityTypeManager
    ->getStorage('node')
    ->loadMultiple($nids);
  $options = [];
  foreach ($webform_nodes as $nid => $field_names) {
    if (!isset($nodes[$nid])) {
      continue;
    }
    $node = $nodes[$nid];
    foreach ($field_names as $field_name => $webform_ids) {
      foreach ($webform_ids as $webform_id) {
        if (!isset($webforms[$webform_id])) {
          continue;
        }
        $webform = $webforms[$webform_id];
        $options['node:' . $node
          ->id() . ':' . $field_name . ':' . $webform
          ->id()] = $node
          ->label() . ': ' . $webform
          ->label();
      }
    }
  }
  asort($options);
  return $options;
}