]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 240437: Add a "last seen date" column to the profiles table
authorByron Jones <bjones@mozilla.com>
Tue, 24 Jan 2012 07:13:22 +0000 (15:13 +0800)
committerByron Jones <bjones@mozilla.com>
Tue, 24 Jan 2012 07:13:22 +0000 (15:13 +0800)
r=LpSolit, a=LpSolit

Bugzilla.pm
Bugzilla/DB/Schema.pm
Bugzilla/Install/DB.pm
Bugzilla/User.pm
editusers.cgi
template/en/default/admin/users/edit.html.tmpl
template/en/default/admin/users/list.html.tmpl

index 801ac8dfa509e8a05a5a78c0d850419e68b4684d..cbc9ec1ecb76c06ed07509494f8946cd32fc346f 100644 (file)
@@ -371,6 +371,12 @@ sub login {
         $class->set_user($authenticated_user);
     }
 
+    if ($class->sudoer) {
+        $class->sudoer->update_last_seen_date();
+    } else {
+        $class->user->update_last_seen_date();
+    }
+
     return $class->user;
 }
 
index eda4653e7723b435a31de787e82966e157063762..436258122b02912e7e632510c257365952d6b608 100644 (file)
@@ -869,6 +869,7 @@ use constant ABSTRACT_SCHEMA => {
             extern_id      => {TYPE => 'varchar(64)'},
             is_enabled     => {TYPE => 'BOOLEAN', NOTNULL => 1, 
                                DEFAULT => 'TRUE'}, 
+            last_seen_date => {TYPE => 'DATETIME'},
         ],
         INDEXES => [
             profiles_login_name_idx => {FIELDS => ['login_name'],
index 771d7e4f275069ee4c227236b44788675a4cc37c..b9460cc318f4c32359a2da43a1384dc39d981c5f 100644 (file)
@@ -647,6 +647,9 @@ sub update_table_definitions {
     # 2011-06-15 dkl@mozilla.com - Bug 658929
     _migrate_disabledtext_boolean();
 
+    # 2011-11-01 glob@mozilla.com - Bug 240437
+    $dbh->bz_add_column('profiles', 'last_seen_date', {TYPE => 'DATETIME'});
+
     # 2011-10-11 miketosh - Bug 690173
     _on_delete_set_null_for_audit_log_userid();
     
index 23b08c63a1d42a7df29248887e14cba91707130f..93142b3b7a0fadf7fbb01d66d410ddf6a5cbd972 100644 (file)
@@ -65,16 +65,21 @@ use constant DB_TABLE => 'profiles';
 # that you passed in for "name" to new(). That's because historically
 # Bugzilla::User used "name" for the realname field. This should be
 # fixed one day.
-use constant DB_COLUMNS => (
-    'profiles.userid',
-    'profiles.login_name',
-    'profiles.realname',
-    'profiles.mybugslink AS showmybugslink',
-    'profiles.disabledtext',
-    'profiles.disable_mail',
-    'profiles.extern_id',
-    'profiles.is_enabled', 
-);
+sub DB_COLUMNS {
+    my $dbh = Bugzilla->dbh;
+    return (
+        'profiles.userid',
+        'profiles.login_name',
+        'profiles.realname',
+        'profiles.mybugslink AS showmybugslink',
+        'profiles.disabledtext',
+        'profiles.disable_mail',
+        'profiles.extern_id',
+        'profiles.is_enabled',
+        $dbh->sql_date_format('last_seen_date', '%Y-%m-%d') . ' AS last_seen_date',
+    ),
+}
+
 use constant NAME_FIELD => 'login_name';
 use constant ID_FIELD   => 'userid';
 use constant LIST_ORDER => NAME_FIELD;
@@ -258,6 +263,23 @@ sub set_disabledtext {
     $_[0]->set('is_enabled', $_[1] ? 0 : 1);
 }
 
+sub update_last_seen_date {
+    my $self = shift;
+    return unless $self->id;
+    my $dbh = Bugzilla->dbh;
+    my $date = $dbh->selectrow_array(
+        'SELECT ' . $dbh->sql_date_format('NOW()', '%Y-%m-%d'));
+
+    if (!$self->last_seen_date or $date ne $self->last_seen_date) {
+        $self->{last_seen_date} = $date;
+        # We don't use the normal update() routine here as we only
+        # want to update the last_seen_date column, not any other
+        # pending changes
+        $dbh->do("UPDATE profiles SET last_seen_date = ? WHERE userid = ?",
+                 undef, $date, $self->id);
+    }
+}
+
 ################################################################################
 # Methods
 ################################################################################
@@ -272,6 +294,7 @@ sub is_enabled { $_[0]->{'is_enabled'} ? 1 : 0; }
 sub showmybugslink { $_[0]->{showmybugslink}; }
 sub email_disabled { $_[0]->{disable_mail}; }
 sub email_enabled { !($_[0]->{disable_mail}); }
+sub last_seen_date { $_[0]->{last_seen_date}; }
 sub cryptpassword {
     my $self = shift;
     # We don't store it because we never want it in the object (we
index 80c83f1c172a391a6ca954f3e3fa50a2b31d6a3b..b4b86b88005f2219b687c92e1a944e4fc35e5bd2 100755 (executable)
@@ -64,7 +64,8 @@ if ($action eq 'search') {
     my $matchtype     = $cgi->param('matchtype');
     my $grouprestrict = $cgi->param('grouprestrict') || '0';
     my $enabled_only  = $cgi->param('enabled_only') || '0';
-    my $query = 'SELECT DISTINCT userid, login_name, realname, is_enabled ' .
+    my $query = 'SELECT DISTINCT userid, login_name, realname, is_enabled, ' .
+                $dbh->sql_date_format('last_seen_date', '%Y-%m-%d') . ' AS last_seen_date ' .
                 'FROM profiles';
     my @bindValues;
     my $nextCondition;
index 0f5e79f5bc8fbc45e1a70c68a885ac323c4bb549..b75f8400d35ca5ac83944aefe27c88d008c7a652 100644 (file)
       [% END %]
     </td>
   </tr>
+
+  <tr>
+    <th>Last Login:</th>
+    <td>
+      [% IF otheruser.last_seen_date %]
+        [% otheruser.last_seen_date FILTER html %]
+      [% ELSE %]
+        <em>never</em>
+      [% END %]
+    </td>
+  </tr>
 </table>
 
 <p>
index 15cb15c2be0eaf97f9ae346652eecda674afef12..ff23b77273a5c4491e27afbd63847fc3bf8edb7d 100644 (file)
@@ -35,6 +35,9 @@
    {name               => 'realname'
     heading            => 'Real name'
    }
+   {name               => 'last_seen_date'
+    heading            => 'Last Login'
+   }
    {heading            => 'Account History'
     content            => 'View'
     contentlink        => 'editusers.cgi?action=activity' _