diff options
| -rw-r--r-- | phpBB/config/services.yml | 3 | ||||
| -rw-r--r-- | phpBB/phpbb/viewonline_helper.php | 37 | ||||
| -rw-r--r-- | phpBB/viewonline.php | 7 | ||||
| -rw-r--r-- | tests/viewonline/helper_test.php | 42 | 
4 files changed, 84 insertions, 5 deletions
| diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 3743daa075..5dc537f5e1 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -355,3 +355,6 @@ services:              - @cache              - @config              - @user + +    viewonline_helper: +        class: phpbb\viewonline_helper diff --git a/phpBB/phpbb/viewonline_helper.php b/phpBB/phpbb/viewonline_helper.php new file mode 100644 index 0000000000..3aafbb2baf --- /dev/null +++ b/phpBB/phpbb/viewonline_helper.php @@ -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; +	} +} diff --git a/phpBB/viewonline.php b/phpBB/viewonline.php index 69e63faa86..82f990c2a2 100644 --- a/phpBB/viewonline.php +++ b/phpBB/viewonline.php @@ -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])  	{ diff --git a/tests/viewonline/helper_test.php b/tests/viewonline/helper_test.php new file mode 100644 index 0000000000..e4950bb51a --- /dev/null +++ b/tests/viewonline/helper_test.php @@ -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]); +	} +} | 
