@@ -, +, @@ --- C4/Auth.pm | 9 ++++----- Koha/Patron.pm | 19 +++++++++++++++++++ t/db_dependent/Members.t | 10 ++++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) --- a/C4/Auth.pm +++ a/C4/Auth.pm @@ -35,6 +35,7 @@ use Koha; use Koha::AuthUtils qw(get_script_name hash_password); use Koha::LibraryCategories; use Koha::Libraries; +use Koha::Patrons; use POSIX qw/strftime/; use List::MoreUtils qw/ any /; use Encode qw( encode is_utf8); @@ -1184,11 +1185,9 @@ sub checkauth { } if ( $userid ) { - $dbh->do(q| - UPDATE borrowers - SET lastseen = NOW() - WHERE userid = ? - |, undef, $userid); + # track_login also depends on pref TrackLastPatronActivity + my $patron = Koha::Patrons->search({ userid => $userid })->next; + $patron->track_login if $patron; } return ( $userid, $cookie, $sessionID, $flags ); --- a/Koha/Patron.pm +++ a/Koha/Patron.pm @@ -208,6 +208,25 @@ sub update_password { return 1; } +=head2 track_login + + $patron->track_login; + $patron->track_login({ force => 1 }); + + Tracks a (successful) login attempt. + The preference TrackLastPatronActivity must be enabled. Or you + should pass the force parameter. + +=cut + +sub track_login { + my ( $self, $params ) = @_; + return if + !$params->{force} && + !C4::Context->preference('TrackLastPatronActivity'); + $self->lastseen( dt_from_string() )->store; +} + =head3 type =cut --- a/t/db_dependent/Members.t +++ a/t/db_dependent/Members.t @@ -17,14 +17,14 @@ use Modern::Perl; -use Test::More tests => 82; +use Test::More tests => 84; use Test::MockModule; use Data::Dumper; use C4::Context; use Koha::Database; use Koha::Holds; use Koha::List::Patron; - +use Koha::Patrons; use t::lib::Mocks; use t::lib::TestBuilder; @@ -387,6 +387,12 @@ $patstodel = GetBorrowersToExpunge( { last_seen => '2016-02-15' }); is( scalar @$patstodel, 2, 'TrackLastPatronActivity - 2 patrons must be deleted' ); $patstodel = GetBorrowersToExpunge( { last_seen => '2016-04-04' }); is( scalar @$patstodel, 3, 'TrackLastPatronActivity - 3 patrons must be deleted' ); +my $patron2 = $builder->build({ source => 'Borrower', value => { lastseen => undef } }); +t::lib::Mocks::mock_preference( 'TrackLastPatronActivity', '0' ); +Koha::Patrons->find( $patron2->{borrowernumber} )->track_login; +is( Koha::Patrons->find( $patron2->{borrowernumber} )->lastseen, undef, 'Lastseen should not be changed' ); +Koha::Patrons->find( $patron2->{borrowernumber} )->track_login({ force => 1 }); +isnt( Koha::Patrons->find( $patron2->{borrowernumber} )->lastseen, undef, 'Lastseen should be changed now' ); # Regression tests for BZ13502 ## Remove all entries with userid='' (should be only 1 max) --