Bug 16011: $VERSION - remove use vars $VERSION
[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 $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("SELECT * FROM `class_sources`");
97     $sth->execute();
98     while (my $source = $sth->fetchrow_hashref) {
99         $class_sources{ $source->{'cn_source'} } = $source;
100     }
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("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   
123 }
124
125 =head2 GetClassSource
126
127   my $hashref = GetClassSource($cn_source);
128
129   Retrieves a class_sources row by cn_source.
130
131 =cut
132
133 sub GetClassSource {
134
135     my ($cn_source) = (@_);
136     my $dbh = C4::Context->dbh;
137     my $sth = $dbh->prepare("SELECT * FROM `class_sources` WHERE cn_source = ?");
138     $sth->execute($cn_source);
139     my $row = $sth->fetchrow_hashref();
140     return $row;
141 }
142
143 =head2 ModClassSource 
144
145   ModClassSource($cn_source, $description, $used, $class_sort_rule);
146
147   Updates a class_sources row.
148
149 =cut
150
151 sub ModClassSource {
152
153     my ($cn_source, $description, $used, $class_sort_rule) = @_;
154     my $dbh = C4::Context->dbh;
155     my $sth = $dbh->prepare("UPDATE `class_sources`
156                                     SET  `description` = ?,
157                                          `used` = ?,
158                                          `class_sort_rule` = ?
159                                     WHERE `cn_source` = ?");
160     $sth->execute($description, $used, $class_sort_rule, $cn_source);
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("DELETE FROM `class_sources` WHERE `cn_source` = ?");
177     $sth->execute($cn_source);
178
179 }
180
181 =head2 GetClassSortRules
182
183   my $sort_rules = GetClassSortRules();
184
185 Returns reference to hash of references to
186 the class sorting rules, keyed on class_sort_rule
187
188 =head3 Example
189
190   my $sort_rules = GetClassSortRules();
191   my @sort_rules = ();
192   foreach my $sort_rule (sort keys %$sort_rules) {
193       my $sort_rule = $sort_rules->{$sort_rule};
194       push @sort_rules,
195           {
196           rule        => $sort_rule->{'class_sort_rule'},
197           description => $sort_rule->{'description'},
198           sort_routine    => $sort_rule->{'sort_routine'}
199       }
200    }
201
202 =cut
203
204 sub GetClassSortRules {
205
206     my %class_sort_rules = ();
207     my $dbh = C4::Context->dbh;
208     my $sth = $dbh->prepare("SELECT * FROM `class_sort_rules`");
209     $sth->execute();
210     while (my $sort_rule = $sth->fetchrow_hashref) {
211         $class_sort_rules{ $sort_rule->{'class_sort_rule'} } = $sort_rule;
212     }
213
214     return \%class_sort_rules;
215
216 }
217
218 =head2 AddClassSortRule
219
220   AddClassSortRule($class_sort_rule, $description, $sort_routine);
221
222   Adds a class_sort_rules row.
223
224 =cut
225
226 sub AddClassSortRule {
227
228     my ($class_sort_rule, $description, $sort_routine) = @_;
229     my $dbh = C4::Context->dbh;
230     my $sth = $dbh->prepare("INSERT INTO `class_sort_rules`
231                                            (`class_sort_rule`, `description`, `sort_routine`)
232                                            VALUES (?, ?, ?)");
233     $sth->execute($class_sort_rule, $description, $sort_routine);
234   
235 }
236
237 =head2 GetClassSortRule
238
239   my $hashref = GetClassSortRule($class_sort_rule);
240
241   Retrieves a class_sort_rules row by class_sort_rule.
242
243 =cut
244
245 sub GetClassSortRule {
246
247     my ($class_sort_rule) = (@_);
248     my $dbh = C4::Context->dbh;
249     my $sth = $dbh->prepare("SELECT * FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
250     $sth->execute($class_sort_rule);
251     my $row = $sth->fetchrow_hashref();
252     return $row;
253 }
254
255 =head2 ModClassSortRule 
256
257   ModClassSortRule($class_sort_rule, $description, $sort_routine);
258
259   Updates a class_sort_rules row.
260
261 =cut
262
263 sub ModClassSortRule {
264
265     my ($class_sort_rule, $description, $sort_routine) = @_;
266     my $dbh = C4::Context->dbh;
267     my $sth = $dbh->prepare("UPDATE `class_sort_rules`
268                                     SET  `description` = ?,
269                                          `sort_routine` = ?
270                                     WHERE `class_sort_rule` = ?");
271     $sth->execute($description, $sort_routine, $class_sort_rule);
272
273 }
274
275 =head2 DelClassSortRule 
276
277   DelClassSortRule($class_sort_rule);
278
279   Deletes class_sort_rules row.
280
281 =cut
282
283 sub DelClassSortRule {
284
285     my ($class_sort_rule) = @_;
286     my $dbh = C4::Context->dbh;
287     my $sth = $dbh->prepare("DELETE FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
288     $sth->execute($class_sort_rule);
289
290 }
291
292 =head2 GetSourcesForSortRule
293
294   my @source = GetSourcesForSortRule($class_sort_rule);
295
296   Retrieves an array class_source.cn_rule for each source
297   that uses the supplied $class_sort_rule.
298
299 =cut
300
301 sub GetSourcesForSortRule {
302
303     my ($class_sort_rule) = @_;
304
305     my $dbh = C4::Context->dbh;
306     my $sth = $dbh->prepare("SELECT cn_source FROM class_sources WHERE class_sort_rule = ?");
307     $sth->execute($class_sort_rule);
308     my @sources = ();
309     while (my ($source) = $sth->fetchrow_array()) {
310         push @sources, $source;
311     }
312     return @sources;
313
314 }
315
316 =head2 GetClassSort
317
318   my $cn_sort = GetClassSort($cn_source, $cn_class, $cn_item);
319
320 Get the sort key corresponding to the classification part and item part
321 and the defined call number source.
322
323 =cut
324
325 sub GetClassSort {
326
327     my ($cn_source, $cn_class, $cn_item) = @_;
328
329     my $source_ref = GetClassSource($cn_source);
330     unless (defined $source_ref) {
331         $source_ref = GetClassSource(C4::Context->preference("DefaultClassificationSource"));
332     }
333     my $routine = "";
334     if (defined $source_ref) {
335         my $rule_ref = GetClassSortRule($source_ref->{'class_sort_rule'});
336         if (defined $rule_ref) {
337             $routine = $rule_ref->{'sort_routine'};
338         }
339     } 
340
341     return GetClassSortKey($routine, $cn_class, $cn_item);
342
343 }
344
345 1;
346
347 =head1 AUTHOR
348
349 Koha Development Team <http://koha-community.org/>
350
351 =cut