You are here

protected function WebformSubmissionListBuilder::getEntityIds in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/WebformSubmissionListBuilder.php \Drupal\webform\WebformSubmissionListBuilder::getEntityIds()

Loads entity IDs using a pager sorted by the entity id.

Return value

array An array of entity IDs.

Overrides EntityListBuilder::getEntityIds

File

src/WebformSubmissionListBuilder.php, line 1288

Class

WebformSubmissionListBuilder
Provides a list controller for webform submission entity.

Namespace

Drupal\webform

Code

protected function getEntityIds() {
  $query = $this
    ->getQuery($this->keys, $this->state, $this->sourceEntityTypeId);
  $query
    ->pager($this->limit);
  $header = $this
    ->buildHeader();
  $order = TableSort::getOrder($header, $this->request);
  $direction = TableSort::getSort($header, $this->request);

  // If query is order(ed) by 'element__*' we need to build a custom table
  // sort using hook_query_TAG_alter().
  // @see webform_query_webform_submission_list_builder_alter()
  if ($order && strpos($order['sql'], 'element__') === 0) {
    $name = $order['sql'];
    $column = $this->columns[$name];
    $query
      ->addTag('webform_submission_list_builder')
      ->addMetaData('webform_submission_element_name', $column['key'])
      ->addMetaData('webform_submission_element_property_name', $column['property_name'])
      ->addMetaData('webform_submission_element_direction', $direction);
    $result = $query
      ->execute();

    // Must manually initialize the pager because the DISTINCT clause in the
    // query is breaking the row counting.
    // @see webform_query_alter()
    \Drupal::service('pager.manager')
      ->createPager($this->total, $this->limit);
    return $result;
  }
  else {
    if ($order && $order['sql']) {
      $query
        ->tableSort($header);
    }
    else {

      // If no order is specified, make sure the first column is sortable,
      // else default sorting to the sid.
      // @see \Drupal\Core\Entity\Query\QueryBase::tableSort
      // @see tablesort_get_order()
      $default = reset($header);
      if (isset($default['specified'])) {
        $query
          ->tableSort($header);
      }
      else {
        $query
          ->sort('sid', 'DESC');
      }
    }
    return $query
      ->execute();
  }
}