| Filename | /mnt/catalyst/koha/C4/ClassSource.pm |
| Statements | Executed 15 statements in 3.06ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 10.9ms | 50.0ms | C4::ClassSource::BEGIN@25 |
| 1 | 1 | 1 | 421µs | 435µs | C4::ClassSource::BEGIN@20 |
| 1 | 1 | 1 | 10µs | 12µs | C4::ClassSource::BEGIN@24 |
| 1 | 1 | 1 | 7µs | 55µs | C4::ClassSource::BEGIN@27 |
| 1 | 1 | 1 | 7µs | 13µs | C4::ClassSource::BEGIN@21 |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::AddClassSortRule |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::AddClassSource |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::DelClassSortRule |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::DelClassSource |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::GetClassSort |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::GetClassSortRule |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::GetClassSortRules |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::GetClassSource |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::GetClassSources |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::GetSourcesForSortRule |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::ModClassSortRule |
| 0 | 0 | 0 | 0s | 0s | C4::ClassSource::ModClassSource |
| Line | State ments |
Time on line |
Calls | Time in subs |
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 | 2 | 28µs | 2 | 448µs | # spent 435µs (421+14) within C4::ClassSource::BEGIN@20 which was called:
# once (421µs+14µs) by C4::Biblio::BEGIN@36 at line 20 # spent 435µs making 1 call to C4::ClassSource::BEGIN@20
# spent 14µs making 1 call to strict::import |
| 21 | 2 | 24µs | 2 | 19µs | # spent 13µs (7+6) within C4::ClassSource::BEGIN@21 which was called:
# once (7µs+6µs) by C4::Biblio::BEGIN@36 at line 21 # spent 13µs making 1 call to C4::ClassSource::BEGIN@21
# spent 6µs making 1 call to warnings::import |
| 22 | |||||
| 23 | 1 | 1µs | require Exporter; | ||
| 24 | 2 | 22µs | 2 | 14µs | # spent 12µs (10+2) within C4::ClassSource::BEGIN@24 which was called:
# once (10µs+2µs) by C4::Biblio::BEGIN@36 at line 24 # spent 12µs making 1 call to C4::ClassSource::BEGIN@24
# spent 2µs making 1 call to C4::Context::import |
| 25 | 2 | 2.13ms | 2 | 50.1ms | # spent 50.0ms (10.9+39.1) within C4::ClassSource::BEGIN@25 which was called:
# once (10.9ms+39.1ms) by C4::Biblio::BEGIN@36 at line 25 # spent 50.0ms making 1 call to C4::ClassSource::BEGIN@25
# spent 89µs making 1 call to Exporter::import |
| 26 | |||||
| 27 | 2 | 841µs | 2 | 102µs | # spent 55µs (7+48) within C4::ClassSource::BEGIN@27 which was called:
# once (7µs+48µs) by C4::Biblio::BEGIN@36 at line 27 # spent 55µs making 1 call to C4::ClassSource::BEGIN@27
# spent 48µs making 1 call to vars::import |
| 28 | |||||
| 29 | # set the version for version checking | ||||
| 30 | 1 | 3µs | $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 | 1 | 7µs | @ISA = qw(Exporter); | ||
| 51 | 1 | 1µs | @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 | 4µs | 1; | ||
| 346 | |||||
| 347 | =head1 AUTHOR | ||||
| 348 | |||||
| 349 | Koha Development Team <http://koha-community.org/> | ||||
| 350 | |||||
| 351 | =cut |