mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-31 22:10:45 +02:00
[ticket/17312] Use user_last_active instead of user_lastvisit where possible
PHPBB3-17312
This commit is contained in:
@@ -29,7 +29,7 @@ class add_user_last_active extends migration
|
||||
return [
|
||||
'add_columns' => [
|
||||
$this->table_prefix . 'users' => [
|
||||
'user_last_active' => ['TIMESTAMP', 0],
|
||||
'user_last_active' => ['TIMESTAMP', 0, 'after' => 'user_lastvisit'],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -39,10 +39,41 @@ class add_user_last_active extends migration
|
||||
{
|
||||
return [
|
||||
'drop_columns' => [
|
||||
$this->table_prefix . 'users' => [
|
||||
'user_last_active' => ['TIMESTAMP', 0],
|
||||
],
|
||||
$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;
|
||||
}
|
||||
}
|
||||
|
@@ -440,10 +440,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;
|
||||
@@ -690,8 +690,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();
|
||||
@@ -818,22 +818,26 @@ 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();
|
||||
|
||||
$SID = '?sid=';
|
||||
$_SID = '';
|
||||
}
|
||||
|
||||
// Update the last visit time
|
||||
$this->update_user_lastvisit();
|
||||
|
||||
$session_data = $sql_ary;
|
||||
/**
|
||||
* Event to send new session data to extension
|
||||
@@ -1807,7 +1811,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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user