= 4 && !in_array($result, array(12, 15, 16, 17), true); } function status_action_get_return_url() { $default_url = "../status.php"; if (!isset($_POST['return_url'])) { return $default_url; } $return_url = trim($_POST['return_url']); if ($return_url === "") { return $default_url; } $parts = parse_url($return_url); if ($parts === false || !isset($parts['path']) || basename($parts['path']) !== 'status.php') { return $default_url; } $safe_url = $parts['path']; if (isset($parts['query']) && $parts['query'] !== "") { $safe_url .= "?".$parts['query']; } return $safe_url; } function status_action_redirect($return_url) { header("Location: ".$return_url); exit(0); } $return_url = status_action_get_return_url(); $sid = isset($_POST['sid']) ? intval($_POST['sid']) : 0; $action = isset($_POST['action']) ? $_POST['action'] : ""; if ($sid <= 0 || ($action !== 'rejudge' && $action !== 'delete')) { status_action_redirect($return_url); } $solution = pdo_query("SELECT `solution_id`,`problem_id`,`user_id`,`contest_id`,`result` FROM `solution` WHERE `solution_id`=? LIMIT 1", $sid); if (empty($solution)) { status_action_redirect($return_url); } $row = $solution[0]; $problem_id = intval($row['problem_id']); $contest_id = intval($row['contest_id']); $user_id = $row['user_id']; $result = intval($row['result']); if ($action === 'rejudge') { pdo_query("DELETE FROM `sim` WHERE `s_id`=?", $sid); pdo_query("UPDATE `solution` SET `result`=1,`pass_rate`=0 WHERE `solution_id`=? AND `problem_id`>0", $sid); if ($OJ_REDIS && class_exists('Redis')) { $redis_class = 'Redis'; $redis = new $redis_class(); $redis->connect($OJ_REDISSERVER, $OJ_REDISPORT); if (isset($OJ_REDISAUTH)) { $redis->auth($OJ_REDISAUTH); } $redis->lpush($OJ_REDISQNAME, $sid); $redis->close(); } if (isset($OJ_UDP) && $OJ_UDP) { trigger_judge($sid); } status_action_redirect($return_url); } if (!status_action_can_delete($result)) { status_action_redirect($return_url); } pdo_query("DELETE FROM `sim` WHERE `s_id`=? OR `sim_s_id`=?", $sid, $sid); pdo_query("DELETE FROM `source_code` WHERE `solution_id`=?", $sid); pdo_query("DELETE FROM `source_code_user` WHERE `solution_id`=?", $sid); pdo_query("DELETE FROM `runtimeinfo` WHERE `solution_id`=?", $sid); pdo_query("DELETE FROM `compileinfo` WHERE `solution_id`=?", $sid); pdo_query("DELETE FROM `custominput` WHERE `solution_id`=?", $sid); pdo_query("DELETE FROM `solution` WHERE `solution_id`=? LIMIT 1", $sid); if ($problem_id > 0) { pdo_query( "UPDATE `problem` SET `accepted`=(SELECT count(1) FROM `solution` WHERE `problem_id`=? AND `result`=4), `submit`=(SELECT count(1) FROM `solution` WHERE `problem_id`=?) WHERE `problem_id`=?", $problem_id, $problem_id, $problem_id ); } if ($contest_id > 0 && $problem_id > 0) { pdo_query( "UPDATE `contest_problem` SET `c_accepted`=(SELECT count(1) FROM `solution` WHERE `problem_id`=? AND `contest_id`=? AND `result`=4), `c_submit`=(SELECT count(1) FROM `solution` WHERE `problem_id`=? AND `contest_id`=?) WHERE `problem_id`=? AND `contest_id`=?", $problem_id, $contest_id, $problem_id, $contest_id, $problem_id, $contest_id ); } pdo_query( "UPDATE `users` SET `solved`=(SELECT count(DISTINCT `problem_id`) FROM `solution` WHERE `user_id`=? AND `result`=4), `submit`=(SELECT count(*) FROM `solution` WHERE `user_id`=? AND `problem_id`>0) WHERE `user_id`=?", $user_id, $user_id, $user_id ); status_action_redirect($return_url); ?>