Assigning bug 1835 : change password would never log password change.
[koha_gimpoz] / C4 / Search.pm
index e079a0d..d5a44ac 100644 (file)
@@ -467,15 +467,16 @@ sub getRecords {
                                 a => $term,
                                 f => $occ
                             );
+                            $tmprecord->append_fields($tmptitle);
                         }
                         else {
                             $tmptitle =
                               MARC::Field->new( '245', ' ', ' ', a => $term, );
                             $tmpauthor =
                               MARC::Field->new( '100', ' ', ' ', a => $occ, );
+                            $tmprecord->append_fields($tmptitle);
+                            $tmprecord->append_fields($tmpauthor);
                         }
-                        $tmprecord->append_fields($tmptitle);
-                        $tmprecord->append_fields($tmpauthor);
                         $results_hash->{'RECORDS'}[$j] =
                           $tmprecord->as_usmarc();
                     }
@@ -851,9 +852,7 @@ See verbose embedded documentation.
 sub buildQuery {
     my ( $operators, $operands, $indexes, $limits, $sort_by, $scan ) = @_;
 
-    warn "---------"        if $DEBUG;
-    warn "Enter buildQuery" if $DEBUG;
-    warn "---------"        if $DEBUG;
+    warn "---------\nEnter buildQuery\n---------" if $DEBUG;
 
     # dereference
     my @operators = @$operators if $operators;
@@ -1156,9 +1155,7 @@ sub buildQuery {
         warn "LIMIT:" . $limit;
         warn "LIMIT CGI:" . $limit_cgi;
         warn "LIMIT DESC:" . $limit_desc;
-        warn "---------";
-        warn "Leave buildQuery";
-        warn "---------";
+        warn "---------\nLeave buildQuery\n---------";
     }
     return (
         undef,              $query, $simple_query, $query_cgi,
@@ -1178,7 +1175,6 @@ Format results in a form suitable for passing to the template
 sub searchResults {
     my ( $searchdesc, $hits, $results_per_page, $offset, @marcresults ) = @_;
     my $dbh = C4::Context->dbh;
-    my $toggle;
     my $even = 1;
     my @newresults;
 
@@ -1308,7 +1304,7 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g;
             }
             # FIXME: yuk
             $summary =~ s/\[(.*?)]//g;
-            $summary =~ s/\n/<br>/g;
+            $summary =~ s/\n/<br\/>/g;
             $oldbiblio->{summary} = $summary;
         }
 
@@ -1363,15 +1359,7 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g;
             }
         }
 
-        # FIXME:
-        # surely there's a better way to handle this
-        if ( $i % 2 ) {
-            $toggle = "#ffffcc";
-        }
-        else {
-            $toggle = "white";
-        }
-        $oldbiblio->{'toggle'} = $toggle;
+        ($i % 2) and $oldbiblio->{'toggle'} = 1;
 
         # Pull out the items fields
         my @fields = $marcrecord->field($itemtag);
@@ -1411,33 +1399,32 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g;
             foreach my $code ( keys %subfieldstosearch ) {
                 $item->{$code} = $field->subfield( $subfieldstosearch{$code} );
             }
-
+                       my $hbranch     = C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch' ? 'homebranch'    : 'holdingbranch';
+                       my $otherbranch = C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch' ? 'holdingbranch' : 'homebranch';
             # set item's branch name, use HomeOrHoldingBranch syspref first, fall back to the other one
-            if ( $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} ) {
-                $item->{'branchname'} = $branches{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} };
+            if ($item->{$hbranch}) {
+                $item->{'branchname'} = $branches{$item->{$hbranch}};
             }
-            # Last resort
-            elsif ( $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'holdingbranch':'homebranch'} ) {
-                $item->{'branchname'} = $branches{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'holdingbranch':'homebranch'} };
+            elsif ($item->{$otherbranch}) {    # Last resort
+                $item->{'branchname'} = $branches{$item->{$otherbranch}}; 
             }
 
