/** * Get a pid to cpid mapping array of a particular contest * @param type $cid contest id * @return array pid to cpid mapping */ function get_cpids($cid) { $cpid_hash = array(); $contest_problem_tbl = new ContestProblemTbl($cid); if ($contest_problem_tbl->Get()) { do { $cpid_hash[$contest_problem_tbl->detail['pid']] = $contest_problem_tbl->detail['cpid']; } while ($contest_problem_tbl->MoreRows()); } return $cpid_hash; }
function UpdateContestProblemMap($cid, $cpidMap) { global $conn; $rs = new RecordSet($conn); $rs->Query("DELETE FROM contest_problems WHERE cid = {$cid}"); $rs->affected_rows(); $indexs = array_keys($cpidMap); sort($indexs); $count = 1000; foreach ($indexs as $index) { $cpTbl = new ContestProblemTbl(); $cpTbl->detail['cid'] = $cid; $cpTbl->detail['pid'] = $cpidMap[$index]; $cpTbl->detail['cpid'] = $count; $cpTbl->Add(); ++$count; } }
<?php require "./navigation.php"; $cid = safeget("cid"); $contestTbl = new ContestsTbl($cid); if (!$contestTbl->Get()) { error("Contest not found"); } $course_id = $contestTbl->detail['course_id']; if (!is_contest_modifiable($cid)) { error("No permission"); } $contestProblemTbl = new ContestProblemTbl($cid); $cpidIndex = array(); if ($contestProblemTbl->Get()) { do { $cpidIndex[$contestProblemTbl->detail['pid']] = $contestProblemTbl->detail['cpid']; } while ($contestProblemTbl->MoreRows()); } $contest = $contestTbl->detail; $p = tryget("p", 1); $rs = new RecordSet($conn); $query_str = "SELECT problems.pid FROM problems LEFT JOIN contest_problems ON contest_problems.pid = problems.pid WHERE avail = 1 AND problems.cid = {$cid} "; $count_str = "SELECT count(*) FROM problems WHERE avail = 1 AND cid = {$cid} "; $rs->nPageSize = 20; $rs->PageCount($count_str); $rs->SetPage($p); $query_str .= "ORDER BY cpid ASC"; $rs->dpQuery($query_str); $now = time(); ?>