-sub create_input () {
- my ($tag,$subfield,$value,$i,$tabloop,$rec,$authorised_values_sth) = @_;
- $value =~ s/"/"/g;
- my $dbh = C4::Context->dbh;
- my %subfield_data;
- $subfield_data{tag}=$tag;
- $subfield_data{subfield}=$subfield;
- $subfield_data{marc_lib}="<span id=\"error$i\">".$tagslib->{$tag}->{$subfield}->{lib}."</span>";
- $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};
- $subfield_data{index} = $i;
- # it's an authorised field
- if ($tagslib->{$tag}->{$subfield}->{authorised_value}) {
- $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh,$authorised_values_sth);
- # it's a thesaurus / authority field
- } elsif ($tagslib->{$tag}->{$subfield}->{authtypecode}) {
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=\"67\" maxlength=\"255\" DISABLE READONLY /> <a href=\"javascript:Dopop('../authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$i',$i)\">...</a>";
- # it's a plugin field
- } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) {
- # opening plugin. Just check wether we are on a developper computer on a production one
- # (the cgidir differs)
- my $cgidir = C4::Context->intranetdir ."/cgi-bin/value_builder";
- unless (opendir(DIR, "$cgidir")) {
- $cgidir = C4::Context->intranetdir."/value_builder";
- }
- my $plugin=$cgidir."/".$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\" size=\"67\" maxlength=\"255\" OnFocus=\"javascript:Focus$function_name($i)\" OnBlur=\"javascript:Blur$function_name($i)\" /> <a href=\"javascript:Clic$function_name($i)\">...</a> $javascript";
- # it's an hidden field
- } elsif ($tag eq '') {
- $subfield_data{marc_value}="<input type=\"hidden\" name=\"field_value\" value=\"$value\" />";
- } elsif ($tagslib->{$tag}->{$subfield}->{'hidden'}) {
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=\"70\" maxlength=\"255\" DISABLE READONLY />";
- # it's a standard field
- } else {
- if (length($value) >100) {
- $subfield_data{marc_value}="<textarea name=\"field_value\" cols=\"70\" rows=\"5\" >$value</textarea>";
- } else {
- $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=\"70\" />"; #"
- }
- }
- return \%subfield_data;
+
+sub create_input {
+ my ( $tag, $subfield, $value, $index_tag, $tabloop, $rec, $authorised_values_sth,$cgi ) = @_;
+
+ my $index_subfield = CreateKey(); # create a specifique key for each subfield
+
+ $value =~ s/"/"/g;
+
+ # if there is no value provided but a default value in parameters, get it
+ unless ($value) {
+ $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
+
+ # get today date & replace YYYY, MM, DD if provided in the default value
+ my ( $year, $month, $day ) = Today();
+ $month = sprintf( "%02d", $month );
+ $day = sprintf( "%02d", $day );
+ $value =~ s/YYYY/$year/g;
+ $value =~ s/MM/$month/g;
+ $value =~ s/DD/$day/g;
+ }
+ my $dbh = C4::Context->dbh;
+
+ # map '@' as "subfield" label for fixed fields
+ # to something that's allowed in a div id.
+ my $id_subfield = $subfield;
+ $id_subfield = "00" if $id_subfield eq "@";
+
+ my %subfield_data = (
+ tag => $tag,
+ subfield => $id_subfield,
+ marc_lib => substr( $tagslib->{$tag}->{$subfield}->{lib}, 0, 22 ),
+ marc_lib_plain => $tagslib->{$tag}->{$subfield}->{lib},
+ tag_mandatory => $tagslib->{$tag}->{mandatory},
+ mandatory => $tagslib->{$tag}->{$subfield}->{mandatory},
+ repeatable => $tagslib->{$tag}->{$subfield}->{repeatable},
+ kohafield => $tagslib->{$tag}->{$subfield}->{kohafield},
+ index => $index_tag,
+ id => "tag_".$tag."_subfield_".$id_subfield."_".$index_tag."_".$index_subfield,
+ value => $value,
+ random => CreateKey(),
+ );
+
+ if(exists $mandatory_z3950->{$tag.$subfield}){
+ $subfield_data{z3950_mandatory} = $mandatory_z3950->{$tag.$subfield};
+ }
+ # decide if the subfield must be expanded (visible) by default or not
+ # if it is mandatory, then expand. If it is hidden explicitly by the hidden flag, hidden anyway
+ $subfield_data{visibility} = "display:none;"
+ if ( ($tagslib->{$tag}->{$subfield}->{hidden} % 2 == 1) and $value ne ''
+ or ($value eq '' and !$tagslib->{$tag}->{$subfield}->{mandatory})
+ );
+ # always expand all subfields of a mandatory field
+ $subfield_data{visibility} = "" if $tagslib->{$tag}->{mandatory};
+ # it's an authorised field
+ if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) {
+ $subfield_data{marc_value} =
+ build_authorized_values_list( $tag, $subfield, $value, $dbh,
+ $authorised_values_sth,$index_tag,$index_subfield );
+
+ # it's a thesaurus / authority field
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
+ if (C4::Context->preference("BiblioAddsAuthorities")) {
+ $subfield_data{marc_value} =
+ "<input type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ value=\"$value\"
+ class=\"input_marceditor\"
+ tabindex=\"1\"
+ size=\"67\"
+ maxlength=\"255\"
+ \/>
+ <a href=\"#\" class=\"buttonDot\"
+ onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
+ ";
+ } else {
+ $subfield_data{marc_value} =
+ "<input type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ value=\"$value\"
+ class=\"input_marceditor\"
+ tabindex=\"1\"
+ size=\"67\"
+ maxlength=\"255\"
+ disabled=\"true\"
+ \/>
+ <a href=\"#\" class=\"buttonDot\"
+ onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
+ ";
+ }
+ # it's a plugin field
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{'value_builder'} ) {
+
+ # opening plugin. Just check wether we are on a developper computer on a production one
+ # (the cgidir differs)
+ my $cgidir = C4::Context->intranetdir . "/cgi-bin/cataloguing/value_builder";
+ unless ( opendir( DIR, "$cgidir" ) ) {
+ $cgidir = C4::Context->intranetdir . "/cataloguing/value_builder";
+ closedir( DIR );
+ }
+ my $plugin = $cgidir . "/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
+ if (do $plugin) {
+ my $extended_param = plugin_parameters( $dbh, $rec, $tagslib, $subfield_data{id}, $tabloop );
+ my ( $function_name, $javascript ) = plugin_javascript( $dbh, $rec, $tagslib, $subfield_data{id}, $tabloop );
+
+ $subfield_data{marc_value} =
+ "<input tabindex=\"1\"
+ type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ value=\"$value\"
+ class=\"input_marceditor\"
+ onfocus=\"Focus$function_name($index_tag)\"
+ size=\"67\"
+ maxlength=\"255\"
+ onblur=\"Blur$function_name($index_tag); \" \/>
+ <a href=\"#\" class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
+ $javascript";
+ } else {
+ warn "Plugin Failed: $plugin";
+ # supply default input form
+ $subfield_data{marc_value} =
+ "<input type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ value=\"$value\"
+ tabindex=\"1\"
+ size=\"67\"
+ maxlength=\"255\"
+ class=\"input_marceditor\"
+ \/>
+ ";
+ }
+ # it's an hidden field
+ }
+ elsif ( $tag eq '' ) {
+ $subfield_data{marc_value} =
+ "<input tabindex=\"1\"
+ type=\"hidden\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ size=\"67\"
+ maxlength=\"255\"
+ value=\"$value\" \/>
+ ";
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) {
+ $subfield_data{marc_value} =
+ "<input type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ class=\"input_marceditor\"
+ tabindex=\"1\"
+ size=\"67\"
+ maxlength=\"255\"
+ value=\"$value\"
+ \/>";
+
+ # it's a standard field
+ }
+ else {
+ if (
+ length($value) > 100
+ or
+ ( C4::Context->preference("marcflavour") eq "UNIMARC" && $tag >= 300
+ and $tag < 400 && $subfield eq 'a' )
+ or ( $tag >= 500
+ and $tag < 600
+ && C4::Context->preference("marcflavour") eq "MARC21" )
+ )
+ {
+ $subfield_data{marc_value} =
+ "<textarea cols=\"70\"
+ rows=\"4\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ class=\"input_marceditor\"
+ tabindex=\"1\"
+ >$value</textarea>
+ ";
+ }
+ else {
+ $subfield_data{marc_value} =
+ "<input type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"".$subfield_data{id}."\"
+ value=\"$value\"
+ tabindex=\"1\"
+ size=\"67\"
+ maxlength=\"255\"
+ class=\"input_marceditor\"
+ \/>
+ ";
+ }
+ }
+ $subfield_data{'index_subfield'} = $index_subfield;
+ return \%subfield_data;