diff --git a/lib/WebGUI/Operation/User.pm b/lib/WebGUI/Operation/User.pm index a29945e1a..741217529 100644 --- a/lib/WebGUI/Operation/User.pm +++ b/lib/WebGUI/Operation/User.pm @@ -959,37 +959,54 @@ sub www_listUsers { $output .= ''.$data->{email}.''; $output .= ''.$session->datetime->epochToHuman($data->{dateCreated},"%z").''; $output .= ''.$session->datetime->epochToHuman($data->{lastUpdated},"%z").''; - # Total Time Recorded is computed from userLoginLog table - my ($totalTimeRecorded)= $session->db->quickArray("select sum(lastPageViewed-timeStamp) from userLoginLog where userId = ?", [$data->{userId}]); - my ($lastLoginStatus, $lastLogin, $lastPageView) + + my ( $status, $lastLogin, $lastView, $lastSession ) = $session->db->quickArray( - "select ull.status, ull.timeStamp, us.lastPageView - from userLoginLog ull, userSession us - where ull.sessionId = us.sessionId and ull.lastPageViewed != ull.timeStamp and - ull.userId=".$session->db->quote($data->{userId})." - order by ull.timeStamp DESC" - ); - if ($lastLogin) { - $output .= ''.$session->datetime->epochToHuman($lastLogin).''; - } - else { - $output .= ' - '; + q{ + select status, timeStamp, lastPageViewed, sessionId + from userLoginLog + where userId = ? + order by timeStamp desc + limit 1 + }, + [ $data->{userId} ] + ); + + my $trueLastView = $session->db->quickScalar( + q{ + select lastPageView + from userSession + where sessionId = ? + }, + [ $lastSession ] + ); + + # format last page view, preferring session recorded view time + $lastView = $trueLastView || $lastView; + $lastView &&= $session->datetime->epochToHuman($lastView); + + $lastLogin &&= $session->datetime->epochToHuman($lastLogin); + + my $totalTime = $session->db->quickScalar( + q{ + select sum(lastPageViewed - timeStamp) + from userLoginLog + where userId = ? + }, + [$data->{userId}] + ); + + if ($totalTime) { + my ($interval, $units) + = $session->datetime->secondsToInterval($totalTime); + $totalTime = "$interval $units"; } - if ($lastLoginStatus) { - $output .= ''.$lastLoginStatus.''; - } - else { - $output .= ' - '; - } - if ($lastPageView) { - $output .= ' '.$session->datetime->epochToHuman($lastPageView).''; - my ($interval, $units) = $session->datetime->secondsToInterval($totalTimeRecorded); - $output .= "$interval $units"; - } - else { - $output .= " - "; - $output .= " - "; + + foreach my $cell ($lastLogin, $status, $lastView, $totalTime) { + $cell ||= ' - '; + $output .= qq($cell); } + $output .= ''; } $output .= '';