implement multiple values by keeping dn and repeating rows with changed
[virtual-ldap] / lib / LDAP / Koha.pm
index 672aa1f..fccc38f 100644 (file)
@@ -25,7 +25,7 @@ our $database = 'koha';
 our $user     = 'unconfigured-user';
 our $passwd   = 'unconfigured-password';
 
 our $user     = 'unconfigured-user';
 our $passwd   = 'unconfigured-password';
 
-our $max_results = 15; # 100; # FIXME
+our $max_results = 1500; # 100; # FIXME
 
 our $objectclass = 'HrEduPerson';
 
 
 our $objectclass = 'HrEduPerson';
 
@@ -197,21 +197,45 @@ sub search {
 
                warn "# ", $sth->rows, " results for ",dump( $reqData->{'filter'} );
 
 
                warn "# ", $sth->rows, " results for ",dump( $reqData->{'filter'} );
 
+               my $last_dn = '?';
+               my $entry;
+
                while (my $row = $sth->fetchrow_hashref) {
 
                        my ( $dn, $attributes ) = _dn_attributes( $row, $base );
 
                while (my $row = $sth->fetchrow_hashref) {
 
                        my ( $dn, $attributes ) = _dn_attributes( $row, $base );
 
-                       my $entry = Net::LDAP::Entry->new;
-                       $entry->dn( $dn );
-                       $entry->add( %$attributes );
+                       warn "# dn $last_dn ... $dn\n";
+
+                       if ( $dn ne $last_dn ) {
+
+                               if ( $entry ) {
+                                       #$entry->changetype( 'modify' );
+                                       warn "### entry ",$entry->dump( \*STDERR );
+                                       push @entries, $entry;
+                                       undef $entry;
+                               }
 
 
-                       #$entry->changetype( 'modify' );
+                               $entry = Net::LDAP::Entry->new;
+                               $entry->dn( $dn );
 
 
-                       warn "### entry ",$entry->dump( \*STDERR );
+                               $entry->add( %$attributes );
+
+                       } else {
+                               foreach my $n ( keys %$attributes ) {
+                                       my $v = $attributes->{$n};
+                                       warn "# attr $n = $v\n";
+                                       $entry->add( $n, $v ) if $entry->get_value( $n ) ne $v;
+                               }
+                       }
+
+
+                       $last_dn = $dn;
 
 
-                       push @entries, $entry;
                }
 
                }
 
+               warn "### last entry ",$entry->dump( \*STDERR );
+               push @entries, $entry;
+
        } else {
                warn "UNKNOWN request: ",dump( $reqData );
        }
        } else {
                warn "UNKNOWN request: ",dump( $reqData );
        }