From b323a077592d2a2565e449858c681f0b1eab92b8 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Sat, 12 Jan 2008 07:24:58 -0600 Subject: [PATCH] Shelves consolidation to C4::VirtualShelves::Page. I can tell the consolidation worked b/c the pages still display their previous behavior, including unfixed bugs. Signed-off-by: Chris Cormack Signed-off-by: Joshua Ferraro --- C4/VirtualShelves.pm | 11 +- C4/VirtualShelves/Page.pm | 281 +++++++++++++++++ .../prog/en/modules/opac-shelves.tmpl | 15 +- opac/opac-shelves.pl | 221 +------------ opac/opac-shelves.pl.old | 255 +++++++++++++++ virtualshelves/shelves.pl | 257 +-------------- virtualshelves/shelves.pl.old | 294 ++++++++++++++++++ 7 files changed, 853 insertions(+), 481 deletions(-) create mode 100755 C4/VirtualShelves/Page.pm create mode 100755 opac/opac-shelves.pl.old create mode 100755 virtualshelves/shelves.pl.old diff --git a/C4/VirtualShelves.pm b/C4/VirtualShelves.pm index 30fcbe892f..1970ec00ae 100644 --- a/C4/VirtualShelves.pm +++ b/C4/VirtualShelves.pm @@ -22,6 +22,7 @@ package C4::VirtualShelves; # Suite 330, Boston, MA 02111-1307 USA use strict; +use Carp; use C4::Context; use C4::Circulation; use vars qw($VERSION @ISA @EXPORT); @@ -393,14 +394,14 @@ sub DelFromShelf { #' sub DelShelf { - my ( $shelfnumber ) = @_; + unless (@_) { + carp "DelShelf called without valid argument (shelfnumber)"; + return undef; + } my $sth = $dbh->prepare("DELETE FROM virtualshelves WHERE shelfnumber=?"); - $sth->execute($shelfnumber); - return 0; + return $sth->execute(shift); } -END { } # module clean-up code here (global destructor) - 1; __END__ diff --git a/C4/VirtualShelves/Page.pm b/C4/VirtualShelves/Page.pm new file mode 100755 index 0000000000..108397d4f5 --- /dev/null +++ b/C4/VirtualShelves/Page.pm @@ -0,0 +1,281 @@ +package C4::VirtualShelves::Page; + +# +# 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 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 + +# perldoc at the end of the file, per convention. + +use strict; +use warnings; +use CGI; +use C4::VirtualShelves; +use C4::Biblio; +use C4::Items; +use C4::Auth; +use C4::Output; +use Exporter; + +use vars qw($debug @EXPORT @ISA $VERSION); + +BEGIN { + $VERSION = 1.00; + @ISA = qw(Exporter); + @EXPORT = qw(&shelfpage); + $debug = $ENV{DEBUG} || 0; +} + +our %pages = ( + intranet => { + redirect=>'/cgi-bin/koha/virtualshelves/shelves.pl', + }, + opac => { + redirect=>'/cgi-bin/koha/opac-shelves.pl', + }, +); + +sub shelfpage ($$$$$) { + my ($type, $query, $template, $loggedinuser, $cookie ) = @_; + ($pages{$type}) or $type = 'opac'; + $query or die "No query"; + $template or die "No template"; + +# the format of this is unindented for ease of diff comparison to the old script + +if ( $query->param('modifyshelfcontents') ) { + my $shelfnumber = $query->param('viewshelf'); + my $barcode = $query->param('addbarcode'); + my ($item) = GetItem( 0, $barcode ); + my ($biblio) = GetBiblioFromItemNumber($item->{'itemnumber'}); + if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ) ) { + AddToShelf( $biblio->{'biblionumber'}, $shelfnumber ); + foreach ( $query->param ) { + /REM-(\d*)/ or next; + $debug and warn "SHELVES: user $loggedinuser removing item $1 from shelf $shelfnumber"; + DelFromShelf( $1, $shelfnumber ); # $1 is biblionumber + } + } +} + +my $showadd = 1; +# set the default tab, etc. (for OPAC) +my $shelf_type = $query->param('display'); +if (defined $shelf_type) { + if ($shelf_type eq 'privateshelves') { + $template->param(showprivateshelves => 1); + } elsif ($shelf_type eq 'publicshelves') { + $template->param(showpublicshelves => 1); + $showadd = 0; + } else { + $debug and warn "Invalid 'display' param ($shelf_type)"; + } +} else { + $template->param(showprivateshelves => 1); +} + +# getting the Shelves list +my $shelflist = GetShelves( $loggedinuser, 2 ); +$template->param( { loggedinuser => $loggedinuser } ); +my $op = $query->param('op'); + +SWITCH: { + if ( $op ) { + if ( $op eq 'modifsave' ) { + ModShelf( + $query->param('shelfnumber'), $query->param('shelfname'), + $loggedinuser, $query->param('category'), $query->param('sortfield') + ); + $shelflist = GetShelves( $loggedinuser, 2 ); # refresh after mods + } elsif ( $op eq 'modif' ) { + my ( $shelfnumber, $shelfname, $owner, $category, $sortfield ) =GetShelf( $query->param('shelf') ); + $template->param( + edit => 1, + shelfnumber => $shelfnumber, + shelfname => $shelfname, + "category$category" => 1, + "sort_$sortfield" => 1, + ); + } + 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); + $showadd = 1; + my $i = 0; + foreach (grep {$i++ % 2} @$items) { # every other item + $_->{toggle} = 1; + } + # my $manageshelf = &ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ); + # ($manageshelf) and $showadd = 1; + $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. + $showadd = 1; + $template->param( + shelfnumber => $shelfnumber, + already => 1 + ); + } else { + print $query->redirect($pages{$type}->{redirect} . "?viewshelf=$shelfnumber"); + exit; + } + } + my @paramsloop; + foreach ( $query->param() ) { + /DEL-(\d+)/ or next; + my $number = $1; + my %line; + if (defined $shelflist->{$number}) { + my $name = $shelflist->{$number}->{'shelfname'}; + if (DelShelf($number)) { + delete $shelflist->{$number}; + $line{delete_ok} = $name; + } else { + $line{delete_fail} = $name; + } + } else { + $line{unrecognized} = $number; + } + push(@paramsloop, \%line); + # print $query->redirect("/cgi-bin/koha/virtualshelves/shelves.pl"); exit; + } + $showadd = 1; + $template->param( + paramsloop => \@paramsloop, + shelves => 1, + ); + last SWITCH; + } +} + +# rebuild shelflist in case a shelf has been added +$shelflist = GetShelves( $loggedinuser, 2 ); +$showadd and $template->param(showadd => 1); +my $i = 0; +my @shelvesloop; +my @shelveslooppriv; +my $numberCanManage = 0; + +foreach my $element (sort { lc($shelflist->{$a}->{'shelfname'}) cmp lc($shelflist->{$b}->{'shelfname'}) } keys %$shelflist) { + my %line; + (++$i % 2) and $line{'toggle'} = $i; + $line{'shelf'} = $element; + $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; + $line{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; + $line{'sortfield'} = $shelflist->{$element}->{'sortfield'}; + $line{"viewcategory$shelflist->{$element}->{'category'}"} = 1; + $line{'canmanage'} = ShelfPossibleAction( $loggedinuser, $element, 'manage' ); + if ($shelflist->{$element}->{'owner'} eq $loggedinuser) { + $line{'mine'} = 1; + } else { + $line{'firstname'} = $shelflist->{$element}->{'firstname'}; + $line{'surname'} = $shelflist->{$element}->{'surname'} ; + } + $numberCanManage++ if $line{'canmanage'}; + if ($shelflist->{$element}->{'category'} eq '1') { + push (@shelveslooppriv, \%line); + } else { + push (@shelvesloop, \%line); + } +} + +$template->param( + shelveslooppriv => \@shelveslooppriv, + shelvesloop => \@shelvesloop, + shelvesloopall => [(@shelvesloop, @shelveslooppriv)], + numberCanManage => $numberCanManage, + "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1, +); +if ($template->param('viewshelf') or + $template->param( 'shelves' ) or + $template->param( 'edit' ) ) { + $template->param(vseflag => 1); +} +if ($template->param( 'shelves' ) or + $template->param( 'edit' ) ) { + $template->param( seflag => 1); +} + +output_html_with_http_headers $query, $cookie, $template->output; +} + +1; +__END__ + +=head1 NAME + + VirtualShelves/Page.pm + +=head1 DESCRIPTION + + Module used for both OPAC and intranet pages. + +=head1 CGI PARAMETERS + +=over 4 + +=item C + + If this script has to modify the shelf content. + +=item C + + To know on which shelf 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 diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-shelves.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-shelves.tmpl index 32a693cb3e..332b5d5b84 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-shelves.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-shelves.tmpl @@ -75,13 +75,16 @@ - -

