return { authtoken => $self->{authtoken} };
}
+sub get_ou_setting {
+ my $self = shift;
+ my $setting = shift;
+ my $sess = $self->fetch_session;
+ return $U->ou_ancestor_setting_value($sess->home_ou, $setting);
+}
+
+sub get_barcode_regex {
+ my $self = shift;
+ if (!defined($self->{bc_regex})) {
+ $self->{bc_regex} = $self->get_ou_setting('opac.barcode_regex');
+ $self->{bc_regex} = '^\d' unless ($self->{bc_regex});
+ }
+ return $self->{bc_regex};
+}
+
#
# find_patron($barcode);
# find_patron(barcode => $barcode); # same as above
# find_patron(usr => $id);
+# find_patron(usrname => $usrname);
sub find_patron {
my $self = shift;
my $key = (@_ > 1) ? shift : 'barcode'; # if we have multiple args, the first is the key index (default barcode)
my $patron_id = shift;
+ # Check for usrname or barcode in the same, simple way that the OPAC does.
+ my $bc_regex = $self->get_barcode_regex();
+ if ($key eq 'barcode' && $patron_id !~ /$bc_regex/) {
+ $key = 'usrname';
+ }
+
$self->verify_session;
return OpenILS::SIP::Patron->new($key => $patron_id, authtoken => $self->{authtoken}, @_);
}
my $patron_id = shift;
my %args = @_;
- if ($key ne 'usr' and $key ne 'barcode') {
+ if ($key ne 'usr' and $key ne 'barcode' and $key ne 'usrname') {
syslog("LOG_ERROR", "Patron (card) lookup requested by illegeal key '$key'");
return undef;
}
# in some cases, we don't need all of this data. Only fetch the user + barcode
$usr_flesh = {flesh => 1, flesh_fields => {au => ['card']}} if $args{slim_user};
-
+
my $user;
if($key eq 'barcode') { # retrieve user by barcode
$user = $card->usr;
+ } elsif ($key eq 'usrname') {
+ $user = $e->search_actor_user([{usrname => $patron_id}, $usr_flesh])->[0];
} else {
$user = $e->retrieve_actor_user([$patron_id, $usr_flesh]);
}
--- /dev/null
+Allow Username in Patron ID
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Evergreen now accepts a patron's username in the SIP2 Patron ID field
+(AA) in addition to the barcode. This modification is useful for
+vendors, such as Overdrive, who can accept a user's username.
+Additionally, it is easier for a patron to find and remember their
+username over their barcode.
+
+The new feature determines if the value in the Patron ID field is a
+barcode or username by comparing the field value against the
+`opac.barcode_regex` setting for the home organizational unit of the
+logged in SIP2 account as configured in the oils_sip.xml file. This
+is similar to what the OPAC does when a patron logs in.