mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-24 20:17:58 +02:00
Merge pull request #2578 from marc1706/ticket/9801
[ticket/9801] Allow display of page outside board directory on viewonline * marc1706/ticket/9801: [ticket/9801] Use empty instead of sizeof [ticket/9801] Remove spaces before * in docblock [ticket/9801] Add viewonline_helper service to allow proper testing [ticket/9801] Allow display of page outside board directory on viewonline
This commit is contained in:
@ -354,3 +354,6 @@ services:
|
||||
- @cache
|
||||
- @config
|
||||
- @user
|
||||
|
||||
viewonline_helper:
|
||||
class: phpbb\viewonline_helper
|
||||
|
37
phpBB/phpbb/viewonline_helper.php
Normal file
37
phpBB/phpbb/viewonline_helper.php
Normal 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 (empty($on_page))
|
||||
{
|
||||
$on_page[1] = '';
|
||||
}
|
||||
|
||||
return $on_page;
|
||||
}
|
||||
}
|
@ -44,6 +44,7 @@ if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
|
||||
}
|
||||
|
||||
$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_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;
|
||||
}
|
||||
|
||||
preg_match('#^([a-z0-9/_-]+)#i', $row['session_page'], $on_page);
|
||||
if (!sizeof($on_page))
|
||||
{
|
||||
$on_page[1] = '';
|
||||
}
|
||||
$on_page = $viewonline_helper->get_user_page($row['session_page']);
|
||||
|
||||
switch ($on_page[1])
|
||||
{
|
||||
|
42
tests/viewonline/helper_test.php
Normal file
42
tests/viewonline/helper_test.php
Normal 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]);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user