@@ -, +, @@ NP : [200a][, 200b][ 200d][-- 152b --][ ; 200c][ (200f)] [001*] [ppn: 009*] fields don't exist). NP : Name, D.-- NP -- 23849 ppn: my_ppn correct. in a 7XX field) --- C4/AuthoritiesMarc.pm | 56 ++++++++++++---------- .../en/includes/authorities-search-results.inc | 13 +++-- .../modules/authorities/searchresultlist-auth.tt | 6 +-- .../en/includes/authorities-search-results.inc | 13 +++-- t/db_dependent/AuthoritiesMarc.t | 8 ++-- 5 files changed, 49 insertions(+), 47 deletions(-) --- a/C4/AuthoritiesMarc.pm +++ a/C4/AuthoritiesMarc.pm @@ -908,6 +908,8 @@ sub BuildSummary { # for MARC21, the authority type summary displays a label meant for # display if (C4::Context->preference('marcflavour') ne 'UNIMARC') { + $summary{label} = $authref->{summary}; + } else { $summary{summary} = $authref->{summary}; } } @@ -942,35 +944,37 @@ sub BuildSummary { # suit the MARC21 version, so for now the "templating" # feature will be enabled only for UNIMARC for backwards # compatibility. - if ($summary_template and C4::Context->preference('marcflavour') eq 'UNIMARC') { - my @fields = $record->fields(); -# $reported_tag = '$9'.$result[$counter]; - my @repets; - foreach my $field (@fields) { - my $tag = $field->tag(); - my $tagvalue = $field->as_string(); - my $localsummary= $summary_template; - $localsummary =~ s/\[(.?.?.?.?)$tag\*(.*?)\]/$1$tagvalue$2\[$1$tag$2\]/g; - if ($tag<10) { - if ($tag eq '001') { - $reported_tag.='$3'.$field->data(); - } - } else { - my @subf = $field->subfields; - for my $i (0..$#subf) { - my $subfieldcode = $subf[$i][0]; - my $subfieldvalue = $subf[$i][1]; - my $tagsubf = $tag.$subfieldcode; - $localsummary =~ s/\[(.?.?.?.?)$tagsubf(.*?)\]/$1$subfieldvalue$2\[$1$tagsubf$2\]/g; + if ($summary{summary} and C4::Context->preference('marcflavour') eq 'UNIMARC') { + my @matches = ($summary{summary} =~ m/\[(.*?)(\d{3})([\*a-z0-9])(.*?)\]/g); + my (@textbefore, @tag, @subtag, @textafter); + for(my $i = 0; $i < scalar @matches; $i++){ + push @textbefore, $matches[$i] if($i%4 == 0); + push @tag, $matches[$i] if($i%4 == 1); + push @subtag, $matches[$i] if($i%4 == 2); + push @textafter, $matches[$i] if($i%4 == 3); + } + for(my $i = scalar @tag; $i >= 0; $i--){ + my $textbefore = $textbefore[$i] || ''; + my $tag = $tag[$i] || ''; + my $subtag = $subtag[$i] || ''; + my $textafter = $textafter[$i] || ''; + my $value = ''; + my $field = $record->field($tag); + if ( $field ) { + if($subtag eq '*') { + if($tag < 10) { + $value = $textbefore . $field->data() . $textafter; + } + } else { + my @subfields = $field->subfield($subtag); + if(@subfields > 0) { + $value = $textbefore . join (" - ", @subfields) . $textafter; + } } } - if ($localsummary ne $summary_template) { - $localsummary =~ s/\[(.*?)\]//g; - $localsummary =~ s/\n/
/g; - push @repets, $localsummary; - } + $summary{summary} =~ s/\[\Q$textbefore$tag$subtag$textafter\E\]/$value/; } - $summary{repets} = \@repets; + $summary{summary} =~ s/\\n/
/g; } my @authorized; my @notes; --- a/koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search-results.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search-results.inc @@ -50,13 +50,12 @@ [% END %] [% END %] [% BLOCK authresult %] - [% IF ( summary.summary ) %][% summary.summary | html %]:[% END %] -
- [% FOREACH repet IN summary.repets %] - [% repet | html %] - [% UNLESS loop.last %] | [% END %] - [% END %] -
+ [% IF ( summary.label ) %][% summary.label | html %]:[% END %] + [% IF summary.summary %] +
+ [% summary.summary %] +
+ [% END %] [% UNLESS ( summary.summaryonly ) %]
[% FOREACH authorize IN summary.authorized %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tt @@ -73,9 +73,9 @@ function doauth(authid, index, repet) [% PROCESS authresult summary=resul.summary %] [% resul.used %] times - [% IF resul.summary && resul.summary.repets && resul.summary.repets.size > 1 %] - [% FOREACH repet IN resul.summary.repets %] - [% loop.count %] + [% IF resul.summary && resul.summary.authorized && resul.summary.authorized.size > 1 %] + [% FOREACH authorized IN resul.summary.authorized %] + [% loop.count %] [% END %] [% ELSE %] choose --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/authorities-search-results.inc +++ a/koha-tmpl/opac-tmpl/bootstrap/en/includes/authorities-search-results.inc @@ -50,13 +50,12 @@ [% END # / BLOCK showreference %] [% BLOCK authresult %] - [% IF ( summary.summary ) %][% summary.summary | html %]:[% END %] -
- [% FOREACH repet IN summary.repets %] - [% repet | html %] - [% UNLESS loop.last %] | [% END %] - [% END %] -
+ [% IF ( summary.label ) %][% summary.label | html %]:[% END %] + [% IF summary.summary %] +
+ [% summary.summary %] +
+ [% END %] [% UNLESS ( summary.summaryonly ) %]
[% FOREACH authorize IN summary.authorized %] --- a/t/db_dependent/AuthoritiesMarc.t +++ a/t/db_dependent/AuthoritiesMarc.t @@ -61,6 +61,8 @@ my $dbh = C4::Context->dbh; $dbh->{AutoCommit} = 0; $dbh->{RaiseError} = 1; +t::lib::Mocks::mock_preference('marcflavour', 'MARC21'); + is(BuildAuthHierarchies(3, 1), '1,2,3', "Built linked authtrees hierarchy string"); my $expectedhierarchy = [ [ { @@ -135,7 +137,7 @@ my $expected_marc21_summary = { } ], 'seefrom' => [], - 'summary' => 'Geographic Name', + 'label' => 'Geographic Name', 'type' => 'Geographic Name' }; is_deeply( @@ -178,9 +180,7 @@ my $expected_unimarc_name_summary = { 'otherscript' => [], 'seealso' => [], 'seefrom' => [], - 'repets' => [ - 'Fossey, Brigitte' - ], + 'summary' => 'Fossey, Brigitte', 'type' => 'Auteur' }; --