X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=virtualshelves%2Faddbybiblionumber.pl;h=e7b459c97327dcf15175161cc0634f2213df6cd0;hb=a145b437852542c5314e5cc1d5576b4eb050525c;hp=f1ac67428ff5a5b1a523e4e0912e30400a78930e;hpb=d1cea14fae6525b7478548aa19108871395e198d;p=koha.git diff --git a/virtualshelves/addbybiblionumber.pl b/virtualshelves/addbybiblionumber.pl index f1ac67428f..e7b459c973 100755 --- a/virtualshelves/addbybiblionumber.pl +++ b/virtualshelves/addbybiblionumber.pl @@ -7,23 +7,23 @@ # # 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 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 3 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. +# 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. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =head1 NAME - addbybiblionumber.pl +addbybiblionumber.pl =head1 DESCRIPTION @@ -59,48 +59,29 @@ =cut use strict; -#use warnings; FIXME - Bug 2505 +use warnings; + +use CGI qw ( -utf8 ); use C4::Biblio; -use CGI; use C4::Output; -use C4::VirtualShelves qw/:DEFAULT GetRecentShelves/; -use C4::Circulation; +use C4::VirtualShelves qw/:DEFAULT GetAllShelves/; use C4::Auth; -# splits incoming biblionumber(s) to array and adds each to shelf. -sub AddBibliosToShelf { - my ($shelfnumber,@biblionumber)=@_; - - # multiple bibs might come in as '/' delimited string (from where, i don't see), or as array. - # (Note : they come in as '/' when added from the cart) - if (scalar(@biblionumber) == 1) { - @biblionumber = (split /\//,$biblionumber[0]); - } - for my $bib (@biblionumber){ - AddToShelf($bib, $shelfnumber); - } -} - -my $query = new CGI; - -# If set, then single item case. -my $biblionumber = $query->param('biblionumber'); -# If set, then multiple item case. -my @biblionumber = $query->param('biblionumber'); -my $biblionumbers = $query->param('biblionumbers'); - -my $shelfnumber = $query->param('shelfnumber'); -my $newvirtualshelf = $query->param('newvirtualshelf'); -my $newshelf = $query->param('newshelf'); -my $category = $query->param('category'); -my $sortfield = $query->param('sortfield'); +our $query = new CGI; +our @biblionumber = HandleBiblioPars(); +our $shelfnumber = $query->param('shelfnumber'); +our $newvirtualshelf = $query->param('newvirtualshelf'); +our $newshelf = $query->param('newshelf'); +our $category = $query->param('category'); +our $sortfield = $query->param('sortfield'); my $confirmed = $query->param('confirmed') || 0; +our $authorized = 1; +our $errcode = 0; - -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( +our ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "virtualshelves/addbybiblionumber.tmpl", + template_name => "virtualshelves/addbybiblionumber.tt", query => $query, type => "intranet", authnotrequired => 0, @@ -108,120 +89,121 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my @biblionumbers; -if ($biblionumbers) { - @biblionumbers = split '/', $biblionumbers; -} else { - @biblionumbers = (@biblionumber); +if( $newvirtualshelf) { + HandleNewVirtualShelf(); + exit if $authorized; + ShowTemplate(); #error message +} +elsif($shelfnumber && $confirmed) { + HandleShelfNumber(); + exit if $authorized; + ShowTemplate(); #error message } -if (scalar(@biblionumber) == 1) { - @biblionumber = (split /\//,$biblionumber[0]); +elsif($shelfnumber) { #still needs confirmation + HandleSelectedShelf(); + LoadBib() if $authorized; + ShowTemplate(); } +else { + HandleSelect(); + LoadBib(); + ShowTemplate(); +} +#end -$shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category, $sortfield ) if $newvirtualshelf; -if ( $shelfnumber || ( $shelfnumber == -1 ) ) { # the shelf already exist. - - if ($confirmed == 1) { - AddBibliosToShelf($shelfnumber,@biblionumber); - print - "Content-Type: text/html\n\n"; - exit; - } else { - my ( $singleshelf, $singleshelfname, $singlecategory ) = GetShelf( $query->param('shelfnumber') ); - my @biblios; - for my $bib (@biblionumber) { - my $data = GetBiblioData( $bib ); - push(@biblios, - { biblionumber => $bib, - title => $data->{'title'}, - author => $data->{'author'}, - } ); - } - - $template->param - ( - biblionumber => \@biblionumber, - biblios => \@biblios, - multiple => (scalar(@biblionumber) > 1), - singleshelf => 1, - shelfname => $singleshelfname, - shelfnumber => $singleshelf, - total => scalar(@biblionumber), - confirm => 1, - ); +sub HandleBiblioPars { + my @bib= $query->param('biblionumber'); + if(@bib==0 && $query->param('biblionumbers')) { + my $str= $query->param('biblionumbers'); + @bib= split '/', $str; + } + elsif(@bib==1 && $bib[0]=~/\//) { + @bib= split '/', $bib[0]; + } + return @bib; +} + +sub AddBibliosToShelf { + my ($shelfnumber, @biblionumber)=@_; + for my $bib (@biblionumber){ + AddToShelf($bib, $shelfnumber, $loggedinuser); } } -else { # this shelf doesn't already exist. - my $limit = 10; - my ($shelflist); - my @shelvesloop; - my %shelvesloop; - - #grab each type of shelf, open (type 3) should not be limited by user. - foreach my $shelftype (1,2,3) { - my ($shelflist) = GetRecentShelves($shelftype, $limit, $shelftype == 3 ? undef : $loggedinuser); - for my $shelf (@{ $shelflist }) { - push(@shelvesloop, $shelf->{shelfnumber}); - $shelvesloop{$shelf->{shelfnumber}} = $shelf->{shelfname}; - } + +sub HandleNewVirtualShelf { + $shelfnumber = AddShelf( { + shelfname => $newvirtualshelf, + sortfield => $sortfield, + category => $category }, $loggedinuser); + if($shelfnumber == -1) { + $authorized=0; + $errcode=1; #add failed + return; } + AddBibliosToShelf($shelfnumber, @biblionumber); + #Reload the page where you came from + print $query->header; + print ""; +} - if( @shelvesloop ){ - my $CGIvirtualshelves = CGI::scrolling_list - ( - -name => 'shelfnumber', - -values => \@shelvesloop, - -labels => \%shelvesloop, - -size => 1, - -tabindex => '', - -multiple => 0 - ); - $template->param - ( - CGIvirtualshelves => $CGIvirtualshelves, - ); +sub HandleShelfNumber { + if($authorized= ShelfPossibleAction($loggedinuser, $shelfnumber, 'add')) { + AddBibliosToShelf($shelfnumber, @biblionumber); + #Close this page and return + print $query->header; + print ""; + } + else { + $errcode=2; #no perm + } +} + +sub HandleSelectedShelf { + if($authorized= ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add')){ + #confirm adding to specific shelf + my ($singleshelf, $singleshelfname)= GetShelf($shelfnumber); + $template->param( + singleshelf => 1, + shelfnumber => $singleshelf, + shelfname => $singleshelfname, + ); } - my @biblios; - for my $bib (@biblionumber) { - my $data = GetBiblioData( $bib ); - push(@biblios, - { biblionumber => $bib, - title => $data->{'title'}, - author => $data->{'author'}, - } ); - } + else { + $errcode=2; #no perm + } +} + +sub HandleSelect { + my $privateshelves = GetAllShelves(1,$loggedinuser,1); + my $publicshelves = GetAllShelves(2,$loggedinuser,1); $template->param( - newshelf => $newshelf, - biblios=>\@biblios, - multiple => (scalar(@biblionumber) > 1), - total => scalar(@biblionumber), + privatevirtualshelves => $privateshelves, + publicvirtualshelves => $publicshelves, ); +} - unless (@biblionumbers) { - my ( $bibliocount, @biblios ) = GetBiblio($biblionumber); - - $template->param - ( - biblionumber => $biblionumber, - title => $biblios[0]->{'title'}, - author => $biblios[0]->{'author'}, - ); - } else { - my @biblioloop = (); - foreach my $biblionumber (@biblionumbers) { - my ( $bibliocount, @biblios ) = GetBiblio($biblionumber); - my %biblioiter = ( - title=>$biblios[0]->{'title'}, - author=>$biblios[0]->{'author'} - ); - push @biblioloop, \%biblioiter; - } - $template->param - ( - biblioloop => \@biblioloop, - biblionumbers => $biblionumbers - ); +sub LoadBib { + my @biblios; + for my $bib (@biblionumber) { + my $data = GetBiblioData($bib); + push(@biblios, + { biblionumber => $bib, + title => $data->{'title'}, + author => $data->{'author'}, + } ); } - + $template->param( + multiple => (scalar(@biblios) > 1), + total => scalar @biblios, + biblios => \@biblios, + ); +} + +sub ShowTemplate { + $template->param ( + newshelf => $newshelf||0, + authorized => $authorized, + errcode => $errcode, + ); + output_html_with_http_headers $query, $cookie, $template->output; } -output_html_with_http_headers $query, $cookie, $template->output;