Bug 29173: Fixed pre-filling of the search form from the "Replace record with ZR39...
authorThibaud Guillot <thibaud.guillot@biblibre.com>
Tue, 29 Mar 2022 14:12:48 +0000 (16:12 +0200)
committerTomas Cohen Arazi <tomascohen@theke.io>
Thu, 9 Feb 2023 13:21:22 +0000 (10:21 -0300)
Now this action has the same pre-filling behaviour as the "Edit" -> "Edit Record" -> "Replace Record via Z39.50/SRU Search" action.
Author Personal - Author Meeting/Conf. - Uniform Title and Subject are filled in if the subfield contains data (like the "Edit->Replace" action).
Unimarc and Marc21 specificities are supported.

Test Plan :

1) You must have a Z39.50/SRU server for authorities
2) Go to an authority detail page (Author - Uniform title - Subject)
3)After go to "Edit"-> "Edit record" -> "Replace record via..." or
choose "Replace Record.." directly
4) See that form is also prefilled with data now

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
cataloguing/z3950_auth_search.pl

index da93dac..5b41320 100755 (executable)
@@ -24,19 +24,51 @@ use C4::Auth qw( get_template_and_user );
 use C4::Output qw( output_html_with_http_headers );
 use C4::Context;
 use C4::Breeding qw( Z3950Search Z3950SearchAuth );
+use MARC::Record;
+use Koha::Authorities;
+use Koha::Authority::Types;
+use C4::AuthoritiesMarc qw( GetAuthority );
 
 my $input        = CGI->new;
 my $dbh          = C4::Context->dbh;
 my $error         = $input->param('error');
 my $authid  = $input->param('authid') || 0;
+
+my $record         = GetAuthority($authid);
+my $marc_flavour = C4::Context->preference('marcflavour');
+my $authfields_mapping = {
+    'authorpersonal'   => $marc_flavour eq 'MARC21' ? '100' : '200',
+    'authorcorp'       => $marc_flavour eq 'MARC21' ? '110' : '210',
+    'authormeetingcon' => $marc_flavour eq 'MARC21' ? '111' : '210',
+    'uniformtitle'     => $marc_flavour eq 'MARC21' ? '130' : '230',
+    'subject'          => $marc_flavour eq 'MARC21' ? '150' : '250',
+};
+
 my $nameany     = $input->param('nameany');
 my $authorany     = $input->param('authorany');
-my $authorcorp     = $input->param('authorcorp');
-my $authorpersonal     = $input->param('authorpersonal');
-my $authormeetingcon     = $input->param('authormeetingcon');
+my $authorcorp =
+    $record
+  ? $record->subfield( $authfields_mapping->{'authorcorp'}, 'a' )
+  : $input->param('authorcorp');
+my $authorpersonal =
+    $record
+  ? $record->subfield( $authfields_mapping->{'authorpersonal'}, 'a' )
+  : $input->param('authorpersonal');
+my $authormeetingcon =
+    $record
+  ? $record->subfield( $authfields_mapping->{'authormeetingcon'}, 'a' )
+  : $input->param('authormeetingcon');
+
 my $title         = $input->param('title');
-my $uniformtitle         = $input->param('uniformtitle');
-my $subject       = $input->param('subject');
+my $uniformtitle =
+    $record
+  ? $record->subfield( $authfields_mapping->{'uniformtitle'}, 'a' )
+  : $input->param('uniformtitle');
+my $subject =
+    $record
+  ? $record->subfield( $authfields_mapping->{'subject'}, 'a' )
+  : $input->param('subject');
+
 my $subjectsubdiv       = $input->param('subjectsubdiv');
 my $srchany       = $input->param('srchany');
 my $op            = $input->param('op')||'';