-sub update_local($$$$) {
- my $userid = shift or return undef;
- my $digest = md5_base64(shift) or return undef;
- my $borrowerid = shift or return undef;
- my $borrower = shift or return undef;
- my @keys = keys %$borrower;
- my $dbh = C4::Context->dbh;
- my $query = "UPDATE borrowers\nSET " .
- join(',', map {"$_=?"} @keys) .
- "\nWHERE borrowernumber=? ";
- my $sth = $dbh->prepare($query);
- if ($debug) {
- print STDERR $query, "\n",
- join "\n", map {"$_ = '" . $borrower->{$_} . "'"} @keys;
- print STDERR "\nuserid = $userid\n";
- }
- $sth->execute(
- ((map {$borrower->{$_}} @keys), $borrowerid)
- );
+sub update_local {
+ my $userid = shift or croak "No userid";
+ my $password = shift or croak "No password";
+ my $borrowerid = shift or croak "No borrowerid";
+ my $borrower = shift or croak "No borrower record";
+
+ # skip extended patron attributes in 'borrowers' attribute update
+ my @keys = keys %$borrower;
+ if (C4::Context->preference('ExtendedPatronAttributes')) {
+ foreach my $attribute_type ( C4::Members::AttributeTypes::GetAttributeTypes() ) {
+ my $code = $attribute_type->{code};
+ @keys = grep { $_ ne $code } @keys;
+ $debug and printf STDERR "ignoring extended patron attribute '%s' in update_local()\n", $code;
+ }
+ }
+
+ my $dbh = C4::Context->dbh;
+ my $query = "UPDATE borrowers\nSET " .
+ join(',', map {"$_=?"} @keys) .
+ "\nWHERE borrowernumber=? ";
+ my $sth = $dbh->prepare($query);
+ if ($debug) {
+ print STDERR $query, "\n",
+ join "\n", map {"$_ = '" . $borrower->{$_} . "'"} @keys;
+ print STDERR "\nuserid = $userid\n";
+ }
+ $sth->execute(
+ ((map {$borrower->{$_}} @keys), $borrowerid)
+ );