Bug 7143: Updating history and about file
[koha.git] / C4 / Auth_with_ldap.pm
index 3613acf..0d00218 100644 (file)
@@ -35,7 +35,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug);
 
 BEGIN {
        require Exporter;
-       $VERSION = 3.10;        # set the version for version checking
+    $VERSION = 3.07.00.049;    # set the version for version checking
        @ISA    = qw(Exporter);
        @EXPORT = qw( checkpw_ldap );
 }
@@ -119,8 +119,14 @@ sub checkpw_ldap {
         }
 
        # FIXME dpavlin -- we really need $userldapentry leater on even if using auth_by_bind!
-       my $search = search_method($db, $userid) or return 0;   # warnings are in the sub
-       $userldapentry = $search->shift_entry;
+
+       # BUG #5094
+       # 2010-08-04 JeremyC
+       # a $userldapentry is only needed if either updating or replicating are enabled
+       if($config{update} or $config{replicate}) {
+           my $search = search_method($db, $userid) or return 0;   # warnings are in the sub
+           $userldapentry = $search->shift_entry;
+       }
 
        } else {
                my $res = ($config{anonymous}) ? $db->bind : $db->bind($ldapname, password=>$ldappassword);
@@ -155,7 +161,7 @@ sub checkpw_ldap {
             ($cardnumber eq $c2) or warn "update_local returned cardnumber '$c2' instead of '$cardnumber'";
         } else { # C1, D1
             # maybe update just the password?
-               return(1, $cardnumber); # FIXME dpavlin -- don't destroy ExtendedPatronAttributes
+               return(1, $cardnumber, $local_userid);
         }
     } elsif ($config{replicate}) { # A2, C2
         $borrowernumber = AddMember(%borrower) or die "AddMember failed";
@@ -165,8 +171,9 @@ sub checkpw_ldap {
        if (C4::Context->preference('ExtendedPatronAttributes') && $borrowernumber && ($config{update} ||$config{replicate})) {
                my @types = C4::Members::AttributeTypes::GetAttributeTypes();
                my @attributes = grep{my $key=$_; any{$_ eq $key}@types;} keys %borrower;
-               my $extended_patron_attributes = map{{code=>$_,value=>$borrower{$_}}}@attributes;
-               my $extended_patron_attributes = [] unless $extended_patron_attributes;
+        my $extended_patron_attributes;
+        @{$extended_patron_attributes} =
+          map { { code => $_, value => $borrower{$_} } } @attributes;
                my @errors;
                #Check before add
                for (my $i; $i< scalar(@$extended_patron_attributes)-1;$i++) {
@@ -182,7 +189,7 @@ sub checkpw_ldap {
                }
            C4::Members::Attributes::SetBorrowerAttributes($borrowernumber, $extended_patron_attributes);
        }
-return(1, $cardnumber);
+return(1, $cardnumber, $userid);
 }
 
 # Pass LDAP entry object and local cardnumber (userid).
@@ -210,7 +217,7 @@ sub ldap_entry_2_hash ($$) {
        $debug and print STDERR "Finsihed \%memberhash has ", scalar(keys %memberhash), " keys\n",
                                        "Referencing \%mapping with ", scalar(keys %mapping), " keys\n";
        foreach my $key (keys %mapping) {
-               my  $data = $memberhash{$mapping{$key}->{is}}; 
+               my  $data = $memberhash{ lc($mapping{$key}->{is}) }; # Net::LDAP returns all names in lowercase
                $debug and printf STDERR "mapping %20s ==> %-20s (%s)\n", $key, $mapping{$key}->{is}, $data;
                unless (defined $data) { 
                        $data = $mapping{$key}->{content} || '';        # default or failsafe ''
@@ -221,6 +228,17 @@ sub ldap_entry_2_hash ($$) {
                ( substr($borrower{'firstname'},0,1)
                . substr($borrower{ 'surname' },0,1)
                . " ");
+
+       # check if categorycode exists, if not, fallback to default from koha-conf.xml
+       my $dbh = C4::Context->dbh;
+       my $sth = $dbh->prepare("SELECT categorycode FROM categories WHERE categorycode = ?");
+       $sth->execute( uc($borrower{'categorycode'}) );
+       unless ( my $row = $sth->fetchrow_hashref ) {
+               my $default = $mapping{'categorycode'}->{content};
+               $debug && warn "Can't find ", $borrower{'categorycode'}, " default to: $default for ", $borrower{userid};
+               $borrower{'categorycode'} = $default
+       }
+
        return %borrower;
 }
 
@@ -349,7 +367,8 @@ C4::Auth - Authenticates Koha users
                | dateexpiry          | date         | YES  |     | NULL    |                |
                | gonenoaddress       | tinyint(1)   | YES  |     | NULL    |                |
                | lost                | tinyint(1)   | YES  |     | NULL    |                |
-               | debarred            | tinyint(1)   | YES  |     | NULL    |                |
+               | debarred            | date         | YES  |     | NULL    |                |
+               | debarredcomment     | varchar(255) | YES  |     | NULL    |                |
                | contactname         | mediumtext   | YES  |     | NULL    |                |
                | contactfirstname    | text         | YES  |     | NULL    |                |
                | contacttitle        | text         | YES  |     | NULL    |                |