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:
plegall
2016-05-31 16:00:03 +02:00
parent bd0d2ae645
commit 4560e2d824
5 changed files with 119 additions and 31 deletions
+21 -31
View File
@@ -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
));
}
?>
?>