[Koha-patches] [PATCH] Bug 2505: adding warnings to C4/Biblio.pm
Galen Charlton
galen.charlton at liblime.com
Mon Jan 5 23:16:14 CET 2009
From: Andrew Moore <andrew.moore at liblime.com>
I added 'use warnings' to C4::Biblio and made a handful of changes to
reduce the number of warnings emitted.
One notable spot is the change in the regex in
C4::Biblio::GetNoZebraIndexes. I have replaced the parens with a character
class. The parens change the way 'split' works, making it return elements
for each delimiter. We did not want those elements returned, and they
only resulted in "'' => undef" being added to the final hash. They also
resulted in two "undefined" warnings for each pass through the loop. I've
included a simple test for this function.
There may be a few warnings still emitted in spots, but either I haven't
seen them yet, or I have chosen to not fix them yet because they require
too much change.
Signed-off-by: Galen Charlton <galen.charlton at liblime.com>
---
C4/Biblio.pm | 25 ++++------
t/lib/KohaTest/Biblio/GetNoZebraIndexes.pm | 72 ++++++++++++++++++++++++++++
2 files changed, 81 insertions(+), 16 deletions(-)
create mode 100644 t/lib/KohaTest/Biblio/GetNoZebraIndexes.pm
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index 26a79d4..b6bce41 100755
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -18,15 +18,14 @@ package C4::Biblio;
# Suite 330, Boston, MA 02111-1307 USA
use strict;
+use warnings;
# use utf8;
use MARC::Record;
use MARC::File::USMARC;
use MARC::File::XML;
use ZOOM;
-use C4::Context;
use C4::Koha;
-use C4::Branch;
use C4::Dates qw/format_date/;
use C4::Log; # logaction
use C4::ClassSource;
@@ -107,12 +106,6 @@ BEGIN {
);
}
-# because of interdependencies between
-# C4::Search, C4::Heading, and C4::Biblio,
-# 'use C4::Heading' must occur after
-# the exports have been defined.
-use C4::Heading;
-
=head1 NAME
C4::Biblio - cataloging management functions
@@ -1631,7 +1624,7 @@ sub TransformMarcToKoha {
}
my %tables = ();
- if ($limit_table eq 'items') {
+ if ( defined $limit_table && $limit_table eq 'items') {
$tables{'items'} = 1;
} else {
$tables{'items'} = 1;
@@ -2179,9 +2172,9 @@ sub ModZebra {
=cut
sub GetNoZebraIndexes {
- my $index = C4::Context->preference('NoZebraIndexes');
+ my $no_zebra_indexes = C4::Context->preference('NoZebraIndexes');
my %indexes;
- foreach my $line (split /('|"),[\n\r]*/,$index) {
+ INDEX: foreach my $line (split /['"],[\n\r]*/,$no_zebra_indexes) {
$line =~ /(.*)=>(.*)/;
my $index = $1; # initial ' or " is removed afterwards
my $fields = $2;
@@ -2258,7 +2251,7 @@ sub _DelBiblioNoZebra {
foreach (split / /,$line) {
next unless $_; # skip empty values (multiple spaces)
# if the entry is already here, do nothing, the biblionumber has already be removed
- unless ($result{$key}->{$_} =~ /$biblionumber,$title\-(\d);/) {
+ unless ( defined( $result{$key}->{$_} ) && ( $result{$key}->{$_} =~ /$biblionumber,$title\-(\d);/) ) {
# get the index value if it exist in the nozebra table and remove the entry, otherwise, do nothing
$sth2->execute($server,$key,$_);
my $existing_biblionumbers = $sth2->fetchrow;
@@ -2355,8 +2348,8 @@ sub _AddBiblioNoZebra {
next unless $_; # skip empty values (multiple spaces)
# if the entry is already here, improve weight
# warn "managing $_";
- if ($result{$key}->{"$_"} =~ /$biblionumber,\Q$title\E\-(\d+);/) {
- my $weight=$1 + 1;
+ if ( exists $result{$key}->{$_} && $result{$key}->{"$_"} =~ /$biblionumber,\Q$title\E\-(\d+);/) {
+ my $weight = $1 + 1;
$result{$key}->{"$_"} =~ s/$biblionumber,\Q$title\E\-(\d+);//g;
$result{$key}->{"$_"} .= "$biblionumber,$title-$weight;";
} else {
@@ -2366,7 +2359,7 @@ sub _AddBiblioNoZebra {
# it exists
if ($existing_biblionumbers) {
$result{$key}->{"$_"} =$existing_biblionumbers;
- my $weight=$1 + 1;
+ my $weight = defined $1 ? $1 + 1 : 1;
$result{$key}->{"$_"} =~ s/$biblionumber,\Q$title\E\-(\d+);//g;
$result{$key}->{"$_"} .= "$biblionumber,$title-$weight;";
# create a new ligne for this entry
@@ -3176,7 +3169,7 @@ sub get_biblio_authorised_values {
foreach my $subfield ( keys( %{$tagslib->{ $tag }} ) ) {
# warn "checking $subfield. type is: " . ref $tagslib->{ $tag }{ $subfield };
if ( 'HASH' eq ref $tagslib->{ $tag }{ $subfield } ) {
- if ( exists $tagslib->{ $tag }{ $subfield }{'authorised_value'} && exists $bibliolevel_authorised_values->{ $tagslib->{ $tag }{ $subfield }{'authorised_value'} } ) {
+ if ( defined $tagslib->{ $tag }{ $subfield }{'authorised_value'} && exists $bibliolevel_authorised_values->{ $tagslib->{ $tag }{ $subfield }{'authorised_value'} } ) {
if ( defined $record->field( $tag ) ) {
my $this_subfield_value = $record->field( $tag )->subfield( $subfield );
if ( defined $this_subfield_value ) {
diff --git a/t/lib/KohaTest/Biblio/GetNoZebraIndexes.pm b/t/lib/KohaTest/Biblio/GetNoZebraIndexes.pm
new file mode 100644
index 0000000..11dffbe
--- /dev/null
+++ b/t/lib/KohaTest/Biblio/GetNoZebraIndexes.pm
@@ -0,0 +1,72 @@
+package KohaTest::Biblio::GetNoZebraIndexes;
+use base qw( KohaTest::Biblio );
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use C4::Biblio;
+
+=head2 STARTUP METHODS
+
+These get run once, before the main test methods in this module
+
+=cut
+
+
+=head2 TEST METHODS
+
+standard test methods
+
+=head3
+
+=cut
+
+sub returns_expected_hashref : Test(2) {
+ my $self = shift;
+
+ my %nzi = C4::Biblio::GetNoZebraIndexes();
+ ok( scalar keys %nzi, 'got some keys from GetNoZebraIndexes' );
+
+ my %expected = (
+ 'title' => '130a,210a,222a,240a,243a,245a,245b,246a,246b,247a,247b,250a,250b,440a,830a',
+ 'author' => '100a,100b,100c,100d,110a,111a,111b,111c,111d,245c,700a,710a,711a,800a,810a,811a',
+ 'isbn' => '020a',
+ 'issn' => '022a',
+ 'lccn' => '010a',
+ 'biblionumber' => '999c',
+ 'itemtype' => '942c',
+ 'publisher' => '260b',
+ 'date' => '260c',
+ 'note' => '500a,501a,504a,505a,508a,511a,518a,520a,521a,522a,524a,526a,530a,533a,538a,541a,546a,555a,556a,562a,563a,583a,585a,582a',
+ 'subject' => '600*,610*,611*,630*,650*,651*,653*,654*,655*,662*,690*',
+ 'dewey' => '082',
+ 'bc' => '952p',
+ 'callnum' => '952o',
+ 'an' => '6009,6109,6119',
+ 'homebranch' => '952a,952c'
+ );
+ is_deeply( \%nzi, \%expected, 'GetNoZebraIndexes returns the expected hashref' );
+}
+
+=head2 HELPER METHODS
+
+These methods are used by other test methods, but
+are not meant to be called directly.
+
+=cut
+
+=cut
+
+
+=head2 SHUTDOWN METHODS
+
+These get run once, after the main test methods in this module
+
+=head3
+
+=cut
+
+
+1;
--
1.5.5.GIT
More information about the Koha-patches
mailing list