Koha/C4/ClassSource.pm
root 5cba6457aa Bug 10643: fix inappropriate uses of $sth->finish() in C4::ClassSource.pm
This patch gets rid of finish() and replace prepare_cached by prepare.

From the man page

finish()
Indicate that no more data will be fetched from this statement handle
before it is either executed again or destroyed.
You almost certainly do not need to call this method.

Adding calls to "finish" after loop that fetches all rows is a common
mistake, don't do it, it can mask genuine problems like uncaught fetch errors.

Signed-off-by: Srdjan <srdjan@catalyst.net.nz>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
2013-08-09 15:32:22 +00:00

351 lines
8.1 KiB
Perl

package C4::ClassSource;
# Copyright (C) 2007 LibLime
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with Koha; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use strict;
use warnings;
require Exporter;
use C4::Context;
use C4::ClassSortRoutine;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
# set the version for version checking
$VERSION = 3.07.00.049;
=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
@ISA = qw(Exporter);
@EXPORT = qw(
&GetClassSources
&AddClassSource
&GetClassSource
&ModClassSource
&DelClassSource
&GetClassSortRules
&AddClassSortRule
&GetClassSortRule
&ModClassSortRule
&DelClassSortRule
&GetSourcesForSortRule
&GetClassSort
);
=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
sub GetClassSources {
my %class_sources = ();
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("SELECT * FROM `class_sources`");
$sth->execute();
while (my $source = $sth->fetchrow_hashref) {
$class_sources{ $source->{'cn_source'} } = $source;
}
return \%class_sources;
}
=head2 AddClassSource
AddClassSource($cn_source, $description, $used, $class_sort_rule);
Adds a class_sources row.
=cut
sub AddClassSource {
my ($cn_source, $description, $used, $class_sort_rule) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("INSERT INTO `class_sources`
(`cn_source`, `description`, `used`, `class_sort_rule`)
VALUES (?, ?, ?, ?)");
$sth->execute($cn_source, $description, $used, $class_sort_rule);
}
=head2 GetClassSource
my $hashref = GetClassSource($cn_source);
Retrieves a class_sources row by cn_source.
=cut
sub GetClassSource {
my ($cn_source) = (@_);
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("SELECT * FROM `class_sources` WHERE cn_source = ?");
$sth->execute($cn_source);
my $row = $sth->fetchrow_hashref();
return $row;
}
=head2 ModClassSource
ModClassSource($cn_source, $description, $used, $class_sort_rule);
Updates a class_sources row.
=cut
sub ModClassSource {
my ($cn_source, $description, $used, $class_sort_rule) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("UPDATE `class_sources`
SET `description` = ?,
`used` = ?,
`class_sort_rule` = ?
WHERE `cn_source` = ?");
$sth->execute($description, $used, $class_sort_rule, $cn_source);
}
=head2 DelClassSource
DelClassSource($cn_source);
Deletes class_sources row.
=cut
sub DelClassSource {
my ($cn_source) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("DELETE FROM `class_sources` WHERE `cn_source` = ?");
$sth->execute($cn_source);
}
=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
sub GetClassSortRules {
my %class_sort_rules = ();
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("SELECT * FROM `class_sort_rules`");
$sth->execute();
while (my $sort_rule = $sth->fetchrow_hashref) {
$class_sort_rules{ $sort_rule->{'class_sort_rule'} } = $sort_rule;
}
return \%class_sort_rules;
}
=head2 AddClassSortRule
AddClassSortRule($class_sort_rule, $description, $sort_routine);
Adds a class_sort_rules row.
=cut
sub AddClassSortRule {
my ($class_sort_rule, $description, $sort_routine) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("INSERT INTO `class_sort_rules`
(`class_sort_rule`, `description`, `sort_routine`)
VALUES (?, ?, ?)");
$sth->execute($class_sort_rule, $description, $sort_routine);
}
=head2 GetClassSortRule
my $hashref = GetClassSortRule($class_sort_rule);
Retrieves a class_sort_rules row by class_sort_rule.
=cut
sub GetClassSortRule {
my ($class_sort_rule) = (@_);
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("SELECT * FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
$sth->execute($class_sort_rule);
my $row = $sth->fetchrow_hashref();
return $row;
}
=head2 ModClassSortRule
ModClassSortRule($class_sort_rule, $description, $sort_routine);
Updates a class_sort_rules row.
=cut
sub ModClassSortRule {
my ($class_sort_rule, $description, $sort_routine) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("UPDATE `class_sort_rules`
SET `description` = ?,
`sort_routine` = ?
WHERE `class_sort_rule` = ?");
$sth->execute($description, $sort_routine, $class_sort_rule);
}
=head2 DelClassSortRule
DelClassSortRule($class_sort_rule);
Deletes class_sort_rules row.
=cut
sub DelClassSortRule {
my ($class_sort_rule) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("DELETE FROM `class_sort_rules` WHERE `class_sort_rule` = ?");
$sth->execute($class_sort_rule);
}
=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
sub GetSourcesForSortRule {
my ($class_sort_rule) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("SELECT cn_source FROM class_sources WHERE class_sort_rule = ?");
$sth->execute($class_sort_rule);
my @sources = ();
while (my ($source) = $sth->fetchrow_array()) {
push @sources, $source;
}
return @sources;
}
=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
sub GetClassSort {
my ($cn_source, $cn_class, $cn_item) = @_;
my $source_ref = GetClassSource($cn_source);
unless (defined $source_ref) {
$source_ref = GetClassSource(C4::Context->preference("DefaultClassificationSource"));
}
my $routine = "";
if (defined $source_ref) {
my $rule_ref = GetClassSortRule($source_ref->{'class_sort_rule'});
if (defined $rule_ref) {
$routine = $rule_ref->{'sort_routine'};
}
}
return GetClassSortKey($routine, $cn_class, $cn_item);
}
1;
=head1 AUTHOR
Koha Development Team <http://koha-community.org/>
=cut