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