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(); }
?> <?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>
/** * 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; }
/** * 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; }