Bug 23463: Fix CancelReceipt.t
[koha-ffzg.git] / C4 / AuthoritiesMarc.pm
index 165ef36..9d059a0 100644 (file)
@@ -113,8 +113,6 @@ sub SearchAuthorities {
     $sortby="" unless $sortby;
     my $query;
     my $qpquery = '';
-    my $QParser;
-    $QParser = C4::Context->queryparser if (C4::Context->preference('UseQueryParser'));
     my $attr = '';
         # the marclist may contain "mainentry". In this case, search the tag_to_report, that depends on
         # the authtypecode. Then, search on $a of this tag_to_report
@@ -133,9 +131,6 @@ sub SearchAuthorities {
         if ($n>1){
             while ($n>1){$query= "\@or ".$query;$n--;}
         }
-        if ($QParser) {
-            $qpquery .= '(authtype:' . join('|| authtype:', @auths) . ')';
-        }
     }
 
     my $dosearch;
@@ -163,9 +158,12 @@ sub SearchAuthorities {
                 elsif ( @$tags[$i] eq "thesaurus" ) {
                     $attr = " \@attr 1=Subject-heading-thesaurus ";
                 }
-                else {    # Assume any if no index was specified
+                elsif ( @$tags[$i] eq "all" ) {
                     $attr = " \@attr 1=Any ";
                 }
+                else {    # Use the index passed in params
+                    $attr = " \@attr 1=" . @$tags[$i] . " ";
+                }
             }         #if @$tags[$i]
             else {    # Assume any if no index was specified
                 $attr = " \@attr 1=Any ";
@@ -200,9 +198,6 @@ sub SearchAuthorities {
             $q2 .= $attr;
             $dosearch = 1;
             ++$attr_cnt;
-            if ($QParser) {
-                $qpquery .= " $tags->[$i]:\"$value->[$i]\"";
-            }
         }    #if value
     }
     ##Add how many queries generated
@@ -223,21 +218,8 @@ sub SearchAuthorities {
     } elsif ($sortby eq 'AuthidDsc') {
         $orderstring = '@attr 7=2 @attr 4=109 @attr 1=Local-Number 0';
     }
-    if ($QParser) {
-        $qpquery .= ' all:all' unless $value->[0];
-
-        if ( $value->[0] =~ m/^qp=(.*)$/ ) {
-            $qpquery = $1;
-        }
-
-        $qpquery .= " #$sortby" unless $sortby eq '';
-
-        $QParser->parse( $qpquery );
-        $query = $QParser->target_syntax('authorityserver');
-    } else {
-        $query=($query?$query:"\@attr 1=_ALLRECORDS \@attr 2=103 ''");
-        $query="\@or $orderstring $query" if $orderstring;
-    }
+    $query=($query?$query:"\@attr 1=_ALLRECORDS \@attr 2=103 ''");
+    $query="\@or $orderstring $query" if $orderstring;
 
     $offset = 0 if not defined $offset or $offset < 0;
     my $counter = $offset;
@@ -572,7 +554,8 @@ sub AddAuthority {
         my $marcorgcode = C4::Context->preference('MARCOrgCode');
         if ( $userenv && $userenv->{'branch'} ) {
             $library = Koha::Libraries->find( $userenv->{'branch'} );
-            $marcorgcode = $library->get_effective_marcorgcode;
+            # userenv's library could not exist because of a trick in misc/commit_file.pl (see FIXME and set_userenv statement)
+            $marcorgcode = $library ? $library->get_effective_marcorgcode : $marcorgcode;
         }
                if (!$record->leader) {
                        $record->leader($leader);
@@ -754,14 +737,8 @@ sub FindDuplicateAuthority {
     my $auth_tag_to_report = Koha::Authority::Types->find($authtypecode)->auth_tag_to_report;
 #     warn "record :".$record->as_formatted."  auth_tag_to_report :$auth_tag_to_report";
     # build a request for SearchAuthorities
-    my $QParser;
-    $QParser = C4::Context->queryparser if (C4::Context->preference('UseQueryParser'));
-    my $op;
-    if ($QParser) {
-        $op = '&&';
-    } else {
-        $op = 'and';
-    }
+    my $op = 'AND';
+    $authtypecode =~ s#/#\\/#; # GENRE/FORM contains forward slash which is a reserved character
     my $query='at:'.$authtypecode.' ';
     my $filtervalues=qr([\001-\040\Q!'"`#$%&*+,-./:;<=>?@(){[}_|~\E\]]);
     if ($record->field($auth_tag_to_report)) {
@@ -991,14 +968,14 @@ sub BuildSummary {
             if ($type eq 'subfi') {
                 push @seefrom, {
                     heading => $field->as_string($marc21subfields),
-                    hemain  => $field->subfield( substr($marc21subfields, 0, 1) ),
+                    hemain  => scalar $field->subfield( substr($marc21subfields, 0, 1) ),
                     type    => ($field->subfield('i') || ''),
                     field   => $field->tag(),
                 };
             } else {
                 push @seefrom, {
                     heading => $field->as_string($marc21subfields),
-                    hemain  => $field->subfield( substr($marc21subfields, 0, 1) ),
+                    hemain  => scalar $field->subfield( substr($marc21subfields, 0, 1) ),
                     type    => $type,
                     field   => $field->tag(),
                 };
@@ -1014,8 +991,8 @@ sub BuildSummary {
             if ($type eq 'subfi') {
                 push @seealso, {
                     heading => $field->as_string($marc21subfields),
-                    hemain  => $field->subfield( substr($marc21subfields, 0, 1) ),
-                    type    => $field->subfield('i'),
+                    hemain  => scalar $field->subfield( substr($marc21subfields, 0, 1) ),
+                    type    => scalar $field->subfield('i'),
                     field   => $field->tag(),
                     search  => $field->as_string($marc21subfields) || '',
                     authid  => $field->subfield('9') || ''
@@ -1023,7 +1000,7 @@ sub BuildSummary {
             } else {
                 push @seealso, {
                     heading => $field->as_string($marc21subfields),
-                    hemain  => $field->subfield( substr($marc21subfields, 0, 1) ),
+                    hemain  => scalar $field->subfield( substr($marc21subfields, 0, 1) ),
                     type    => $type,
                     field   => $field->tag(),
                     search  => $field->as_string($marc21subfields) || '',
@@ -1471,10 +1448,11 @@ sub merge {
                 my $newtag = $tags_new && @$tags_new
                   ? _merge_newtag( $tag, $tags_new )
                   : $tag;
+                my $controlled_ind = $authto->controlled_indicators({ record => $MARCto, biblio_tag => $newtag });
                 my $field_to = MARC::Field->new(
                     $newtag,
-                    $field->indicator(1),
-                    $field->indicator(2),
+                    $controlled_ind->{ind1} // $field->indicator(1),
+                    $controlled_ind->{ind2} // $field->indicator(2),
                     9 => $mergeto, # Needed to create field, will be moved
                 );
                 my ( @prefix, @postfix );
@@ -1500,6 +1478,15 @@ sub merge {
                 foreach my $subfield ( @prefix, @record_to, @postfix ) {
                     $field_to->add_subfields($subfield->[0] => $subfield->[1]);
                 }
+                if( exists $controlled_ind->{sub2} ) { # thesaurus info
+                    if( defined $controlled_ind->{sub2} ) {
+                        # Add or replace
+                        $field_to->update( 2 => $controlled_ind->{sub2} );
+                    } else {
+                        # Key alerts us here to remove $2
+                        $field_to->delete_subfield( code => '2' );
+                    }
+                }
                 # Move $9 to the end
                 $field_to->delete_subfield( code => '9' );
                 $field_to->add_subfields( 9 => $mergeto );