[ticket/9801] Add viewonline_helper service to allow proper testing

The viewonline_helper service can and will be extended in the future which
will allow us to also test the viewonline page better.

PHPBB3-9801
This commit is contained in:
Marc Alexander 2014-06-24 18:49:31 +02:00
parent 204904441a
commit 277e9a7a85
4 changed files with 84 additions and 5 deletions

View file

@ -355,3 +355,6 @@ services:
- @cache - @cache
- @config - @config
- @user - @user
viewonline_helper:
class: phpbb\viewonline_helper

View file

@ -0,0 +1,37 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb;
/**
* Class to handle viewonline related tasks
*/
class viewonline_helper
{
/**
* Get user page
*
* @param string $session_page User's session page
* @return array Match array filled by preg_match()
*/
public function get_user_page($session_page)
{
preg_match('#^([./\\]*+[a-z0-9/_-]+)#i', $session_page, $on_page);
if (!sizeof($on_page))
{
$on_page[1] = '';
}
return $on_page;
}
}

View file

@ -44,6 +44,7 @@ if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
} }
$pagination = $phpbb_container->get('pagination'); $pagination = $phpbb_container->get('pagination');
$viewonline_helper = $phpbb_container->get('viewonline_helper');
$sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']); $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']);
$sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page'); $sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page');
@ -213,11 +214,7 @@ while ($row = $db->sql_fetchrow($result))
continue; continue;
} }
preg_match('#^([./\\]*+[a-z0-9/_-]+)#i', $row['session_page'], $on_page); $on_page = $viewonline_helper->get_user_page($row['session_page']);
if (!sizeof($on_page))
{
$on_page[1] = '';
}
switch ($on_page[1]) switch ($on_page[1])
{ {

View file

@ -0,0 +1,42 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
class phpbb_viewonline_helper_test extends phpbb_test_case
{
public function setUp()
{
parent::setUp();
$this->viewonline_helper = new \phpbb\viewonline_helper();
}
public function session_pages_data()
{
return array(
array('index.php', 'index.php'),
array('foobar/test.php', 'foobar/test.php'),
array('', ''),
array('../index.php', '../index.php'),
);
}
/**
* @dataProvider session_pages_data
*/
public function test_get_user_page($expected, $session_page)
{
$on_page = $this->viewonline_helper->get_user_page($session_page);
$this->assertArrayHasKey(1, $on_page);
$this->assertSame($expected, $on_page[1]);
}
}