diff --git a/Netdisco/Changes b/Netdisco/Changes index be495725..c4288235 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -1,3 +1,9 @@ +2.033000 - 2015-08 + + [ENHANCEMENTS] + + * Expose the created, last login and note fields for User managment + 2.032007 - 2015-07-30 [ENHANCEMENTS] diff --git a/Netdisco/lib/App/Netdisco/DB/Result/User.pm b/Netdisco/lib/App/Netdisco/DB/Result/User.pm index 11acdf07..391ece43 100644 --- a/Netdisco/lib/App/Netdisco/DB/Result/User.pm +++ b/Netdisco/lib/App/Netdisco/DB/Result/User.pm @@ -36,12 +36,10 @@ __PACKAGE__->add_columns( ); __PACKAGE__->set_primary_key("username"); - -# Created by DBIx::Class::Schema::Loader v0.07015 @ 2012-01-07 14:20:02 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:2awpSJkzXP7+8eyT4vGjfw - __PACKAGE__->has_many( roles => 'App::Netdisco::DB::Result::Virtual::UserRole', 'username', { cascade_copy => 0, cascade_update => 0, cascade_delete => 0 } ); -# You can replace this text with custom code or comments, and it will be preserved on regeneration +sub created { return (shift)->get_column('created') } +sub last_seen { return (shift)->get_column('last_seen') } + 1; diff --git a/Netdisco/lib/App/Netdisco/Web/AuthN.pm b/Netdisco/lib/App/Netdisco/Web/AuthN.pm index b036c9f4..022c6139 100644 --- a/Netdisco/lib/App/Netdisco/Web/AuthN.pm +++ b/Netdisco/lib/App/Netdisco/Web/AuthN.pm @@ -50,6 +50,10 @@ post '/login' => sub { details => param('return_url'), }); + schema('netdisco')->resultset('User') + ->find( session('logged_in_user') ) + ->update({ last_on => \'now()' }); + return if request->is_ajax; redirect param('return_url'); } diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/AdminTask/Users.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/AdminTask/Users.pm index 63d78405..a4f6c35a 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/AdminTask/Users.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/AdminTask/Users.pm @@ -12,6 +12,7 @@ use Digest::MD5 (); register_admin_task({ tag => 'users', label => 'User Management', + provides_csv => 1, }); sub _sanity_ok { @@ -42,6 +43,7 @@ ajax '/ajax/control/admin/users/add' => require_role admin => sub { ldap => (param('ldap') ? \'true' : \'false'), port_control => (param('port_control') ? \'true' : \'false'), admin => (param('admin') ? \'true' : \'false'), + note => param('note'), }); }); }; @@ -71,18 +73,34 @@ ajax '/ajax/control/admin/users/update' => require_role admin => sub { ldap => (param('ldap') ? \'true' : \'false'), port_control => (param('port_control') ? \'true' : \'false'), admin => (param('admin') ? \'true' : \'false'), + note => param('note'), }); }); }; -ajax '/ajax/content/admin/users' => require_role admin => sub { - my $set = schema('netdisco')->resultset('User') - ->search(undef, { order_by => [qw/fullname username/]}); +get '/ajax/content/admin/users' => require_role admin => sub { + my @results = schema('netdisco')->resultset('User') + ->search(undef, { + '+columns' => { + created => \"to_char(creation, 'YYYY-MM-DD HH24:MI')", + last_seen => \"to_char(last_on, 'YYYY-MM-DD HH24:MI')", + }, + order_by => [qw/fullname username/] + })->hri->all; - content_type('text/html'); - template 'ajax/admintask/users.tt', { - results => $set, - }, { layout => undef }; + return unless scalar @results; + + if ( request->is_ajax ) { + template 'ajax/admintask/users.tt', + { results => \@results, }, + { layout => undef }; + } + else { + header( 'Content-Type' => 'text/comma-separated-values' ); + template 'ajax/admintask/users_csv.tt', + { results => \@results, }, + { layout => undef }; + } }; true; diff --git a/Netdisco/share/views/ajax/admintask/users.tt b/Netdisco/share/views/ajax/admintask/users.tt index a17bd45a..45e1da16 100644 --- a/Netdisco/share/views/ajax/admintask/users.tt +++ b/Netdisco/share/views/ajax/admintask/users.tt @@ -7,6 +7,9 @@