99dbc5cdf7
From a biblio record, if one wants to add a 600$a information, a pop-up appears. On this new window, on search terms typed and validated, a table result is displayed, with a column "Get It!" allowing the selection of an authority. From here, different cases: 1) If we have a simple authority with 200$a and 200$b subfields, a link "choose" is displayed, working correctly. 2) If the authority has different occurences of 200$a/200$b, numeric links (1 2 and so on) are displayed, one for each occurence. In the example of my screenshot, the line with a "Paul, Korky -- Pauline, Korkette" summary possesses two links : "1" will add "Paul, Korky" whereas "2" will add "Pauline, Korkette" (couldn't come up with a better name ;)). 3) If the authority has 200$x or 200$y subfields defined, several links are also created, when it should not be the case. In our example, "Niclausse, Paul -- Expositions" will create a link "1" for "Niclausse, Paul" and a link "2" for "Expositions". Clicking on the 2nd link leads to the following error: Software error: Can't call method "subfields" on an undefined value at /home/asaurat/workspace/versions/community/authorities/blinddetail-biblio-search.pl line 86. Only the cases 1 and 2 should be handled. The creation of links for subfields like 200$x or 200$y should be removed. This problem is caused by the use of " -- " has separator of authorities with several headings, but also in some heading between main part and subdivisions. This patch corrects this by using an array in authorities summary so that presentation is computed in template. I've choosen to use the pipe separator between authorities with several headings. This may be changed to be configurable. Test plan : - Edit an authority type summary : for example subject (heading on 250) : summary "[250a][ -- 250x]" - Create an authority A1 with one heading and a subdivision : for example a subject : 250$a "History" 250$x "20th century" - Create an authority A2 with several headings. for example a subject : 250$a "History" 250$a "Legends" - Rebuild Zebra queue - Go to OPAC and click on "Authority search" and search on "History" => You will find A1 and A2 : History -- 20th century History | Legends - Go to intranet autorities search and search on "History" => You will find A1 and A2 : History -- 20th century History | Legends - Edit a record using this autorities type as thesaurus : for example on 606$a - Click on thesaurus link and search on "History" => You will find A1 and A2 : History -- 20th century ; 0 times ; choose ; Edit authority History | Legends ; 0 times ; 1 2 ; Edit authority - Click on link "2" to chosse "Legends" => You get "Legends" in heading field : for example 606$a Signed-off-by: Frédéric Demians <f.demians@tamil.fr> I can confirm the problem and the solution. I have tested the patch on a large DB with authorities having multiples headings. There is no regression on bug 4838. Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> Passes all tests and QA script. Without the patch I couldn't choose between multiple headings in the authority plugin, but with the patch it works as described. Signed-off-by: Galen Charlton <gmc@esilibrary.com>
187 lines
6.3 KiB
Perl
Executable file
187 lines
6.3 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
# WARNING: 4-character tab stops here
|
|
|
|
# Copyright 2000-2002 Katipo Communications
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it under the
|
|
# terms of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with Koha; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use CGI;
|
|
use C4::Output;
|
|
use C4::Auth;
|
|
use C4::Context;
|
|
use C4::AuthoritiesMarc;
|
|
use C4::Acquisition;
|
|
use C4::Koha;
|
|
|
|
my $query = new CGI;
|
|
my $op = $query->param('op') || '';
|
|
my $authtypecode = $query->param('authtypecode') || '';
|
|
my $index = $query->param('index') || '';
|
|
my $tagid = $query->param('tagid') || '';
|
|
my $source = $query->param('source') || '';
|
|
my $relationship = $query->param('relationship') || '';
|
|
|
|
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
|
{
|
|
template_name => ( $op eq 'do_search' )
|
|
? 'authorities/searchresultlist-auth.tt'
|
|
: 'authorities/auth_finder.tt',
|
|
query => $query,
|
|
type => 'intranet',
|
|
authnotrequired => 0,
|
|
flagsrequired => { catalogue => 1 },
|
|
}
|
|
);
|
|
|
|
# Authority types loop
|
|
my $authtypes = C4::Koha::getauthtypes();
|
|
my @authtypesloop;
|
|
foreach my $thisauthtype ( keys %$authtypes ) {
|
|
my %row = (
|
|
value => $thisauthtype,
|
|
selected => ( $thisauthtype eq $authtypecode ),
|
|
authtypetext => $authtypes->{$thisauthtype}{'authtypetext'},
|
|
index => $index,
|
|
);
|
|
push @authtypesloop, \%row;
|
|
}
|
|
|
|
# If search form posted
|
|
if ( $op eq "do_search" ) {
|
|
my @marclist = $query->param('marclist');
|
|
my @and_or = $query->param('and_or');
|
|
my @excluding = $query->param('excluding');
|
|
my @operator = $query->param('operator');
|
|
my @value = (
|
|
$query->param('value_mainstr') || undef,
|
|
$query->param('value_main') || undef,
|
|
$query->param('value_any') || undef,
|
|
$query->param('value_match') || undef
|
|
);
|
|
my $orderby = $query->param('orderby') || '';
|
|
my $startfrom = $query->param('startfrom') || 0;
|
|
my $resultsperpage = $query->param('resultsperpage') || 20;
|
|
|
|
my ( $results, $total ) =
|
|
SearchAuthorities( \@marclist, \@and_or, \@excluding, \@operator, \@value,
|
|
$startfrom * $resultsperpage,
|
|
$resultsperpage, $authtypecode, $orderby );
|
|
|
|
# multi page display gestion
|
|
my $displaynext = 0;
|
|
my $displayprev = $startfrom;
|
|
if ( ( $total - ( ( $startfrom + 1 ) * ($resultsperpage) ) ) > 0 ) {
|
|
$displaynext = 1;
|
|
}
|
|
|
|
my @field_data = ();
|
|
|
|
# get marclist again, as the previous one has been modified by catalogsearch (mainentry replaced by field name)
|
|
my @marclist_ini = $query->param('marclist');
|
|
for ( my $i = 0 ; $i <= $#marclist ; $i++ ) {
|
|
push @field_data, { term => "marclist", val => $marclist_ini[$i] };
|
|
push @field_data, { term => "and_or", val => $and_or[$i] };
|
|
push @field_data, { term => "excluding", val => $excluding[$i] };
|
|
push @field_data, { term => "operator", val => $operator[$i] };
|
|
}
|
|
|
|
push @field_data,
|
|
{ term => "value_mainstr", val => $query->param('value_mainstr') || "" };
|
|
push @field_data,
|
|
{ term => "value_main", val => $query->param('value_main') || "" };
|
|
push @field_data,
|
|
{ term => "value_any", val => $query->param('value_any') || "" };
|
|
push @field_data,
|
|
{ term => "value_match", val => $query->param('value_match') || "" };
|
|
|
|
my @numbers = ();
|
|
if ( $total > $resultsperpage ) {
|
|
for ( my $i = 1 ; $i < $total / $resultsperpage + 1 ; $i++ ) {
|
|
if ( $i < 16 ) {
|
|
my $highlight = 0;
|
|
( $startfrom == ( $i - 1 ) ) && ( $highlight = 1 );
|
|
push @numbers,
|
|
{
|
|
number => $i,
|
|
highlight => $highlight,
|
|
searchdata => \@field_data,
|
|
startfrom => ( $i - 1 )
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
my $from = $startfrom * $resultsperpage + 1;
|
|
my $to;
|
|
if ( $total < ( ( $startfrom + 1 ) * $resultsperpage ) ) {
|
|
$to = $total;
|
|
}
|
|
else {
|
|
$to = ( ( $startfrom + 1 ) * $resultsperpage );
|
|
}
|
|
|
|
$template->param( result => $results ) if $results;
|
|
$template->param(
|
|
orderby => $orderby,
|
|
startfrom => $startfrom,
|
|
displaynext => $displaynext,
|
|
displayprev => $displayprev,
|
|
resultsperpage => $resultsperpage,
|
|
startfromnext => $startfrom + 1,
|
|
startfromprev => $startfrom - 1,
|
|
searchdata => \@field_data,
|
|
total => $total,
|
|
from => $from,
|
|
to => $to,
|
|
numbers => \@numbers,
|
|
operator_mainstr => ( @operator > 0 && $operator[0] )
|
|
? $operator[0]
|
|
: '',
|
|
operator_main => ( @operator > 1 && $operator[1] ) ? $operator[1] : '',
|
|
operator_any => ( @operator > 2 && $operator[2] ) ? $operator[2] : '',
|
|
operator_match => ( @operator > 3 && $operator[3] ) ? $operator[3] : '',
|
|
);
|
|
}
|
|
else {
|
|
|
|
# special case for UNIMARC field 210c builder
|
|
my $resultstring = $query->param('result') || '';
|
|
$template->param( resultstring => $resultstring, );
|
|
}
|
|
|
|
$template->param(
|
|
op => $op,
|
|
value_mainstr => $query->param('value_mainstr') || '',
|
|
value_main => $query->param('value_main') || '',
|
|
value_any => $query->param('value_any') || '',
|
|
value_match => $query->param('value_match') || '',
|
|
tagid => $tagid,
|
|
index => $index,
|
|
authtypesloop => \@authtypesloop,
|
|
authtypecode => $authtypecode,
|
|
source => $source,
|
|
relationship => $relationship,
|
|
);
|
|
|
|
# Print the page
|
|
output_html_with_http_headers $query, $cookie, $template->output;
|
|
|
|
# Local Variables:
|
|
# tab-width: 4
|
|
# End:
|