Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
2 / 3
CRAP
38.46% covered (danger)
38.46%
10 / 26
viewonline_helper
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
2 / 3
33.30
38.46% covered (danger)
38.46%
10 / 26
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 get_forum_ids
0.00% covered (danger)
0.00%
0 / 1
42.00
0.00% covered (danger)
0.00%
0 / 16
 get_user_page
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
7 / 7
<?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
{
    /** @var \phpbb\filesystem\filesystem_interface */
    protected $filesystem;
    /** @var \phpbb\db\driver\driver_interface */
    protected $db;
    /**
     * @param \phpbb\filesystem\filesystem_interface $filesystem    phpBB's filesystem service
     * @param \phpbb\db\driver\driver_interface $db
     */
    public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, \phpbb\db\driver\driver_interface $db)
    {
        $this->filesystem = $filesystem;
        $this->db = $db;
    }
    /**
     * Get forum IDs for topics
     *
     * Retrieve forum IDs and add the data into the session data array
     * Array structure matches sql_fethrowset() result array
     *
     * @param array $session_data_rowset Users' session data array
     * @return void
     */
    public function get_forum_ids(array &$session_data_rowset): void
    {
        $topic_ids = $match = [];
        foreach ($session_data_rowset as $number => $row)
        {
            if ($row['session_forum_id'] == 0 && preg_match('#t=([0-9]+)#', $row['session_page'], $match))
            {
                $topic_ids[$number] = (int) $match[1];
            }
        }
        if (count($topic_ids = array_unique($topic_ids)))
        {
            $sql_ary = [
                'SELECT'    => 't.topic_id, t.forum_id',
                'FROM'        => [
                    TOPICS_TABLE => 't',
                ],
                'WHERE'        => $this->db->sql_in_set('t.topic_id', $topic_ids),
                'ORDER_BY'    => 't.topic_id',
            ];
            $result = $this->db->sql_query($this->db->sql_build_query('SELECT', $sql_ary));
            $forum_ids_rowset = $this->db->sql_fetchrowset($result);
            $this->db->sql_freeresult($result);
            foreach ($forum_ids_rowset as $forum_ids_row)
            {
                $session_data_row_number = array_search((int) $forum_ids_row['topic_id'], $topic_ids);
                $session_data_rowset[$session_data_row_number]['session_forum_id'] = (int) $forum_ids_row['forum_id'];
            }
        }
    }
    /**
     * 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)
    {
        $session_page = $this->filesystem->clean_path($session_page);
        if (strpos($session_page, './') === 0)
        {
            $session_page = substr($session_page, 2);
        }
        preg_match('#^((\.\./)*([a-z0-9/_-]+))#i', $session_page, $on_page);
        if (empty($on_page))
        {
            $on_page[1] = '';
        }
        return $on_page;
    }
}