1 package C4::ClassSource;
3 # Copyright (C) 2007 LibLime
5 # This file is part of Koha.
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.
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.
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>.
25 use C4::ClassSortRoutine;
27 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
32 C4::ClassSources - handle classification sources in Koha
40 This module deals with manipulating classification
41 sources and sorting rules.
55 &GetSourcesForSortRule
60 =head2 GetClassSources
62 my $sources = GetClassSources();
64 Returns reference to hash of references to
65 the class sources, keyed on cn_source.
69 my $sources = GetClassSources();
71 foreach my $cn_source (sort keys %$sources) {
72 my $source = $sources->{$cn_source};
75 code => $source->{'cn_source'},
76 description => $source->{'description'},
77 used => $source->{'used'},
78 sortrule => $source->{'class_sort_rule'}
86 my %class_sources = ();
87 my $dbh = C4::Context->dbh;
88 my $sth = $dbh->prepare("SELECT * FROM `class_sources`");
90 while (my $source = $sth->fetchrow_hashref) {
91 $class_sources{ $source->{'cn_source'} } = $source;
94 return \%class_sources;
102 AddClassSource($cn_source, $description, $used, $class_sort_rule);
104 Adds a class_sources row.
110 my ($cn_source, $description, $used, $class_sort_rule) = @_;
111 my $exists = GetClassSource($cn_source);
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);
123 =head2 GetClassSource
125 my $hashref = GetClassSource($cn_source);
127 Retrieves a class_sources row by cn_source.
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();
141 =head2 ModClassSource
145 ModClassSource($cn_source, $description, $used, $class_sort_rule);
147 Updates a class_sources row.
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` = ?,
158 `class_sort_rule` = ?
159 WHERE `cn_source` = ?");
160 $sth->execute($description, $used, $class_sort_rule, $cn_source);
164 =head2 DelClassSource
168 DelClassSource($cn_source);
170 Deletes class_sources row.
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);
183 =head2 GetClassSortRules
185 my $sort_rules = GetClassSortRules();
187 Returns reference to hash of references to
188 the class sorting rules, keyed on class_sort_rule
192 my $sort_rules = GetClassSortRules();
194 foreach my $sort_rule (sort keys %$sort_rules) {
195 my $sort_rule = $sort_rules->{$sort_rule};
198 rule => $sort_rule->{'class_sort_rule'},
199 description => $sort_rule->{'description'},
200 sort_routine => $sort_rule->{'sort_routine'}
206 sub GetClassSortRules {
208 my %class_sort_rules = ();
209 my $dbh = C4::Context->dbh;
210 my $sth = $dbh->prepare("SELECT * FROM `class_sort_rules`");
212 while (my $sort_rule = $sth->fetchrow_hashref) {
213 $class_sort_rules{ $sort_rule->{'class_sort_rule'} } = $sort_rule;
216 return \%class_sort_rules;
220 =head2 AddClassSortRule
224 AddClassSortRule($class_sort_rule, $description, $sort_routine);
226 Adds a class_sort_rules row.
230 sub AddClassSortRule {
232 my ($class_sort_rule, $description, $sort_routine) = @_;
233 my $exists = GetClassSortRule($class_sort_rule);
237 my $dbh = C4::Context->dbh;
238 my $sth = $dbh->prepare("INSERT INTO `class_sort_rules`
239 (`class_sort_rule`, `description`, `sort_routine`)
241 $sth->execute($class_sort_rule, $description, $sort_routine);
245 =head2 GetClassSortRule
247 my $hashref = GetClassSortRule($class_sort_rule);
249 Retrieves a class_sort_rules row by class_sort_rule.
253 sub GetClassSortRule {
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();
263 =head2 ModClassSortRule
267 ModClassSortRule($class_sort_rule, $description, $sort_routine);
269 Updates a class_sort_rules row.
273 sub ModClassSortRule {
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` = ?,
280 WHERE `class_sort_rule` = ?");
281 $sth->execute($description, $sort_routine, $class_sort_rule);
285 =head2 DelClassSortRule
289 DelClassSortRule($class_sort_rule);
291 Deletes class_sort_rules row.
295 sub DelClassSortRule {
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);
304 =head2 GetSourcesForSortRule
306 my @source = GetSourcesForSortRule($class_sort_rule);
308 Retrieves an array class_source.cn_rule for each source
309 that uses the supplied $class_sort_rule.
313 sub GetSourcesForSortRule {
315 my ($class_sort_rule) = @_;
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);
321 while (my ($source) = $sth->fetchrow_array()) {
322 push @sources, $source;
330 my $cn_sort = GetClassSort($cn_source, $cn_class, $cn_item);
332 Get the sort key corresponding to the classification part and item part
333 and the defined call number source.
339 my ($cn_source, $cn_class, $cn_item) = @_;
341 my $source_ref = GetClassSource($cn_source);
342 unless (defined $source_ref) {
343 $source_ref = GetClassSource(C4::Context->preference("DefaultClassificationSource"));
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'};
353 return GetClassSortKey($routine, $cn_class, $cn_item);
361 Koha Development Team <http://koha-community.org/>