worked b/c the pages still display their previous behavior, including unfixed bugs.
Signed-off-by: Chris Cormack <crc@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
# Suite 330, Boston, MA 02111-1307 USA
use strict;
+use Carp;
use C4::Context;
use C4::Circulation;
use vars qw($VERSION @ISA @EXPORT);
#'
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__
--- /dev/null
+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<modifyshelfcontents>
+
+ If this script has to modify the shelf content.
+
+=item C<shelfnumber>
+
+ To know on which shelf to work.
+
+=item C<addbarcode>
+
+=item C<op>
+
+ 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<viewshelf>
+
+ To load the template with 'viewshelves param' which allow to read the shelves information.
+
+=item C<shelves>
+
+ If equals to 1. then call the function shelves which add
+ or delete a shelf.
+
+=item C<addshelf>
+
+ If the param shelves = 1 then addshelf must be equals to the name of the shelf to add.
+
+=back
+
+=cut
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="shelves" -->
- <!-- TMPL_IF NAME="status1" -->
- <p class="error"><!-- TMPL_VAR NAME="string1" --></p>
- <!-- /TMPL_IF -->
<!-- TMPL_LOOP NAME="paramsloop" -->
- <!-- TMPL_IF NAME="status" -->
- <p class="error"><!-- TMPL_VAR NAME="string" --></p>
- <!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="delete_ok" -->
+ <p class="message">Shelf <!-- TMPL_VAR NAME="delete_ok" --> Deleted.</p>
+ <!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="delete_fail" -->
+ <p class="error">ERROR: Database error. Delete (shelf number <!-- TMPL_VAR NAME="delete_fail" -->) failed.</p>
+ <!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="unrecognized" -->
+ <p class="error">ERROR: Shelf number <!-- TMPL_VAR NAME="unrecognized" --> unrecognized.</p>
+ <!-- /TMPL_IF -->
<!-- /TMPL_LOOP -->
<!-- /TMPL_IF --><!-- /shelves -->
# 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<modifyshelfcontents>
-
- if this script has to modify the shelf content.
-
-=item C<shelfnumber>
-
- to know on which shelf this script has to work.
-
-=item C<addbarcode>
-
-=item C<op>
-
- 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<viewshelf>
-
- to load the template with 'viewshelves param' which allows reading the shelves information.
-
-=item C<shelves>
-
- if == 1, then call the function shelves to add or delete a shelf.
-
-=item C<addshelf>
-
- 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);
--- /dev/null
+#!/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<modifyshelfcontents>
+
+ if this script has to modify the shelf content.
+
+=item C<shelfnumber>
+
+ to know on which shelf this script has to work.
+
+=item C<addbarcode>
+
+=item C<op>
+
+ 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<viewshelf>
+
+ to load the template with 'viewshelves param' which allows reading the shelves information.
+
+=item C<shelves>
+
+ if == 1, then call the function shelves to add or delete a shelf.
+
+=item C<addshelf>
+
+ 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;
# 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<modifyshelfcontents>
-
- if this script has to modify the shelve content.
-
-=item C<shelfnumber>
-
- to know on which shelve this script has to work.
-
-=item C<addbarcode>
-
-=item C<op>
-
- 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<viewshelf>
-
- to load the template with 'viewshelves param' which allow to read the shelves information.
-
-=item C<shelves>
-
- if equals to 1. then call the function shelves which add
- or delete a shelf.
-
-=item C<addshelf>
-
- 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;
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);
--- /dev/null
+#!/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<modifyshelfcontents>
+
+ if this script has to modify the shelve content.
+
+=item C<shelfnumber>
+
+ to know on which shelve this script has to work.
+
+=item C<addbarcode>
+
+=item C<op>
+
+ 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<viewshelf>
+
+ to load the template with 'viewshelves param' which allow to read the shelves information.
+
+=item C<shelves>
+
+ if equals to 1. then call the function shelves which add
+ or delete a shelf.
+
+=item C<addshelf>
+
+ 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,
+ );
+}