X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=virtualshelves%2Faddbybiblionumber.pl;h=d039e429196d74d389b631622758bf99a87b4087;hb=413a1e1e61b343db47b9b6fdecf3d981d87013ef;hp=215a145de25d06ad5e55edd592334a905e25ecf3;hpb=4747ea7462c04770484386538b1594c1760bc75b;p=koha.git diff --git a/virtualshelves/addbybiblionumber.pl b/virtualshelves/addbybiblionumber.pl index 215a145de2..d039e42919 100755 --- a/virtualshelves/addbybiblionumber.pl +++ b/virtualshelves/addbybiblionumber.pl @@ -16,9 +16,9 @@ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. =head1 NAME @@ -59,45 +59,27 @@ =cut use strict; -use C4::Biblio; +use warnings; + use CGI; +use C4::Biblio; use C4::Output; -use C4::VirtualShelves qw/:DEFAULT GetRecentShelves/; -use C4::Circulation; +use C4::VirtualShelves qw/:DEFAULT GetAllShelves/; use C4::Auth; -# splits incoming biblionumber(s) to array and adds each to shelf. -sub AddBibliosToShelf { - my ($shelfnumber,@biblionumber)=@_; - - # multiple bibs might come in as '/' delimited string (from where, i don't see), or as array. - # (Note : they come in as '/' when added from the cart) - if (scalar(@biblionumber) == 1) { - @biblionumber = (split /\//,$biblionumber[0]); - } - for my $bib (@biblionumber){ - AddToShelfFromBiblio($bib, $shelfnumber); - } -} - -my $query = new CGI; -# If set, then single item case. -my $biblionumber = $query->param('biblionumber'); - -# If set, then multiple item case. -my @biblionumber = $query->param('biblionumber'); -my $biblionumbers = $query->param('biblionumbers'); - -my $shelfnumber = $query->param('shelfnumber'); -my $newvirtualshelf = $query->param('newvirtualshelf'); -my $newshelf = $query->param('newshelf'); -my $category = $query->param('category'); -my $sortfield = $query->param('sortfield'); +our $query = new CGI; +our @biblionumber = HandleBiblioPars(); +our $shelfnumber = $query->param('shelfnumber'); +our $newvirtualshelf = $query->param('newvirtualshelf'); +our $newshelf = $query->param('newshelf'); +our $category = $query->param('category'); +our $sortfield = $query->param('sortfield'); my $confirmed = $query->param('confirmed') || 0; +our $authorized = 1; +our $errcode = 0; - -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( +our ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "virtualshelves/addbybiblionumber.tmpl", query => $query, @@ -107,121 +89,122 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my @biblionumbers; -if ($biblionumbers) { - @biblionumbers = split '/', $biblionumbers; -} else { - @biblionumbers = (@biblionumber); +if( $newvirtualshelf) { + HandleNewVirtualShelf(); + exit if $authorized; + ShowTemplate(); #error message +} +elsif($shelfnumber && $confirmed) { + HandleShelfNumber(); + exit if $authorized; + ShowTemplate(); #error message +} +elsif($shelfnumber) { #still needs confirmation + HandleSelectedShelf(); + LoadBib() if $authorized; + ShowTemplate(); } -if (scalar(@biblionumber) == 1) { - @biblionumber = (split /\//,$biblionumber[0]); +else { + HandleSelect(); + LoadBib(); + ShowTemplate(); } +#end -$shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category, $sortfield ) if $newvirtualshelf; -if ( $shelfnumber || ( $shelfnumber == -1 ) ) { # the shelf already exist. - - if ($confirmed == 1) { - AddBibliosToShelf($shelfnumber,@biblionumber); - print - "Content-Type: text/html\n\n"; - exit; - } else { - my ( $singleshelf, $singleshelfname, $singlecategory ) = GetShelf( $query->param('shelfnumber') ); - my @biblios; - for my $bib (@biblionumber) { - my $data = GetBiblioData( $bib ); - push(@biblios, - { biblionumber => $bib, - title => $data->{'title'}, - author => $data->{'author'}, - } ); - } - - $template->param - ( - biblionumber => \@biblionumber, - biblios => \@biblios, - multiple => (scalar(@biblionumber) > 1), - singleshelf => 1, - shelfname => $singleshelfname, - shelfnumber => $singleshelf, - total => scalar(@biblionumber), - confirm => 1, - ); +sub HandleBiblioPars { + my @bib= $query->param('biblionumber'); + if(@bib==0 && $query->param('biblionumbers')) { + my $str= $query->param('biblionumbers'); + @bib= split '/', $str; + } + elsif(@bib==1 && $bib[0]=~/\//) { + @bib= split '/', $bib[0]; } + return @bib; } -else { # this shelf doesn't already exist. - my $limit = 10; - my ($shelflist) = GetRecentShelves(1, $limit, $loggedinuser); - my @shelvesloop; - my %shelvesloop; - for my $shelf ( @{ $shelflist->[0] } ) { - push( @shelvesloop, $shelf->{shelfnumber} ); - $shelvesloop{$shelf->{shelfnumber}} = $shelf->{shelfname}; + +sub AddBibliosToShelf { + my ($shelfnumber, @biblionumber)=@_; + for my $bib (@biblionumber){ + AddToShelf($bib, $shelfnumber, $loggedinuser); } - # then open shelves... - ($shelflist) = GetRecentShelves(3, $limit, undef); - for my $shelf ( @{ $shelflist->[0] } ) { - push( @shelvesloop, $shelf->{shelfnumber} ); - $shelvesloop{$shelf->{shelfnumber}} = $shelf->{shelfname}; +} + +sub HandleNewVirtualShelf { + $shelfnumber = AddShelf( { + shelfname => $newvirtualshelf, + sortfield => $sortfield, + category => $category }, $loggedinuser); + if($shelfnumber == -1) { + $authorized=0; + $errcode=1; #add failed + return; } + AddBibliosToShelf($shelfnumber, @biblionumber); + #Reload the page where you came from + print $query->header; + print ""; +} - if(@shelvesloop gt 0){ - my $CGIvirtualshelves = CGI::scrolling_list - ( - -name => 'shelfnumber', - -values => \@shelvesloop, - -labels => \%shelvesloop, - -size => 1, - -tabindex => '', - -multiple => 0 - ); - $template->param - ( - CGIvirtualshelves => $CGIvirtualshelves, - ); +sub HandleShelfNumber { + if($authorized= ShelfPossibleAction($loggedinuser, $shelfnumber, 'add')) { + AddBibliosToShelf($shelfnumber, @biblionumber); + #Close this page and return + print $query->header; + print ""; + } + else { + $errcode=2; #no perm + } +} + +sub HandleSelectedShelf { + if($authorized= ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add')){ + #confirm adding to specific shelf + my ($singleshelf, $singleshelfname, $singlecategory)= GetShelf($shelfnumber); + $template->param( + singleshelf => 1, + shelfnumber => $singleshelf, + shelfname => $singleshelfname, + "category$singlecategory" => 1 + ); } - my @biblios; - for my $bib (@biblionumber) { - my $data = GetBiblioData( $bib ); - push(@biblios, - { biblionumber => $bib, - title => $data->{'title'}, - author => $data->{'author'}, - } ); - } + else { + $errcode=2; #no perm + } +} + +sub HandleSelect { + my $privateshelves = GetAllShelves(1,$loggedinuser,1); + my $publicshelves = GetAllShelves(2,$loggedinuser,1); $template->param( - newshelf => $newshelf, - biblios=>\@biblios, - multiple => (scalar(@biblionumber) > 1), - total => scalar(@biblionumber), + privatevirtualshelves => $privateshelves, + publicvirtualshelves => $publicshelves, ); +} - unless (@biblionumbers) { - my ( $bibliocount, @biblios ) = GetBiblio($biblionumber); - - $template->param - ( - biblionumber => $biblionumber, - title => $biblios[0]->{'title'}, - author => $biblios[0]->{'author'}, - ); - } else { - my @biblioloop = (); - foreach my $biblionumber (@biblionumbers) { - my ( $bibliocount, @biblios ) = GetBiblio($biblionumber); - my %biblioiter = ( - title=>$biblios[0]->{'title'}, - author=>$biblios[0]->{'author'} - ); - push @biblioloop, \%biblioiter; - } - $template->param - ( - biblioloop => \@biblioloop, - biblionumbers => $biblionumbers - ); +sub LoadBib { + my @biblios; + for my $bib (@biblionumber) { + my $data = GetBiblioData($bib); + push(@biblios, + { biblionumber => $bib, + title => $data->{'title'}, + author => $data->{'author'}, + } ); } - + $template->param( + multiple => (scalar(@biblios) > 1), + total => scalar @biblios, + biblios => \@biblios, + ); +} + +sub ShowTemplate { + $template->param ( + newshelf => $newshelf||0, + authorized => $authorized, + errcode => $errcode, + ); + output_html_with_http_headers $query, $cookie, $template->output; } -output_html_with_http_headers $query, $cookie, $template->output;