1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-16 21:54:00 +02:00

Merge branch '3.3.x'

This commit is contained in:
Marc Alexander
2024-05-22 21:55:14 +02:00
8 changed files with 122 additions and 17 deletions

View File

@@ -0,0 +1,79 @@
<?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\db\migration\data\v33x;
use phpbb\db\migration\migration;
class add_user_last_active extends migration
{
public static function depends_on()
{
return [
'\phpbb\db\migration\data\v33x\v3311',
];
}
public function update_schema()
{
return [
'add_columns' => [
$this->table_prefix . 'users' => [
'user_last_active' => ['TIMESTAMP', 0, 'after' => 'user_lastvisit'],
],
],
];
}
public function revert_schema()
{
return [
'drop_columns' => [
$this->table_prefix . 'users' => ['user_last_active'],
],
];
}
public function update_data()
{
return [
['custom', [[$this, 'set_user_last_active']]],
];
}
public function set_user_last_active($start = 0)
{
// Get maximum user id from database
$sql = "SELECT MAX(user_id) AS max_user_id
FROM {$this->table_prefix}users";
$result = $this->db->sql_query($sql);
$max_id = (int) $this->db->sql_fetchfield('max_user_id');
$this->db->sql_freeresult($result);
if ($start > $max_id)
{
return;
}
// Keep setting user_last_active time
$next_start = $start + 10000;
$sql = 'UPDATE ' . $this->table_prefix . 'users
SET user_last_active = user_lastvisit
WHERE user_id > ' . (int) $start . '
AND user_id <= ' . (int) ($next_start);
$this->db->sql_query($sql);
return $next_start;
}
}

View File

@@ -450,10 +450,10 @@ class session
// Is user banned? Are they excluded? Won't return on ban, exists within method
$this->check_ban_for_current_session($config);
// Update user last visit time accordingly, but in a minute or so
if ((int) $this->data['session_time'] - (int) $this->data['user_lastvisit'] > 60)
// Update user last active time accordingly, but in a minute or so
if ((int) $this->data['session_time'] - (int) $this->data['user_last_active'] > 60)
{
$this->update_user_lastvisit();
$this->update_last_active_time();
}
return true;
@@ -700,8 +700,8 @@ class session
{
$this->session_id = $this->data['session_id'];
// Only sync user last visit time in a minute or so after last session data update or if the page changes
if ((int) $this->data['session_time'] - (int) $this->data['user_lastvisit'] > 60 || ($this->update_session_page && $this->data['session_page'] != $this->page['page']))
// Only update session DB a minute or so after last update or if page changes
if ($this->time_now - $this->data['session_time'] > 60 || ($this->update_session_page && $this->data['session_page'] != $this->page['page']))
{
// Update the last visit time
$this->update_user_lastvisit();
@@ -831,15 +831,22 @@ class session
$this->data['user_form_salt'] = unique_id();
// Update the form key
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_form_salt = \'' . $db->sql_escape($this->data['user_form_salt']) . '\'
SET user_form_salt = \'' . $db->sql_escape($this->data['user_form_salt']) . '\',
user_last_active = ' . (int) $this->data['session_time'] . '
WHERE user_id = ' . (int) $this->data['user_id'];
$db->sql_query($sql);
}
else
{
$this->update_last_active_time();
}
}
else
{
$this->data['session_time'] = $this->data['session_last_visit'] = $this->time_now;
$this->update_user_lastvisit();
if ($phpbb_container->getParameter('session.force_sid'))
{
$SID = '?sid=';
@@ -847,9 +854,6 @@ class session
}
}
// Update the last visit time
$this->update_user_lastvisit();
$session_data = $sql_ary;
/**
* Event to send new session data to extension
@@ -1713,7 +1717,26 @@ class session
if (isset($this->data['session_time'], $this->data['user_id']))
{
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_lastvisit = ' . (int) $this->data['session_time'] . '
SET user_lastvisit = ' . (int) $this->data['session_time'] . ',
user_last_active = ' . (int) $this->data['session_time'] . '
WHERE user_id = ' . (int) $this->data['user_id'];
$db->sql_query($sql);
}
}
/**
* Update user's last active time
*
* @return void
*/
public function update_last_active_time()
{
global $db;
if (isset($this->data['session_time'], $this->data['user_id']))
{
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_last_active = ' . (int) $this->data['session_time'] . '
WHERE user_id = ' . (int) $this->data['user_id'];
$db->sql_query($sql);
}