From 6a4d48a4ca88e08fe284440d75ef3ff4ede6c871 Mon Sep 17 00:00:00 2001 From: Nahuel ANGELINETTI Date: Tue, 2 Jun 2009 16:55:52 +0200 Subject: [PATCH] (bug #3281) change the way to parse item's summary Content-Type: text/plain; charset="utf-8" This change how to calculate the item's summary, and fix the issue when you have repeated fields. Now every line is repeated, still it have values in repeated fields(see bug report). --- C4/Search.pm | 59 +++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 38 insertions(+), 21 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index 26aa031..2799d97 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -1266,33 +1266,50 @@ sub searchResults { if ( $itemtypes{ $oldbiblio->{itemtype} }->{summary} ) { my $summary = $itemtypes{ $oldbiblio->{itemtype} }->{summary}; my @fields = $marcrecord->fields(); - foreach my $field (@fields) { - my $tag = $field->tag(); - my $tagvalue = $field->as_string(); - if (! utf8::is_utf8($tagvalue)) { - utf8::decode($tagvalue); + + my $newsummary; + foreach my $line ( "$summary\n" =~ /(.*)\n/g ){ + my $tags = {}; + foreach my $tag ( $line =~ /\[(\d{3}[\w|\d])\]/ ) { + $tag =~ /(.{3})(.)/; + if($marcrecord->field($1)){ + my @abc = $marcrecord->field($1)->subfield($2); + $tags->{$tag} = $#abc + 1 ; + } + } + + # We catch how many times to repeat this line + my $max = 0; + foreach my $tag (keys(%$tags)){ + $max = $tags->{$tag} if($tags->{$tag} > $max); } + + # we replace, and repeat each line + for (my $i = 0 ; $i < $max ; $i++){ + my $newline = $line; + + foreach my $tag ( $newline =~ /\[(\d{3}[\w|\d])\]/g ) { + $tag =~ /(.{3})(.)/; + + if($marcrecord->field($1)){ + my @repl = $marcrecord->field($1)->subfield($2); + + my $subfieldvalue = @repl[$i]; + + if (! utf8::is_utf8($subfieldvalue)) { + utf8::decode($subfieldvalue); + } - $summary =~ - s/\[(.?.?.?.?)$tag\*(.*?)]/$1$tagvalue$2\[$1$tag$2]/g; - unless ( $tag < 10 ) { - my @subf = $field->subfields; - for my $i ( 0 .. $#subf ) { - my $subfieldcode = $subf[$i][0]; - my $subfieldvalue = $subf[$i][1]; - if (! utf8::is_utf8($subfieldvalue)) { - utf8::decode($subfieldvalue); + $newline =~ s/\[$tag\]/$subfieldvalue/g; } - my $tagsubf = $tag . $subfieldcode; - $summary =~ -s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; } + $newsummary .= "$newline\n"; } } - # FIXME: yuk - $summary =~ s/\[(.*?)]//g; - $summary =~ s/\n//g; - $oldbiblio->{summary} = $summary; + + $newsummary =~ s/\[(.*?)]//g; + $newsummary =~ s/\n//g; + $oldbiblio->{summary} = $newsummary; } # save an author with no tag, for the > link -- 1.6.0.4