X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=virtualshelves%2Faddbybiblionumber.pl;h=a60c88fd53d81efad1446189b6f09ea9e0484cb3;hb=adf1835890f5aba60c587c3e905bbd1e003a417c;hp=1dbffbbc350eba9a884320f708ac6fab5e2a0eb3;hpb=481f620455d40f93a3cb37136ef2c3964497751e;p=koha.git diff --git a/virtualshelves/addbybiblionumber.pl b/virtualshelves/addbybiblionumber.pl index 1dbffbbc35..a60c88fd53 100755 --- a/virtualshelves/addbybiblionumber.pl +++ b/virtualshelves/addbybiblionumber.pl @@ -1,29 +1,27 @@ #!/usr/bin/perl -#script to provide virtual shelf management -# -# # Copyright 2000-2002 Katipo Communications +# Copyright 2016 Koha Development Team # # 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 @@ -58,49 +56,35 @@ =cut -use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; + +use CGI qw ( -utf8 ); use C4::Biblio; -use CGI; use C4::Output; -use C4::VirtualShelves qw/:DEFAULT GetRecentShelves/; -use C4::Circulation; 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); - } -} +use Koha::Biblios; +use Koha::Virtualshelves; 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'); +my $sortfield = $query->param('sortfield'); my $confirmed = $query->param('confirmed') || 0; - +my ( $errcode, $authorized ) = ( 0, 1 ); +my @biblionumbers = $query->multi_param('biblionumber'); + +if ( @biblionumbers == 0 && $query->param('biblionumbers') ) { + my $str = $query->param('biblionumbers'); + @biblionumbers = split '/', $str; +} elsif ( @biblionumbers == 1 && $biblionumbers[0] =~ /\// ) { + @biblionumbers = split '/', $biblionumbers[0]; +} my ( $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 +92,118 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my @biblionumbers; -if ($biblionumbers) { - @biblionumbers = split '/', $biblionumbers; -} else { - @biblionumbers = (@biblionumber); -} -if (scalar(@biblionumber) == 1) { - @biblionumber = (split /\//,$biblionumber[0]); -} - -$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; +if ($newvirtualshelf) { + my $shelf = eval { + Koha::Virtualshelf->new( + { + shelfname => $newvirtualshelf, + category => $category, + sortfield => $sortfield, + owner => $loggedinuser, + } + )->store; + }; + if ( $@ or not $shelf ) { + $errcode = 1; + $authorized = 0; } 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'}, - } ); + + for my $biblionumber (@biblionumbers) { + $shelf->add_biblio( $biblionumber, $loggedinuser ); } - $template->param - ( - biblionumber => \@biblionumber, - biblios => \@biblios, - multiple => (scalar(@biblionumber) > 1), - singleshelf => 1, - shelfname => $singleshelfname, - shelfnumber => $singleshelf, - total => scalar(@biblionumber), - confirm => 1, - ); + #Reload the page where you came from + print $query->header; + print ""; + exit; } -} -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, undef, $shelftype == 3 ? undef : $loggedinuser); - for my $shelf (@{ $shelflist }) { - push(@shelvesloop, $shelf->{shelfnumber}); - $shelvesloop{$shelf->{shelfnumber}} = $shelf->{shelfname}; - } + +} elsif ( $shelfnumber && $confirmed ) { + my $shelf = Koha::Virtualshelves->find($shelfnumber); + if ( $shelf->can_biblios_be_added($loggedinuser) ) { + for my $biblionumber (@biblionumbers) { + $shelf->add_biblio( $biblionumber, $loggedinuser ); + } + + #Close this page and return + print $query->header; + print ""; + exit; + } else { + $errcode = 2; #no perm + $authorized = 0; } - if( @shelvesloop ){ - my $CGIvirtualshelves = CGI::scrolling_list - ( - -name => 'shelfnumber', - -values => \@shelvesloop, - -labels => \%shelvesloop, - -size => 1, - -tabindex => '', - -multiple => 0 - ); - $template->param - ( - CGIvirtualshelves => $CGIvirtualshelves, - ); +} elsif ($shelfnumber) { #still needs confirmation + my $shelf = Koha::Virtualshelves->find($shelfnumber); + if ( $shelf->can_biblios_be_added($loggedinuser) ) { + + #confirm adding to specific shelf + $template->param( + singleshelf => 1, + shelfnumber => $shelf->shelfnumber, + shelfname => $shelf->shelfname, + ); + } else { + $authorized = 0; + $errcode = 2; #no perm } - my @biblios; - for my $bib (@biblionumber) { - my $data = GetBiblioData( $bib ); - push(@biblios, - { biblionumber => $bib, - title => $data->{'title'}, - author => $data->{'author'}, - } ); - } + +} else { + my $private_shelves = Koha::Virtualshelves->search( + { category => 1, + owner => $loggedinuser, + allow_change_from_owner => 1, + }, + { order_by => 'shelfname' } + ); + my $shelves_shared_with_me = Koha::Virtualshelves->search( + { category => 1, + 'virtualshelfshares.borrowernumber' => $loggedinuser, + allow_change_from_others => 1, + }, + { join => 'virtualshelfshares', } + ); + my $public_shelves = Koha::Virtualshelves->search( + { category => 2, + -or => [ + -and => { + allow_change_from_owner => 1, + owner => $loggedinuser, + }, + allow_change_from_others => 1, + ], + }, + { order_by => 'shelfname' } + ); $template->param( - newshelf => $newshelf, - biblios=>\@biblios, - multiple => (scalar(@biblionumber) > 1), - total => scalar(@biblionumber), + private_shelves => $private_shelves, + private_shelves_shared_with_me => $shelves_shared_with_me, + public_shelves => $public_shelves, ); - 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; +} + +my @biblios; +for my $biblionumber (@biblionumbers) { + my $biblio = Koha::Biblios->find( $biblionumber ); + push( + @biblios, + { biblionumber => $biblionumber, + title => $biblio->title, + author => $biblio->author, } - $template->param - ( - biblioloop => \@biblioloop, - biblionumbers => $biblionumbers - ); - } - + ); } +$template->param( + multiple => ( scalar(@biblios) > 1 ), + total => scalar @biblios, + biblios => \@biblios, +); + +$template->param( + newshelf => $newshelf || 0, + authorized => $authorized, + errcode => $errcode, +); output_html_with_http_headers $query, $cookie, $template->output;