Ticket 1110 : Balance carts and lists
[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 under the
11 # terms of the GNU General Public License as published by the Free Software
12 # Foundation; either version 2 of the License, or (at your option) any later
13 # version.
14 #
15 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
16 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
17 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License along with
20 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
21 # Suite 330, Boston, MA  02111-1307 USA
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 =back
54
55 =cut
56
57 use strict;
58 use C4::Biblio;
59 use CGI;
60 use C4::Output;
61 use C4::VirtualShelves qw/:DEFAULT GetRecentShelves/;
62 use C4::Circulation;
63 use C4::Auth;
64 #splits incoming biblionumber(s) to array and adds each to shelf.
65 sub AddBibliosToShelf {
66     my ($shelfnumber,@biblionumber)=@_;
67
68     # multiple bibs might come in as '/' delimited string (from where, i don't see), or as array.
69     if (scalar(@biblionumber) == 1) {
70         @biblionumber = (split /\//,$biblionumber[0]);
71     }
72     for my $bib (@biblionumber){
73         AddToShelfFromBiblio($bib, $shelfnumber);
74     }
75 }
76
77
78
79 #use it only to debug !
80 use warnings;
81
82 sub AddBibliosToShelf {
83     my ($shelfnumber,@biblionumber)=@_;
84
85     # multiple bibs might come in as '/' delimited string (from where, i don't see), or as array.
86     if (scalar(@biblionumber) == 1) {
87         @biblionumber = (split /\//,$biblionumber[0]);
88     }
89     for my $bib (@biblionumber){
90         AddToShelfFromBiblio($bib, $shelfnumber);
91     }
92 }
93
94 my $query           = new CGI;
95
96 # If set, then single item case.
97 my $biblionumber    = $query->param('biblionumber');
98
99 # If set, then multiple item case.
100 my @biblionumber   = $query->param('biblionumber');
101 my $biblionumbers   = $query->param('biblionumbers');
102
103 my $shelfnumber     = $query->param('shelfnumber');
104 my $newvirtualshelf = $query->param('newvirtualshelf');
105 my $category        = $query->param('category');
106 my $sortfield       = $query->param('sortfield');
107 my $confirmed       = $query->param('confirmed') || 0;
108
109
110 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
111     {
112         template_name   => "virtualshelves/addbybiblionumber.tmpl",
113         query           => $query,
114         type            => "intranet",
115         authnotrequired => 0,
116         flagsrequired   => { catalogue => 1 },
117     }
118 );
119
120 my @biblionumbers;
121 if ($biblionumbers) {
122     @biblionumbers = split '/', $biblionumbers;
123 } else {
124     @biblionumbers = (@biblionumber);
125 }
126
127 $shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category, $sortfield )
128   if $newvirtualshelf;
129 if ( $shelfnumber || ( $shelfnumber == -1 ) ) {    # the shelf already exist.
130
131     if ($confirmed == 1) {
132         AddBibliosToShelf($shelfnumber,@biblionumber);
133         print
134     "Content-Type: text/html\n\n<html><body onload=\"window.opener.location.reload(true);window.close()\"></body></html>";
135         exit;
136     } else {
137         my ( $singleshelf, $singleshelfname, $singlecategory ) = GetShelf( $query->param('shelfnumber') );
138         my @biblios;
139         for my $bib (@biblionumber) {
140             my $data = GetBiblioData( $bib );
141             push(@biblios,
142                         { biblionumber => $bib,
143                           title        => $data->{'title'},
144                           author       => $data->{'author'},
145                         } );
146         }
147
148         $template->param
149         (
150          biblionumber => \@biblionumber,
151          biblios      => \@biblios,
152          multiple     => (scalar(@biblionumber) > 1),
153          singleshelf  => 1,
154          shelfname    => $singleshelfname,
155          shelfnumber  => $singleshelf,
156          total        => scalar(@biblionumber),
157          confirm      => 1,
158         );
159     }
160 }
161 else {    # this shelf doesn't already exist.
162     my $limit = 10;
163     my ($shelflist) = GetRecentShelves(1, $limit, $loggedinuser);
164     my @shelvesloop;
165     my %shelvesloop;
166     for my $shelf ( @{ $shelflist->[0] } ) {
167         push( @shelvesloop, $shelf->{shelfnumber} );
168         $shelvesloop{$shelf->{shelfnumber}} = $shelf->{shelfname};
169     }
170     # then open shelves...
171     ($shelflist) = GetRecentShelves(3, $limit, undef);
172     for my $shelf ( @{ $shelflist->[0] } ) {
173         push( @shelvesloop, $shelf->{shelfnumber} );
174         $shelvesloop{$shelf->{shelfnumber}} = $shelf->{shelfname};
175     }
176     if(@shelvesloop gt 0){
177         my $CGIvirtualshelves = CGI::scrolling_list
178           (
179            -name     => 'shelfnumber',
180            -values   => \@shelvesloop,
181            -labels   => \%shelvesloop,
182            -size     => 1,
183            -tabindex => '',
184            -multiple => 0
185           );
186         $template->param
187           (
188            CGIvirtualshelves => $CGIvirtualshelves,
189           );
190     }
191     
192     unless ($biblionumbers) {
193         my ( $bibliocount, @biblios ) = GetBiblio($biblionumber);
194     
195         $template->param
196           (
197            biblionumber      => $biblionumber,
198            title             => $biblios[0]->{'title'},
199            author            => $biblios[0]->{'author'},
200           );
201     } else {
202         my @biblioloop = ();
203         foreach my $biblionumber (@biblionumbers) {
204             my ( $bibliocount, @biblios ) = GetBiblio($biblionumber);
205             my %biblioiter = (
206                               title=>$biblios[0]->{'title'},
207                               author=>$biblios[0]->{'author'}
208                              );
209             push @biblioloop, \%biblioiter;
210         }
211         $template->param
212           (
213            biblioloop => \@biblioloop,
214            biblionumbers => $biblionumbers
215           );
216     }
217     
218 }
219 output_html_with_http_headers $query, $cookie, $template->output;