📄 editconfig.pm
字号:
#$comment =~ s/\n/ /g; $doneParam->{$param} = 1; $tblContent .= fieldEditBuild($ConfigMeta{$param}, $param, $newConf->{$param}, $errors, 0, $comment, $isError, $paramInfo->{onchangeSubmit}, defined($override) ? $param : undef, defined($override) ? $override->{$param} : undef ); if ( defined($paramInfo->{comment}) ) { my $topDir = $bpc->TopDir; my $text = eval("qq($Lang->{$paramInfo->{comment}})"); $tblContent .= <<EOF;<tr><td colspan="2" class="editComment">$text</td></tr>EOF } } # # Emit a summary of all the errors # my $errorTxt; if ( %$errors ) { $errorTxt .= <<EOF;<tr><td colspan="2" class="border"><span class="editError">$Lang->{CfgEdit_Error_No_Save}</span></td></tr>EOF } foreach my $param ( sort(keys(%$errors)) ) { $errorTxt .= <<EOF;<tr><td colspan="2" class="border"><span class="editError">$errors->{$param}</span></td></tr>EOF } $content .= <<EOF;$errorTxt$tblContent</table>EOF # # Emit all the remaining editable config settings as hidden values # foreach my $param ( keys(%ConfigMeta) ) { next if ( $doneParam->{$param} ); next if ( $userHost && (!defined($bpc->{Conf}{CgiUserConfigEdit}{$param}) || (!$PrivAdmin && !$bpc->{Conf}{CgiUserConfigEdit}{$param})) ); $content .= fieldHiddenBuild($ConfigMeta{$param}, $param, $newConf->{$param}, "v" ); if ( defined($override) ) { $content .= <<EOF;<input type="hidden" name="override_$param" value="$override->{$param}">EOF } $doneParam->{$param} = 1; } if ( defined($In{menu}) || $In{saveAction} eq "Save" ) { if ( $In{saveAction} eq "Save" && !$userHost ) { # # Emit the new settings as orig_zZ_ parameters # $doneParam = {}; foreach my $param ( keys(%ConfigMeta) ) { next if ( $doneParam->{$param} ); next if ( $userHost && (!defined($bpc->{Conf}{CgiUserConfigEdit}{$param}) || (!$PrivAdmin && !$bpc->{Conf}{CgiUserConfigEdit}{$param})) ); $contentHidden .= fieldHiddenBuild($ConfigMeta{$param}, $param, $newConf->{$param}, "orig", ); $doneParam->{$param} = 1; $In{modified} = 0; } } else { # # Just switching menus: copy all the orig_zZ_ input parameters # foreach my $var ( keys(%In) ) { next if ( $var !~ /^orig_zZ_/ ); my $val = decode_utf8($In{$var}); $contentHidden .= <<EOF;<input type="hidden" name="$var" value="${EscHTML($val)}">EOF } } } else { # # First time: emit all the original config settings # $doneParam = {}; foreach my $param ( keys(%ConfigMeta) ) { next if ( $doneParam->{$param} ); next if ( $userHost && (!defined($bpc->{Conf}{CgiUserConfigEdit}{$param}) || (!$PrivAdmin && !$bpc->{Conf}{CgiUserConfigEdit}{$param})) ); $contentHidden .= fieldHiddenBuild($ConfigMeta{$param}, $param, $mainConf->{$param}, "orig", ); $doneParam->{$param} = 1; } } $content .= <<EOF;$contentHidden</form></tr></table>EOF Header("Config Edit", $content); Trailer();}sub fieldHiddenBuild{ my($type, $varName, $varValue, $prefix) = @_; my $content; $type = { type => $type } if ( ref($type) ne "HASH" ); if ( $type->{type} eq "list" ) { $varValue = [] if ( !defined($varValue) ); $varValue = [$varValue] if ( ref($varValue) ne "ARRAY" ); for ( my $i = 0 ; $i < @$varValue ; $i++ ) { $content .= fieldHiddenBuild($type->{child}, "${varName}_zZ_$i", $varValue->[$i], $prefix); } } elsif ( $type->{type} eq "hash" || $type->{type} eq "horizHash" ) { $varValue = {} if ( ref($varValue) ne "HASH" ); my(@order, $childType); if ( defined($type->{order}) ) { @order = @{$type->{order}}; } elsif ( defined($type->{child}) ) { @order = sort(keys(%{$type->{child}})); } else { @order = sort(keys(%$varValue)); } foreach my $fld ( @order ) { if ( defined($type->{child}) ) { $childType = $type->{child}{$fld}; } else { $childType = $type->{childType}; # # emit list of fields since they are user-defined # rather than hard-coded # $content .= <<EOF;<input type="hidden" name="vflds.$varName" value="${EscHTML($fld)}">EOF } $content .= fieldHiddenBuild($childType, "${varName}_zZ_$fld", $varValue->{$fld}, $prefix); } } elsif ( $type->{type} eq "shortlist" ) { $varValue = [$varValue] if ( ref($varValue) ne "ARRAY" ); $varValue = join(", ", @$varValue); $content .= <<EOF;<input type="hidden" name="${prefix}_zZ_$varName" value="${EscHTML($varValue)}">EOF } else { $content .= <<EOF;<input type="hidden" name="${prefix}_zZ_$varName" value="${EscHTML($varValue)}">EOF } return $content;}sub fieldEditBuild{ my($type, $varName, $varValue, $errors, $level, $comment, $isError, $onchangeSubmit, $overrideVar, $overrideSet) = @_; my $content; my $size = 50 - 10 * $level; $type = { type => $type } if ( ref($type) ne "HASH" ); $size = $type->{size} if ( defined($type->{size}) ); # # These fragments allow inline content to be turned on and off # # <tr><td colspan="2"><span id="id_$varName" style="display: none" class="editComment">$comment</span></td></tr> # <tr><td class="border"><a href="javascript: displayHelp('$varName')">$varName</a> # if ( $level == 0 ) { my $lcVarName = lc($varName); $content .= <<EOF;<tr><td class="border"><a href="?action=view&type=docs#item__conf_${lcVarName}_">$varName</a>EOF if ( defined($overrideVar) ) { my $override_checked = ""; if ( !$isError && $In{deleteVar} =~ /^\Q${varName}_zZ_/ || !$isError && $In{insertVar} =~ /^\Q${varName}\E(_zZ_|$)/ || !$isError && $In{addVar} =~ /^\Q${varName}\E(_zZ_|$)/ ) { $overrideSet = 1; } if ( $overrideSet ) { $override_checked = "checked"; } $content .= <<EOF;<br><input type="checkbox" name="override_$varName" $override_checked value="1" onClick="checkboxChange('$varName')">\ ${EscHTML($Lang->{CfgEdit_Button_Override})}EOF } $content .= "</td>\n"; } if ( $type->{type} eq "list" ) { $content .= "<td class=\"border\">\n"; $varValue = [] if ( !defined($varValue) ); $varValue = [$varValue] if ( ref($varValue) ne "ARRAY" ); if ( !$isError && $In{deleteVar} =~ /^\Q${varName}_zZ_\E(\d+)$/ && $1 < @$varValue ) { # # User deleted entry in this array # splice(@$varValue, $1, 1) if ( @$varValue > 1 || $type->{emptyOk} ); $In{deleteVar} = ""; } if ( !$isError && $In{insertVar} =~ /^\Q${varName}_zZ_\E(\d+)$/ && $1 < @$varValue ) { # # User inserted entry in this array # splice(@$varValue, $1, 0, "") if ( @$varValue > 1 || $type->{emptyOk} ); $In{insertVar} = ""; } if ( !$isError && $In{addVar} eq $varName ) { # # User added entry to this array # push(@$varValue, undef); $In{addVar} = ""; } $content .= "<table border=\"1\" cellspacing=\"0\">\n"; my $colspan; if ( ref($type) eq "HASH" && ref($type->{child}) eq "HASH" && $type->{child}{type} eq "horizHash" ) { my @order; if ( defined($type->{child}{order}) ) { @order = @{$type->{child}{order}}; } else { @order = sort(keys(%{$type->{child}{child}})); } $content .= "<tr><td class=\"border\"></td>\n"; for ( my $i = 0 ; $i < @order ; $i++ ) { $content .= "<td class=\"tableheader\">$order[$i]</td>\n"; } $colspan = @order + 1; $content .= "</tr>\n"; for ( my $i = 0 ; $i < @$varValue ; $i++ ) { if ( @$varValue > 1 || $type->{emptyOk} ) { $content .= <<EOF;<td class="border"><input type="button" name="del_${varName}_zZ_$i" value="${EscHTML($Lang->{CfgEdit_Button_Delete})}" onClick="deleteSubmit('${varName}_zZ_$i')"></td>EOF } $content .= fieldEditBuild($type->{child}, "${varName}_zZ_$i", $varValue->[$i], $errors, $level + 1, undef, $isError, $onchangeSubmit, $overrideVar, $overrideSet); $content .= "</tr>\n"; } } else { for ( my $i = 0 ; $i < @$varValue ; $i++ ) { $content .= <<EOF;<tr><td class="border"><input type="button" name="ins_${varName}_zZ_$i" value="${EscHTML($Lang->{CfgEdit_Button_Insert})}" onClick="insertSubmit('${varName}_zZ_$i')">EOF if ( @$varValue > 1 || $type->{emptyOk} ) { $content .= <<EOF;<input type="button" name="del_${varName}_zZ_$i" value="${EscHTML($Lang->{CfgEdit_Button_Delete})}" onClick="deleteSubmit('${varName}_zZ_$i')">EOF } $content .= "</td>\n"; $content .= fieldEditBuild($type->{child}, "${varName}_zZ_$i", $varValue->[$i], $errors, $level + 1, undef, $isError, $onchangeSubmit, $overrideVar, $overrideSet); $content .= "</tr>\n"; } $colspan = 2; } $content .= <<EOF;<tr><td class="border" colspan="$colspan"><input type="button" name="add_$varName" value="${EscHTML($Lang->{CfgEdit_Button_Add})}" onClick="addSubmit('$varName')"></td></tr></table>EOF $content .= "</td>\n"; } elsif ( $type->{type} eq "hash" ) { $content .= "<td class=\"border\">\n"; $content .= "<table border=\"1\" cellspacing=\"0\">\n"; $varValue = {} if ( ref($varValue) ne "HASH" ); if ( !$isError && !$type->{noKeyEdit} && $In{deleteVar} !~ /^\Q${varName}_zZ_\E.*_zZ_/ && $In{deleteVar} =~ /^\Q${varName}_zZ_\E(.*)$/ ) { # # User deleted entry in this hash # delete($varValue->{$1}) if ( keys(%$varValue) > 1 || $type->{emptyOk} ); $In{deleteVar} = ""; } if ( !$isError && !defined($type->{child}) && $In{addVar} eq $varName ) { # # User added entry to this array # $varValue->{$In{"addVarKey_$varName"}} = "" if ( !defined($varValue->{$In{"addVarKey_$varName"}}) ); $In{addVar} = ""; } my(@order, $childType); if ( defined($type->{order}) ) { @order = @{$type->{order}}; } elsif ( defined($type->{child}) ) { @order = sort(keys(%{$type->{child}})); } else { @order = sort(keys(%$varValue)); } foreach my $fld ( @order ) { $content .= <<EOF;<tr><td class="border">$fldEOF if ( !$type->{noKeyEdit} && (keys(%$varValue) > 1 || $type->{emptyOk}) ) { $content .= <<EOF;<input type="submit" name="del_${varName}_zZ_$fld" value="${EscHTML($Lang->{CfgEdit_Button_Delete})}" onClick="deleteSubmit('${varName}_zZ_$fld')">EOF } if ( defined($type->{child}) ) { $childType = $type->{child}{$fld}; } else { $childType = $type->{childType}; # # emit list of fields since they are user-defined # rather than hard-coded # $content .= <<EOF;<input type="hidden" name="vflds.$varName" value="${EscHTML($fld)}">EOF } $content .= "</td>\n"; $content .= fieldEditBuild($childType, "${varName}_zZ_$fld", $varValue->{$fld}, $errors, $level + 1, undef, $isError, $onchangeSubmit, $overrideVar, $overrideSet); $content .= "</tr>\n"; } if ( !$type->{noKeyEdit} ) { $content .= <<EOF;<tr><td class="border" colspan="2">$Lang->{CfgEdit_Button_New_Key}: <input type="text" class="editTextInput" name="addVarKey_$varName" size="20" maxlength="256" value=""><input type="button" name="add_$varName" value="${EscHTML($Lang->{CfgEdit_Button_Add})}" onClick="addSubmit('$varName', 1)"></td></tr>EOF } $content .= "</table>\n"; $content .= "</td>\n"; } elsif ( $type->{type} eq "horizHash" ) { $varValue = {} if ( ref($varValue) ne "HASH" ); my(@order, $childType); if ( defined($type->{order}) ) { @order = @{$type->{order}}; } elsif ( defined($type->{child}) ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -