bug 8215: (followup) make sure C4::CourseReserves doesn't export anything
[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
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 use strict;
21 use warnings;
22
23 require Exporter;
24 use C4::Context;
25 use C4::ClassSortRoutine;
26
27 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
28
29 # set the version for version checking
30 $VERSION = 3.07.00.049;
31
32 =head1 NAME
33
34 C4::ClassSources - handle classification sources in Koha
35
36 =head1 SYNOPSIS
37
38 use C4::ClassSource;
39
40 =head1 DESCRIPTION
41
42 This module deals with manipulating classification
43 sources and sorting rules.
44
45 =head1 FUNCTIONS
46
47 =cut
48
49
50 @ISA    = qw(Exporter);
51 @EXPORT = qw(
52     &GetClassSources
53     &AddClassSource
54     &GetClassSource
55     &ModClassSource
56     &DelClassSource
57     &GetClassSortRules
58     &AddClassSortRule
59     &GetClassSortRule
60     &ModClassSortRule
61     &DelClassSortRule
62   
63     &GetSourcesForSortRule
64     &GetClassSort
65     
66 );
67
68 =head2 GetClassSources
69
70   my $sources = GetClassSources();
71
72   Returns reference to hash of references to
73   the class sources, keyed on cn_source.
74
75 =head3 Example
76
77 my $sources = GetClassSources();
78 my @sources = ();
79 foreach my $cn_source (sort keys %$sources) {
80     my $source = $sources->{$cn_source};
81     push @sources, 
82       {  
83         code        => $source->{'cn_source'},
84         description => $source->{'description'},
85         used => $source->{'used'},
86         sortrule    => $source->{'class_sort_rule'}
87       } 
88 }
89
90 =cut
91
92 sub GetClassSources {
93
94     my %class_sources = ();
95     my $dbh = C4::Context->dbh;
96     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sources`");
97     $sth->execute();
98     while (my $source = $sth->fetchrow_hashref) {
99         $class_sources{ $source->{'cn_source'} } = $source;
100     }
101     $sth->finish();
102
103     return \%class_sources;
104
105 }
106
107 =head2 AddClassSource
108
109   AddClassSource($cn_source, $description, $used, $class_sort_rule);
110
111   Adds a class_sources row.
112
113 =cut
114
115 sub AddClassSource {
116
117     my ($cn_source, $description, $used, $class_sort_rule) = @_;
118     my $dbh = C4::Context->dbh;
119     my $sth = $dbh->prepare_cached("INSERT INTO `class_sources` 
120                                            (`cn_source`, `description`, `used`, `class_sort_rule`)
121                                            VALUES (?, ?, ?, ?)");
122     $sth->execute($cn_source, $description, $used, $class_sort_rule);
123     $sth->finish();
124   
125 }
126
127 =head2 GetClassSource
128
129   my $hashref = GetClassSource($cn_source);
130
131   Retrieves a class_sources row by cn_source.
132
133 =cut
134
135 sub GetClassSource {
136
137     my ($cn_source) = (@_);
138     my $dbh = C4::Context->dbh;
139     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sources` WHERE cn_source = ?");
140     $sth->execute($cn_source);
141     my $row = $sth->fetchrow_hashref();
142     $sth->finish();
143     return $row;
144 }
145
146 =head2 ModClassSource 
147
148   ModClassSource($cn_source, $description, $used, $class_sort_rule);
149
150   Updates a class_sources row.
151
152 =cut
153
154 sub ModClassSource {
155
156     my ($cn_source, $description, $used, $class_sort_rule) = @_;
157     my $dbh = C4::Context->dbh;
158     my $sth = $dbh->prepare_cached("UPDATE `class_sources` 
159                                     SET  `description` = ?,
160                                          `used` = ?,
161                                          `class_sort_rule` = ?
162                                     WHERE `cn_source` = ?");
163     $sth->execute($description, $used, $class_sort_rule, $cn_source);
164     $sth->finish();
165
166 }
167
168 =head2 DelClassSource 
169
170   DelClassSource($cn_source);
171
172   Deletes class_sources row.
173
174 =cut
175
176 sub DelClassSource {
177
178     my ($cn_source) = @_;
179     my $dbh = C4::Context->dbh;
180     my $sth = $dbh->prepare_cached("DELETE FROM `class_sources` WHERE `cn_source` = ?");
181     $sth->execute($cn_source);
182     $sth->finish();
183
184 }
185
186 =head2 GetClassSortRules
187
188   my $sort_rules = GetClassSortRules();
189
190 Returns reference to hash of references to
191 the class sorting rules, keyed on class_sort_rule
192
193 =head3 Example
194
195   my $sort_rules = GetClassSortRules();
196   my @sort_rules = ();
197   foreach my $sort_rule (sort keys %$sort_rules) {
198       my $sort_rule = $sort_rules->{$sort_rule};
199       push @sort_rules,
200           {
201           rule        => $sort_rule->{'class_sort_rule'},
202           description => $sort_rule->{'description'},
203           sort_routine    => $sort_rule->{'sort_routine'}
204       }
205    }
206
207 =cut
208
209 sub GetClassSortRules {
210
211     my %class_sort_rules = ();
212     my $dbh = C4::Context->dbh;
213     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sort_rules`");
214     $sth->execute();
215     while (my $sort_rule = $sth->fetchrow_hashref) {
216         $class_sort_rules{ $sort_rule->{'class_sort_rule'} } = $sort_rule;
217     }
218     $sth->finish();
219
220     return \%class_sort_rules;
221
222 }
223
224 =head2 AddClassSortRule
225
226   AddClassSortRule($class_sort_rule, $description, $sort_routine);
227
228   Adds a class_sort_rules row.
229
230 =cut
231
232 sub AddClassSortRule {
233
234     my ($class_sort_rule, $description, $sort_routine) = @_;
235     my $dbh = C4::Context->dbh;
236     my $sth = $dbh->prepare_cached("INSERT INTO `class_sort_rules` 
237                                            (`class_sort_rule`, `description`, `sort_routine`)
238                                            VALUES (?, ?, ?)");
239     $sth->execute($class_sort_rule, $description, $sort_routine);
240     $sth->finish();
241   
242 }
243
244 =head2 GetClassSortRule
245
246   my $hashref = GetClassSortRule($class_sort_rule);
247
248   Retrieves a class_sort_rules row by class_sort_rule.
249
250 =cut
251
252 sub GetClassSortRule {
253
254     my ($class_sort_rule) = (@_);
255     my $dbh = C4::Context->dbh;
256     my $sth = $dbh->prepare_cached("SELECT * FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
257     $sth->execute($class_sort_rule);
258     my $row = $sth->fetchrow_hashref();
259     $sth->finish();
260     return $row;
261 }
262
263 =head2 ModClassSortRule 
264
265   ModClassSortRule($class_sort_rule, $description, $sort_routine);
266
267   Updates a class_sort_rules row.
268
269 =cut
270
271 sub ModClassSortRule {
272
273     my ($class_sort_rule, $description, $sort_routine) = @_;
274     my $dbh = C4::Context->dbh;
275     my $sth = $dbh->prepare_cached("UPDATE `class_sort_rules` 
276                                     SET  `description` = ?,
277                                          `sort_routine` = ?
278                                     WHERE `class_sort_rule` = ?");
279     $sth->execute($description, $sort_routine, $class_sort_rule);
280     $sth->finish();
281
282 }
283
284 =head2 DelClassSortRule 
285
286   DelClassSortRule($class_sort_rule);
287
288   Deletes class_sort_rules row.
289
290 =cut
291
292 sub DelClassSortRule {
293
294     my ($class_sort_rule) = @_;
295     my $dbh = C4::Context->dbh;
296     my $sth = $dbh->prepare_cached("DELETE FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
297     $sth->execute($class_sort_rule);
298     $sth->finish();
299
300 }
301
302 =head2 GetSourcesForSortRule
303
304   my @source = GetSourcesForSortRule($class_sort_rule);
305
306   Retrieves an array class_source.cn_rule for each source
307   that uses the supplied $class_sort_rule.
308
309 =cut
310
311 sub GetSourcesForSortRule {
312
313     my ($class_sort_rule) = @_;
314
315     my $dbh = C4::Context->dbh;
316     my $sth = $dbh->prepare_cached("SELECT cn_source FROM class_sources WHERE class_sort_rule = ?");
317     $sth->execute($class_sort_rule);
318     my @sources = ();
319     while (my ($source) = $sth->fetchrow_array()) {
320         push @sources, $source;
321     }
322     $sth->finish();
323     return @sources;
324
325 }
326
327 =head2 GetClassSort
328
329   my $cn_sort = GetClassSort($cn_source, $cn_class, $cn_item);
330
331 Get the sort key corresponding to the classification part and item part
332 and the defined call number source.
333
334 =cut
335
336 sub GetClassSort {
337
338     my ($cn_source, $cn_class, $cn_item) = @_;
339
340     my $source_ref = GetClassSource($cn_source);
341     unless (defined $source_ref) {
342         $source_ref = GetClassSource(C4::Context->preference("DefaultClassificationSource"));
343     }
344     my $routine = "";
345     if (defined $source_ref) {
346         my $rule_ref = GetClassSortRule($source_ref->{'class_sort_rule'});
347         if (defined $rule_ref) {
348             $routine = $rule_ref->{'sort_routine'};
349         }
350     } 
351
352     return GetClassSortKey($routine, $cn_class, $cn_item);
353
354 }
355
356 1;
357
358 =head1 AUTHOR
359
360 Koha Development Team <http://koha-community.org/>
361
362 =cut