[Koha-patches] [PATCH] Bug 8071: link between bib and authorities with the authid

Fridolyn SOMERS fridolyn.somers at biblibre.com
Wed Jul 25 18:07:03 CEST 2012


---
 C4/AuthoritiesMarc.pm                              |    2 +-
 C4/Biblio.pm                                       |   18 +++++++---
 authorities/blinddetail-biblio-search.pl           |    1 +
 .../authorities/blinddetail-biblio-search.tt       |   38 ++++++++++----------
 4 files changed, 35 insertions(+), 24 deletions(-)

diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm
index ece46a3..00cbd8d 100644
--- a/C4/AuthoritiesMarc.pm
+++ b/C4/AuthoritiesMarc.pm
@@ -1362,7 +1362,7 @@ sub merge {
                 if ($auth_number==$mergefrom) {
                 my $field_to=MARC::Field->new(($tag_to?$tag_to:$tag),$field->indicator(1),$field->indicator(2),"9"=>$mergeto);
 		my $exclude='9';
-                foreach my $subfield (@record_to) {
+                foreach my $subfield (grep {$_->[0] ne 9} @record_to) {
                     $field_to->add_subfields($subfield->[0] =>$subfield->[1]);
 		    $exclude.= $subfield->[0];
                 }
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index f8ba099..6a9be6c 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -1721,10 +1721,13 @@ sub GetMarcSubjects {
             if ( $counter != 0 ) {
                 $operator = ' and ';
             }
-            if ( $code eq 9 ) {
+            if ( $code eq 9 and $linkvalue ne " 0 ") {
                 $found9 = 1;
                 @link_loop = ( { 'limit' => 'an', link => "$linkvalue" } );
             }
+            if ( $code eq 9 and $linkvalue eq " 0 ") {
+                next;
+            }
             if ( not $found9 ) {
                 push @link_loop, { 'limit' => $subject_limit, link => $linkvalue, operator => $operator };
             }
@@ -1780,7 +1783,7 @@ sub GetMarcAuthors {
         my $count_auth = 0;
 
         # if there is an authority link, build the link with Koha-Auth-Number: subfield9
-        my $subfield9 = $field->subfield('9');
+        my $found9 ;
         for my $authors_subfield (@subfields) {
 
             # don't load unimarc subfields 3, 5
@@ -1795,9 +1798,14 @@ sub GetMarcAuthors {
             }
 
             # if we have an authority link, use that as the link, otherwise use standard searching
-            if ($subfield9) {
-                @link_loop = ( { 'limit' => 'an', link => "$subfield9" } );
-            } else {
+            if ( $subfieldcode eq 9 and $linkvalue ne " 0 ") {
+                $found9 = 1;
+                @link_loop = ( { 'limit' => 'an', link => "$linkvalue" } );
+            }
+            if ( not $found9 ) {
+                push @link_loop, { 'limit' => 'au', link => $linkvalue, operator => $operator };
+            }
+            unless ($found9){
 
                 # reset $linkvalue if UNIMARC author responsibility
                 if ( $marcflavour eq 'UNIMARC' and ( $authors_subfield->[0] eq "4" ) ) {
diff --git a/authorities/blinddetail-biblio-search.pl b/authorities/blinddetail-biblio-search.pl
index 7de7db3..469676a 100755
--- a/authorities/blinddetail-biblio-search.pl
+++ b/authorities/blinddetail-biblio-search.pl
@@ -84,6 +84,7 @@ if ($authid) {
     # Get all values for each distinct subfield
     my %subfields;
     for ( $field->subfields ) {
+        next if $_->[0] == "9";
         my $letter = $_->[0];
         next if defined $subfields{$letter};
         my @values = $field->subfield($letter);
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tt
index 56ed94f..b8793ee 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tt
@@ -13,24 +13,6 @@
         }
 
         var field_start = whichfield.parentNode.parentNode;
-      
-        // browse all its subfields (clear and $9)
-        var subfields = field_start.getElementsByTagName('input');
-        var re = /^tag_\d*_code_/;
-        for(var i=0, len = subfields.length ; i< len ; i++) { // browse all subfields
-            if(subfields[i].getAttribute('name').match(re)){ // it s a subfield
-                var code     = subfields[i];   // code is the first input 
-                var subfield = subfields[i+1]; // subfield the second
-
-            [% IF ( clear ) %]
-                if (subfield){subfield.value="" ;}
-            [% ELSE %]
-                if(code.value=='9'){
-                    subfield.value = "[% authid |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]";
-                }
-            [% END %]
-            }
-        }
 
         // Sets the good number of form fields for the specified subfield
         // Returns false if the cloning failed
@@ -90,6 +72,7 @@
             });
         }
 
+        [% UNLESS ( clear ) %]
         [% FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP %]
             SetSubfieldValues(
                 "[% tag_number |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %][% SUBFIELD_LOO.marc_subfield |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]"
@@ -98,6 +81,25 @@
             [% END %]
             );
         [% END %]
+        [% END %]
+        
+        // browse all its subfields (clear and $9)
+        var subfields = field_start.getElementsByTagName('input');
+        var re = /^tag_\d*_code_/;
+        for(var i=0, len = subfields.length ; i< len ; i++) { // browse all subfields
+            if(subfields[i].getAttribute('name').match(re)){ // it s a subfield
+                var code     = subfields[i];   // code is the first input 
+                var subfield = subfields[i+1]; // subfield the second
+
+            [% IF ( clear ) %]
+                if (subfield){subfield.value="" ;}
+            [% ELSE %]
+                if(code.value=='9'){
+                    subfield.value = "[% authid |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]";
+                }
+            [% END %]
+            }
+        }
 
       	opener.close();
        	window.close();
-- 
1.7.9.5



More information about the Koha-patches mailing list