diff --git a/core/globals.api.php b/core/globals.api.php index 375c4fd8be2aba917eaddee9332a242d43eac1a2..d19605bf65209a67464ab7a1226b35a6a32a0317 100644 --- a/core/globals.api.php +++ b/core/globals.api.php @@ -5,8 +5,6 @@ * These are the global variables that Drupal uses. */ -use Drupal\Component\Utility\DeprecatedArray; - /** * The insecure base URL of the Drupal installation. * @@ -77,59 +75,3 @@ * @see install_drupal() */ global $install_state; - -/** - * Array of the number of items per page for each pager. - * - * The array index is the pager element index (0 by default). - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Do not - * directly set or get values from this array. Use the pager.manager service - * instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerManagerInterface - */ -$GLOBALS['pager_limits'] = new DeprecatedArray([], 'Global variable $pager_limits is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); - -/** - * Array of current page numbers for each pager. - * - * The array index is the pager element index (0 by default). - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Do not - * directly set or get values from this array. Use the pager.manager service - * instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerManagerInterface - */ -$GLOBALS['pager_page_array'] = new DeprecatedArray([], 'Global variable $pager_page_array is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); - -/** - * Array of the total number of pages for each pager. - * - * The array index is the pager element index (0 by default). - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Do not - * directly set or get values from this array. Use the pager.manager service - * instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerManagerInterface - */ -$GLOBALS['pager_total'] = new DeprecatedArray([], 'Global variable $pager_total is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); - -/** - * Array of the total number of items for each pager. - * - * The array index is the pager element index (0 by default). - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Do not - * directly set or get values from this array. Use the pager.manager service - * instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerManagerInterface - */ -$GLOBALS['pager_total_items'] = new DeprecatedArray([], 'Global variable $pager_total_items is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); diff --git a/core/includes/pager.inc b/core/includes/pager.inc deleted file mode 100644 index cb06d804e3f128f1964a1e592ca5a2bb29da0ea0..0000000000000000000000000000000000000000 --- a/core/includes/pager.inc +++ /dev/null @@ -1,348 +0,0 @@ -<?php - -/** - * @file - * Functions to aid in presenting database results as a set of pages. - */ - -use Drupal\Core\Template\Attribute; -use Drupal\Core\Url; -use Drupal\Component\Utility\Html; - -/** - * Returns the current page being requested for display within a pager. - * - * @param int $element - * (optional) An integer to distinguish between multiple pagers on one page. - * - * @return int - * The number of the current requested page, within the pager represented by - * $element. This is determined from the URL query parameter - * \Drupal::request()->query->get('page'), or 0 by default. Note that this - * number may differ from the actual page being displayed. For example, if a - * search for "example text" brings up three pages of results, but a user - * visits search/node/example+text?page=10, this function will return 10, - * even though the default pager implementation adjusts for this and still - * displays the third page of search results at that URL. - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use - * \Drupal\Core\Pager\RequestPagerInterface->findPage() instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerParametersInterface::findPage() - */ -function pager_find_page($element = 0) { - @trigger_error(__FUNCTION__ . ' is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\RequestPagerInterface->findPage() instead. See https://www.drupal.org/node/2779457', E_USER_DEPRECATED); - /* @var $pager_parameters \Drupal\Core\Pager\PagerParametersInterface */ - $pager_parameters = \Drupal::service('pager.parameters'); - return $pager_parameters->findPage($element); -} - -/** - * Initializes a pager. - * - * This function sets up the necessary global variables so that the render - * system will correctly process #type 'pager' render arrays to output pagers - * that correspond to the items being displayed. - * - * If the items being displayed result from a database query performed using - * Drupal's database API, and if you have control over the construction of the - * database query, you do not need to call this function directly; instead, you - * can simply extend the query object with the 'PagerSelectExtender' extender - * before executing it. For example: - * @code - * $query = \Drupal::database()->select('some_table') - * ->extend('Drupal\Core\Database\Query\PagerSelectExtender'); - * @endcode - * - * However, if you are using a different method for generating the items to be - * paged through, then you should call this function in preparation. - * - * The following example shows how this function can be used in a controller - * that invokes an external datastore with an SQL-like syntax: - * @code - * // First find the total number of items and initialize the pager. - * $where = "status = 1"; - * $total = mymodule_select("SELECT COUNT(*) FROM data " . $where)->result(); - * $num_per_page = \Drupal::config('mymodule.settings')->get('num_per_page'); - * $page = pager_default_initialize($total, $num_per_page); - * - * // Next, retrieve the items for the current page and put them into a - * // render array. - * $offset = $num_per_page * $page; - * $result = mymodule_select("SELECT * FROM data " . $where . " LIMIT %d, %d", $offset, $num_per_page)->fetchAll(); - * $render = []; - * $render[] = [ - * '#theme' => 'mymodule_results', - * '#result' => $result, - * ]; - * - * // Finally, add the pager to the render array, and return. - * $render[] = ['#type' => 'pager']; - * return $render; - * @endcode - * - * A second example involves a controller that invokes an external search - * service where the total number of matching results is provided as part of - * the returned set (so that we do not need a separate query in order to obtain - * this information). Here, we call pager_find_page() to calculate the desired - * offset before the search is invoked: - * @code - * // Perform the query, using the requested offset from pager_find_page(). - * // This comes from a URL parameter, so here we are assuming that the URL - * // parameter corresponds to an actual page of results that will exist - * // within the set. - * $page = pager_find_page(); - * $num_per_page = \Drupal::config('mymodule.settings')->get('num_per_page'); - * $offset = $num_per_page * $page; - * $result = mymodule_remote_search($keywords, $offset, $num_per_page); - * - * // Now that we have the total number of results, initialize the pager. - * pager_default_initialize($result->total, $num_per_page); - * - * // Create a render array with the search results. - * $render = []; - * $render[] = [ - * '#theme' => 'search_results', - * '#results' => $result->data, - * '#type' => 'remote', - * ]; - * - * // Finally, add the pager to the render array, and return. - * $render[] = ['#type' => 'pager']; - * return $render; - * @endcode - * - * @param int $total - * The total number of items to be paged. - * @param int $limit - * The number of items the calling code will display per page. - * @param int $element - * (optional) An integer to distinguish between multiple pagers on one page. - * - * @return int - * The number of the current page, within the pager represented by $element. - * This is determined from the URL query parameter - * \Drupal::request()->query->get('page), or 0 by default. However, if a page - * that does not correspond to the actual range of the result set was - * requested, this function will return the closest page actually within the - * result set. - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use - * \Drupal\Core\Pager\PagerManagerInterface->defaultInitialize() instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerManagerInterface::createPager() - */ -function pager_default_initialize($total, $limit, $element = 0) { - @trigger_error(__FUNCTION__ . ' is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface->createPager() instead. See https://www.drupal.org/node/2779457', E_USER_DEPRECATED); - /* @var $pager_manager \Drupal\Core\Pager\PagerManagerInterface */ - $pager_manager = \Drupal::service('pager.manager'); - $pager = $pager_manager->createPager($total, $limit, $element); - return $pager->getCurrentPage(); -} - -/** - * Compose a URL query parameter array for pager links. - * - * @return array - * A URL query parameter array that consists of all components of the current - * page request except for those pertaining to paging. - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use - * \Drupal\Core\Pager\RequestPagerInterface->getQueryParameters() instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerParametersInterface::getQueryParameters() - */ -function pager_get_query_parameters() { - @trigger_error(__FUNCTION__ . ' is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\RequestPagerInterface->getQueryParameters() instead. See https://www.drupal.org/node/2779457', E_USER_DEPRECATED); - /* @var $pager_params \Drupal\Core\Pager\PagerParametersInterface */ - $pager_params = \Drupal::service('pager.parameters'); - return $pager_params->getQueryParameters(); -} - -/** - * Prepares variables for pager templates. - * - * Default template: pager.html.twig. - * - * Menu callbacks that display paged query results should use #type => pager - * to retrieve a pager control so that users can view other results. Format a - * list of nearby pages with additional query results. - * - * @param array $variables - * An associative array containing: - * - pager: A render element containing: - * - #tags: An array of labels for the controls in the pager. - * - #element: An optional integer to distinguish between multiple pagers on - * one page. - * - #parameters: An associative array of query string parameters to append - * to the pager links. - * - #route_parameters: An associative array of the route parameters. - * - #quantity: The number of pages in the list. - */ -function template_preprocess_pager(&$variables) { - $element = $variables['pager']['#element']; - $parameters = $variables['pager']['#parameters']; - $quantity = empty($variables['pager']['#quantity']) ? 0 : $variables['pager']['#quantity']; - $route_name = $variables['pager']['#route_name']; - $route_parameters = isset($variables['pager']['#route_parameters']) ? $variables['pager']['#route_parameters'] : []; - - /* @var $pager_manager \Drupal\Core\Pager\PagerManagerInterface */ - $pager_manager = \Drupal::service('pager.manager'); - - $pager = $pager_manager->getPager($element); - - // Nothing to do if there is no pager. - if (!isset($pager)) { - return; - } - - $pager_max = $pager->getTotalPages(); - - // Nothing to do if there is only one page. - if ($pager_max <= 1) { - return; - } - - $tags = $variables['pager']['#tags']; - - // Calculate various markers within this pager piece: - // Middle is used to "center" pages around the current page. - $pager_middle = ceil($quantity / 2); - $current_page = $pager->getCurrentPage(); - // The current pager is the page we are currently paged to. - $pager_current = $current_page + 1; - // The first pager is the first page listed by this pager piece (re quantity). - $pager_first = $pager_current - $pager_middle + 1; - // The last is the last page listed by this pager piece (re quantity). - $pager_last = $pager_current + $quantity - $pager_middle; - // End of marker calculations. - - // Prepare for generation loop. - $i = $pager_first; - if ($pager_last > $pager_max) { - // Adjust "center" if at end of query. - $i = $i + ($pager_max - $pager_last); - $pager_last = $pager_max; - } - if ($i <= 0) { - // Adjust "center" if at start of query. - $pager_last = $pager_last + (1 - $i); - $i = 1; - } - // End of generation loop preparation. - - // Create the "first" and "previous" links if we are not on the first page. - if ($current_page > 0) { - $items['first'] = []; - $items['first']['attributes'] = new Attribute(); - $options = [ - 'query' => $pager_manager->getUpdatedParameters($parameters, $element, 0), - ]; - $items['first']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); - if (isset($tags[0])) { - $items['first']['text'] = $tags[0]; - } - - $items['previous'] = []; - $items['previous']['attributes'] = new Attribute(); - $options = [ - 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page - 1), - ]; - $items['previous']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); - if (isset($tags[1])) { - $items['previous']['text'] = $tags[1]; - } - } - - if ($i != $pager_max) { - // Add an ellipsis if there are further previous pages. - if ($i > 1) { - $variables['ellipses']['previous'] = TRUE; - } - // Now generate the actual pager piece. - for (; $i <= $pager_last && $i <= $pager_max; $i++) { - $options = [ - 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $i - 1), - ]; - $items['pages'][$i]['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); - $items['pages'][$i]['attributes'] = new Attribute(); - if ($i == $pager_current) { - $variables['current'] = $i; - } - } - // Add an ellipsis if there are further next pages. - if ($i < $pager_max + 1) { - $variables['ellipses']['next'] = TRUE; - } - } - - // Create the "next" and "last" links if we are not on the last page. - if ($current_page < ($pager_max - 1)) { - $items['next'] = []; - $items['next']['attributes'] = new Attribute(); - $options = [ - 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page + 1), - ]; - $items['next']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); - if (isset($tags[3])) { - $items['next']['text'] = $tags[3]; - } - - $items['last'] = []; - $items['last']['attributes'] = new Attribute(); - $options = [ - 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $pager_max - 1), - ]; - $items['last']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); - if (isset($tags[4])) { - $items['last']['text'] = $tags[4]; - } - } - - $variables['items'] = $items; - $variables['heading_id'] = Html::getUniqueId('pagination-heading'); - - // The rendered link needs to play well with any other query parameter used - // on the page, like exposed filters, so for the cacheability all query - // parameters matter. - $variables['#cache']['contexts'][] = 'url.query_args'; -} - -/** - * Gets the URL query parameter array of a pager link. - * - * Adds to or adjusts the 'page' URL query parameter so that if you follow the - * link, you'll get page $index for pager $element on the page. - * - * The 'page' URL query parameter is a comma-delimited string, where each value - * is the target content page for the corresponding pager $element. For - * instance, if we have 5 pagers on a single page, and we want to have a link - * to a page that should display the 6th content page for the 3rd pager, and - * the 1st content page for all the other pagers, then the URL query will look - * like this: ?page=0,0,5,0,0 (page numbering starts at zero). - * - * @param array $query - * An associative array of URL query parameters to add to. - * @param int $element - * An integer to distinguish between multiple pagers on one page. - * @param int $index - * The index of the target page, for the given element, in the pager array. - * - * @return array - * The altered $query parameter array. - * - * @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use - * \Drupal\Core\Pager\PagerManagerInterface::getUpdatedParameters() instead. - * - * @see https://www.drupal.org/node/2779457 - * @see \Drupal\Core\Pager\PagerManagerInterface::getUpdatedParameters() - */ -function pager_query_add_page(array $query, $element, $index) { - @trigger_error(__FUNCTION__ . ' is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface->getUpdatedParameters() instead. See https://www.drupal.org/node/2779457', E_USER_DEPRECATED); - /* @var $pager_manager \Drupal\Core\Pager\PagerManagerInterface */ - $pager_manager = \Drupal::service('pager.manager'); - return $pager_manager->getUpdatedParameters($query, $element, $index); -} diff --git a/core/includes/theme.inc b/core/includes/theme.inc index 99ed0b922550f92a92a0fe5806a2566362595ff8..868304990fd0e818d3fbee8392435a80c34405a6 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -1749,6 +1749,155 @@ function template_preprocess_breadcrumb(&$variables) { } } +/** + * Prepares variables for pager templates. + * + * Default template: pager.html.twig. + * + * Menu callbacks that display paged query results should use #type => pager + * to retrieve a pager control so that users can view other results. Format a + * list of nearby pages with additional query results. + * + * @param array $variables + * An associative array containing: + * - pager: A render element containing: + * - #tags: An array of labels for the controls in the pager. + * - #element: An optional integer to distinguish between multiple pagers on + * one page. + * - #parameters: An associative array of query string parameters to append + * to the pager links. + * - #route_parameters: An associative array of the route parameters. + * - #quantity: The number of pages in the list. + */ +function template_preprocess_pager(&$variables) { + $element = $variables['pager']['#element']; + $parameters = $variables['pager']['#parameters']; + $quantity = empty($variables['pager']['#quantity']) ? 0 : $variables['pager']['#quantity']; + $route_name = $variables['pager']['#route_name']; + $route_parameters = isset($variables['pager']['#route_parameters']) ? $variables['pager']['#route_parameters'] : []; + + /* @var $pager_manager \Drupal\Core\Pager\PagerManagerInterface */ + $pager_manager = \Drupal::service('pager.manager'); + + $pager = $pager_manager->getPager($element); + + // Nothing to do if there is no pager. + if (!isset($pager)) { + return; + } + + $pager_max = $pager->getTotalPages(); + + // Nothing to do if there is only one page. + if ($pager_max <= 1) { + return; + } + + $tags = $variables['pager']['#tags']; + + // Calculate various markers within this pager piece: + // Middle is used to "center" pages around the current page. + $pager_middle = ceil($quantity / 2); + $current_page = $pager->getCurrentPage(); + // The current pager is the page we are currently paged to. + $pager_current = $current_page + 1; + // The first pager is the first page listed by this pager piece (re quantity). + $pager_first = $pager_current - $pager_middle + 1; + // The last is the last page listed by this pager piece (re quantity). + $pager_last = $pager_current + $quantity - $pager_middle; + // End of marker calculations. + + // Prepare for generation loop. + $i = $pager_first; + if ($pager_last > $pager_max) { + // Adjust "center" if at end of query. + $i = $i + ($pager_max - $pager_last); + $pager_last = $pager_max; + } + if ($i <= 0) { + // Adjust "center" if at start of query. + $pager_last = $pager_last + (1 - $i); + $i = 1; + } + // End of generation loop preparation. + + // Create the "first" and "previous" links if we are not on the first page. + if ($current_page > 0) { + $items['first'] = []; + $items['first']['attributes'] = new Attribute(); + $options = [ + 'query' => $pager_manager->getUpdatedParameters($parameters, $element, 0), + ]; + $items['first']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); + if (isset($tags[0])) { + $items['first']['text'] = $tags[0]; + } + + $items['previous'] = []; + $items['previous']['attributes'] = new Attribute(); + $options = [ + 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page - 1), + ]; + $items['previous']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); + if (isset($tags[1])) { + $items['previous']['text'] = $tags[1]; + } + } + + if ($i != $pager_max) { + // Add an ellipsis if there are further previous pages. + if ($i > 1) { + $variables['ellipses']['previous'] = TRUE; + } + // Now generate the actual pager piece. + for (; $i <= $pager_last && $i <= $pager_max; $i++) { + $options = [ + 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $i - 1), + ]; + $items['pages'][$i]['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); + $items['pages'][$i]['attributes'] = new Attribute(); + if ($i == $pager_current) { + $variables['current'] = $i; + } + } + // Add an ellipsis if there are further next pages. + if ($i < $pager_max + 1) { + $variables['ellipses']['next'] = TRUE; + } + } + + // Create the "next" and "last" links if we are not on the last page. + if ($current_page < ($pager_max - 1)) { + $items['next'] = []; + $items['next']['attributes'] = new Attribute(); + $options = [ + 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page + 1), + ]; + $items['next']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); + if (isset($tags[3])) { + $items['next']['text'] = $tags[3]; + } + + $items['last'] = []; + $items['last']['attributes'] = new Attribute(); + $options = [ + 'query' => $pager_manager->getUpdatedParameters($parameters, $element, $pager_max - 1), + ]; + $items['last']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString(); + if (isset($tags[4])) { + $items['last']['text'] = $tags[4]; + } + } + + $variables['items'] = $items; + $variables['heading_id'] = Html::getUniqueId('pagination-heading'); + + // The rendered link needs to play well with any other query parameter used + // on the page, like exposed filters, so for the cacheability all query + // parameters matter. + $variables['#cache']['contexts'][] = 'url.query_args'; +} + /** * Callback for usort() within template_preprocess_field_multiple_value_form(). * @@ -1851,7 +2000,6 @@ function drupal_common_theme() { 'includes' => ['core/includes/theme.maintenance.inc'], 'template' => 'authorize-report', ], - // From pager.inc. 'pager' => [ 'render element' => 'pager', ], diff --git a/core/lib/Drupal/Core/Cache/Context/PagersCacheContext.php b/core/lib/Drupal/Core/Cache/Context/PagersCacheContext.php index ed462f24f15d3c42caab97876fd9bdc7d587b400..74f10bb5c38f7c99cedab7c2d03cacfef49dcdce 100644 --- a/core/lib/Drupal/Core/Cache/Context/PagersCacheContext.php +++ b/core/lib/Drupal/Core/Cache/Context/PagersCacheContext.php @@ -3,7 +3,6 @@ namespace Drupal\Core\Cache\Context; use Drupal\Core\Cache\CacheableMetadata; -use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait; use Drupal\Core\Pager\PagerParametersInterface; /** @@ -15,13 +14,6 @@ */ class PagersCacheContext implements CalculatedCacheContextInterface { - use DeprecatedServicePropertyTrait; - - /** - * {@inheritdoc} - */ - protected $deprecatedProperties = ['requestStack' => 'request_stack']; - /** * The pager parameters. * @@ -35,11 +27,7 @@ class PagersCacheContext implements CalculatedCacheContextInterface { * @param \Drupal\Core\Pager\PagerParametersInterface $pager_params * The pager parameters. */ - public function __construct($pager_params) { - if (!($pager_params instanceof PagerParametersInterface)) { - @trigger_error('Calling ' . __METHOD__ . ' with a $pager_params argument that does not implement \Drupal\Core\Pager\PagerParametersInterface is deprecated in drupal:8.8.0 and is required in drupal:9.0.0. See https://www.drupal.org/node/2779457', E_USER_DEPRECATED); - $pager_params = \Drupal::service('pager.parameters'); - } + public function __construct(PagerParametersInterface $pager_params) { $this->pagerParams = $pager_params; } diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php index 938d1e00490641bd553fb9951d4a684787478fba..dd7b7864bc8a390e0edac09275228fb11c886f05 100644 --- a/core/lib/Drupal/Core/DrupalKernel.php +++ b/core/lib/Drupal/Core/DrupalKernel.php @@ -558,7 +558,6 @@ public function loadLegacyIncludes() { require_once $this->root . '/core/includes/database.inc'; require_once $this->root . '/core/includes/module.inc'; require_once $this->root . '/core/includes/theme.inc'; - require_once $this->root . '/core/includes/pager.inc'; require_once $this->root . '/core/includes/menu.inc'; require_once $this->root . '/core/includes/tablesort.inc'; require_once $this->root . '/core/includes/file.inc'; diff --git a/core/lib/Drupal/Core/Pager/PagerManager.php b/core/lib/Drupal/Core/Pager/PagerManager.php index b97b813d7d81dbf7990fb913fa7f5fd785f33796..68827d2d6af3d0cb085aae669949ee97e8f020cd 100644 --- a/core/lib/Drupal/Core/Pager/PagerManager.php +++ b/core/lib/Drupal/Core/Pager/PagerManager.php @@ -2,7 +2,6 @@ namespace Drupal\Core\Pager; -use Drupal\Component\Utility\DeprecatedArray; use Drupal\Core\DependencyInjection\DependencySerializationTrait; /** @@ -103,30 +102,6 @@ protected function getMaxPagerElementId() { */ protected function setPager(Pager $pager, $element = 0) { $this->pagers[$element] = $pager; - $this->updateGlobals(); - } - - /** - * Updates global variables with a pager data for backwards compatibility. - */ - protected function updateGlobals() { - $pager_total_items = []; - $pager_total = []; - $pager_page_array = []; - $pager_limits = []; - - /** @var $pager \Drupal\Core\Pager\Pager */ - foreach ($this->pagers as $pager_id => $pager) { - $pager_total_items[$pager_id] = $pager->getTotalItems(); - $pager_total[$pager_id] = $pager->getTotalPages(); - $pager_page_array[$pager_id] = $pager->getCurrentPage(); - $pager_limits[$pager_id] = $pager->getLimit(); - } - - $GLOBALS['pager_total_items'] = new DeprecatedArray($pager_total_items, 'Global variable $pager_total_items is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); - $GLOBALS['pager_total'] = new DeprecatedArray($pager_total, 'Global variable $pager_total is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); - $GLOBALS['pager_page_array'] = new DeprecatedArray($pager_page_array, 'Global variable $pager_page_array is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); - $GLOBALS['pager_limits'] = new DeprecatedArray($pager_limits, 'Global variable $pager_limits is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457'); } } diff --git a/core/lib/Drupal/Core/Pager/PagerManagerInterface.php b/core/lib/Drupal/Core/Pager/PagerManagerInterface.php index 77ead948cc5bee9d069c5cd54fe40facc67bd3c3..c0796aea90ce134a54347f2091192a48cdbedba7 100644 --- a/core/lib/Drupal/Core/Pager/PagerManagerInterface.php +++ b/core/lib/Drupal/Core/Pager/PagerManagerInterface.php @@ -15,12 +15,6 @@ * of the pager element within the 'page' query. The value of the element is an * integer telling us the current page number for that pager. * - * This class generally replaces the functions in core/includes/pager.inc. Those - * functions use globals to store data which they all use. Since we require - * backwards compatibility with this behavior, this class presents a public API - * for using pager information, which is implemented using the same globals as a - * 'backend.' - * * @see \Drupal\Core\Pager\PagerParametersInterface */ interface PagerManagerInterface { diff --git a/core/modules/system/tests/src/Kernel/Pager/PagerDeprecationTest.php b/core/modules/system/tests/src/Kernel/Pager/PagerDeprecationTest.php deleted file mode 100644 index 245c965b18833b5f6e95051bd76bcd09af9092b5..0000000000000000000000000000000000000000 --- a/core/modules/system/tests/src/Kernel/Pager/PagerDeprecationTest.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -namespace Drupal\Tests\system\Kernel\Pager; - -use Drupal\KernelTests\KernelTestBase; - -/** - * Ensure that deprecated pager functions trigger deprecation errors. - * - * @group Pager - * @group legacy - */ -class PagerDeprecationTest extends KernelTestBase { - - /** - * @expectedDeprecation pager_find_page is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\RequestPagerInterface->findPage() instead. See https://www.drupal.org/node/2779457 - */ - public function testFindPage() { - $this->assertInternalType('int', pager_find_page()); - } - - /** - * @expectedDeprecation pager_default_initialize is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface->createPager() instead. See https://www.drupal.org/node/2779457 - */ - public function testDefaultInitialize() { - $this->assertInternalType('int', pager_default_initialize(1, 1)); - } - - /** - * @expectedDeprecation pager_get_query_parameters is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\RequestPagerInterface->getQueryParameters() instead. See https://www.drupal.org/node/2779457 - */ - public function testGetQueryParameters() { - $this->assertInternalType('array', pager_get_query_parameters()); - } - - /** - * @expectedDeprecation pager_query_add_page is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface->getUpdatedParameters() instead. See https://www.drupal.org/node/2779457 - */ - public function testQueryAddPage() { - $this->assertArrayHasKey('page', pager_query_add_page([], 1, 1)); - } - -} diff --git a/core/modules/system/tests/src/Unit/Pager/PreprocessPagerTest.php b/core/modules/system/tests/src/Unit/Pager/PreprocessPagerTest.php index 7aa1d208e22a606f86d8ce4a816a4048097562a0..f2028ebf2a3431667b66542ceb9772aebc4a2041 100644 --- a/core/modules/system/tests/src/Unit/Pager/PreprocessPagerTest.php +++ b/core/modules/system/tests/src/Unit/Pager/PreprocessPagerTest.php @@ -48,7 +48,7 @@ protected function setUp() { * @covers ::template_preprocess_pager */ public function testQuantityNotSet() { - require_once $this->root . '/core/includes/pager.inc'; + require_once $this->root . '/core/includes/theme.inc'; $variables = [ 'pager' => [ '#element' => '', diff --git a/core/modules/views/src/Plugin/views/pager/SqlBase.php b/core/modules/views/src/Plugin/views/pager/SqlBase.php index 01fe2026cef75762e7654e1746e81d175ff89d9e..a3f8a0a4c68101469bd62c259e547e2c19ab9173 100644 --- a/core/modules/views/src/Plugin/views/pager/SqlBase.php +++ b/core/modules/views/src/Plugin/views/pager/SqlBase.php @@ -6,7 +6,7 @@ use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Pager\PagerManagerInterface; -use Drupal\Core\Pager\PagerParameters; +use Drupal\Core\Pager\PagerParametersInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -40,20 +40,12 @@ abstract class SqlBase extends PagerPluginBase implements CacheableDependencyInt * The plugin implementation definition. * @param \Drupal\Core\Pager\PagerManagerInterface $pager_manager * The pager manager. - * @param \Drupal\Core\Pager\PagerParameters|null $pager_parameters + * @param \Drupal\Core\Pager\PagerParametersInterface $pager_parameters * The pager parameters. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, PagerManagerInterface $pager_manager = NULL, PagerParameters $pager_parameters = NULL) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, PagerManagerInterface $pager_manager, PagerParametersInterface $pager_parameters) { parent::__construct($configuration, $plugin_id, $plugin_definition); - if (!$pager_manager) { - @trigger_error('Calling ' . __METHOD__ . ' without the $pager_manager argument is deprecated in drupal:8.8.0 and is required in drupal:9.0.0. See https://www.drupal.org/node/2779457', E_USER_DEPRECATED); - $pager_manager = \Drupal::service('pager.manager'); - } $this->pagerManager = $pager_manager; - if (!$pager_parameters) { - @trigger_error('Calling ' . __METHOD__ . ' without the $pager_parameters argument is deprecated in drupal:8.8.0 and is required in drupal:9.0.0. See https://www.drupal.org/node/2779457', E_USER_DEPRECATED); - $pager_parameters = \Drupal::service('pager.parameters'); - } $this->pagerParameters = $pager_parameters; } diff --git a/core/modules/views/src/Plugin/views/query/Sql.php b/core/modules/views/src/Plugin/views/query/Sql.php index 7503e1d8b1584c303fe3e117682457795918e244..5b7612b500e7d073ab32802c0f71fcd4ddd5e5a8 100644 --- a/core/modules/views/src/Plugin/views/query/Sql.php +++ b/core/modules/views/src/Plugin/views/query/Sql.php @@ -1485,8 +1485,7 @@ public function execute(ViewExecutable $view) { // If not, then hook_query_node_access_alter() may munge the count by // adding a distinct against an empty query string // (e.g. COUNT DISTINCT(1) ...) and no pager will return. - // See pager.inc > PagerDefault::execute() - // http://api.drupal.org/api/drupal/includes--pager.inc/function/PagerDefault::execute/7 + // See \Drupal\Core\Database\Query\PagerSelectExtender::execute() // See https://www.drupal.org/node/1046170. $count_query->preExecute(); diff --git a/core/modules/views/views.module b/core/modules/views/views.module index 13bec4d13e06ec626966903c4e50e5ba8a307242..841feac069219bc88190a79e11d86d4d076a693d 100644 --- a/core/modules/views/views.module +++ b/core/modules/views/views.module @@ -88,7 +88,7 @@ function views_theme($existing, $type, $theme, $path) { 'file' => 'views.theme.inc', ]; - // Our extra version of pager from pager.inc + // Our extra version of pager $hooks['views_mini_pager'] = $base + [ 'variables' => ['tags' => [], 'quantity' => 9, 'element' => 0, 'parameters' => []], ]; diff --git a/core/tests/Drupal/KernelTests/Core/Pager/PagerManagerTest.php b/core/tests/Drupal/KernelTests/Core/Pager/PagerManagerTest.php index 169793a459067cf67cdd666941e0b771db75925c..2dd48d66362dc89ca826377015daf5f368d60470 100644 --- a/core/tests/Drupal/KernelTests/Core/Pager/PagerManagerTest.php +++ b/core/tests/Drupal/KernelTests/Core/Pager/PagerManagerTest.php @@ -12,29 +12,6 @@ */ class PagerManagerTest extends KernelTestBase { - /** - * @covers ::createPager - */ - public function testDefaultInitializeGlobals() { - $pager_globals = [ - 'pager_page_array', - 'pager_total_items', - 'pager_total', - 'pager_limits', - ]; - foreach ($pager_globals as $pager_global) { - $this->assertFalse(isset($GLOBALS[$pager_global])); - } - /* @var $pager_manager \Drupal\Core\Pager\PagerManagerInterface */ - $pager_manager = $this->container->get('pager.manager'); - - $pager_manager->createPager(5, 1); - - foreach ($pager_globals as $pager_global) { - $this->assertTrue(isset($GLOBALS[$pager_global])); - } - } - /** * @covers ::getUpdatedParameters */ @@ -61,42 +38,4 @@ public function testGetUpdatedParameters() { $this->assertEquals(",,$index", $query['page']); } - /** - * @group legacy - * @expectedDeprecation Global variable $pager_page_array is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457 - * @expectedDeprecation Global variable $pager_total_items is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457 - * @expectedDeprecation Global variable $pager_total is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457 - * @expectedDeprecation Global variable $pager_limits is deprecated in drupal:8.8.0 and is removed in drupal:9.0.0. Use \Drupal\Core\Pager\PagerManagerInterface instead. See https://www.drupal.org/node/2779457 - */ - public function testGlobalsSafety() { - - /* @var $pager_manager \Drupal\Core\Pager\PagerManagerInterface */ - $pager_manager = $this->container->get('pager.manager'); - - $pager_manager->createPager(30, 10); - - $pager_globals = [ - 'pager_page_array', - 'pager_total_items', - 'pager_total', - 'pager_limits', - ]; - // Check globals were set. - foreach ($pager_globals as $pager_global) { - $this->assertTrue(isset($GLOBALS[$pager_global])); - } - - $this->assertEquals(0, $GLOBALS['pager_page_array'][0]); - $this->assertEquals(30, $GLOBALS['pager_total_items'][0]); - $this->assertEquals(3, $GLOBALS['pager_total'][0]); - $this->assertEquals(10, $GLOBALS['pager_limits'][0]); - - // Assert array is iterable. - foreach ($GLOBALS['pager_total_items'] as $pager_id => $total_items) { - // We only have one pager. - $this->assertEquals(0, $pager_id); - $this->assertEquals(30, $total_items); - } - } - }