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

(-)a/C4/Biblio.pm (-90 lines)
Lines 33-39 BEGIN { Link Here
33
        GetMarcControlnumber
33
        GetMarcControlnumber
34
        GetMarcISBN
34
        GetMarcISBN
35
        GetMarcISSN
35
        GetMarcISSN
36
        GetMarcSubjects
37
        GetMarcSeries
36
        GetMarcSeries
38
        GetMarcUrls
37
        GetMarcUrls
39
        GetUsedMarcStructure
38
        GetUsedMarcStructure
Lines 1560-1654 sub GetMarcISSN { Link Here
1560
    return \@marcissns;
1559
    return \@marcissns;
1561
}    # end GetMarcISSN
1560
}    # end GetMarcISSN
1562
1561
1563
=head2 GetMarcSubjects
1564
1565
  $marcsubjcts = GetMarcSubjects($record,$marcflavour);
1566
1567
Get all subjects from the MARC record and returns them in an array.
1568
The subjects are stored in different fields depending on MARC flavour
1569
1570
=cut
1571
1572
sub GetMarcSubjects {
1573
    my ( $record, $marcflavour ) = @_;
1574
    if (!$record) {
1575
        carp 'GetMarcSubjects called on undefined record';
1576
        return;
1577
    }
1578
    my ( $mintag, $maxtag, $fields_filter );
1579
    if ( $marcflavour eq "UNIMARC" ) {
1580
        $mintag = "600";
1581
        $maxtag = "611";
1582
        $fields_filter = '6..';
1583
    } else { # marc21
1584
        $mintag = "600";
1585
        $maxtag = "699";
1586
        $fields_filter = '6..';
1587
    }
1588
1589
    my @marcsubjects;
1590
1591
    my $subject_limit = C4::Context->preference("TraceCompleteSubfields") ? 'su,complete-subfield' : 'su';
1592
    my $AuthoritySeparator = C4::Context->preference('AuthoritySeparator');
1593
1594
    foreach my $field ( $record->field($fields_filter) ) {
1595
        next unless ($field->tag() >= $mintag && $field->tag() <= $maxtag);
1596
        my @subfields_loop;
1597
        my @subfields = $field->subfields();
1598
        my @link_loop;
1599
1600
        # if there is an authority link, build the links with an= subfield9
1601
        my $subfield9 = $field->subfield('9');
1602
        my $authoritylink;
1603
        if ($subfield9) {
1604
            my $linkvalue = $subfield9;
1605
            $linkvalue =~ s/(\(|\))//g;
1606
            @link_loop = ( { limit => 'an', 'link' => $linkvalue } );
1607
            $authoritylink = $linkvalue
1608
        }
1609
1610
        # other subfields
1611
        for my $subject_subfield (@subfields) {
1612
            next if ( $subject_subfield->[0] eq '9' );
1613
1614
            # don't load unimarc subfields 3,4,5
1615
            next if ( ( $marcflavour eq "UNIMARC" ) and ( $subject_subfield->[0] =~ /2|3|4|5/ ) );
1616
            # don't load MARC21 subfields 2 (FIXME: any more subfields??)
1617
            next if ( ( $marcflavour eq "MARC21" ) and ( $subject_subfield->[0] =~ /2/ ) );
1618
1619
            my $code      = $subject_subfield->[0];
1620
            my $value     = $subject_subfield->[1];
1621
            my $linkvalue = $value;
1622
            $linkvalue =~ s/(\(|\))//g;
1623
            # if no authority link, build a search query
1624
            unless ($subfield9) {
1625
                push @link_loop, {
1626
                    limit    => $subject_limit,
1627
                    'link'   => $linkvalue,
1628
                    operator => (scalar @link_loop) ? ' AND ' : undef
1629
                };
1630
            }
1631
            my @this_link_loop = @link_loop;
1632
            # do not display $0
1633
            unless ( $code eq '0' ) {
1634
                push @subfields_loop, {
1635
                    code      => $code,
1636
                    value     => $value,
1637
                    link_loop => \@this_link_loop,
1638
                    separator => (scalar @subfields_loop) ? $AuthoritySeparator : ''
1639
                };
1640
            }
1641
        }
1642
1643
        push @marcsubjects, {
1644
            MARCSUBJECT_SUBFIELDS_LOOP => \@subfields_loop,
1645
            authoritylink => $authoritylink,
1646
        } if $authoritylink || @subfields_loop;
1647
1648
    }
1649
    return \@marcsubjects;
1650
}    #end getMARCsubjects
1651
1652
=head2 GetMarcUrls
1562
=head2 GetMarcUrls
1653
1563
1654
  $marcurls = GetMarcUrls($record,$marcflavour);
