You are here

public function PagererManager::getPagererUpdatedParameters in Pagerer 8.2

Gets the URL query parameter array of a pager link.

Parameters

Drupal\pagerer\Pagerer $pager: The pager object.

array $parameters: An associative array of query string parameters to append to the pager links.

int $page: The target page.

array $adaptive_keys: The adaptive keys array, in the format 'L,R,X', where L is the adaptive lock to left page, R is the adaptive lock to right page, and X is the adaptive center lock for calculation of neighborhood.

Return value

array The updated array of query parameters.

2 calls to PagererManager::getPagererUpdatedParameters()
PagererManager::getHref in src/PagererManager.php
Gets a pager link.
PagererManager::getUpdatedParameters in src/PagererManager.php
Gets the URL query parameter array of a pager link.

File

src/PagererManager.php, line 109

Class

PagererManager
Provides a manager for Pagerer, as an extension of core's PagerManager.

Namespace

Drupal\pagerer

Code

public function getPagererUpdatedParameters(Pagerer $pager, array $parameters, $page, array $adaptive_keys = []) : array {
  $max = $this
    ->getMaxPagerElementId();

  // Build the 'page' and 'page_ak' query parameter elements.
  // This is built based on the current page of each pager element (or NULL
  // if the pager is not set), with the exception of the requested page index
  // for the current element.
  $page_el = [];
  $page_ak = [];
  for ($i = 0; $i <= $max; $i++) {
    if (isset($this->pagers[$i])) {
      if ($i === $pager
        ->getElement()) {
        $page_el[$i] = is_string($page) ? $page : $this
          ->pageIndexToUrl($page);
        $page_ak[$i] = $this
          ->adaptiveKeysToUrl($adaptive_keys, $this->pagers[$i]
          ->getLastPage());
      }
      else {
        $page_el[$i] = $this
          ->pageIndexToUrl($this->pagers[$i]
          ->getCurrentPage());
        $page_ak[$i] = $this
          ->adaptiveKeysToUrl($this->pagers[$i]
          ->getAdaptiveKeys(), $this->pagers[$i]
          ->getLastPage());
      }
    }
    else {
      $page_el[$i] = NULL;
      $page_ak[$i] = NULL;
    }
  }

  // Build the 'page' and 'page_ak' fragments, removing unneeded trailing
  // keys.
  while (end($page_el) === NULL) {
    array_pop($page_el);
  }
  while (end($page_ak) === NULL) {
    array_pop($page_ak);
  }
  if (!$this->querystringOverride) {

    // Legacy URL format.
    $parameters[$this->querystringKey] = implode(',', $page_el);
    if (!empty($page_ak)) {
      $parameters['page_ak'] = implode(',', $page_ak);
    }
  }
  else {

    // Pagerer URL format.
    $page = implode(PagererParameters::VALUE_SEPARATOR, $page_el);
    if (!empty($page_ak)) {
      $ak = implode(PagererParameters::VALUE_SEPARATOR, $page_ak);
    }
    $parameters[$this->querystringKey] = $page . (isset($ak) ? PagererParameters::ITEM_SEPARATOR . 'ak' . PagererParameters::ITEM_SEPARATOR . $ak : NULL);
  }

  // Merge the updated pager query parameters, with any parameters coming from
  // the current request. In case of collision, current parameters take
  // precedence over the request ones.
  if ($current_request_query = $this->pagerParams
    ->getQueryParameters()) {
    $parameters = array_merge($current_request_query, $parameters);
  }

  // Explicitly remove the segments if not relevant.
  if ($this->querystringKey !== 'page') {
    unset($parameters['page']);
    unset($parameters['page_ak']);
  }
  if ($this->querystringOverride && empty($page_el) && empty($page_ak)) {
    unset($parameters[$this->querystringKey]);
  }
  return $parameters;
}