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