Bug 14544: Make the intranet side independent of Page.pm
[koha.git] / virtualshelves / addbybiblionumber.pl
1 #!/usr/bin/perl
2
3 #script to provide virtual shelf management
4 #
5 #
6 # Copyright 2000-2002 Katipo Communications
7 #
8 # This file is part of Koha.
9 #
10 # Koha is free software; you can redistribute it and/or modify it
11 # under the terms of the GNU General Public License as published by
12 # the Free Software Foundation; either version 3 of the License, or
13 # (at your option) any later version.
14 #
15 # Koha is distributed in the hope that it will be useful, but
16 # WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
19 #
20 # You should have received a copy of the GNU General Public License
21 # along with Koha; if not, see <http://www.gnu.org/licenses>.
22
23
24 =head1 NAME
25
26 addbybiblionumber.pl
27
28 =head1 DESCRIPTION
29
30     This script allow to add a virtual in a virtual shelf from a biblionumber.
31
32 =head1 CGI PARAMETERS
33
34 =over 4
35
36 =item biblionumber
37
38     The biblionumber
39
40 =item shelfnumber
41
42     the shelfnumber where to add the virtual.
43
44 =item newvirtualshelf
45
46     if this parameter exists, then it must be equals to the name of the shelf
47     to add.
48
49 =item category
50
51     if this script has to add a shelf, it add one with this category.
52
53 =item newshelf
54
55     if this parameter exists, then we create a new shelf
56
57 =back
58
59 =cut
60
61 use strict;
62 use warnings;
63
64 use CGI qw ( -utf8 );
65 use C4::Biblio;
66 use C4::Output;
67 use C4::VirtualShelves qw/:DEFAULT/;
68 use C4::Auth;
69
70 use Koha::Virtualshelves;
71
72 our $query           = new CGI;
73 our @biblionumber    = HandleBiblioPars();
74 our $shelfnumber     = $query->param('shelfnumber');
75 our $newvirtualshelf = $query->param('newvirtualshelf');
76 our $newshelf        = $query->param('newshelf');
77 our $category        = $query->param('category');
78 our $sortfield      = $query->param('sortfield');
79 my $confirmed       = $query->param('confirmed') || 0;
80 our $authorized      = 1;
81 our $errcode        = 0;
82
83 our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
84     {
85         template_name   => "virtualshelves/addbybiblionumber.tt",
86         query           => $query,
87         type            => "intranet",
88         authnotrequired => 0,
89         flagsrequired   => { catalogue => 1 },
90     }
91 );
92
93 if( $newvirtualshelf) {
94     HandleNewVirtualShelf();
95     exit if $authorized;
96     ShowTemplate(); #error message
97 }
98 elsif($shelfnumber && $confirmed) {
99     HandleShelfNumber();
100     exit if $authorized;
101     ShowTemplate(); #error message
102 }
103 elsif($shelfnumber) { #still needs confirmation
104     HandleSelectedShelf();
105     LoadBib() if $authorized;
106     ShowTemplate();
107 }
108 else {
109     HandleSelect();
110     LoadBib();
111     ShowTemplate();
112 }
113 #end
114
115 sub HandleBiblioPars {
116     my @bib= $query->param('biblionumber');
117     if(@bib==0 && $query->param('biblionumbers')) {
118         my $str= $query->param('biblionumbers');
119         @bib= split '/', $str;
120     }
121     elsif(@bib==1 && $bib[0]=~/\//) {
122         @bib= split '/', $bib[0];
123     }
124     return @bib;
125 }
126
127 sub AddBibliosToShelf {
128     my ($shelfnumber, @biblionumber)=@_;
129     for my $bib (@biblionumber){
130         Koha::Virtualshelves->find( $shelfnumber )->add_biblio( $bib, $loggedinuser );
131     }
132 }
133
134 sub HandleNewVirtualShelf {
135     my $shelf = eval {
136         Koha::Virtualshelf->new(
137             {
138                 shelfname => $newvirtualshelf,
139                 category => $category,
140                 sortfield => $sortfield,
141                 owner => $loggedinuser,
142             }
143         );
144     };
145     if ( $@ or not $shelf ) {
146         $authorized = 0;
147         $errcode    = 1;
148         return;
149     }
150
151     AddBibliosToShelf($shelfnumber, @biblionumber);
152     #Reload the page where you came from
153     print $query->header;
154     print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
155 }
156
157 sub HandleShelfNumber {
158     my $shelf = Koha::Virtualshelves->find( $shelfnumber );
159     if($authorized = $shelf->can_biblios_be_added( $loggedinuser ) ) {
160     AddBibliosToShelf($shelfnumber, @biblionumber);
161     #Close this page and return
162     print $query->header;
163     print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
164     }
165     else {
166     $errcode=2; #no perm
167     }
168 }
169
170 sub HandleSelectedShelf {
171     my $shelf = Koha::Virtualshelves->find( $shelfnumber );
172     if($authorized = $shelf->can_biblios_be_added( $loggedinuser ) ) {
173         #confirm adding to specific shelf
174         $template->param(
175         singleshelf               => 1,
176         shelfnumber               => $shelf->shelfnumber,
177         shelfname                 => $shelf->shelfname,
178         );
179     }
180     else {
181     $errcode=2; #no perm
182     }
183 }
184
185 sub HandleSelect {
186     my $private_shelves = Koha::Virtualshelves->search(
187         {
188             category => 1,
189             owner => $loggedinuser,
190         },
191         { order_by => 'shelfname' }
192     );
193     my $shelves_shared_with_me = Koha::Virtualshelves->search(
194         {
195             category => 1,
196             'virtualshelfshares.borrowernumber' => $loggedinuser,
197             -or => {
198                 allow_add => 1,
199                 owner => $loggedinuser,
200             }
201         },
202         {
203             join => 'virtualshelfshares',
204         }
205     );
206     my $public_shelves= Koha::Virtualshelves->search(
207         {
208             category => 2,
209             -or => {
210                 allow_add => 1,
211                 owner => $loggedinuser,
212             }
213         },
214         { order_by => 'shelfname' }
215     );
216     $template->param (
217         private_shelves => $private_shelves,
218         private_shelves_shared_with_me => $shelves_shared_with_me,
219         public_shelves  => $public_shelves,
220     );
221 }
222
223 sub LoadBib {
224     my @biblios;
225     for my $bib (@biblionumber) {
226         my $data = GetBiblioData($bib);
227     push(@biblios,
228         { biblionumber => $bib,
229           title        => $data->{'title'},
230           author       => $data->{'author'},
231     } );
232     }
233     $template->param(
234         multiple => (scalar(@biblios) > 1),
235     total    => scalar @biblios,
236     biblios  => \@biblios,
237     );
238 }
239
240 sub ShowTemplate {
241     $template->param (
242     newshelf => $newshelf||0,
243     authorized  => $authorized,
244     errcode             => $errcode,
245     );
246     output_html_with_http_headers $query, $cookie, $template->output;
247 }