if($marcflavour eq 'MARC21') {
my $s3 = $field->subfield('3');
my $link = $field->subfield('y');
- warn $url;
unless($url =~ /^\w+:/) {
- warn $field->indicator(1);
if($field->indicator(1) eq '7') {
$url = $field->subfield('2') . "://" . $url;
} elsif ($field->indicator(1) eq '1') {
L<$record> = TransformHtmlToMarc(L<$params>,L<$cgi>)
L<$params> is a ref to an array as below:
{
- 'tag_010_indicator_531951' ,
+ 'tag_010_indicator1_531951' ,
+ 'tag_010_indicator2_531951' ,
'tag_010_code_a_531951_145735' ,
'tag_010_subfield_a_531951_145735' ,
- 'tag_200_indicator_873510' ,
+ 'tag_200_indicator1_873510' ,
+ 'tag_200_indicator2_873510' ,
'tag_200_code_a_873510_673465' ,
'tag_200_subfield_a_873510_673465' ,
'tag_200_code_b_873510_704318' ,
sub TransformHtmlToMarc {
my $params = shift;
my $cgi = shift;
-
+
+ # explicitly turn on the UTF-8 flag for all
+ # 'tag_' parameters to avoid incorrect character
+ # conversion later on
+ my $cgi_params = $cgi->Vars;
+ foreach my $param_name (keys %$cgi_params) {
+ if ($param_name =~ /^tag_/) {
+ my $param_value = $cgi_params->{$param_name};
+ if (utf8::decode($param_value)) {
+ $cgi_params->{$param_name} = $param_value;
+ }
+ # FIXME - need to do something if string is not valid UTF-8
+ }
+ }
+
# creating a new record
my $record = MARC::Record->new();
my $i=0;
}
push @fields,$newfield if($newfield);
}
- elsif ($param =~ /^tag_(\d*)_indicator_/){ # new field start when having 'input name="..._indicator_..."
+ elsif ($param =~ /^tag_(\d*)_indicator1_/){ # new field start when having 'input name="..._indicator1_..."
my $tag = $1;
my $ind1 = substr($cgi->param($param),0,1);
- my $ind2 = substr($cgi->param($param),1,1);
+ my $ind2 = substr($cgi->param($params->[$i+1]),0,1);
$newfield=0;
- my $j=$i+1;
+ my $j=$i+2;
if($tag < 10){ # no code for theses fields
# in MARC editor, 000 contains the leader.
if ($tag eq '000' ) {
$record->leader($cgi->param($params->[$j+1])) if length($cgi->param($params->[$j+1]))==24;
# between 001 and 009 (included)
- } else {
+ } elsif ($cgi->param($params->[$j+1]) ne '') {
$newfield = MARC::Field->new(
$tag,
$cgi->param($params->[$j+1]),
while($params->[$j] =~ /_code_/){ # browse all it's subfield
my $inner_param = $params->[$j];
if ($newfield){
- if($cgi->param($params->[$j+1])){ # only if there is a value (code => value)
+ if($cgi->param($params->[$j+1]) ne ''){ # only if there is a value (code => value)
$newfield->add_subfields(
$cgi->param($inner_param) => $cgi->param($params->[$j+1])
);
}
} else {
- if ( $cgi->param($params->[$j+1]) ) { # creating only if there is a value (code => value)
+ if ( $cgi->param($params->[$j+1]) ne '' ) { # creating only if there is a value (code => value)
$newfield = MARC::Field->new(
$tag,
''.$ind1,