X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=virtualshelves%2Faddbybiblionumber.pl;h=ff0ef5045b0546cb0bd3d3cbc50a146d2d72829a;hb=075ef09f48b66df7766c22e1c9ecf1d3cf7a039a;hp=5fd82b3cd05014e3f67972a16d91517fcc674818;hpb=60186fa42fa0742eb3e8484f1fd4b16e04d32ae1;p=srvgit diff --git a/virtualshelves/addbybiblionumber.pl b/virtualshelves/addbybiblionumber.pl index 5fd82b3cd0..ff0ef5045b 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 @@ -46,9 +44,9 @@ if this parameter exists, then it must be equals to the name of the shelf to add. -=item category +=item public - if this script has to add a shelf, it add one with this category. + if this script has to add a shelf, it adds one with this 'public' setting. =item newshelf @@ -58,152 +56,152 @@ =cut -use strict; -use warnings; +use Modern::Perl; -use CGI; -use C4::Biblio; -use C4::Output; -use C4::VirtualShelves qw/:DEFAULT GetAllShelves/; -use C4::Auth; +use CGI qw ( -utf8 ); +use C4::Output qw( output_html_with_http_headers ); +use C4::Auth qw( get_template_and_user ); +use Koha::Biblios; +use Koha::Virtualshelves; -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 $query = CGI->new; +my $shelfnumber = $query->param('shelfnumber'); +my $newvirtualshelf = $query->param('newvirtualshelf'); +my $newshelf = $query->param('newshelf'); +my $public = $query->param('public'); +my $sortfield = $query->param('sortfield'); my $confirmed = $query->param('confirmed') || 0; -our $authorized = 1; -our $errcode = 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]; +} -our ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { - template_name => "virtualshelves/addbybiblionumber.tmpl", +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { template_name => "virtualshelves/addbybiblionumber.tt", query => $query, type => "intranet", - authnotrequired => 0, flagsrequired => { catalogue => 1 }, } ); -if( $newvirtualshelf) { - HandleNewVirtualShelf(); - exit if $authorized; - ShowTemplate(); #error message -} -elsif($shelfnumber && $confirmed) { - HandleShelfNumber(); - exit if $authorized; - ShowTemplate(); #error message -} -elsif($shelfnumber) { #still needs confirmation - HandleSelectedShelf(); - LoadBib() if $authorized; - ShowTemplate(); -} -else { - HandleSelect(); - LoadBib(); - ShowTemplate(); -} -#end - -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]; +if ($newvirtualshelf) { + my $shelf = eval { + Koha::Virtualshelf->new( + { + shelfname => $newvirtualshelf, + public => $public, + sortfield => $sortfield, + owner => $loggedinuser, + } + )->store; + }; + if ( $@ or not $shelf ) { + $errcode = 1; + $authorized = 0; + } else { + + for my $biblionumber (@biblionumbers) { + $shelf->add_biblio( $biblionumber, $loggedinuser ); + } + + #Reload the page where you came from + print $query->header; + print ""; + exit; } - return @bib; -} - -sub AddBibliosToShelf { - my ($shelfnumber, @biblionumber)=@_; - for my $bib (@biblionumber){ - AddToShelf($bib, $shelfnumber, $loggedinuser); - } -} -sub HandleNewVirtualShelf { - $shelfnumber = AddShelf( { - shelfname => $newvirtualshelf, - sortfield => $sortfield, - category => $category }, $loggedinuser); - if($shelfnumber == -1) { - $authorized=0; - $errcode=1; #add failed - return; +} 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; } - AddBibliosToShelf($shelfnumber, @biblionumber); - #Reload the page where you came from - print $query->header; - print ""; -} -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 - } -} +} elsif ($shelfnumber) { #still needs confirmation + my $shelf = Koha::Virtualshelves->find($shelfnumber); + if ( $shelf->can_biblios_be_added($loggedinuser) ) { -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, + singleshelf => 1, + shelfnumber => $shelf->shelfnumber, + shelfname => $shelf->shelfname, ); + } else { + $authorized = 0; + $errcode = 2; #no perm } - else { - $errcode=2; #no perm - } -} -sub HandleSelect { - my $privateshelves = GetAllShelves(1,$loggedinuser,1); - my $publicshelves = GetAllShelves(2,$loggedinuser,1); - $template->param( - privatevirtualshelves => $privateshelves, - publicvirtualshelves => $publicshelves, +} else { + my $private_shelves = Koha::Virtualshelves->search( + { public => 0, + owner => $loggedinuser, + allow_change_from_owner => 1, + }, + { order_by => 'shelfname' } + ); + my $shelves_shared_with_me = Koha::Virtualshelves->search( + { public => 0, + 'virtualshelfshares.borrowernumber' => $loggedinuser, + allow_change_from_others => 1, + }, + { join => 'virtualshelfshares', } + ); + my $public_shelves = Koha::Virtualshelves->search( + { public => 1, + -or => [ + -and => { + allow_change_from_owner => 1, + owner => $loggedinuser, + }, + allow_change_from_others => 1, + ], + }, + { order_by => 'shelfname' } ); -} - -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, + private_shelves => $private_shelves, + private_shelves_shared_with_me => $shelves_shared_with_me, + public_shelves => $public_shelves, ); + } -sub ShowTemplate { - $template->param ( - newshelf => $newshelf||0, - authorized => $authorized, - errcode => $errcode, +my @biblios; +for my $biblionumber (@biblionumbers) { + my $biblio = Koha::Biblios->find( $biblionumber ); + push( + @biblios, + { biblionumber => $biblionumber, + title => $biblio->title, + author => $biblio->author, + } ); - output_html_with_http_headers $query, $cookie, $template->output; } +$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;