【お詫び】8月9日 20時〜25時10分ごろのアクセス障害について
ログインしていません
こちらからログインしてください。
false, 'message' => "投稿が見つかりませんでした。"], JSON_UNESCAPED_UNICODE); exit(); } // 管理者パスワード認証 $is_admin_password = validateBoardAdmin($board["id"], $delete_password ?? NULL); if ($is_admin_password["success"] || $master) { $stmt = $dbh->prepare("UPDATE posts SET deleted_at = NOW() WHERE id = :post_id"); $stmt->bindValue(":post_id", $post["id"]); $stmt->execute(); $_SESSION["message"] = "管理者権限で投稿 {$post["post_number"]} を削除しました。"; if($post["post_number"] === 1) { $stmt = $dbh->prepare("UPDATE threads SET deleted_at = NOW() WHERE id = :thread_id"); $stmt->bindValue(":thread_id", $post["thread_id"]); $stmt->execute(); $_SESSION["message"] = "管理者権限でスレッド {$post["thread_number"]} を削除しました。"; header("Location:".$url); exit(); } header("Location: $url/$path_info[1]"); exit(); } if($domain === "hamster.land" && $login_user) { if ($post["display_cap_user_id"] && $login_user["user_id"] === $post["display_cap_user_id"]) { $stmt = $dbh->prepare("UPDATE posts SET deleted_at = NOW() WHERE id = :post_id"); $stmt->bindValue(":post_id", $post["id"]); $stmt->execute(); $_SESSION["message"] = "投稿 {$post["post_number"]} を削除しました。"; if($post["post_number"] === 1) { $stmt = $dbh->prepare("UPDATE threads SET deleted_at = NOW() WHERE id = :thread_id"); $stmt->bindValue(":thread_id", $post["thread_id"]); $stmt->execute(); $_SESSION["message"] = "スレッド {$post["thread_number"]} を削除しました。"; header("Location:".$url); exit(); } header("Location: $url/$path_info[1]"); exit(); } } if ($post["post_number"] !== 1 && $settings["enable_thread_master_function"] && $settings["enable_thread_master_delete"]) { $stmt = $dbh->prepare("SELECT * FROM posts WHERE board_id = :board_id AND thread_id = :thread_id AND post_number = 1 AND edit_password IS NOT NULL"); $stmt->bindValue(":board_id", $board["id"], PDO::PARAM_INT); $stmt->bindValue(":thread_id", $thread["id"], PDO::PARAM_INT); $stmt->execute(); $first_post = $stmt->fetch(PDO::FETCH_ASSOC); if($first_post) { if (password_verify($delete_password, $first_post["edit_password"])) { // 既存の post_metadata を配列に変換(空なら空配列) $post_metadata = []; if (!empty($post['post_metadata'])) { $decoded = json_decode($post['post_metadata'], true); if (is_array($decoded)) { $post_metadata = $decoded; } } // 削除人名を追記(既存キーがあれば上書き) $post_metadata['deleted_by'] = "スレッド作成者"; // JSON へ再エンコード(日本語・スラッシュをエスケープしない) $metadata_json = json_encode( $post_metadata, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ); $stmt = $dbh->prepare("UPDATE posts SET deleted_at = NOW(), post_metadata = :post_metadata WHERE id = :post_id"); $stmt->bindValue(":post_id", $post["id"], PDO::PARAM_INT); $stmt->bindValue(':post_metadata', $metadata_json, PDO::PARAM_STR); $stmt->execute(); $_SESSION["message"] = "スレッドマスター権限で投稿 {$post["post_number"]} を削除しました。"; header("Location:".$_SERVER["REQUEST_URI"]); exit(); } } } // 削除パスワードが設定されていない場合は削除を拒否 if(!$post["delete_password"] || !$delete_password) { $_SESSION["error"] = "削除パスワードが違います。"; header("Location:".$_SERVER["REQUEST_URI"]); exit(); } // 削除パスワード認証 if($delete_password) { if (!password_verify($delete_password, $post["delete_password"])) { $_SESSION["error"] = "削除パスワードが違います。"; header("Location:".$_SERVER["REQUEST_URI"]); exit(); } } // IPアドレスで削除 // if($post["ip_address"] !== $_SERVER["REMOTE_ADDR"]) { // echo json_encode(['success' => false, 'message' => "投稿を削除する権限がありません。"]); // exit(); // } // 現在時刻と投稿時刻の差を計算 $currentTime = new DateTime(); // 現在時刻 $postTime = new DateTime($post['posted_at']); // 投稿時刻からDateTimeオブジェクトを生成 $interval = $postTime->diff($currentTime); // 現在時刻と投稿時刻の差分を取得 $minutesDiff = $interval->days * 24 * 60 + $interval->h * 60 + $interval->i; // 日、時間、分をすべて分に換算して合計する // 編集・削除の可否を判断 if (false && $minutesDiff >= 5) { // 5分を超えていれば編集・削除不可 $_SESSION["error"] = "削除可能時間が過ぎています。"; header("Location:".$_SERVER["REQUEST_URI"]); exit(); } //逆引き不可拒否 if(isset($settings["reject_unresolved_hosts"])) { if(gethostbyaddr($_SERVER["REMOTE_ADDR"]) == $_SERVER["REMOTE_ADDR"] || gethostbyaddr($_SERVER["REMOTE_ADDR"]) == "") { echo json_encode(['success' => false, 'message' => "拒否されました。(逆引き不可)"], JSON_UNESCAPED_UNICODE); exit(); } } // 外部からの編集禁止 if($settings["prohibit_external_post"] && !strstr($_SERVER['HTTP_REFERER'],$url) && $_SERVER["REQUEST_METHOD"] === "POST") { echo json_encode(['success' => false, 'message' => "拒否されました。(外部投稿禁止)"], JSON_UNESCAPED_UNICODE); exit(); } // トランザクション開始 $dbh->beginTransaction(); try { $stmt = $dbh->prepare("UPDATE posts SET deleted_at = NOW() WHERE id = :post_id"); $stmt->bindValue(":post_id", $post["id"]); $stmt->execute(); $_SESSION["message"] = "投稿 {$post["post_number"]} を削除しました。"; if($post["post_number"] === 1) { $stmt = $dbh->prepare("UPDATE threads SET deleted_at = NOW() WHERE id = :thread_id"); $stmt->bindValue(":thread_id", $post["thread_id"]); $stmt->execute(); $_SESSION["message"] = "スレッド {$post["thread_number"]} を削除しました。"; // トランザクション確定 $dbh->commit(); header("Location:".$url); exit(); } // トランザクション確定 $dbh->commit(); header("Location:".$_SERVER["REQUEST_URI"]); exit(); } catch (\Throwable $e) { // エラーが発生した場合、トランザクションをロールバック $dbh->rollback(); throw $e; $_SESSION['error'] = $e->getMessage(); echo json_encode(['success' => false, 'message' => $e->getMessage()]); exit(); } } ?>
User Icon
2: 堀田登生
2025-05-11 15:27:40 WFNBQ2345

障害者に責任能力はないよ

[引用] [編集] [削除] [イイネ!1] [アカン!0]