use strict;
use warnings;
use CGI;
-use C4::VirtualShelves;
+use C4::VirtualShelves qw/:DEFAULT GetShelvesSummary/;
use C4::Biblio;
use C4::Items;
-use C4::Auth;
+use C4::Koha;
+use C4::Auth qw/get_session/;
+use C4::Members;
use C4::Output;
+use C4::Dates qw/format_date/;
use Exporter;
use vars qw($debug @EXPORT @ISA $VERSION);
BEGIN {
- $VERSION = 1.00;
+ $VERSION = 1.01;
@ISA = qw(Exporter);
@EXPORT = qw(&shelfpage);
$debug = $ENV{DEBUG} || 0;
($pages{$type}) or $type = 'opac';
$query or die "No query";
$template or die "No template";
-
+ $template->param( { loggedinuser => $loggedinuser } );
+ my @paramsloop;
+ # getting the Shelves list
+ my $shelflist = GetShelves( $loggedinuser, 2 );
+ my $op = $query->param('op');
+ my $imgdir = getitemtypeimagesrc();
+ my $itemtypes = GetItemTypes();
+
# the format of this is unindented for ease of diff comparison to the old script
+# Note: do not mistake the assignment statements below for comparisons!
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 ($shelfnumber,$barcode,$item,$biblio);
+ if ($shelfnumber = $query->param('viewshelf')) {
+ if (ShelfPossibleAction($loggedinuser, $shelfnumber, 'manage')) {
+ if ($barcode = $query->param('addbarcode')) {
+ if ($item = GetItem( 0, $barcode )) {
+ $biblio = GetBiblioFromItemNumber($item->{'itemnumber'});
+ AddToShelf($biblio->{'biblionumber'}, $shelfnumber) or
+ push @paramsloop, {duplicatebiblio=>$barcode};
+ } else { push @paramsloop, {failgetitem=>$barcode}; }
+ } else {
+ (grep {/REM-(\d+)/} $query->param) or push @paramsloop, {nobarcode=>1};
+ 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
+ }
+ }
+ } else { push @paramsloop, {nopermission=>$shelfnumber}; }
+ } else { push @paramsloop, {noshelfnumber=>1}; }
}
my $showadd = 1;
$template->param(showprivateshelves => 1);
}
-# getting the Shelves list
-my $shelflist = GetShelves( $loggedinuser, 2 );
-$template->param( { loggedinuser => $loggedinuser } );
-my $op = $query->param('op');
+my($okmanage, $okview);
+my $shelfnumber = $query->param('shelfnumber') || $query->param('viewshelf');
+if ($shelfnumber) {
+ $okmanage = &ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' );
+ $okview = &ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' );
+}
SWITCH: {
if ( $op ) {
+ unless ($okmanage) {
+ push @paramsloop, {nopermission=>$shelfnumber};
+ last SWITCH;
+ }
if ( $op eq 'modifsave' ) {
- ModShelf(
- $query->param('shelfnumber'), $query->param('shelfname'),
- $loggedinuser, $query->param('category'), $query->param('sortfield')
- );
+ my $shelf = {
+ 'shelfname' => $query->param('shelfname'),
+ 'category' => $query->param('category'),
+ 'sortfield' => $query->param('sortfield'),
+ };
+ $shelf->{'owner'} = $loggedinuser if $type eq 'intranet'; #we only overwrite the list owner if &ModShelf was called from the staff client
+
+ ModShelf( $shelfnumber, $shelf );
$shelflist = GetShelves( $loggedinuser, 2 ); # refresh after mods
+
} elsif ( $op eq 'modif' ) {
- my ( $shelfnumber, $shelfname, $owner, $category, $sortfield ) =GetShelf( $query->param('shelf') );
+ my ( $shelfnumber2, $shelfname, $owner, $category, $sortfield ) =GetShelf( $shelfnumber );
$template->param(
edit => 1,
- shelfnumber => $shelfnumber,
+ shelfnumber => $shelfnumber2,
shelfname => $shelfname,
- "category$category" => 1,
+ owner => $owner,
+ "category$category" => 1,
+ category => $category,
"sort_$sortfield" => 1,
);
}
last SWITCH;
}
- if ( $query->param('viewshelf') ) {
+ if ($shelfnumber = $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);
+ if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' ) ) {
+ my $items = GetShelfContents($shelfnumber);
+ for my $this_item (@$items) {
+ $this_item->{imageurl} = $imgdir."/".$itemtypes->{ $this_item->{itemtype} }->{'imageurl'};
+ $this_item->{'description'} = $itemtypes->{ $this_item->{itemtype} }->{'description'};
+ $this_item->{'dateadded'} = format_date($this_item->{'dateadded'});
+ }
$showadd = 1;
my $i = 0;
foreach (grep {$i++ % 2} @$items) { # every other item
}
# 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,
- );
- }
+ $template->param(
+ shelfname => $shelflist->{$shelfnumber}->{'shelfname'},
+ shelfnumber => $shelfnumber,
+ viewshelf => $shelfnumber,
+ manageshelf => &ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ),
+ itemsloop => $items,
+ );
+ } else { push @paramsloop, {nopermission=>$shelfnumber} };
last SWITCH;
}
if ( $query->param('shelves') ) {
- if ( my $newshelf = $query->param('addshelf') ) {
+ my $stay = 1;
+ if (my $newshelf = $query->param('addshelf')) {
+ # note: a user can always add a new shelf
my $shelfnumber = AddShelf(
$newshelf,
$query->param('owner'),
$query->param('category')
);
-
+ $stay = 1;
if ( $shelfnumber == -1 ) { #shelf already exists.
$showadd = 1;
- $template->param(
- shelfnumber => $shelfnumber,
- already => 1
- );
+ push @paramsloop, { already => $newshelf };
+ $template->param(shelfnumber => $shelfnumber);
} else {
print $query->redirect($pages{$type}->{redirect} . "?viewshelf=$shelfnumber");
exit;
}
}
- my @paramsloop;
- foreach ( $query->param() ) {
- /DEL-(\d+)/ or next;
+ 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;
+ unless (defined $shelflist->{$number}) {
+ push(@paramsloop, {unrecognized=>$number}); last;
}
- push(@paramsloop, \%line);
- # print $query->redirect("/cgi-bin/koha/virtualshelves/shelves.pl"); exit;
+ unless (ShelfPossibleAction($loggedinuser, $number, 'manage')) {
+ push(@paramsloop, {nopermission=>$shelfnumber}); last;
+ }
+ my $contents = GetShelfContents($number);
+ if (my $count = scalar @$contents){
+ unless (scalar grep {/^CONFIRM-$number$/} $query->param()) {
+ push(@paramsloop, {need_confirm=>$shelflist->{$number}->{shelfname}, count=>$count});
+ $shelflist->{$number}->{confirm} = $number;
+ $stay = 0;
+ next;
+ }
+ }
+ my $name = $shelflist->{$number}->{'shelfname'};
+ unless (DelShelf($number)) {
+ push(@paramsloop, {delete_fail=>$name}); last;
+ }
+ delete $shelflist->{$number};
+ push(@paramsloop, {delete_ok=>$name});
+ # print $query->redirect($pages{$type}->{redirect}); exit;
+ $stay = 0;
}
$showadd = 1;
- $template->param(
- paramsloop => \@paramsloop,
- shelves => 1,
- );
+ $stay and $template->param(shelves => 1);
last SWITCH;
}
}
+(@paramsloop) and $template->param(paramsloop => \@paramsloop);
# rebuild shelflist in case a shelf has been added
-$shelflist = GetShelves( $loggedinuser, 2 );
+# $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'};
+ $shelflist->{$element}->{shelf} = $element;
+ my $category = $shelflist->{$element}->{'category'};
+ my $owner = $shelflist->{$element}->{ 'owner' };
+ my $canmanage = ShelfPossibleAction( $loggedinuser, $element, 'manage' );
+ $shelflist->{$element}->{"viewcategory$category"} = 1;
+ $shelflist->{$element}->{canmanage} = $canmanage;
+ if ($owner eq $loggedinuser or $canmanage) {
+ $shelflist->{$element}->{'mine'} = 1;
+ }
+ my $member = GetMember($owner,'borrowernumber');
+ $shelflist->{$element}->{ownername} = defined($member) ? $member->{firstname} . " " . $member->{surname} : '';
+ $numberCanManage++ if $canmanage; # possibly outmoded
if ($shelflist->{$element}->{'category'} eq '1') {
- push (@shelveslooppriv, \%line);
+ (scalar(@shelveslooppriv) % 2) and $shelflist->{$element}->{toggle} = 1;
+ push (@shelveslooppriv, $shelflist->{$element});
} else {
- push (@shelvesloop, \%line);
+ (scalar(@shelvesloop) % 2) and $shelflist->{$element}->{toggle} = 1;
+ push (@shelvesloop, $shelflist->{$element});
}
}
$template->param( seflag => 1);
}
+my $sessionID = $query->cookie("CGISESSID") ;
+my $session = get_session($sessionID);
+my $barshelves = GetShelvesSummary($loggedinuser, 2, 10);
+if (defined($barshelves)) {
+ $session->param('barshelves', $barshelves);
+ $template->param( barshelves => scalar (@$barshelves));
+ $template->param( barshelvesloop => $barshelves);
+}
+
output_html_with_http_headers $query, $cookie, $template->output;
}
=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.
+ Op can be:
+ * modif: show the template allowing modification of the shelves;
+ * modifsave: save changes from modif mode.
=item C<viewshelf>
- To load the template with 'viewshelves param' which allow to read the shelves information.
+ Load template with 'viewshelves param' displaying the shelf's information.
=item C<shelves>
- If equals to 1. then call the function shelves which add
- or delete a shelf.
+ If the param shelves == 1, then 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.
+ If the param shelves == 1, then addshelf is the name of the shelf to add.
=back