Start of code to implement virtual bookshelves in Koha.
[koha.git] / C4 / BookShelves.pm
1 package C4::BookShelves; #asummes C4/BookShelves
2
3 #
4 # $Header$
5 #
6 #requires DBI.pm to be installed
7
8 use strict;
9 require Exporter;
10 use DBI;
11 use C4::Database;
12 use C4::Circulation::Circ2;
13 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
14   
15 # set the version for version checking
16 $VERSION = 0.01;
17     
18 @ISA = qw(Exporter);
19 @EXPORT = qw(&GetShelfList &GetShelfContents &AddToShelf &RemoveFromShelf &AddShelf &RemoveShelf);
20
21 sub AddShelf {
22 }
23
24 sub RemoveShelf {
25 }
26 %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
27                   
28 # your exported package globals go here,
29 # as well as any optionally exported functions
30
31 @EXPORT_OK   = qw($Var1 %Hashit);
32
33
34 # non-exported package globals go here
35 use vars qw(@more $stuff);
36         
37 # initalize package globals, first exported ones
38
39 my $Var1   = '';
40 my %Hashit = ();
41                     
42 # then the others (which are still accessible as $Some::Module::stuff)
43 my $stuff  = '';
44 my @more   = ();
45         
46 # all file-scoped lexicals must be created before
47 # the functions below that use them.
48                 
49 # file-private lexicals go here
50 my $priv_var    = '';
51 my %secret_hash = ();
52                             
53 # here's a file-private function as a closure,
54 # callable as &$priv_func;  it cannot be prototyped.
55 my $priv_func = sub {
56   # stuff goes here.
57 };
58                                                     
59 # make all your functions, whether exported or not;
60
61 my $dbh=C4Connect();
62
63 sub GetShelfList {
64     my $sth=$dbh->prepare("select shelfnumber,shelfname from bookshelf");
65     $sth->execute;
66     my %shelflist;
67     while (my ($shelfnumber, $shelfname) = $sth->fetchrow) {
68         my $sti=$dbh->prepare("select count(*) from shelfcontents where shelfnumber=$shelfnumber");
69         $sti->execute;
70         my ($count) = $sti->fetchrow;
71         $shelflist{$shelfnumber}->{'shelfname'}=$shelfname;
72         $shelflist{$shelfnumber}->{'count'}=$count;
73     }
74     return(\%shelflist);
75 }
76
77
78 sub GetShelfContents {
79     my ($env, $shelfnumber) = @_;
80     my @itemlist;
81     my $sth=$dbh->prepare("select itemnumber from shelfcontents where shelfnumber=$shelfnumber order by itemnumber");
82     $sth->execute;
83     while (my ($itemnumber) = $sth->fetchrow) {
84         my ($item) = getiteminformation($env, $itemnumber, 0);
85         push (@itemlist, $item);
86     }
87     return (\@itemlist);
88 }
89
90 sub AddToShelf {
91     my ($env, $itemnumber, $shelfnumber) = @_;
92     my $sth=$dbh->prepare("select * from shelfcontents where shelfnumber=$shelfnumber and itemnumber=$itemnumber");
93     $sth->execute;
94     if ($sth->rows) {
95 # already on shelf
96     } else {
97         $sth=$dbh->prepare("insert into shelfcontents (shelfnumber, itemnumber, flags) values ($shelfnumber, $itemnumber, 0)");
98         $sth->execute;
99     }
100 }
101
102 sub RemoveFromShelf {
103     my ($env, $itemnumber, $shelfnumber) = @_;
104     my $sth=$dbh->prepare("delete from shelfcontents where shelfnumber=$shelfnumber and itemnumber=$itemnumber");
105     $sth->execute;
106 }
107
108 sub AddShelf {
109     my ($env, $shelfname) = @_;
110     my $q_shelfname=$dbh->quote($shelfname);
111     my $sth=$dbh->prepare("select * from bookshelf where shelfname=$q_shelfname");
112     $sth->execute;
113     if ($sth->rows) {
114         return(0, "Shelf \"$shelfname\" already exists");
115     } else {
116         $sth=$dbh->prepare("insert into bookshelf (shelfname) values ($q_shelfname)");
117         $sth->execute;
118         return (1, "Done");
119     }
120 }
121
122 sub RemoveShelf {
123     my ($env, $shelfnumber) = @_;
124     my $sth=$dbh->prepare("select count(*) from shelfcontents where shelfnumber=$shelfnumber");
125     $sth->execute;
126     my ($count)=$sth->fetchrow;
127     if ($count) {
128         return (0, "Shelf has $count items on it");
129     } else {
130         $sth=$dbh->prepare("delete from bookshelf where shelfnumber=$shelfnumber");
131         $sth->execute;
132         return (1, "Done");
133     }
134 }
135
136                         
137 END { }       # module clean-up code here (global destructor)
138
139
140 #
141 # $Log$
142 # Revision 1.1  2001/02/07 20:27:17  tonnesen
143 # Start of code to implement virtual bookshelves in Koha.
144 #
145 #