#!/usr/local/bin/perl
#↑perlのパスを自分の環境に合わせて書き直します。
#大抵は、「#!/usr/bin/perl」 か 「#!/usr/local/bin/perl」です。
#解らない場合はサーバー管理者(もしくはプロバイダー)に
#確認してください。
#
require './pl/customize.pl'; # 画像認証キー関係サブルーチン
&customize_env_chk; # 環境変数のチェック
#
require 'pl/jcode.pl';
require 'pl/cfg.cgi';
&EST_reg;
require 'pl/temp.cgi';
################################################################
# Yomi-Search用データ登録用プログラム
################################################################
#(1)登録画面(新規登録・管理人代理登録・登録内容変更)(®ist)
#(2)プレビュー画面(&preview)
#(3)入力内容の整形(&join_fld)
#(4)入力内容のチェック(&check)
#(5)登録結果画面出力(&PRend)
#(6)修正・削除のためのパスワード認証(&enter)
#(7)ヘルプの表示(&help)
#(8)パスワードの再発行・変更(&act_repass)
#(9)リンク切れ報告フォーム(&no_link)
#(p1)新規登録実行(&act_regist)
#(p2)登録内容変更(&act_mente)
#(p3)削除実行(&act_del)
&form_decode;
$Eref=$ENV{'HTTP_REFERER'};
$ENV{'HTTP_REFERER'}="";
#-----------------#
if($FORM{'preview'} eq "on"){&preview;} #プレビュー画面
elsif($FORM{mode} eq "regist"){®ist;} #登録画面
elsif($FORM{mode} eq "act_regist"){&act_regist;} #新規登録実行
elsif($FORM{mode} eq "act_mente"){&act_mente;} #登録内容変更実行
elsif($FORM{mode} eq "act_del"){&act_del;} #削除実行
elsif($FORM{mode} eq "enter"){&enter;} #パスワード認証
elsif($FORM{mode} eq "help"){&help;} #ヘルプの表示
elsif($FORM{mode} eq "act_repass"){&act_repass;} #パスワードの再発行
elsif($FORM{mode} eq "no_link"){&no_link;} #リンク切れ報告フォーム
else{®ist;} #登録画面
exit;
#-----------------#
sub regist{
#(1)登録画面(新規登録・管理人代理登録・登録内容変更)(®ist)
#クッキーを記録
if($FORM{'in_mode'} eq "mente"){ #登録内容変更時
&get_cookie;
if($FORM{changer} ne "admin" && $FORM{pass}){$CK_data[0]=$FORM{pass};} #登録者パスワード
$CK_data[1]=$FORM{id}; #ID
if($FORM{changer} eq "admin"){$CK_data[2]="admin";} #変更者
if($FORM{changer} eq "admin" && $FORM{pass}){$CK_data[3]=$FORM{pass};} #管理者パスワード
if($FORM{cookie} eq "off"){&set_fo_cookie;}
else{&set_cookie;}
}
#パスワード認証(管理者認証)
if($FORM{'changer'} eq "admin"){
local($cr_pass);
if($EST{crypt}){$cr_pass=crypt($FORM{pass},$EST{pass});}
else{$cr_pass=$FORM{pass};}
if($cr_pass ne $EST{pass}){
if(!$ENV{'REMOTE_HOST'}){$ENV{'REMOTE_HOST'}=gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2);}
&mes("パスワードの認証に失敗しました
認証したコンピュータのIPアドレス:$ENV{'REMOTE_ADDR'}
認証したコンピュータのホスト名:$ENV{'REMOTE_HOST'}","パスワード認証失敗","java");
}
}
#管理人のみが登録できるモード
if($EST_reg{no_regist} && $FORM{in_mode} ne "mente" && $FORM{changer} ne "admin"){
&mes("現在、訪問者による新規登録は停止されています","エラー","java");
}
# 各フィールドのデータを「$P〜」に入力
#$Pdata[0]=データID,$Pdata[1]=タイトル,$Pdata[2]=ホームページのURL,$Pdata[3]=マークデータ
#$Pdata[4]=更新日,$Pdata[5]=パスワード,$Pdata[6]=紹介文,$Pdata[7]=管理人コメント
#$Pdata[8]=お名前,$Pdata[9]=メールアドレス,$Pdata[10]=カテゴリ(リスト),$Pdata[11]=time
#$Pdata[12]=バナーURL,$Pdata[13]=アクセス数,$Pdata[14]=IP,$Pdata[15]=キーワード
# $Pmode=>送信先のモード
# $FORM{'in_mode'}=>概入力値設定モード(なし,new_dairi,mente,form)
# $Smode_name=>各モードの判定用の内部変数(なし,new_dairi,mente)
# $$FORM{'changer'}=>変更者(なし,admin)
##概入力値設定($FORM{'in_mode'})
#新規登録()
if(!$FORM{'in_mode'}){@Pdata=("","","http://","","","","","","","",$FORM{'kt'},"","http://","","","");}
#管理人代理登録(new_dairi)
elsif($FORM{'in_mode'} eq "new_dairi"){}
#内容変更(mente)
elsif($FORM{'in_mode'} eq "mente"){
local($cr_pass,$i=0);
open(IN,"$EST{log_path}$EST{logfile}");
while(){
@Pdata=split(/<>/,$_);
if($Pdata[0] eq $FORM{id}){
if($EST{crypt}){$cr_pass=crypt($FORM{pass},$Pdata[5]);}
else{$cr_pass=$FORM{pass};}
if($FORM{changer} ne "admin" && $Pdata[5] ne $cr_pass){&mes("パスワードが違います","パスワード認証エラー","java");}
$i=1;
last;
}
}
close(IN);
if(!$i){&mes("該当するデータはありません","エラー","java");}
}
#外部入力(form)
elsif($FORM{'in_mode'} eq "form"){
$FORM{'Fkt'}="";
foreach $kt_no(1 .. $EST_reg{kt_max}){
$FORM{'Fkt'} .= $FORM{"Fkt$kt_no"} . "&";
}
@Pdata=("",$FORM{'Ftitle'},$FORM{'Furl'},"","",$FORM{'Fpass'},$FORM{'Fsyoukai'},"",$FORM{'Fname'},$FORM{'Femail'},$FORM{'Fkt'},"",$FORM{'Fbana_url'},"","",$FORM{'Fkey'});
}
else{@Pdata=();}
##$Smode_nameの設定
#管理人代理登録
if($FORM{'changer'} eq "admin" && $FORM{'in_mode'} ne "mente"){$Smode_name="new_dairi";}
#登録内容変更
elsif($FORM{'in_mode'} eq "mente"){$Smode_name="mente";}
#登録者の新規登録
else{$Smode_name="";}
##$Pmodeの設定
#登録内容変更
if($FORM{'Smode_name'} eq "mente"){
$Pmode="act_mente";
}
#新規登録
else{
$Pmode="act_regist";
}
##その他の設定
#相互リンクの有無
$MES_sougo{1}=" checked"; $MES_sougo{0}="";
#テンプレートの読み込み
if($Smode_name eq "new_dairi"){
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_new_admin.html";
}
elsif($FORM{'changer'} ne "admin" && $Smode_name eq "mente"){
if($EST{syoukai_br}){
$Pdata[6]=~s/
/\n/g; $Pdata[7]=~s/
/\n/g;
}
if($EST_reg{no_mente}){&mes("現在、登録者による修正・削除は停止されています","エラー","java");}
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_mente.html";
}
elsif($FORM{'changer'} eq "admin" && $Smode_name eq "mente"){
if($EST{syoukai_br}){
$Pdata[6]=~s/
/\n/g; $Pdata[7]=~s/
/\n/g;
}
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_mente_admin.html";
}
else{
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_new.html";
}
}
sub PR_mark{
##マーク
if($FORM{'changer'} eq "admin"){
local(@mark); @mark=split(/_/,$Pdata[3]);
print<<"EOM";
【マーク】
EOM
}
}
sub PR_kt{
##登録するカテゴリを表示(&PR_kt)
print<<"EOM";
EOM
local($PRbf_kt,@kt_list,@kt,$kt_no=1,$line,@Pkt,$PRselect=" selected");
@Pkt=split(/&/,$Pdata[10]);
if($EST_reg{kt_min} ne $EST_reg{kt_max}){print "※$EST_reg{kt_min}〜$EST_reg{kt_max}個まで選択できます
";}
else{print "※$EST_reg{kt_max}個選択してください
";}
print<<"EOM";
※各カテゴリの詳細は「カテゴリ一覧」を参考にしてください
EOM
&gane_st; #ジャンルステータスをロード
@kt_list=sort keys(%ganes);
foreach $kt_no(1 .. $EST_reg{kt_max}){
$PRselect=" selected";
print<<"EOM";
EOM
}
print "
";
}
sub cr{
#著作権表示(削除・変更をしないでください。ただし、中寄せ・左寄せは可)
print<<"EOM";
EOM
}
sub preview{
#(2)プレビュー画面(&preview)
#※登録者の新規登録時にのみ使用
#管理人のみが登録できるモード
if($EST_reg{no_regist} && $FORM{in_mode} ne "mente" && $FORM{changer} ne "admin"){
&mes("現在、訪問者による新規登録は停止されています","エラー","java");
}
&check("url_no_check");
##その他の設定
#相互リンクの有無
$MES_sougo{1}=" checked"; $MES_sougo{0}="";
#紹介文の改行を変換(
→\n)
$FORM{Fsyoukai}=~s/
/\n/g;
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_new_preview.html";
}
sub PR_preview_kt1{
#(2.1)カテゴリを表示1
foreach $kt_no(1 .. $EST_reg{kt_max}){
print " \n";
}
}
sub PR_preview_kt2{
#(2.2)カテゴリを表示2
foreach $kt_no(1 .. $EST_reg{kt_max}){
print &full_kt($FORM{"Fkt$kt_no"});
print<<"";
}
}
sub join_fld{
#(3)入力内容の整形(&join_fld)
@Slog=(); #登録更新用のデータ配列
local @arg=@_;
#$arg[0]=登録用のデータID
#[モード]
# $Smode_name=>各モードの判定用の内部変数(なし,new_dairi,mente)
# $FORM{'changer'}=>変更者(なし,admin)
#※登録内容変更の場合の変更前データは「@Spre_log」に格納されている
##登録No(データID)(0)
$Slog[0]=$arg[0];
##タイトル(1)
$Slog[1]=$FORM{'Ftitle'};
##URL(2)
$Slog[2]=$FORM{'Furl'};
##マークデータ(3)
if($FORM{'changer'} eq "admin"){ #変更者が管理人
$FORM{'Fmark'}="";
foreach(1 .. 2){ #←マーク数を増やすときは修正
if($FORM{"Fmark$_"}){$FORM{'Fmark'} .= "1_";}
else{$FORM{'Fmark'} .= "0_";}
}
$FORM{'Fmark'}=substr($FORM{'Fmark'},0,-1);
$Slog[3]=$FORM{'Fmark'};
}
elsif(!$Smode_name){$Slog[3]="0_0";} #登録者の新規登録
else{$Slog[3]=$Spre_log[3];} #登録者の変更
##更新日(4)
#日時の取得
$Slog[4]=&get_time(0,1);
##パスワード(5)
if($Smode_name eq "mente"){$Slog[5]=$Spre_log[5];} #内容変更時
else{ #新規登録時
$Spass=$FORM{'Fpass'}; #暗号化前のパスワードを保存
if($EST{crypt}){$Slog[5]=crypt($FORM{'Fpass'},"ys");} #crypt使用可能
else{$Slog[5]=$FORM{'Fpass'};} #crypt使用不可
}
##紹介文(6)
$Slog[6]=$FORM{'Fsyoukai'};
##管理人コメント(7)
if($FORM{'changer'} eq "admin"){ #変更者が管理人
$Slog[7]=$FORM{'Fkanricom'};
}
elsif(!$Smode_name){$Slog[7]="";} #登録者の新規登録
else{$Slog[7]=$Spre_log[7];} #登録者の変更
##お名前(8)
$Slog[8]=$FORM{'Fname'};
##E-mail(9)
$Slog[9]=$FORM{'Femail'};
##カテゴリ(10)
if($EST{user_change_kt} && $FORM{mode} eq "act_mente" && $FORM{'changer'} ne "admin"){ #登録者の変更でカテゴリ変更禁止の場合
local(@kt,$kt,$i=1);
@kt=split(/&/,$Spre_log[10]);
$Slog[10]=$Spre_log[10];
foreach $kt(@kt){
$FORM{"Fkt$i"}=$kt;
$i++;
}
}
else{ #その他の場合
$FORM{'Fkt'}="";
foreach(1 .. $EST_reg{kt_max}){
$FORM{'Fkt'} .= $FORM{"Fkt$_"} . "&";
}
$FORM{'Fkt'}=substr($FORM{'Fkt'},0,-1);
$Slog[10]=$FORM{'Fkt'};
}
##time形式(11)
{local(@time);
@time=split(/_/,$Spre_log[11]); $times=time();
if($Smode_name eq "mente"){ #内容変更時
if(!$time[1] && $times-$time[0]<$EST{new_time}*86400){$Slog[11]= $times . "_0";}
else{$Slog[11]= $times . "_1";}
}
else{$Slog[11]= $times . "_0";} #新規登録時
}
##バナーURL(12)
$Slog[12]=$FORM{'Fbana_url'};
##アクセス数(13)
if($Smode_name eq "mente"){$Slog[13]=$Spre_log[13];} #内容変更時
else{$Slog[13]="0_0_0_0";} #新規登録時
##最終アクセスIP(14)
if($Smode_name eq "mente"){$Slog[14]=$Spre_log[14];} #内容変更時
else{$Slog[14]="";} #新規登録時
##キーワード(15)
$Slog[15]=$FORM{'Fkey'};
##ここまで>
##仮登録モードの場合の設定
if($EST{user_check} && $FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){
$Slog[14]=join("<1>",$FORM{Fsougo},$FORM{Fadd_kt},$FORM{'Fto_admin'})
}
#
&customize_join_fld; # 追加項目の編集
#
}
sub check{
#(4)入力内容のチェック(&check)
##禁止ワードのチェック
if($EST_reg{kt_no_word}){
local(@no_words,$word,$check_str);
#ワードチェック対象の項目
$check_str=join(" ",$FORM{Fname},$FORM{Femail},$FORM{Furl},$FORM{Fbana_url},$FORM{Ftitle},$FORM{Fsyoukai},$FORM{Fkey});
@no_words=split(/ /,$EST_reg{kt_no_word});
foreach $word(@no_words){
if(index($check_str,$word)>=0){&mes("登録データの中にが禁止されている言葉が入っています。
登録しようとしているデータのジャンルをこのサーチエンジンが禁止している可能\性があります。","ワードチェックエラー","back_reg");}
}
local($addr_host);
if(!$ENV{'REMOTE_HOST'}){$ENV{'REMOTE_HOST'}=gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2);}
$addr_host=$ENV{REMOTE_ADDR} . " " . $ENV{'REMOTE_HOST'};
foreach $word(@no_words){
if(index($addr_host,$word)>=0){&mes("このIP又はホスト名からの登録は禁止されている可能\性があります。
$ENV{'REMOTE_ADDR'}/$ENV{'REMOTE_HOST'}
","IP/HOSTチェックエラー","back_reg");}
}
}
##名前
if($EST_reg{Fname} && !$FORM{Fname}){&mes("お名前は記入必須項目です","記入ミス","back_reg");}
if(($_=length($FORM{Fname})-($EST_reg{Mname}*2))>0){&mes("お名前は全角$EST_reg{Mname}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
$FORM{Fname}=~ s/\n//g;
##メールアドレス
if($EST_reg{Femail} && !$FORM{Femail}){&mes("メールアドレスは記入必須項目です","記入ミス","back_reg");}
elsif(($_=length($FORM{Femail})-$EST_reg{Memail})>0){&mes("メールアドレスは半角$EST_reg{Memail}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
elsif($EST_reg{Femail} && $FORM{Femail} !~ /(.*)\@(.*)\.(.*)/){&mes("メールアドレスの入力が正しくありません","記入ミス","back_reg");}
$FORM{Femail}=~ s/\n//g;
##パスワード
if($FORM{mode} ne "act_mente"){
if(!$FORM{Fpass}){&mes("パスワードは記入必須項目です","記入ミス","back_reg");}
elsif(($_=length($FORM{'Fpass'})-8)>0){&mes("パスワードは半角8文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
elsif($FORM{Fpass} ne $FORM{Fpass2}){&mes("2回のパスワード入力が一致しませんでした","入力ミス","back_reg");}
$FORM{Fpass}=~ s/\n//g;
}
##ホームページアドレス(2重登録チェックは別のところに記述)
if($FORM{Furl} eq "http://"){$FORM{Furl}="";}
if($EST_reg{Furl} && !$FORM{Furl}){&mes("ホームページアドレスは記入必須項目です","記入ミス","back_reg");}
elsif(($_=length($FORM{Furl})-$EST_reg{Murl})>0){&mes("ホームページアドレスは半角$EST_reg{Murl}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
elsif($FORM{Furl} && $FORM{Furl} !~ /^https?:\/\/.+\..+/){&mes("ホームページアドレスの入力が正しくありません","記入ミス","back_reg");}
$FORM{Furl}=~ s/\n//g;
##タイトルバナーのURL
if($EST_reg{bana_url}){
if($FORM{Fbana_url} eq "http://"){$FORM{Fbana_url}="";}
if($EST_reg{Fbana_url} && !$FORM{Fbana_url}){&mes("タイトルバナーのURLは記入必須項目です","記入ミス","back_reg");}
elsif(($_=length($FORM{Fbana_url})-$EST_reg{Mbana_url})>0){&mes("タイトルバナーのURLは半角$EST_reg{Mbana_url}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
elsif($FORM{Fbana_url} && $FORM{Fbana_url} !~ /^https?:\/\/.+\..+(\.gif|\.jpg|\.jpeg|\.png)$/i){&mes("タイトルバナーのURLの入力が正しくありません","記入ミス","back_reg");}
}
else{$FORM{Fbana_url}="";}
$FORM{Fbana_url}=~ s/\n//g;
##ホームページのタイトル
if($EST_reg{Ftitle} && !$FORM{Ftitle}){&mes("ホームページのタイトルは記入必須項目です","記入ミス","back_reg");}
if(($_=length($FORM{Ftitle})-($EST_reg{Mtitle}*2))>0){&mes("ホームページのタイトルは全角$EST_reg{Mtitle}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
$FORM{Ftitle}=~ s/\n//g;
##ホームページの紹介文
if($EST_reg{Fsyoukai} && !$FORM{Fsyoukai}){&mes("ホームページの紹介文は記入必須項目です","記入ミス","back_reg");}
if(($_=length($FORM{Fsyoukai})-($EST_reg{Msyoukai}*2))>0){&mes("ホームページの紹介文は全角$EST_reg{Msyoukai}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
if(!$EST{syoukai_br}){$FORM{Fsyoukai}=~ s/\n//g;}
else{$FORM{Fsyoukai}=~ s/\n/
/g;}
##管理人コメント
$FORM{Fkanricom}=~ s/\n/
/g;
##カテゴリ
{local(%kt_fl,$i,$j=0,$PR_kt);
&gane_st; #ジャンルステータスをロード
foreach $i(1 .. $EST_reg{kt_max}){
$FORM{"Fkt$i"}=~s/\n//g;
if($kt_fl{$FORM{"Fkt$i"}}){$FORM{"Fkt$i"}="";}
elsif($ganes{$FORM{"Fkt$i"}}){$kt_fl{$FORM{"Fkt$i"}}=1;}
else{$FORM{"Fkt$i"}="";}
##禁止カテゴリに登録しようとした場合
if($FORM{changer} ne "admin" && $gane_UR{$FORM{"Fkt$i"}}){
&mes("登録者の登録ができないカテゴリに変更しようとしています","カテゴリ選択ミス","back_reg");
}
}
foreach(keys %kt_fl){$j++;}
if($EST_reg{kt_min} eq $EST_reg{kt_max}){$PR_kt="$EST_reg{kt_max}個";}
else{$PR_kt="$EST_reg{kt_min}〜$EST_reg{kt_max}個";}
if($EST_reg{kt_min}>$j || $j>$EST_reg{kt_max}){&mes("カテゴリは$PR_kt選択してください","選択数ミス","back_reg");}
}
##キーワード
if($EST_reg{Fkey} && !$FORM{Fkey}){&mes("キーワードは記入必須項目です","記入ミス","back_reg");}
if(($_=length($FORM{Fkey})-($EST_reg{Mkey}*2))>0){&mes("キーワードは全角$EST_reg{Mkey}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
$FORM{Fkey}=~ s/\n//g;
##追加して欲しいカテゴリ
if($FORM{mode} ne "act_mente" && $FORM{changer} ne "admin"){
if($EST_reg{Fadd_kt} && !$FORM{Fadd_kt}){&mes("追加して欲しいカテゴリは記入必須項目です","記入ミス","back_reg");}
if(($_=length($FORM{Fadd_kt})-($EST_reg{Madd_kt}*2))>0){&mes("追加して欲しいカテゴリは全角$EST_reg{Madd_kt}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
$FORM{Fadd_kt}=~ s/\n//g;
}
##相互リンクの有無
$MES_sougo{1}="する"; $MES_sougo{0}="しない";
if($FORM{Fsougo} ne "1"){$FORM{Fsougo}=0;}
##管理人へのメッセージ
if($FORM{mode} ne "act_mente" && $FORM{changer} ne "admin"){
if($EST_reg{Fto_admin} && !$FORM{Fto_admin}){&mes("管理人へのメッセージは記入必須項目です","記入ミス","back_reg");}
if(($_=length($FORM{Fto_admin})-($EST_reg{Mto_admin}*2))>0){&mes("管理人へのメッセージは全角$EST_reg{Mto_admin}文字以内でご記入ください","文字数オーバー(半角換算で$_文字分)","back_reg");}
if(!$EST{syoukai_br}){$FORM{Fto_admin}=~ s/\n//g;}
else{$FORM{Fto_admin}=~ s/\n/
/g;}
}
}
sub PRend{
#(5)登録結果画面出力(&PRend)
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_new_end.html";
}
sub enter{
#(6)修正・削除のためのパスワード認証(&enter)
#クッキーの読み込み
&get_cookie;
if($CK_data[4] && $CK_data[3] && $FORM{id}){ #直接認証
$FORM{pass}=$CK_data[3];
$FORM{changer}="admin";
$FORM{in_mode}="mente";
®ist;
exit;
}
if(!$FORM{id}){
$FORM{id}=$CK_data[1];
}
#概入力値の設定
$FORM{id}=~s/\D//g;
if($FORM{id}){
local(@Tlog,$i=0);
open(IN,"$EST{log_path}$EST{logfile}");
while(){
@Tlog=split(/<>/,$_,4);
if($Tlog[0] eq "$FORM{id}"){$i=1; last;}
}
close(IN);
if(!$i){&mes("指定されたIDのデータは存在しません","エラー","java");}
$PR_data=<<"EOM";
[登録データ]
EOM
}
print "Content-type: text/html\n\n";
require "$EST{temp_path}enter.html";
}
sub help{
#(7)ヘルプの表示(&help)
print "Content-type: text/html\n\n";
require "$EST{temp_path}help.html";
}
sub act_repass{
#(8)パスワードの再発行・変更(&act_repass)
local($new_pass,$cr_new_pass,@log_lines,$line,$id,$mail_to,@Slog);
if($FORM{repass_mode} eq "repass"){ #パスワード再発行時
if($FORM{repass_check} ne "on"){&mes("パスワード再発行の確認チェックがありません。もう一度戻ってからチェックを入れて再度実行してください","確認チェックをしてください","java");}
if(!$EST{re_pass_fl}){&mes("パスワードの再発行はできない設定になっています","エラー","java");}
#新しいパスワードを作成
local($tane,$data_temp,@pass_rm);
@pass_rm = (a .. z , 1 .. 9);
srand($tane ^ ($$ + ($$ << 15)));
foreach (1 .. 7) {
$tane = time() + ($_ * 291);
$data_temp = int(rand(34));
$new_pass .= "$pass_rm[$data_temp]";
}
if($EST{crypt}){$cr_new_pass=crypt($new_pass,"ys");}
else{$cr_new_pass=$new_pass;}
if($EST{mail_pass}){$PR_mes="パスワードの再発行が完了しました
新しいパスワードはメールアドレスに送信されます";}
else{$PR_mes="パスワードの再発行が完了しました
新しいパスワードは「 $new_pass 」です";}
}
else{ #パスワード変更時
$FORM{new_pass}=~s/\W//g;
$new_pass=$FORM{new_pass};
if($EST{crypt}){$cr_new_pass=crypt($new_pass,"ys");}
else{$cr_new_pass=$new_pass;}
if($EST{mail_pass}){$PR_mes="パスワードの変更が完了しました
新しいパスワードはメールアドレスに送信されます";}
else{$PR_mes="パスワードの変更が完了しました
新しいパスワードは「 $new_pass 」です";}
}
&lock();
local($fl=0);
open(IN,"$EST{log_path}$EST{logfile}");
while($line=){
($id)=split(/<>/,$line,2);
if($id eq $FORM{id}){
@Slog=split(/<>/,$line);
if($FORM{repass_mode} ne "repass"){
if($EST{crypt} && $FORM{changer} ne "admin"){$cr_pass=crypt($FORM{pass},$Slog[5]);}
elsif($EST{crypt} && $FORM{changer} eq "admin"){$cr_pass=crypt($FORM{pass},$EST{pass});}
else{$cr_pass=$FORM{pass};}
if($FORM{changer} ne "admin"){
if($cr_pass ne $Slog[5]){&unlock(); &mes("パスワードが間違っています","エラー","java");}
}
else{
if($cr_pass ne $EST{pass}){&unlock(); &mes("管理パスワードが間違っています","エラー","java");}
}
}
else{
if($FORM{email} ne $Slog[9]){&unlock(); &mes("IDとメールアドレスが一致しませんでした","エラー","java");}
}
$mail_to=$Slog[9];
$Slog[5]=$cr_new_pass;
$line=join("<>",@Slog);
$fl=1;
}
push(@log_lines,$line);
}
if(!$fl){&unlock(); &mes("該当するIDはありません","エラー","java");}
close(IN);
open(OUT,">$EST{log_path}$EST{logfile}");
print OUT @log_lines;
close(OUT);
@log_lines=();
if($EST{mail_pass}){require "pl/mail_ys.cgi"; &mail($mail_to,$EST{admin_email},"$EST{search_name} パスワード変更通知","pass","",*Slog);}
&unlock();
&mes($PR_mes,"パスワード変更完了","$EST{home}");
}
sub no_link{
#(9)リンク切れ報告フォーム(&no_link)
if($FORM{"pre"} eq "on"){
$Eref=~s/(\W)/'%' . unpack('H2',$1)/eg;
$mes=<<"EOM";
管理者に「$FORM{title}」についての通知を行います
「通知する」ボタンを押すと管理者へ通知できます
EOM
&mes($mes,"管理者への通知画面");
}
$FORM{id}=~s/\D//g;
if($FORM{id} && (index($ENV{HTTP_USER_AGENT},"Mozilla")>=0 || index($ENV{HTTP_USER_AGENT},"Lynx")>=0)){
local($ip_fl=1,@ip);
if($EST{no_link_ip}){
@ip=split(/,/,$EST{no_link_ip});
foreach(@ip){if(index($ENV{REMOTE_ADDR},$_)>=0){$ip_fl=0;last;}}
}
if($ip_fl){
local($Dhoukoku,$Dcom,$Dname,$Demail,$fl=0);
#報告種別(リンク切れ=0/サイト移転=1/バナーリンク切れ=2/規約違反=3/その他=4)
if($FORM{type_no_link}){$Dhoukoku.="1,";$fl=1;}
if($FORM{type_move}){$Dhoukoku.="2,";$fl=1;}
if($FORM{type_bana_no_link}){$Dhoukoku.="3,";$fl=1;}
if($FORM{type_ill}){$Dhoukoku.="4,";$fl=1;}
if($FORM{type_other}){$Dhoukoku.="5,";$fl=1;}
if(!$fl){&mes("「通知種別」に最低一つはチェックしてください","チェックミス","java");}
#コメント
$FORM{com}=~s/\n/
/g; $Dcom=$FORM{com};
#名前
$FORM{c_name}=~s/\n//g; $Dname=$FORM{c_name};
#E-Mail
$FORM{c_email}=~s/\n//g; $Demail=$FORM{c_email};
if(length("$Dcom$Dname$Demail")>500){&mes("コメント、お名前、E-Mailの文字数は
合計で250文字(全角換算)までで、お願いします。","文字数オーバー","java");}
open(OUT,">>$EST{log_path}no_link_temp.cgi");
print OUT "$FORM{id}<>$ENV{'REMOTE_ADDR'}<>$Dhoukoku<>$Dcom<>$Dname<>$Demail<>\n";
close(OUT);
}
}
$FORM{ref}=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg;
&mes("ご報告ありがとうございました
管理人に「$FORM{title}」についての通知を行いました","ご報告ありがとうございます",$FORM{ref});
}
sub act_regist{
#(p1)新規登録実行(&act_regist)
#管理人のみが登録できるモード
if($EST_reg{no_regist} && $FORM{in_mode} ne "mente" && $FORM{changer} ne "admin"){
&mes("現在、訪問者による新規登録は停止されています","エラー","java");
}
require "$EST{log_path}task_ys.cgi";
local($new,$new_id,@hyouji_log);
#$new=>追加データ書き込み用/%TASK=>更新するカテゴリリスト
#@hyouji_log=>結果表示用のログデータ
#パスワード認証(管理者認証)
if($FORM{'changer'} eq "admin"){
local($cr_pass);
if($EST{crypt}){$cr_pass=crypt($FORM{pass},$EST{pass});}
else{$cr_pass=$FORM{pass};}
if($cr_pass ne $EST{pass}){
if(!$ENV{'REMOTE_HOST'}){$ENV{'REMOTE_HOST'}=gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2);}
&mes("パスワードの認証に失敗しました
認証したコンピュータのIPアドレス:$ENV{'REMOTE_ADDR'}
認証したコンピュータのホスト名:$ENV{'REMOTE_HOST'}","パスワード認証失敗","java");
}
}
✓ #入力内容のチェック
#
if($FORM{'changer'} ne "admin"){
&customize_input_chk; # 新規登録項目のチェック
}
#
&lock; #ロック
#ID取得&2重URL登録チェック
$Cgane_pre=0; #総登録数
if($EST_reg{nijyu_url}){$new_id=&get_id_url_ch(1);}
else{$new_id=&get_id;}
&join_fld($new_id); #入力内容の整形
$new=join("<>",@Slog,"\n");
@hyouji_log=@Slog;
if($EST{user_check} && $FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){ #<仮登録時>
#仮登録ログデータに追加書き込み
open(OUT,">>$EST{log_path}$EST{temp_logfile}");
print OUT $new;
close(OUT);
##メールを送信
#件名に付けるマークを設定
local($PR_mail_add_line,$PR_mail_sougo,$PR_mail_com,$PR_mail_kt);
&kenmei_put_mark;
sub kenmei_put_mark{
if($FORM{Fsougo}){$PR_mail_sougo="(link)";}
else{$PR_mail_sougo="";}
if($FORM{Fto_admin}){$PR_mail_com="(com)";}
else{$PR_mail_com="";}
if($FORM{Fadd_kt}){$PR_mail_kt="(kt)";}
else{$PR_mail_kt="";}
$PR_mail_add_line=$PR_mail_sougo . $PR_mail_com . $PR_mail_kt;
}
$Slog[6]=~s/
/\n/g; $Slog[7]=~s/
/\n/g;
if($EST{mail_temp}){require "pl/mail_ys.cgi";}
if($EST{mail_to_admin} && $EST{mail_temp}){ #管理人へメール送信
&mail($EST{admin_email},$Slog[9],"$EST{search_name} 仮登録完了通知$PR_mail_add_line","temp","admin",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
}
if($EST{mail_to_register} && $EST{mail_temp}){ #登録者へメール送信
&mail($Slog[9],$EST{admin_email},"$EST{search_name} 仮登録完了通知","temp","",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
}
$Slog[6]=~s/\n/
/g; $Slog[7]=~s/\n/
/g;
&unlock(); #ロック解除
##登録結果出力
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_new_end_temp.html";
} #仮登録時>
else{ #<新規登録時>
#本体ログデータに追加書き込み
open(OUT,">>$EST{log_path}$EST{logfile}");
print OUT $new;
close(OUT);
#
if ($Cgane_pre > $customize_max_ys4) {&customize_drop_dt;} # データの削除
#
##登録者のメッセージを保存する設定の場合
if(($FORM{Fadd_kt} || $FORM{Fto_admin}) && $EST_reg{look_mes} && $EST_reg{look_mes}=~/(\d+)(\w*)/){
local(@look_mes_list,@look_mes,$look_mes,$i=0,$max=$1);
open(IN,"$EST{log_path}look_mes.cgi");
while(){
if($i<$max){push(@look_mes_list,$_);}
else{last;}
$i++;
}
close(IN);
#一括送信する場合
if($2 eq "m" && $i>=$max){
$mail_mes=<<"EOM";
## $EST{search_name} 登録者からのメッセージ通知 ##
EOM
local(@tlook_mes);
foreach(@look_mes_list){
@tlook_mes=split(/<>/,$_);
$mail_mes.=<<"EOM";
+-------------------------+
登録日:$tlook_mes[1] / お名前:$tlook_mes[5] / Email: $tlook_mes[4]
タイトル:$tlook_mes[7]
URL:
$tlook_mes[6]
修正用URL:
$EST{cgi_path_url}regist_ys.cgi?mode=enter&id=$tlook_mes[0]
EOM
if($tlook_mes[2]){$mail_mes.="新設希望カテゴリ:$tlook_mes[2]\n";}
if($tlook_mes[3]){
$tlook_mes[3]=~s/
/\n/g;
$mail_mes.=$tlook_mes[3] . "\n";
}
}
$mail_mes.="+-------------------------+\n";
require "pl/mail_ys.cgi";
&mail($EST{admin_email},$EST{admin_email},"$EST{search_name} 登録者からのメッセージ通知($max件)","any","","","","","","",$mail_mes);
$i=0;
@look_mes_list=();
open(OUT,">$EST{log_path}look_mes.cgi");
close(OUT);
}
if($i eq $max){pop @look_mes_list;}
#新規追加データ($look_mes)を作成
$look_mes[0]=$Slog[0];
$look_mes[1]=$Slog[4];
$look_mes[2]=$FORM{Fadd_kt};
$look_mes[3]=$FORM{Fto_admin}; $look_mes[4]=~s/\n/
/g;
$look_mes[4]=$Slog[9];
$look_mes[5]=$Slog[8];
$look_mes[6]=$Slog[2];
$look_mes[7]=$Slog[1];
$look_mes=join("<>",@look_mes); $look_mes=~s/\n//g;
$look_mes.="<>\n";
unshift(@look_mes_list,$look_mes);
open(OUT,">$EST{log_path}look_mes.cgi");
print OUT @look_mes_list;
close(OUT);
}
##メールを送信
unless($FORM{FCmail} eq "no" && $FORM{changer} eq "admin"){ #送信する設定なら
#件名に付けるマークを設定
local($PR_mail_sougo,$PR_mail_com,$PR_mail_kt);
&kenmei_put_mark;
$Slog[6]=~s/
/\n/g; $Slog[7]=~s/
/\n/g;
if($EST{mail_new}){require "pl/mail_ys.cgi";}
if($EST{mail_to_admin} && $EST{mail_new}){ #管理人へメール送信
&mail($EST{admin_email},$Slog[9],"$EST{search_name} 新規登録完了通知$PR_mail_add_line","new","admin",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
}
if($EST{mail_to_register} && $EST{mail_new}){ #登録者へメール送信
&mail($Slog[9],$EST{admin_email},"$EST{search_name} 新規登録完了通知","new","",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
}
$Slog[6]=~s/\n/
/g; $Slog[7]=~s/\n/
/g;
}
#更新するカテゴリリストを作成
#%TASK/@TASK_listを使用
@TASK_list=();
$TASK{"new"}=1; #新着情報
if($FORM{'changer'} eq "admin"){ #マークカテゴリの更新
foreach(1 .. 2){ #←マーク数を増やすときは修正
if($FORM{"Fmark$_"}){$TASK{"m$_"}=1;}
}
}
if($EST{html}){ #カテゴリをHTMLファイルで表示する場合
local(@kt,$i,$tmp);
foreach $i(1 .. $EST_reg{kt_max}){
if($FORM{"Fkt$i"}){
$TASK{$FORM{"Fkt$i"}}=1;
push(@TASK_list,$FORM{"Fkt$i"});
@kt=split(/_/,$FORM{"Fkt$i"});
if($#kt>0){
pop(@kt); $tmp=join("_",@kt);
$TASK{$tmp}=1;
push(@TASK_list,$tmp);
}
}
}
}
else{ #カテゴリをCGIで動的に表示する場合
local($kt,$i);
foreach $i(1 .. $EST_reg{kt_max}){
if($FORM{"Fkt$i"}){
($kt)=split(/_/,$FORM{"Fkt$i"});
$TASK{$kt}=1;
}
}
}
##派生ファイルの処理
if($EST{html} && $EST{task} ne "2"){ #即時処理(html && !cron)
&MK_html(*TASK_list);
&make_task;
}
else{&make_task;} #タスクファイルに書き込み
##総登録数を記録
open(OUT,">$EST{log_path}total_url.log");
print OUT $Cgane_pre+1;
close(OUT);
&unlock(); #ロック解除
##登録結果出力
@Slog=@hyouji_log;
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_new_end.html";
} #新規登録時>
}
sub get_id_url_ch{
##新規登録用のIDを取得&2重URL登録チェック
#チェックに掛かった場合にはロックも解除
#$arg=>(新規登録=1/内容変更=2)
local($id,$line,@Tlog,$fl=$_[0],$i=0,$pre_title);
open(IN,"$EST{log_path}$EST{logfile}");
while($line=){
@Tlog=split(/<>/,$line);
if($FORM{Furl} eq $Tlog[2]){$i++; $pre_title=$Tlog[1];}
if($FORM{id} eq $Tlog[0]){@Spre_log=@Tlog;}
if($fl<=$i){&unlock; &mes("そのURLはすでに登録されています
$Tlog[1] :
$Tlog[2]","2重登録エラー","java");}
$id=$Tlog[0];
$Cgane_pre++;
}
if($fl eq "2" && $i eq "1" && $Spre_log[2] ne $FORM{Furl}){&unlock; &mes("そのURLはすでに登録されています
$pre_title :
$FORM{Furl}","2重登録エラー","java");}
close(IN);
if($FORM{changer} ne "admin" && $EST{user_check} && $FORM{mode} eq "act_regist"){
#仮登録モードでユーザの新規登録時
open(IN,"$EST{log_path}$EST{temp_logfile}");
while($line=){
#
#@Tlog=split(/<>/,$line,5);
@Tlog=split(/<>/,$line);
#
if($FORM{Furl} eq $Tlog[2]){$i++;}
if($fl<=$i){&unlock; &mes("そのURLは現在登録申\請中です
$Tlog[1] :
$Tlog[2]","2重登録エラー","java");}
$id=$Tlog[0];
}
close(IN);
}
#
if($FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){
if ($Tlog[17] =~ m/^$ENV{'REMOTE_ADDR'}/) {
&unlock; &mes("申\し訳ありません。登録間隔を設定しております。
1週間後に登録して下さい","登録間隔エラー","java");
}
}
#
return $id+1;
}
sub get_id{
##新規登録用のIDを取得
local($id,$line);
if($FORM{changer} ne "admin" && $EST{user_check} && $FORM{mode} eq "act_regist"){ #仮登録モードでユーザの新規登録時
open(IN,"$EST{log_path}$EST{temp_logfile}");
}
else{ #その他
open(IN,"$EST{log_path}$EST{logfile}");
}
while(){$line=$_; $Cgane_pre++;}
close(IN);
($id)=split(/<>/,$line);
return $id+1;
}
sub act_mente{
#(p2)登録内容変更(&act_mente)
if($FORM{changer} ne "admin" && $EST_reg{no_mente}){&mes("現在、登録者による修正・削除は停止されています","エラー","java");}
require "$EST{log_path}task_ys.cgi";
local($new,@log_lines,$line,@TASK_list);
#$new=>追加データ書き込み用/%TASK=>更新するカテゴリリスト
#パスワード認証(管理者認証)
if($FORM{'changer'} eq "admin"){
local($cr_pass);
if($EST{crypt}){$cr_pass=crypt($FORM{pass},$EST{pass});}
else{$cr_pass=$FORM{pass};}
if($cr_pass ne $EST{pass}){
if(!$ENV{'REMOTE_HOST'}){$ENV{'REMOTE_HOST'}=gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2);}
&mes("パスワードの認証に失敗しました
認証したコンピュータのIPアドレス:$ENV{'REMOTE_ADDR'}
認証したコンピュータのホスト名:$ENV{'REMOTE_HOST'}","パスワード認証失敗","java");
}
}
##その他の設定
$Smode_name="mente";
✓ #入力内容のチェック
&lock; #ロック
#@Spre_log取得&2重URL登録チェック
if($EST_reg{nijyu_url}){&get_id_url_ch(2);}
else{
open(IN,"$EST{log_path}$EST{logfile}");
while(){
@Spre_log=split(/<>/,$_);
if($Spre_log[0] eq $FORM{id}){last;}
}
close(IN);
}
#登録者のパスワード認証
if($FORM{changer} ne "admin"){
local($cr_pass);
if($EST{crypt}){$cr_pass=crypt($FORM{pass},$Spre_log[5]);}
else{$cr_pass=$FORM{pass};}
if($Spre_log[5] ne $cr_pass){&unlock(); &mes("パスワードが間違っています$cr_pass $Spre_log[5]","パスワード認証エラー","java");}
}
&join_fld($Spre_log[0]); #入力内容の整形
$new=join("<>",@Slog);
$new=~s/\n//g; $new .="<>\n";
#本体ログデータに書き込み
open(IN,"$EST{log_path}$EST{logfile}");
while($line=){
@Tlog=split(/<>/,$line);
if($Tlog[0] ne $Spre_log[0]){push(@log_lines,$line);}
else{push(@log_lines,$new);}
}
close(IN);
open(OUT,">$EST{log_path}$EST{logfile}");
print OUT @log_lines;
close(OUT);
##メールを送信
$Slog[6]=~s/
/\n/g; $Slog[7]=~s/
/\n/g;
if($EST{mail_new}){require "pl/mail_ys.cgi";}
if($EST{mail_to_admin} && $EST{mail_ch}){ #管理人へメール送信
&mail($EST{admin_email},$Slog[9],"$EST{search_name} 登録内容変更完了通知","mente","admin",*Slog);
}
if($EST{mail_to_register} && $EST{mail_ch}){ #登録者へメール送信
&mail($Slog[9],$EST{admin_email},"$EST{search_name} 登録内容変更完了通知","mente","",*Slog);
}
$Slog[6]=~s/\n/
/g; $Slog[7]=~s/\n/
/g;
##更新するカテゴリリストを作成
#%TASKを使用
#更新情報or新着情報
{local(@time);
@time=split(/_/,$Spre_log[11]);
if(!$time[1] && $times-$time[0]<$EST{new_time}*86400){$TASK{"new"}=1;}
else{$TASK{"renew"}=1;}
}
#マークカテゴリの更新
{local(@mark,$mark,$i=1);
if($FORM{'changer'} eq "admin"){
foreach(1 .. 2){ #←マーク数を増やすときは修正
if($FORM{"Fmark$_"}){$TASK{"m$_"}=1;}
}
}
@mark=split(/_/,$Spre_log[3]);
foreach $mark(@mark){
if($mark){$TASK{"m$i"}=1;}
$i++;
}
}
if($EST{html}){ #カテゴリをHTMLファイルで表示する場合
local(@kt,$i,$tmp);
foreach $i(1 .. $EST_reg{kt_max}){
if($FORM{"Fkt$i"}){
$TASK{$FORM{"Fkt$i"}}=1;
push(@TASK_list,$FORM{"Fkt$i"});
@kt=split(/_/,$FORM{"Fkt$i"});
if($#kt>0){
pop(@kt); $tmp=join("_",@kt);
if(!$TASK{$tmp}){push(@TASK_list,$tmp);}
$TASK{$tmp}=1;
}
}
}
}
else{ #カテゴリをCGIで動的に表示する場合
local($kt,$i);
foreach $i(1 .. $EST_reg{kt_max}){
if($FORM{"Fkt$i"}){
($kt)=split(/_/,$FORM{"Fkt$i"});
$TASK{$kt}=1;
}
}
}
##派生ファイルの処理
if($EST{html} && $EST{task} ne "2"){ #即時処理(html && !cron)
&MK_html(*TASK_list);
&make_task;
}
else{&make_task;} #タスクファイルに書き込み
&unlock(); #ロック解除
#マークの表示設定
{local(@mark,$mark,$i=1); $PR_mark="";
@mark=split(/_/,$Slog[3]);
foreach $mark(@mark){
if($mark){$PR_mark .= $EST{"name_m$i"} . " ";}
$i++;
}
}
#カテゴリの変更表示設定
if($EST{user_change_kt}){$PR_kt="※登録者によるカテゴリ変更は現在禁止されています";}
else{$PR_kt="";}
##表示用変数を設定
@Slog=split(/<>/,$new);
##登録結果出力
print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_mente_end.html";
}
sub act_del{
#(p3)削除実行(&act_del)
local($Cdel=0,%kousin_list);
require "$EST{log_path}task_ys.cgi";
if($FORM{del_mode} eq "single"){ #del_mode:single
if($FORM{del_check} ne "on"){&mes("削除確認のためにチェックを入れてから削除ボタンを押してください","確認チェックをしてください","java");}
if($FORM{changer} ne "admin" && $EST_reg{no_mente}){&mes("現在、登録者による修正・削除は停止されています","エラー","java");}
if($FORM{changer} eq "admin"){&pass_check;}
&lock;
local(@log_lines,@Slog,$line,$fl=0);
open(IN,"$EST{log_path}$EST{logfile}");
while($line=){
@Slog=split(/<>/,$line);
if($FORM{id} eq $Slog[0]){
if($FORM{changer} ne "admin"){ #削除する人が登録者の場合
local($cr_pass);
if($EST{crypt}){$cr_pass=crypt($FORM{pass},$Slog[5]);}
else{$cr_pass=$FORM{pass};}
if($cr_pass ne $Slog[5]){&unlock; &mes("パスワードの認証に失敗しました","エラー","java");}
}
local(@kt,$kt,@mark,$mark,$i=1,@time);
@kt=split(/&/,$Slog[10]);
foreach $kt(@kt){ #カテゴリ
$kousin_list{$kt}=1;
}
@mark=split(/_/,$Slog[3]);
foreach $mark(@mark){ #マーク
if($mark){$TASK{"m$i"}=1;}
$i++;
}
@time=split(/_/,$Slog[11]);
if(time - $time[0]<86400*$EST{new_time}){ #新着・更新
if($time[1]){$TASK{renew}=1;}
else{$TASK{new}=1;}
}
$Cdel++;
$fl=1;
}
else{push(@log_lines,$line);}
}
close(IN);
if(!$fl){&unlock; &mes("該当するデータは見つかりません","エラー","java");}
open(OUT,">$EST{log_path}$EST{logfile}");
print OUT @log_lines;
close(OUT);
@log_lines=();
}
else{ #del_mode:multi
if($FORM{changer} ne "admin"){&mes("変更者指定が不正です","エラー","java");}
&pass_check;
&lock();
#リンク切れリストからの削除の場合
if($FORM{no_link} eq "on"){
local(@data,@lines);
open(IN,"$EST{log_path}no_link.cgi");
while(){
@data=split(/<>/,$_); #id<>count<>ip<>url<>\n
if(!$FORM{"id_$data[0]"}){push(@lines,$_);}
}
close(IN);
open(OUT,">$EST{log_path}no_link.cgi");
print OUT @lines;
close(OUT);
}
#デッドリンクチェック済みリストからの削除の場合
if($FORM{dl_check} eq "on"){
unless(-T $FORM{checkfile}){&unlock(); &mes("ファイル指定が異常です","エラー","java");}
local(@data,@lines);
open(IN,"./$FORM{checkfile}");
while(){
@data=split(/\t/,$_); #id=0<><><>url=13<>\n
if(!$FORM{"id_$data[0]"}){push(@lines,$_);}
}
close(IN);
open(OUT,">./$FORM{checkfile}");
print OUT @lines;
close(OUT);
}
local(@log_lines,@Slog,$line);
open(IN,"$EST{log_path}$EST{logfile}");
while($line=){
@Slog=split(/<>/,$line);
if($FORM{"id_$Slog[0]"} eq "on"){ #削除リストに入っている場合
local(@kt,$kt,@mark,$mark,$i=1,@time);
@kt=split(/&/,$Slog[10]);
foreach $kt(@kt){ #カテゴリ
$kousin_list{$kt}=1;
}
@mark=split(/_/,$Slog[3]);
foreach $mark(@mark){ #マーク
if($mark){$TASK{"m$i"}=1;}
$i++;
}
@time=split(/_/,$Slog[11]);
if(time - $time[0]<86400*$EST{new_time}){ #新着・更新
if($time[1]){$TASK{renew}=1;}
else{$TASK{new}=1;}
}
$Cdel++;
}
else{push(@log_lines,$line);}
}
close(IN);
open(OUT,">$EST{log_path}$EST{logfile}");
print OUT @log_lines;
close(OUT);
@log_files=();
}
##%kousin_listの内容をCGI/HTMLに応じて%TASK/@TASK_listに入れる
##派生ファイルの処理
if($EST{html} && $EST{task} ne "2"){ #即時処理(html && !cron)
foreach(keys %kousin_list){
$TASK{$_}=1;
push(@TASK_list,$_);
}
&MK_html(*TASK_list);
}
else{ #それ以外の場合
if($EST{html}){ #html
foreach(keys %kousin_list){
$TASK{$_}=1;
}
}
else{ #CGI
local(@kt,$kt);
foreach(keys %kousin_list){
@kt=split(/_/,$_);
$TASK{$kt[0]}=1;
}
}
}
&make_task;
##総登録数を記録
open(IN,"$EST{log_path}total_url.log");
$Cgane_pre= - $Cdel;
close(IN);
open(OUT,">$EST{log_path}total_url.log");
print OUT $Cgane_pre;
close(OUT);
&unlock();
if($FORM{changer} eq "admin" && ($FORM{no_link} eq "on" || $FORM{dl_check} eq "on")){&mes("削除処理が完了しました","削除完了","kanri");}
else{&mes("削除処理が完了しました","削除完了",$EST{home});}
}
####個別処理####
##目次##
#フォームデータのデコード(&form_decode)
sub form_decode{
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$form,$ENV{'CONTENT_LENGTH'}); }
else { $form=$ENV{'QUERY_STRING'}; }
@pairs=split(/&/,$form);
foreach $pair (@pairs) {
($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
$name =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
$value =~ s/>/>/g;
$value =~ s/</g;
$value =~ s/\r//g;
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$FORM{$name} = $value;
}
}
#(6)メッセージ画面出力(&mes)
#書式:&mes($arg1,$arg2,$arg3);
#機能:メッセージ画面を出力する
#引数:$arg1=>表示するメッセージ
# $arg2=>ページのタイトル(省略時は「メッセージ画面」)
# $arg3=>・JavaScriptによる「戻る」ボタン表示=java
# ・$ENV{'HTTP_REFERER'}を使う場合=env
# ・管理室へのボタン=kanri
# ・通常のURL又はパスを指定する場合にはそのURL又はパスを記入
# ・省略時は非表示
# $arg4=>ロック解除=unlock
#戻り値:なし
sub mes{
print "Content-type: text/html\n\n";
$Munlock=$_[3];
if($Munlock eq "unlock"){&unlock();}
$MES=$_[0];
if($_[1]){$TITLE=$_[1];}
else{$TITLE="メッセージ画面";}
if($_[2] eq "java" || ($_[2] eq "back_reg" && $FORM{mode} eq "act_mente")){
$BACK_URL=""
}
elsif($_[2] eq "env"){
$BACK_URL="【戻る】";
}
elsif($_[2] eq "kanri"){
$BACK_URL=""
}
elsif(!$_[2]){$BACK_URL="";}
elsif($_[2] eq "back_reg"){
$FORM{Fsyoukai}=~s/
/\n/g;
if($FORM{changer} eq "admin"){$FORM{in_mode}="new_dairi";}
else{$FORM{in_mode}="form";}
$BACK_URL=<<"EOM";