Bug 20724: Move the ReservesNeedReturns logic to AddReserve
[koha.git] / opac / opac-addbybiblionumber.pl
index b8ad330..ddc6778 100755 (executable)
@@ -1,8 +1,7 @@
 #!/usr/bin/perl
 
-#script to provide virtualshelf management
-#
 # Copyright 2000-2002 Katipo Communications
+# Copyright 2016 Koha Development Team
 #
 # This file is part of Koha.
 #
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use strict;
-use warnings;
+use Modern::Perl;
 
 use CGI qw ( -utf8 );
 use C4::Biblio;
 use C4::Output;
 use C4::Auth;
 
+use Koha::Biblios;
 use Koha::Virtualshelves;
 
-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 $query           = new CGI;
+my @biblionumbers   = $query->multi_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 ( $errcode, $authorized ) = ( 0, 1 );
+my @biblios;
+
+# if virtualshelves is disabled, leave immediately
+if ( !C4::Context->preference('virtualshelves') ) {
+    print $query->redirect("/cgi-bin/koha/errors/404.pl");
+    exit;
+}
 
-if (scalar(@biblionumber) == 1) {
-    @biblionumber = (split /\//,$biblionumber[0]);
+if ( scalar(@biblionumbers) == 1 ) {
+    @biblionumbers = ( split /\//, $biblionumbers[0] );
 }
 
-our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
-    {
-        template_name   => "opac-addbybiblionumber.tt",
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+    {   template_name   => "opac-addbybiblionumber.tt",
         query           => $query,
         type            => "opac",
         authnotrequired => 0,
     }
 );
 
-if( $newvirtualshelf) {
-    HandleNewVirtualShelf();
-    exit if $authorized;
-    ShowTemplate(); #error message
-}
-elsif($shelfnumber) {
-    HandleShelfNumber();
-    exit if $authorized;
-    ShowTemplate(); #error message
-}
-elsif($selectedshelf) {
-    HandleSelectedShelf();
-    LoadBib() if $authorized;
-    ShowTemplate();
-}
-else {
-    HandleSelect();
-    LoadBib() if $authorized;
-    ShowTemplate();
-}
-#end
-
-sub HandleNewVirtualShelf {
-    if ( $loggedinuser > 0 and
-        (
-            $category == 1
-                or $category == 2 and $loggedinuser>0 && C4::Context->preference('OpacAllowPublicListCreation')
-        )
-    ) {
-        my $shelf = eval {
-            Koha::Virtualshelf->new(
-                {
-                    shelfname => $newvirtualshelf,
-                    category => $category,
-                    owner => $loggedinuser,
-                }
-            )->store;
-        };
+if ($newvirtualshelf) {
+    if ($loggedinuser > 0
+        and (  $category == 1
+            or $category == 2 and $loggedinuser > 0 && C4::Context->preference('OpacAllowPublicListCreation') )
+      ) {
+        my $shelf = eval { Koha::Virtualshelf->new( { shelfname => $newvirtualshelf, category => $category, owner => $loggedinuser, } )->store; };
         if ( $@ or not $shelf ) {
+            $errcode    = 1;
             $authorized = 0;
-            $errcode = 1;
-            return;
-        }
+        } else {
+            for my $biblionumber (@biblionumbers) {
+                $shelf->add_biblio( $biblionumber, $loggedinuser );
+            }
 
-        for my $bib (@biblionumber) {
-            $shelf->add_biblio( $bib, $loggedinuser );
+            #Reload the page where you came from
+            print $query->header;
+            print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
+            exit;
         }
-
-        #Reload the page where you came from
-        print $query->header;
-        print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
     }
-}
-
-sub HandleShelfNumber {
+} elsif ($shelfnumber) {
     my $shelfnumber = $query->param('shelfnumber');
-    my $shelf = Koha::Virtualshelves->find( $shelfnumber );
-    if ( $shelf->can_biblios_be_added( $loggedinuser ) ) {
-        for my $bib (@biblionumber) {
-            $shelf->add_biblio( $bib, $loggedinuser );
+    my $shelf       = Koha::Virtualshelves->find($shelfnumber);
+    if ( $shelf->can_biblios_be_added($loggedinuser) ) {
+        for my $biblionumber (@biblionumbers) {
+            $shelf->add_biblio( $biblionumber, $loggedinuser );
         }
+
         #Close this page and return
         print $query->header;
         print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
+        exit;
     } else {
-        # TODO
+        $authorized = 0;
     }
-}
-
-sub HandleSelectedShelf {
+} elsif ($selectedshelf) {
     my $shelfnumber = $query->param('selectedshelf');
-    my $shelf = Koha::Virtualshelves->find( $shelfnumber );
-    if ( $shelf->can_biblios_be_added( $loggedinuser ) ) {
+    my $shelf       = Koha::Virtualshelves->find($shelfnumber);
+    if ( $shelf->can_biblios_be_added($loggedinuser) ) {
         $template->param(
-            singleshelf               => 1,
-            shelfnumber               => $shelf->shelfnumber,
-            shelfname                 => $shelf->shelfname,
+            singleshelf => 1,
+            shelfnumber => $shelf->shelfnumber,
+            shelfname   => $shelf->shelfname,
         );
     } else {
-        # TODO
+        $authorized = 0;
+    }
+} else {
+    if ( $loggedinuser > 0 ) {
+        my $private_shelves = Koha::Virtualshelves->search(
+            {   category => 1,
+                owner    => $loggedinuser,
+                allow_change_from_owner => 1,
+            },
+            { order_by => 'shelfname' }
+        );
+        my $shelves_shared_with_me = Koha::Virtualshelves->search(
+            {   category                            => 1,
+                'virtualshelfshares.borrowernumber' => $loggedinuser,
+                allow_change_from_others            => 1,
+            },
+            { join => 'virtualshelfshares', }
+        );
+        my $public_shelves = Koha::Virtualshelves->search(
+            {   category => 2,
+                -or      => [
+                    -and => {
+                        allow_change_from_owner => 1,
+                        owner     => $loggedinuser,
+                    },
+                    allow_change_from_others => 1,
+                ],
+            },
+            { order_by => 'shelfname' }
+        );
+        $template->param(
+            private_shelves                => $private_shelves,
+            private_shelves_shared_with_me => $shelves_shared_with_me,
+            public_shelves                 => $public_shelves,
+        );
+    } else {
+        $authorized = 0;
     }
 }
 
-sub HandleSelect {
-    return unless $authorized= $loggedinuser>0;
-    my $private_shelves = Koha::Virtualshelves->search(
-        {
-            category => 1,
-            owner => $loggedinuser,
-        },
-        { order_by => 'shelfname' }
-    );
-    my $shelves_shared_with_me = Koha::Virtualshelves->search(
-        {
-            category => 1,
-            'virtualshelfshares.borrowernumber' => $loggedinuser,
-            -or => {
-                allow_add => 1,
-                owner => $loggedinuser,
+if ($authorized) {
+    for my $biblionumber (@biblionumbers) {
+        my $biblio = Koha::Biblios->find( $biblionumber );
+        push(
+            @biblios,
+            {   biblionumber => $biblionumber,
+                title        => $biblio->title,
+                author       => $biblio->author,
             }
-        },
-        {
-            join => 'virtualshelfshares',
-        }
-    );
-    my $public_shelves= Koha::Virtualshelves->search(
-        {
-            category => 2,
-            -or => {
-                allow_add => 1,
-                owner => $loggedinuser,
-            }
-        },
-        { order_by => 'shelfname' }
-    );
-    $template->param (
-        private_shelves => $private_shelves,
-        private_shelves_shared_with_me => $shelves_shared_with_me,
-        public_shelves  => $public_shelves,
-    );
-}
-
-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,
+        multiple => ( scalar(@biblios) > 1 ),
+        total    => scalar @biblios,
+        biblios  => \@biblios,
     );
-}
 
-sub ShowTemplate {
-    $template->param (
-    newshelf => $newshelf||0,
-    authorized => $authorized,
-    errcode            => $errcode,
-    OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'),
+    $template->param(
+        newshelf => $newshelf || 0,
+        OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'),
     );
-    output_html_with_http_headers $query, $cookie, $template->output;
 }
+$template->param( authorized => $authorized, errcode => $errcode, );
+output_html_with_http_headers $query, $cookie, $template->output;