You are here

public function LdapQuery::execute in Lightweight Directory Access Protocol (LDAP) 8.3

Same name and namespace in other branches
  1. 8.4 ldap_query/src/Plugin/views/query/LdapQuery.php \Drupal\ldap_query\Plugin\views\query\LdapQuery::execute()

Execute the query.

Parameters

\Drupal\views\ViewExecutable $view: The view.

Return value

bool|void Nothing if query can be executed.

Overrides QueryPluginBase::execute

File

ldap_query/src/Plugin/views/query/LdapQuery.php, line 70

Class

LdapQuery
Views query plugin for an SQL query.

Namespace

Drupal\ldap_query\Plugin\views\query

Code

public function execute(ViewExecutable $view) {
  if (!isset($this->options['query_id']) || empty($this->options['query_id'])) {
    \Drupal::logger('ldap')
      ->error('You are trying to use Views without having chosen an LDAP Query under Advanced => Query settings.');
    return FALSE;
  }
  $start = microtime(TRUE);
  $controller = new QueryController($this->options['query_id']);
  $filter = $this
    ->buildLdapFilter($controller
    ->getFilter());
  $controller
    ->execute($filter);
  $results = $controller
    ->getRawResults();
  $fields = $controller
    ->availableFields();
  $index = 0;
  unset($results['count']);
  $rows = [];
  foreach ($results as $result) {
    $row = [];

    // TODO: Try to only fetch requested fields instead of all available.
    foreach ($fields as $field_key => $void) {
      if (isset($result[$field_key])) {
        unset($result[$field_key]['count']);
        $row[$field_key] = $result[$field_key];
      }
    }
    $row['index'] = $index++;
    $rows[] = $row;
  }
  if (!empty($this->orderby) && !empty($rows)) {
    $rows = $this
      ->sortResults($rows);
  }
  foreach ($rows as $row) {
    $view->result[] = new ResultRow($row);
  }

  // Pager.
  $totalItems = count($view->result);
  $offset = $view->pager
    ->getCurrentPage() * $view->pager
    ->getItemsPerPage() + $view->pager
    ->getOffset();
  $length = NULL;
  if ($view->pager
    ->getItemsPerPage() > 0) {
    $length = $view->pager
      ->getItemsPerPage();
  }
  if ($offset > 0 || $length > 0) {
    $view->result = array_splice($view->result, $offset, $length);
  }
  $view->pager
    ->postExecute($view->result);
  $view->pager->total_items = $totalItems;
  $view->pager
    ->updatePageInfo();
  $view->total_rows = $view->pager
    ->getTotalItems();

  // Timing information.
  $view->execute_time = microtime(TRUE) - $start;
}