mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-05-18 07:16:11 +02:00
fixes #478, add new column user_infos.last_visit
This will speed up user edit popin opening, by avoiding to search in history for the last user visit. The column user_infos.last_visit_from_history true/false says if the last_visit has already been search in history (to avoid making it twice). I could have implemented the search of last_visit for all users in the migration task 149 but in case of many users and long history, it would have taken years to execute...
This commit is contained in:
@@ -411,6 +411,20 @@ function pwg_log($image_id = null, $image_type = null, $format_id = null)
|
||||
{
|
||||
global $conf, $user, $page;
|
||||
|
||||
$update_last_visit = true;
|
||||
$update_last_visit = trigger_change('pwg_log_update_last_visit', $update_last_visit);
|
||||
|
||||
if ($update_last_visit)
|
||||
{
|
||||
$query = '
|
||||
UPDATE '.USER_INFOS_TABLE.'
|
||||
SET last_visit = NOW(),
|
||||
lastmodified = lastmodified
|
||||
WHERE user_id = '.$user['id'].'
|
||||
';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
$do_log = $conf['log'];
|
||||
if (is_admin())
|
||||
{
|
||||
|
||||
@@ -1614,4 +1614,46 @@ UPDATE '.USER_AUTH_KEYS_TABLE.'
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the last visit (datetime) of a user, based on history table
|
||||
*
|
||||
* @since 2.9
|
||||
* @param int $user_id
|
||||
* @param boolean $save_in_user_infos to store result in user_infos.last_visit
|
||||
* @return string date & time of last visit
|
||||
*/
|
||||
function get_user_last_visit_from_history($user_id, $save_in_user_infos=false)
|
||||
{
|
||||
$last_visit = null;
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
date,
|
||||
time
|
||||
FROM '.HISTORY_TABLE.'
|
||||
WHERE user_id = '.$user_id.'
|
||||
ORDER BY id DESC
|
||||
LIMIT 1
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$last_visit = $row['date'].' '.$row['time'];
|
||||
}
|
||||
|
||||
if ($save_in_user_infos)
|
||||
{
|
||||
$query = '
|
||||
UPDATE '.USER_INFOS_TABLE.'
|
||||
SET last_visit = '.(is_null($last_visit) ? 'NULL' : "'".$last_visit."'").',
|
||||
last_visit_from_history = \'true\',
|
||||
lastmodified = lastmodified
|
||||
WHERE user_id = '.$user_id.'
|
||||
';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
return $last_visit;
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -123,7 +123,8 @@ function ws_users_getList($params, &$service)
|
||||
|
||||
$ui_fields = array(
|
||||
'status','level','language','theme','nb_image_page','recent_period','expand',
|
||||
'show_nb_comments','show_nb_hits','enabled_high','registration_date'
|
||||
'show_nb_comments','show_nb_hits','enabled_high','registration_date',
|
||||
'last_visit'
|
||||
);
|
||||
foreach ($ui_fields as $field)
|
||||
{
|
||||
@@ -154,6 +155,12 @@ SELECT DISTINCT ';
|
||||
$query.= '"" AS groups';
|
||||
}
|
||||
|
||||
if (isset($display['ui.last_visit']))
|
||||
{
|
||||
if (!$first) $query.= ', ';
|
||||
$query.= 'ui.last_visit_from_history AS last_visit_from_history';
|
||||
}
|
||||
|
||||
$query.= '
|
||||
FROM '. USERS_TABLE .' AS u
|
||||
INNER JOIN '. USER_INFOS_TABLE .' AS ui
|
||||
@@ -210,42 +217,25 @@ SELECT user_id, group_id
|
||||
|
||||
if (isset($params['display']['last_visit']))
|
||||
{
|
||||
$query = '
|
||||
SELECT
|
||||
MAX(id) as history_id
|
||||
FROM '.HISTORY_TABLE.'
|
||||
WHERE user_id IN ('.implode(',', array_keys($users)).')
|
||||
GROUP BY user_id
|
||||
;';
|
||||
$history_ids = array_from_query($query, 'history_id');
|
||||
|
||||
if (count($history_ids) == 0)
|
||||
foreach ($users as $cur_user)
|
||||
{
|
||||
$history_ids[] = -1;
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
user_id,
|
||||
date,
|
||||
time
|
||||
FROM '.HISTORY_TABLE.'
|
||||
WHERE id IN ('.implode(',', $history_ids).')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$last_visit = $row['date'].' '.$row['time'];
|
||||
$users[ $row['user_id'] ]['last_visit'] = $last_visit;
|
||||
|
||||
$last_visit = $cur_user['last_visit'];
|
||||
$users[ $cur_user['id'] ]['last_visit'] = $last_visit;
|
||||
|
||||
if (!get_boolean($cur_user['last_visit_from_history']) and empty($last_visit))
|
||||
{
|
||||
$last_visit = get_user_last_visit_from_history($cur_user['id'], true);
|
||||
$users[ $cur_user['id'] ]['last_visit'] = $last_visit;
|
||||
}
|
||||
|
||||
if (isset($params['display']['last_visit_string']))
|
||||
{
|
||||
$users[ $row['user_id'] ]['last_visit_string'] = format_date($last_visit, array('day', 'month', 'year'));
|
||||
$users[ $cur_user['id'] ]['last_visit_string'] = format_date($last_visit, array('day', 'month', 'year'));
|
||||
}
|
||||
|
||||
if (isset($params['display']['last_visit_since']))
|
||||
{
|
||||
$users[ $row['user_id'] ]['last_visit_since'] = time_since($last_visit, 'day');
|
||||
$users[ $cur_user['id'] ]['last_visit_since'] = time_since($last_visit, 'day');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -632,4 +622,4 @@ SELECT
|
||||
));
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user