+                       my $prefix = $item->{$hbranch} . '--' . $item->{location} . $item->{itype} . $item->{itemcallnumber};
 # For each grouping of items (onloan, available, unavailable), we build a key to store relevant info about that item
             if ( $item->{onloan} ) {
                 $onloan_count++;
-                $onloan_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{due_date}  }->{due_date} = format_date( $item->{onloan} );
-                $onloan_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{due_date}  }->{count}++ if $item->{'homebranch'};
-                $onloan_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{due_date}  }->{branchname} = $item->{'branchname'};
-                $onloan_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{due_date}  }->{location} = $locations{ $item->{location} };
-                $onloan_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{due_date}  }->{itemcallnumber} = $item->{itemcallnumber};
-        $onloan_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{due_date}  }->{imageurl} = getitemtypeimagesrc() . "/" . $itemtypes{ $item->{itype} }->{imageurl};
+                               my $key = $prefix . $item->{due_date};
+                               $onloan_items->{$key}->{due_date} = format_date($item->{onloan});
+                               $onloan_items->{$key}->{count}++ if $item->{homebranch};
+                               $onloan_items->{$key}->{branchname} = $item->{branchname};
+                               $onloan_items->{$key}->{location} = $locations{ $item->{location} };
+                               $onloan_items->{$key}->{itemcallnumber} = $item->{itemcallnumber};
+                               $onloan_items->{$key}->{imageurl} = getitemtypeimagesrc() . "/" . $itemtypes{ $item->{itype} }->{imageurl};
                 # if something's checked out and lost, mark it as 'long overdue'
                 if ( $item->{itemlost} ) {
-                    $onloan_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{due_date} }->{longoverdue}++;
+                    $onloan_items->{$prefix}->{longoverdue}++;
                     $longoverdue_count++;
-                }
-
-                # can place holds as long as this item isn't lost
-                else {
+                } else {       # can place holds as long as item isn't lost
                     $can_place_holds = 1;
                 }
             }
@@ -1462,26 +1449,25 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g;
                     $item->{status} = $item->{wthdrawn} . "-" . $item->{itemlost} . "-" . $item->{damaged} . "-" . $item->{notforloan};
                     $other_count++;
 
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{wthdrawn} = $item->{wthdrawn};
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{itemlost} = $item->{itemlost};
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{damaged} = $item->{damaged};
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{notforloan} = GetAuthorisedValueDesc( '', '', $item->{notforloan}, '', '', $notforloan_authorised_value ) if $notforloan_authorised_value;
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{count}++ if $item->{'homebranch'};
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{branchname} = $item->{'branchname'};
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{location} = $locations{ $item->{location} };
-                    $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{itemcallnumber} = $item->{itemcallnumber};
-            $other_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} . $item->{status} }->{imageurl} = getitemtypeimagesrc() . "/" . $itemtypes{ $item->{itype} }->{imageurl};
+                                       my $key = $prefix . $item->{status};
+                                       foreach (qw(wthdrawn itemlost damaged branchname itemcallnumber)) {
+                       $other_items->{$key}->{$_} = $item->{$_};
+                                       }
+                                       $other_items->{$key}->{notforloan} = GetAuthorisedValueDesc('','',$item->{notforloan},'','',$notforloan_authorised_value) if $notforloan_authorised_value;
+                                       $other_items->{$key}->{count}++ if $item->{homebranch};
+                                       $other_items->{$key}->{location} = $locations{ $item->{location} };
+                                       $other_items->{$key}->{imageurl} = getitemtypeimagesrc() . "/" . $itemtypes{ $item->{itype} }->{imageurl};
                 }
-
                 # item is available
                 else {
                     $can_place_holds = 1;
                     $available_count++;
-                    $available_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} }->{count}++ if $item->{'homebranch'};
-                    $available_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} }->{branchname} = $item->{'branchname'};
-                    $available_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} }->{location} = $locations{ $item->{location} };
-                    $available_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} }->{itemcallnumber} = $item->{itemcallnumber};
-            $available_items->{ $item->{C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch'?'homebranch':'holdingbranch'} . '--' . $item->{location} . $item->{'itype'} . $item->{'itemcallnumber'} }->{imageurl} = getitemtypeimagesrc() . "/" . $itemtypes{ $item->{itype} }->{imageurl};
+                                       $available_items->{$prefix}->{count}++ if $item->{homebranch};
+                                       foreach (qw(branchname itemcallnumber)) {
+                       $available_items->{$prefix}->{$_} = $item->{$_};
+                                       }
+                                       $available_items->{$prefix}->{location} = $locations{ $item->{location} };
+                                       $available_items->{$prefix}->{imageurl} = getitemtypeimagesrc() . "/" . $itemtypes{ $item->{itype} }->{imageurl};
                 }
             }
         }    # notforloan, item level and biblioitem level
@@ -1491,19 +1477,16 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g;
           ? C4::Context->preference('maxItemsinSearchResults') - 1
           : 1;
         for my $key ( sort keys %$onloan_items ) {
-            $onloanitemscount++;
-            push @onloan_items_loop, $onloan_items->{$key}
-              unless $onloanitemscount > $maxitems;
+            (++$onloanitemscount > $maxitems) and last;
+            push @onloan_items_loop, $onloan_items->{$key};
         }
         for my $key ( sort keys %$other_items ) {
-            $otheritemscount++;
-            push @other_items_loop, $other_items->{$key}
-              unless $otheritemscount > $maxitems;
+            (++$otheritemscount > $maxitems) and last;
+            push @other_items_loop, $other_items->{$key};
         }
         for my $key ( sort keys %$available_items ) {
-            $availableitemscount++;
+            (++$availableitemscount > $maxitems) and last;
             push @available_items_loop, $available_items->{$key}
-              unless $availableitemscount > $maxitems;
         }
 
 # last check for norequest : if itemtype is notforloan, it can't be reserved either, whatever the items
