classification sources part 1 - system preferences
[koha.git] / C4 / ClassSource.pm
1 package C4::ClassSource;
2
3 # Copyright (C) 2007 LibLime
4
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along with
17 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
18 # Suite 330, Boston, MA  02111-1307 USA
19
20 use strict;
21 require Exporter;
22 use C4::Context;
23 use C4::Koha;
24
25 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
26
27 # set the version for version checking
28 $VERSION = 3.00;
29
30 =head1 NAME
31
32 C4::ClassSources - handle classification sources in Koha
33
34 =head1 SYNOPSIS
35
36 use C4::ClassSource;
37
38 =head1 DESCRIPTION
39
40 This module deals with manipulating classification
41 sources and sorting rules.
42
43 =head1 FUNCTIONS
44
45 =cut
46
47
48 @ISA    = qw(Exporter);
49 @EXPORT = qw(
50    &GetClassSources
51    &AddClassSource
52    &GetClassSource
53    &ModClassSource
54    &DelClassSource
55    &GetClassSortRules
56    &AddClassSortRule
57    &GetClassSortRule
58    &ModClassSortRule
59    &DelClassSortRule
60   
61    &GetSourcesForSortRule
62 );
63
64 =head2 GetClassSources
65
66   my $sources = GetClassSources();
67
68   Returns reference to hash of references to
69   the class sources, keyed on cn_source.
70
71 =head3 Example
72
73 my $sources = GetClassSources();
74 my @sources = ();
75 foreach my $cn_source (sort keys %$sources) {
76     my $source = $sources->{$cn_source};
77     push @sources, 
78       {  
79         code        => $source->{'cn_source'},
80         description => $source->{'description'},
81         used => $source->{'used'},
82         sortrule    => $source->{'class_sort_rule'}
83       } 
84 }
85
86 =cut
87
88 sub GetClassSources {
89
90     my %class_sources = ();
91     my $dbh = C4::Context->dbh;
92     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sources`");
93     $sth->execute();
94     while (my $source = $sth->fetchrow_hashref) {
95         $class_sources{ $source->{'cn_source'} } = $source;
96     }
97     $sth->finish();
98
99     return \%class_sources;
100
101 }
102
103 =head2 AddClassSource
104
105   AddClassSource($cn_source, $description, $used, $class_sort_rule);
106
107   Adds a class_sources row.
108
109 =cut
110
111 sub AddClassSource {
112
113     my ($cn_source, $description, $used, $class_sort_rule) = @_;
114     my $dbh = C4::Context->dbh;
115     my $sth = $dbh->prepare_cached("INSERT INTO `class_sources` 
116                                            (`cn_source`, `description`, `used`, `class_sort_rule`)
117                                            VALUES (?, ?, ?, ?)");
118     $sth->execute($cn_source, $description, $used, $class_sort_rule);
119     $sth->finish();
120   
121 }
122
123 =head2 GetClassSource
124
125   my $hashref = GetClassSource($cn_source);
126
127   Retrieves a class_sources row by cn_source.
128
129 =cut
130
131 sub GetClassSource {
132
133     my ($cn_source) = (@_);
134     my $dbh = C4::Context->dbh;
135     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sources` WHERE cn_source = ?");
136     $sth->execute($cn_source);
137     my $row = $sth->fetchrow_hashref();
138     $sth->finish();
139     return $row;
140 }
141
142 =head2 ModClassSource 
143
144   ModClassSource($cn_source, $description, $used, $class_sort_rule);
145
146   Updates a class_sources row.
147
148 =cut
149
150 sub ModClassSource {
151
152     my ($cn_source, $description, $used, $class_sort_rule) = @_;
153     my $dbh = C4::Context->dbh;
154     my $sth = $dbh->prepare_cached("UPDATE `class_sources` 
155                                     SET  `description` = ?,
156                                          `used` = ?,
157                                          `class_sort_rule` = ?
158                                     WHERE `cn_source` = ?");
159     $sth->execute($description, $used, $class_sort_rule, $cn_source);
160     $sth->finish();
161
162 }
163
164 =head2 DelClassSource 
165
166   DelClassSource($cn_source);
167
168   Deletes class_sources row.
169
170 =cut
171
172 sub DelClassSource {
173
174     my ($cn_source) = @_;
175     my $dbh = C4::Context->dbh;
176     my $sth = $dbh->prepare_cached("DELETE FROM `class_sources` WHERE `cn_source` = ?");
177     $sth->execute($cn_source);
178     $sth->finish();
179
180 }
181
182 =head2 GetClassSortRules
183
184   my $sort_rules = GetClassSortRules();
185
186   Returns reference to hash of references to
187   the class sorting rules, keyed on class_sort_rule
188   
189 =head3 Example
190
191 my $sort_rules = GetClassSortRules();
192 my @sort_rules = ();
193 foreach my $sort_rule (sort keys %$sort_rules) {
194     my $sort_rule = $sort_rules->{$sort_rule};
195     push @sort_rules,
196       {
197         rule        => $sort_rule->{'class_sort_rule'},
198         description => $sort_rule->{'description'},
199         sort_routine    => $sort_rule->{'sort_routine'}
200       }
201 }
202
203 =cut
204
205 sub GetClassSortRules {
206
207     my %class_sort_rules = ();
208     my $dbh = C4::Context->dbh;
209     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sort_rules`");
210     $sth->execute();
211     while (my $sort_rule = $sth->fetchrow_hashref) {
212         $class_sort_rules{ $sort_rule->{'class_sort_rule'} } = $sort_rule;
213     }
214     $sth->finish();
215
216     return \%class_sort_rules;
217
218 }
219
220 =head2 AddClassSortRule
221
222   AddClassSortRule($class_sort_rule, $description, $sort_routine);
223
224   Adds a class_sort_rules row.
225
226 =cut
227
228 sub AddClassSortRule {
229
230     my ($class_sort_rule, $description, $sort_routine) = @_;
231     my $dbh = C4::Context->dbh;
232     my $sth = $dbh->prepare_cached("INSERT INTO `class_sort_rules` 
233                                            (`class_sort_rule`, `description`, `sort_routine`)
234                                            VALUES (?, ?, ?)");
235     $sth->execute($class_sort_rule, $description, $sort_routine);
236     $sth->finish();
237   
238 }
239
240 =head2 GetClassSortRule
241
242   my $hashref = GetClassSortRule($class_sort_rule);
243
244   Retrieves a class_sort_rules row by class_sort_rule.
245
246 =cut
247
248 sub GetClassSortRule {
249
250     my ($class_sort_rule) = (@_);
251     my $dbh = C4::Context->dbh;
252     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
253     $sth->execute($class_sort_rule);
254     my $row = $sth->fetchrow_hashref();
255     $sth->finish();
256     return $row;
257 }
258
259 =head2 ModClassSortRule 
260
261   ModClassSortRule($class_sort_rule, $description, $sort_routine);
262
263   Updates a class_sort_rules row.
264
265 =cut
266
267 sub ModClassSortRule {
268
269     my ($class_sort_rule, $description, $sort_routine) = @_;
270     my $dbh = C4::Context->dbh;
271     my $sth = $dbh->prepare_cached("UPDATE `class_sort_rules` 
272                                     SET  `description` = ?,
273                                          `sort_routine` = ?
274                                     WHERE `class_sort_rule` = ?");
275     $sth->execute($description, $sort_routine, $class_sort_rule);
276     $sth->finish();
277
278 }
279
280 =head2 DelClassSortRule 
281
282   DelClassSortRule($class_sort_rule);
283
284   Deletes class_sort_rules row.
285
286 =cut
287
288 sub DelClassSortRule {
289
290     my ($class_sort_rule) = @_;
291     my $dbh = C4::Context->dbh;
292     my $sth = $dbh->prepare_cached("DELETE FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
293     $sth->execute($class_sort_rule);
294     $sth->finish();
295
296 }
297
298 =head2 GetSourcesForSortRule
299
300   my @source = GetSourcesForSortRule($class_sort_rule);
301
302   Retrieves an array class_source.cn_rule for each source
303   that uses the supplied $class_sort_rule.
304
305 =cut
306
307 sub GetSourcesForSortRule {
308
309     my ($class_sort_rule) = @_;
310
311     my $dbh = C4::Context->dbh;
312     my $sth = $dbh->prepare_cached("SELECT cn_source FROM class_sources WHERE class_sort_rule = ?");
313     $sth->execute($class_sort_rule);
314     my @sources = ();
315     while (my ($source) = $sth->fetchrow_array()) {
316         push @sources, $source;
317     }
318     $sth->finish();
319     return @sources;
320
321 }
322
323 1;
324
325 =head1 AUTHOR
326
327 Koha Developement team <info@koha.org>
328
329 =cut