From 1475e87b3823f7ea6f0d7a0f0116ac5d45b161fd Mon Sep 17 00:00:00 2001 From: Takayuki Miwa Date: Sat, 3 Mar 2012 13:46:15 +0900 Subject: [PATCH] Update PaginatorHelper::beforeRender to merge request->query with url options --- .../Case/View/Helper/PaginatorHelperTest.php | 84 +++++++++++++++++-- lib/Cake/View/Helper/PaginatorHelper.php | 3 + 2 files changed, 79 insertions(+), 8 deletions(-) diff --git a/lib/Cake/Test/Case/View/Helper/PaginatorHelperTest.php b/lib/Cake/Test/Case/View/Helper/PaginatorHelperTest.php index 0f513f24e49..cfbd558db09 100644 --- a/lib/Cake/Test/Case/View/Helper/PaginatorHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/PaginatorHelperTest.php @@ -661,11 +661,12 @@ public function testPassedArgsMergingWithUrlOptions() { $this->Paginator->request->params['pass'] = array(2); $this->Paginator->request->params['named'] = array('foo' => 'bar'); + $this->Paginator->request->query = array('x' => 'y'); $this->Paginator->beforeRender('posts/index'); $result = $this->Paginator->sort('title'); $expected = array( - 'a' => array('href' => '/articles/index/2/page:1/foo:bar/sort:title/direction:asc'), + 'a' => array('href' => '/articles/index/2/page:1/foo:bar/sort:title/direction:asc?x=y'), 'Title', '/a' ); @@ -675,24 +676,91 @@ public function testPassedArgsMergingWithUrlOptions() { $expected = array( array('span' => array('class' => 'current')), '1', '/span', ' | ', - array('span' => array()), array('a' => array('href' => '/articles/index/2/page:2/foo:bar')), '2', '/a', '/span', + array('span' => array()), array('a' => array('href' => '/articles/index/2/page:2/foo:bar?x=y')), '2', '/a', '/span', ' | ', - array('span' => array()), array('a' => array('href' => '/articles/index/2/page:3/foo:bar')), '3', '/a', '/span', + array('span' => array()), array('a' => array('href' => '/articles/index/2/page:3/foo:bar?x=y')), '3', '/a', '/span', ' | ', - array('span' => array()), array('a' => array('href' => '/articles/index/2/page:4/foo:bar')), '4', '/a', '/span', + array('span' => array()), array('a' => array('href' => '/articles/index/2/page:4/foo:bar?x=y')), '4', '/a', '/span', ' | ', - array('span' => array()), array('a' => array('href' => '/articles/index/2/page:5/foo:bar')), '5', '/a', '/span', + array('span' => array()), array('a' => array('href' => '/articles/index/2/page:5/foo:bar?x=y')), '5', '/a', '/span', ' | ', - array('span' => array()), array('a' => array('href' => '/articles/index/2/page:6/foo:bar')), '6', '/a', '/span', + array('span' => array()), array('a' => array('href' => '/articles/index/2/page:6/foo:bar?x=y')), '6', '/a', '/span', ' | ', - array('span' => array()), array('a' => array('href' => '/articles/index/2/page:7/foo:bar')), '7', '/a', '/span', + array('span' => array()), array('a' => array('href' => '/articles/index/2/page:7/foo:bar?x=y')), '7', '/a', '/span', ); $this->assertTags($result, $expected); $result = $this->Paginator->next('Next'); $expected = array( 'span' => array('class' => 'next'), - 'a' => array('href' => '/articles/index/2/page:2/foo:bar', 'rel' => 'next'), + 'a' => array('href' => '/articles/index/2/page:2/foo:bar?x=y', 'rel' => 'next'), + 'Next', + '/a', + '/span' + ); + $this->assertTags($result, $expected); + } + +/** + * testPassedArgsMergingWithUrlOptionsParamTypeQuerystring method + * + * @return void + */ + public function testPassedArgsMergingWithUrlOptionsParamTypeQuerystring() { + Router::reload(); + Router::parse('/'); + Router::setRequestInfo(array( + array('plugin' => null, 'controller' => 'articles', 'action' => 'index', 'pass' => array('2'), 'named' => array('foo' => 'bar'), 'url' => array('url' => 'articles/index/2/foo:bar')), + array('base' => '/', 'here' => '/articles/', 'webroot' => '/') + )); + $this->Paginator->request->params['paging'] = array( + 'Article' => array( + 'page' => 1, 'current' => 3, 'count' => 13, + 'prevPage' => false, 'nextPage' => true, 'pageCount' => 8, + 'options' => array( + 'page' => 1, + 'order' => array(), + 'conditions' => array() + ), + 'paramType' => 'querystring' + ) + ); + + $this->Paginator->request->params['pass'] = array(2); + $this->Paginator->request->params['named'] = array('foo' => 'bar'); + $this->Paginator->request->query = array('x' => 'y'); + $this->Paginator->beforeRender('posts/index'); + + $result = $this->Paginator->sort('title'); + $expected = array( + 'a' => array('href' => '/articles/index/2/foo:bar?x=y&page=1&sort=title&direction=asc'), + 'Title', + '/a' + ); + $this->assertTags($result, $expected); + + $result = $this->Paginator->numbers(); + $expected = array( + array('span' => array('class' => 'current')), '1', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=2')), '2', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=3')), '3', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=4')), '4', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=5')), '5', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=6')), '6', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=7')), '7', '/a', '/span', + ); + $this->assertTags($result, $expected); + + $result = $this->Paginator->next('Next'); + $expected = array( + 'span' => array('class' => 'next'), + 'a' => array('href' => '/articles/index/2/foo:bar?x=y&page=2', 'rel' => 'next'), 'Next', '/a', '/span' diff --git a/lib/Cake/View/Helper/PaginatorHelper.php b/lib/Cake/View/Helper/PaginatorHelper.php index 7d654faf9cd..ad72a0fe38a 100644 --- a/lib/Cake/View/Helper/PaginatorHelper.php +++ b/lib/Cake/View/Helper/PaginatorHelper.php @@ -109,6 +109,9 @@ public function __construct(View $View, $settings = array()) { */ public function beforeRender($viewFile) { $this->options['url'] = array_merge($this->request->params['pass'], $this->request->params['named']); + if (!empty($this->request->query)) { + $this->options['url']['?'] = $this->request->query; + } parent::beforeRender($viewFile); }