Ejemplo n.º 1
0
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();
    }
}
Ejemplo n.º 2
0
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);
    }
}
Ejemplo n.º 3
0
/**
 * 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;
}
Ejemplo n.º 4
0
/**
 * 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();
}