From e1eb4548f6056aa042d60bf0de6af80bac8347b0 Mon Sep 17 00:00:00 2001 From: mxbeaulieu Date: Tue, 7 Jul 2015 14:15:13 -0400 Subject: [PATCH] Bug 11297 - Add support for custom PQF attributes for Z39.50 server searches. Adds the "Attributes" field to z3950 servers. The feature here is not quite de same. In the old patches, the attributes were applied to individual query parts if the part already contains "@attr" and the additionnal attribute is not already in the query part. Here, the content of the new field is prepended to all PQF queries sent to the server. This new way of doing is simpler and works for the sponsor. Test plan: I) Apply the patch II) Run updatedatabase.pl 1) Add a new z3950 server with the following parameters: Hostname : catalogue.banq.qc.ca Port : 210 Database : IRIS Syntax : Marc21 2) Perform a z3950 search on that server. Keyword (Any) : egypt 2.1) Nothing Found. 3) Add attributes on the server administration page @attr 4=1 4) Perform the same z3950 search 4.1) A lot of results modified: C4/Breeding.pm modified: Koha/Schema/Result/Z3950server.pm modified: admin/z3950servers.pl new file: installer/data/mysql/atomicupdate/Bug11297_z3950servers_attributes.sql modified: installer/data/mysql/kohastructure.sql modified: koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt --- C4/Breeding.pm | 8 ++++++++ Koha/Schema/Result/Z3950server.pm | 12 ++++++++++-- admin/z3950servers.pl | 2 +- .../Bug11297_z3950servers_attributes.sql | 1 + installer/data/mysql/kohastructure.sql | 1 + .../prog/en/modules/admin/z3950servers.tt | 6 +++++- 6 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/Bug11297_z3950servers_attributes.sql diff --git a/C4/Breeding.pm b/C4/Breeding.pm index 18bf03b..ed5b955 100644 --- a/C4/Breeding.pm +++ b/C4/Breeding.pm @@ -158,6 +158,9 @@ sub Z3950Search { ); my @servers = $rs->all; foreach my $server ( @servers ) { + if(my $attributes = $server->{attributes}){ + $zquery = "$attributes $zquery"; + } $oConnection[$s] = _create_connection( $server ); $oResult[$s] = $server->{servertype} eq 'zed'? @@ -536,6 +539,7 @@ sub Z3950SearchAuth { my $record; my @serverhost; my @servername; + my @server_attributes = (); my @breeding_loop = (); my @oConnection; @@ -621,12 +625,16 @@ sub Z3950SearchAuth { $serverhost[$s] = $server->{host}; $servername[$s] = $server->{servername}; $encoding[$s] = ($server->{encoding}?$server->{encoding}:"iso-5426"); + $server_attributes[$s] = $server->{attributes}; $s++; } ## while fetch } # foreach my $nremaining = $s; for ( my $z = 0 ; $z < $s ; $z++ ) { + if(my $attributes = $server_attributes[$z]){ + $query = "$attributes $query"; + } $oResult[$z] = $oConnection[$z]->search_pqf($query); } diff --git a/Koha/Schema/Result/Z3950server.pm b/Koha/Schema/Result/Z3950server.pm index d3f3f50..8c7872c 100644 --- a/Koha/Schema/Result/Z3950server.pm +++ b/Koha/Schema/Result/Z3950server.pm @@ -120,6 +120,12 @@ __PACKAGE__->table("z3950servers"); data_type: 'mediumtext' is_nullable: 1 +=head2 attributes + + data_type: 'varchar' + is_nullable: 1 + size: 255 + =cut __PACKAGE__->add_columns( @@ -167,6 +173,8 @@ __PACKAGE__->add_columns( { data_type => "mediumtext", is_nullable => 1 }, "add_xslt", { data_type => "mediumtext", is_nullable => 1 }, + "attributes", + { data_type => "varchar", is_nullable => 1, size => 255 }, ); =head1 PRIMARY KEY @@ -182,8 +190,8 @@ __PACKAGE__->add_columns( __PACKAGE__->set_primary_key("id"); -# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-09-01 10:16:04 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:q0y03nGYIt0eDIVui0UUdw +# Created by DBIx::Class::Schema::Loader v0.07042 @ 2015-07-07 12:23:15 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:jyVvIir/Xm1d4t11W2XwZA # You can replace this text with custom code or comments, and it will be preserved on regeneration diff --git a/admin/z3950servers.pl b/admin/z3950servers.pl index df4b99a..3eef182 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 + recordtype checked servername servertype sru_options sru_fields attributes add_xslt/; my $formdata = _form_data_hashref( $input, \@fields ); if( $id ) { diff --git a/installer/data/mysql/atomicupdate/Bug11297_z3950servers_attributes.sql b/installer/data/mysql/atomicupdate/Bug11297_z3950servers_attributes.sql new file mode 100644 index 0000000..a4e56e5 --- /dev/null +++ b/installer/data/mysql/atomicupdate/Bug11297_z3950servers_attributes.sql @@ -0,0 +1 @@ + ALTER TABLE z3950servers ADD COLUMN attributes VARCHAR(255) after add_xslt; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 66895d1..3b6246f 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -2380,6 +2380,7 @@ CREATE TABLE `z3950servers` ( -- connection information for the Z39.50 targets u `sru_options` varchar(255) default NULL, -- options like sru=get, sru_version=1.1; will be passed to the server via ZOOM `sru_fields` mediumtext default NULL, -- contains the mapping between the Z3950 search fields and the specific SRU server indexes `add_xslt` mediumtext default NULL, -- zero or more paths to XSLT files to be processed on the search results + `attributes` VARCHAR(255) default NULL, -- additionnal attributes passed to PQF queries PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 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 0ff1b09..554dad4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt @@ -143,6 +143,9 @@
  • +
  • +
  • +