Commit 0284798a authored by Byron Jones's avatar Byron Jones

Bug 240437: Add a "last seen date" column to the profiles table

r=LpSolit, a=LpSolit
parent 96624a11
...@@ -371,6 +371,12 @@ sub login { ...@@ -371,6 +371,12 @@ sub login {
$class->set_user($authenticated_user); $class->set_user($authenticated_user);
} }
if ($class->sudoer) {
$class->sudoer->update_last_seen_date();
} else {
$class->user->update_last_seen_date();
}
return $class->user; return $class->user;
} }
......
...@@ -869,6 +869,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -869,6 +869,7 @@ use constant ABSTRACT_SCHEMA => {
extern_id => {TYPE => 'varchar(64)'}, extern_id => {TYPE => 'varchar(64)'},
is_enabled => {TYPE => 'BOOLEAN', NOTNULL => 1, is_enabled => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'TRUE'}, DEFAULT => 'TRUE'},
last_seen_date => {TYPE => 'DATETIME'},
], ],
INDEXES => [ INDEXES => [
profiles_login_name_idx => {FIELDS => ['login_name'], profiles_login_name_idx => {FIELDS => ['login_name'],
......
...@@ -647,6 +647,9 @@ sub update_table_definitions { ...@@ -647,6 +647,9 @@ sub update_table_definitions {
# 2011-06-15 dkl@mozilla.com - Bug 658929 # 2011-06-15 dkl@mozilla.com - Bug 658929
_migrate_disabledtext_boolean(); _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 # 2011-10-11 miketosh - Bug 690173
_on_delete_set_null_for_audit_log_userid(); _on_delete_set_null_for_audit_log_userid();
......
...@@ -65,16 +65,21 @@ use constant DB_TABLE => 'profiles'; ...@@ -65,16 +65,21 @@ use constant DB_TABLE => 'profiles';
# that you passed in for "name" to new(). That's because historically # that you passed in for "name" to new(). That's because historically
# Bugzilla::User used "name" for the realname field. This should be # Bugzilla::User used "name" for the realname field. This should be
# fixed one day. # fixed one day.
use constant DB_COLUMNS => ( sub DB_COLUMNS {
'profiles.userid', my $dbh = Bugzilla->dbh;
'profiles.login_name', return (
'profiles.realname', 'profiles.userid',
'profiles.mybugslink AS showmybugslink', 'profiles.login_name',
'profiles.disabledtext', 'profiles.realname',
'profiles.disable_mail', 'profiles.mybugslink AS showmybugslink',
'profiles.extern_id', 'profiles.disabledtext',
'profiles.is_enabled', '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 NAME_FIELD => 'login_name';
use constant ID_FIELD => 'userid'; use constant ID_FIELD => 'userid';
use constant LIST_ORDER => NAME_FIELD; use constant LIST_ORDER => NAME_FIELD;
...@@ -258,6 +263,23 @@ sub set_disabledtext { ...@@ -258,6 +263,23 @@ sub set_disabledtext {
$_[0]->set('is_enabled', $_[1] ? 0 : 1); $_[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 # Methods
################################################################################ ################################################################################
...@@ -272,6 +294,7 @@ sub is_enabled { $_[0]->{'is_enabled'} ? 1 : 0; } ...@@ -272,6 +294,7 @@ sub is_enabled { $_[0]->{'is_enabled'} ? 1 : 0; }
sub showmybugslink { $_[0]->{showmybugslink}; } sub showmybugslink { $_[0]->{showmybugslink}; }
sub email_disabled { $_[0]->{disable_mail}; } sub email_disabled { $_[0]->{disable_mail}; }
sub email_enabled { !($_[0]->{disable_mail}); } sub email_enabled { !($_[0]->{disable_mail}); }
sub last_seen_date { $_[0]->{last_seen_date}; }
sub cryptpassword { sub cryptpassword {
my $self = shift; my $self = shift;
# We don't store it because we never want it in the object (we # We don't store it because we never want it in the object (we
......
...@@ -64,7 +64,8 @@ if ($action eq 'search') { ...@@ -64,7 +64,8 @@ if ($action eq 'search') {
my $matchtype = $cgi->param('matchtype'); my $matchtype = $cgi->param('matchtype');
my $grouprestrict = $cgi->param('grouprestrict') || '0'; my $grouprestrict = $cgi->param('grouprestrict') || '0';
my $enabled_only = $cgi->param('enabled_only') || '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'; 'FROM profiles';
my @bindValues; my @bindValues;
my $nextCondition; my $nextCondition;
......
...@@ -101,6 +101,17 @@ ...@@ -101,6 +101,17 @@
[% END %] [% END %]
</td> </td>
</tr> </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> </table>
<p> <p>
......
...@@ -35,6 +35,9 @@ ...@@ -35,6 +35,9 @@
{name => 'realname' {name => 'realname'
heading => 'Real name' heading => 'Real name'
} }
{name => 'last_seen_date'
heading => 'Last Login'
}
{heading => 'Account History' {heading => 'Account History'
content => 'View' content => 'View'
contentlink => 'editusers.cgi?action=activity' _ contentlink => 'editusers.cgi?action=activity' _
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment