Bug 14544: Get rid of GetAllShelves
[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         AddToShelf($bib, $shelfnumber, $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     if($authorized= ShelfPossibleAction($loggedinuser, $shelfnumber, 'add')) {
159     AddBibliosToShelf($shelfnumber, @biblionumber);
160     #Close this page and return
161     print $query->header;
162     print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
163     }
164     else {
165     $errcode=2; #no perm
166     }
167 }
168
169 sub HandleSelectedShelf {
170     if($authorized= ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add')){
171         #confirm adding to specific shelf
172         my $shelf = Koha::Virtualshelves->find( $shelfnumber );
173         $template->param(
174         singleshelf               => 1,
175         shelfnumber               => $shelf->shelfnumber,
176         shelfname                 => $shelf->shelfname,
177         );
178     }
179     else {
180     $errcode=2; #no perm
181     }
182 }
183
184 sub HandleSelect {
185     my $private_shelves = Koha::Virtualshelves->search(
186         {
187             category => 1,
188             owner => $loggedinuser,
189         },
190         { order_by => 'shelfname' }
191     );
192     my $shelves_shared_with_me = Koha::Virtualshelves->search(
193         {
194             category => 1,
195             'virtualshelfshares.borrowernumber' => $loggedinuser,
196             -or => {
197                 allow_add => 1,
198                 owner => $loggedinuser,
199             }
200         },
201         {
202             join => 'virtualshelfshares',
203         }
204     );
205     my $public_shelves= Koha::Virtualshelves->search(
206         {
207             category => 2,
208             -or => {
209                 allow_add => 1,
210                 owner => $loggedinuser,
211             }
212         },
213         { order_by => 'shelfname' }
214     );
215     $template->param (
216         private_shelves => $private_shelves,
217         private_shelves_shared_with_me => $shelves_shared_with_me,
218         public_shelves  => $public_shelves,
219     );
220 }
221
222 sub LoadBib {
223     my @biblios;
224     for my $bib (@biblionumber) {
225         my $data = GetBiblioData($bib);
226     push(@biblios,
227         { biblionumber => $bib,
228           title        => $data->{'title'},
229           author       => $data->{'author'},
230     } );
231     }
232     $template->param(
233         multiple => (scalar(@biblios) > 1),
234     total    => scalar @biblios,
235     biblios  => \@biblios,
236     );
237 }
238
239 sub ShowTemplate {
240     $template->param (
241     newshelf => $newshelf||0,
242     authorized  => $authorized,
243     errcode             => $errcode,
244     );
245     output_html_with_http_headers $query, $cookie, $template->output;
246 }