2 # Please use 8-character tabs for this file (indents are every 4 characters)
4 package C4::BookShelves;
8 # Copyright 2000-2002 Katipo Communications
10 # This file is part of Koha.
12 # Koha is free software; you can redistribute it and/or modify it under the
13 # terms of the GNU General Public License as published by the Free Software
14 # Foundation; either version 2 of the License, or (at your option) any later
17 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
18 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
19 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
21 # You should have received a copy of the GNU General Public License along with
22 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
23 # Suite 330, Boston, MA 02111-1307 USA
29 use C4::Circulation::Circ2;
30 use vars qw($VERSION @ISA @EXPORT);
32 # set the version for version checking
37 C4::BookShelves - Functions for manipulating Koha virtual bookshelves
45 This module provides functions for manipulating virtual bookshelves,
46 including creating and deleting bookshelves, and adding and removing
47 items to and from bookshelves.
56 @EXPORT = qw(&GetShelfList &GetShelfContents &AddToShelf &RemoveFromShelf &AddShelf &RemoveShelf);
58 my $dbh = C4::Context->dbh;
62 $shelflist = &GetShelfList();
63 ($shelfnumber, $shelfhash) = each %{$shelflist};
65 Looks up the virtual bookshelves, and returns a summary. C<$shelflist>
66 is a reference-to-hash. The keys are the bookshelf numbers
67 (C<$shelfnumber>, above), and the values (C<$shelfhash>, above) are
68 themselves references-to-hash, with the following keys:
72 =item C<$shelfhash-E<gt>{shelfname}>
74 A string. The name of the shelf.
76 =item C<$shelfhash-E<gt>{count}>
78 The number of books on that bookshelf.
84 # FIXME - Wouldn't it be more intuitive to return a list, rather than
85 # a reference-to-hash? The shelf number can be just another key in the
88 # FIXME - These two database queries can be combined into one:
89 # SELECT bookshelf.shelfnumber, bookshelf.shelfname,
90 # count(shelfcontents.itemnumber)
92 # LEFT JOIN shelfcontents
93 # ON bookshelf.shelfnumber = shelfcontents.shelfnumber
94 # GROUP BY bookshelf.shelfnumber
95 my $sth=$dbh->prepare("select shelfnumber,shelfname from bookshelf");
98 while (my ($shelfnumber, $shelfname) = $sth->fetchrow) {
99 my $sti=$dbh->prepare("select count(*) from shelfcontents where shelfnumber=?");
100 # FIXME - Should there be an "order by" in here somewhere?
101 $sti->execute($shelfnumber);
102 my ($count) = $sti->fetchrow;
103 $shelflist{$shelfnumber}->{'shelfname'}=$shelfname;
104 $shelflist{$shelfnumber}->{'count'}=$count;
109 =item GetShelfContents
111 $itemlist = &GetShelfContents($env, $shelfnumber);
113 Looks up information about the contents of virtual bookshelf number
116 Returns a reference-to-array, whose elements are references-to-hash,
117 as returned by C<&getiteminformation>.
119 I don't know what C<$env> is.
123 sub GetShelfContents {
124 my ($env, $shelfnumber) = @_;
126 my $sth=$dbh->prepare("select itemnumber from shelfcontents where shelfnumber=? order by itemnumber");
127 $sth->execute($shelfnumber);
128 while (my ($itemnumber) = $sth->fetchrow) {
129 my ($item) = getiteminformation($env, $itemnumber, 0);
130 push (@itemlist, $item);
137 &AddToShelf($env, $itemnumber, $shelfnumber);
139 Adds item number C<$itemnumber> to virtual bookshelf number
140 C<$shelfnumber>, unless that item is already on that shelf.
147 my ($env, $itemnumber, $shelfnumber) = @_;
148 return unless $itemnumber;
149 my $sth=$dbh->prepare("select * from shelfcontents where shelfnumber=? and itemnumber=?");
151 $sth->execute($shelfnumber, $itemnumber);
155 $sth=$dbh->prepare("insert into shelfcontents (shelfnumber, itemnumber, flags) values (?, ?, 0)");
156 $sth->execute($shelfnumber, $itemnumber);
160 =item RemoveFromShelf
162 &RemoveFromShelf($env, $itemnumber, $shelfnumber);
164 Removes item number C<$itemnumber> from virtual bookshelf number
165 C<$shelfnumber>. If the item wasn't on that bookshelf to begin with,
172 sub RemoveFromShelf {
173 my ($env, $itemnumber, $shelfnumber) = @_;
174 my $sth=$dbh->prepare("delete from shelfcontents where shelfnumber=? and itemnumber=?");
175 $sth->execute($shelfnumber,$itemnumber);
180 ($status, $msg) = &AddShelf($env, $shelfname);
182 Creates a new virtual bookshelf with name C<$shelfname>.
184 Returns a two-element array, where C<$status> is 0 if the operation
185 was successful, or non-zero otherwise. C<$msg> is "Done" in case of
186 success, or an error message giving the reason for failure.
192 # FIXME - Perhaps this could/should return the number of the new bookshelf
195 my ($env, $shelfname) = @_;
196 my $sth=$dbh->prepare("select * from bookshelf where shelfname=?");
197 $sth->execute($shelfname);
199 return(1, "Shelf \"$shelfname\" already exists");
201 $sth=$dbh->prepare("insert into bookshelf (shelfname) values (?)");
202 $sth->execute($shelfname);
209 ($status, $msg) = &RemoveShelf($env, $shelfnumber);
211 Deletes virtual bookshelf number C<$shelfnumber>. The bookshelf must
214 Returns a two-element array, where C<$status> is 0 if the operation
215 was successful, or non-zero otherwise. C<$msg> is "Done" in case of
216 success, or an error message giving the reason for failure.
223 my ($env, $shelfnumber) = @_;
224 my $sth=$dbh->prepare("select count(*) from shelfcontents where shelfnumber=?");
225 $sth->execute($shelfnumber);
226 my ($count)=$sth->fetchrow;
228 return (1, "Shelf has $count items on it. Please remove all items before deleting this shelf.");
230 $sth=$dbh->prepare("delete from bookshelf where shelfnumber=?");
231 $sth->execute($shelfnumber);
236 END { } # module clean-up code here (global destructor)
242 # Revision 1.12 2004/02/11 08:40:09 tipaul
243 # synch'ing 2.0.0 branch and head
245 # Revision 1.11.2.1 2004/02/06 14:16:55 tipaul
246 # fixing bugs in bookshelves management.
248 # Revision 1.11 2003/12/15 10:57:08 slef
249 # DBI call fix for bug 662
251 # Revision 1.10 2003/02/05 10:05:02 acli
252 # Converted a few SQL statements to use ? to fix a few strange SQL errors
253 # Noted correct tab size
255 # Revision 1.9 2002/10/13 08:29:18 arensb
256 # Deleted unused variables.
257 # Removed trailing whitespace.
259 # Revision 1.8 2002/10/10 04:32:44 arensb
260 # Simplified references.
262 # Revision 1.7 2002/10/05 09:50:10 arensb
263 # Merged with arensb-context branch: use C4::Context->dbh instead of
264 # &C4Connect, and generally prefer C4::Context over C4::Database.
266 # Revision 1.6.2.1 2002/10/04 02:24:43 arensb
267 # Use C4::Connect instead of C4::Database, C4::Connect->dbh instead
270 # Revision 1.6 2002/09/23 13:50:30 arensb
271 # Fixed missing bit in POD.
273 # Revision 1.5 2002/09/22 17:29:17 arensb
275 # Added some FIXME comments.
276 # Removed useless trailing whitespace.
278 # Revision 1.4 2002/08/14 18:12:51 tonnesen
279 # Added copyright statement to all .pl and .pm files
281 # Revision 1.3 2002/07/02 17:48:06 tonnesen
282 # Merged in updates from rel-1-2
284 # Revision 1.2.2.1 2002/06/26 20:46:48 tonnesen
285 # Inserting some changes I made locally a while ago.
295 Koha Developement team <info@koha.org>
299 C4::Circulation::Circ2(3)