X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-addbybiblionumber.pl;h=6069e76a70d64a8dd0e1ebeed65ad2899ef1cd72;hb=308237541beee0672855b43dcab34b1fed40b301;hp=1aab97205045dca749b9bc7a2a1ddd37784aa997;hpb=5eaf32d556dcc2a388b4304acdca3e7d94d983ae;p=koha_fer diff --git a/opac/opac-addbybiblionumber.pl b/opac/opac-addbybiblionumber.pl index 1aab972050..6069e76a70 100755 --- a/opac/opac-addbybiblionumber.pl +++ b/opac/opac-addbybiblionumber.pl @@ -18,127 +18,152 @@ # 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. use strict; -use C4::Biblio; +use warnings; + use CGI; -use C4::VirtualShelves qw/:DEFAULT GetRecentShelves RefreshShelvesSummary/; -use C4::Auth; +use C4::Biblio; +use C4::VirtualShelves qw/:DEFAULT GetAllShelves/; use C4::Output; -use C4::Auth qw/get_session/; -use C4::Debug; +use C4::Auth; -my $query = new CGI; -my @biblionumber = $query->param('biblionumber'); -my $selectedshelf = $query->param('selectedshelf'); -my $newshelf = $query->param('newshelf'); -my $shelfnumber = $query->param('shelfnumber'); -my $newvirtualshelf = $query->param('newvirtualshelf'); -my $category = $query->param('category'); +our $query = new CGI; +our @biblionumber = $query->param('biblionumber'); +our $selectedshelf = $query->param('selectedshelf'); +our $newshelf = $query->param('newshelf'); +our $shelfnumber = $query->param('shelfnumber'); +our $newvirtualshelf = $query->param('newvirtualshelf'); +our $category = $query->param('category'); +our $authorized = 1; +our $errcode = 0; +our @biblios; -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( +our ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "opac-addbybiblionumber.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => 0, } ); -if ($newvirtualshelf) { - $shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category ); - RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10)); - print $query->header; - print ""; - exit; +if( $newvirtualshelf) { + HandleNewVirtualShelf(); + exit if $authorized; + ShowTemplate(); #error message } - -# verify user is authorized to perform the action on the shelf... -my $authorized = 1; -if ($selectedshelf) { - $authorized = 0 unless ShelfPossibleAction( $loggedinuser, $selectedshelf ); +elsif($shelfnumber) { + HandleShelfNumber(); + exit if $authorized; + ShowTemplate(); #error message +} +elsif($selectedshelf) { + HandleSelectedShelf(); + LoadBib() if $authorized; + ShowTemplate(); } +else { + HandleSelect(); + LoadBib() if $authorized; + ShowTemplate(); +} +#end -# multiple bibs might come in as '/' delimited string (from where, i don't see), or as array. +sub AddBibliosToShelf { + #splits incoming biblionumber(s) to array and adds each to shelf. + my ($shelfnumber,@biblionumber)=@_; -my $multiple = 0; -my @bibs; -if (scalar(@biblionumber) == 1) { - @biblionumber = (split /\//,$biblionumber[0]); + #multiple bibs might come in as '/' delimited string (from where, i don't see), or as array. + if (scalar(@biblionumber) == 1) { + @biblionumber = (split /\//,$biblionumber[0]); + } + for my $bib (@biblionumber) { + AddToShelf($bib, $shelfnumber, $loggedinuser); + } } -if ($shelfnumber && ($shelfnumber != -1)) { - for my $bib (@biblionumber){ - AddToShelfFromBiblio($bib,$shelfnumber); - } - RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10)); - print $query->header; - print ""; - exit; + +sub HandleNewVirtualShelf { + if($authorized= ShelfPossibleAction($loggedinuser, undef, $category==1? 'new_private': 'new_public')) { + $shelfnumber = AddShelf( { + shelfname => $newvirtualshelf, + category => $category }, $loggedinuser); + if($shelfnumber == -1) { + $authorized=0; + $errcode=1; + return; + } + AddBibliosToShelf($shelfnumber, @biblionumber); + #Reload the page where you came from + print $query->header; + print ""; + } } -else { - if($selectedshelf){ - # adding to specific shelf - my ( $singleshelf, $singleshelfname, $singlecategory ) = GetShelf( $query->param('selectedshelf') ); - $template->param( - singleshelf => 1, - shelfnumber => $singleshelf, - shelfname => $singleshelfname, - "category$singlecategory" => 1 - ); - } else { - # offer choice of shelves - # first private shelves... - 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}; - } - # then open shelves... - my ($shelflist) = GetRecentShelves(3, $limit, undef); - for my $shelf ( @{ $shelflist->[0] } ) { - push( @shelvesloop, $shelf->{shelfnumber} ); - $shelvesloop{$shelf->{shelfnumber}} = $shelf->{shelfname}; - } - my $CGIvirtualshelves; - if ( @shelvesloop > 0 ) { - $CGIvirtualshelves = CGI::scrolling_list ( - -name => 'shelfnumber', - -id => 'shelfnumber', - -values => \@shelvesloop, - -labels => \%shelvesloop, - -size => 1, - -tabindex => '', - -multiple => 0 + +sub HandleShelfNumber { + if($authorized= ShelfPossibleAction($loggedinuser, $shelfnumber, 'add')) { + AddBibliosToShelf($shelfnumber,@biblionumber); + #Close this page and return + print $query->header; + print ""; + } +} + +sub HandleSelectedShelf { + if($authorized= ShelfPossibleAction( $loggedinuser, $selectedshelf, 'add')){ + #adding to specific shelf + my ($singleshelf, $singleshelfname)= GetShelf($query->param('selectedshelf')); + $template->param( + singleshelf => 1, + shelfnumber => $singleshelf, + shelfname => $singleshelfname, ); + } +} - $template->param ( - CGIvirtualshelves => $CGIvirtualshelves, - ); +sub HandleSelect { + return unless $authorized= $loggedinuser>0; + my $privateshelves = GetAllShelves(1,$loggedinuser,1); + if(@{$privateshelves}){ + $template->param ( + privatevirtualshelves => $privateshelves, + existingshelves => 1 + ); + } + my $publicshelves = GetAllShelves(2,$loggedinuser,1); + if(@{$publicshelves}){ + $template->param ( + publicvirtualshelves => $publicshelves, + existingshelves => 1 + ); } - } +} - my @biblios; - for my $bib (@biblionumber) { - my $data = GetBiblioData( $bib ); - push(@biblios, - { biblionumber => $bib, - title => $data->{'title'}, - author => $data->{'author'}, - } ); - } - $template->param ( - newshelf => $newshelf, - multiple => (scalar(@biblios) > 1), - total => scalar @biblios, - biblios => \@biblios, - authorized => $authorized, - ); +sub LoadBib { + 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, + ); +} - output_html_with_http_headers $query, $cookie, $template->output; +sub ShowTemplate { + $template->param ( + newshelf => $newshelf||0, + authorized => $authorized, + errcode => $errcode, + OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'), + ); + output_html_with_http_headers $query, $cookie, $template->output; }