Bug 15836: Mark C4::ClassSource subs DEPRECATED
[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
30 =head1 NAME
31
32 C4::ClassSources - handle classification sources in Koha
33
34 =head1 SYNOPSIS
35
36 use C4::ClassSource;
37
38 =head1 DESCRIPTION
39
40 This module deals with manipulating classification
41 sources and sorting rules.
42
43 =head1 FUNCTIONS
44
45 =cut
46
47
48 @ISA    = qw(Exporter);
49 @EXPORT = qw(
50     &GetClassSources
51     &GetClassSource
52     &GetClassSortRules
53     &GetClassSortRule
54
55     &GetSourcesForSortRule
56     &GetClassSort
57     
58 );
59
60 =head2 GetClassSources
61
62   my $sources = GetClassSources();
63
64   Returns reference to hash of references to
65   the class sources, keyed on cn_source.
66
67 =head3 Example
68
69 my $sources = GetClassSources();
70 my @sources = ();
71 foreach my $cn_source (sort keys %$sources) {
72     my $source = $sources->{$cn_source};
73     push @sources, 
74       {  
75         code        => $source->{'cn_source'},
76         description => $source->{'description'},
77         used => $source->{'used'},
78         sortrule    => $source->{'class_sort_rule'}
79       } 
80 }
81
82 =cut
83
84 sub GetClassSources {
85
86     my %class_sources = ();
87     my $dbh = C4::Context->dbh;
88     my $sth = $dbh->prepare("SELECT * FROM `class_sources`");
89     $sth->execute();
90     while (my $source = $sth->fetchrow_hashref) {
91         $class_sources{ $source->{'cn_source'} } = $source;
92     }
93
94     return \%class_sources;
95
96 }
97
98 =head2 AddClassSource
99
100   DEPRECATED
101
102   AddClassSource($cn_source, $description, $used, $class_sort_rule);
103
104   Adds a class_sources row.
105
106 =cut
107
108 sub AddClassSource {
109
110     my ($cn_source, $description, $used, $class_sort_rule) = @_;
111     my $exists = GetClassSource($cn_source);
112     if ($exists) {
113         return 0;
114     }
115     my $dbh = C4::Context->dbh;
116     my $sth = $dbh->prepare("INSERT INTO `class_sources`
117                                            (`cn_source`, `description`, `used`, `class_sort_rule`)
118                                            VALUES (?, ?, ?, ?)");
119     $sth->execute($cn_source, $description, $used, $class_sort_rule);
120     return 1;
121 }
122
123 =head2 GetClassSource
124
125   my $hashref = GetClassSource($cn_source);
126
127   Retrieves a class_sources row by cn_source.
128
129 =cut
130
131 sub GetClassSource {
132
133     my ($cn_source) = (@_);
134     my $dbh = C4::Context->dbh;
135     my $sth = $dbh->prepare("SELECT * FROM `class_sources` WHERE cn_source = ?");
136     $sth->execute($cn_source);
137     my $row = $sth->fetchrow_hashref();
138     return $row;
139 }
140
141 =head2 ModClassSource 
142
143   DEPRECATED
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   DEPRECATED
167
168   DelClassSource($cn_source);
169
170   Deletes class_sources row.
171
172 =cut
173
174 sub DelClassSource {
175
176     my ($cn_source) = @_;
177     my $dbh = C4::Context->dbh;
178     my $sth = $dbh->prepare("DELETE FROM `class_sources` WHERE `cn_source` = ?");
179     $sth->execute($cn_source);
180
181 }
182
183 =head2 GetClassSortRules
184
185   my $sort_rules = GetClassSortRules();
186
187 Returns reference to hash of references to
188 the class sorting rules, keyed on class_sort_rule
189
190 =head3 Example
191
192   my $sort_rules = GetClassSortRules();
193   my @sort_rules = ();
194   foreach my $sort_rule (sort keys %$sort_rules) {
195       my $sort_rule = $sort_rules->{$sort_rule};
196       push @sort_rules,
197           {
198           rule        => $sort_rule->{'class_sort_rule'},
199           description => $sort_rule->{'description'},
200           sort_routine    => $sort_rule->{'sort_routine'}
201       }
202    }
203
204 =cut
205
206 sub GetClassSortRules {
207
208     my %class_sort_rules = ();
209     my $dbh = C4::Context->dbh;
210     my $sth = $dbh->prepare("SELECT * FROM `class_sort_rules`");
211     $sth->execute();
212     while (my $sort_rule = $sth->fetchrow_hashref) {
213         $class_sort_rules{ $sort_rule->{'class_sort_rule'} } = $sort_rule;
214     }
215
216     return \%class_sort_rules;
217
218 }
219
220 =head2 AddClassSortRule
221
222   DEPRECATED
223
224   AddClassSortRule($class_sort_rule, $description, $sort_routine);
225
226   Adds a class_sort_rules row.
227
228 =cut
229
230 sub AddClassSortRule {
231
232     my ($class_sort_rule, $description, $sort_routine) = @_;
233     my $exists = GetClassSortRule($class_sort_rule);
234     if ($exists) {
235         return 0;
236     }
237     my $dbh = C4::Context->dbh;
238     my $sth = $dbh->prepare("INSERT INTO `class_sort_rules`
239                                            (`class_sort_rule`, `description`, `sort_routine`)
240                                            VALUES (?, ?, ?)");
241     $sth->execute($class_sort_rule, $description, $sort_routine);
242     return 1;
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("SELECT * FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
258     $sth->execute($class_sort_rule);
259     my $row = $sth->fetchrow_hashref();
260     return $row;
261 }
262
263 =head2 ModClassSortRule 
264
265   DEPRECATED
266
267   ModClassSortRule($class_sort_rule, $description, $sort_routine);
268
269   Updates a class_sort_rules row.
270
271 =cut
272
273 sub ModClassSortRule {
274
275     my ($class_sort_rule, $description, $sort_routine) = @_;
276     my $dbh = C4::Context->dbh;
277     my $sth = $dbh->prepare("UPDATE `class_sort_rules`
278                                     SET  `description` = ?,
279                                          `sort_routine` = ?
280                                     WHERE `class_sort_rule` = ?");
281     $sth->execute($description, $sort_routine, $class_sort_rule);
282
283 }
284
285 =head2 DelClassSortRule 
286
287   DEPRECATED
288
289   DelClassSortRule($class_sort_rule);
290
291   Deletes class_sort_rules row.
292
293 =cut
294
295 sub DelClassSortRule {
296
297     my ($class_sort_rule) = @_;
298     my $dbh = C4::Context->dbh;
299     my $sth = $dbh->prepare("DELETE FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
300     $sth->execute($class_sort_rule);
301
302 }
303
304 =head2 GetSourcesForSortRule
305
306   my @source = GetSourcesForSortRule($class_sort_rule);
307
308   Retrieves an array class_source.cn_rule for each source
309   that uses the supplied $class_sort_rule.
310
311 =cut
312
313 sub GetSourcesForSortRule {
314
315     my ($class_sort_rule) = @_;
316
317     my $dbh = C4::Context->dbh;
318     my $sth = $dbh->prepare("SELECT cn_source FROM class_sources WHERE class_sort_rule = ?");
319     $sth->execute($class_sort_rule);
320     my @sources = ();
321     while (my ($source) = $sth->fetchrow_array()) {
322         push @sources, $source;
323     }
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 Development Team <http://koha-community.org/>
362
363 =cut