
#●
#---------------------------------------------------------------------------------------
# 名称     | Delete_Message
# Version  | 1.00
# 処理名   | 削除処理
# 動作内容 | 投稿されたデータを削除(論理削除)する
# 引数     | なし
# 戻り値   | なし
#
sub Delete_Message {

	if (!@DELETE) { return; } # １つもチェックされていなければ処理しない

	foreach $message (@messages) { # 記事の存在とパスワードを処理するための準備

		($number,$pwd,$i) = split(/\t/,$message,3);
		$check_pwd{$number} = $pwd; # 番号をキー、値をパスワードにした連想配列%check_pwdを用意
	}

	($admin) = &CheckAdmin($in{'PASSWD'}); # 管理者パスワードかどうか？

	if ($admin) { # 管理者パスワードの場合は簡易チェックのみ

		foreach $number (@DELETE) {

			$number =~ s/\n//; # 改行コードを削除

			if ($check_pwd{$number} eq '') { push(@ERR,"$number(N)"); } # 存在しない記事番号
			elsif ($deleted{$number}) { push(@ERR,"$number(D)"); } # 削除済み
			else {
				$deleted{$number} = 1; # 削除指定記事とする
				push(@DELETE_OK,"$number\n"); # 削除する記事番号
			}
		}
	}
	else { # 管理者パスワードでない場合は記事のパスワードと照合
		foreach $number (@DELETE) {

			$number =~ s/\n//;

			if ($check_pwd{$number} eq '') { push(@ERR,"$number(N)"); next; } # 存在しない記事番号
			elsif ($deleted{$number}) { push(@ERR,"$number(D)"); next; } # 削除済み

			if ($check_pwd{$number} =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; }

			if (crypt($in{'PASSWD'},substr($check_pwd{$number},$salt,2)) eq $check_pwd{$number}) { $deleted{$number} = 1; push(@DELETE_OK,"$number\n"); } # 認証
			else { push(@ERR,"$number(A)"); }
		}
	}

	if (!open(OUT,">> $delete_file")) { &Error('エラー','削除管理ファイルが見つからないか、記録できません.'); } # 追加書込モードで記録する
	print OUT @DELETE_OK;
	close(OUT);

	undef %check_pwd; # メモリ開放

}#End_of_Delete_Message

