function RateProblem(&$arg) { global $login_uid; global $logged; if (!$logged) { Fail("Must login first"); } $pid = safefetch($arg, 'pid', 'Fail'); $score = intval(safefetch($arg, 'score', 'Fail')); if ($score < 0 || $score > 5) { Fail("Score out of range"); } $problem = new ProblemTbl($pid); if (!$problem->Get()) { Fail("Problem not found"); } $rating = new RatingTbl(); $prikey = array('uid' => $login_uid, 'pid' => $pid); if ($rating->GetByFields($prikey)) { $cur_score = intval($rating->detail['rate']); $problem->update['rate_tot'] = intval($problem->detail['rate_tot']) - $cur_score + $score; if (!$problem->Update()) { Fail("Fail to update database"); } $rating->update['rate'] = $score; if (!$rating->UpdateByFields($prikey)) { Fail("Fail to update database"); } } else { $problem->update['rate_tot'] = intval($problem->detail['rate_tot']) + $score; $problem->update['rate_count'] = intval($problem->detail['rate_count']) + 1; if (!$problem->Update()) { Fail("Fail to update database"); } $rating->detail['uid'] = $login_uid; $rating->detail['pid'] = $pid; $rating->detail['rate'] = $score; $rating->Add(); } }
function StdSubmit(&$arg) { $pid = safefetch($arg, 'pid'); $source = isset($arg['source']) ? $arg['source'] : ''; $language = safefetch($arg, 'language'); $cid = 0; $ret = submit_source($pid, $cid, $language, $source); if (is_numeric($ret)) { // success $sid = intval($ret); $problem = new ProblemTbl($pid); $problem->Get(); $problem->update['stdsid'] = $sid; $problem->Update(); MsgAndRedirect('stdprogram.php?pid=' . $pid); } else { MsgAndRedirect('stdprogram.php?pid=' . $pid, $ret); } }
/** * Submit Source code to server * @global type $login_uid * @global type $login_username * @global type $logged * @param type $arg * @return mixed if success, return sid. otherwise error message */ function submit_source($pid, $cid, $language, $source) { if (!is_logged()) { return "Invalid login"; } $pid = intval(trim($pid)); $source = trim($source); if ($cid) { $problem = new ContestProblem($cid); if (!is_contest_accessible($cid)) { return "You can't access to the contest"; } if (is_contest_ended($cid) && !is_contest_modifiable($cid)) { return "Contest is finished"; } } else { $problem = new ProblemTbl(); } if (!$problem->Get($pid)) { return "Invalid Problem ID!"; } $acutal_cid = $problem->detail['cid']; if (!$cid && $acutal_cid) { // this is a problem automaticly added after the end of contest if (!is_contest_accessible($acutal_cid)) { return "You can't access to this problem"; } if (!is_contest_modifiable($acutal_cid) && !is_contest_ended($acutal_cid)) { return "Contest is not finished. Can't submit to normal problem"; } } $sdata = array(); $sdata["contest"] = $cid; if ($language < 1 || $language > 4) { return "Invalid language!"; } $sdata['language'] = $language; $app_config = get_app_config(); $codelength = strlen($source); if ($codelength > $app_config['max_sourcecode_length']) { return "Size of your submittion exceeds limitation."; } if ($codelength == 0) { return "You can't submit an empty source code"; } $sdata['uid'] = get_uid(); $sdata['time'] = date("Y-m-d H:i:s"); if ($cid) { $sdata['pid'] = $problem->detail['pid']; $cpid = $pid; $pid = $sdata['pid']; } else { $sdata['pid'] = $pid; } $sdata['codelength'] = $codelength; $sdata['sourcecode'] = mysql_real_escape_string($source); $status = new StatusTbl(); $status->detail = $sdata; $status_id = $status->Add(); $user = new UserTbl(get_uid()); $user->Get(); $user->update['submissions'] = $user->detail['submissions'] + 1; $user->Update(); $problem = new ProblemTbl($pid); $problem->Get(); $problem->update['submissions'] = $problem->detail['submissions'] + 1; $problem->Update(); if ($cid) { $con_status = new ContestStatus($cid); $con_status->detail = array('cid' => $cid, 'sid' => $status_id, 'cpid' => $cpid); $con_status->Add(); } $queue = new QueueTbl(); $queue->detail['sid'] = $status_id; if ($cid) { $queue->detail['cid'] = $cid; $queue->detail['cpid'] = $cpid; } $queue->Add(); return $status_id; }
/** * Registering problem into contest * @param type $pid * @param type $cid * @param type $cpid */ function set_problem_cid($pid, $cid, $cpid) { $problem = new ProblemTbl($pid); $problem->Get() or error('Error setting problem cid'); $problem->update['cid'] = $cid; $problem->Update(); $contest_problem = new ContestProblem($cid); $contest_problem->detail = array("cpid" => $cpid, "cid" => $cid, "pid" => $pid); $contest_problem->Add(); }