⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editconfig.pm

📁 老外写的linux下的文件备份软件
💻 PM
📖 第 1 页 / 共 4 页
字号:
            @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 .= fieldEditBuild($childType, "${varName}_zZ_$fld",                            $varValue->{$fld}, $errors, $level + 1, undef,			    $isError, $onchangeSubmit,			    $overrideVar, $overrideSet);        }    } else {        $content .= "<td class=\"border\">\n";        if ( $isError ) {            #            # If there was an error, we use the original post values            # in %In, rather than the parsed values in $varValue.            # This is so that the user's erroneous input is preserved.            #            $varValue = $In{"v_zZ_$varName"} if ( defined($In{"v_zZ_$varName"}) );        }        if ( defined($errors->{$varName}) ) {            $content .= <<EOF;<span class="editError">$errors->{$varName}</span><br>EOF        }        my $onChange;	if ( defined($overrideVar) ) {            $onChange .= "checkboxSet('$overrideVar');";	} else {            $onChange .= "varChange('$varName');";	}        if ( $onchangeSubmit ) {            $onChange .= "document.editForm.submit();";        }	if ( $onChange ne "" ) {            $onChange = " onChange=\"$onChange\"";	}        if ( $varValue !~ /\n/ &&		($type->{type} eq "integer"		    || $type->{type} eq "string"		    || $type->{type} eq "execPath"		    || $type->{type} eq "shortlist"		    || $type->{type} eq "float") ) {            # simple input box	    if ( $type->{type} eq "shortlist" ) {		$varValue = [$varValue] if ( ref($varValue) ne "ARRAY" );		$varValue = join(", ", @$varValue);	    }            my $textType = ($varName =~ /Passwd/) ? "password" : "text";            $content .= <<EOF;<input type="$textType" class="editTextInput" name="v_zZ_$varName" size="$size" maxlength="256" value="${EscHTML($varValue)}"$onChange>EOF        } elsif ( $type->{type} eq "boolean" ) {            # checkbox            my $checked = "checked" if ( $varValue );            $content .= <<EOF;<input type="checkbox" name="v_zZ_$varName" $checked value="1"$onChange>EOF        } elsif ( $type->{type} eq "select" ) {            $content .= <<EOF;<select name="v_zZ_$varName"$onChange>EOF            foreach my $option ( @{$type->{values}} ) {                my $sel = " selected" if ( $varValue eq $option );                $content .= "<option$sel>$option</option>\n";            }            $content .= "</select>\n";        } else {            # multi-line text area - count number of lines	    my $rowCnt = $varValue =~ tr/\n//;	    $rowCnt = 1 if ( $rowCnt < 1 );            $content .= <<EOF;<textarea name="v_zZ_$varName" class="editTextArea" cols="$size" rows="$rowCnt"$onChange>${EscHTML($varValue)}</textarea>EOF        }        $content .= "</td>\n";    }    return $content;}sub errorCheck{    my $errors = {};    foreach my $param ( keys(%ConfigMeta) ) {        fieldErrorCheck($ConfigMeta{$param}, $param, $errors);    }    return $errors;}sub fieldErrorCheck{    my($type, $varName, $errors) = @_;    $type = { type => $type } if ( ref($type) ne "HASH" );    if ( $type->{type} eq "list" ) {        for ( my $i = 0 ; ; $i++ ) {            last if ( fieldErrorCheck($type->{child}, "${varName}_zZ_$i", $errors) );        }    } elsif ( $type->{type} eq "hash" || $type->{type} eq "horizHash" ) {        my(@order, $childType);        my $ret;        if ( defined($type->{order}) ) {            @order = @{$type->{order}};        } elsif ( defined($type->{child}) ) {            @order = sort(keys(%{$type->{child}}));        } else {            @order = split(/\0/, $In{"vflds.$varName"});        }        foreach my $fld ( @order ) {            if ( defined($type->{child}) ) {                $childType = $type->{child}{$fld};            } else {                $childType = $type->{childType};            }            $ret ||= fieldErrorCheck($childType, "${varName}_zZ_$fld", $errors);        }        return $ret;    } else {        $In{"v_zZ_$varName"} = "0" if ( $type->{type} eq "boolean"                                        && $In{"v_zZ_$varName"} eq "" );        return 1 if ( !exists($In{"v_zZ_$varName"}) );        (my $var = $varName) =~ s/_zZ_/./g;        if ( $type->{type} eq "integer"                || $type->{type} eq "boolean" ) {            if ( $In{"v_zZ_$varName"} !~ /^-?\d+\s*$/s			    && $In{"v_zZ_$varName"} ne "" ) {                $errors->{$varName} = eval("qq{$Lang->{CfgEdit_Error__must_be_an_integer}}");            }        } elsif ( $type->{type} eq "float" ) {            if ( $In{"v_zZ_$varName"} !~ /^-?\d*(\.\d*)?\s*$/s			    && $In{"v_zZ_$varName"} ne "" ) {                $errors->{$varName}                        = eval("qq{$Lang->{CfgEdit_Error__must_be_real_valued_number}}");            }        } elsif ( $type->{type} eq "shortlist" ) {	    my @vals = split(/[,\s]+/, $In{"v_zZ_$varName"});	    for ( my $i = 0 ; $i < @vals ; $i++ ) {		if ( $type->{child} eq "integer"			&& $vals[$i] !~ /^-?\d+\s*$/s			&& $vals[$i] ne "" ) {		    my $k = $i + 1;		    $errors->{$varName} = eval("qq{$Lang->{CfgEdit_Error__entry__must_be_an_integer}}");		} elsif ( $type->{child} eq "float"			&& $vals[$i] !~ /^-?\d*(\.\d*)?\s*$/s			&& $vals[$i] ne "" ) {		    my $k = $i + 1;		    $errors->{$varName} = eval("qq{$Lang->{CfgEdit_Error__entry__must_be_real_valued_number}}");		}	    }        } elsif ( $type->{type} eq "select" ) {            my $match = 0;            foreach my $option ( @{$type->{values}} ) {                if ( $In{"v_zZ_$varName"} eq $option ) {                    $match = 1;                    last;                }            }            $errors->{$varName} = eval("qq{$Lang->{CfgEdit_Error__must_be_valid_option}}")                            if ( !$match );        } elsif ( $type->{type} eq "execPath" ) {            if ( $In{"v_zZ_$varName"} ne "" && !-x $In{"v_zZ_$varName"} ) {                $errors->{$varName} = eval("qq{$Lang->{CfgEdit_Error__must_be_executable_program}}");            }        } else {            #            # $type->{type} eq "string": no error checking            #        }    }    return 0;}sub inputParse{    my($bpc, $userHost) = @_;    my $conf     = {};    my $override = {};    foreach my $param ( keys(%ConfigMeta) ) {        my $value;        next if ( $userHost                      && (!defined($bpc->{Conf}{CgiUserConfigEdit}{$param})                         || (!$PrivAdmin                            && !$bpc->{Conf}{CgiUserConfigEdit}{$param})) );        fieldInputParse($ConfigMeta{$param}, $param, \$value);        $conf->{$param}     = $value;        $override->{$param} = $In{"override_$param"};    }    return ($conf, $override);}sub fieldInputParse{    my($type, $varName, $value) = @_;    $type = { type => $type } if ( ref($type) ne "HASH" );    if ( $type->{type} eq "list" ) {        $$value = [];        for ( my $i = 0 ; ; $i++ ) {            my $val;            last if ( fieldInputParse($type->{child}, "${varName}_zZ_$i", \$val) );            push(@$$value, $val);        }        $$value = undef if ( $type->{undefIfEmpty} && @$$value == 0 );    } elsif ( $type->{type} eq "hash" || $type->{type} eq "horizHash" ) {        my(@order, $childType);        my $ret;        $$value = {};        if ( defined($type->{order}) ) {            @order = @{$type->{order}};        } elsif ( defined($type->{child}) ) {            @order = sort(keys(%{$type->{child}}));        } else {            @order = split(/\0/, $In{"vflds.$varName"});        }        foreach my $fld ( @order ) {            my $val;            if ( defined($type->{child}) ) {                $childType = $type->{child}{$fld};            } else {                $childType = $type->{childType};            }            $ret ||= fieldInputParse($childType, "${varName}_zZ_$fld", \$val);            last if ( $ret );            $$value->{$fld} = $val;        }        return $ret;    } else {        if ( $type->{type} eq "boolean" ) {            $$value = 0 + $In{"v_zZ_$varName"};        } elsif ( !exists($In{"v_zZ_$varName"}) ) {            return 1;        }        my $v = $In{"v_zZ_$varName"};        if ( $type->{type} eq "integer" ) {            if ( $v =~ /^-?\d+\s*$/s || $v eq "" ) {                $$value = 0 + $v;            } else {                # error value - keep in string form                $$value = $v;            }        } elsif ( $type->{type} eq "float" ) {            if ( $v =~ /^-?\d*(\.\d*)?\s*$/s || $v eq "" ) {                $$value = 0 + $v;            } else {                # error value - keep in string form                $$value = $v;            }        } elsif ( $type->{type} eq "shortlist" ) {            $$value = [split(/[,\s]+/, $v)];            if ( $type->{child} eq "float" ) {                foreach ( @$$value ) {                    if ( /^-?\d*(\.\d*)?\s*$/s || $v eq "" ) {                        $_ += 0;                    }                }            } elsif ( $type->{child} eq "integer"                        || $type->{child} eq "boolean" ) {                foreach ( @$$value ) {                    if ( /^-?\d+\s*$/s || $v eq "" ) {                        $_ += 0;                    }                }            }        } else {            $$value = decode_utf8($In{"v_zZ_$varName"});            $$value =~ s/\r\n/\n/g;            # remove leading space from exec paths            $$value =~ s/^\s+// if ( $type->{type} eq "execPath" );        }        $$value = undef if ( $type->{undefIfEmpty} && $$value eq "" );    }    return 0;}sub configDiffMesg{    my($host, $oldConf, $newConf) = @_;    my $mesg;    my $conf;    if ( $host ne "" ) {        $conf = "host $host config";    } else {        $conf = "main config";    }    foreach my $p ( keys(%ConfigMeta) ) {        if ( !exists($oldConf->{$p}) && !exists($newConf->{$p}) ) {            next;        } elsif ( exists($oldConf->{$p}) && !exists($newConf->{$p}) ) {            $mesg .= eval("qq($Lang->{CfgEdit_Log_Delete_param})");        } elsif ( !exists($oldConf->{$p}) && exists($newConf->{$p}) ) {            my $dump = Data::Dumper->new([$newConf->{$p}]);            $dump->Indent(0);            $dump->Sortkeys(1);            $dump->Terse(1);            my $value = $dump->Dump;            $value =~ s/\n/\\n/g;            $value =~ s/\r/\\r/g;            $mesg .= eval("qq($Lang->{CfgEdit_Log_Add_param_value})");        } else {            my $dump = Data::Dumper->new([$newConf->{$p}]);            $dump->Indent(0);            $dump->Sortkeys(1);            $dump->Terse(1);            my $valueNew = $dump->Dump;            my $v = $oldConf->{$p};            if ( ref($newConf->{$p}) eq "ARRAY" && ref($v) eq "" ) {                $v = [$v];            }            $dump = Data::Dumper->new([$v]);            $dump->Indent(0);            $dump->Sortkeys(1);            $dump->Terse(1);            my $valueOld = $dump->Dump;            (my $valueNew2 = $valueNew) =~ s/['\n\r]//g;            (my $valueOld2 = $valueOld) =~ s/['\n\r]//g;            next if ( $valueOld2 eq $valueNew2 );            $valueNew =~ s/\n/\\n/g;            $valueOld =~ s/\n/\\n/g;            $valueNew =~ s/\r/\\r/g;            $valueOld =~ s/\r/\\r/g;            $mesg .= eval("qq($Lang->{CfgEdit_Log_Change_param_value})");        }    }    return $mesg;}sub hostsDiffMesg{    my($hostsNew) = @_;    my $hostsOld = $bpc->HostInfoRead();    my($mesg, $hostChange);    foreach my $host ( keys(%$hostsOld) ) {        if ( !defined($hostsNew->{$host}) ) {            $mesg .= eval("qq($Lang->{CfgEdit_Log_Host_Delete})");            $hostChange++;            next;        }        foreach my $key ( keys(%{$hostsNew->{$host}}) ) {            next if ( $hostsNew->{$host}{$key} eq $hostsOld->{$host}{$key} );            my $valueOld = $hostsOld->{$host}{$key};            my $valueNew = $hostsNew->{$host}{$key};            $mesg .= eval("qq($Lang->{CfgEdit_Log_Host_Change})");            $hostChange++;        }    }    foreach my $host ( keys(%$hostsNew) ) {        next if ( defined($hostsOld->{$host}) );        my $dump = Data::Dumper->new([$hostsNew->{$host}]);        $dump->Indent(0);        $dump->Sortkeys(1);        $dump->Terse(1);        my $value = $dump->Dump;        $value =~ s/\n/\\n/g;        $value =~ s/\r/\\r/g;        $mesg .= eval("qq($Lang->{CfgEdit_Log_Host_Add})");        $hostChange++;    }    return ($mesg, $hostChange);}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -