partial work for repetable fields.

Near each field is a +
If you click on it, it's duplicated.
TODO :
* cc the + to each tab (for instance, only in tab 0)
* doing the french template
* fixing an annoying bug : everything is stored in the same field :
200$a$b$c$a$b$c and not
200$a$b$c
200$a$b$c
 as expected.
This commit is contained in:
tipaul 2003-06-19 16:38:49 +00:00
parent 94ac73b0d3
commit 28b099f89e
2 changed files with 155 additions and 82 deletions

View file

@ -30,7 +30,8 @@ use C4::Koha; # XXX subfield_is_koha_internal_p
use HTML::Template;
use MARC::File::USMARC;
use vars qw( $tagslib );
use vars qw( $tagslib);
use vars qw( $authorised_values_sth);
use vars qw( $is_a_modif );
=item find_value
@ -102,7 +103,7 @@ sub MARCfindbreeding {
=cut
sub build_authorized_values_list ($$$$$) {
my($tag, $subfield, $value, $dbh, $authorised_values_sth) = @_;
my($tag, $subfield, $value, $dbh,$authorised_values_sth) = @_;
my @authorised_values;
my %authorised_lib;
@ -154,6 +155,36 @@ sub build_authorized_values_list ($$$$$) {
-multiple => 0 );
}
=item create_input
builds the <input ...> entry for a subfield.
=cut
sub create_input () {
my ($tag,$subfield,$value,$i,$tabloop,$rec,$authorised_values_sth) = @_;
my $dbh = C4::Context->dbh;
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};
$subfield_data{kohafield}=$tagslib->{$tag}->{$subfield}->{kohafield};
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,$rec,$tagslib,$i,$tabloop);
my ($function_name,$javascript) = plugin_javascript($dbh,$rec,$tagslib,$i,$tabloop);
$subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$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\" value=\"$value\" size=50 maxlength=255>"; #"
}
return \%subfield_data;
}
sub build_tabs ($$$$) {
my($template, $record, $dbh,$encoding) = @_;
@ -161,91 +192,72 @@ sub build_tabs ($$$$) {
my @loop_data =();
my $tag;
my $i=0;
my $authorised_values_sth = $dbh->prepare("select authorised_value,lib
from authorised_values
where category=? order by authorised_value");
my $authorised_values_sth = $dbh->prepare("select authorised_value,lib
from authorised_values
where category=? order by authorised_value");
# loop through each tab 0 through 9
for (my $tabloop = 0; $tabloop <= 9; $tabloop++) {
# 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);
# if breeding is not empty
# loop through each tab 0 through 9
for (my $tabloop = 0; $tabloop <= 9; $tabloop++) {
my @loop_data = ();
foreach my $tag (sort(keys (%{$tagslib}))) {
my $previous_tag = '';
my $indicator;
# if MARC::Record is not empty => use it as master loop, then add missing subfields that should be in the tab.
# if MARC::Record is empty => use tab as master loop.
if ($record ne -1) {
my ($x,@value) = find_value($tag,$subfield,$record,$encoding);
push (@value,"") if ($#value eq -1);
foreach my $value (@value) {
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};
$subfield_data{kohafield}=$tagslib->{$tag}->{$subfield}->{kohafield};
$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";
my @fields = $record->field($tag);
foreach my $field (@fields) {
my @subfields_data;
if ($tag<10) {
my $value=$field->data();
my $subfield="@";
push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$record,$authorised_values_sth));
$i++;
} else {
$subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=50 maxlength=255>";
my @subfields=$field->subfields();
foreach my $subfieldcount (0..$#subfields) {
my $subfield=$subfields[$subfieldcount][0];
my $value=$subfields[$subfieldcount][1];
next if subfield_is_koha_internal_p($subfield);
next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$record,$authorised_values_sth));
$i++;
}
}
# now, loop again to add parameter subfield that are not in the MARC::Record
foreach my $subfield (sort( keys %{$tagslib->{$tag}})) {
next if subfield_is_koha_internal_p($subfield);
next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
next if (defined($record->field($tag)->subfield($subfield)));
push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$record,$authorised_values_sth));
$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 breeding is empty
# if breeding is empty
} else {
my ($x,$value);
($x,$value) = find_value($tag,$subfield,$record,$encoding) if ($record ne -1);
# $value=char_decode($value) unless ($is_a_modif);
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};
$subfield_data{kohafield}=$tagslib->{$tag}->{$subfield}->{kohafield};
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);
my @subfields_data;
foreach my $subfield (sort(keys %{$tagslib->{$tag}})) {
next if subfield_is_koha_internal_p($subfield);
next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$record,$authorised_values_sth));
$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);
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);
@ -347,6 +359,61 @@ if ($op eq "addbiblio") {
print $input->redirect("additem.pl?bibid=$bibid");
exit;
#------------------------------------------------------------------------------------------------------------------------------
} elsif ($op eq "addfield") {
#------------------------------------------------------------------------------------------------------------------------------
my $addedfield = $input->param('addfield_field');
my @tags = $input->param('tag');
my @subfields = $input->param('subfield');
my @values = $input->param('field_value');
# build indicator hash.
my @ind_tag = $input->param('ind_tag');
my @indicator = $input->param('indicator');
splice(@tags,$addedfield,0,$tags[$addedfield]);
splice(@subfields,$addedfield,0,$subfields[$addedfield]);
splice(@values,$addedfield,0,$values[$addedfield]);
splice(@ind_tag,$addedfield,0,$ind_tag[$addedfield]);
my %indicators;
for (my $i=0;$i<=$#ind_tag;$i++) {
$indicators{$ind_tag[$i]} = $indicator[$i];
}
# search the part of the array to duplicate.
my $start=0;
my $end=0;
my $started;
for (my $i=0;$i<=$#tags;$i++) {
$start=$i if ($start eq 0 && $tags[$i] == $addedfield);
$end=$i if ($start>0 && $tags[$i] eq $addedfield);
last if ($start>0 && $tags[$i] ne $addedfield);
}
# add an empty line in all arrays. This forces a new field in MARC::Record.
splice(@tags,$end+1,0,'');
splice(@subfields,$end+1,0,'');
splice(@values,$end+1,0,'');
splice(@ind_tag,$end+1,0,'');
splice(@indicator,$end+1,0,'');
# then duplicate the field.
splice(@tags,$end+2,0,@tags[$start..$end]);
splice(@subfields,$end+2,0,@subfields[$start..$end]);
splice(@values,$end+2,0,@values[$start..$end]);
splice(@ind_tag,$end+2,0,@ind_tag[$start..$end]);
splice(@indicator,$end+2,0,@indicator[$start..$end]);
my %indicators;
for (my $i=0;$i<=$#ind_tag;$i++) {
$indicators{$ind_tag[$i]} = $indicator[$i];
}
my $record = MARChtml2marc($dbh,\@tags,\@subfields,\@values,%indicators);
build_tabs ($template, $record, $dbh,$encoding);
build_hidden_data;
$template->param(
oldbiblionumber => $oldbiblionumber,
bibid => $bibid,
oldbiblionumtagfield => $oldbiblionumtagfield,
oldbiblionumtagsubfield => $oldbiblionumtagsubfield,
oldbiblioitemnumtagfield => $oldbiblioitemnumtagfield,
oldbiblioitemnumtagsubfield => $oldbiblioitemnumtagsubfield,
oldbiblioitemnumber => $oldbiblioitemnumber );
#------------------------------------------------------------------------------------------------------------------------------
} else {
#------------------------------------------------------------------------------------------------------------------------------
build_tabs ($template, $record, $dbh,$encoding);

View file

@ -7,7 +7,7 @@
font-size:10pt;}
</STYLE-->
<form method="post" name="f">
<form method="post" name="f_add">
<table width=100% cellspacing=0 cellpadding=5 border=1>
<tr background="<TMPL_VAR name="themelang">/images/background-mem.gif">
<th>MARC biblio : <TMPL_VAR name="bibid"></th>
@ -27,6 +27,7 @@
<td width=9% align="center"><a href="javascript:active(8)"><div id="link8">8</div></a></td>
<td width=9% align="center"><a href="javascript:active(9)"><div id="link9">9</div></a></td>
<td width=10% align="center"><input type="hidden" name="op" value="addbiblio">
<input type="hidden" name="addfield_field">
<input type="hidden" name="oldbiblionumber" value="<TMPL_VAR name="oldbiblionumber">">
<input type="button" value="Add biblio" onClick='Check(this.form)' accesskey="w">
<a href="javascript:PopupZ3950()">z3950 search</a>
@ -39,7 +40,7 @@
<DIV name="0XX" id="0XX" style="position:absolute;visibility:visible;width:90%">
<table width=100% cellspacing=0 cellpadding=2 border=0>
<TMPL_LOOP name="0XX">
<tr background="<TMPL_VAR name="themelang">/images/background-mem.gif"><td colspan=4><b><TMPL_VAR name="tag"> <input type="hidden" name="ind_tag" value="<TMPL_VAR name="tag">"><input type="text" name="indicator" size=3 maxlength=2 value="<TMPL_VAR name="indicator">"> - <tmpl_var name="tag_lib"></td></tr>
<tr background="<TMPL_VAR name="themelang">/images/background-mem.gif"><td colspan=4><b><TMPL_VAR name="tag"> <input type="hidden" name="ind_tag" value="<TMPL_VAR name="tag">"><input type="text" name="indicator" size=3 maxlength=2 value="<TMPL_VAR name="indicator">"> - <tmpl_var name="tag_lib"> <a href="javascript:AddField(<TMPL_VAR name="tag">)">+</a></td></tr>
<TMPL_LOOP name="subfield_loop">
<tr>
<td width="3%">&nbsp;</td>
@ -369,7 +370,7 @@ function Check(f) {
alertString2 += "- "+ total_missing_mandatory_subfields +" mandatory fields empty (see bold subfields)";
alert(alertString2);
} else {
document.f.submit();
document.forms[0].submit();
}
}
function Dopop(link,i) {
@ -396,6 +397,11 @@ function PopupZ3950(link,i) {
newin=window.open("../z3950/search.pl?bibid=<TMPL_VAR name="bibid">"+strQuery,"z3950 search",'width=500,height=400,toolbar=false,scrollbars=yes');
}
function AddField(field) {
document.forms[0].op.value = "addfield";
document.forms[0].addfield_field.value=field;
document.f_add.submit();
}
</script>
</body>
</html>