Bug 14306: Show URL from MARC21 field 555$u under Title Notes/Descriptions
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Mon, 1 Jun 2015 10:58:25 +0000 (12:58 +0200)
committerBrendan A Gallagher <brendan@bywatersolutions.com>
Mon, 7 Mar 2016 17:58:32 +0000 (17:58 +0000)
This patch includes:
[1] Add some logic to GetMarcNotes to embed the contents of MARC21 field
    555$u in a html anchor tag.
[2] Add a unit test for GetMarcNotes in Biblio.t
[3] Remove calls to GetMarcNotes from sendbasket.pl (opac and staff).
    A closer look revealed that the data was not used; the notes in the
    mail of sendbasket are taken from GetBiblioData.

Test plan:
[1] Edit a record. Add one or two URLS in 555$u. Add something in 500$a too.
[2] Check if you can click the URLs in opac and staff detail tab Notes or
    Descriptions.
[3] Run the unit test t/db../Biblio.t
[4] Add something in the cart. Click More Details and send the cart.
    Verify that you have something in Notes (from 500$a).

Signed-off-by: Marc Veron <veron@veron.ch>
Followed test plan. Works as expected. QA tools OK.

Tested with all patches together, works as expected
Signed-off-by: Marc VĂ©ron <veron@veron.ch>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Brendan A Gallagher <brendan@bywatersolutions.com>

C4/Biblio.pm
basket/sendbasket.pl
opac/opac-sendbasket.pl
t/db_dependent/Biblio.t

index 2926a80..e96ffba 100644 (file)
@@ -1816,22 +1816,18 @@ sub GetMarcNotes {
     my %blacklist = map { $_ => 1 } split(/,/,C4::Context->preference('NotesBlacklist'));
     foreach my $field ( $record->field($scope) ) {
         my $tag = $field->tag();
-        if (!$blacklist{$tag}) {
-            my $value = $field->as_string();
-            if ( $note ne "" ) {
-                $marcnote = { marcnote => $note, };
-                push @marcnotes, $marcnote;
-                $note = $value;
-            }
-            if ( $note ne $value ) {
-                $note = $note . " " . $value;
+        next if $blacklist{$tag};
+
+        my $value = $field->as_string();
+        if( $marcflavour ne 'UNIMARC' && $tag =~ /555/ ) {
+            my @sub= $field->subfield('u');
+            foreach my $s (@sub) {
+                next if $s !~ /^http/;
+                my $i= index( $value, $s);
+                $value= substr( $value,0, $i) . "<a href=\"$s\" target=\"_blank\">$s</a>" . substr( $value, $i + length($s) );
             }
         }
-    }
-
-    if ($note) {
-        $marcnote = { marcnote => $note };
-        push @marcnotes, $marcnote;    #load last tag into array
+        push @marcnotes, { marcnote => $value };
     }
     return \@marcnotes;
 }    # end GetMarcNotes
index 83dab55..254d9ff 100755 (executable)
@@ -73,7 +73,6 @@ if ( $email_add ) {
         my $dat              = GetBiblioData($biblionumber);
         next unless $dat;
         my $record           = GetMarcBiblio($biblionumber, 1);
-        my $marcnotesarray   = GetMarcNotes( $record, $marcflavour );
         my $marcauthorsarray = GetMarcAuthors( $record, $marcflavour );
         my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
 
@@ -85,7 +84,6 @@ if ( $email_add ) {
         }
        
 
-        $dat->{MARCNOTES}      = $marcnotesarray;
         $dat->{MARCSUBJCTS}    = $marcsubjctsarray;
         $dat->{MARCAUTHORS}    = $marcauthorsarray;
         $dat->{HASAUTHORS}     = $hasauthors;
index 6b2d62f..97b64fd 100755 (executable)
@@ -86,7 +86,6 @@ if ( $email_add ) {
         my $dat              = GetBiblioData($biblionumber);
         next unless $dat;
         my $record           = GetMarcBiblio($biblionumber, 1);
-        my $marcnotesarray   = GetMarcNotes( $record, $marcflavour );
         my $marcauthorsarray = GetMarcAuthors( $record, $marcflavour );
         my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
 
@@ -98,7 +97,6 @@ if ( $email_add ) {
         }
        
 
-        $dat->{MARCNOTES}      = $marcnotesarray;
         $dat->{MARCSUBJCTS}    = $marcsubjctsarray;
         $dat->{MARCAUTHORS}    = $marcauthorsarray;
         $dat->{HASAUTHORS}     = $hasauthors;
index 32b43ae..27e2306 100755 (executable)
@@ -200,7 +200,6 @@ sub run_tests {
             "(GetMarcISBN) Corretly retrieves ISBN #". ($i + 1));
     }
 
-
     is( GetMarcPrice( $record_for_isbn, $marcflavour ), 100,
         "GetMarcPrice returns the correct value");
     my $newincbiblioitemnumber=$biblioitemnumber+1;
@@ -216,6 +215,17 @@ sub run_tests {
         $biblioitemnumbertotest = $updatedrecord->field($biblioitem_tag)->subfield($biblioitem_subfield);
     }
     is ($newincbiblioitemnumber, $biblioitemnumbertotest);
+
+    # test for GetMarcNotes
+    my $a1= GetMarcNotes( $marc_record, $marcflavour );
+    my $field2 = MARC::Field->new( $marcflavour eq 'UNIMARC'? 300: 555, 0, '', a=> 'Some text', u=> 'http://url-1.com', u=> 'nohttp://something_else' );
+    $marc_record->append_fields( $field2 );
+    my $a2= GetMarcNotes( $marc_record, $marcflavour );
+    my $last= @$a2? $a2->[@$a2-1]->{marcnote}: '';
+    is( @$a2 == @$a1 + 1 && (
+        ( $marcflavour eq 'UNIMARC' && $last eq $field2->as_string() ) ||
+        ( $marcflavour ne 'UNIMARC' && $last =~ /\<a href=/ )),
+        1, 'Test for GetMarcNotes' );
 }
 
 sub mock_marcfromkohafield {
@@ -282,19 +292,19 @@ sub create_issn_field {
 }
 
 subtest 'MARC21' => sub {
-    plan tests => 28;
+    plan tests => 29;
     run_tests('MARC21');
     $dbh->rollback;
 };
 
 subtest 'UNIMARC' => sub {
-    plan tests => 28;
+    plan tests => 29;
     run_tests('UNIMARC');
     $dbh->rollback;
 };
 
 subtest 'NORMARC' => sub {
-    plan tests => 28;
+    plan tests => 29;
     run_tests('NORMARC');
     $dbh->rollback;
 };