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

(-)a/C4/Biblio.pm (-2 / +6 lines)
Lines 1023-1038 sub GetMarcFromKohaField { Link Here
1023
1023
1024
=head2 GetMarcBiblio
1024
=head2 GetMarcBiblio
1025
1025
1026
  my $record = GetMarcBiblio($biblionumber);
1026
  my $record = GetMarcBiblio($biblionumber, [$embeditems]);
1027
1027
1028
Returns MARC::Record representing bib identified by
1028
Returns MARC::Record representing bib identified by
1029
C<$biblionumber>.  If no bib exists, returns undef.
1029
C<$biblionumber>.  If no bib exists, returns undef.
1030
The MARC record contains both biblio & item data.
1030
C<$embeditems>.  If set to true, items data are included.
1031
The MARC record contains biblio data, and items data if $embeditems is set to true.
1031
1032
1032
=cut
1033
=cut
1033
1034
1034
sub GetMarcBiblio {
1035
sub GetMarcBiblio {
1035
    my $biblionumber = shift;
1036
    my $biblionumber = shift;
1037
    my $embeditems   = shift || 0;
1036
    my $dbh          = C4::Context->dbh;
1038
    my $dbh          = C4::Context->dbh;
1037
    my $sth          = $dbh->prepare("SELECT marcxml FROM biblioitems WHERE biblionumber=? ");
1039
    my $sth          = $dbh->prepare("SELECT marcxml FROM biblioitems WHERE biblionumber=? ");
1038
    $sth->execute($biblionumber);
1040
    $sth->execute($biblionumber);
Lines 1046-1051 sub GetMarcBiblio { Link Here
1046
        if ($@) { warn " problem with :$biblionumber : $@ \n$marcxml"; }
1048
        if ($@) { warn " problem with :$biblionumber : $@ \n$marcxml"; }
1047
        return unless $record;
1049
        return unless $record;
1048
1050
1051
	C4::Biblio::EmbedItemsInMarcBiblio($record, $biblionumber) if ($embeditems);
1052
1049
        #      $record = MARC::Record::new_from_usmarc( $marc) if $marc;
1053
        #      $record = MARC::Record::new_from_usmarc( $marc) if $marc;
1050
        return $record;
1054
        return $record;
1051
    } else {
1055
    } else {
(-)a/C4/Charset.pm (-3 / +5 lines)
Lines 112-118 sub IsStringUTF8ish { Link Here
112
112
113
=head2 SetUTF8Flag
113
=head2 SetUTF8Flag
114
114
115
  my $marc_record = SetUTF8Flag($marc_record);
115
  my $marc_record = SetUTF8Flag($marc_record, $nfd);
116
116
117
This function sets the PERL UTF8 flag for data.
117
This function sets the PERL UTF8 flag for data.
118
It is required when using new_from_usmarc 
118
It is required when using new_from_usmarc 
Lines 120-125 since MARC::File::USMARC does not handle PERL UTF8 setting. Link Here
120
When editing unicode marc records fields and subfields, you
120
When editing unicode marc records fields and subfields, you
121
would end up in double encoding without using this function. 
121
would end up in double encoding without using this function. 
122
122
123
If $nfd is set, string normalization will use NFD instead of NFC
124
123
FIXME
125
FIXME
124
In my opinion, this function belongs to MARC::Record and not
126
In my opinion, this function belongs to MARC::Record and not
125
to this package.
127
to this package.
Lines 128-140 But since it handles charset, and MARC::Record, it finds its way in that package Link Here
128
=cut
130
=cut
129
131
130
sub SetUTF8Flag{
132
sub SetUTF8Flag{
131
	my ($record)=@_;
133
	my ($record, $nfd)=@_;
132
	return unless ($record && $record->fields());
134
	return unless ($record && $record->fields());
133
	foreach my $field ($record->fields()){
135
	foreach my $field ($record->fields()){
134
		if ($field->tag()>=10){
136
		if ($field->tag()>=10){
135
			my @subfields;
137
			my @subfields;
136
			foreach my $subfield ($field->subfields()){
138
			foreach my $subfield ($field->subfields()){
137
				push @subfields,($$subfield[0],NormalizeString($$subfield[1]));
139
				push @subfields,($$subfield[0],NormalizeString($$subfield[1],$nfd));
138
			}
140
			}
139
			my $newfield=MARC::Field->new(
141
			my $newfield=MARC::Field->new(
140
							$field->tag(),
142
							$field->tag(),
(-)a/C4/Record.pm (-1 / +1 lines)
Lines 359-365 sub marcrecord2csv { Link Here
359
    my $output;
359
    my $output;
360
360
361
    # Getting the record
361
    # Getting the record
362
    my $record = GetMarcBiblio($biblio);
362
    my $record = GetMarcBiblio($biblio, 1);
363
    next unless $record;
363
    next unless $record;
364
    # Getting the framework
364
    # Getting the framework
365
    my $frameworkcode = GetFrameworkCode($biblio);
365
    my $frameworkcode = GetFrameworkCode($biblio);
(-)a/basket/downloadcart.pl (-1 / +1 lines)
Lines 65-71 if ($bib_list && $format) { Link Here
65
65
66
        foreach my $biblio (@bibs) {
66
        foreach my $biblio (@bibs) {
67
67
68
            my $record = GetMarcBiblio($biblio);
68
            my $record = GetMarcBiblio($biblio, 1);
69
69
70
            if ($format eq 'iso2709') {
70
            if ($format eq 'iso2709') {
71
                $output .= $record->as_usmarc();
71
                $output .= $record->as_usmarc();
(-)a/catalogue/export.pl (-10 / +5 lines)
Lines 15-28 my $op=$query->param("op"); Link Here
15
my $format=$query->param("format");
15
my $format=$query->param("format");
16
if ($op eq "export") {
16
if ($op eq "export") {
17
	my $biblionumber = $query->param("bib");
17
	my $biblionumber = $query->param("bib");
18
	my $dbh=C4::Context->dbh;
18
		if ($biblionumber){
19
	my $sth;
19
20
	if ($biblionumber) {
20
			my $marc = GetMarcBiblio($biblionumber, 1);
21
		$sth=$dbh->prepare("SELECT marc FROM biblioitems WHERE biblionumber =?");
22
		$sth->execute($biblionumber);
23
	}
24
	while (my ($marc) = $sth->fetchrow) {
25
		if ($marc){
26
21
27
			if ($format =~ /endnote/) {
22
			if ($format =~ /endnote/) {
28
				$marc = marc2endnote($marc);
23
				$marc = marc2endnote($marc);
Lines 44-55 if ($op eq "export") { Link Here
44
				$marc = $marc->as_usmarc();
39
				$marc = $marc->as_usmarc();
45
			}
40
			}
46
			elsif ($format =~ /utf8/) {
41
			elsif ($format =~ /utf8/) {
47
				#default
42
				C4::Charset::SetUTF8Flag($marc, 1);
43
				$marc = $marc->as_usmarc();
48
			}
44
			}
49
			print $query->header(
45
			print $query->header(
50
				-type => 'application/octet-stream',
46
				-type => 'application/octet-stream',
51
                -attachment=>"bib-$biblionumber.$format");
47
                -attachment=>"bib-$biblionumber.$format");
52
			print $marc;
48
			print $marc;
53
		}
49
		}
54
	}
55
}
50
}
(-)a/opac/opac-downloadcart.pl (-1 / +1 lines)
Lines 64-70 if ($bib_list && $format) { Link Here
64
    } else {
64
    } else {
65
        foreach my $biblio (@bibs) {
65
        foreach my $biblio (@bibs) {
66
66
67
            my $record = GetMarcBiblio($biblio);
67
            my $record = GetMarcBiblio($biblio, 1);
68
            next unless $record;
68
            next unless $record;
69
69
70
            if ($format eq 'iso2709') {
70
            if ($format eq 'iso2709') {
(-)a/opac/opac-downloadshelf.pl (-1 / +1 lines)
Lines 68-74 if ($shelfid && $format) { Link Here
68
        foreach my $biblio (@$items) {
68
        foreach my $biblio (@$items) {
69
            my $biblionumber = $biblio->{biblionumber};
69
            my $biblionumber = $biblio->{biblionumber};
70
70
71
            my $record = GetMarcBiblio($biblionumber);
71
            my $record = GetMarcBiblio($biblionumber, 1);
72
            next unless $record;
72
            next unless $record;
73
73
74
            if ($format eq 'iso2709') {
74
            if ($format eq 'iso2709') {
(-)a/opac/opac-export.pl (-29 / +27 lines)
Lines 35-49 my $op=$query->param("op"); Link Here
35
my $format=$query->param("format");
35
my $format=$query->param("format");
36
if ($op eq "export") {
36
if ($op eq "export") {
37
	my $biblionumber = $query->param("bib");
37
	my $biblionumber = $query->param("bib");
38
	my $dbh=C4::Context->dbh;
38
	my $error;
39
	my $sth;
39
40
	if ($biblionumber) {
40
		if ($biblionumber){
41
		$sth=$dbh->prepare("SELECT marc FROM biblioitems WHERE biblionumber =?");
41
42
		$sth->execute($biblionumber);
42
			my $marc = GetMarcBiblio($biblionumber, 1);
43
	}
44
    my $error;
45
	while (my ($marc) = $sth->fetchrow) {
46
		if ($marc){
47
43
48
			if ($format =~ /endnote/) {
44
			if ($format =~ /endnote/) {
49
				$marc = marc2endnote($marc);
45
				$marc = marc2endnote($marc);
Lines 60-91 if ($op eq "export") { Link Here
60
 			}
56
 			}
61
			elsif ($format =~ /bibtex/) {
57
			elsif ($format =~ /bibtex/) {
62
				$marc = marc2bibtex(C4::Biblio::GetMarcBiblio($biblionumber),$biblionumber);
58
				$marc = marc2bibtex(C4::Biblio::GetMarcBiblio($biblionumber),$biblionumber);
63
			}elsif ($format =~ /dc/) {
59
			}
64
                ($error,$marc) = marc2dcxml($marc,1);
60
			elsif ($format =~ /dc/) {
61
				($error,$marc) = marc2dcxml($marc,1);
65
				$format = "dublin-core.xml";
62
				$format = "dublin-core.xml";
66
			}
63
			}
67
			elsif ($format =~ /marc8/) {
64
			elsif ($format =~ /marc8/) {
68
				($error,$marc) = changeEncoding($marc,"MARC","MARC21","MARC-8");
65
				($error,$marc) = changeEncoding($marc,"MARC","MARC21","MARC-8");
69
                if (! $error){
66
				if (! $error){
70
                    $marc = $marc->as_usmarc();
67
				    $marc = $marc->as_usmarc();
71
                }
68
				}
72
			}
69
			}
73
			elsif ($format =~ /utf8/) {
70
			elsif ($format =~ /utf8/) {
74
				#default
71
				C4::Charset::SetUTF8Flag($marc,1);
72
				$marc = $marc->as_usmarc();
75
			}
73
			}
76
            if ($error){
74
77
                print $query->header();
75
		if ($error){
78
                print $query->start_html();
76
		    print $query->header();
79
                print "<h1>An error occured </h1>";
77
		    print $query->start_html();
80
                print $error;
78
		    print "<h1>An error occured </h1>";
81
                print $query->end_html();
79
		    print $error;
82
            }
80
		    print $query->end_html();
83
            else {
81
		}
84
                print $query->header(
82
		else {
85
				-type => 'application/octet-stream',
83
		    print $query->header(
86
                -attachment=>"bib-$biblionumber.$format");
84
				    -type => 'application/octet-stream',
87
                print $marc;
85
		    -attachment=>"bib-$biblionumber.$format");
88
            }
86
		    print $marc;
89
		}
87
		}
90
	}
88
	    }
91
}
89
}
(-)a/virtualshelves/downloadshelf.pl (-2 / +1 lines)
Lines 68-74 if ($shelfid && $format) { Link Here
68
    foreach my $biblio (@$items) {
68
    foreach my $biblio (@$items) {
69
        my $biblionumber = $biblio->{biblionumber};
69
        my $biblionumber = $biblio->{biblionumber};
70
70
71
        my $record = GetMarcBiblio($biblionumber);
71
        my $record = GetMarcBiblio($biblionumber, 1);
72
72
73
        if ($format eq 'iso2709') {
73
        if ($format eq 'iso2709') {
74
            $output .= $record->as_usmarc();
74
            $output .= $record->as_usmarc();
75
- 

Return to bug 5579