- - -

- + +

Shelf Deleted.

+ + +

ERROR: Database error. Delete (shelf number ) failed.

+ + +

ERROR: Shelf number unrecognized.

+ diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl index abef815354..b26f73aed3 100755 --- a/opac/opac-shelves.pl +++ b/opac/opac-shelves.pl @@ -17,229 +17,18 @@ # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA - -=head1 NAME - - opac-shelves.pl - -=head1 DESCRIPTION - - this script is used to script to provide virtualshelf management - -=head1 CGI PARAMETERS - -=over 4 - -=item C - - if this script has to modify the shelf content. - -=item C - - to know on which shelf this script has to work. - -=item C - -=item C - - op can equal the following values: - * 'modifsave' to save changes on the shelves - * 'modif' to change the template to allow modification of the shelves. - -=item C - - to load the template with 'viewshelves param' which allows reading the shelves information. - -=item C - - if == 1, then call the function shelves to 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 warnings; use CGI; -use C4::Output; -use C4::VirtualShelves; -use C4::Circulation; +use C4::VirtualShelves::Page; use C4::Auth; -use C4::Output; -use C4::Biblio; -use C4::Items; -use vars qw($debug); +my $query = CGI->new(); -BEGIN { - $debug = $ENV{DEBUG} || 0; -} - -my $query = new CGI; - -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { +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) = GetItemnumberFromBarcode($barcode); - my ($biblio) = GetBiblioFromItemNumber($item->{'itemnumber'}); - if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ) ) { - AddToShelf( $biblio->{'biblionumber'}, $shelfnumber ); - foreach ( $query->param ) { - /REM-(\d+)/ or next; - $debug and warn "SHELVES: user $loggedinuser removing item $1 from shelf $shelfnumber"; - DelFromShelf( $1, $shelfnumber ); # $1 is biblionumber - } - } -} - -my $showadd = 1; -# set the default tab, etc. -my $shelf_type = $query->param('display'); -if (defined $shelf_type) { - if ($shelf_type eq 'privateshelves') { - $template->param(showprivateshelves => 1); - } elsif ($shelf_type eq 'publicshelves') { - $template->param(showpublicshelves => 1); - $showadd = 0; - } else { - $debug and warn "Invalid 'display' param ($shelf_type)"; - } -} else { - $template->param(showprivateshelves => 1); -} - -# getting the Shelves list -my $shelflist = GetShelves( $loggedinuser, 2 ); -$template->param( { loggedinuser => $loggedinuser } ); -my $op = $query->param('op'); - -SWITCH: { - if ( $op ) { - if ( $op eq 'modifsave' ) { - ModShelf( - $query->param('shelfnumber'), $query->param('shelfname'), - $loggedinuser, $query->param('category'), $query->param('sortfield') - ); - $shelflist = GetShelves( $loggedinuser, 2 ); # refresh after mods - } elsif ( $op eq 'modif' ) { - my ( $shelfnumber, $shelfname, $owner, $category, $sortfield ) =GetShelf( $query->param('shelf') ); - $template->param( - edit => 1, - shelfnumber => $shelfnumber, - shelfname => $shelfname, - "category$category" => 1, - "sort_$sortfield" => 1, - ); - } - 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); - $showadd = 1; - my $i = 0; - foreach (grep {$i++ % 2} @$items) { # every other item - $_->{toggle} = 1; - } - my $manageshelf = &ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ); - ($manageshelf) and $showadd = 1; - $template->param( - shelfname => $shelflist->{$shelfnumber}->{'shelfname'}, - shelfnumber => $shelfnumber, - viewshelf => $query->param('viewshelf'), - manageshelf => $manageshelf, - itemsloop => $items, - ); - } # else {;} # FIXME - some kind of warning *may* be in order - 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. - $showadd = 1; - $template->param( - shelfnumber => $shelfnumber, - already => $newshelf, - ); - } else { - print $query->redirect("/cgi-bin/koha/opac-shelves.pl?viewshelf=$shelfnumber"); - exit; # can't redirect AND expect %line to DO anything! - } - } - my @paramsloop; - foreach ( $query->param() ) { - /^DEL-(\d+)/ or next; - my %line; - ( $line{status}, $line{count} ) = DelShelf($1); - (defined $shelflist->{$1}) and delete $shelflist->{$1}; - # print $query->redirect("/cgi-bin/koha/opac-shelves.pl"); exit; - # can't redirect and expect %line to DO anything! - push( @paramsloop, \%line ); - } - $showadd = 1; - $template->param( - paramsloop => \@paramsloop, - shelves => 1, - ); - last SWITCH; - } -} - -# rebuilding shelflist (in case a shelf has been added) is not necessary since add redirects! - -$showadd and $template->param(showadd => 1); -my $color = 0; -my @shelvesloop; -my @shelveslooppriv; - -foreach my $element (sort { lc($shelflist->{$a}->{'shelfname'}) cmp lc($shelflist->{$b}->{'shelfname'}) } keys %$shelflist) { - my %line; - $color = ($color) ? 0 : 1; - $color and $line{'toggle'} = $color; - $line{'shelf'} = $element; - $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; - $line{'sortfield'} = $shelflist->{$element}->{'sortfield'}; - $line{"category".$shelflist->{$element}->{'category'}} = 1; - $line{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; - $line{'canmanage'} = ShelfPossibleAction($loggedinuser,$element,'manage'); - if ($shelflist->{$element}->{'owner'} eq $loggedinuser) { - $line{'mine'} = 1; - } else { - $line{'firstname'} = $shelflist->{$element}->{'firstname'}; - $line{ 'surname' } = $shelflist->{$element}->{ 'surname' }; - } - if ($shelflist->{$element}->{'category'} eq '1') { - push (@shelveslooppriv, \%line); - } else { - push (@shelvesloop, \%line); - } -} - -$template->param( - shelveslooppriv => \@shelveslooppriv, - shelvesloop => \@shelvesloop, - "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1, -); - -output_html_with_http_headers $query, $cookie, $template->output; + }); +shelfpage('opac', $query, $template, $loggedinuser, $cookie); diff --git a/opac/opac-shelves.pl.old b/opac/opac-shelves.pl.old new file mode 100755 index 0000000000..0511b7257b --- /dev/null +++ b/opac/opac-shelves.pl.old @@ -0,0 +1,255 @@ +#!/usr/bin/perl + +# 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 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 + + +=head1 NAME + + opac-shelves.pl + +=head1 DESCRIPTION + + this script is used to script to provide virtualshelf management + +=head1 CGI PARAMETERS + +=over 4 + +=item C + + if this script has to modify the shelf content. + +=item C + + to know on which shelf this script has to work. + +=item C + +=item C + + op can equal the following values: + * 'modifsave' to save changes on the shelves + * 'modif' to change the template to allow modification of the shelves. + +=item C + + to load the template with 'viewshelves param' which allows reading the shelves information. + +=item C + + if == 1, then call the function shelves to 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 warnings; +use CGI; +use C4::Output; +use C4::VirtualShelves; +use C4::Circulation; +use C4::Auth; +use C4::Output; +use C4::Biblio; +use C4::Items; + +use vars qw($debug); + +BEGIN { + $debug = $ENV{DEBUG} || 0; +} + +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('viewshelf'); + my $barcode = $query->param('addbarcode'); + my ($item) = GetItemnumberFromBarcode($barcode); + my ($biblio) = GetBiblioFromItemNumber($item->{'itemnumber'}); + if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ) ) { + AddToShelf( $biblio->{'biblionumber'}, $shelfnumber ); + foreach ( $query->param ) { + /REM-(\d+)/ or next; + $debug and warn "SHELVES: user $loggedinuser removing item $1 from shelf $shelfnumber"; + DelFromShelf( $1, $shelfnumber ); # $1 is biblionumber + } + } +} + +my $showadd = 1; +# set the default tab, etc. +my $shelf_type = $query->param('display'); +if (defined $shelf_type) { + if ($shelf_type eq 'privateshelves') { + $template->param(showprivateshelves => 1); + } elsif ($shelf_type eq 'publicshelves') { + $template->param(showpublicshelves => 1); + $showadd = 0; + } else { + $debug and warn "Invalid 'display' param ($shelf_type)"; + } +} else { + $template->param(showprivateshelves => 1); +} + +# getting the Shelves list +my $shelflist = GetShelves( $loggedinuser, 2 ); +$template->param( { loggedinuser => $loggedinuser } ); +my $op = $query->param('op'); + +SWITCH: { + if ( $op ) { + if ( $op eq 'modifsave' ) { + ModShelf( + $query->param('shelfnumber'), $query->param('shelfname'), + $loggedinuser, $query->param('category'), $query->param('sortfield') + ); + $shelflist = GetShelves( $loggedinuser, 2 ); # refresh after mods + } elsif ( $op eq 'modif' ) { + my ( $shelfnumber, $shelfname, $owner, $category, $sortfield ) =GetShelf( $query->param('shelf') ); + $template->param( + edit => 1, + shelfnumber => $shelfnumber, + shelfname => $shelfname, + "category$category" => 1, + "sort_$sortfield" => 1, + ); + } + 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); + $showadd = 1; + my $i = 0; + foreach (grep {$i++ % 2} @$items) { # every other item + $_->{toggle} = 1; + } + my $manageshelf = &ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ); + ($manageshelf) and $showadd = 1; + $template->param( + shelfname => $shelflist->{$shelfnumber}->{'shelfname'}, + shelfnumber => $shelfnumber, + viewshelf => $query->param('viewshelf'), + manageshelf => $manageshelf, + itemsloop => $items, + ); + } # else {;} # FIXME - some kind of warning *may* be in order + 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. + $showadd = 1; + $template->param( + shelfnumber => $shelfnumber, + already => $newshelf, + ); + } else { + print $query->redirect("/cgi-bin/koha/opac-shelves.pl?viewshelf=$shelfnumber"); + exit; # can't redirect AND expect %line to DO anything! + } + } + my @paramsloop; + foreach ( $query->param() ) { + /^DEL-(\d+)/ or next; + my $number = $1; + my %line; + if (defined $shelflist->{$number}) { + my $name = $shelflist->{$number}->{'shelfname'}; + if (DelShelf($number)) { + delete $shelflist->{$number}; + $line{delete_ok} = $name; + } else { + $line{delete_fail} = $name; + } + } else { + $line{unrecognized} = $number; + } + push(@paramsloop, \%line); + # print $query->redirect("/cgi-bin/koha/opac-shelves.pl"); exit; + # can't redirect and expect %line to DO anything! + } + $showadd = 1; + $template->param( + paramsloop => \@paramsloop, + shelves => 1, + ); + last SWITCH; + } +} + +# rebuilding shelflist (in case a shelf has been added) is not necessary since add redirects! + +$showadd and $template->param(showadd => 1); +my $color = 0; +my @shelvesloop; +my @shelveslooppriv; + +foreach my $element (sort { lc($shelflist->{$a}->{'shelfname'}) cmp lc($shelflist->{$b}->{'shelfname'}) } keys %$shelflist) { + my %line; + $color = ($color) ? 0 : 1; + $color and $line{'toggle'} = $color; + $line{'shelf'} = $element; + $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; + $line{'sortfield'} = $shelflist->{$element}->{'sortfield'}; + $line{"category".$shelflist->{$element}->{'category'}} = 1; + $line{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; + $line{'canmanage'} = ShelfPossibleAction($loggedinuser,$element,'manage'); + if ($shelflist->{$element}->{'owner'} eq $loggedinuser) { + $line{'mine'} = 1; + } else { + $line{'firstname'} = $shelflist->{$element}->{'firstname'}; + $line{ 'surname' } = $shelflist->{$element}->{ 'surname' }; + } + if ($shelflist->{$element}->{'category'} eq '1') { + push (@shelveslooppriv, \%line); + } else { + push (@shelvesloop, \%line); + } +} + +$template->param( + shelveslooppriv => \@shelveslooppriv, + shelvesloop => \@shelvesloop, + "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1, +); + +output_html_with_http_headers $query, $cookie, $template->output; diff --git a/virtualshelves/shelves.pl b/virtualshelves/shelves.pl index ffa9508125..a88ebaa1cc 100755 --- a/virtualshelves/shelves.pl +++ b/virtualshelves/shelves.pl @@ -18,58 +18,11 @@ # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA -=head1 NAME - - shelves.pl - -=head1 DESCRIPTION - - this script is used to script to provide virtualshelf 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 warnings; use CGI; -use C4::VirtualShelves; -use C4::Biblio; -use C4::Items; +use C4::VirtualShelves::Page; use C4::Auth; -use C4::Output; my $query = new CGI; @@ -82,208 +35,4 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( flagsrequired => { catalogue => 1 }, } ); - -if ( $query->param('modifyshelfcontents') ) { - my $shelfnumber = $query->param('viewshelf'); - my $barcode = $query->param('addbarcode'); - my ($item) = GetItem( 0, $barcode ); - my ($biblio) = GetBiblioFromItemNumber($item->{'itemnumber'}); - if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ) ) { - AddToShelf( $biblio->{'biblionumber'}, $shelfnumber ); - foreach ( $query->param ) { - if (/REM-(\d*)/) { - my $biblionumber = $1; - DelFromShelf( $biblionumber, $shelfnumber ); - } - } - } -} - -# getting the Shelves list -my $shelflist = GetShelves( $loggedinuser, 2 ); -$template->param( { loggedinuser => $loggedinuser } ); -my $op = $query->param('op'); - -SWITCH: { - if ( $op && ( $op eq 'modifsave' ) ) { - ModShelf( - $query->param('shelfnumber'), $query->param('shelfname'), - $loggedinuser, $query->param('category'), $query->param('sortfield') - ); - last SWITCH; - } - if ( $op && ( $op eq 'modif' ) ) { - my ( $shelfnumber, $shelfname, $owner, $category, $sortfield ) = - GetShelf( $query->param('shelf') ); - $template->param( - edit => 1, - shelfnumber => $shelfnumber, - shelfname => $shelfname, - "category$category" => 1, - "sort_$sortfield" => 1, - ); - 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 - } - ); - } - print $query->redirect("/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=$shelfnumber"); - exit; - } - 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; - } - print $query->redirect("/cgi-bin/koha/virtualshelves/shelves.pl"); - exit; - } - - #if the shelf is not deleted, %line points on null - # push( @paramsloop, \%line ); - } - $template->param( paramsloop => \@paramsloop ); - my ($shelflist) = GetShelves( $loggedinuser, 2 ); - my $color = 0; - my @shelvesloop; - foreach my $element ( sort keys %$shelflist ) { - my %line; - $color = ($color==1) ? 0 : 1; - $color and $line{'toggle'} = $color; - $line{'shelf'} = $element; - $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; - $line{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; - push( @shelvesloop, \%line ); - } - $template->param( - shelvesloop => \@shelvesloop, - shelves => 1, - ); - last SWITCH; - } -} - -# rebuild shelflist in case a shelf has been added -$shelflist = GetShelves( $loggedinuser, 2 ); -my $color = ''; -my @shelvesloop; -my $numberCanManage = 0; - -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{'sortfield'}=$shelflist->{$element}->{'sortfield'}; - $line{"viewcategory$shelflist->{$element}->{'category'}"} = 1; - $line{'mine'} = 1 if $shelflist->{$element}->{'owner'} eq $loggedinuser; - $line{'shelfvirtualcount'} = $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; - $numberCanManage++ if $line{'canmanage'}; - push( @shelvesloop, \%line ); -} - -$template->param( - shelvesloop => \@shelvesloop, - numberCanManage => $numberCanManage, -); -if ($template->param('viewshelf') or - $template->param( 'shelves' ) or - $template->param( 'edit' ) ) { - $template->param(vseflag => 1); -} -if ($template->param( 'shelves' ) or - $template->param( 'edit' ) ) { - $template->param( seflag => 1); -} - -output_html_with_http_headers $query, $cookie, $template->output; - -sub shelves { - my $innertemplate = shift; - 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 ); - } - $innertemplate->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{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; - push( @shelvesloop, \%line ); - } - $innertemplate->param( - shelvesloop => \@shelvesloop, - shelves => 1, - ); -} +shelfpage('intranet', $query, $template, $loggedinuser, $cookie); diff --git a/virtualshelves/shelves.pl.old b/virtualshelves/shelves.pl.old new file mode 100755 index 0000000000..c95bf89c59 --- /dev/null +++ b/virtualshelves/shelves.pl.old @@ -0,0 +1,294 @@ +#!/usr/bin/perl + +# +# 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 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 + +=head1 NAME + + shelves.pl + +=head1 DESCRIPTION + + this script is used to script to provide virtualshelf 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 CGI; +use C4::VirtualShelves; +use C4::Biblio; +use C4::Items; +use C4::Auth; +use C4::Output; + +use vars qw($debug); + +BEGIN { + $debug = $ENV{DEBUG} || 0; +} + +my $query = new CGI; + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "virtualshelves/shelves.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { catalogue => 1 }, + } +); + +if ( $query->param('modifyshelfcontents') ) { + my $shelfnumber = $query->param('viewshelf'); + my $barcode = $query->param('addbarcode'); + my ($item) = GetItem( 0, $barcode ); + my ($biblio) = GetBiblioFromItemNumber($item->{'itemnumber'}); + if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ) ) { + AddToShelf( $biblio->{'biblionumber'}, $shelfnumber ); + foreach ( $query->param ) { + /REM-(\d*)/ or next; + $debug and warn "SHELVES: user $loggedinuser removing item $1 from shelf $shelfnumber"; + DelFromShelf( $1, $shelfnumber ); # $1 is biblionumber + } + } +} + +# getting the Shelves list +my $shelflist = GetShelves( $loggedinuser, 2 ); +$template->param( { loggedinuser => $loggedinuser } ); +my $op = $query->param('op'); + +SWITCH: { + if ( $op && ( $op eq 'modifsave' ) ) { + ModShelf( + $query->param('shelfnumber'), $query->param('shelfname'), + $loggedinuser, $query->param('category'), $query->param('sortfield') + ); + last SWITCH; + } + if ( $op && ( $op eq 'modif' ) ) { + my ( $shelfnumber, $shelfname, $owner, $category, $sortfield ) = + GetShelf( $query->param('shelf') ); + $template->param( + edit => 1, + shelfnumber => $shelfnumber, + shelfname => $shelfname, + "category$category" => 1, + "sort_$sortfield" => 1, + ); + 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 + } + ); + } + print $query->redirect("/cgi-bin/koha/virtualshelves/shelves.pl?viewshelf=$shelfnumber"); + exit; + } + 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; + } + print $query->redirect("/cgi-bin/koha/virtualshelves/shelves.pl"); + exit; + } + + #if the shelf is not deleted, %line points on null + # push( @paramsloop, \%line ); + } + $template->param( paramsloop => \@paramsloop ); + my ($shelflist) = GetShelves( $loggedinuser, 2 ); + my $i = 0; + my @shelvesloop; + foreach my $element ( sort keys %$shelflist ) { + my %line; + (++$i % 2) and $line{'toggle'} = $i; + $line{'shelf'} = $element; + $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; + $line{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; + push( @shelvesloop, \%line ); + } + $template->param( + shelvesloop => \@shelvesloop, + shelves => 1, + ); + last SWITCH; + } +} + +# rebuild shelflist in case a shelf has been added +$shelflist = GetShelves( $loggedinuser, 2 ); +my $i = 0; +my @shelvesloop; +my $numberCanManage = 0; + +foreach my $element ( sort keys %$shelflist ) { + my %line; + (++$i % 2) and $line{'toggle'} = $i; + $line{'shelf'} = $element; + $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; + $line{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; + $line{'sortfield'} = $shelflist->{$element}->{'sortfield'}; + $line{"viewcategory$shelflist->{$element}->{'category'}"} = 1; + $line{'canmanage'} = ShelfPossibleAction( $loggedinuser, $element, 'manage' ); + if ($shelflist->{$element}->{'owner'} eq $loggedinuser) { + $line{'mine'} = 1; + } else { + $line{'firstname'} = $shelflist->{$element}->{'firstname'}; + $line{'surname'} = $shelflist->{$element}->{'surname'} ; + } + $numberCanManage++ if $line{'canmanage'}; + push( @shelvesloop, \%line ); +} + +$template->param( + shelvesloop => \@shelvesloop, + numberCanManage => $numberCanManage, +); +if ($template->param('viewshelf') or + $template->param( 'shelves' ) or + $template->param( 'edit' ) ) { + $template->param(vseflag => 1); +} +if ($template->param( 'shelves' ) or + $template->param( 'edit' ) ) { + $template->param( seflag => 1); +} + +output_html_with_http_headers $query, $cookie, $template->output; + +sub shelves { + my $innertemplate = shift; + 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 ); + } + $innertemplate->param( paramsloop => \@paramsloop ); + my ($shelflist) = GetShelves( $loggedinuser, 2 ); + my $i = 0; + my @shelvesloop; + foreach my $element ( sort keys %$shelflist ) { + my %line; + (++$i % 2) and $line{'toggle'} = $i; + $line{'shelf'} = $element; + $line{'shelfname'} = $shelflist->{$element}->{'shelfname'}; + $line{'shelfvirtualcount'} = $shelflist->{$element}->{'count'}; + push( @shelvesloop, \%line ); + } + $innertemplate->param( + shelvesloop => \@shelvesloop, + shelves => 1, + ); +} -- 2.39.5