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