X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=virtualshelves%2Faddbybiblionumber.pl;h=ff0ef5045b0546cb0bd3d3cbc50a146d2d72829a;hb=d92b2b4c671001acf7dfd9cd0cf643f797d6f58e;hp=1ad57753d08313ce8df83ec4728f013bece21420;hpb=6cdf0832e2ad3739a42fa811cc08363908c0dec2;p=koha-ffzg.git diff --git a/virtualshelves/addbybiblionumber.pl b/virtualshelves/addbybiblionumber.pl index 1ad57753d0..ff0ef5045b 100755 --- a/virtualshelves/addbybiblionumber.pl +++ b/virtualshelves/addbybiblionumber.pl @@ -1,30 +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., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -# $Id$ =head1 NAME - addbybiblionumber.pl +addbybiblionumber.pl =head1 DESCRIPTION @@ -47,134 +44,164 @@ 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 adds one with this 'public' setting. + +=item newshelf - if this script has to add a shelf, it add one with this category. + if this parameter exists, then we create a new shelf =back =cut -use strict; -use C4::Biblio; -use CGI; -use C4::Output; -use C4::VirtualShelves; -use C4::Circulation; -use C4::Auth; +use Modern::Perl; -#use it only to debug ! -use CGI::Carp qw/fatalsToBrowser/; -use warnings; +use CGI qw ( -utf8 ); +use C4::Output qw( output_html_with_http_headers ); +use C4::Auth qw( get_template_and_user ); -my $query = new CGI; -my $biblionumber = $query->param('biblionumber'); +use Koha::Biblios; +use Koha::Virtualshelves; + +my $query = CGI->new; my $shelfnumber = $query->param('shelfnumber'); my $newvirtualshelf = $query->param('newvirtualshelf'); -my $category = $query->param('category'); +my $newshelf = $query->param('newshelf'); +my $public = $query->param('public'); +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, flagsrequired => { catalogue => 1 }, } ); -$shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category ) - if $newvirtualshelf; -if ( $shelfnumber || ( $shelfnumber == -1 ) ) { # the shelf already exist. - &AddToShelfFromBiblio( $biblionumber, $shelfnumber ); - print -"Content-Type: text/html\n\n"; - exit; -} -else { # this shelf doesn't already exist. - my ( $bibliocount, @biblios ) = GetBiblio($biblionumber); - - my ($shelflist) = GetShelves( $loggedinuser, 3 ); - my @shelvesloop; - my %shelvesloop; - foreach my $element ( sort keys %$shelflist ) { - push( @shelvesloop, $element ); - $shelvesloop{$element} = $shelflist->{$element}->{'shelfname'}; +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; } - my $CGIvirtualshelves = CGI::scrolling_list( - -name => 'shelfnumber', - -values => \@shelvesloop, - -labels => \%shelvesloop, - -size => 1, - -tabindex => '', - -multiple => 0 - ); +} 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; + } + +} 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 + } +} 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' } + ); $template->param( - biblionumber => $biblionumber, - title => $biblios[0]->{'title'}, - author => $biblios[0]->{'author'}, - CGIvirtualshelves => $CGIvirtualshelves, - intranetcolorstylesheet => - C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), + private_shelves => $private_shelves, + private_shelves_shared_with_me => $shelves_shared_with_me, + public_shelves => $public_shelves, ); - output_html_with_http_headers $query, $cookie, $template->output; } -# $Log$ -# Revision 1.8 2007/04/24 13:54:29 hdl -# functions that were in C4::Interface::CGI::Output are now in C4::Output. -# So this implies quite a change for files. -# Sorry about conflicts which will be caused. -# directory Interface::CGI should now be dropped. -# I noticed that many scripts (reports ones, but also some circ/stats.pl or opac-topissues) still use Date::Manip. -# -# Revision 1.7 2007/04/04 16:46:22 tipaul -# HUGE COMMIT : code cleaning circulation. -# -# some stuff to do, i'll write a mail on koha-devel NOW ! -# -# Revision 1.6 2007/03/09 14:32:26 tipaul -# rel_3_0 moved to HEAD -# -# Revision 1.4.2.6 2006/12/18 16:35:17 toins -# removing use HTML::Template from *.pl. -# -# Revision 1.4.2.5 2006/12/05 11:35:29 toins -# Biblio.pm cleaned. -# additionalauthors, bibliosubject, bibliosubtitle tables are now unused. -# Some functions renamed according to the coding guidelines. -# -# Revision 1.4.2.4 2006/11/30 18:23:51 toins -# theses scripts don't need to use C4::Search. -# -# Revision 1.4.2.3 2006/10/30 09:48:19 tipaul -# samll bugfix to create a virtualshelf correctly -# -# Revision 1.4.2.2 2006/08/30 16:13:54 toins -# correct an error in the "if condition". -# -# Revision 1.4.2.1 2006/08/30 15:59:14 toins -# Code cleaned according to coding guide lines. -# -# Revision 1.4 2006/07/04 14:36:51 toins -# Head & rel_2_2 merged -# -# Revision 1.3.2.4 2006/06/20 16:21:42 oleonard -# Adding "tabindex=''" to CGI:scrolling_lists to prevent incorrect tabbing. See Bug 1098 -# -# Revision 1.3.2.3 2006/02/05 21:59:21 kados -# Adds script support for IntranetNav ... see mail to koha-devel for -# details -# -# Revision 1.3.2.2 2006/02/05 21:45:25 kados -# Adds support for intranetstylesheet system pref in Koha scripts -# +my @biblios; +for my $biblionumber (@biblionumbers) { + my $biblio = Koha::Biblios->find( $biblionumber ); + push( + @biblios, + { biblionumber => $biblionumber, + title => $biblio->title, + author => $biblio->author, + } + ); +} +$template->param( + multiple => ( scalar(@biblios) > 1 ), + total => scalar @biblios, + biblios => \@biblios, +); -# Local Variables: -# tab-width: 4 -# End: +$template->param( + newshelf => $newshelf || 0, + authorized => $authorized, + errcode => $errcode, +); +output_html_with_http_headers $query, $cookie, $template->output;