Exemplo n.º 1
0
function ShareCode(&$arg, $enable = 1)
{
    $sid = safefetch($arg, 'sid', "Fail");
    global $login_uid;
    if ($login_uid == -1) {
        Fail("Must login first");
    }
    $status = new StatusTbl($sid);
    if (!$status->Get()) {
        Fail("No such code");
    }
    if ($login_uid != $status->detail["uid"]) {
        Fail("You are not the owner of the code");
    }
    $status->update["public"] = $enable;
    $status->Update();
    $status->FreeResource();
}
Exemplo n.º 2
0
?>

<?php 
global $app_config;
$sid = $_GET['sid'];
if (isset($_GET['cid'])) {
    $cid = $_GET['cid'];
} else {
    $cid = "";
}
if ($cid) {
    $problem = new ContestStatus($cid);
    $problem->Get($sid);
    $sid = $problem->detail['sid'];
}
$status = new StatusTbl();
if (!$status->Get($sid)) {
    error("No such submission!");
}
$content = $status->detail['compilelog'];
$content = ereg_replace("[0-9a-zA-Z]*/", "", $content);
?>

<div style="background-image: url(images/bg2.gif); padding: 15px;">

    <table width="100%">
        <tr><td>
                <pre><?php 
echo $content;
?>
</pre>
Exemplo 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;
}
Exemplo n.º 4
0
/**
 * Export a single problem to a temporay file. 
 * @global type $app_config
 * @global array $img_list
 * @global type $img_count
 * @param type $pid
 * @return string the path of the temporay archive file
 */
function ExportProblem2File($pid)
{
    global $app_config;
    global $img_list;
    $img_list = array();
    $problem = new ProblemTbl($pid);
    if (!$problem->Get()) {
        error("Invalid problem ID");
    }
    $zip = new ZipArchive();
    $filename = tempnam(sys_get_temp_dir(), "prob") . '.zip';
    if ($zip->open($filename, ZIPARCHIVE::CREATE) !== TRUE) {
        error("cannot Create file <{$filename}>");
    }
    $problem_prefix = $app_config['testdata_path'] . $pid . "/";
    $indexpath = $problem_prefix . '.DIR';
    if (!$zip->addFile($indexpath, basename($indexpath))) {
        error("Error adding index file to archive");
    }
    if ($problem->detail['special_judge']) {
        $spj_filename = $problem_prefix . $pid . '_spj.cpp';
        if (file_exists($spj_filename)) {
            if (!$zip->addFile($spj_filename, basename($spj_filename))) {
                error('Error adding special judge source file');
            }
        }
        $spj_exename = $problem_prefix . "spjudge";
        if (!file_exists($spj_exename)) {
            error("missing spjudge");
        }
        if (!$zip->addFile($spj_exename, basename($spj_exename))) {
            error('Error adding special judge binary file');
        }
    }
    if ($problem->detail['has_framework']) {
        $framework_filename = "{$problem_prefix}" . "framework.cpp";
        if (!file_exists($framework_filename)) {
            error("missing framework.cpp");
        }
        if (!$zip->addFile($framework_filename, basename($framework_filename))) {
            error('Error adding framework source file');
        }
    }
    if (!file_exists($indexpath)) {
        error("Index file is missing");
    }
    $handle = fopen($indexpath, "r");
    while (!feof($handle)) {
        $line = trim(fgets($handle));
        $paths = explode(" ", $line);
        if (count($paths) < 2) {
            continue;
        }
        $input_path = $problem_prefix . $paths[0];
        $output_path = $problem_prefix . $paths[1];
        if (!file_exists($input_path)) {
            error("File [{$input_path}] is missing");
        }
        if (!$zip->addFile($input_path, basename($input_path))) {
            error("Error adding file [{$input_path}]");
        }
        if (!file_exists($output_path)) {
            error("File [{$output_path}] is missing");
        }
        if (!$zip->addFile($output_path, basename($output_path))) {
            error("Error adding file [{$output_path}]");
        }
    }
    fclose($handle);
    global $img_count;
    $extract_key = array('description', 'input', 'output', 'hint');
    foreach ($extract_key as $value) {
        $problem->detail[$value] = ExtractImage($problem->detail[$value]);
    }
    $export_problem = $problem->detail;
    // clean up all the number keys
    for ($i = 0; array_key_exists($i, $export_problem); ++$i) {
        unset($export_problem[$i]);
    }
    if (!$zip->addFromString('metadata.json', json_encode($export_problem))) {
        error("Error writing meta data file");
    }
    foreach ($img_list as $img_path) {
        if (!$zip->addFile($img_path, basename($img_path))) {
            error("Error adding image [{$img_path}]");
        }
    }
    // add standard problem source code into archive for later use
    if ($problem->detail['stdsid']) {
        $status = new StatusTbl($problem->detail['stdsid']);
        $status->Get();
        $lang = $status->detail['language'];
        $src = $status->detail['sourcecode'];
        $ext_hash = array('C++' => '.cpp', 'C' => '.c', 'Pascal' => '.pas', 'Java' => '.java');
        $ext = $ext_hash[$lang];
        if (!$zip->addFromString('standard' . $ext, $src)) {
            error("Error writing standard source code");
        }
    }
    if (!$zip->close()) {
        error("Compressing error");
    }
    return $filename;
}