Bug 4248: Fixes zip code in cities town pull down list.
[koha.git] / C4 / Matcher.pm
index 3bd242b..5da0801 100644 (file)
@@ -13,11 +13,13 @@ package C4::Matcher;
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 use strict;
+use warnings;
+
 use C4::Context;
 use MARC::Record;
 use C4::Search;
@@ -25,8 +27,10 @@ use C4::Biblio;
 
 use vars qw($VERSION);
 
-# set the version for version checking
-$VERSION = 3.00;
+BEGIN {
+       # set the version for version checking
+       $VERSION = 3.01;
+}
 
 =head1 NAME
 
@@ -659,7 +663,7 @@ sub get_matches {
         # build query
         my $query = join(" or ", map { "$matchpoint->{'index'}=$_" } @source_keys);
         # FIXME only searching biblio index at the moment
-        my ($error, $searchresults) = SimpleSearch($query);
+        my ($error, $searchresults, $total_hits) = SimpleSearch($query, 0, $max_matches);
 
         warn "search failed ($query) $error" if $error;
         foreach my $matched (@$searchresults) {
@@ -770,21 +774,23 @@ sub _get_match_keys {
             last FIELD if $j > 0 and $check_only_first_repeat;
             last FIELD if $i > 0 and $j > $#keys;
             my $key = "";
+                       my $string;
             if ($field->is_control_field()) {
-                if ($component->{'length'}) {
-                    $key = _normalize(substr($field->data(), $component->{'offset'}, $component->{'length'}))
-                            # FIXME normalize, substr
-                } else {
-                    $key = _normalize($field->data());
-                }
+                               $string=$field->data();
             } else {
                 foreach my $subfield ($field->subfields()) {
                     if (exists $component->{'subfields'}->{$subfield->[0]}) {
-                        $key .= " " . $subfield->[1];
+                        $string .= " " . $subfield->[1];
                     }
                 }
-                $key = _normalize($key);
+                       }
+            if ($component->{'length'}>0) {
+                    $string= substr($string, $component->{'offset'}, $component->{'length'});
+                            # FIXME normalize, substr
+            } elsif ($component->{'offset'}) {
+                    $string= substr($string, $component->{'offset'});
             }
+            $key = _normalize($string);
             if ($i == 0) {
                 push @keys, $key if $key;
             } else {
@@ -793,7 +799,6 @@ sub _get_match_keys {
         }
     }
     return @keys;
-    
 }
 
 
@@ -813,14 +818,17 @@ sub _parse_match_component {
 # FIXME - default normalizer
 sub _normalize {
     my $value = uc shift;
+    $value =~ s/[.;:,\]\[\)\(\/'"]//g;
     $value =~ s/^\s+//;
-    $value =~ s/^\s+$//;
+    #$value =~ s/^\s+$//;
+    $value =~ s/\s+$//;
     $value =~ s/\s+/ /g;
-    $value =~ s/[.;,\]\[\)\(\/"']//g;
+    #$value =~ s/[.;,\]\[\)\(\/"']//g;
     return $value;
 }
 
 1;
+__END__
 
 =head1 AUTHOR