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 .= '';