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

(-)a/C4/Biblio.pm (-5 / +105 lines)
Lines 250-255 sub AddBiblio { Link Here
250
    my $frameworkcode   = shift;
250
    my $frameworkcode   = shift;
251
    my $options         = @_ ? shift : undef;
251
    my $options         = @_ ? shift : undef;
252
    my $defer_marc_save = 0;
252
    my $defer_marc_save = 0;
253
    if (!$record) {
254
        carp('AddBiblio called with undefined record');
255
        return;
256
    }
253
    if ( defined $options and exists $options->{'defer_marc_save'} and $options->{'defer_marc_save'} ) {
257
    if ( defined $options and exists $options->{'defer_marc_save'} and $options->{'defer_marc_save'} ) {
254
        $defer_marc_save = 1;
258
        $defer_marc_save = 1;
255
    }
259
    }
Lines 299-309 in the C<biblio> and C<biblioitems> tables, as well as Link Here
299
which fields are used to store embedded item, biblioitem,
303
which fields are used to store embedded item, biblioitem,
300
and biblionumber data for indexing.
304
and biblionumber data for indexing.
301
305
306
Returns 1 on success 0 on failure
307
302
=cut
308
=cut
303
309
304
sub ModBiblio {
310
sub ModBiblio {
305
    my ( $record, $biblionumber, $frameworkcode ) = @_;
311
    my ( $record, $biblionumber, $frameworkcode ) = @_;
306
    croak "No record" unless $record;
312
    if (!$record) {
313
        carp 'No record passed to ModBiblio';
314
        return 0;
315
    }
307
316
308
    if ( C4::Context->preference("CataloguingLog") ) {
317
    if ( C4::Context->preference("CataloguingLog") ) {
309
        my $newrecord = GetMarcBiblio($biblionumber);
318
        my $newrecord = GetMarcBiblio($biblionumber);
Lines 473-483 sub DelBiblio { Link Here
473
482
474
Automatically links headings in a bib record to authorities.
483
Automatically links headings in a bib record to authorities.
475
484
485
Returns the number of headings changed
486
476
=cut
487
=cut
477
488
478
sub BiblioAutoLink {
489
sub BiblioAutoLink {
479
    my $record        = shift;
490
    my $record        = shift;
480
    my $frameworkcode = shift;
491
    my $frameworkcode = shift;
492
    if (!$record) {
493
        carp('Undefined record passed to BiblioAutoLink');
494
        return 0;
495
    }
481
    my ( $num_headings_changed, %results );
496
    my ( $num_headings_changed, %results );
482
497
483
    my $linker_module =
498
    my $linker_module =
Lines 485-491 sub BiblioAutoLink { Link Here
485
    unless ( can_load( modules => { $linker_module => undef } ) ) {
500
    unless ( can_load( modules => { $linker_module => undef } ) ) {
486
        $linker_module = 'C4::Linker::Default';
501
        $linker_module = 'C4::Linker::Default';
487
        unless ( can_load( modules => { $linker_module => undef } ) ) {
502
        unless ( can_load( modules => { $linker_module => undef } ) ) {
488
            return 0, 0;
503
            return 0;
489
        }
504
        }
490
    }
505
    }
491
506
Lines 522-527 sub LinkBibHeadingsToAuthorities { Link Here
522
    my $frameworkcode = shift;
537
    my $frameworkcode = shift;
523
    my $allowrelink = shift;
538
    my $allowrelink = shift;
524
    my %results;
539
    my %results;
540
    if (!$bib) {
541
        carp 'LinkBibHeadingsToAuthorities called on undefined bib record';
542
        return ( 0, {});
543
    }
525
    require C4::Heading;
544
    require C4::Heading;
526
    require C4::AuthoritiesMarc;
545
    require C4::AuthoritiesMarc;
527
546
Lines 671-676 Get MARC fields from a keyword defined in fieldmapping table. Link Here
671
690
672
sub GetRecordValue {
691
sub GetRecordValue {
673
    my ( $field, $record, $frameworkcode ) = @_;
692
    my ( $field, $record, $frameworkcode ) = @_;
693
694
    if (!$record) {
695
        carp 'GetRecordValue called with undefined record';
696
        return;
697
    }
674
    my $dbh = C4::Context->dbh;
698
    my $dbh = C4::Context->dbh;
675
699
676
    my $sth = $dbh->prepare('SELECT fieldcode, subfieldcode FROM fieldmapping WHERE frameworkcode = ? AND field = ?');
700
    my $sth = $dbh->prepare('SELECT fieldcode, subfieldcode FROM fieldmapping WHERE frameworkcode = ? AND field = ?');
Lines 1302-1308 sub GetCOinSBiblio { Link Here
1302
1326
1303
    # get the coin format
1327
    # get the coin format
1304
    if ( ! $record ) {
1328
    if ( ! $record ) {
1305
	return;
1329
        carp 'GetCOinSBiblio called with undefined record';
1330
        return;
1306
    }
1331
    }
1307
    my $pos7 = substr $record->leader(), 7, 1;
1332
    my $pos7 = substr $record->leader(), 7, 1;
1308
    my $pos6 = substr $record->leader(), 6, 1;
1333
    my $pos6 = substr $record->leader(), 6, 1;
Lines 1443-1452 sub GetCOinSBiblio { Link Here
1443
=head2 GetMarcPrice
1468
=head2 GetMarcPrice
1444
1469
1445
return the prices in accordance with the Marc format.
1470
return the prices in accordance with the Marc format.
1471
1472
returns 0 if no price found
1473
returns undef if called without a marc record or with
1474
an unrecognized marc format
1475
1446
=cut
1476
=cut
1447
1477
1448
sub GetMarcPrice {
1478
sub GetMarcPrice {
1449
    my ( $record, $marcflavour ) = @_;
1479
    my ( $record, $marcflavour ) = @_;
1480
    if (!$record) {
1481
        carp 'GetMarcPrice called on undefined record';
1482
        return;
1483
    }
1484
1450
    my @listtags;
1485
    my @listtags;
1451
    my $subfield;
1486
    my $subfield;
1452
    
1487
    
Lines 1518-1527 sub MungeMarcPrice { Link Here
1518
return the quantity of a book. Used in acquisition only, when importing a file an iso2709 from a bookseller
1553
return the quantity of a book. Used in acquisition only, when importing a file an iso2709 from a bookseller
1519
Warning : this is not really in the marc standard. In Unimarc, Electre (the most widely used bookseller) use the 969$a
1554
Warning : this is not really in the marc standard. In Unimarc, Electre (the most widely used bookseller) use the 969$a
1520
1555
1556
returns 0 if no quantity found
1557
returns undef if called without a marc record or with
1558
an unrecognized marc format
1559
1521
=cut
1560
=cut
1522
1561
1523
sub GetMarcQuantity {
1562
sub GetMarcQuantity {
1524
    my ( $record, $marcflavour ) = @_;
1563
    my ( $record, $marcflavour ) = @_;
1564
    if (!$record) {
1565
        carp 'GetMarcQuantity called on undefined record';
1566
        return;
1567
    }
1568
1525
    my @listtags;
1569
    my @listtags;
1526
    my $subfield;
1570
    my $subfield;
1527
    
1571
    
Lines 1608-1613 Get the control number / record Identifier from the MARC record and return it. Link Here
1608
1652
1609
sub GetMarcControlnumber {
1653
sub GetMarcControlnumber {
1610
    my ( $record, $marcflavour ) = @_;
1654
    my ( $record, $marcflavour ) = @_;
1655
    if (!$record) {
1656
        carp 'GetMarcControlnumber called on undefined record';
1657
        return;
1658
    }
1611
    my $controlnumber = "";
1659
    my $controlnumber = "";
1612
    # Control number or Record identifier are the same field in MARC21, UNIMARC and NORMARC
1660
    # Control number or Record identifier are the same field in MARC21, UNIMARC and NORMARC
1613
    # Keep $marcflavour for possible later use
1661
    # Keep $marcflavour for possible later use
Lines 1631-1636 ISBNs stored in different fields depending on MARC flavour Link Here
1631
1679
1632
sub GetMarcISBN {
1680
sub GetMarcISBN {
1633
    my ( $record, $marcflavour ) = @_;
1681
    my ( $record, $marcflavour ) = @_;
1682
    if (!$record) {
1683
        carp 'GetMarcISBN called on undefined record';
1684
        return;
1685
    }
1634
    my $scope;
1686
    my $scope;
1635
    if ( $marcflavour eq "UNIMARC" ) {
1687
    if ( $marcflavour eq "UNIMARC" ) {
1636
        $scope = '010';
1688
        $scope = '010';
Lines 1672-1677 ISSNs are stored in different fields depending on MARC flavour Link Here
1672
1724
1673
sub GetMarcISSN {
1725
sub GetMarcISSN {
1674
    my ( $record, $marcflavour ) = @_;
1726
    my ( $record, $marcflavour ) = @_;
1727
    if (!$record) {
1728
        carp 'GetMarcISSN called on undefined record';
1729
        return;
1730
    }
1675
    my $scope;
1731
    my $scope;
1676
    if ( $marcflavour eq "UNIMARC" ) {
1732
    if ( $marcflavour eq "UNIMARC" ) {
1677
        $scope = '011';
1733
        $scope = '011';
Lines 1697-1702 The note are stored in different fields depending on MARC flavour Link Here
1697
1753
1698
sub GetMarcNotes {
1754
sub GetMarcNotes {
1699
    my ( $record, $marcflavour ) = @_;
1755
    my ( $record, $marcflavour ) = @_;
1756
    if (!$record) {
1757
        carp 'GetMarcNotes called on undefined record';
1758
        return;
1759
    }
1700
    my $scope;
1760
    my $scope;
1701
    if ( $marcflavour eq "UNIMARC" ) {
1761
    if ( $marcflavour eq "UNIMARC" ) {
1702
        $scope = '3..';
1762
        $scope = '3..';
Lines 1741-1746 The subjects are stored in different fields depending on MARC flavour Link Here
1741
1801
1742
sub GetMarcSubjects {
1802
sub GetMarcSubjects {
1743
    my ( $record, $marcflavour ) = @_;
1803
    my ( $record, $marcflavour ) = @_;
1804
    if (!$record) {
1805
        carp 'GetMarcSubjects called on undefined record';
1806
        return;
1807
    }
1744
    my ( $mintag, $maxtag, $fields_filter );
1808
    my ( $mintag, $maxtag, $fields_filter );
1745
    if ( $marcflavour eq "UNIMARC" ) {
1809
    if ( $marcflavour eq "UNIMARC" ) {
1746
        $mintag = "600";
1810
        $mintag = "600";
Lines 1826-1831 The authors are stored in different fields depending on MARC flavour Link Here
1826
1890
1827
sub GetMarcAuthors {
1891
sub GetMarcAuthors {
1828
    my ( $record, $marcflavour ) = @_;
1892
    my ( $record, $marcflavour ) = @_;
1893
    if (!$record) {
1894
        carp 'GetMarcAuthors called on undefined record';
1895
        return;
1896
    }
1829
    my ( $mintag, $maxtag, $fields_filter );
1897
    my ( $mintag, $maxtag, $fields_filter );
1830
1898
1831
    # tagslib useful for UNIMARC author reponsabilities
1899
    # tagslib useful for UNIMARC author reponsabilities
Lines 1914-1919 Assumes web resources (not uncommon in MARC21 to omit resource type ind) Link Here
1914
1982
1915
sub GetMarcUrls {
1983
sub GetMarcUrls {
1916
    my ( $record, $marcflavour ) = @_;
1984
    my ( $record, $marcflavour ) = @_;
1985
    if (!$record) {
1986
        carp 'GetMarcUrls called on undefined record';
1987
        return;
1988
    }
1917
1989
1918
    my @marcurls;
1990
    my @marcurls;
1919
    for my $field ( $record->field('856') ) {
1991
    for my $field ( $record->field('856') ) {
Lines 1969-1974 The series are stored in different fields depending on MARC flavour Link Here
1969
2041
1970
sub GetMarcSeries {
2042
sub GetMarcSeries {
1971
    my ( $record, $marcflavour ) = @_;
2043
    my ( $record, $marcflavour ) = @_;
2044
    if (!$record) {
2045
        carp 'GetMarcSeries called on undefined record';
2046
        return;
2047
    }
2048
1972
    my ( $mintag, $maxtag, $fields_filter );
2049
    my ( $mintag, $maxtag, $fields_filter );
1973
    if ( $marcflavour eq "UNIMARC" ) {
2050
    if ( $marcflavour eq "UNIMARC" ) {
1974
        $mintag = "225";
2051
        $mintag = "225";
Lines 2038-2043 Get all host records (773s MARC21, 461 UNIMARC) from the MARC record and returns Link Here
2038
2115
2039
sub GetMarcHosts {
2116
sub GetMarcHosts {
2040
    my ( $record, $marcflavour ) = @_;
2117
    my ( $record, $marcflavour ) = @_;
2118
    if (!$record) {
2119
        carp 'GetMarcHosts called on undefined record';
2120
        return;
2121
    }
2122
2041
    my ( $tag,$title_subf,$bibnumber_subf,$itemnumber_subf);
2123
    my ( $tag,$title_subf,$bibnumber_subf,$itemnumber_subf);
2042
    $marcflavour ||="MARC21";
2124
    $marcflavour ||="MARC21";
2043
    if ( $marcflavour eq "MARC21" || $marcflavour eq "NORMARC" ) {
2125
    if ( $marcflavour eq "MARC21" || $marcflavour eq "NORMARC" ) {
Lines 2481-2492 our $inverted_field_map; Link Here
2481
Extract data from a MARC bib record into a hashref representing
2563
Extract data from a MARC bib record into a hashref representing
2482
Koha biblio, biblioitems, and items fields. 
2564
Koha biblio, biblioitems, and items fields. 
2483
2565
2566
If passed an undefined record will log the error and return an empty
2567
hash_ref
2568
2484
=cut
2569
=cut
2485
2570
2486
sub TransformMarcToKoha {
2571
sub TransformMarcToKoha {
2487
    my ( $dbh, $record, $frameworkcode, $limit_table ) = @_;
2572
    my ( $dbh, $record, $frameworkcode, $limit_table ) = @_;
2488
2573
2489
    my $result;
2574
    my $result = {};
2575
    if (!defined $record) {
2576
        carp('TransformMarcToKoha called with undefined record');
2577
        return $result;
2578
    }
2490
    $limit_table = $limit_table || 0;
2579
    $limit_table = $limit_table || 0;
2491
    $frameworkcode = '' unless defined $frameworkcode;
2580
    $frameworkcode = '' unless defined $frameworkcode;
2492
2581
Lines 2799-2805 if $itemnumbers is defined, only specified itemnumbers are embedded Link Here
2799
2888
2800
sub EmbedItemsInMarcBiblio {
2889
sub EmbedItemsInMarcBiblio {
2801
    my ($marc, $biblionumber, $itemnumbers) = @_;
2890
    my ($marc, $biblionumber, $itemnumbers) = @_;
2802
    croak "No MARC record" unless $marc;
2891
    if ( !$marc ) {
2892
        carp 'EmbedItemsInMarcBiblio: No MARC record passed';
2893
        return;
2894
    }
2803
2895
2804
    $itemnumbers = [] unless defined $itemnumbers;
2896
    $itemnumbers = [] unless defined $itemnumbers;
2805
2897
Lines 3262-3267 sub ModBiblioMarc { Link Here
3262
    # pass the MARC::Record to this function, and it will create the records in
3354
    # pass the MARC::Record to this function, and it will create the records in
3263
    # the marc field
3355
    # the marc field
3264
    my ( $record, $biblionumber, $frameworkcode ) = @_;
3356
    my ( $record, $biblionumber, $frameworkcode ) = @_;
3357
    if ( !$record ) {
3358
        carp 'ModBiblioMarc passed an undefined record';
3359
        return;
3360
    }
3265
3361
3266
    # Clone record as it gets modified
3362
    # Clone record as it gets modified
3267
    $record = $record->clone();
3363
    $record = $record->clone();
Lines 3623-3628 Removes all nsb/nse chars from a record Link Here
3623
3719
3624
sub RemoveAllNsb {
3720
sub RemoveAllNsb {
3625
    my $record = shift;
3721
    my $record = shift;
3722
    if (!$record) {
3723
        carp 'RemoveAllNsb called with undefined record';
3724
        return;
3725
    }
3626
3726
3627
    SetUTF8Flag($record);
3727
    SetUTF8Flag($record);
3628
3728
(-)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