package C4::Biblio;
# $Id$
# $Log$
+# Revision 1.37 2003/02/12 11:03:03 tipaul
+# Support for 000 -> 010 fields.
+# Those fields doesn't have subfields.
+# In koha, we will use a specific "trick" : fields <10 will have a "virtual" subfield : "@".
+# Note it's only virtual : when rebuilding the MARC::Record, the koha API handle correctly "@" subfields => the resulting MARC record has a 00x field without subfield.
+#
# Revision 1.36 2003/02/12 11:01:01 tipaul
# Support for 000 -> 010 fields.
# Those fields doesn't have subfields.
$previndicator.=" ";
my $field;
if ($prevtag <10) {
- warn "add < $prevtag";
$record->add_fields((sprintf "%03s",$prevtag),%subfieldlist->{'@'});
} else {
$field = MARC::Field->new( (sprintf "%03s",$prevtag), substr($previndicator,0,1), substr($previndicator,1,1), %subfieldlist);
my $subfieldid=&MARCfindsubfieldid($dbh,$bibid,$field->tag(),$tagorder,@$subfield[0],$subfieldorder);
# warn "changing : $subfieldid, $bibid,".$field->tag(),",$tagorder,@$subfield[0],@$subfield[1],$subfieldorder";
&MARCmodsubfield($dbh,$subfieldid,@$subfield[1]);
- } else {
-#FIXME ???
- warn "nothing to change : ".$oldfield->subfield(@$subfield[0]);
}
}
}
sub MARChtml2marc {
my ($dbh,$rtags,$rsubfields,$rvalues,%indicators) = @_;
my $prevtag = @$rtags[0];
- warn "prev : $prevtag";
my $record = MARC::Record->new();
my %subfieldlist={};
for (my $i=0; $i< @$rtags; $i++) {
sub find_value {
my ($tagfield,$insubfield,$record) = @_;
-# warn "$tagfield / $insubfield // ";
my $result;
my $indicator;
- foreach my $field ($record->field($tagfield)) {
- my @subfields = $field->subfields();
- foreach my $subfield (@subfields) {
- if (@$subfield[0] eq $insubfield) {
- $result .= @$subfield[1];
- $indicator = $field->indicator(1).$field->indicator(2);
+ if ($tagfield <10) {
+ $result = $record->field($tagfield)->data();
+ } else {
+ foreach my $field ($record->field($tagfield)) {
+ my @subfields = $field->subfields();
+ foreach my $subfield (@subfields) {
+ if (@$subfield[0] eq $insubfield) {
+ $result .= @$subfield[1];
+ $indicator = $field->indicator(1).$field->indicator(2);
+ }
}
}
}
# my @fields = $record->fields();
my @loop_data = ();
foreach my $tag (sort(keys (%{$tagslib}))) {
- my $previous_tag = '';
- my @subfields_data;
- my $indicator;
-
- # loop through each subfield
- foreach my $subfield (sort(keys %{$tagslib->{$tag}})) {
- next if subfield_is_koha_internal_p($subfield);
- next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
- my %subfield_data;
- $subfield_data{tag}=$tag;
- $subfield_data{subfield}=$subfield;
- $subfield_data{marc_lib}="<DIV id=\"error$i\">".$tagslib->{$tag}->{$subfield}->{lib}."</div>";
- $subfield_data{tag_mandatory}=$tagslib->{$tag}->{mandatory};
- $subfield_data{mandatory}=$tagslib->{$tag}->{$subfield}->{mandatory};
- $subfield_data{repeatable}=$tagslib->{$tag}->{$subfield}->{repeatable};
- # if breeding is not empty
- if ($record ne -1) {
- my ($x,$value) = find_value($tag,$subfield,$record);
- $value=char_decode($value) unless ($is_a_modif);
- $indicator = $x if $x; #XXX
- if ($tagslib->{$tag}->{$subfield}->{authorised_value}) {
- $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh, $authorised_values_sth);
- } elsif ($tagslib->{$tag}->{$subfield}->{thesaurus_category}) {
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" size=47 maxlength=255> <a href=\"javascript:Dopop('../thesaurus_popup.pl?category=$tagslib->{$tag}->{$subfield}->{thesaurus_category}&index=$i',$i)\">...</a>"; #"
- } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) {
- my $plugin="../value_builder/".$tagslib->{$tag}->{$subfield}->{'value_builder'};
- require $plugin;
- my $extended_param = plugin_parameters($dbh,$record,$tagslib,$i,$tabloop);
- my ($function_name,$javascript) = plugin_javascript($dbh,$record,$tagslib,$i,$tabloop);
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=47 maxlength=255 OnFocus=\"javascript:Focus$function_name($i)\" OnBlur=\"javascript:Blur$function_name($i)\"> <a href=\"javascript:Clic$function_name($i)\">...</a> $javascript";
- } else {
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=50 maxlength=255>";
- }
-
+ my $previous_tag = '';
+ my @subfields_data;
+ my $indicator;
+
+ # loop through each subfield
+ foreach my $subfield (sort(keys %{$tagslib->{$tag}})) {
+ next if subfield_is_koha_internal_p($subfield);
+ next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
+ my %subfield_data;
+ $subfield_data{tag}=$tag;
+ $subfield_data{subfield}=$subfield;
+ $subfield_data{marc_lib}="<DIV id=\"error$i\">".$tagslib->{$tag}->{$subfield}->{lib}."</div>";
+ $subfield_data{tag_mandatory}=$tagslib->{$tag}->{mandatory};
+ $subfield_data{mandatory}=$tagslib->{$tag}->{$subfield}->{mandatory};
+ $subfield_data{repeatable}=$tagslib->{$tag}->{$subfield}->{repeatable};
+ # if breeding is not empty
+ if ($record ne -1) {
+ my ($x,$value) = find_value($tag,$subfield,$record);
+ $value=char_decode($value) unless ($is_a_modif);
+ $indicator = $x if $x; #XXX
+ if ($tagslib->{$tag}->{$subfield}->{authorised_value}) {
+ $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh, $authorised_values_sth);
+ } elsif ($tagslib->{$tag}->{$subfield}->{thesaurus_category}) {
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" size=47 maxlength=255> <a href=\"javascript:Dopop('../thesaurus_popup.pl?category=$tagslib->{$tag}->{$subfield}->{thesaurus_category}&index=$i',$i)\">...</a>"; #"
+ } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) {
+ my $plugin="../value_builder/".$tagslib->{$tag}->{$subfield}->{'value_builder'};
+ require $plugin;
+ my $extended_param = plugin_parameters($dbh,$record,$tagslib,$i,$tabloop);
+ my ($function_name,$javascript) = plugin_javascript($dbh,$record,$tagslib,$i,$tabloop);
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=47 maxlength=255 OnFocus=\"javascript:Focus$function_name($i)\" OnBlur=\"javascript:Blur$function_name($i)\"> <a href=\"javascript:Clic$function_name($i)\">...</a> $javascript";
+ } else {
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=50 maxlength=255>";
+ }
# if breeding is empty
- } else {
- my ($x,$value);
- ($x,$value) = find_value($tag,$subfield,$record) if ($record ne -1);
- $value=char_decode($value) unless ($is_a_modif);
- if ($tagslib->{$tag}->{$subfield}->{authorised_value}) {
- $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh, $authorised_values_sth);
- } elsif ($tagslib->{$tag}->{$subfield}->{thesaurus_category}) {
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" size=47 maxlength=255 DISABLE READONLY> <a href=\"javascript:Dopop('../thesaurus_popup.pl?category=$tagslib->{$tag}->{$subfield}->{thesaurus_category}&index=$i',$i)\">...</a>";
- } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) {
- my $plugin="../value_builder/".$tagslib->{$tag}->{$subfield}->{'value_builder'};
- require $plugin;
- my $extended_param = plugin_parameters($dbh,$record,$tagslib,$i,$tabloop);
- my ($function_name,$javascript) = plugin_javascript($dbh,$record,$tagslib,$i,$tabloop);
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" DISABLE READONLY size=47 maxlength=255 OnFocus=\"javascript:Focus$function_name($i)\" OnBlur=\"javascript:Blur$function_name($i)\"> <a href=\"javascript:Clic$function_name($i)\">...</a> $javascript";
- } else {
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" size=50 maxlength=255>";
- }
+ } else {
+ my ($x,$value);
+ ($x,$value) = find_value($tag,$subfield,$record) if ($record ne -1);
+ $value=char_decode($value) unless ($is_a_modif);
+ if ($tagslib->{$tag}->{$subfield}->{authorised_value}) {
+ $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh, $authorised_values_sth);
+ } elsif ($tagslib->{$tag}->{$subfield}->{thesaurus_category}) {
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" size=47 maxlength=255 DISABLE READONLY> <a href=\"javascript:Dopop('../thesaurus_popup.pl?category=$tagslib->{$tag}->{$subfield}->{thesaurus_category}&index=$i',$i)\">...</a>";
+ } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) {
+ my $plugin="../value_builder/".$tagslib->{$tag}->{$subfield}->{'value_builder'};
+ require $plugin;
+ my $extended_param = plugin_parameters($dbh,$record,$tagslib,$i,$tabloop);
+ my ($function_name,$javascript) = plugin_javascript($dbh,$record,$tagslib,$i,$tabloop);
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" DISABLE READONLY size=47 maxlength=255 OnFocus=\"javascript:Focus$function_name($i)\" OnBlur=\"javascript:Blur$function_name($i)\"> <a href=\"javascript:Clic$function_name($i)\">...</a> $javascript";
+ } else {
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" size=50 maxlength=255>";
+ }
+ }
+ push(@subfields_data, \%subfield_data);
+ $i++;
+ }
+ if ($#subfields_data >= 0) {
+ my %tag_data;
+ $tag_data{tag} = $tag;
+ $tag_data{tag_lib} = $tagslib->{$tag}->{lib};
+ $tag_data{indicator} = $indicator;
+ $tag_data{subfield_loop} = \@subfields_data;
+ push (@loop_data, \%tag_data);
+ }
}
- push(@subfields_data, \%subfield_data);
- $i++;
- }
- if ($#subfields_data >= 0) {
- my %tag_data;
- $tag_data{tag} = $tag;
- $tag_data{tag_lib} = $tagslib->{$tag}->{lib};
- $tag_data{indicator} = $indicator;
- $tag_data{subfield_loop} = \@subfields_data;
- push (@loop_data, \%tag_data);
- }
+ $template->param($tabloop."XX" =>\@loop_data);
}
- $template->param($tabloop."XX" =>\@loop_data);
- }
}
$tagslib = &MARCgettagslib($dbh,1);
my $record=-1;
$record = MARCgetbiblio($dbh,$bibid) if ($bibid);
-#warn "1= ".$record->as_formatted;
$record = MARCfindbreeding($dbh,$breedingid) if ($breedingid);
$is_a_modif=0;
my ($oldbiblionumtagfield,$oldbiblionumtagsubfield);