Updating borrowers.lastseen

From Koha Wiki
Jump to navigation Jump to search

Note: The descriptions below are based on the code in the main branch as of 2018-05-07.

Database field and syspref

In the "borrowers" table, there is a field called "lastseen". The comment for this field reads:

last time a patron has been seen (connected at the OPAC or staff interface)

In order to use this field, the syspref "TrackLastPatronActivity" must be switched on. The description for this is:

[Do|Don't] track last patron activity. Everytime a patron will connect, the borrowers.lastseen will be updated with the current time.

The database field and syspref were introduced in "Bug 16276 - When automatically deleting expired borrowers, make sure they didn't log in recently". It looks like the original intent was only to track logins, not circulation events.

Koha::Patron::track_login()

This is the subroutine that does the actual update:

474 =head3 track_login
475 
476     $patron->track_login;
477     $patron->track_login({ force => 1 });
478 
479     Tracks a (successful) login attempt.
480     The preference TrackLastPatronActivity must be enabled. Or you
481     should pass the force parameter.
482 
483 =cut
484 
485 sub track_login {
486     my ( $self, $params ) = @_;
487     return if
488         !$params->{force} &&
489         !C4::Context->preference('TrackLastPatronActivity');
490     $self->lastseen( dt_from_string() )->store;
491 }

Login

C4::Auth::checkauth() calls Koha::Patron::track_login().

This gets called on every page load.

SIP2

Patron info

In C4::SIP::Sip::MsgType::handle_patron_info() there is a call to C4::SIP::ILS::Patron::update_lastseen(), which again calls Koha::Patron::track_login().

This was added in 18.05: Bug 18625 - Update borrower last seen from SIP

REST API

Can external services use the REST API for authenticating patrons now? If so, this should also update borrowers.lastseen.

ILS-DI

ILS-DI can be used by third parties to authenticate patrons who want to use external services. This should also update borrowers.lastseen.

Extend borrowers.lastseen to circ events?

Libraries wanting to be compliant with GDPR will want to delete patrons who have not been "active" in the last X months, or similar. Being active might mean at least two things:

  • Checking out books etc
  • Using the library facilities in other ways, like logging into services the library subscribes to

The last part is covered by borrowers.lastseen, both for logging into the OPAC and for logging in to services via SIP2. But if borrowing history is anonymized (which it will surely be for a GDPR-compliant library), a patron could borrow lots of books and not leave a trace of it after anonymization.

The question then is, would it make sense to extend the use of borrowers.lastseen to also track circ events? If so, we would need to catch events from:

  • Circulation in the staff client
  • Processing .koc files
  • Self Checkout
  • Circ actions via SIP2

Relevant bugs

  • Bug 18821 - TrackLastPatronActivity is a performance killer