X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-addbybiblionumber.pl;h=eec38bd832f8428a1e1cf47d9df5f96da405dabd;hb=42e731857d53134f91ecf0099ae6b7c13393166c;hp=fd3124b46bc4f62f6c05764b90215e82a927aacf;hpb=aef1dd15fbe37a8a9c30ba4b38f7ecd6c1fea54d;p=koha.git diff --git a/opac/opac-addbybiblionumber.pl b/opac/opac-addbybiblionumber.pl index fd3124b46b..eec38bd832 100755 --- a/opac/opac-addbybiblionumber.pl +++ b/opac/opac-addbybiblionumber.pl @@ -1,134 +1,208 @@ #!/usr/bin/perl #script to provide virtualshelf management -# WARNING: This file uses 4-character tabs! -# -# $Header$ # # 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 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 . use strict; use warnings; +use CGI qw ( -utf8 ); use C4::Biblio; -use CGI; -use C4::VirtualShelves qw/:DEFAULT GetAllShelves RefreshShelvesSummary/; -use C4::Auth; use C4::Output; -use C4::Auth qw/get_session/; -use C4::Debug; +use C4::Auth; -#splits incoming biblionumber(s) to array and adds each to shelf. -sub AddBibliosToShelf { - my ($shelfnumber,@biblionumber)=@_; +use Koha::Virtualshelves; - # multiple bibs might come in as '/' delimited string (from where, i don't see), or as array. - if (scalar(@biblionumber) == 1) { - @biblionumber = (split /\//,$biblionumber[0]); - } - for my $bib (@biblionumber){ - AddToShelf($bib, $shelfnumber); - } +our $query = new CGI; +our @biblionumber = $query->param('biblionumber'); +our $selectedshelf = $query->param('selectedshelf'); +our $newshelf = $query->param('newshelf'); +our $shelfnumber = $query->param('shelfnumber'); +our $newvirtualshelf = $query->param('newvirtualshelf'); +our $category = $query->param('category'); +our $authorized = 1; +our $errcode = 0; +our @biblios; + +# if virtualshelves is disabled, leave immediately +if ( ! C4::Context->preference('virtualshelves') ) { + print $query->redirect("/cgi-bin/koha/errors/404.pl"); + exit; } -my $query = new CGI; -my @biblionumber = $query->param('biblionumber'); -my $selectedshelf = $query->param('selectedshelf'); -my $newshelf = $query->param('newshelf'); -my $shelfnumber = $query->param('shelfnumber'); -my $newvirtualshelf = $query->param('newvirtualshelf'); -my $category = $query->param('category'); +if (scalar(@biblionumber) == 1) { + @biblionumber = (split /\//,$biblionumber[0]); +} -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( +our ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "opac-addbybiblionumber.tmpl", + template_name => "opac-addbybiblionumber.tt", query => $query, type => "opac", - authnotrequired =>( C4::Context->preference("OpacPublic") ? 1 : 0 ), + authnotrequired => 0, } ); -if ($newvirtualshelf) { - $shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category ); - AddBibliosToShelf($shelfnumber, @biblionumber); - RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10)); - print $query->header; - print ""; - exit; +if( $newvirtualshelf) { + HandleNewVirtualShelf(); + exit if $authorized; + ShowTemplate(); #error message +} +elsif($shelfnumber) { + HandleShelfNumber(); + exit if $authorized; + ShowTemplate(); #error message +} +elsif($selectedshelf) { + HandleSelectedShelf(); + LoadBib() if $authorized; + ShowTemplate(); +} +else { + HandleSelect(); + LoadBib() if $authorized; + ShowTemplate(); +} +#end + +sub HandleNewVirtualShelf { + if ( $loggedinuser > 0 and + ( + $category == 1 + or $category == 2 and $loggedinuser>0 && C4::Context->preference('OpacAllowPublicListCreation') + ) + ) { + my $shelf = eval { + Koha::Virtualshelf->new( + { + shelfname => $newvirtualshelf, + category => $category, + owner => $loggedinuser, + } + )->store; + }; + if ( $@ or not $shelf ) { + $authorized = 0; + $errcode = 1; + return; + } + + for my $bib (@biblionumber) { + $shelf->add_biblio( $bib, $loggedinuser ); + } + + #Reload the page where you came from + print $query->header; + print ""; + } } -# verify user is authorized to perform the action on the shelf... -my $authorized = 1; -if ($selectedshelf) { - $authorized = 0 unless ShelfPossibleAction( $loggedinuser, $selectedshelf ); +sub HandleShelfNumber { + my $shelfnumber = $query->param('shelfnumber'); + my $shelf = Koha::Virtualshelves->find( $shelfnumber ); + if ( $shelf->can_biblios_be_added( $loggedinuser ) ) { + for my $bib (@biblionumber) { + $shelf->add_biblio( $bib, $loggedinuser ); + } + #Close this page and return + print $query->header; + print ""; + } else { + # TODO + } } -if ($shelfnumber && ($shelfnumber != -1)) { - AddBibliosToShelf($shelfnumber,@biblionumber); - RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10)); - print $query->header; - print ""; - exit; +sub HandleSelectedShelf { + my $shelfnumber = $query->param('selectedshelf'); + my $shelf = Koha::Virtualshelves->find( $shelfnumber ); + if ( $shelf->can_biblios_be_added( $loggedinuser ) ) { + $template->param( + singleshelf => 1, + shelfnumber => $shelf->shelfnumber, + shelfname => $shelf->shelfname, + ); + } else { + # TODO + } } -else { - if($selectedshelf){ - # adding to specific shelf - my ( $singleshelf, $singleshelfname, $singlecategory ) = GetShelf( $query->param('selectedshelf') ); - $template->param( - singleshelf => 1, - shelfnumber => $singleshelf, - shelfname => $singleshelfname, - "category$singlecategory" => 1 - ); - } else { - - my $privateshelves = GetAllShelves(1,$loggedinuser); - if(@{$privateshelves}){ - $template->param ( - privatevirtualshelves => $privateshelves, - existingshelves => 1 - ); - } - my $publicshelves = GetAllShelves(2,$loggedinuser); - if(@{$publicshelves}){ - $template->param ( - publicvirtualshelves => $publicshelves, - existingshelves => 1 - ); + +sub HandleSelect { + return unless $authorized= $loggedinuser>0; + my $private_shelves = Koha::Virtualshelves->search( + { + category => 1, + owner => $loggedinuser, + }, + { order_by => 'shelfname' } + ); + my $shelves_shared_with_me = Koha::Virtualshelves->search( + { + category => 1, + 'virtualshelfshares.borrowernumber' => $loggedinuser, + -or => { + allow_add => 1, + owner => $loggedinuser, + } + }, + { + join => 'virtualshelfshares', } + ); + my $public_shelves= Koha::Virtualshelves->search( + { + category => 2, + -or => { + allow_add => 1, + owner => $loggedinuser, + } + }, + { order_by => 'shelfname' } + ); + $template->param ( + private_shelves => $private_shelves, + private_shelves_shared_with_me => $shelves_shared_with_me, + public_shelves => $public_shelves, + ); +} +sub LoadBib { + 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, + ); } - my @biblios; - for my $bib (@biblionumber) { - my $data = GetBiblioData( $bib ); - push(@biblios, - { biblionumber => $bib, - title => $data->{'title'}, - author => $data->{'author'}, - } ); - } - $template->param ( - newshelf => $newshelf, - multiple => (scalar(@biblios) > 1), - total => scalar @biblios, - biblios => \@biblios, - authorized => $authorized, - ); - - output_html_with_http_headers $query, $cookie, $template->output; + +sub ShowTemplate { + $template->param ( + newshelf => $newshelf||0, + authorized => $authorized, + errcode => $errcode, + OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'), + ); + output_html_with_http_headers $query, $cookie, $template->output; }