Koha/cataloguing/value_builder/unimarc_field_4XX.pl
Bernardo Gonzalez Kriegel 2d9f5fc69e Bug 9457: [ENH] Ordering branches should be case independent (2)
This patch replace use of CGI::scroll_list() to show list of branches.

In two files, marc21_linking_section.pl and unimarc_field_4XX.pl,
the scrolling list is created but not used in the template file,
so the code is removed.

Also minor renaming/normalizing of variables.

To test:
1) Install with some branches, records and patrons

2.1) Select a record, click 'Place hold', select user,
     there is a library pull-down next to 'Pickup at:',
     list is ordered case sensitive
2.2) Go to Reports > Average loan time,
     next to Library is a pull-down,
     list without order
2.3) Go to Reports > Catalog by item type,
     next to 'Select a library' is a pull-down,
     list is ordered case sensitive
2.4) This is tricky, go to Reports home,
     change last part of URL 'reports-home.pl' with
     'manager.pl?report_name=issues_by_borrower_category'
     (can't find a direct link), next to 'Select a library'
     is a library pull-down,
     list without order
2.5) Edit/Add a patron, on section 'Library management'
     there is a library pull-down, case sensitive
2.6) OPAC, as logged user, make a suggestion or hold,
     there is library pull-down, correct order

3) Apply the patch

4.1) Repeat 2.1), correctly ordered list
4.2) Repeat 2.2), correctly ordered list
4.3) Repeat 2.3), correctly ordered list
4.4) Repeat 2.4), correctly ordered list
4.5) This is a bit more work
     There are 3 possible situations to test:
     A) No branches, must show a message that are no
        libraries defined
     B) New patron, must show a correctly ordered
        list of branches, current branch selected
     C) Edit patron, must show a correctly ordered
        list of branches, patron branch selected
4.6) Small changes on variable names, so retest 2.6)

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
2013-03-20 15:35:58 -04:00

