mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
Merge pull request #1199 from imkingdavid/ticket/11334
[ticket/11334] Properly generate controller URL with helper url() method
This commit is contained in:
commit
3985bdbc1b
3 changed files with 90 additions and 9 deletions
|
@ -85,17 +85,39 @@ class phpbb_controller_helper
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Easily generate a URL
|
* Generate a URL
|
||||||
*
|
*
|
||||||
* @param array $url_parts Each array element is a 'folder'
|
* @param string $route The route to travel
|
||||||
* i.e. array('my', 'ext') maps to ./app.php/my/ext
|
* @param mixed $params String or array of additional url parameters
|
||||||
* @param mixed $query The Query string, passed directly into the second
|
* @param bool $is_amp Is url using & (true) or & (false)
|
||||||
* argument of append_sid()
|
* @param string $session_id Possibility to use a custom session id instead of the global one
|
||||||
* @return string A URL that has already been run through append_sid()
|
* @return string The URL already passed through append_sid()
|
||||||
*/
|
*/
|
||||||
public function url(array $url_parts, $query = '')
|
public function url($route, $params = false, $is_amp = true, $session_id = false)
|
||||||
{
|
{
|
||||||
return append_sid($this->phpbb_root_path . implode('/', $url_parts), $query);
|
$route_params = '';
|
||||||
|
if (($route_delim = strpos($route, '?')) !== false)
|
||||||
|
{
|
||||||
|
$route_params = substr($route, $route_delim);
|
||||||
|
$route = substr($route, 0, $route_delim);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($params) && !empty($params))
|
||||||
|
{
|
||||||
|
$params = array_merge(array(
|
||||||
|
'controller' => $route,
|
||||||
|
), $params);
|
||||||
|
}
|
||||||
|
else if (is_string($params) && $params)
|
||||||
|
{
|
||||||
|
$params = 'controller=' . $route . (($is_amp) ? '&' : '&') . $params;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$params = array('controller' => $route);
|
||||||
|
}
|
||||||
|
|
||||||
|
return append_sid($this->phpbb_root_path . 'app' . $this->php_ext . $route_params, $params, $is_amp, $session_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -14,7 +14,7 @@ use Symfony\Component\Config\FileLocator;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||||
|
|
||||||
class phpbb_controller_test extends phpbb_test_case
|
class phpbb_controller_controller_test extends phpbb_test_case
|
||||||
{
|
{
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
|
|
59
tests/controller/helper_url_test.php
Normal file
59
tests/controller/helper_url_test.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package testing
|
||||||
|
* @copyright (c) 2013 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||||
|
|
||||||
|
class phpbb_controller_helper_url_test extends phpbb_test_case
|
||||||
|
{
|
||||||
|
|
||||||
|
public function helper_url_data()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array('foo/bar?t=1&f=2', false, true, false, 'app.php?t=1&f=2&controller=foo/bar', 'parameters in url-argument'),
|
||||||
|
array('foo/bar', 't=1&f=2', true, false, 'app.php?controller=foo/bar&t=1&f=2', 'parameters in params-argument using amp'),
|
||||||
|
array('foo/bar', 't=1&f=2', false, false, 'app.php?controller=foo/bar&t=1&f=2', 'parameters in params-argument using &'),
|
||||||
|
array('foo/bar', array('t' => 1, 'f' => 2), true, false, 'app.php?controller=foo/bar&t=1&f=2', 'parameters in params-argument as array'),
|
||||||
|
|
||||||
|
// Custom sid parameter
|
||||||
|
array('foo/bar', 't=1&f=2', true, 'custom-sid', 'app.php?controller=foo/bar&t=1&f=2&sid=custom-sid', 'using session_id'),
|
||||||
|
|
||||||
|
// Testing anchors
|
||||||
|
array('foo/bar?t=1&f=2#anchor', false, true, false, 'app.php?t=1&f=2&controller=foo/bar#anchor', 'anchor in url-argument'),
|
||||||
|
array('foo/bar', 't=1&f=2#anchor', true, false, 'app.php?controller=foo/bar&t=1&f=2#anchor', 'anchor in params-argument'),
|
||||||
|
array('foo/bar', array('t' => 1, 'f' => 2, '#' => 'anchor'), true, false, 'app.php?controller=foo/bar&t=1&f=2#anchor', 'anchor in params-argument (array)'),
|
||||||
|
|
||||||
|
// Anchors and custom sid
|
||||||
|
array('foo/bar?t=1&f=2#anchor', false, true, 'custom-sid', 'app.php?t=1&f=2&controller=foo/bar&sid=custom-sid#anchor', 'anchor in url-argument using session_id'),
|
||||||
|
array('foo/bar', 't=1&f=2#anchor', true, 'custom-sid', 'app.php?controller=foo/bar&t=1&f=2&sid=custom-sid#anchor', 'anchor in params-argument using session_id'),
|
||||||
|
array('foo/bar', array('t' => 1, 'f' => 2, '#' => 'anchor'), true, 'custom-sid', 'app.php?controller=foo/bar&t=1&f=2&sid=custom-sid#anchor', 'anchor in params-argument (array) using session_id'),
|
||||||
|
|
||||||
|
// Empty parameters should not append the &
|
||||||
|
array('foo/bar', false, true, false, 'app.php?controller=foo/bar', 'no params using bool false'),
|
||||||
|
array('foo/bar', '', true, false, 'app.php?controller=foo/bar', 'no params using empty string'),
|
||||||
|
array('foo/bar', array(), true, false, 'app.php?controller=foo/bar', 'no params using empty array'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider helper_url_data
|
||||||
|
*/
|
||||||
|
public function test_helper_url($route, $params, $is_amp, $session_id, $expected, $description)
|
||||||
|
{
|
||||||
|
global $phpbb_dispatcher;
|
||||||
|
|
||||||
|
$phpbb_dispatcher = new phpbb_mock_event_dispatcher;
|
||||||
|
$this->style_resource_locator = new phpbb_style_resource_locator();
|
||||||
|
$this->user = $this->getMock('phpbb_user');
|
||||||
|
$this->template = new phpbb_template($phpbb_root_path, $phpEx, $config, $this->user, $this->style_resource_locator, new phpbb_template_context());
|
||||||
|
|
||||||
|
$helper = new phpbb_controller_helper($this->template, $this->user, '', '.php');
|
||||||
|
$this->assertEquals($helper->url($route, $params, $is_amp, $session_id), $expected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue