| File: | C4/ClassSource.pm |
| Coverage: | 17.1% |
| line | stmt | bran | cond | sub | time | code |
|---|---|---|---|---|---|---|
| 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 | 22 22 22 | 18038 98 672 | use strict; | |||
| 21 | 22 22 22 | 157 102 1506 | use warnings; | |||
| 22 | ||||||
| 23 | require Exporter; | |||||
| 24 | 22 22 22 | 325 176 354 | use C4::Context; | |||
| 25 | 22 22 22 | 4856 52 2623 | use C4::ClassSortRoutine; | |||
| 26 | ||||||
| 27 | 22 22 22 | 109 32 20029 | use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); | |||
| 28 | ||||||
| 29 | # set the version for version checking | |||||
| 30 | $VERSION = 3.00; | |||||
| 31 | ||||||
| 32 - 47 | =head1 NAME C4::ClassSources - handle classification sources in Koha =head1 SYNOPSIS use C4::ClassSource; =head1 DESCRIPTION This module deals with manipulating classification sources and sorting rules. =head1 FUNCTIONS =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 - 90 | =head2 GetClassSources
my $sources = GetClassSources();
Returns reference to hash of references to
the class sources, keyed on cn_source.
=head3 Example
my $sources = GetClassSources();
my @sources = ();
foreach my $cn_source (sort keys %$sources) {
my $source = $sources->{$cn_source};
push @sources,
{
code => $source->{'cn_source'},
description => $source->{'description'},
used => $source->{'used'},
sortrule => $source->{'class_sort_rule'}
}
}
=cut | |||||
| 91 | ||||||
| 92 | sub GetClassSources { | |||||
| 93 | ||||||
| 94 | 0 | my %class_sources = (); | ||||
| 95 | 0 | my $dbh = C4::Context->dbh; | ||||
| 96 | 0 | my $sth = $dbh->prepare_cached("SELECT * FROM `class_sources`"); | ||||
| 97 | 0 | $sth->execute(); | ||||
| 98 | 0 | while (my $source = $sth->fetchrow_hashref) { | ||||
| 99 | 0 | $class_sources{ $source->{'cn_source'} } = $source; | ||||
| 100 | } | |||||
| 101 | 0 | $sth->finish(); | ||||
| 102 | ||||||
| 103 | 0 | return \%class_sources; | ||||
| 104 | ||||||
| 105 | } | |||||
| 106 | ||||||
| 107 - 113 | =head2 AddClassSource AddClassSource($cn_source, $description, $used, $class_sort_rule); Adds a class_sources row. =cut | |||||
| 114 | ||||||
| 115 | sub AddClassSource { | |||||
| 116 | ||||||
| 117 | 0 | my ($cn_source, $description, $used, $class_sort_rule) = @_; | ||||
| 118 | 0 | my $dbh = C4::Context->dbh; | ||||
| 119 | 0 | my $sth = $dbh->prepare_cached("INSERT INTO `class_sources` | ||||
| 120 | (`cn_source`, `description`, `used`, `class_sort_rule`) | |||||
| 121 | VALUES (?, ?, ?, ?)"); | |||||
| 122 | 0 | $sth->execute($cn_source, $description, $used, $class_sort_rule); | ||||
| 123 | 0 | $sth->finish(); | ||||
| 124 | ||||||
| 125 | } | |||||
| 126 | ||||||
| 127 - 133 | =head2 GetClassSource my $hashref = GetClassSource($cn_source); Retrieves a class_sources row by cn_source. =cut | |||||
| 134 | ||||||
| 135 | sub GetClassSource { | |||||
| 136 | ||||||
| 137 | 0 | my ($cn_source) = (@_); | ||||
| 138 | 0 | my $dbh = C4::Context->dbh; | ||||
| 139 | 0 | my $sth = $dbh->prepare_cached("SELECT * FROM `class_sources` WHERE cn_source = ?"); | ||||
| 140 | 0 | $sth->execute($cn_source); | ||||
| 141 | 0 | my $row = $sth->fetchrow_hashref(); | ||||
| 142 | 0 | $sth->finish(); | ||||
| 143 | 0 | return $row; | ||||
| 144 | } | |||||
| 145 | ||||||
| 146 - 152 | =head2 ModClassSource ModClassSource($cn_source, $description, $used, $class_sort_rule); Updates a class_sources row. =cut | |||||
| 153 | ||||||
| 154 | sub ModClassSource { | |||||
| 155 | ||||||
| 156 | 0 | my ($cn_source, $description, $used, $class_sort_rule) = @_; | ||||
| 157 | 0 | my $dbh = C4::Context->dbh; | ||||
| 158 | 0 | my $sth = $dbh->prepare_cached("UPDATE `class_sources` | ||||
| 159 | SET `description` = ?, | |||||
| 160 | `used` = ?, | |||||
| 161 | `class_sort_rule` = ? | |||||
| 162 | WHERE `cn_source` = ?"); | |||||
| 163 | 0 | $sth->execute($description, $used, $class_sort_rule, $cn_source); | ||||
| 164 | 0 | $sth->finish(); | ||||
| 165 | ||||||
| 166 | } | |||||
| 167 | ||||||
| 168 - 174 | =head2 DelClassSource DelClassSource($cn_source); Deletes class_sources row. =cut | |||||
| 175 | ||||||
| 176 | sub DelClassSource { | |||||
| 177 | ||||||
| 178 | 0 | my ($cn_source) = @_; | ||||
| 179 | 0 | my $dbh = C4::Context->dbh; | ||||
| 180 | 0 | my $sth = $dbh->prepare_cached("DELETE FROM `class_sources` WHERE `cn_source` = ?"); | ||||
| 181 | 0 | $sth->execute($cn_source); | ||||
| 182 | 0 | $sth->finish(); | ||||
| 183 | ||||||
| 184 | } | |||||
| 185 | ||||||
| 186 - 207 | =head2 GetClassSortRules
my $sort_rules = GetClassSortRules();
Returns reference to hash of references to
the class sorting rules, keyed on class_sort_rule
=head3 Example
my $sort_rules = GetClassSortRules();
my @sort_rules = ();
foreach my $sort_rule (sort keys %$sort_rules) {
my $sort_rule = $sort_rules->{$sort_rule};
push @sort_rules,
{
rule => $sort_rule->{'class_sort_rule'},
description => $sort_rule->{'description'},
sort_routine => $sort_rule->{'sort_routine'}
}
}
=cut | |||||
| 208 | ||||||
| 209 | sub GetClassSortRules { | |||||
| 210 | ||||||
| 211 | 0 | my %class_sort_rules = (); | ||||
| 212 | 0 | my $dbh = C4::Context->dbh; | ||||
| 213 | 0 | my $sth = $dbh->prepare_cached("SELECT * FROM `class_sort_rules`"); | ||||
| 214 | 0 | $sth->execute(); | ||||
| 215 | 0 | while (my $sort_rule = $sth->fetchrow_hashref) { | ||||
| 216 | 0 | $class_sort_rules{ $sort_rule->{'class_sort_rule'} } = $sort_rule; | ||||
| 217 | } | |||||
| 218 | 0 | $sth->finish(); | ||||
| 219 | ||||||
| 220 | 0 | return \%class_sort_rules; | ||||
| 221 | ||||||
| 222 | } | |||||
| 223 | ||||||
| 224 - 230 | =head2 AddClassSortRule AddClassSortRule($class_sort_rule, $description, $sort_routine); Adds a class_sort_rules row. =cut | |||||
| 231 | ||||||
| 232 | sub AddClassSortRule { | |||||
| 233 | ||||||
| 234 | 0 | my ($class_sort_rule, $description, $sort_routine) = @_; | ||||
| 235 | 0 | my $dbh = C4::Context->dbh; | ||||
| 236 | 0 | my $sth = $dbh->prepare_cached("INSERT INTO `class_sort_rules` | ||||
| 237 | (`class_sort_rule`, `description`, `sort_routine`) | |||||
| 238 | VALUES (?, ?, ?)"); | |||||
| 239 | 0 | $sth->execute($class_sort_rule, $description, $sort_routine); | ||||
| 240 | 0 | $sth->finish(); | ||||
| 241 | ||||||
| 242 | } | |||||
| 243 | ||||||
| 244 - 250 | =head2 GetClassSortRule my $hashref = GetClassSortRule($class_sort_rule); Retrieves a class_sort_rules row by class_sort_rule. =cut | |||||
| 251 | ||||||
| 252 | sub GetClassSortRule { | |||||
| 253 | ||||||
| 254 | 0 | my ($class_sort_rule) = (@_); | ||||
| 255 | 0 | my $dbh = C4::Context->dbh; | ||||
| 256 | 0 | my $sth = $dbh->prepare_cached("SELECT * FROM `class_sort_rules` WHERE `class_sort_rule` = ?"); | ||||
| 257 | 0 | $sth->execute($class_sort_rule); | ||||
| 258 | 0 | my $row = $sth->fetchrow_hashref(); | ||||
| 259 | 0 | $sth->finish(); | ||||
| 260 | 0 | return $row; | ||||
| 261 | } | |||||
| 262 | ||||||
| 263 - 269 | =head2 ModClassSortRule ModClassSortRule($class_sort_rule, $description, $sort_routine); Updates a class_sort_rules row. =cut | |||||
| 270 | ||||||
| 271 | sub ModClassSortRule { | |||||
| 272 | ||||||
| 273 | 0 | my ($class_sort_rule, $description, $sort_routine) = @_; | ||||
| 274 | 0 | my $dbh = C4::Context->dbh; | ||||
| 275 | 0 | my $sth = $dbh->prepare_cached("UPDATE `class_sort_rules` | ||||
| 276 | SET `description` = ?, | |||||
| 277 | `sort_routine` = ? | |||||
| 278 | WHERE `class_sort_rule` = ?"); | |||||
| 279 | 0 | $sth->execute($description, $sort_routine, $class_sort_rule); | ||||
| 280 | 0 | $sth->finish(); | ||||
| 281 | ||||||
| 282 | } | |||||
| 283 | ||||||
| 284 - 290 | =head2 DelClassSortRule DelClassSortRule($class_sort_rule); Deletes class_sort_rules row. =cut | |||||
| 291 | ||||||
| 292 | sub DelClassSortRule { | |||||
| 293 | ||||||
| 294 | 0 | my ($class_sort_rule) = @_; | ||||
| 295 | 0 | my $dbh = C4::Context->dbh; | ||||
| 296 | 0 | my $sth = $dbh->prepare_cached("DELETE FROM `class_sort_rules` WHERE `class_sort_rule` = ?"); | ||||
| 297 | 0 | $sth->execute($class_sort_rule); | ||||
| 298 | 0 | $sth->finish(); | ||||
| 299 | ||||||
| 300 | } | |||||
| 301 | ||||||
| 302 - 309 | =head2 GetSourcesForSortRule my @source = GetSourcesForSortRule($class_sort_rule); Retrieves an array class_source.cn_rule for each source that uses the supplied $class_sort_rule. =cut | |||||
| 310 | ||||||
| 311 | sub GetSourcesForSortRule { | |||||
| 312 | ||||||
| 313 | 0 | my ($class_sort_rule) = @_; | ||||
| 314 | ||||||
| 315 | 0 | my $dbh = C4::Context->dbh; | ||||
| 316 | 0 | my $sth = $dbh->prepare_cached("SELECT cn_source FROM class_sources WHERE class_sort_rule = ?"); | ||||
| 317 | 0 | $sth->execute($class_sort_rule); | ||||
| 318 | 0 | my @sources = (); | ||||
| 319 | 0 | while (my ($source) = $sth->fetchrow_array()) { | ||||
| 320 | 0 | push @sources, $source; | ||||
| 321 | } | |||||
| 322 | 0 | $sth->finish(); | ||||
| 323 | 0 | return @sources; | ||||
| 324 | ||||||
| 325 | } | |||||
| 326 | ||||||
| 327 - 334 | =head2 GetClassSort my $cn_sort = GetClassSort($cn_source, $cn_class, $cn_item); Get the sort key corresponding to the classification part and item part and the defined call number source. =cut | |||||
| 335 | ||||||
| 336 | sub GetClassSort { | |||||
| 337 | ||||||
| 338 | 0 | my ($cn_source, $cn_class, $cn_item) = @_; | ||||
| 339 | ||||||
| 340 | 0 | my $source_ref = GetClassSource($cn_source); | ||||
| 341 | 0 | unless (defined $source_ref) { | ||||
| 342 | 0 | $source_ref = GetClassSource(C4::Context->preference("DefaultClassificationSource")); | ||||
| 343 | } | |||||
| 344 | 0 | my $routine = ""; | ||||
| 345 | 0 | if (defined $source_ref) { | ||||
| 346 | 0 | my $rule_ref = GetClassSortRule($source_ref->{'class_sort_rule'}); | ||||
| 347 | 0 | if (defined $rule_ref) { | ||||
| 348 | 0 | $routine = $rule_ref->{'sort_routine'}; | ||||
| 349 | } | |||||
| 350 | } | |||||
| 351 | ||||||
| 352 | 0 | return GetClassSortKey($routine, $cn_class, $cn_item); | ||||
| 353 | ||||||
| 354 | } | |||||
| 355 | ||||||
| 356 | 1; | |||||
| 357 | ||||||
| 358 - 362 | =head1 AUTHOR Koha Development Team <http://koha-community.org/> =cut | |||||