From 262895e9dafbf7af55ec08d3c06ea356a0eb0270 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Tue, 28 May 2013 23:06:06 +0100 Subject: [PATCH] Issue #1998330 by clemens.tolboom, dawehner: Fixed Minipager is broken on page size == 1 due to ceil(PHP_MAX_INT / 1). --- .../Drupal/views/Plugin/views/pager/Mini.php | 5 +++-- .../views/Tests/Plugin/MiniPagerTest.php | 18 ++++++++++++++++++ .../test_views/views.view.test_mini_pager.yml | 13 +++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php b/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php index 3e19f267d1e..36cedf5a155 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php @@ -82,8 +82,9 @@ class Mini extends SqlBase { if (count($result) > $this->get_items_per_page()) { array_pop($result); // Make sure the pager shows the next link by setting the total items to - // the biggest possible number. - pager_default_initialize(PHP_INT_MAX, $this->get_items_per_page(), $this->options['id']); + // the biggest possible number but prevent failing calculations like + // ceil(PHP_INT_MAX) we take PHP_INT_MAX / 2. + pager_default_initialize(PHP_INT_MAX / 2, $this->get_items_per_page(), $this->options['id']); } } diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/MiniPagerTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/MiniPagerTest.php index 50a4619afd4..d67e7d58e64 100644 --- a/core/modules/views/lib/Drupal/views/Tests/Plugin/MiniPagerTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/MiniPagerTest.php @@ -73,6 +73,24 @@ class MiniPagerTest extends PluginTestBase { $this->assertText($this->nodes[18]->label()); $this->assertText($this->nodes[19]->label()); + // Test a mini pager with just one item per page. + $this->drupalGet('test_mini_pager_one'); + $this->assertText('››'); + $this->assertText('Page 1'); + $this->assertText($this->nodes[0]->label()); + + $this->drupalGet('test_mini_pager_one', array('query' => array('page' => 1))); + $this->assertText('‹‹'); + $this->assertText('Page 2'); + $this->assertText('››'); + $this->assertText($this->nodes[1]->label()); + + $this->drupalGet('test_mini_pager_one', array('query' => array('page' => 19))); + $this->assertNoText('››'); + $this->assertText('Page 20'); + $this->assertText('‹‹'); + $this->assertText($this->nodes[19]->label()); + // Remove all items beside 1, so there should be no links shown. for ($i = 0; $i < 19; $i++) { $this->nodes[$i]->delete(); diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_mini_pager.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_mini_pager.yml index bd19143b7eb..7aa1164000f 100644 --- a/core/modules/views/tests/views_test_config/test_views/views.view.test_mini_pager.yml +++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_mini_pager.yml @@ -84,6 +84,19 @@ display: position: '' display_options: path: test_mini_pager + page_2: + display_plugin: page + id: page_2 + display_title: Page + position: '' + display_options: + path: test_mini_pager_one + defaults: + pager: '0' + pager: + type: mini + options: + items_per_page: '1' base_field: nid status: '1' module: views