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

(-)a/C4/Biblio.pm (-27 lines)
Lines 30-36 BEGIN { Link Here
30
        AddBiblio
30
        AddBiblio
31
        GetBiblioData
31
        GetBiblioData
32
        GetISBDView
32
        GetISBDView
33
        GetMarcControlnumber
34
        GetMarcISBN
33
        GetMarcISBN
35
        GetMarcISSN
34
        GetMarcISSN
36
        GetMarcSubjects
35
        GetMarcSubjects
Lines 1523-1554 sub GetAuthorisedValueDesc { Link Here
1523
    }
1522
    }
1524
}
1523
}
1525
1524
1526
=head2 GetMarcControlnumber
1527
1528
  $marccontrolnumber = GetMarcControlnumber($record,$marcflavour);
1529
1530
Get the control number / record Identifier from the MARC record and return it.
1531
1532
=cut
1533
1534
sub GetMarcControlnumber {
1535
    my ( $record, $marcflavour ) = @_;
1536
    if (!$record) {
1537
        carp 'GetMarcControlnumber called on undefined record';
1538
        return;
1539
    }
1540
    my $controlnumber = "";
1541
    # Control number or Record identifier are the same field in MARC21 and UNIMARC
1542
    # Keep $marcflavour for possible later use
1543
    if ($marcflavour eq "MARC21" || $marcflavour eq "UNIMARC" ) {
1544
        my $controlnumberField = $record->field('001');
1545
        if ($controlnumberField) {
1546
            $controlnumber = $controlnumberField->data();
1547
        }
1548
    }
1549
    return $controlnumber;
1550
}
1551
1552
=head2 GetMarcISBN
1525
=head2 GetMarcISBN
1553
1526
1554
  $marcisbnsarray = GetMarcISBN( $record, $marcflavour );
1527
  $marcisbnsarray = GetMarcISBN( $record, $marcflavour );
(-)a/catalogue/export.pl (-2 / +1 lines)
Lines 4-10 use Modern::Perl; Link Here
4
use C4::Record;
4
use C4::Record;
5
use C4::Auth qw( get_template_and_user );
5
use C4::Auth qw( get_template_and_user );
6
use C4::Output;
6
use C4::Output;
7
use C4::Biblio qw( GetMarcControlnumber );
8
use CGI qw ( -utf8 );
7
use CGI qw ( -utf8 );
9
use C4::Ris qw( marc2ris );
8
use C4::Ris qw( marc2ris );
10
9
Lines 32-38 if ($op eq "export") { Link Here
32
31
33
            if( C4::Context->preference('DefaultSaveRecordFileID') eq 'controlnumber' ){
32
            if( C4::Context->preference('DefaultSaveRecordFileID') eq 'controlnumber' ){
34
                my $marcflavour = C4::Context->preference('marcflavour'); #FIXME This option is required but does not change control num behaviour
33
                my $marcflavour = C4::Context->preference('marcflavour'); #FIXME This option is required but does not change control num behaviour
35
                my $control_num = GetMarcControlnumber( $marc, $marcflavour );
34
                my $control_num = $biblio->get_control_number();
36
                if( $control_num ){
35
                if( $control_num ){
37
                    $file_id = $control_num;
36
                    $file_id = $control_num;
38
                    $file_pre = "record-";
37
                    $file_pre = "record-";
(-)a/opac/opac-ISBDdetail.pl (-3 / +4 lines)
Lines 48-54 use CGI qw ( -utf8 ); Link Here
48
use C4::Biblio qw(
48
use C4::Biblio qw(
49
    CountItemsIssued
49
    CountItemsIssued
50
    GetISBDView
50
    GetISBDView
51
    GetMarcControlnumber
52
    GetMarcISSN
51
    GetMarcISSN
53
    TransformMarcToKoha
52
    TransformMarcToKoha
54
);
53
);
Lines 102-107 unless ( $patron and $patron->category->override_hidden_items ) { Link Here
102
my $record = $biblio->metadata->record;
101
my $record = $biblio->metadata->record;
103
my @items  = $biblio->items->filter_by_visible_in_opac({ patron => $patron })->as_list;
102
my @items  = $biblio->items->filter_by_visible_in_opac({ patron => $patron })->as_list;
104
103
104
my $metadata_extractor = $biblio->metadata_extractor;
105
105
my $record_processor = Koha::RecordProcessor->new(
106
my $record_processor = Koha::RecordProcessor->new(
106
    {   filters => [ 'EmbedItems', 'ViewPolicy' ],
107
    {   filters => [ 'EmbedItems', 'ViewPolicy' ],
107
        options => {
108
        options => {
Lines 195-201 $template->param( Link Here
195
);
196
);
196
197
197
#Search for title in links
198
#Search for title in links
198
my $marccontrolnumber   = GetMarcControlnumber ($record, $marcflavour);
199
my $control_number = $metadata_extractor->get_control_number();
199
my $marcissns = GetMarcISSN ( $record, $marcflavour );
200
my $marcissns = GetMarcISSN ( $record, $marcflavour );
200
my $issn = $marcissns->[0] || '';
201
my $issn = $marcissns->[0] || '';
201
202
Lines 210-216 if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ Link Here
210
            AUTHOR        => $dat->{author},
211
            AUTHOR        => $dat->{author},
211
            ISBN          => $isbn,
212
            ISBN          => $isbn,
212
            ISSN          => $issn,
213
            ISSN          => $issn,
213
            CONTROLNUMBER => $marccontrolnumber,
214
            CONTROLNUMBER => $control_number,
214
            BIBLIONUMBER  => $biblionumber,
215
            BIBLIONUMBER  => $biblionumber,
215
            OCLC_NO       => $oclc_no,
216
            OCLC_NO       => $oclc_no,
216
        }
217
        }
(-)a/opac/opac-MARCdetail.pl (-8 / +9 lines)
Lines 52-58 use CGI qw ( -utf8 ); Link Here
52
use C4::Biblio qw(
52
use C4::Biblio qw(
53
    CountItemsIssued
53
    CountItemsIssued
54
    GetAuthorisedValueDesc
54
    GetAuthorisedValueDesc
55
    GetMarcControlnumber
56
    GetMarcFromKohaField
55
    GetMarcFromKohaField
57
    GetMarcISSN
56
    GetMarcISSN
58
    GetMarcStructure
57
    GetMarcStructure
Lines 108-113 unless ( $patron and $patron->category->override_hidden_items ) { Link Here
108
    }
107
    }
109
}
108
}
110
109
110
my $metadata_extractor = $biblio->metadata_extractor;
111
111
my $items = $biblio->items->filter_by_visible_in_opac({ patron => $patron });
112
my $items = $biblio->items->filter_by_visible_in_opac({ patron => $patron });
112
my $framework = $biblio ? $biblio->frameworkcode : q{};
113
my $framework = $biblio ? $biblio->frameworkcode : q{};
113
my $tagslib   = &GetMarcStructure( 0, $framework );
114
my $tagslib   = &GetMarcStructure( 0, $framework );
Lines 339-350 if ( C4::Context->preference("OPACISBD") ) { Link Here
339
}
340
}
340
341
341
#Search for title in links
342
#Search for title in links
342
my $marcflavour  = C4::Context->preference("marcflavour");
343
my $marcflavour    = C4::Context->preference("marcflavour");
343
my $dat = TransformMarcToKoha({ record => $record });
344
my $dat            = TransformMarcToKoha( { record => $record } );
344
my $isbn = GetNormalizedISBN(undef,$record,$marcflavour);
345
my $isbn           = GetNormalizedISBN( undef, $record, $marcflavour );
345
my $marccontrolnumber   = GetMarcControlnumber ($record, $marcflavour);
346
my $control_number = $metadata_extractor->get_control_number();
346
my $marcissns = GetMarcISSN( $record, $marcflavour );
347
my $marcissns      = GetMarcISSN( $record, $marcflavour );
347
my $issn = $marcissns->[0] || '';
348
my $issn           = $marcissns->[0] || '';
348
349
349
if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){
350
if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){
350
    $dat->{title} =~ s/\/+$//; # remove trailing slash
351
    $dat->{title} =~ s/\/+$//; # remove trailing slash
Lines 357-363 if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ Link Here
357
            AUTHOR        => $dat->{author},
358
            AUTHOR        => $dat->{author},
358
            ISBN          => $isbn,
359
            ISBN          => $isbn,
359
            ISSN          => $issn,
360
            ISSN          => $issn,
360
            CONTROLNUMBER => $marccontrolnumber,
361
            CONTROLNUMBER => $control_number,
361
            BIBLIONUMBER  => $biblionumber,
362
            BIBLIONUMBER  => $biblionumber,
362
            OCLC_NO       => $oclc_no,
363
            OCLC_NO       => $oclc_no,
363
        }
364
        }
(-)a/opac/opac-detail.pl (-5 / +6 lines)
Lines 38-44 use C4::Output qw( parametrized_url output_html_with_http_headers ); Link Here
38
use C4::Biblio qw(
38
use C4::Biblio qw(
39
    CountItemsIssued
39
    CountItemsIssued
40
    GetBiblioData
40
    GetBiblioData
41
    GetMarcControlnumber
42
    GetMarcISBN
41
    GetMarcISBN
43
    GetMarcISSN
42
    GetMarcISSN
44
    GetMarcSeries
43
    GetMarcSeries
Lines 112-117 unless ( $biblio && $record ) { Link Here
112
    exit;
111
    exit;
113
}
112
}
114
113
114
my $metadata_extractor = $biblio->metadata_extractor;
115
115
my $items = $biblio->items->search_ordered;
116
my $items = $biblio->items->search_ordered;
116
if ($specific_item) {
117
if ($specific_item) {
117
    $items = $items->search( { itemnumber => scalar $query->param('itemnumber') } );
118
    $items = $items->search( { itemnumber => scalar $query->param('itemnumber') } );
Lines 1158-1166 if ( C4::Context->preference('OpacStarRatings') !~ /disable/ ) { Link Here
1158
}
1159
}
1159
1160
1160
#Search for title in links
1161
#Search for title in links
1161
my $marccontrolnumber   = GetMarcControlnumber ($record, $marcflavour);
1162
my $control_number = $metadata_extractor->get_control_number();
1162
my $marcissns = GetMarcISSN ( $record, $marcflavour );
1163
my $marcissns      = GetMarcISSN( $record, $marcflavour );
1163
my $issn = $marcissns->[0] || '';
1164
my $issn           = $marcissns->[0] || '';
1164
1165
1165
if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){
1166
if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){
1166
    $dat->{title} =~ s/\/+$//; # remove trailing slash
1167
    $dat->{title} =~ s/\/+$//; # remove trailing slash
Lines 1173-1179 if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ Link Here
1173
            AUTHOR        => $dat->{author},
1174
            AUTHOR        => $dat->{author},
1174
            ISBN          => $isbn,
1175
            ISBN          => $isbn,
1175
            ISSN          => $issn,
1176
            ISSN          => $issn,
1176
            CONTROLNUMBER => $marccontrolnumber,
1177
            CONTROLNUMBER => $control_number,
1177
            BIBLIONUMBER  => $biblionumber,
1178
            BIBLIONUMBER  => $biblionumber,
1178
            OCLC_NO       => $oclc_no,
1179
            OCLC_NO       => $oclc_no,
1179
        }
1180
        }
(-)a/opac/opac-export.pl (-6 / +6 lines)
Lines 25-31 use C4::Output; Link Here
25
use C4::Biblio qw(
25
use C4::Biblio qw(
26
    GetFrameworkCode
26
    GetFrameworkCode
27
    GetISBDView
27
    GetISBDView
28
    GetMarcControlnumber
29
);
28
);
30
use CGI qw ( -utf8 );
29
use CGI qw ( -utf8 );
31
use C4::Auth;
30
use C4::Auth;
Lines 78-90 if(!$marc) { Link Here
78
    exit;
77
    exit;
79
}
78
}
80
79
80
my $metadata_extractor = $biblio->metadata_extractor;
81
81
my $file_id = $biblionumber;
82
my $file_id = $biblionumber;
82
my $file_pre = "bib-";
83
my $file_pre = "bib-";
83
if( C4::Context->preference('DefaultSaveRecordFileID') eq 'controlnumber' ){
84
if ( C4::Context->preference('DefaultSaveRecordFileID') eq 'controlnumber' ) {
84
    my $marcflavour = C4::Context->preference('marcflavour'); #FIXME This option is required but does not change control num behaviour
85
    my $control_number = $metadata_extractor->get_control_number();
85
    my $control_num = GetMarcControlnumber( $marc, $marcflavour );
86
    if ($control_number) {
86
    if( $control_num ){
87
        $file_id  = $control_number;
87
        $file_id = $control_num;
88
        $file_pre = "record-";
88
        $file_pre = "record-";
89
    }
89
    }
90
}
90
}
(-)a/t/Biblio.t (-8 / +2 lines)
Lines 21-30 use Test::More; Link Here
21
use Test::MockModule;
21
use Test::MockModule;
22
use Test::Warn;
22
use Test::Warn;
23
23
24
plan tests => 34;
24
plan tests => 32;
25
25
26
26
27
use_ok('C4::Biblio', qw( AddBiblio ModBiblio BiblioAutoLink LinkBibHeadingsToAuthorities GetMarcPrice GetMarcQuantity GetMarcControlnumber GetMarcISBN GetMarcISSN GetMarcSubjects GetMarcUrls GetMarcSeries TransformMarcToKoha ModBiblioMarc RemoveAllNsb UpdateTotalIssues ));
27
use_ok('C4::Biblio', qw( AddBiblio ModBiblio BiblioAutoLink LinkBibHeadingsToAuthorities GetMarcPrice GetMarcQuantity GetMarcISBN GetMarcISSN GetMarcSubjects GetMarcUrls GetMarcSeries TransformMarcToKoha ModBiblioMarc RemoveAllNsb UpdateTotalIssues ));
28
28
29
my $db = Test::MockModule->new('Koha::Database');
29
my $db = Test::MockModule->new('Koha::Database');
30
$db->mock( _new_schema => sub { return Schema(); } );
30
$db->mock( _new_schema => sub { return Schema(); } );
Lines 70-81 warning_is { $ret = GetMarcQuantity(undef, 'MARC21') } Link Here
70
70
71
ok( !defined $ret, 'GetMarcQuantity returns undef if not passed rec');
71
ok( !defined $ret, 'GetMarcQuantity returns undef if not passed rec');
72
72
73
warning_is { $ret = GetMarcControlnumber() }
74
           { carped => 'GetMarcControlnumber called on undefined record'},
75
           "GetMarcControlnumber returns carped warning on undef record";
76
77
ok( !defined $ret, 'GetMarcControlnumber returns undef if not passed rec');
78
79
warning_is { $ret = GetMarcISBN() }
73
warning_is { $ret = GetMarcISBN() }
80
           { carped => 'GetMarcISBN called on undefined record'},
74
           { carped => 'GetMarcISBN called on undefined record'},
81
           "GetMarcISBN returns carped warning on undef record";
75
           "GetMarcISBN returns carped warning on undef record";
(-)a/t/db_dependent/Biblio.t (-19 / +3 lines)
Lines 34-40 use Koha::MarcSubfieldStructures; Link Here
34
use C4::Linker::Default qw( get_link );
34
use C4::Linker::Default qw( get_link );
35
35
36
BEGIN {
36
BEGIN {
37
    use_ok('C4::Biblio', qw( AddBiblio GetMarcFromKohaField BiblioAutoLink GetMarcSubfieldStructure GetMarcSubfieldStructureFromKohaField LinkBibHeadingsToAuthorities GetBiblioData ModBiblio GetMarcISSN GetMarcControlnumber GetMarcISBN GetMarcPrice GetFrameworkCode GetMarcUrls IsMarcStructureInternal GetMarcStructure GetXmlBiblio DelBiblio ));
37
    use_ok('C4::Biblio', qw( AddBiblio GetMarcFromKohaField BiblioAutoLink GetMarcSubfieldStructure GetMarcSubfieldStructureFromKohaField LinkBibHeadingsToAuthorities GetBiblioData ModBiblio GetMarcISSN GetMarcISBN GetMarcPrice GetFrameworkCode GetMarcUrls IsMarcStructureInternal GetMarcStructure GetXmlBiblio DelBiblio ));
38
}
38
}
39
39
40
my $schema = Koha::Database->new->schema;
40
my $schema = Koha::Database->new->schema;
Lines 417-437 sub run_tests { Link Here
417
    is( scalar @$issns, 4,
417
    is( scalar @$issns, 4,
418
        'GetMARCISSN skips empty ISSN fields (Bug 12674)');
418
        'GetMARCISSN skips empty ISSN fields (Bug 12674)');
419
419
420
    ## Testing GetMarcControlnumber
421
    my $controlnumber;
422
    $controlnumber = GetMarcControlnumber( $marc_record, $marcflavour );
423
    is( $controlnumber, '', 'GetMarcControlnumber handles records without 001' );
424
425
    $field = MARC::Field->new( '001', '' );
426
    $marc_record->append_fields($field);
427
    $controlnumber = GetMarcControlnumber( $marc_record, $marcflavour );
428
    is( $controlnumber, '', 'GetMarcControlnumber handles records with empty 001' );
429
430
    $field = $marc_record->field('001');
431
    $field->update('123456789X');
432
    $controlnumber = GetMarcControlnumber( $marc_record, $marcflavour );
433
    is( $controlnumber, '123456789X', 'GetMarcControlnumber handles records with 001' );
434
435
    ## Testing GetMarcISBN
420
    ## Testing GetMarcISBN
436
    my $record_for_isbn = MARC::Record->new();
421
    my $record_for_isbn = MARC::Record->new();
437
    my $isbns = GetMarcISBN( $record_for_isbn, $marcflavour );
422
    my $isbns = GetMarcISBN( $record_for_isbn, $marcflavour );
Lines 632-645 sub create_author_field { Link Here
632
}
617
}
633
618
634
subtest 'MARC21' => sub {
619
subtest 'MARC21' => sub {
635
    plan tests => 46;
620
    plan tests => 43;
636
    run_tests('MARC21');
621
    run_tests('MARC21');
637
    $schema->storage->txn_rollback;
622
    $schema->storage->txn_rollback;
638
    $schema->storage->txn_begin;
623
    $schema->storage->txn_begin;
639
};
624
};
640
625
641
subtest 'UNIMARC' => sub {
626
subtest 'UNIMARC' => sub {
642
    plan tests => 46;
627
    plan tests => 43;
643
628
644
    # Mock the auth type data for UNIMARC
629
    # Mock the auth type data for UNIMARC
645
    $dbh->do("UPDATE auth_types SET auth_tag_to_report = '106' WHERE auth_tag_to_report = '100'") or die $dbh->errstr;
630
    $dbh->do("UPDATE auth_types SET auth_tag_to_report = '106' WHERE auth_tag_to_report = '100'") or die $dbh->errstr;
646
- 

Return to bug 37380