Bug 14544: Get rid of AddShelf
[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 GetAllShelves/;
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 $privateshelves = GetAllShelves(1,$loggedinuser,1);
186     my $publicshelves = GetAllShelves(2,$loggedinuser,1);
187     $template->param(
188     privatevirtualshelves => $privateshelves,
189     publicvirtualshelves  => $publicshelves,
190     );
191 }
192
193 sub LoadBib {
194     my @biblios;
195     for my $bib (@biblionumber) {
196         my $data = GetBiblioData($bib);
197     push(@biblios,
198         { biblionumber => $bib,
199           title        => $data->{'title'},
200           author       => $data->{'author'},
201     } );
202     }
203     $template->param(
204         multiple => (scalar(@biblios) > 1),
205     total    => scalar @biblios,
206     biblios  => \@biblios,
207     );
208 }
209
210 sub ShowTemplate {
211     $template->param (
212     newshelf => $newshelf||0,
213     authorized  => $authorized,
214     errcode             => $errcode,
215     );
216     output_html_with_http_headers $query, $cookie, $template->output;
217 }