554 lines
21 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright Biblibre 2007
#
# 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; FIXME - Bug 2505
use CGI;
use C4::Output;
use C4::Context;
use C4::Search;
use C4::Auth;
use C4::Output;
use C4::Biblio;
use C4::Koha;
use MARC::Record;
use C4::Branch; # GetBranches
use C4::ItemType;
sub plugin_parameters {
my ( $dbh, $record, $tagslib, $i, $tabloop ) = @_;
return "";
}
sub plugin_javascript {
my ( $dbh, $record, $tagslib, $field_number, $tabloop ) = @_;
my $function_name = $field_number;
my $res = "
<script type='text/javascript'>
function Focus$function_name(subfield_managed) {
return 1;
}
function Blur$function_name(subfield_managed) {
return 1;
}
function Clic$function_name(i) {
defaultvalue=document.getElementById(\"$field_number\").value;
window.open(\"/cgi-bin/koha/cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_4XX.pl&index=\" + i + \"&result=\"+defaultvalue,\"unimarc_field_4\"+i+\"\",'width=900,height=700,toolbar=false,scrollbars=yes');
}
</script>
";
return ( $function_name, $res );
}
# sub plugin
#
# input arg :
# -- op could be equals to
# * fillinput :
# * do_search :
#
sub plugin {
my ($input) = @_;
my $dbh = C4::Context->dbh;
my $query = new CGI;
my $op = $query->param('op');
my $type = $query->param('type');
my $startfrom = $query->param('startfrom');
$startfrom = 0 if ( !defined $startfrom );
my ( $template, $loggedinuser, $cookie );
my $resultsperpage;
my $searchdesc;
if ( $op eq "fillinput" ) {
my $biblionumber = $query->param('biblionumber');
my $index = $query->param('index');
my $marcrecord;
# open template
( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name =>
"cataloguing/value_builder/unimarc_field_4XX.tmpl",
query => $query,
type => "intranet",
authnotrequired => 0,
flagsrequired => { editcatalogue => '*' },
debug => 1,
}
);
#get marc record
$marcrecord = GetMarcBiblio($biblionumber);
my $subfield_value_9 = $biblionumber;
my $subfield_value_0;
$subfield_value_0 = $marcrecord->field('001')->data
if $marcrecord->field('001');
my $subfield_value_a;
if ( $marcrecord->field('700') ) {
$subfield_value_a = $marcrecord->field('700')->subfield("a");
$subfield_value_a .= ", " . $marcrecord->subfield( '700', "b" )
if $marcrecord->subfield( '700', 'b' );
$subfield_value_a .= " " . $marcrecord->subfield( '700', "d" )
if $marcrecord->subfield( '700', 'd' );
$subfield_value_a .=
" (" . $marcrecord->subfield( '700', 'c' ) . " - "
if $marcrecord->subfield( '700', 'c' );
$subfield_value_a .= " ("
if ( $marcrecord->subfield( '700', 'f' )
and not( $marcrecord->subfield( '700', 'c' ) ) );
$subfield_value_a .= $marcrecord->subfield( '700', 'f' )
if ( $marcrecord->subfield( '700', 'f' ) );
$subfield_value_a .= ")"
if ( $marcrecord->subfield( '701', 'f' )
or $marcrecord->subfield( '701', 'c' ) );
}
elsif ( $marcrecord->field('702') ) {
$subfield_value_a = $marcrecord->subfield( '702', 'a' );
$subfield_value_a .= ", " . $marcrecord->subfield( '702', 'b' )
if $marcrecord->subfield( '702', 'b' );
$subfield_value_a .= " " . $marcrecord->subfield( '702', 'd' )
if $marcrecord->subfield( '702', 'd' );
$subfield_value_a .=
" (" . $marcrecord->subfield( '702', 'c' ) . "; "
if $marcrecord->subfield( '702', 'c' );
$subfield_value_a .= " ("
if $marcrecord->subfield( '702', 'f' )
and not $marcrecord->subfield( '702', 'c' );
$subfield_value_a .= $marcrecord->subfield( '702', 'f' )
if $marcrecord->subfield( '702', 'f' );
$subfield_value_a .= ")"
if $marcrecord->subfield( '702', 'f' )
or $marcrecord->subfield( '702', 'c' );
}
elsif ( $marcrecord->field('710') ) {
$subfield_value_a = $marcrecord->subfield( '710', 'd' ) . " "
if $marcrecord->subfield( '710', 'd' );
$subfield_value_a .= $marcrecord->subfield( '710', 'a' )
if $marcrecord->subfield( '710', 'a' );
$subfield_value_a .= ", " . $marcrecord->subfield( '710', 'b' )
if $marcrecord->subfield('710');
$subfield_value_a .=
" (" . $marcrecord->subfield( '710', 'f' ) . " - "
if $marcrecord->subfield( '710', 'f' );
$subfield_value_a .= " ("
if $marcrecord->subfield( '710', 'e' )
and not $marcrecord->subfield( '710', 'f' );
$subfield_value_a .= $marcrecord->subfield( '710', 'e' )
if $marcrecord->subfield( '710', 'e' );
$subfield_value_a .= ")"
if $marcrecord->subfield( '710', 'e' )
or $marcrecord->subfield( '710', 'f' );
}
elsif ( $marcrecord->field('701') ) {
$subfield_value_a = $marcrecord->subfield( '701', 'a' );
$subfield_value_a .= ", " . $marcrecord->subfield( '701', 'b' )
if $marcrecord->subfield( '701', 'b' );
$subfield_value_a .= " " . $marcrecord->subfield( '701', 'd', )
if $marcrecord->subfield( '701', 'd' );
$subfield_value_a .=
" (" . $marcrecord->subfield( '701', 'c' ) . " - "
if $marcrecord->subfield( '701', 'c' );
$subfield_value_a .= " ("
if $marcrecord->subfield( '701', 'f' )
and not( $marcrecord->subfield( '701', 'c' ) );
$subfield_value_a .= $marcrecord->subfield( '701', 'f' )
if $marcrecord->subfield( '701', 'f' );
$subfield_value_a .= ")"
if $marcrecord->subfield( '701', 'f' )
or $marcrecord->subfield( '701', 'c' );
}
elsif ( $marcrecord->field('712') ) {
$subfield_value_a = $marcrecord->subfield( '712', 'd' ) . " "
if $marcrecord->subfield( '712', 'd' );
$subfield_value_a .= $marcrecord->subfield( '712', 'a' )
if $marcrecord->subfield( '712', 'a' );
$subfield_value_a .= ", " . $marcrecord->subfield( '712', 'b' )
if $marcrecord->subfield( '712', 'b' );
$subfield_value_a .=
" (" . $marcrecord->subfield( '712', 'f' ) . " - "
if $marcrecord->subfield( '712', 'f' );
$subfield_value_a .= " ("
if $marcrecord->field( '712', "e" )
and not $marcrecord->subfield( '712', 'f' );
$subfield_value_a .= $marcrecord->subfield( '712', 'e' )
if $marcrecord->subfield( '712', 'e' );
$subfield_value_a .= ")"
if $marcrecord->subfield( '712', 'e' )
or $marcrecord->subfield( '712', 'f' );
}
elsif ( $marcrecord->field('200') ) {
$subfield_value_a = $marcrecord->subfield( '200', 'f' );
}
my $subfield_value_c;
my $subfield_value_d;
my $subfield_value_e;
$subfield_value_c = $marcrecord->field('210')->subfield("a")
if ( $marcrecord->field('210') );
$subfield_value_d = $marcrecord->field('210')->subfield("d")
if ( $marcrecord->field('210') );
$subfield_value_e = $marcrecord->field('205')->subfield("a")
if ( $marcrecord->field('205') );
my $subfield_value_h;
if ( ( $marcrecord->field('200') )
&& ( $marcrecord->field('200')->subfield("h") ) )
{
$subfield_value_h = $marcrecord->field('200')->subfield("h");
}
elsif (( $marcrecord->field('225') )
&& ( $marcrecord->field('225')->subfield("h") ) )
{
$subfield_value_h = $marcrecord->field('225')->subfield("h");
}
elsif (( $marcrecord->field('500') )
&& ( $marcrecord->field('500')->subfield("h") ) )
{
$subfield_value_h = $marcrecord->field('500')->subfield("h");
}
my $subfield_value_i;
if ( ( $marcrecord->field('200') )
&& ( $marcrecord->field('200')->subfield("i") ) )
{
$subfield_value_i = $marcrecord->field('200')->subfield("i");
}
elsif (( $marcrecord->field('225') )
&& ( $marcrecord->field('225')->subfield("i") ) )
{
$subfield_value_i = $marcrecord->field('225')->subfield("i");
}
elsif (( $marcrecord->field('500') )
&& ( $marcrecord->field('500')->subfield("i") ) )
{
$subfield_value_i = $marcrecord->field('500')->subfield("i");
}
my $subfield_value_p;
$subfield_value_p = $marcrecord->field('215')->subfield("a")
if ( $marcrecord->field('215') );
my $subfield_value_t;
if ( ( $marcrecord->field('200') )
&& ( $marcrecord->field('200')->subfield("a") ) )
{
$subfield_value_t = $marcrecord->field('200')->subfield("a");
}
elsif (( $marcrecord->field('225') )
&& ( $marcrecord->field('225')->subfield("a") ) )
{
$subfield_value_t = $marcrecord->field('225')->subfield("a");
}
elsif (( $marcrecord->field('500') )
&& ( $marcrecord->field('500')->subfield("a") ) )
{
$subfield_value_t = $marcrecord->field('500')->subfield("a");
}
my $subfield_value_u;
if ( $marcrecord->field('856') ) {
$subfield_value_u = $marcrecord->field('856')->subfield("u");
}
my $subfield_value_v;
if ( ( $marcrecord->field('225') )
&& ( $marcrecord->field('225')->subfield("v") ) )
{
$subfield_value_v = $marcrecord->field('225')->subfield("v");
}
elsif (( $marcrecord->field('200') )
&& ( $marcrecord->field('200')->subfield("h") ) )
{
$subfield_value_v = $marcrecord->field('200')->subfield("h");
}
my $subfield_value_x;
if (
$marcrecord->field('011')
and not( ( $marcrecord->field('011')->subfield("y") )
or ( $marcrecord->field('011')->subfield("z") ) ) ) {
$subfield_value_x = $marcrecord->field('011')->subfield("a");
}
my $subfield_value_y;
if ( $marcrecord->field('013') ) {
$subfield_value_y = $marcrecord->field('013')->subfield("a");
}
if ( $marcrecord->field('010') ) {
$subfield_value_y = $marcrecord->field('010')->subfield("a");
}
# escape the 's
$subfield_value_9 =~ s/'/\\'/g;
$subfield_value_0 =~ s/'/\\'/g;
$subfield_value_a =~ s/'/\\'/g;
$subfield_value_c =~ s/'/\\'/g;
$subfield_value_d =~ s/'/\\'/g;
$subfield_value_e =~ s/'/\\'/g;
$subfield_value_h =~ s/'/\\'/g;
$subfield_value_i =~ s/'/\\'/g;
$subfield_value_p =~ s/'/\\'/g;
$subfield_value_t =~ s/'/\\'/g;
$subfield_value_u =~ s/'/\\'/g;
$subfield_value_v =~ s/'/\\'/g;
$subfield_value_x =~ s/'/\\'/g;
$subfield_value_y =~ s/'/\\'/g;
$template->param(
fillinput => 1,
index => $query->param('index') . "",
biblionumber => $biblionumber ? $biblionumber : "",
subfield_value_9 => "$subfield_value_9",
subfield_value_0 => "$subfield_value_0",
subfield_value_a => "$subfield_value_a",
subfield_value_c => "$subfield_value_c",
subfield_value_d => "$subfield_value_d",
subfield_value_e => "$subfield_value_e",
subfield_value_h => "$subfield_value_h",
subfield_value_i => "$subfield_value_i",
subfield_value_p => "$subfield_value_p",
subfield_value_t => "$subfield_value_t",
subfield_value_u => "$subfield_value_u",
subfield_value_v => "$subfield_value_v",
subfield_value_x => "$subfield_value_x",
subfield_value_y => "$subfield_value_y",
);
###############################################################
}
elsif ( $op eq "do_search" ) {
my $search = $query->param('search');
my $itype = $query->param('itype');
my $startfrom = $query->param('startfrom');
my $resultsperpage = $query->param('resultsperpage') || 20;
my $orderby;
my $QParser;
$QParser = C4::Context->queryparser if (C4::Context->preference('UseQueryParser'));
my $op;
if ($QParser) {
$op = '&&';
} else {
$op = 'and';
}
$search = 'kw:'.$search." $op mc-itemtype:".$itype if $itype;
my ( $errors, $results, $total_hits ) = SimpleSearch($search, $startfrom * $resultsperpage, $resultsperpage );
if (defined $errors ) {
$results = [];
}
my $total = @{$results};
# warn " biblio count : ".$total;
( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name =>
"cataloguing/value_builder/unimarc_field_4XX.tmpl",
query => $query,
type => 'intranet',
authnotrequired => 0,
debug => 1,
}
);
# multi page display gestion
my $displaynext = 0;
my $displayprev = $startfrom;
if( ( $total_hits - ( ( $startfrom + 1 ) * ($resultsperpage) ) ) > 0 ) {
$displaynext = 1;
}
my @arrayresults;
my @field_data = ($search);
for (
my $i = 0 ;
$i < $resultsperpage ;
$i++
)
{
my $record = MARC::Record::new_from_usmarc( $results->[$i] );
my $rechash = TransformMarcToKoha( $dbh, $record );
my $pos;
my $countitems;
if ( $rechash->{itemnumber} ) {
$countitems=1;
}
while ( index( $rechash->{itemnumber}, '|', $pos ) > 0 ) {
$countitems += 1;
$pos = index( $rechash->{itemnumber}, '|', $pos ) + 1;
}
$rechash->{totitem} = $countitems;
my @holdingbranches = split /\|/, $rechash->{holdingbranch};
my @itemcallnumbers = split /\|/, $rechash->{itemcallnumber};
my $CN;
for ( my $i = 0 ; $i < @holdingbranches ; $i++ ) {
$CN .=
$holdingbranches[$i] . " ( " . $itemcallnumbers[$i] . " ) |";
}
$CN =~ s/ \|$//;
$rechash->{CN} = $CN;
push @arrayresults, $rechash;
}
# for(my $i = 0 ; $i <= $#marclist ; $i++)
# {
# push @field_data, { term => "marclist", val=>$marclist[$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", val=>$value[$i] };
# }
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_hits < $from + $resultsperpage ) {
$to = $total_hits;
}else{
$to = $from + $resultsperpage ;
}
my $defaultview =
'BiblioDefaultView' . C4::Context->preference('BiblioDefaultView');
# my $link="/cgi-bin/koha/cataloguing/value_builder/unimarc4XX.pl?op=do_search&q=$search_desc&resultsperpage=$resultsperpage&startfrom=$startfrom&search=$search";
# foreach my $sort (@sort_by){
# $link.="&sort_by=".$sort."&";
# }
# $template->param(
# pagination_bar => pagination_bar(
# $link,
# getnbpages($hits, $results_per_page),
# $page,
# 'page'
# ),
# );
$template->param(
result => \@arrayresults,
index => $query->param('index') . "",
startfrom => $startfrom,
displaynext => $displaynext,
displayprev => $displayprev,
resultsperpage => $resultsperpage,
orderby => $orderby,
startfromnext => $startfrom + 1,
startfromprev => $startfrom - 1,
searchdata => \@field_data,
total => $total_hits,
from => $from,
to => $to,
numbers => \@numbers,
search => $search,
$defaultview => 1,
Search => 0
);
}
else {
( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name =>
"cataloguing/value_builder/unimarc_field_4XX.tmpl",
query => $query,
type => "intranet",
authnotrequired => 0,
}
);
my $sth =
$dbh->prepare(
"Select itemtype,description from itemtypes order by description");
$sth->execute;
my @itemtype;
my %itemtypes;
push @itemtype, "";
$itemtypes{''} = "";
while ( my ( $value, $lib ) = $sth->fetchrow_array ) {
push @itemtype, $value;
$itemtypes{$value} = $lib;
}
my $CGIitemtype = CGI::scrolling_list(
-name => 'value',
-values => \@itemtype,
-labels => \%itemtypes,
-size => 1,
-multiple => 0
);
$sth->finish;
# To show list of branches please use GetBranchesLoop() and modify template
my $req =
$dbh->prepare(
"select distinctrow left(publishercode,45) from biblioitems order by publishercode"
);
$req->execute;
my @select;
push @select, "";
while ( my ($value) = $req->fetchrow ) {
push @select, $value;
}
my $CGIpublisher = CGI::scrolling_list(
-name => 'value',
-id => 'publisher',
-values => \@select,
-size => 1,
-multiple => 0
);
# my $sth=$dbh->prepare("select description,itemtype from itemtypes order by description");
# $sth->execute;
# while (my ($description,$itemtype) = $sth->fetchrow) {
# $classlist.="<option value=\"$itemtype\">$description</option>\n";
# }
# $sth->finish;
my @itemtypes = C4::ItemType->all;
$template->param( #classlist => $classlist,
CGIitemtype => $CGIitemtype,
CGIPublisher => $CGIpublisher,
itypeloop => \@itemtypes,
index => $query->param('index'),
Search => 1,
);
}
output_html_with_http_headers $query, $cookie, $template->output;
}
1;