[Koha-cvs] CVS: koha/acqui.simple addbiblio.pl,1.27,1.28

Paul POULAIN tipaul at users.sourceforge.net
Thu Jun 19 18:38:52 CEST 2003


Update of /cvsroot/koha/koha/acqui.simple
In directory sc8-pr-cvs1:/tmp/cvs-serv9765/acqui.simple

Modified Files:
	addbiblio.pl 
Log Message:
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.

Index: addbiblio.pl
===================================================================
RCS file: /cvsroot/koha/koha/acqui.simple/addbiblio.pl,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -r1.27 -r1.28
*** addbiblio.pl	17 Jun 2003 11:21:13 -0000	1.27
--- addbiblio.pl	19 Jun 2003 16:38:50 -0000	1.28
***************
*** 31,35 ****
  use MARC::File::USMARC;
  
! use vars qw( $tagslib );
  use vars qw( $is_a_modif );
  
--- 31,36 ----
  use MARC::File::USMARC;
  
! use vars qw( $tagslib);
! use vars qw( $authorised_values_sth);
  use vars qw( $is_a_modif );
  
***************
*** 103,107 ****
  
  sub build_authorized_values_list ($$$$$) {
!     my($tag, $subfield, $value, $dbh, $authorised_values_sth) = @_;
  
      my @authorised_values;
--- 104,108 ----
  
  sub build_authorized_values_list ($$$$$) {
!     my($tag, $subfield, $value, $dbh,$authorised_values_sth) = @_;
  
      my @authorised_values;
***************
*** 155,158 ****
--- 156,189 ----
  }
  
+ =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) = @_;
***************
*** 162,250 ****
      my $tag;
      my $i=0;
!     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
  			if ($record ne -1) {
! 				my ($x, at 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";
  					} else {
! 						$subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=50 maxlength=255>";
  					}
- 					push(@subfields_data, \%subfield_data);
- 					$i++;
  				}
! 		# 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);
  					$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);
  			}
  		}
--- 193,262 ----
      my $tag;
      my $i=0;
! 	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 @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 @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 {
! 						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);
  					}
  				}
! 	# if breeding is empty
  			} else {
! 				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);
! 				}
  			}
  		}
***************
*** 347,350 ****
--- 359,417 ----
  	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, at tags[$start..$end]);
+ 	splice(@subfields,$end+2,0, at subfields[$start..$end]);
+ 	splice(@values,$end+2,0, at values[$start..$end]);
+ 	splice(@ind_tag,$end+2,0, at ind_tag[$start..$end]);
+ 	splice(@indicator,$end+2,0, at 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 {





More information about the Koha-cvs mailing list