Bug 14544: Get rid of C4::VirtualShelves and C4::VirtualShelves::Page
[koha.git] / opac / opac-addbybiblionumber.pl
index c72afe5..b8ad330 100755 (executable)
 #!/usr/bin/perl
 
 #script to provide virtualshelf management
-# WARNING: This file uses 4-character tabs!
-#
-# $Header$
 #
 # Copyright 2000-2002 Katipo Communications
 #
 # This file is part of Koha.
 #
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY 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.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# 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 CGI qw ( -utf8 );
 use C4::Biblio;
-use CGI;
-use C4::VirtualShelves qw/:DEFAULT GetAllShelves RefreshShelvesSummary/;
-use C4::Auth;
 use C4::Output;
-use C4::Auth qw/get_session/;
-use C4::Debug;
+use C4::Auth;
 
-#splits incoming biblionumber(s) to array and adds each to shelf.
-sub AddBibliosToShelf {
-    my ($shelfnumber,@biblionumber)=@_;
+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;
 
-    # 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 $selectedshelf      = $query->param('selectedshelf');
-my $newshelf           = $query->param('newshelf');
-my $shelfnumber        = $query->param('shelfnumber');
-my $newvirtualshelf    = $query->param('newvirtualshelf');
-my $category           = $query->param('category');
+if (scalar(@biblionumber) == 1) {
+    @biblionumber = (split /\//,$biblionumber[0]);
+}
 
-my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
-        template_name   => "opac-addbybiblionumber.tmpl",
+        template_name   => "opac-addbybiblionumber.tt",
         query           => $query,
         type            => "opac",
-        authnotrequired =>( C4::Context->preference("OpacPublic") ? 1 : 0 ),
+        authnotrequired => 0,
     }
 );
 
-if ($newvirtualshelf) {
-       $shelfnumber = AddShelf(  $newvirtualshelf, $loggedinuser, $category );
-       AddBibliosToShelf($shelfnumber, @biblionumber);
-       RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10));
-       print $query->header;
-       print "<html><meta http-equiv=\"refresh\" content=\"0;url=opac-shelves.pl?display=privateshelves\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
-       exit;
+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 ( $@ or not $shelf ) {
+            $authorized = 0;
+            $errcode = 1;
+            return;
+        }
 
-# verify user is authorized to perform the action on the shelf...
-my $authorized = 1;
-if ($selectedshelf) {
-       $authorized = 0 unless ShelfPossibleAction( $loggedinuser, $selectedshelf );
+        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>";
+    }
 }
 
-if ($shelfnumber && ($shelfnumber != -1)) {
-       AddBibliosToShelf($shelfnumber,@biblionumber);
-       RefreshShelvesSummary($query->cookie("CGISESSID"),$loggedinuser,($loggedinuser == -1 ? 20 : 10));
-       print $query->header;
-       print "<html><meta http-equiv=\"refresh\" content=\"0;url=opac-shelves.pl?display=privateshelves\" /><body onload=\"self.close();\"></body></html>";
-       exit;
+sub HandleShelfNumber {
+    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 );
+        }
+        #Close this page and return
+        print $query->header;
+        print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
+    } else {
+        # TODO
+    }
 }
-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 {
-
-        my $privateshelves = GetAllShelves(1,$loggedinuser);
-        my @privateshelves = @{$privateshelves};
-        warn scalar($privateshelves);
-        if(@privateshelves){
-                       $template->param (
-                               privatevirtualshelves          => @privateshelves,
-                               existingshelves => 1
-                       );
-               }
-        my $publicshelves = GetAllShelves(2,$loggedinuser);
-        my @publicshelves = @{$publicshelves};
-        if(@publicshelves){
-                       $template->param (
-                               publicvirtualshelves          => @publicshelves,
-                               existingshelves => 1
-                       );
+
+sub HandleSelectedShelf {
+    my $shelfnumber = $query->param('selectedshelf');
+    my $shelf = Koha::Virtualshelves->find( $shelfnumber );
+    if ( $shelf->can_biblios_be_added( $loggedinuser ) ) {
+        $template->param(
+            singleshelf               => 1,
+            shelfnumber               => $shelf->shelfnumber,
+            shelfname                 => $shelf->shelfname,
+        );
+    } else {
+        # TODO
+    }
+}
+
+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,
+            }
+        },
+        {
+            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,
+    );
 }
-       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;
+
+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;
 }