X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-shelves.pl;h=e58fe288bc2adebfec5af7a285bc021c80543cde;hb=fc1342f73df868410e0ab670981f25ba2e1acd74;hp=5e252e0120fe027f3cc5656eb427cfa40a06a93f;hpb=a3999812e691110f2e16fffd91ce0ed82d69178c;p=koha.git diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl index 5e252e0120..e58fe288bc 100755 --- a/opac/opac-shelves.pl +++ b/opac/opac-shelves.pl @@ -1,9 +1,5 @@ #!/usr/bin/perl -#script to provide bookshelf management -# WARNING: This file uses 4-character tabs! -# -# $Header$ -# + # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -21,268 +17,252 @@ # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA +# $Id$ + +=head1 NAME + + opac-shelves.pl + +=head1 DESCRIPTION + + this script is used to script to provide bookshelf management + +=head1 CGI PARAMETERS + +=over 4 + +=item C + + if this script has to modify the shelve content. + +=item C + + to know on which shelve this script has to work. + +=item C + +=item C + + op can be equals to: + * modifsave to save change on the shelves + * modif to change the template to allow to modify the shelves. + +=item C + + to load the template with 'viewshelves param' which allow to read the shelves information. + +=item C + + if equals to 1. then call the function shelves which add + or delete a shelf. + +=item C + + if the param shelves = 1 then addshelf must be equals to the name of the shelf to add. + +=back + +=cut + use strict; -use C4::Search; use CGI; use C4::Output; use C4::BookShelves; use C4::Circulation::Circ2; use C4::Auth; use C4::Interface::CGI::Output; -use HTML::Template; -my $env; my $query = new CGI; -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "opac-shelves.tmpl", - query => $query, - type => "opac", - authnotrequired => 1, - }); - -if ($query->param('modifyshelfcontents')) { - my $shelfnumber=$query->param('shelfnumber'); - my $barcode=$query->param('addbarcode'); - my ($item) = getiteminformation($env, 0, $barcode); - if (ShelfPossibleAction($loggedinuser,$shelfnumber,'manage')) { - AddToShelf($env, $item->{'itemnumber'}, $shelfnumber); - foreach ($query->param) { - if (/REM-(\d*)/) { - my $itemnumber=$1; - RemoveFromShelf($env, $itemnumber, $shelfnumber); - } - } - } +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "opac-shelves.tmpl", + query => $query, + type => "opac", + authnotrequired => 1, + } +); + +if ( $query->param('modifyshelfcontents') ) { + my $shelfnumber = $query->param('viewshelf'); + my $barcode = $query->param('addbarcode'); + my ($item) = getiteminformation( 0, $barcode ); + if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ) ) { + AddToShelf( $item->{'itemnumber'}, $shelfnumber ); + foreach ( $query->param ) { + if (/MOD-(\d*)/) { + my $itemnumber = $1; + if ( $query->param('remove') eq "on" ) { + DelFromShelf( $itemnumber, $shelfnumber ); + } + } + } + } } -my ($shelflist) = GetShelfList($loggedinuser,2); -$template->param({ loggedinuser => $loggedinuser, - }); +# getting the Shelves list +my $shelflist = GetShelves( $loggedinuser, 2 ); +$template->param( { loggedinuser => $loggedinuser } ); +my $op = $query->param('op'); + SWITCH: { - if ($query->param('op') eq 'modifsave') { - ModifShelf($query->param('shelfnumber'),$query->param('shelfname'),$loggedinuser,$query->param('category')); - last SWITCH; - } - if ($query->param('op') eq 'modif') { - my ($shelfnumber,$shelfname,$owner,$category) = GetShelf($query->param('shelf')); - $template->param(edit => 1, - shelfnumber => $shelfnumber, - shelfname => $shelfname, - "category$category" => 1); -# editshelf($query->param('shelf')); - last SWITCH; - } - if ($query->param('viewshelf')) { - viewshelf($query->param('viewshelf')); - last SWITCH; - } - if ($query->param('shelves')) { - shelves(); - last SWITCH; - } + if ( $op && ( $op eq 'modifsave' ) ) { + ModShelf( + $query->param('shelfnumber'), $query->param('shelfname'), + $loggedinuser, $query->param('category') + ); + last SWITCH; + } + if ( $op && ( $op eq 'modif' ) ) { + my ( $shelfnumber, $shelfname, $owner, $category ) = + GetShelf( $query->param('shelf') ); + $template->param( + edit => 1, + shelfnumber => $shelfnumber, + shelfname => $shelfname, + "category$category" => 1 + ); + + # editshelf($query->param('shelf')); + last SWITCH; + } + if ( $query->param('viewshelf') ) { + #check that the user can view the shelf + my $shelfnumber = $query->param('viewshelf'); + if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' ) ) { + my $items = GetShelfContents($shelfnumber); + $template->param( + shelfname => $shelflist->{$shelfnumber}->{'shelfname'}, + shelfnumber => $shelfnumber, + viewshelf => $query->param('viewshelf'), + manageshelf => &ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ), + itemsloop => $items, + ); + } + last SWITCH; + } + if ( $query->param('shelves') ) { + if ( my $newshelf = $query->param('addshelf') ) { + my $shelfnumber = AddShelf( + $newshelf, + $query->param('owner'), + $query->param('category') + ); + + if ( $shelfnumber == -1 ) { #shelf already exists. + $template->param( + { + shelfnumber => $shelfnumber, + already => 1 + } + ); + } + } + my @paramsloop; + foreach ( $query->param() ) { + my %line; + if (/DEL-(\d+)/) { + my $delshelf = $1; + my ( $status, $count ) = DelShelf($delshelf); + if ($status) { + $line{'status'} = $status; + $line{'count'} = $count; + } + } + + #if the shelf is not deleted, %line points on null + push( @paramsloop, \%line ); + } + $template->param( paramsloop => \@paramsloop ); + my ($shelflist) = GetShelves( $loggedinuser, 2 ); + my $color = ''; + my @shelvesloop; + foreach my $element ( sort keys %$shelflist ) { + my %line; + ( $color eq 1 ) ? ( $color = 0 ) : ( $color = 1 ); + $line{'toggle'} = $color; + $line{'shelf'} = $element; + $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; + $line{'shelfbookcount'} = $shelflist->{$element}->{'count'}; + push( @shelvesloop, \%line ); + } + $template->param( + shelvesloop => \@shelvesloop, + shelves => 1, + ); + last SWITCH; + } } -($shelflist) = GetShelfList($loggedinuser,2); # rebuild shelflist in case a shelf has been added +($shelflist) = + GetShelves( $loggedinuser, 2 ) + ; # rebuild shelflist in case a shelf has been added -my $color=''; +my $color = ''; my @shelvesloop; -foreach my $element (sort keys %$shelflist) { - my %line; - ($color eq 0) ? ($color=1) : ($color=0); - $line{'color'}= $color; - $line{'shelf'}=$element; - $line{'shelfname'}=$shelflist->{$element}->{'shelfname'}; - $line{"category".$shelflist->{$element}->{'category'}} = 1; - $line{'mine'} = 1 if $shelflist->{$element}->{'owner'} eq $loggedinuser; - $line{'shelfbookcount'}=$shelflist->{$element}->{'count'}; - $line{'canmanage'} = ShelfPossibleAction($loggedinuser,$element,'manage'); - $line{'firstname'}=$shelflist->{$element}->{'firstname'} unless $shelflist->{$element}->{'owner'} eq $loggedinuser; - $line{'surname'}=$shelflist->{$element}->{'surname'} unless $shelflist->{$element}->{'owner'} eq $loggedinuser; -; - push (@shelvesloop, \%line); -} -$template->param(shelvesloop => \@shelvesloop); +foreach my $element ( sort keys %$shelflist ) { + my %line; + ( $color eq 1 ) ? ( $color = 0 ) : ( $color = 1 ); + $line{'toggle'} = $color; + $line{'shelf'} = $element; + $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; + $line{ "category" . $shelflist->{$element}->{'category'} } = 1; + $line{'mine'} = 1 if $shelflist->{$element}->{'owner'} eq $loggedinuser; + $line{'shelfbookcount'} = $shelflist->{$element}->{'count'}; + $line{'canmanage'} = + ShelfPossibleAction( $loggedinuser, $element, 'manage' ); + $line{'firstname'} = $shelflist->{$element}->{'firstname'} + unless $shelflist->{$element}->{'owner'} eq $loggedinuser; + $line{'surname'} = $shelflist->{$element}->{'surname'} + unless $shelflist->{$element}->{'owner'} eq $loggedinuser; + push( @shelvesloop, \%line ); + } + +$template->param( + shelvesloop => \@shelvesloop, + "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1, +); output_html_with_http_headers $query, $cookie, $template->output; -# sub editshelf { -# my ($shelfnumber) = @_; -# my ($shelfnumber,$shelfname,$owner,$category) = GetShelf($shelfnumber); -# $template->param(edit => 1, -# shelfnumber => $shelfnumber, -# shelfname => $shelfname, -# "category$category" => 1); -# } -sub shelves { - if (my $newshelf=$query->param('addshelf')) { - my ($status, $string) = AddShelf($env,$newshelf,$query->param('owner'),$query->param('category')); - if ($status) { - $template->param(status1 => $status, string1 => $string); - } - } - my @paramsloop; - foreach ($query->param()) { - my %line; - if (/DEL-(\d+)/) { - my $delshelf=$1; - my ($status, $string) = RemoveShelf($env,$delshelf); - if ($status) { - $line{'status'}=$status; - $line{'string'} = $string; - } - } - #if the shelf is not deleted, %line points on null - push(@paramsloop,\%line); - } - $template->param(paramsloop => \@paramsloop); - my ($shelflist) = GetShelfList($loggedinuser,2); - my $color=''; - my @shelvesloop; - foreach my $element (sort keys %$shelflist) { - my %line; - ($color eq 0) ? ($color=1) : ($color=0); - $line{'color'}=$color; - $line{'shelf'}=$element; - $line{'shelfname'}=$shelflist->{$element}->{'shelfname'} ; - $line{'shelfbookcount'}=$shelflist->{$element}->{'count'} ; - push(@shelvesloop, \%line); - } - $template->param(shelvesloop=>\@shelvesloop, - shelves => 1, - ); -} -sub viewshelf { - my $shelfnumber=shift; - #check that the user can view the shelf - return unless (ShelfPossibleAction($loggedinuser,$shelfnumber,'view')); - my ($itemlist) = GetShelfContents($env, $shelfnumber); - my $item=''; - my $color=''; - my @itemsloop; - foreach $item (sort {$a->{'barcode'} cmp $b->{'barcode'}} @$itemlist) { - my %line; - ($color eq 0) ? ($color=1) : ($color=0); - $line{'color'}=$color; - $line{'itemnumber'}=$item->{'itemnumber'}; - $line{'barcode'}=$item->{'barcode'}; - $line{'title'}=$item->{'title'}; - $line{'author'}=$item->{'author'}; - $line{'classification'}=$item->{'classification'}; - $line{'itemtype'}=$item->{'itemtype'}; - $line{biblionumber} = $item->{biblionumber}; - push(@itemsloop, \%line); - } - $template->param( itemsloop => \@itemsloop, - shelfname => $shelflist->{$shelfnumber}->{'shelfname'}, - shelfnumber => $shelfnumber, - viewshelf => $query->param('viewshelf'), - manageshelf => &ShelfPossibleAction($loggedinuser,$shelfnumber,'manage'), - ); -} # # $Log$ -# Revision 1.8 2006/05/21 02:30:17 kados -# syncing dev-week and HEAD -# -# Revision 1.7 2005/05/04 09:02:38 tipaul -# synch'ing 2.2 and head -# -# Revision 1.3.2.4 2005/03/25 17:04:28 tipaul -# adding virtual shelves & suggestions button to the top -# -# Revision 1.3.2.3 2005/01/27 17:18:28 oleonard -# Taking table cell background color information out of the script and moving it into the template (requires update to opac-shelves.tmpl) -# -# Revision 1.3.2.2 2005/01/11 20:18:29 oleonard -# Adding call number and item type to list of returned variables -# -# Revision 1.3.2.1 2005/01/11 16:33:57 tipaul -# fix for http://bugs.koha.org/cgi-bin/bugzilla/show_bug.cgi?id=811 : -# The OPAC requires uses to log in to view virtual shelves, and it requires a user -# with librarian privileges. Virtual shelves should be viewable by all users, -# logged in or not, and editable by all logged-in users in good standing. -# -# Revision 1.3 2005/01/03 11:09:34 tipaul -# synch'ing virtual shelves management in opac with the librarian one, that has more features -# -# Revision 1.5 2004/12/16 11:30:57 tipaul -# adding bookshelf features : -# * create bookshelf on the fly -# * modify a bookshelf name & status -# -# Revision 1.4 2004/12/15 17:28:23 tipaul -# adding bookshelf features : -# * create bookshelf on the fly -# * modify a bookshelf (this being not finished, will commit the rest soon) +# Revision 1.9 2007/03/09 15:12:54 tipaul +# rel_3_0 moved to HEAD # -# Revision 1.3 2004/12/02 16:38:50 tipaul -# improvement in book shelves +# Revision 1.8.2.12 2007/01/15 17:19:30 toins +# enable to add checked items to a shelf. +# Some display enhancements. # -# Revision 1.2 2004/11/19 16:31:30 tipaul -# bugfix for bookshelves not in official CVS +# Revision 1.8.2.11 2007/01/10 10:52:58 toins +# adding syspref directly to Auth.pm instead of to the template. # -# Revision 1.1.2.1 2004/03/10 15:08:18 tipaul -# modifying shelves : introducing category of shelf : private, public, free for all +# Revision 1.8.2.10 2007/01/10 10:12:48 toins +# Adding OpacTopissue, OpacCloud, OpacAuthorithies to the template->param. +# + Some cleanup. # -# Revision 1.13 2004/02/11 08:35:31 tipaul -# synch'ing 2.0.0 branch and head +# Revision 1.8.2.9 2006/12/15 17:43:24 toins +# sync with intranet. # -# Revision 1.12.2.1 2004/02/06 14:22:19 tipaul -# fixing bugs in bookshelves management. +# Revision 1.8.2.8 2006/12/14 17:59:17 toins +# add the link to "BiblioDefaultView systempref" and not to opac-detail.pl # -# Revision 1.12 2003/02/05 10:04:14 acli -# Worked around weirdness with HTML::Template; without the {}, it complains -# of being passed an odd number of arguments even though we are not +# Revision 1.8.2.7 2006/12/14 17:22:55 toins +# bookshelves work perfectly with mod_perl and are cleaned. # -# Revision 1.11 2003/02/05 09:23:03 acli -# Fixed a few minor errors to make it run -# Noted correct tab size +# Revision 1.8.2.6 2006/12/14 16:04:25 toins +# sync with intranet. # -# Revision 1.10 2003/02/02 07:18:37 acli -# Moved C4/Charset.pm to C4/Interface/CGI/Output.pm +# Revision 1.8.2.5 2006/12/11 17:10:06 toins +# fixing some bugs on bookshelves. # -# Create output_html_with_http_headers function to contain the "print $query -# ->header(-type => guesstype...),..." call. This is in preparation for -# non-HTML output (e.g., text/xml) and charset conversion before output in -# the future. +# Revision 1.8.2.4 2006/12/07 15:42:15 toins +# synching opac & intranet. +# fix some broken link & bugs. +# removing warn compilation. # -# Created C4/Interface/CGI/Template.pm to hold convenience functions specific -# to the CGI interface using HTML::Template +# Revision 1.8.2.3 2006/11/30 18:23:51 toins +# theses scripts don't need to use C4::Search. # -# Modified moremembers.pl to make the "sex" field localizable for languages -# where M and F doesn't make sense -# -# Revision 1.9 2002/12/19 18:55:40 hdl -# Templating reservereport et shelves. -# -# Revision 1.9 2002/08/14 18:12:51 hdl -# Templating files -# -# Revision 1.8 2002/08/14 18:12:51 tonnesen -# Added copyright statement to all .pl and .pm files -# -# Revision 1.7 2002/07/05 05:03:37 tonnesen -# Minor changes to authentication routines. -# -# Revision 1.5 2002/07/04 19:42:48 tonnesen -# Minor changes -# -# Revision 1.4 2002/07/04 19:21:29 tonnesen -# Beginning of authentication api. Applied to shelves.pl for now as a test case. -# -# Revision 1.2.2.1 2002/06/26 20:28:15 tonnesen -# Some udpates that I made here locally a while ago. Still won't be useful, but -# should be functional -# -# -# - - - - -# Local Variables: -# tab-width: 4 -# End: