X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-addbybiblionumber.pl;h=8cbd2393c990986053888a8278fdbe8af8b142ef;hb=f36747f5e8ab8c02034b165be31dcc478153cbee;hp=4747712d112aea738e083317eb01dd62c0b08ef6;hpb=6cdf0832e2ad3739a42fa811cc08363908c0dec2;p=koha_fer diff --git a/opac/opac-addbybiblionumber.pl b/opac/opac-addbybiblionumber.pl index 4747712d11..8cbd2393c9 100755 --- a/opac/opac-addbybiblionumber.pl +++ b/opac/opac-addbybiblionumber.pl @@ -18,23 +18,41 @@ # 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 warnings; + use C4::Biblio; use CGI; -use C4::VirtualShelves; -use C4::Circulation; +use C4::VirtualShelves qw/:DEFAULT GetRecentShelves RefreshShelvesSummary/; use C4::Auth; use C4::Output; +use C4::Auth qw/get_session/; +use C4::Debug; + +#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. + if (scalar(@biblionumber) == 1) { + @biblionumber = (split /\//,$biblionumber[0]); + } + for my $bib (@biblionumber){ + AddToShelf($bib, $shelfnumber); + } +} -my $query = new CGI; -my $biblionumber = $query->param('biblionumber'); -my $shelfnumber = $query->param('shelfnumber'); -my $newvirtualshelf = $query->param('newvirtualshelf'); -my $category = $query->param('category'); +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'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -45,73 +63,85 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -$shelfnumber = AddShelf( '', $newvirtualshelf, $loggedinuser, $category ) if $newvirtualshelf; - -# to know if we had to add more than one biblio. -my $multiple = 0; -$multiple = 1 if $biblionumber =~ /^(\d*\/)*$/; - +if ($newvirtualshelf) { + $shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category ); + AddBibliosToShelf($shelfnumber, @biblionumber); + RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10)); + print $query->header; + print ""; + exit; +} -if ($shelfnumber) { +# verify user is authorized to perform the action on the shelf... +my $authorized = 1; +if ($selectedshelf) { + $authorized = 0 unless ShelfPossibleAction( $loggedinuser, $selectedshelf ); +} - if ($multiple){ - foreach (split /\//,$biblionumber){ - &AddToShelfFromBiblio($_,$shelfnumber); - } - } - else { - &AddToShelfFromBiblio( $biblionumber, $shelfnumber ); - } - print $query->header; - print ""; - exit; +if ($shelfnumber && ($shelfnumber != -1)) { + AddBibliosToShelf($shelfnumber,@biblionumber); + RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10)); + print $query->header; + print ""; + exit; } else { - my ($shelflist) = GetShelves( $loggedinuser, 3 ); + 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 + my $limit = 10; my @shelvesloop; my %shelvesloop; - foreach my $element ( sort keys %$shelflist ) { - push( @shelvesloop, $element ); - $shelvesloop{$element} = $shelflist->{$element}->{'shelfname'}; + #grab each type of shelf, open (type 3) should not be limited by user. + foreach my $shelftype (1,2,3) { + my ($shelflist) = GetRecentShelves($shelftype, $limit, $shelftype == 3 ? undef : $loggedinuser); + 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 ); - } - if ( $multiple ) { - my @biblios; - foreach (split /\//,$biblionumber){ - my $data = GetBiblioData($_); - push @biblios,$data; - } - $template->param ( - multiple => 1, - biblionumber => $biblionumber, - total => scalar @biblios, - biblios => \@biblios, - ); - } - else { # just one to add. - my $data = GetBiblioData( $biblionumber ); - $template->param ( - biblionumber => $biblionumber, - title => $data->{'title'}, - author => $data->{'author'}, - ); + $template->param ( + CGIvirtualshelves => $CGIvirtualshelves, + ); } + } - $template->param ( - CGIvirtualshelves => $CGIvirtualshelves, - ); + 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, + ); - output_html_with_http_headers $query, $cookie, $template->output; + output_html_with_http_headers $query, $cookie, $template->output; }