View | Details | Raw Unified | Return to bug 11032
Collapse All | Expand All

(-)a/C4/Biblio.pm (-5 / +105 lines)
Lines 252-257 sub AddBiblio { Link Here
252
    my $frameworkcode   = shift;
252
    my $frameworkcode   = shift;
253
    my $options         = @_ ? shift : undef;
253
    my $options         = @_ ? shift : undef;
254
    my $defer_marc_save = 0;
254
    my $defer_marc_save = 0;
255
    if (!$record) {
256
        carp('AddBiblio called with undefined record');
257
        return;
258
    }
255
    if ( defined $options and exists $options->{'defer_marc_save'} and $options->{'defer_marc_save'} ) {
259
    if ( defined $options and exists $options->{'defer_marc_save'} and $options->{'defer_marc_save'} ) {
256
        $defer_marc_save = 1;
260
        $defer_marc_save = 1;
257
    }
261
    }
Lines 301-311 in the C<biblio> and C<biblioitems> tables, as well as Link Here
301
which fields are used to store embedded item, biblioitem,
305
which fields are used to store embedded item, biblioitem,
302
and biblionumber data for indexing.
306
and biblionumber data for indexing.
303
307
308
Returns 1 on success 0 on failure
309
304
=cut
310
=cut
305
311
306
sub ModBiblio {
312
sub ModBiblio {
307
    my ( $record, $biblionumber, $frameworkcode ) = @_;
313
    my ( $record, $biblionumber, $frameworkcode ) = @_;
308
    croak "No record" unless $record;
314
    if (!$record) {
315
        carp 'No record passed to ModBiblio';
316
        return 0;
317
    }
309
318
310
    if ( C4::Context->preference("CataloguingLog") ) {
319
    if ( C4::Context->preference("CataloguingLog") ) {
311
        my $newrecord = GetMarcBiblio($biblionumber);
320
        my $newrecord = GetMarcBiblio($biblionumber);
Lines 475-485 sub DelBiblio { Link Here
475
484
476
Automatically links headings in a bib record to authorities.
485
Automatically links headings in a bib record to authorities.
477
486
487
Returns the number of headings changed
488
478
=cut
489
=cut
479
490
480
sub BiblioAutoLink {
491
sub BiblioAutoLink {
481
    my $record        = shift;
492
    my $record        = shift;
482
    my $frameworkcode = shift;
493
    my $frameworkcode = shift;
494
    if (!$record) {
495
        carp('Undefined record passed to BiblioAutoLink');
496
        return 0;
497
    }
483
    my ( $num_headings_changed, %results );
498
    my ( $num_headings_changed, %results );
484
499
485
    my $linker_module =
500
    my $linker_module =
Lines 487-493 sub BiblioAutoLink { Link Here
487
    unless ( can_load( modules => { $linker_module => undef } ) ) {
502
    unless ( can_load( modules => { $linker_module => undef } ) ) {
488
        $linker_module = 'C4::Linker::Default';
503
        $linker_module = 'C4::Linker::Default';
489
        unless ( can_load( modules => { $linker_module => undef } ) ) {
504
        unless ( can_load( modules => { $linker_module => undef } ) ) {
490
            return 0, 0;
505
            return 0;
491
        }
506
        }
492
    }
507
    }
493
508
Lines 524-529 sub LinkBibHeadingsToAuthorities { Link Here
524
    my $frameworkcode = shift;
539
    my $frameworkcode = shift;
525
    my $allowrelink = shift;
540
    my $allowrelink = shift;
526
    my %results;
541
    my %results;
542
    if (!$bib) {
543
        carp 'LinkBibHeadingsToAuthorities called on undefined bib record';
544
        return ( 0, {});
545
    }
527
    require C4::Heading;
546
    require C4::Heading;
528
    require C4::AuthoritiesMarc;
547
    require C4::AuthoritiesMarc;
529
548
Lines 673-678 Get MARC fields from a keyword defined in fieldmapping table. Link Here
673
692
674
sub GetRecordValue {
693
sub GetRecordValue {
675
    my ( $field, $record, $frameworkcode ) = @_;
694
    my ( $field, $record, $frameworkcode ) = @_;
695
696
    if (!$record) {
697
        carp 'GetRecordValue called with undefined record';
698
        return;
699
    }
676
    my $dbh = C4::Context->dbh;
700
    my $dbh = C4::Context->dbh;
677
701
678
    my $sth = $dbh->prepare('SELECT fieldcode, subfieldcode FROM fieldmapping WHERE frameworkcode = ? AND field = ?');
702
    my $sth = $dbh->prepare('SELECT fieldcode, subfieldcode FROM fieldmapping WHERE frameworkcode = ? AND field = ?');
Lines 1304-1310 sub GetCOinSBiblio { Link Here
1304
1328
1305
    # get the coin format
1329
    # get the coin format
1306
    if ( ! $record ) {
1330
    if ( ! $record ) {
1307
	return;
1331
        carp 'GetCOinSBiblio called with undefined record';
1332
        return;
1308
    }
1333
    }
1309
    my $pos7 = substr $record->leader(), 7, 1;
1334
    my $pos7 = substr $record->leader(), 7, 1;
1310
    my $pos6 = substr $record->leader(), 6, 1;
1335
    my $pos6 = substr $record->leader(), 6, 1;
Lines 1445-1454 sub GetCOinSBiblio { Link Here
1445
=head2 GetMarcPrice
1470
=head2 GetMarcPrice
1446
1471
1447
return the prices in accordance with the Marc format.
1472
return the prices in accordance with the Marc format.
1473
1474
returns 0 if no price found
1475
returns undef if called without a marc record or with
1476
an unrecognized marc format
1477
1448
=cut
1478
=cut
1449
1479
1450
sub GetMarcPrice {
1480
sub GetMarcPrice {
1451
    my ( $record, $marcflavour ) = @_;
1481
    my ( $record, $marcflavour ) = @_;
1482
    if (!$record) {
1483
        carp 'GetMarcPrice called on undefined record';
1484
        return;
1485
    }
1486
1452
    my @listtags;
1487
    my @listtags;
1453
    my $subfield;
1488
    my $subfield;
1454
    
1489
    
Lines 1520-1529 sub MungeMarcPrice { Link Here
1520
return the quantity of a book. Used in acquisition only, when importing a file an iso2709 from a bookseller
1555
return the quantity of a book. Used in acquisition only, when importing a file an iso2709 from a bookseller
1521
Warning : this is not really in the marc standard. In Unimarc, Electre (the most widely used bookseller) use the 969$a
1556
Warning : this is not really in the marc standard. In Unimarc, Electre (the most widely used bookseller) use the 969$a
1522
1557
1558
returns 0 if no quantity found
1559
returns undef if called without a marc record or with
1560
an unrecognized marc format
1561
1523
=cut
1562
=cut
1524
1563
1525
sub GetMarcQuantity {
1564
sub GetMarcQuantity {
1526
    my ( $record, $marcflavour ) = @_;
1565
    my ( $record, $marcflavour ) = @_;
1566
    if (!$record) {
1567
        carp 'GetMarcQuantity called on undefined record';
1568
        return;
1569
    }
1570
1527
    my @listtags;
1571
    my @listtags;
1528
    my $subfield;
1572
    my $subfield;
1529
    
1573
    
Lines 1610-1615 Get the control number / record Identifier from the MARC record and return it. Link Here
1610
1654
1611
sub GetMarcControlnumber {
1655
sub GetMarcControlnumber {
1612
    my ( $record, $marcflavour ) = @_;
1656
    my ( $record, $marcflavour ) = @_;
1657
    if (!$record) {
1658
        carp 'GetMarcControlnumber called on undefined record';
1659
        return;
1660
    }
1613
    my $controlnumber = "";
1661
    my $controlnumber = "";
1614
    # Control number or Record identifier are the same field in MARC21, UNIMARC and NORMARC
1662
    # Control number or Record identifier are the same field in MARC21, UNIMARC and NORMARC
1615
    # Keep $marcflavour for possible later use
1663
    # Keep $marcflavour for possible later use
Lines 1633-1638 ISBNs stored in different fields depending on MARC flavour Link Here
1633
1681
1634
sub GetMarcISBN {
1682
sub GetMarcISBN {
1635
    my ( $record, $marcflavour ) = @_;
1683
    my ( $record, $marcflavour ) = @_;
1684
    if (!$record) {
1685
        carp 'GetMarcISBN called on undefined record';
1686
        return;
1687
    }
1636
    my $scope;
1688
    my $scope;
1637
    if ( $marcflavour eq "UNIMARC" ) {
1689
    if ( $marcflavour eq "UNIMARC" ) {
1638
        $scope = '010';
1690
        $scope = '010';
Lines 1674-1679 ISSNs are stored in different fields depending on MARC flavour Link Here
1674
1726
1675
sub GetMarcISSN {
1727
sub GetMarcISSN {
1676
    my ( $record, $marcflavour ) = @_;
1728
    my ( $record, $marcflavour ) = @_;
1729
    if (!$record) {
1730
        carp 'GetMarcISSN called on undefined record';
1731
        return;
1732
    }
1677
    my $scope;
1733
    my $scope;
1678
    if ( $marcflavour eq "UNIMARC" ) {
1734
    if ( $marcflavour eq "UNIMARC" ) {
1679
        $scope = '011';
1735
        $scope = '011';
Lines 1699-1704 The note are stored in different fields depending on MARC flavour Link Here
1699
1755
1700
sub GetMarcNotes {
1756
sub GetMarcNotes {
1701
    my ( $record, $marcflavour ) = @_;
1757
    my ( $record, $marcflavour ) = @_;
1758
    if (!$record) {
1759
        carp 'GetMarcNotes called on undefined record';
1760
        return;
1761
    }
1702
    my $scope;
1762
    my $scope;
1703
    if ( $marcflavour eq "UNIMARC" ) {
1763
    if ( $marcflavour eq "UNIMARC" ) {
1704
        $scope = '3..';
1764
        $scope = '3..';
Lines 1743-1748 The subjects are stored in different fields depending on MARC flavour Link Here
1743
1803
1744
sub GetMarcSubjects {
1804
sub GetMarcSubjects {
1745
    my ( $record, $marcflavour ) = @_;
1805
    my ( $record, $marcflavour ) = @_;
1806
    if (!$record) {
1807
        carp 'GetMarcSubjects called on undefined record';
1808
        return;
1809
    }
1746
    my ( $mintag, $maxtag, $fields_filter );
1810
    my ( $mintag, $maxtag, $fields_filter );
1747
    if ( $marcflavour eq "UNIMARC" ) {
1811
    if ( $marcflavour eq "UNIMARC" ) {
1748
        $mintag = "600";
1812
        $mintag = "600";
Lines 1828-1833 The authors are stored in different fields depending on MARC flavour Link Here
1828
1892
1829
sub GetMarcAuthors {
1893
sub GetMarcAuthors {
1830
    my ( $record, $marcflavour ) = @_;
1894
    my ( $record, $marcflavour ) = @_;
1895
    if (!$record) {
1896
        carp 'GetMarcAuthors called on undefined record';
1897
        return;
1898
    }
1831
    my ( $mintag, $maxtag, $fields_filter );
1899
    my ( $mintag, $maxtag, $fields_filter );
1832
1900
1833
    # tagslib useful for UNIMARC author reponsabilities
1901
    # tagslib useful for UNIMARC author reponsabilities
Lines 1916-1921 Assumes web resources (not uncommon in MARC21 to omit resource type ind) Link Here
1916
1984
1917
sub GetMarcUrls {
1985
sub GetMarcUrls {
1918
    my ( $record, $marcflavour ) = @_;
1986
    my ( $record, $marcflavour ) = @_;
1987
    if (!$record) {
1988
        carp 'GetMarcUrls called on undefined record';
1989
        return;
1990
    }
1919
1991
1920
    my @marcurls;
1992
    my @marcurls;
1921
    for my $field ( $record->field('856') ) {
1993
    for my $field ( $record->field('856') ) {
Lines 1971-1976 The series are stored in different fields depending on MARC flavour Link Here
1971
2043
1972
sub GetMarcSeries {
2044
sub GetMarcSeries {
1973
    my ( $record, $marcflavour ) = @_;
2045
    my ( $record, $marcflavour ) = @_;
2046
    if (!$record) {
2047
        carp 'GetMarcSeries called on undefined record';
2048
        return;
2049
    }
2050
1974
    my ( $mintag, $maxtag, $fields_filter );
2051
    my ( $mintag, $maxtag, $fields_filter );
1975
    if ( $marcflavour eq "UNIMARC" ) {
2052
    if ( $marcflavour eq "UNIMARC" ) {
1976
        $mintag = "225";
2053
        $mintag = "225";
Lines 2040-2045 Get all host records (773s MARC21, 461 UNIMARC) from the MARC record and returns Link Here
2040
2117
2041
sub GetMarcHosts {
2118
sub GetMarcHosts {
2042
    my ( $record, $marcflavour ) = @_;
2119
    my ( $record, $marcflavour ) = @_;
2120
    if (!$record) {
2121
        carp 'GetMarcHosts called on undefined record';
2122
        return;
2123
    }
2124
2043
    my ( $tag,$title_subf,$bibnumber_subf,$itemnumber_subf);
2125
    my ( $tag,$title_subf,$bibnumber_subf,$itemnumber_subf);
2044
    $marcflavour ||="MARC21";
2126
    $marcflavour ||="MARC21";
2045
    if ( $marcflavour eq "MARC21" || $marcflavour eq "NORMARC" ) {
2127
    if ( $marcflavour eq "MARC21" || $marcflavour eq "NORMARC" ) {
Lines 2483-2494 our $inverted_field_map; Link Here
2483
Extract data from a MARC bib record into a hashref representing
2565
Extract data from a MARC bib record into a hashref representing
2484
Koha biblio, biblioitems, and items fields. 
2566
Koha biblio, biblioitems, and items fields. 
2485
2567
2568
If passed an undefined record will log the error and return an empty
2569
hash_ref
2570
2486
=cut
2571
=cut
2487
2572
2488
sub TransformMarcToKoha {
2573
sub TransformMarcToKoha {
2489
    my ( $dbh, $record, $frameworkcode, $limit_table ) = @_;
2574
    my ( $dbh, $record, $frameworkcode, $limit_table ) = @_;
2490
2575
2491
    my $result;
2576
    my $result = {};
2577
    if (!defined $record) {
2578
        carp('TransformMarcToKoha called with undefined record');
2579
        return $result;
2580
    }
2492
    $limit_table = $limit_table || 0;
2581
    $limit_table = $limit_table || 0;
2493
    $frameworkcode = '' unless defined $frameworkcode;
2582
    $frameworkcode = '' unless defined $frameworkcode;
2494
2583
Lines 2801-2807 if $itemnumbers is defined, only specified itemnumbers are embedded Link Here
2801
2890
2802
sub EmbedItemsInMarcBiblio {
2891
sub EmbedItemsInMarcBiblio {
2803
    my ($marc, $biblionumber, $itemnumbers) = @_;
2892
    my ($marc, $biblionumber, $itemnumbers) = @_;
2804
    croak "No MARC record" unless $marc;
2893
    if ( !$marc ) {
2894
        carp 'EmbedItemsInMarcBiblio: No MARC record passed';
2895
        return;
2896
    }
2805
2897
2806
    $itemnumbers = [] unless defined $itemnumbers;
2898
    $itemnumbers = [] unless defined $itemnumbers;
2807
2899
Lines 3264-3269 sub ModBiblioMarc { Link Here
3264
    # pass the MARC::Record to this function, and it will create the records in
3356
    # pass the MARC::Record to this function, and it will create the records in
3265
    # the marc field
3357
    # the marc field
3266
    my ( $record, $biblionumber, $frameworkcode ) = @_;
3358
    my ( $record, $biblionumber, $frameworkcode ) = @_;
3359
    if ( !$record ) {
3360
        carp 'ModBiblioMarc passed an undefined record';
3361
        return;
3362
    }
3267
3363
3268
    # Clone record as it gets modified
3364
    # Clone record as it gets modified
3269
    $record = $record->clone();
3365
    $record = $record->clone();
Lines 3625-3630 Removes all nsb/nse chars from a record Link Here
3625
3721
3626
sub RemoveAllNsb {
3722
sub RemoveAllNsb {
3627
    my $record = shift;
3723
    my $record = shift;
3724
    if (!$record) {
3725
        carp 'RemoveAllNsb called with undefined record';
3726
        return;
3727
    }
3628
3728
3629
    SetUTF8Flag($record);
3729
    SetUTF8Flag($record);
3630
3730
(-)a/t/Biblio.t (-1 / +82 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
#
3
use strict;
4
use warnings;
5
6
use Test::More tests => 22;
7
8
BEGIN {
9
        use_ok('C4::Biblio');
10
}
11
12
# test returns if undef record passed
13
# carp messages appear on stdout
14
15
my @arr = AddBiblio(undef, q{});
16
my $elements = @arr;
17
18
is($elements, 0, 'Add Biblio returns empty array for undef record');
19
20
my $ret = ModBiblio(undef, 0, '');
21
22
is( $ret, 0, 'ModBiblio returns zero if not passed rec');
23
24
$ret = BiblioAutoLink(undef, q{});
25
26
is( $ret, 0, 'BiblioAutoLink returns zero if not passed rec');
27
28
$ret = GetRecordValue('100', undef, q{});
29
ok( !defined $ret, 'GetRecordValue returns undef if not passed rec');
30
31
@arr = LinkBibHeadingsToAuthorities(q{}, q{});
32
is($arr[0], 0, 'LinkBibHeadingsToAuthorities correct error return');
33
34
$ret = GetCOinSBiblio();
35
ok( !defined $ret, 'GetCOinSBiblio returns undef if not passed rec');
36
37
$ret = GetMarcPrice(undef, 'MARC21');
38
ok( !defined $ret, 'GetMarcPrice returns undef if not passed rec');
39
40
$ret = GetMarcQuantity(undef, 'MARC21');
41
ok( !defined $ret, 'GetMarcQuantity returns undef if not passed rec');
42
43
$ret = GetMarcControlnumber();
44
ok( !defined $ret, 'GetMarcControlnumber returns undef if not passed rec');
45
46
$ret = GetMarcISBN();
47
ok( !defined $ret, 'GetMarcISBN returns undef if not passed rec');
48
49
$ret = GetMarcISSN();
50
ok( !defined $ret, 'GetMarcISSN returns undef if not passed rec');
51
52
$ret = GetMarcNotes();
53
ok( !defined $ret, 'GetMarcNotes returns undef if not passed rec');
54
55
$ret = GetMarcSubjects();
56
ok( !defined $ret, 'GetMarcSubjects returns undef if not passed rec');
57
58
$ret = GetMarcAuthors();
59
ok( !defined $ret, 'GetMarcAuthors returns undef if not passed rec');
60
61
$ret = GetMarcUrls();
62
ok( !defined $ret, 'GetMarcUrls returns undef if not passed rec');
63
64
$ret = GetMarcSeries();
65
ok( !defined $ret, 'GetMarcSeries returns undef if not passed rec');
66
67
$ret = GetMarcHosts();
68
ok( !defined $ret, 'GetMarcHosts returns undef if not passed rec');
69
70
my $hash_ref = TransformMarcToKoha(undef, undef);
71
72
isa_ok( $hash_ref, 'HASH');
73
74
$elements = keys %{$hash_ref};
75
76
is($elements, 0, 'Empty hashref returned for undefined record in TransformMarcToKoha');
77
78
$ret = ModBiblioMarc();
79
ok( !defined $ret, 'ModBiblioMarc returns undef if not passed rec');
80
81
$ret = RemoveAllNsb();
82
ok( !defined $ret, 'RemoveAllNsb returns undef if not passed rec');

Return to bug 11032