@@ -1668,6 +1651,8 @@ sub NZanalyse {
     else {
         $string =~ s/__X__/"$commacontent"/ if $commacontent;
         $string =~ s/-|\.|\?|,|;|!|'|\(|\)|\[|\]|{|}|"|&|\+|\*|\// /g;
+        #remove trailing blank at the beginning
+        $string =~ s/^ //g;
         warn "leaf:$string" if $DEBUG;
 
         # parse the string in in operator/operand/value again
@@ -1682,14 +1667,14 @@ sub NZanalyse {
             $left     = $1;
             $operator = $2;
             $right    = $3;
-            warn
-"handling unless (operator)... left:$left operator:$operator right:$right"
-              if $DEBUG;
+            warn
+"handling unless (operator)... left:$left operator:$operator right:$right"
+              if $DEBUG;
         }
         my $results;
 
 # strip adv, zebra keywords, currently not handled in nozebra: wrdl, ext, phr...
-        $left =~ s/[, ].*$//;
+        $left =~ s/ .*$//;
 
         # automatic replace for short operators
         $left = 'title'            if $left =~ '^ti$';
@@ -1698,7 +1683,7 @@ sub NZanalyse {
         $left = 'subject'          if $left =~ '^su$';
         $left = 'koha-Auth-Number' if $left =~ '^an$';
         $left = 'keyword'          if $left =~ '^kw$';
-        warn "handling leaf... left:$left operator:$operator right:$right";
+        warn "handling leaf... left:$left operator:$operator right:$right" if $DEBUG;
         if ( $operator && $left ne 'keyword' ) {
 
             #do a specific search
@@ -1708,7 +1693,7 @@ sub NZanalyse {
               $dbh->prepare(
 "SELECT biblionumbers,value FROM nozebra WHERE server=? AND indexname=? AND value $operator ?"
               );
-            warn "$left / $operator / $right\n";
+            warn "$left / $operator / $right\n" if $DEBUG;
 
             # split each word, query the DB and build the biblionumbers result
             #sanitizing leftpart
@@ -1717,7 +1702,7 @@ sub NZanalyse {
                 my $biblionumbers;
                 $_ =~ s/^\s+|\s+$//;
                 next unless $_;
-                warn "EXECUTE : $server, $left, $_";
+                warn "EXECUTE : $server, $left, $_" if $DEBUG;
                 $sth->execute( $server, $left, $_ )
                   or warn "execute failed: $!";
                 while ( my ( $line, $value ) = $sth->fetchrow ) {
@@ -1728,12 +1713,12 @@ sub NZanalyse {
                       unless ( $right =~ /^\d+$/ && $value =~ /\D/ );
                     warn "result : $value "
                       . ( $right  =~ /\d/ ) . "=="
-                      . ( $value =~ /\D/?$line:"" );         #= $line";
+                      . ( $value =~ /\D/?$line:"" ) if $DEBUG;         #= $line";
                 }
 
 # do a AND with existing list if there is one, otherwise, use the biblionumbers list as 1st result list
                 if ($results) {
-                    warn "NZAND";        
+                    warn "NZAND" if $DEBUG;
                     $results = NZoperatorAND($biblionumbers,$results);
                 }
                 else {
@@ -1774,9 +1759,7 @@ sub NZanalyse {
         warn "return : $results for LEAF : $string" if $DEBUG;
         return $results;
     }
-    warn "---------"       if $DEBUG;
-    warn "Leave NZanalyse" if $DEBUG;
-    warn "---------"       if $DEBUG;
+    warn "---------\nLeave NZanalyse\n---------" if $DEBUG;
 }
 
 sub NZoperatorAND{
@@ -1796,13 +1779,13 @@ sub NZoperatorAND{
         my $value = $_;
         my $countvalue;
         ( $value, $countvalue ) = ( $1, $2 ) if ($value=~/(.*)-(\d+)$/);
-        if ( $rightresult =~ /$value-(\d+);/ ) {
+        if ( $rightresult =~ /\Q$value\E-(\d+);/ ) {
             $countvalue = ( $1 > $countvalue ? $countvalue : $1 );
             $finalresult .=
                 "$value-$countvalue;$value-$countvalue;";
         }
     }
-    warn " $finalresult \n" if $DEBUG;
+    warn "NZAND DONE : $finalresult \n" if $DEBUG;
     return $finalresult;
 }