From 4560e2d824a99514ea6a2ca2a89c8d0453923fbc Mon Sep 17 00:00:00 2001 From: plegall Date: Tue, 31 May 2016 16:00:03 +0200 Subject: 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... --- include/ws_functions/pwg.users.php | 52 +++++++++++++++----------------------- 1 file changed, 21 insertions(+), 31 deletions(-) (limited to 'include/ws_functions/pwg.users.php') diff --git a/include/ws_functions/pwg.users.php b/include/ws_functions/pwg.users.php index eaa96c9c1..1a55fcf90 100644 --- a/include/ws_functions/pwg.users.php +++ b/include/ws_functions/pwg.users.php @@ -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) - { - $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)) + foreach ($users as $cur_user) { - $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 )); } -?> \ No newline at end of file +?> -- cgit v1.2.3