# admin.pl ## ■管理画面 sub admin { if ($in{'pass'} eq "") { &enter; } elsif ($in{'pass'} ne $pass) { &error("パスワードが違います"); } # 推薦 if ($in{'job'} eq "reco" && $in{'no'}) { # ロック開始 &lock() if ($lockkey); @data=(); @cls1=(); @cls2=(); @reco=(); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$tim,$reco,$hos) = split(/<>/); $f=0; foreach $reco ( split(/\0/, $in{'no'}) ) { if ($no == $reco) { $f++; last; } } if ($f) { if ($reco == 0) { $reco=1; } else { $reco=0; } $_ = "$no<>$cls1<>$cls2<>$sub<>$url<>$nam<>$eml<>$pw<>$msg<>$tim<>$reco<>$hos<>\n"; } push(@data,$_); push(@cls1,$cls1); push(@cls2,$cls2); push(@reco,$reco); } close(IN); # 三段ソート @data = @data[sort { $cls1[$a] <=> $cls1[$b] || $reco[$b] <=> $reco[$a] || $cls2[$a] <=> $cls2[$b] } 0 .. $#cls1]; # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); # ロック解除 &unlock if ($lockkey); # 削除 } elsif ($in{'job'} eq "dele" && $in{'no'}) { # ロック開始 &lock() if ($lockkey); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no) = split(/<>/); $f=0; foreach $del ( split(/\0/, $in{'no'}) ) { if ($no == $del) { $f++; unlink("$cntdir/$del.dat"); last; } } if (!$f) { push(@data,$_); } } close(IN); # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); # ロック解除 &unlock if ($lockkey); # 修正画面 } elsif ($in{'job'} eq "edit" && $in{'no'}) { if ($in{'no'} =~ /\0/) { &error("修正は1記事づつです"); } open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$tim,$reco,$hos) = split(/<>/); last if ($in{'no'} == $no); } close(IN); # 修正フォーム &admin_edit_form($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg); # 修正実行 } elsif ($in{'job'} eq "edit2") { # 入力チェック &input_check('admin'); # ロック開始 &lock() if ($lockkey); @data=(); @cls1=(); @cls2=(); @reco=(); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$tim,$reco,$hos) = split(/<>/); if ($in{'no'} == $no) { ($cls1,$cls2) = split(/:/, $in{'cate'}); $_ = "$no<>$cls1<>$cls2<>$in{'sub'}<>$in{'url'}<>$in{'name'}<>$in{'email'}<>$pw<>$in{'comment'}<>$tim<>$reco<>$hos<>\n"; } push(@data,$_); push(@cls1,$cls1); push(@cls2,$cls2); push(@reco,$reco); } close(IN); # 三段ソート @data = @data[sort { $cls1[$a] <=> $cls1[$b] || $reco[$b] <=> $reco[$a] || $cls2[$a] <=> $cls2[$b] } 0 .. $#cls1]; # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); # ロック解除 &unlock if ($lockkey); # 新規登録フォーム } elsif ($in{'job'} eq "new" && $useType == 0) { &admin_new_form; # 新規登録 } elsif ($in{'job'} eq "new2" && $useType == 0) { # 入力チェック &input_check('admin'); # ロック開始 &lock() if ($lockkey); ($cls1[0],$cls2[0]) = split(/:/, $in{'cate'}); # $mypw = &encrypt($in{'pw'}); $time = time; &get_host; # データNo open(IN,"$numfile") || &error("Open Error: $numfile"); @num = ; close(IN); ($num,$all) = split(/,/, $num[0]); $num++; $data[0] = "$num<>$cls1[0]<>$cls2[0]<>$in{'sub'}<>$in{'url'}<>$in{'name'}<>$in{'email'}<><>$in{'comment'}<>$time<>0<>$host<>\n"; # ログ展開 $url_flag=0; $reco[0] = 0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$tim,$reco,$hos) = split(/<>/); # 重複チェック if (!$w_url_regist && $in{'url'} eq $url) { $url_flag=1; last; } push(@data,$_); push(@cls1,$cls1); push(@cls2,$cls2); push(@reco,$reco); } close(IN); # 重複登録禁止 if ($url_flag) { &error("このURLは既に登録済みです"); } if ($eml_flag) { &error("このE-mailは既に登録済みです"); } # 三段ソート @data = @data[sort { $cls1[$a] <=> $cls1[$b] || $reco[$b] <=> $reco[$a] || $cls2[$a] <=> $cls2[$b] } 0 .. $#cls1]; # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); $all = @data; $num[1] =~ s/\n//; $i=0; $line2 = "$num,"; foreach ( split(/,/, $num[1]) ) { $i++; $line2 .= "$_,"; last if ($i >= $new_site); } open(OUT,">$numfile") || &error("Write Error: $numfile"); print OUT "$num,$all,\n"; print OUT "$line2\n"; close(OUT); # ロック解除 &unlock if ($lockkey); } if ($in{'class'} eq "") { $in{'class'} = 0; } &header; print <
分類:
処理:
EOM # ログ展開 $i=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$tim,$reco,$hos) = split(/<>/); # カテゴリ抽出 next if ($cls1 != $in{'class'}); # ページ繰り越し $i++; next if ($i < $page + 1); next if ($i > $page + $admin_view); @posi = split(/,/, $class[$cls1]); ($date,$mdate) = &get_time($tim); if ($eml) { $nam = "$nam"; } if (length($msg) > 50) { $msg = substr($msg,0,50) . '...'; } print "

\n"; print "[推薦]\n" if ($reco == 1); print "$sub [ $posi[0] > $posi[$cls2] ] 管理者:$nam 【$hos】 - $date
[参照先] $url
[紹介文] $msg\n"; } close(IN); print <
EOM # ページ繰り越し数を認識 $next = $page + $admin_view; $back = $page - $admin_view; # 繰り越しボタン print "\n"; if ($back >= 0) { print "\n"; } if ($next < $i) { print "\n"; } print <
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
EOM exit; } ## ■修正フォーム sub admin_edit_form { local($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg) = @_; &header; print <
  • 変更部分のみを修正して、送信ボタンを押してください。
EOM &myform($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg); print <

EOM exit; } ## ■新規登録フォーム sub admin_new_form { &header; print <
  • 必要内容を入力してください。
  • 「メールアドレス」は任意です。
EOM &myform(); print <

EOM exit; } ## ■入室画面 sub enter { &header; print < パスワードを入力してください。

EOM exit; } 1;