From bb46752e7bffbc14d969f6b926c1ab371b91c91f Mon Sep 17 00:00:00 2001 From: Arthur Bousquet Date: Tue, 3 Mar 2020 15:33:55 -0500 Subject: [PATCH] Bug 11361 - Fixing database and merge conflicts Bug 11361 - Fixing z3950servers.tt problems Bug 11361 - Re-adding the 'Attributes' column Bug 11361 - Fixing z3950servers.tt problems --- C4/Auth.pm | 1 + C4/Breeding.pm | 10 +- Koha/Schema/Result/Z3950server.pm | 8 + admin/z3950servers.pl | 2 +- .../data/mysql/atomicupdate/bug11361.perl | 8 + .../en/modules/admin/preferences/opac.pref | 6 + .../prog/en/modules/admin/z3950servers.tt | 11 +- .../bootstrap/en/includes/masthead.inc | 5 + .../bootstrap/en/includes/opac-bottom.inc | 12 + .../bootstrap/en/modules/opac-z3950-search.tt | 304 ++++++++++++++++++ opac/opac-z3950-search.pl | 117 +++++++ 11 files changed, 477 insertions(+), 7 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug11361.perl create mode 100644 koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-z3950-search.tt create mode 100755 opac/opac-z3950-search.pl diff --git a/C4/Auth.pm b/C4/Auth.pm index d2d7c0f392..f31cb05ff6 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -562,6 +562,7 @@ sub get_template_and_user { OPACURLOpenInNewWindow => "" . C4::Context->preference("OPACURLOpenInNewWindow"), OPACUserCSS => "" . C4::Context->preference("OPACUserCSS"), OpacAuthorities => C4::Context->preference("OpacAuthorities"), + OpacZ3950 => C4::Context->preference("OpacZ3950"), opac_css_override => $ENV{'OPAC_CSS_OVERRIDE'}, opac_search_limit => $opac_search_limit, opac_limit_override => $opac_limit_override, diff --git a/C4/Breeding.pm b/C4/Breeding.pm index 2a4ce3c2ac..8b11afd3c6 100644 --- a/C4/Breeding.pm +++ b/C4/Breeding.pm @@ -126,7 +126,7 @@ The second parameter $template is a Template object. The routine uses this param =cut sub Z3950Search { - my ($pars, $template)= @_; + my ($pars, $template, $fromopac)= @_; my @id= @{$pars->{id}}; my $page= $pars->{page}; @@ -192,7 +192,7 @@ sub Z3950Search { for ($i = ($page-1)*20; $i < (($numresults < ($page*20)) ? $numresults : ($page*20)); $i++) { if ( $oResult[$k]->record($i) ) { undef $error; - ( $res, $error ) = _handle_one_result( $oResult[$k]->record($i), $servers[$k], ++$imported, $biblionumber, $xslh ); #ignores error in sequence numbering + ( $res, $error ) = _handle_one_result( $oResult[$k]->record($i), $servers[$k], ++$imported, $biblionumber, $xslh, $fromopac ); #ignores error in sequence numbering push @breeding_loop, $res if $res; push @errconn, { server => $servers[$k]->{servername}, error => $error, seq => $i+1 } if $error; } @@ -291,7 +291,7 @@ sub _build_query { } sub _handle_one_result { - my ( $zoomrec, $servhref, $seq, $bib, $xslh )= @_; + my ( $zoomrec, $servhref, $seq, $bib, $xslh, $fromopac )= @_; my $raw= $zoomrec->raw(); my $marcrecord; @@ -304,7 +304,7 @@ sub _handle_one_result { } SetUTF8Flag($marcrecord); my $error; - ( $marcrecord, $error ) = _do_xslt_proc($marcrecord, $servhref, $xslh); + ( $marcrecord, $error ) = _do_xslt_proc($marcrecord, $servhref, $xslh) unless $fromopac; my $batch_id = GetZ3950BatchId($servhref->{servername}); my $breedingid = AddBiblioToBatch($batch_id, $seq, $marcrecord, 'UTF-8', 0); @@ -318,6 +318,7 @@ sub _handle_one_result { { biblionumber => $bib, server => $servhref->{servername}, + host => $servhref->{host}, breedingid => $breedingid, }, $marcrecord) if $breedingid; return ( $row, $error ); @@ -350,6 +351,7 @@ sub _do_xslt_proc { sub _add_rowdata { my ($row, $record)=@_; my %fetch= ( + biblionumber => 'biblio.biblionumber', title => 'biblio.title', author => 'biblio.author', isbn =>'biblioitems.isbn', diff --git a/Koha/Schema/Result/Z3950server.pm b/Koha/Schema/Result/Z3950server.pm index 65ecc2ec1a..0e798d4037 100644 --- a/Koha/Schema/Result/Z3950server.pm +++ b/Koha/Schema/Result/Z3950server.pm @@ -126,6 +126,12 @@ __PACKAGE__->table("z3950servers"); is_nullable: 1 size: 255 +=head2 opac + + data_type: 'tinyint' + is_nullable: 1 + size: 1 + =cut __PACKAGE__->add_columns( @@ -175,6 +181,8 @@ __PACKAGE__->add_columns( { data_type => "longtext", is_nullable => 1 }, "attributes", { data_type => "varchar", is_nullable => 1, size => 255 }, + "opac", + { data_type => "tinyint", is_nullable => 1, size => 1 }, ); =head1 PRIMARY KEY diff --git a/admin/z3950servers.pl b/admin/z3950servers.pl index 89c41d5034..a20e1a0f18 100755 --- a/admin/z3950servers.pl +++ b/admin/z3950servers.pl @@ -66,7 +66,7 @@ if( $op eq 'delete_confirmed' && $id ) { $id = 0; } elsif ( $op eq 'add_validated' ) { my @fields=qw/host port db userid password rank syntax encoding timeout - recordtype checked servername servertype sru_options sru_fields attributes + recordtype checked servername servertype sru_options sru_fields attributes opac add_xslt/; my $formdata = _form_data_hashref( $input, \@fields ); if( $id ) { diff --git a/installer/data/mysql/atomicupdate/bug11361.perl b/installer/data/mysql/atomicupdate/bug11361.perl new file mode 100644 index 0000000000..fd221198e2 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug11361.perl @@ -0,0 +1,8 @@ +$DBversion = "XXX"; +if( CheckVersion( $DBversion ) ) { + $dbh->do("ALTER TABLE z3950servers ADD COLUMN opac TINYINT(1);"); + $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('OPACZ3950','0','','Allow patrons to search for bibliographic records in other libraries via Z39.50.','YesNo');"); + print "Add opac column to z3950servers table."; + print "Add OPACZ3950 preference."; + SetVersion($DBversion); +} diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index b8adc80dd5..bbfe52c8aa 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -426,6 +426,12 @@ OPAC: yes: Allow no: "Don't allow" - patrons to search your authority records. + - + - pref: OpacZ3950 + choices: + yes: Allow + no: "Don't allow" + - patrons to search for bibliographic records in other libraries via Z39.50. - - pref: opacbookbag choices: diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt index 45117ad44d..9e608f05f0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt @@ -79,6 +79,13 @@ [% END %] +
  • + [% IF ( server.opac ) %] + + [% ELSE %] + + [% END %] +
  • [% IF (server.servertype||type) == 'zed' %] @@ -161,8 +168,7 @@ You searched for [% searchfield | html %] [% END %] - - + [% FOREACH loo IN loop %] @@ -176,6 +182,7 @@ [% END %] +
    TargetHostname/PortDatabaseUseridPasswordPreselectedRankSyntaxEncodingTimeoutRecord typeAttributesActions
    TargetHostname/PortDatabaseUseridPasswordPreselectedRankSyntaxEncodingTimeoutRecord typeAttributesOpacOptions
    [% loo.attributes | html %][% IF loo.opac %]X[% END %]
    diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc index e3895a1e76..06a6bbe293 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc +++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc @@ -310,6 +310,11 @@ Authority search [% END %] + [% IF Koha.Preference( 'OpacZ3950' ) %] +
  • + Z39.50 Search +
  • + [% END %] [% IF ( ( Koha.Preference( 'opacuserlogin' ) == 1 ) && ( Koha.Preference( 'reviewson' ) == 1 ) && ( Koha.Preference( 'OpacShowRecentComments' ) == 1 ) ) %]