#/////////////////////////////////////////////////////////////////////
$VERSION{'admi'} = 'Admini Function Ver 1.11';
# 管理者用スクリプト 2006/01/03
#/////////////////////////////////////////////////////////////////////
#=================================================
# 設定データ編集フォーム出力
#=================================================
sub Conf{
&Dout("F","Conf","AskID=$aid,Type=$type,Max=$max,Size=$size");
# ヘッダ出力
&HeadOut();
# 更新・追加処理
($in{'enq'} || $in{'chg'}) && &ConfEdit();
my($top,$sts,$title,$msg,@data);
($top,$sts,$title,$msg,@data) = &ReadConfFile() if(-f $CONF_FILE);
# データ再ソート(登録昇順)
(@data) = &DataSort('0:a',\@data) if(@data);
# print "-----------------
";
# foreach (@data){
# print "$_
\n";
# }
# print "-----------------
";
# 追加用
push(@data,"");
$cgi_form = &CgiFormHead("conf");
$select_sts = &DataSelectTag("L","sts",\@STATUS_LIST,$sts);
$enq_title = $title;
$enq_msg = &L_ConvCrTag2Text($msg);
&FmtPartOut("CONF_HEAD");
foreach $line (@data){
$no++;
undef %out;
if($line){
&SplitConf($line,*out);
$out{'btn'} = ' 更 新 ';
$next_aid = sprintf("%02d",$out{'aid'}+1);
}
else{
$out{'btn'} = ' 追 加 ';
$out{'aid'} = $next_aid;
$next_aid = "";
}
$select_type = &DataSelectTag("L","type",\@TYPE_LIST,$out{'type'});
$select_entry = &DataSelectTag("L","entry",\@ENTRY_LIST,$out{'entry'});
$select_chk = &DataSelectTag("L","chk",\@CHECK_LIST,$out{'chk'});
$select_sts = &DataSelectTag("L","sts",\@STATUS_LIST2,$out{'sts'});
&FmtPartOut("CONF_BODY_H");
($out{'list'},$out{'cnt'}) = &ConfData($out{'type'},$out{'aid'});
&FmtPartOut("CONF_BODY_D");
$cgi_url = &CgiUrl(). "&mode=msg&aid=$out{'aid'}";
&FmtPartOut("CONF_BODY_F");
}
&FmtPartOut("CONF_FOOT");
}
#=================================================
# リストデータ編集フォーム出力
#=================================================
sub ConfData{
my($type,$aid) = @_;
&Dout("F","ConfData","AskID=$aid,Type=$type");
my($top,@data);
($dat_file,$top,$acc,$time,@data) = &ReadDataFile($aid) if($type =~ /[CRLl]/);
# 新規リスト追加用
for($i=0; $i<$LIST_ADD_CNT; $i++){
push(@data,"");
}
my($list,$cnt);
foreach (@data){
&SplitData($out{'type'},$_,*out);
my($id) = ($out{'id'}) ? $out{'id'} : ++$top;
$list .= qq|
\n|;
$cnt .= qq|
\n|;
}
return $list,$cnt;
}
#=================================================
# 入力設定データ編集保存
#=================================================
sub ConfEdit{
my($match,$line,$pos);
&Dout("F","ConfEdit");
my($top,$sts,$title,$msg,@data);
($top,$sts,$title,$msg,@data) = &ReadConfFile() if(-f $CONF_FILE);
# 基本設定
if($in{'enq'}){
$sts = $in{'sts'};
$title = $in{'title'};
$msg = $in{'msg'};
@new = @data;
}
# 質問設定
else{
foreach $line (@data){
&SplitConf($line,*conf);
$pos++;
# 更新時
if($conf{'aid'} eq $in{'aid'}){
$line = &JoinConf($conf{'aid'},$pos);
&ConfEditData($in{'aid'});
$match= 1;
}
elsif($conf{'title'} eq $in{'title'}){
&Error("$conf{'title'} は既に登録されています。");
}
push(@new,$line);
}
# 新規登録時
if(!$match){
$line = &JoinConf(++$top,++$pos);
push(@new,$line);
&ConfEditData($top);
$title = $CGI_TITLE unless $title;
}
}
$head = join($LOG_SEP,$top,$sts,$title,$msg,"");
&L_WriteLogFile($CONF_FILE,$head,@new) || &Error($ERR_MSG);
}
#=================================================
# 入力リストデータ編集保存
#=================================================
sub ConfEditData{
my($aid) = shift;
&Dout("F","ConfDataEdit","AskID=$aid");
my(@list,$i,$cnt);
my($dat_file,$top,$acc,$time,@dm) = &ReadDataFile($aid,"",1);
for($i=1;$i<=99;$i++){
($in{"item$i"}) || last;
$in{"cnt$i"} = 0 unless $in{"cnt$i"};
$line = join($LOG_SEP,$i,$in{"item$i"},$in{"cnt$i"},"\n");
push(@list,$line);
}
if($in{'type'} =~ /[TM]/){
(@list) && &Error("入力項目に対してリスト設定はできません。");
undef @list;
@list = @dm;
}
else{
($i == 1) && &Error("選択リストを設定して下さい。");
$top = $i -1;
}
$head = join($LOG_SEP,$top,$acc,$time,"");
&L_WriteLogFile($dat_file,$head,@list) || &Error($ERR_MSG);
}
#=================================================
# 設定データ結合および内容チェック
#=================================================
sub JoinConf{
my($aid,$pos) = @_;
&Dout("F","JoinConf","AskID=$aid,Pos=$pos");
$aid = sprintf("%02d",$aid);
($aid >= 100 || $aid eq "00") && &Error("質問Noに誤りがあります。[Ask No=$aid]");
($in{'max'} =~ /\D/) && &Error("最大保存数の設定値に誤りがあります。
[Max=$in{'max'}]");
($in{'len'} =~ /\D/) && &Error("入力最大桁数の設定値に誤りがあります。
[Len=$in{'len'}]");
($in{'pos'} =~ /\D/) && &Error("表示位置の設定値に誤りがあります。
[Pos=$in{'pos'}]");
($in{'show'} =~ /\D/) && &Error("表示数の設定値に誤りがあります。
[Show=$in{'show'}]");
($in{'size'} =~ /\D/) && &Error("表示サイズの設定値に誤りがあります。
[Size=$in{'size'}]");
($in{'size'} > 80) && &Error("表示サイズの設定値が大きすぎます。
[Size=$in{'size'}]");
($in{'title'}) || &Error("質問項目が未設定です。");
($in{'type'}) || &Error("質問形式が未設定です。");
$in{'pos'} = $pos unless $in{'pos'};
if($in{'type'} =~ /[RCLl]/){
my($max);
foreach (keys %in){
($_ !~ /^item/) && next;
$max++ if $in{$_};
}
$in{'max'} = $max if($max>$in{'max'});
}
($in{'pos'} == 1 && $in{'entry'} ne 'Y') && &Error("先頭項目は、必須入力しか設定できません。");
my($line) = join($LOG_SEP,$aid,
@in{'type','entry','pos','title','max','len','show','msg','chk','size','sts'});
$line .= "$LOG_SEP\n";
return $line;
}
#=================================================
# ファイル管理
#=================================================
sub File{
&Dout("F","File");
# タイトル出力
&HeadOut('ファイル管理');
my($buf,$i,$file,@list);
&FmtPartOut("FILE_HEAD");
# ファイル管理実行
&FileEdit();
# メッセージ出力
&FmtMsgOut("B","ERROR !!",$ERR_MSG) if($ERR_MSG);
my($cgi_url) = &CgiUrl() . "&mode=file";
my($top,$sts,$title,$msg,@data) = &ReadConfFile();
# ログファイル -----------
my($dat_file,$dir,$target);
undef @list;
push(@list,
qq|設定ファイル<>$CONF_FILE<>RW-<>|
.qq||
.qq||);
foreach (@data){
&SplitConf($_,*conf);
$dat_file = &GetDataFile($conf{'aid'});
push(@list,
qq|データファイル ask=$conf{'aid'}<>$dat_file<>RW-<>|
.qq||
.qq||);
}
&FileList("ログファイル",@list);
# ログファイル -----------
undef @list;
push(@list,
qq|設定ファイル<>$CONF_FILE_BK<>RW-<>|);
foreach (@data){
&SplitConf($_,*conf);
$dat_file = &GetDataFile($conf{'aid'},$DAT_FILE_BK);
push(@list,
qq|データファイル ask=$conf{'aid'}<>$dat_file<>RW-<>|
.qq||);
}
&FileList("バックアップファイル",@list);
# CGI実行ファイル --------
(@list) = (
"CGIスクリプト<>$CGI_PROG<>R-X",
"設定ファイル<>$ini_file<>R--"
);
foreach (keys %HTML_FMT){
if($tmp !~ /$HTML_FMT{$_}/){
push(@list,"HTMLテンプレート<>$HTML_FMT{$_}<>R--");
$tmp .= ",$HTML_FMT{$_}";
}
}
&FileList("CGI実行ファイル",@list);
# ディレクトリ -----------
undef @list;
$dat_file = &GetDataFile($conf{'aid'});
($dir,$target) = &FileDirName($dat_file);
push(@list,"データディレクトリ<>$dir<>RWXD");
($dir,$target) = &FileDirName($LOG_FILE);
push(@list,"ログディレクトリ<>$dir<>RWXD");
($dir,$target) = &FileDirName($LOCK_FILE);
push(@list,"ロックディレクトリ<>$dir<>RWXD",
"ロックファイル<>$LOCK_FILE<>未存在<>"
." "
."");
&FileList("ロックファイル",@list);
if($VERSION_OUT){
foreach $key (keys %VERSION){
$ver_info .= "
| Lib = $key | "; $ver_info .= "$VERSION{$key} |