1564
  $marcurls = GetMarcUrls($record,$marcflavour);
(-)a/Koha/Biblio.pm (+87 lines)
Lines 1218-1223 sub get_marc_authors { Link Here
1218
    return [@first_authors, @other_authors];
1218
    return [@first_authors, @other_authors];
1219
}
1219
}
1220
1220
1221
=head3 get_marc_subjects
1222
1223
  $marcsubjcts = $biblio->get_marc_subjects;
1224
1225
Get all subjects from the MARC record and returns them in an array.
1226
The subjects are stored in different fields depending on MARC flavour
1227
1228
=cut
1229
1230
sub get_marc_subjects {
1231
    my ( $self, $params ) = @_;
1232
    my ( $mintag, $maxtag, $fields_filter );
1233
1234
    my $marcflavour = C4::Context->preference('marcflavour');
1235
    if ( $marcflavour eq "UNIMARC" ) {
1236
        $mintag = "600";
1237
        $maxtag = "611";
1238
        $fields_filter = '6..';
1239
    } else { # marc21/normarc
1240
        $mintag = "600";
1241
        $maxtag = "699";
1242
        $fields_filter = '6..';
1243
    }
1244
1245
    my @marcsubjects;
1246
1247
    my $subject_limit = C4::Context->preference("TraceCompleteSubfields") ? 'su,complete-subfield' : 'su';
1248
    my $AuthoritySeparator = C4::Context->preference('AuthoritySeparator');
1249
1250
    foreach my $field ( $self->metadata->record->field($fields_filter) ) {
1251
        next unless ($field->tag() >= $mintag && $field->tag() <= $maxtag);
1252
        my @subfields_loop;
1253
        my @subfields = $field->subfields();
1254
        my @link_loop;
1255
1256
        # if there is an authority link, build the links with an= subfield9
1257
        my $subfield9 = $field->subfield('9');
1258
        my $authoritylink;
1259
        if ($subfield9) {
1260
            my $linkvalue = $subfield9;
1261
            $linkvalue =~ s/(\(|\))//g;
1262
            @link_loop = ( { limit => 'an', 'link' => $linkvalue } );
1263
            $authoritylink = $linkvalue
1264
        }
1265
1266
        # other subfields
1267
        for my $subject_subfield (@subfields) {
1268
            next if ( $subject_subfield->[0] eq '9' );
1269
1270
            # don't load unimarc subfields 3,4,5
1271
            next if ( ( $marcflavour eq "UNIMARC" ) and ( $subject_subfield->[0] =~ /2|3|4|5/ ) );
1272
            # don't load MARC21 subfields 2 (FIXME: any more subfields??)
1273
            next if ( ( $marcflavour eq "MARC21" ) and ( $subject_subfield->[0] =~ /2/ ) );
1274
1275
            my $code      = $subject_subfield->[0];
1276
            my $value     = $subject_subfield->[1];
1277
            my $linkvalue = $value;
1278
            $linkvalue =~ s/(\(|\))//g;
1279
            # if no authority link, build a search query
1280
            unless ($subfield9) {
1281
                push @link_loop, {
1282
                    limit    => $subject_limit,
1283
                    'link'   => $linkvalue,
1284
                    operator => (scalar @link_loop) ? ' and ' : undef
1285
                };
1286
            }
1287
            my @this_link_loop = @link_loop;
1288
            # do not display $0
1289
            unless ( $code eq '0') {
1290
                push @subfields_loop, {
1291
                    tag       => $field->tag(),
1292
                    code      => $code,
1293
                    value     => $value,
1294
                    link_loop => \@this_link_loop,
1295
                    separator => (scalar @subfields_loop) ? $AuthoritySeparator : ''
1296
                };
1297
            }
1298
        }
1299
1300
        push @marcsubjects, {
1301
            MARCSUBJECT_SUBFIELDS_LOOP => \@subfields_loop,
1302
            authoritylink => $authoritylink,
1303
        } if $authoritylink || @subfields_loop;
1304
1305
    }
1306
    return \@marcsubjects;
1307
}
1221
1308
1222
=head3 to_api
1309
=head3 to_api
1223
1310
(-)a/basket/basket.pl (-2 / +1 lines)
Lines 21-27 use CGI qw ( -utf8 ); Link Here
21
use C4::Koha;
21
use C4::Koha;
22
use C4::Biblio qw(
22
use C4::Biblio qw(
23
    GetMarcSeries
23
    GetMarcSeries
24
    GetMarcSubjects
25
    GetMarcUrls
24
    GetMarcUrls
26
);
25
);
27
use C4::Auth qw( get_template_and_user );
26
use C4::Auth qw( get_template_and_user );
Lines 68-74 foreach my $biblionumber ( @bibs ) { Link Here
68
    my $record           = $biblio->metadata->record;
67
    my $record           = $biblio->metadata->record;
69
    my $marcnotesarray   = $biblio->get_marc_notes;
68
    my $marcnotesarray   = $biblio->get_marc_notes;
70
    my $marcauthorsarray = $biblio->get_marc_contributors;
69
    my $marcauthorsarray = $biblio->get_marc_contributors;
71
    my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
70
    my $marcsubjctsarray = $biblio->get_marc_subjects;
72
    my $marcseriesarray  = GetMarcSeries  ($record,$marcflavour);
71
    my $marcseriesarray  = GetMarcSeries  ($record,$marcflavour);
73
    my $marcurlsarray    = GetMarcUrls    ($record,$marcflavour);
72
    my $marcurlsarray    = GetMarcUrls    ($record,$marcflavour);
74
73
(-)a/basket/sendbasket.pl (-3 lines)
Lines 22-30 use Encode; Link Here
22
use Carp qw( carp );
22
use Carp qw( carp );
23
use Try::Tiny qw( catch try );
23
use Try::Tiny qw( catch try );
24
24
25
use C4::Biblio qw(
26
  GetMarcSubjects
27
);
28
use C4::Auth qw( get_template_and_user );
25
use C4::Auth qw( get_template_and_user );
29
use C4::Output qw( output_and_exit output_html_with_http_headers );
26
use C4::Output qw( output_and_exit output_html_with_http_headers );
30
use C4::Templates;
27
use C4::Templates;
(-)a/installer/data/mysql/en/mandatory/sample_notices.yml (+2 lines)
Lines 2315-2320 tables: Link Here
2315
            - "[% IF ( biblioitem.publishercode ) %]Published by: [% biblioitem.publishercode | html %][% IF ( biblioitem.publicationyear ) %] in [% biblioitem.publicationyear | html %][% END %][% IF ( biblioitem.pages ) %], [% biblioitem.pages | html %][% END %]<br>[% END %]"
2315
            - "[% IF ( biblioitem.publishercode ) %]Published by: [% biblioitem.publishercode | html %][% IF ( biblioitem.publicationyear ) %] in [% biblioitem.publicationyear | html %][% END %][% IF ( biblioitem.pages ) %], [% biblioitem.pages | html %][% END %]<br>[% END %]"
2316
            - "[% IF ( biblio.seriestitle ) %]Collection: [% biblio.seriestitle | html %]<br>[% END %]"
2316
            - "[% IF ( biblio.seriestitle ) %]Collection: [% biblio.seriestitle | html %]<br>[% END %]"
2317
            - "[% IF ( biblio.copyrightdate ) %]Copyright year: [% biblio.copyrightdate | html %]<br>[% END %]"
2317
            - "[% IF ( biblio.copyrightdate ) %]Copyright year: [% biblio.copyrightdate | html %]<br>[% END %]"
2318
            - "[% IF ( biblio.get_marc_subjects ) %]Subject(s): [% FOREACH subject IN biblio.get_marc_subjects %][% FOREACH subfield IN subject.MARCSUBJECT_SUBFIELDS_LOOP %][% subfield.separator | html %][% subfield.value | html %][% END %][% UNLESS ( loop.last ) %];[% END %][% END %][% END %]"
2318
            - "[% IF ( biblio.notes ) %]Notes: [% biblio.notes | html %]<br>[% END %]"
2319
            - "[% IF ( biblio.notes ) %]Notes: [% biblio.notes | html %]<br>[% END %]"
2319
            - "[% IF ( biblio.unititle ) %]Unified title: [% biblio.unititle | html %]<br>[% END %]"
2320
            - "[% IF ( biblio.unititle ) %]Unified title: [% biblio.unititle | html %]<br>[% END %]"
2320
            - "[% IF ( biblio.serial ) %]Serial: [% biblio.serial | html %]<br>[% END %]"
2321
            - "[% IF ( biblio.serial ) %]Serial: [% biblio.serial | html %]<br>[% END %]"
Lines 2351-2356 tables: Link Here
2351
            - "[% IF ( biblioitem.publishercode ) %]Published by: [% biblioitem.publishercode | html %][% IF ( biblioitem.publicationyear ) %] in [% biblioitem.publicationyear | html %][% END %][% IF ( biblioitem.pages ) %], [% biblioitem.pages | html %][% END %]<br>[% END %]"
2352
            - "[% IF ( biblioitem.publishercode ) %]Published by: [% biblioitem.publishercode | html %][% IF ( biblioitem.publicationyear ) %] in [% biblioitem.publicationyear | html %][% END %][% IF ( biblioitem.pages ) %], [% biblioitem.pages | html %][% END %]<br>[% END %]"
2352
            - "[% IF ( biblio.seriestitle ) %]Collection: [% biblio.seriestitle | html %]<br>[% END %]"
2353
            - "[% IF ( biblio.seriestitle ) %]Collection: [% biblio.seriestitle | html %]<br>[% END %]"
2353
            - "[% IF ( biblio.copyrightdate ) %]Copyright year: [% biblio.copyrightdate | html %]<br>[% END %]"
2354
            - "[% IF ( biblio.copyrightdate ) %]Copyright year: [% biblio.copyrightdate | html %]<br>[% END %]"
2355
            - "[% IF ( biblio.get_marc_subjects ) %]Subject(s): [% FOREACH subject IN biblio.get_marc_subjects %][% FOREACH subfield IN subject.MARCSUBJECT_SUBFIELDS_LOOP %][% subfield.separator | html %][% subfield.value | html %][% END %][% UNLESS ( loop.last ) %];[% END %][% END %][% END %]"
2354
            - "[% IF ( biblio.notes ) %]Notes: [% biblio.notes | html %]<br>[% END %]"
2356
            - "[% IF ( biblio.notes ) %]Notes: [% biblio.notes | html %]<br>[% END %]"
2355
            - "[% IF ( biblio.unititle ) %]Unified title: [% biblio.unititle | html %]<br>[% END %]"
2357
            - "[% IF ( biblio.unititle ) %]Unified title: [% biblio.unititle | html %]<br>[% END %]"
2356
            - "[% IF ( biblio.serial ) %]Serial: [% biblio.serial | html %]<br>[% END %]"
2358
            - "[% IF ( biblio.serial ) %]Serial: [% biblio.serial | html %]<br>[% END %]"
(-)a/opac/opac-basket.pl (-2 / +1 lines)
Lines 23-29 use C4::Koha; Link Here
23
use C4::Biblio qw(
23
use C4::Biblio qw(
24
    GetFrameworkCode
24
    GetFrameworkCode
25
    GetMarcSeries
25
    GetMarcSeries
26
    GetMarcSubjects
27
    GetMarcUrls
26
    GetMarcUrls
28
);
27
);
29
use C4::Auth qw( get_template_and_user );
28
use C4::Auth qw( get_template_and_user );
Lines 85-91 foreach my $biblionumber ( @bibs ) { Link Here
85
    next unless $record;
84
    next unless $record;
86
    my $marcnotesarray   = $biblio->get_marc_notes({ opac => 1 });
85
    my $marcnotesarray   = $biblio->get_marc_notes({ opac => 1 });
87
    my $marcauthorsarray = $biblio->get_marc_contributors;
86
    my $marcauthorsarray = $biblio->get_marc_contributors;
88
    my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
87
    my $marcsubjctsarray = $biblio->get_marc_subjects;
89
    my $marcseriesarray  = GetMarcSeries  ($record,$marcflavour);
88
    my $marcseriesarray  = GetMarcSeries  ($record,$marcflavour);
90
    my $marcurlsarray    = GetMarcUrls    ($record,$marcflavour);
89
    my $marcurlsarray    = GetMarcUrls    ($record,$marcflavour);
91
90
(-)a/opac/opac-detail.pl (-1 / +2 lines)
Lines 42-48 use C4::Biblio qw( Link Here
42
    GetMarcISBN
42
    GetMarcISBN
43
    GetMarcISSN
43
    GetMarcISSN
44
    GetMarcSeries
44
    GetMarcSeries
45
    GetMarcSubjects
46
    GetMarcUrls
45
    GetMarcUrls
47
);
46
);
48
use C4::Tags qw( get_tags );
47
use C4::Tags qw( get_tags );
Lines 778-783 if (scalar(@itemloop) == 0 || scalar(@otheritemloop) == 0) { Link Here
778
}
777
}
779
778
780
my $marcnotesarray = $biblio->get_marc_notes({ opac => 1, record => $record });
779
my $marcnotesarray = $biblio->get_marc_notes({ opac => 1, record => $record });
780
my $marcsubjctsarray = $biblio->get_marc_subjects;
781
781
782
if( C4::Context->preference('ArticleRequests') ) {
782
if( C4::Context->preference('ArticleRequests') ) {
783
    my $patron = $borrowernumber ? Koha::Patrons->find($borrowernumber) : undef;
783
    my $patron = $borrowernumber ? Koha::Patrons->find($borrowernumber) : undef;
Lines 793-798 if( C4::Context->preference('ArticleRequests') ) { Link Here
793
my $norequests = ! $biblio->items->filter_by_for_hold->count;
793
my $norequests = ! $biblio->items->filter_by_for_hold->count;
794
    $template->param(
794
    $template->param(
795
                     MARCNOTES               => $marcnotesarray,
795
                     MARCNOTES               => $marcnotesarray,
796
                     MARCSUBJCTS             => $marcsubjctsarray,
796
                     norequests              => $norequests,
797
                     norequests              => $norequests,
797
                     itemdata_ccode          => $itemfields{ccode},
798
                     itemdata_ccode          => $itemfields{ccode},
798
                     itemdata_materials      => $itemfields{materials},
799
                     itemdata_materials      => $itemfields{materials},
(-)a/opac/opac-sendbasket.pl (-3 lines)
Lines 24-32 use Encode; Link Here
24
use Carp qw( carp );
24
use Carp qw( carp );
25
use Try::Tiny qw( catch try );
25
use Try::Tiny qw( catch try );
26
26
27
use C4::Biblio qw(
28
  GetMarcSubjects
29
);
30
use C4::Auth qw( get_template_and_user );
27
use C4::Auth qw( get_template_and_user );
31
use C4::Output qw( output_html_with_http_headers );
28
use C4::Output qw( output_html_with_http_headers );
32
use C4::Templates;
29
use C4::Templates;
(-)a/opac/opac-sendshelf.pl (-1 lines)
Lines 28-34 use C4::Auth qw( get_template_and_user ); Link Here
28
use C4::Biblio qw(
28
use C4::Biblio qw(
29
  GetFrameworkCode
29
  GetFrameworkCode
30
  GetMarcISBN
30
  GetMarcISBN
31
  GetMarcSubjects
32
);
31
);
33
use C4::Output qw( output_html_with_http_headers );
32
use C4::Output qw( output_html_with_http_headers );
34
use Koha::Biblios;
33
use Koha::Biblios;
(-)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 GetMarcControlnumber GetMarcISBN GetMarcISSN 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 88-99 warning_is { $ret = GetMarcISSN() } Link Here
88
88
89
ok( !defined $ret, 'GetMarcISSN returns undef if not passed rec');
89
ok( !defined $ret, 'GetMarcISSN returns undef if not passed rec');
90
90
91
warning_is { $ret = GetMarcSubjects() }
92
           { carped => 'GetMarcSubjects called on undefined record'},
93
           "GetMarcSubjects returns carped warning on undef record";
94
95
ok( !defined $ret, 'GetMarcSubjects returns undef if not passed rec');
96
97
warning_is { $ret = GetMarcUrls() }
91
warning_is { $ret = GetMarcUrls() }
98
           { carped => 'GetMarcUrls called on undefined record'},
92
           { carped => 'GetMarcUrls called on undefined record'},
99
           "GetMarcUrls returns carped warning on undef record";
93
           "GetMarcUrls returns carped warning on undef record";
(-)a/t/db_dependent/Koha/Biblio.t (-1 / +30 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 23; # +1
20
use Test::More tests => 24; # +1
21
use Test::Exception;
21
use Test::Exception;
22
use Test::Warn;
22
use Test::Warn;
23
23
Lines 1088-1093 subtest 'item_groups() tests' => sub { Link Here
1088
    $schema->storage->txn_rollback;
1088
    $schema->storage->txn_rollback;
1089
};
1089
};
1090
1090
1091
subtest 'get_marc_subjects() tests' => sub {
1092
1093
    plan tests => 1;
1094
1095
    $schema->storage->txn_begin;
1096
1097
    my $biblio = $builder->build_sample_biblio;
1098
    my $record = $biblio->metadata->record;
1099
    t::lib::Mocks::mock_preference( 'marcflavour', 'MARC21' );
1100
1101
    # add author information
1102
    my $field = MARC::Field->new('600','1','0','a' => 'Nixon, Richard M.');
1103
    $record->append_fields($field);
1104
    $field = MARC::Field->new('600','1','0','q' => '(Richard Milhouse),');
1105
    $record->append_fields($field);
1106
    $field = MARC::Field->new('600','1','0','d' => '1913-');
1107
    $record->append_fields($field);
1108
    $field = MARC::Field->new('600','1','0','x' => 'Psychology.');
1109
    $record->append_fields($field);
1110
1111
    # get record
1112
    C4::Biblio::ModBiblio( $record, $biblio->id );
1113
    $biblio = Koha::Biblios->find( $biblio->id );
1114
1115
    is( @{$biblio->get_marc_subjects}, 4, 'get_marc_subjects retrieves correct number of subject subfields' );
1116
1117
    $schema->storage->txn_rollback;
1118
};
1119
1091
sub component_record1 {
1120
sub component_record1 {
1092
    my $marc = MARC::Record->new;
1121
    my $marc = MARC::Record->new;
1093
    $marc->append_fields(
1122
    $marc->append_fields(
(-)a/virtualshelves/sendshelf.pl (-2 lines)
Lines 27-33 use Try::Tiny qw( catch try ); Link Here
27
use C4::Auth qw( get_template_and_user );
27
use C4::Auth qw( get_template_and_user );
28
use C4::Biblio qw(
28
use C4::Biblio qw(
29
  GetMarcISBN
29
  GetMarcISBN
30
  GetMarcSubjects
31
);
30
);
32
use C4::Output qw(
31
use C4::Output qw(
33
  output_html_with_http_headers
32
  output_html_with_http_headers
34
- 

Return to bug 27269