aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcassiopc <cassiopc@gmail.com>2012-08-06 17:59:23 +0000
committercassiopc <cassiopc@gmail.com>2012-08-06 17:59:23 +0000
commitf8c7c32e3ea6417ccf04309ec521b39a0c20414d (patch)
tree86befe96e554f00d25e1f3717d456ef6da470405
parentd75956684f9599b8daf705b11d67c75186ea7e3f (diff)
downloadboca-f8c7c32e3ea6417ccf04309ec521b39a0c20414d.tar.gz
boca-f8c7c32e3ea6417ccf04309ec521b39a0c20414d.zip
fix some concurrency issues when judging a run; update scripts to look for /etc/boca.conf if it exists
-rw-r--r--boca-1.5.0/src/admin/runedit.php21
-rw-r--r--boca-1.5.0/src/fclar.php2
-rw-r--r--boca-1.5.0/src/fcontest.php4
-rw-r--r--boca-1.5.0/src/fproblem.php29
-rw-r--r--boca-1.5.0/src/frun.php388
-rw-r--r--boca-1.5.0/src/fscore.php22
-rw-r--r--boca-1.5.0/src/ftask.php8
-rw-r--r--boca-1.5.0/src/judge/runedit.php35
-rwxr-xr-xboca-1.5.0/src/private/autojudging.php22
-rw-r--r--boca-1.5.0/src/private/createdb.php21
-rwxr-xr-xboca-1.5.0/src/private/createproblemzip.php21
-rw-r--r--boca-1.5.0/src/private/insertlanguages.php22
-rw-r--r--boca-1.5.0/src/team/clar.php6
-rw-r--r--boca-1.5.0/src/team/header.php43
-rw-r--r--boca-1.5.0/src/team/run.php6
-rw-r--r--boca-1.5.0/tools/icpc.etc.tgzbin8634 -> 8634 bytes
16 files changed, 335 insertions, 315 deletions
diff --git a/boca-1.5.0/src/admin/runedit.php b/boca-1.5.0/src/admin/runedit.php
index c0090f9..5b995ce 100644
--- a/boca-1.5.0/src/admin/runedit.php
+++ b/boca-1.5.0/src/admin/runedit.php
@@ -96,7 +96,6 @@ if (($a = DBChiefGetRunToAnswer($runnumber, $runsitenumber,
}
$b = DBGetProblemData($_SESSION["usertable"]["contestnumber"], $a["problemnumber"]);
-$c = DBGetLanguageData($_SESSION["usertable"]["contestnumber"], $a["langnumber"], $a["problemnumber"]);
?>
<br><br><center><b>Use the following fields to judge the run:
</b></center>
@@ -129,10 +128,10 @@ $c = DBGetLanguageData($_SESSION["usertable"]["contestnumber"], $a["langnumber"]
<td width="83%">
<?php
for ($i=0;$i<count($b);$i++) {
- echo "<b>Problem package:</b><a href=\"../filedownload.php?". filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) . "\">";
+ echo "<a href=\"../filedownload.php?". filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) . "\">";
echo $b[$i]["inputfilename"] . "</a>";
- echo " <a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('../filewindow.php?".
- filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) ."', 'View$i - INPUT','width=680,height=600,scrollbars=yes,resizable=yes')\">view</a> &nbsp;";
+// echo " <a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('../filewindow.php?".
+// filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) ."', 'View$i - INPUT','width=680,height=600,scrollbars=yes,resizable=yes')\">view</a> &nbsp;";
/*
echo "<b>Sol:</b><a href=\"../filedownload.php?". filedownload($b[$i]["soloid"], $b[$i]["solfilename"]) . "\">";
echo $b[$i]["solfilename"] . "</a>";
@@ -144,19 +143,9 @@ for ($i=0;$i<count($b);$i++) {
&nbsp;</td>
</tr>
<tr>
- <td width="27%" align=right><b>Language</b><i> <?php echo $a["language"]; ?></i>:</td>
+ <td width="27%" align=right><b>Language</b>:</td>
<td width="83%">
-<?php
- if (isset($c["compilation"]) && $c["compilation"]!="") echo "<b>Compilation Line:</b> ".$c["compilation"]. "<br>";
- if (isset($c["execution"]) && $c["execution"]!="") echo "<b>Execution Line:</b> ".$c["execution"]. "<br>";
- if (isset($c["showoutput"]) && $c["showoutput"]!="") echo "<b>Showing Output Line:</b> ". $c["showoutput"]. "<br>";
-
- if (isset($c["scriptname"]) && $c["scriptname"]!="") {
- echo "<b>Script for judging:</b> <a href=\"../filedownload.php?". filedownload($c["scriptoid"],$c["scriptname"]) ."\">";
- echo $c["scriptname"] . "</a>";
- }
-?>
- &nbsp;</td>
+ <i> <?php echo $a["language"]; ?></i></td>
</tr>
<tr>
<td width="27%" align=right><b>Team's code:</b></td>
diff --git a/boca-1.5.0/src/fclar.php b/boca-1.5.0/src/fclar.php
index d0e6481..6eb9b77 100644
--- a/boca-1.5.0/src/fclar.php
+++ b/boca-1.5.0/src/fclar.php
@@ -415,7 +415,7 @@ function DBGetClarToAnswerC($number,$site,$contest,$chief) {
}
DBExec($c, "commit work", "DBGetClarToAnswerC(commit)");
- LOGLevel("User got a clarification (clar=$number, site=$site, contest=$contest, status=$status, " .
+ LOGLevel("User got a clarification (clar=$number, site=$site, contest=$contest, status=$st, " .
"user=".$_SESSION["usertable"]["usernumber"]."(site=".$_SESSION["usertable"]["usersitenumber"].")).", 3);
return $a;
}
diff --git a/boca-1.5.0/src/fcontest.php b/boca-1.5.0/src/fcontest.php
index 077b4ec..ea426f3 100644
--- a/boca-1.5.0/src/fcontest.php
+++ b/boca-1.5.0/src/fcontest.php
@@ -237,10 +237,10 @@ function DBAllSiteTime($contest, $site) {
return $a;
}
-function DBUserInfo($contest, $site, $user) {
+function DBUserInfo($contest, $site, $user, $c=null) {
$sql = "select * from usertable where usernumber=$user and usersitenumber=$site and " .
"contestnumber=$contest";
- $a = DBGetRow ($sql, 0);
+ $a = DBGetRow ($sql, 0, $c);
if ($a == null) {
LOGError("Unable to find the user in the database. SQL=(" . $sql . ")");
MSGError("Unable to find the user in the database. Contact an admin now!");
diff --git a/boca-1.5.0/src/fproblem.php b/boca-1.5.0/src/fproblem.php
index 6a05836..669c2ef 100644
--- a/boca-1.5.0/src/fproblem.php
+++ b/boca-1.5.0/src/fproblem.php
@@ -64,10 +64,11 @@ function DBinsertfakeproblem($n,$c) {
//recebe um numero de contest e numero de problema
//devolve todos os dados relativos ao problema em cada linha do array, sendo que cada linha representa o fato
//que existe mais que um arquivo de entrada/sol. Nao retorna dados sobre problemas fake, ja que eles nao devem ter.
-function DBGetProblemData($contestnumber, $problemnumber) {
- $c = DBConnect();
+function DBGetProblemData($contestnumber, $problemnumber, $c=null) {
+ if($c==null)
+ $c = DBConnect();
$r = DBExec($c, "select p.problemname as problemname, p.problemfullname as fullname, p.problembasefilename " .
- "as basefilename, " .
+ "as basefilename, p.problemnumber as number, " .
"p.problemcolor as color, p.problemcolorname as colorname, " .
"p.probleminputfilename as inputfilename, p.probleminputfile as inputoid, p.probleminputfilehash as inputhash " .
" from problemtable as p where p.contestnumber=$contestnumber and p.problemnumber=$problemnumber and p.fake!='t'",
@@ -134,25 +135,13 @@ function DBGetFullProblemData($contestnumber,$freeproblems=false) {
if ($zip->open($dir . $ds . "tmp.zip") === true) {
$zip->extractTo($dir);
$zip->close();
- if(($info=@file($dir . $ds . "description" . $ds . 'problem.info'))===false) {
+ if(($info=@parse_ini_file($dir . $ds . "description" . $ds . 'problem.info'))===false) {
$failed=2;
}
if(!$failed) {
- $descfile='';
- $basename='';
- $fullname='';
- foreach($info as $line) {
- $aa=explode('=',$line);
- if(trim($aa[0])=='descfile') {
- $descfile=trim(sanitizeText($aa[1]));
- }
- if(trim($aa[0])=='basename') {
- $basename=trim(sanitizeText($aa[1]));
- }
- if(trim($aa[0])=='fullname') {
- $fullname=trim(sanitizeText($aa[1]));
- }
- }
+ $descfile=trim(sanitizeText($info['descfile']));
+ $basename=trim(sanitizeText($info['basename']));
+ $fullname=trim(sanitizeText($info['fullname']));
if($basename=='' || $fullname=='')
$failed=3;
}
@@ -418,7 +407,7 @@ function DBGetProblems($contest,$showanyway=false) {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
- $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "problem" . $a[$i]['number'] . "-contest" . $contestnumber;
+ $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "problem" . $a[$i]['number'] . "-contest" . $contest;
if(is_readable($ptmp . ".name")) {
$a[$i]['descfilename']=trim(file_get_contents($ptmp . ".name"));
if($a[$i]['descfilename'] != '')
diff --git a/boca-1.5.0/src/frun.php b/boca-1.5.0/src/frun.php
index fcf05c0..cd6cd50 100644
--- a/boca-1.5.0/src/frun.php
+++ b/boca-1.5.0/src/frun.php
@@ -18,14 +18,14 @@
// Last modified 21/jul/2012 by cassio@ime.usp.br
function DBDropRunTable() {
- $c = DBConnect();
- $r = DBExec($c, "drop table \"runtable\"", "DBDropRunTable(drop table)");
+ $c = DBConnect();
+ $r = DBExec($c, "drop table \"runtable\"", "DBDropRunTable(drop table)");
}
function DBCreateRunTable() {
- $c = DBConnect();
- $conf = globalconf();
- if($conf["dbuser"]=="") $conf["dbuser"]="bocauser";
- $r = DBExec($c, "
+ $c = DBConnect();
+ $conf = globalconf();
+ if($conf["dbuser"]=="") $conf["dbuser"]="bocauser";
+ $r = DBExec($c, "
CREATE TABLE \"runtable\" (
\"contestnumber\" int4 NOT NULL, -- (id do concurso)
\"runsitenumber\" int4 NOT NULL, -- (local de origem da submissao)
@@ -71,14 +71,14 @@ CONSTRAINT \"lang_fk\" FOREIGN KEY (\"contestnumber\", \"runlangnumber\")
REFERENCES \"langtable\" (\"contestnumber\", \"langnumber\")
ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE
)", "DBCreateRunTable(create table)");
- $r = DBExec($c, "REVOKE ALL ON \"runtable\" FROM PUBLIC", "DBCreateRunTable(revoke public)");
+ $r = DBExec($c, "REVOKE ALL ON \"runtable\" FROM PUBLIC", "DBCreateRunTable(revoke public)");
$r = DBExec($c, "GRANT ALL ON \"runtable\" TO \"".$conf["dbuser"]."\"", "DBCreateRunTable(grant bocauser)");
$r = DBExec($c, "CREATE UNIQUE INDEX \"run_index\" ON \"runtable\" USING btree ".
- "(\"contestnumber\" int4_ops, \"runsitenumber\" int4_ops, \"runnumber\" int4_ops)",
- "DBCreateRunTable(create run_index)");
+ "(\"contestnumber\" int4_ops, \"runsitenumber\" int4_ops, \"runnumber\" int4_ops)",
+ "DBCreateRunTable(create run_index)");
$r = DBExec($c, "CREATE INDEX \"run_index2\" ON \"runtable\" USING btree ".
- "(\"contestnumber\" int4_ops, \"runsitenumber\" int4_ops, \"usernumber\" int4_ops)",
- "DBCreateRunTable(create run_index2)");
+ "(\"contestnumber\" int4_ops, \"runsitenumber\" int4_ops, \"usernumber\" int4_ops)",
+ "DBCreateRunTable(create run_index2)");
}
///////////////////////////////funcoes de runs///////////////////////////////////////////////////////
@@ -95,33 +95,35 @@ function DBUpdateRun($contest, $usersite, $usernumber, $runsite, $runnumber, $an
return DBUpdateRunC($contest, $usersite, $usernumber, $runsite, $runnumber, $answer, 0);
}
function DBUpdateRunC($contest, $usersite, $usernumber, $runsite, $runnumber, $answer, $chief, $c=null) {
- $a = DBGetRow("select * from answertable where answernumber=$answer and contestnumber=$contest",0,null,
- "DBUpdateRunC(get answer)");
+ $bw = 0;
+ if($c==null) {
+ $bw = 1;
+ $c = DBConnect();
+ DBExec($c, "begin work", "DBUpdateRunC(transaction)");
+ }
+
+ $a = DBGetRow("select * from answertable where answernumber=$answer and contestnumber=$contest",0,$c,
+ "DBUpdateRunC(get answer)");
if ($a == null) {
+ DBExec($c, "rollback work", "DBUpdateRunC(rollback)");
MSGError("Problem with the answer table. Contact an admin now!");
LogLevel("Unable to judge a run because the answer was not found (run=$runnumber, site=$runsite, ".
- "contest=$contest, answer=$answer).",0);
+ "contest=$contest, answer=$answer).",0);
return false;
}
if ($a["fake"] == 't') {
+ DBExec($c, "rollback work", "DBUpdateRunC(rollback)");
MSGError("You must choose a valid answer.");
LogLevel("Unable to judge a run because of the fake answer (run=$runnumber, site=$runsite, ".
- "contest=$contest, answer=$answer).",0);
+ "contest=$contest, answer=$answer).",0);
return false;
}
$yes = $a["yes"];
- $b = DBSiteInfo($contest, $runsite);
+ $b = DBSiteInfo($contest, $runsite, $c);
if ($b == null) {
exit;
}
- $bw = 0;
- if($c==null) {
- $bw = 1;
- $c = DBConnect();
- DBExec($c, "begin work", "DBUpdateRunC(transaction)");
- }
-
$sql = "select * from runtable as r where r.contestnumber=$contest and " .
"r.runsitenumber=$runsite and r.runnumber=$runnumber";
if ($chief != 1) {
@@ -136,7 +138,7 @@ function DBUpdateRunC($contest, $usersite, $usernumber, $runsite, $runnumber, $a
if($bw == 1) {
DBExec($c, "rollback work", "DBUpdateRunC(rollback)");
LogLevel("Unable to judge a run (maybe it was already judged or catched by a chief) " .
- "(run=$runnumber, site=$runsite, contest=$contest).",2);
+ "(run=$runnumber, site=$runsite, contest=$contest).",2);
MSGError("Unable to judge the run (maybe it was already judged or catched by a chief)");
}
return false;
@@ -145,67 +147,67 @@ function DBUpdateRunC($contest, $usersite, $usernumber, $runsite, $runnumber, $a
$t = $b["currenttime"];
$team=$temp["usernumber"];
- if ($temp["runanswer"] != "")
- $tinhabalao = DBBalloon($contest, $runsite, $temp["usernumber"], $temp["runproblem"], ($bw==1));
+ if ($temp["runanswer"] != "")
+ $tinhabalao = DBBalloon($contest, $runsite, $temp["usernumber"], $temp["runproblem"], ($bw==1),$c);
else $tinhabalao = false;
- if($temp["runjudge1"]==$usernumber && $temp["runjudgesite1"]==$usersite) {
- DBExec($c, "update runtable set runanswer1=$answer, updatetime=".time()." " .
- "where contestnumber=$contest and runnumber=$runnumber and runsitenumber=$runsite",
+ if($temp["runjudge1"]==$usernumber && $temp["runjudgesite1"]==$usersite) {
+ DBExec($c, "update runtable set runanswer1=$answer, updatetime=".time()." " .
+ "where contestnumber=$contest and runnumber=$runnumber and runsitenumber=$runsite",
"DBUpdateRunC(update run judge1)");
- $outra = $temp["runanswer2"];
- }
- if($temp["runjudge2"]==$usernumber && $temp["runjudgesite2"]==$usersite) {
- DBExec($c, "update runtable set runanswer2=$answer, updatetime=".time()." " .
- "where contestnumber=$contest and runnumber=$runnumber and runsitenumber=$runsite",
+ $outra = $temp["runanswer2"];
+ }
+ if($temp["runjudge2"]==$usernumber && $temp["runjudgesite2"]==$usersite) {
+ DBExec($c, "update runtable set runanswer2=$answer, updatetime=".time()." " .
+ "where contestnumber=$contest and runnumber=$runnumber and runsitenumber=$runsite",
"DBUpdateRunC(update run judge2)");
- $outra = $temp["runanswer1"];
- }
- $newstatus = 'judging';
- if($chief == 1 || ($outra != 0 && $outra == $answer && $temp["runstatus"] != "judged+") ||
- ($outra != 0 && $outra == $answer && $temp["runanswer"]==$answer)) {
- $newstatus = 'judged';
- DBExec($c, "update runtable set runstatus='judged', " .
- "runjudge=$usernumber, runjudgesite=$usersite, " .
- "runanswer=$answer, rundatediffans=$t, updatetime=".time()." " .
- "where contestnumber=$contest and runnumber=$runnumber and runsitenumber=$runsite",
- "DBUpdateRunC(update run)");
-
- $tembalao = DBBalloon($contest, $runsite, $temp["usernumber"], $temp["runproblem"], ($bw==1));
-
+ $outra = $temp["runanswer1"];
+ }
+ $newstatus = 'judging';
+ if($chief == 1 || ($outra != 0 && $outra == $answer && $temp["runstatus"] != "judged+") ||
+ ($outra != 0 && $outra == $answer && $temp["runanswer"]==$answer)) {
+ $newstatus = 'judged';
+ DBExec($c, "update runtable set runstatus='judged', " .
+ "runjudge=$usernumber, runjudgesite=$usersite, " .
+ "runanswer=$answer, rundatediffans=$t, updatetime=".time()." " .
+ "where contestnumber=$contest and runnumber=$runnumber and runsitenumber=$runsite",
+ "DBUpdateRunC(update run)");
+
+ $tembalao = DBBalloon($contest, $runsite, $temp["usernumber"], $temp["runproblem"], ($bw==1),$c);
+
// if ($runsite==$usersite) {
- if (!$tinhabalao && $tembalao) {
- if (($b = DBSiteInfo($contest, $runsite)) == null)
- return true;
- $ta = $b["currenttime"];
- $tf = $b["sitelastmileanswer"];
- if ($ta < $tf) {
- $u = DBUserInfo ($contest, $runsite, $team);
+ if (!$tinhabalao && $tembalao) {
+ if (($b = DBSiteInfo($contest, $runsite, $c)) == null)
+ return true;
+ $ta = $b["currenttime"];
+ $tf = $b["sitelastmileanswer"];
+ if ($ta < $tf) {
+ $u = DBUserInfo ($contest, $runsite, $team, $c);
+ if($u['usertype']=='team') {
+ $p = DBGetProblemData ($contest, $temp["runproblem"],$c);
+ DBNewTask_old ($contest, $runsite, $team,
+ escape_string("\"" . $u["username"] ."\" must have a balloon for problem " .
+ $p[0]["problemname"] . ": " . $p[0]["fullname"]),
+ "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
+ }
+ }
+ } else if ($tinhabalao && !$tembalao) {
+ $u = DBUserInfo ($contest, $runsite, $team, $c);
if($u['usertype']=='team') {
- $p = DBGetProblemData ($contest, $temp["runproblem"]);
- DBNewTask_old ($contest, $runsite, $team,
- escape_string("\"" . $u["username"] ."\" must have a balloon for problem " .
- $p[0]["problemname"] . ": " . $p[0]["fullname"]),
- "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
+ $p = DBGetProblemData ($contest, $temp["runproblem"],$c);
+ DBNewTask_old ($contest, $runsite, $team, escape_string("\"" .
+ $u["username"] ."\" must have _NO_ balloon for problem " . $p[0]["problemname"] .
+ ": " . $p[0]["fullname"]). ". Please verify and remove it, if needed.", "", "",
+ "t", $p[0]["color"], $p[0]["colorname"], $c);
}
}
- } else if ($tinhabalao && !$tembalao) {
- $u = DBUserInfo ($contest, $runsite, $team);
- if($u['usertype']=='team') {
- $p = DBGetProblemData ($contest, $temp["runproblem"]);
- DBNewTask_old ($contest, $runsite, $team, escape_string("\"" .
- $u["username"] ."\" must have _NO_ balloon for problem " . $p[0]["problemname"] .
- ": " . $p[0]["fullname"]). ". Please verify and remove it, if needed.", "", "",
- "t", $p[0]["color"], $p[0]["colorname"], $c);
- }
- }
// }
}
if($bw == 1) {
DBExec($c, "commit work", "DBUpdateRunC(commit)");
LOGLevel("Run updated (run=$runnumber,site=$runsite,user=$team,contest=$contest,newstatus=$newstatus,".
- "judge=$usernumber(site=$usersite),answer=$answer(".$a["runanswer"].")).", 3);
+ "judge=$usernumber(site=$usersite),answer=$answer(".$a["runanswer"].")).", 3);
}
return true;
}
@@ -218,11 +220,11 @@ function DBRunGiveUp($number,$site,$contest,$usernumber,$usersite) {
$c = DBConnect();
DBExec($c, "begin work", "DBRunGiveUp(transaction)");
$sql = "select * from runtable as r where r.contestnumber=$contest and " .
- "r.runsitenumber=$site and r.runnumber=$number";
+ "r.runsitenumber=$site and r.runnumber=$number";
if ($usernumber != 1 && $usersite != -1) {
$sql .= " and (r.runstatus='judging' or r.runstatus='judged+') and " .
- "((r.runjudge1=$usernumber and r.runjudgesite1=$usersite) or " .
- " (r.runjudge2=$usernumber and r.runjudgesite2=$usersite))";
+ "((r.runjudge1=$usernumber and r.runjudgesite1=$usersite) or " .
+ " (r.runjudge2=$usernumber and r.runjudgesite2=$usersite))";
$tx = "Judge";
} else $tx = "Chief";
$r = DBExec ($c, $sql . " for update", "DBRunGiveUp(get run for update)");
@@ -230,12 +232,12 @@ function DBRunGiveUp($number,$site,$contest,$usernumber,$usersite) {
if ($n != 1) {
DBExec($c, "rollback work", "DBRunGiveUp(rollback)");
LogLevel("Unable to return a run (maybe the timeout or a chief returned it first). ".
- "(run=$number, site=$site, contest=$contest)",2);
+ "(run=$number, site=$site, contest=$contest)",2);
return false;
}
$temp = DBRow($r, 0);
- $tinhabalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"]);
+ $tinhabalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"],true,$c);
$outra = -1;
if($temp["runjudge1"]==$usernumber && $temp["runjudgesite1"]==$usersite) {
@@ -264,56 +266,56 @@ function DBRunGiveUp($number,$site,$contest,$usernumber,$usersite) {
DBExec($c, "update runtable set runstatus='openrun', runanswer=0, runjudge=NULL, runjudgesite=NULL, ".
"runanswer1=0, runanswer2=0, runjudge1=NULL, runjudge2=NULL, runjudgesite1=NULL, runjudgesite2=NULL, ".
"updatetime=" .
- time()." where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
- "DBRunGiveUp(update run)");
+ time()." where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
+ "DBRunGiveUp(update run)");
$newstatus='openrun';
}
- }
- $tembalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"]);
+ }
+ $tembalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"],true,$c);
if ($tinhabalao && !$tembalao) {
- $u = DBUserInfo ($contest, $site, $temp["usernumber"]);
+ $u = DBUserInfo ($contest, $site, $temp["usernumber"], $c);
if($u['usertype']=='team') {
- $p = DBGetProblemData ($contest, $temp["runproblem"]);
- DBNewTask_old ($contest, $site, $temp["usernumber"], escape_string("\"" .
- $u["username"] ."\" must have _NO_ balloon for problem " . $p[0]["problemname"] .
- ": " . $p[0]["fullname"]), "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
+ $p = DBGetProblemData ($contest, $temp["runproblem"],$c);
+ DBNewTask_old ($contest, $site, $temp["usernumber"], escape_string("\"" .
+ $u["username"] ."\" must have _NO_ balloon for problem " . $p[0]["problemname"] .
+ ": " . $p[0]["fullname"]), "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
}
}
DBExec($c, "commit work", "DBRunGiveUp(commit)");
LOGLevel("Run returned (run=$number, site=$site, contest=$contest, user=$usernumber(site=$usersite)), ".
- "newstatus=$newstatus", 3);
+ "newstatus=$newstatus", 3);
return true;
}
function DBRunDelete($number,$site,$contest,$user,$usersite) {
$c = DBConnect();
DBExec($c, "begin work", "DBRunDelete(transaction)");
$sql = "select * from runtable as r where r.contestnumber=$contest and " .
- "r.runsitenumber=$site and r.runnumber=$number";
+ "r.runsitenumber=$site and r.runnumber=$number";
$r = DBExec ($c, $sql . " for update", "DBRunDelete(get run for update)");
$n = DBnlines($r);
if ($n != 1) {
DBExec($c, "rollback work", "DBRunDelete(rollback)");
LogLevel("Unable to delete a run. ".
- "(run=$number, site=$site, contest=$contest)",1);
+ "(run=$number, site=$site, contest=$contest)",1);
return false;
}
$temp = DBRow($r, 0);
- $tinhabalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"]);
+ $tinhabalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"],true,$c);
DBExec($c, "update runtable set runstatus='deleted', runjudge=$user, runjudgesite=$usersite, updatetime=" .
time()." where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
- "DBRunDelete(update run)");
+ "DBRunDelete(update run)");
- $tembalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"]);
+ $tembalao = DBBalloon($contest, $site, $temp["usernumber"], $temp["runproblem"],true,$c);
if ($tinhabalao && !$tembalao) {
- $u = DBUserInfo ($contest, $site, $temp["usernumber"]);
+ $u = DBUserInfo ($contest, $site, $temp["usernumber"], $c);
if($u['usertype']=='team') {
- $p = DBGetProblemData ($contest, $temp["runproblem"]);
- DBNewTask_old ($contest, $site, $temp["usernumber"], escape_string("\"" .
- $u["username"] . "\" must have _NO_ balloon for problem " . $p[0]["problemname"] .
- ": " . $p[0]["fullname"]), "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
+ $p = DBGetProblemData ($contest, $temp["runproblem"],$c);
+ DBNewTask_old ($contest, $site, $temp["usernumber"], escape_string("\"" .
+ $u["username"] . "\" must have _NO_ balloon for problem " . $p[0]["problemname"] .
+ ": " . $p[0]["fullname"]), "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
}
}
@@ -337,29 +339,29 @@ function DBGetRunToAnswerC($number,$site,$contest,$chief) {
$c = DBConnect();
DBExec($c, "begin work", "DBGetRunToAnswerC(transaction)");
$sql = "select r.contestnumber as contestnumber, r.runsitenumber as sitenumber, r.runanswer as answer, " .
- "r.runanswer1 as answer1, r.runanswer2 as answer2, " .
- "r.runjudge as judge, r.runjudgesite as judgesite, " .
- "r.runjudge1 as judge1, r.runjudgesite1 as judgesite1, r.runjudge2 as judge2, r.runjudgesite2 as judgesite2, " .
- "r.runnumber as number, r.rundatediff as timestamp, r.runstatus as status, " .
- "r.rundata as sourceoid, r.runfilename as sourcename, l.langnumber as langnumber, " .
- "p.problemname as problemname, p.problemnumber as problemnumber, l.langname as language, l.langextension as extension, " .
- "r.autoip as autoip, r.autobegindate as autobegin, r.autoenddate as autoend, r.autoanswer as autoanswer, ".
- "r.autostdout as autostdout, r.autostderr as autostderr ".
-
- "from runtable as r, problemtable as p, langtable as l " .
- "where r.contestnumber=$contest and p.contestnumber=r.contestnumber and " .
- "r.runproblem=p.problemnumber and r.runsitenumber=$site and " .
- "r.runlangnumber=l.langnumber and r.contestnumber=l.contestnumber and " .
- "r.runnumber=$number";
+ "r.runanswer1 as answer1, r.runanswer2 as answer2, " .
+ "r.runjudge as judge, r.runjudgesite as judgesite, " .
+ "r.runjudge1 as judge1, r.runjudgesite1 as judgesite1, r.runjudge2 as judge2, r.runjudgesite2 as judgesite2, " .
+ "r.runnumber as number, r.rundatediff as timestamp, r.runstatus as status, " .
+ "r.rundata as sourceoid, r.runfilename as sourcename, l.langnumber as langnumber, " .
+ "p.problemname as problemname, p.problemnumber as problemnumber, l.langname as language, l.langextension as extension, " .
+ "r.autoip as autoip, r.autobegindate as autobegin, r.autoenddate as autoend, r.autoanswer as autoanswer, ".
+ "r.autostdout as autostdout, r.autostderr as autostderr ".
+
+ "from runtable as r, problemtable as p, langtable as l " .
+ "where r.contestnumber=$contest and p.contestnumber=r.contestnumber and " .
+ "r.runproblem=p.problemnumber and r.runsitenumber=$site and " .
+ "r.runlangnumber=l.langnumber and r.contestnumber=l.contestnumber and " .
+ "r.runnumber=$number";
if ($chief != 1) {
$sql .= " and (r.runstatus='openrun' or " .
- "(r.runstatus='judged+' and r.runjudge is NULL) or " .
- "((r.runstatus='judging' or r.runstatus='judged+') and " .
- " (r.runjudge1 is null or r.runjudge2 is null or " .
- " ((r.runjudge1=" . $_SESSION["usertable"]["usernumber"] . " and " .
- " r.runjudgesite1=" . $_SESSION["usertable"]["usersitenumber"] . ") or " .
- " (r.runjudge2=" . $_SESSION["usertable"]["usernumber"] . " and " .
- " r.runjudgesite2=" . $_SESSION["usertable"]["usersitenumber"] . ")))))";
+ "(r.runstatus='judged+' and r.runjudge is NULL) or " .
+ "((r.runstatus='judging' or r.runstatus='judged+') and " .
+ " (r.runjudge1 is null or r.runjudge2 is null or " .
+ " ((r.runjudge1=" . $_SESSION["usertable"]["usernumber"] . " and " .
+ " r.runjudgesite1=" . $_SESSION["usertable"]["usersitenumber"] . ") or " .
+ " (r.runjudge2=" . $_SESSION["usertable"]["usernumber"] . " and " .
+ " r.runjudgesite2=" . $_SESSION["usertable"]["usersitenumber"] . ")))))";
$tx = "Judge";
} else $tx = "Chief";
$r = DBExec ($c, $sql . " for update", "DBGetRunToAnswerC(get run/prob/lang for update)");
@@ -367,39 +369,39 @@ function DBGetRunToAnswerC($number,$site,$contest,$chief) {
if ($n != 1) {
DBExec($c, "rollback work", "DBGetRunToAnswerC(rollback)");
LogLevel("Unable to get a run (maybe other judge got it first). (run=$number, site=$site, ".
- "contest=$contest)",2);
+ "contest=$contest)",2);
return false;
}
$a = DBRow($r,0);
if ($chief != 1) {
- $upd="";
+ $upd="";
if($a["status"]=="openrun") $upd="runstatus='judging',";
if(($a["judge1"]!=$_SESSION["usertable"]["usernumber"] ||
- $a["judgesite1"]!=$_SESSION["usertable"]["usersitenumber"]) &&
- ($a["judge2"]!=$_SESSION["usertable"]["usernumber"] ||
- $a["judgesite2"]!=$_SESSION["usertable"]["usersitenumber"])) {
+ $a["judgesite1"]!=$_SESSION["usertable"]["usersitenumber"]) &&
+ ($a["judge2"]!=$_SESSION["usertable"]["usernumber"] ||
+ $a["judgesite2"]!=$_SESSION["usertable"]["usersitenumber"])) {
if($a["judge1"]=='' && $a['judgesite1']=='') {
DBExec($c, "update runtable set runjudge1=" . $_SESSION["usertable"]["usernumber"] .
- ",$upd updatetime=".time().", " .
- "runjudgesite1=" . $_SESSION["usertable"]["usersitenumber"] . " " .
- "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
- "DBGetRunToAnswerC(update run judge1)");
+ ",$upd updatetime=".time().", " .
+ "runjudgesite1=" . $_SESSION["usertable"]["usersitenumber"] . " " .
+ "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
+ "DBGetRunToAnswerC(update run judge1)");
} else {
DBExec($c, "update runtable set runjudge2=" . $_SESSION["usertable"]["usernumber"] .
- ",$upd updatetime=".time().", " .
- "runjudgesite2=" . $_SESSION["usertable"]["usersitenumber"] . " " .
- "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
- "DBGetRunToAnswerC(update run judge2)");
+ ",$upd updatetime=".time().", " .
+ "runjudgesite2=" . $_SESSION["usertable"]["usersitenumber"] . " " .
+ "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
+ "DBGetRunToAnswerC(update run judge2)");
}
- }
+ }
}
DBExec($c, "commit work", "DBGetRunToAnswerC(commit)");
LOGLevel("User got a run (run=$number, site=$site, contest=$contest, user=".
- $_SESSION["usertable"]["usernumber"].
- "(site=".$_SESSION["usertable"]["usersitenumber"] .")).", 3);
+ $_SESSION["usertable"]["usernumber"].
+ "(site=".$_SESSION["usertable"]["usersitenumber"] .")).", 3);
return $a;
}
function DBGetRunToAutojudging($contest, $ip) {
@@ -427,13 +429,13 @@ function DBGetRunToAutojudging($contest, $ip) {
return false;
}
$a = DBRow($r,0);
- $t = time();
+ $t = time();
DBExec($c, "update runtable set autoip='" . $ip . "', " .
- "autobegindate=$t, autoenddate=null, autoanswer=null, autostdout=null, autostderr=null, " .
- "updatetime=$t " .
- "where contestnumber=${a["contest"]} and runnumber=${a["number"]} and runsitenumber=${a["site"]}",
- "DBGetRunToAutojudging(update run)");
+ "autobegindate=$t, autoenddate=null, autoanswer=null, autostdout=null, autostderr=null, " .
+ "updatetime=$t " .
+ "where contestnumber=${a["contest"]} and runnumber=${a["number"]} and runsitenumber=${a["site"]}",
+ "DBGetRunToAutojudging(update run)");
DBExec($c, "commit work", "DBGetRunToAutojudging(commit)");
LOGLevel("Autojudging got a run (run=${a["number"]}, site=${a["site"]}, contest=${a["contest"]})", 3);
@@ -444,8 +446,8 @@ function DBUpdateRunAutojudging($contest, $site, $number, $ip, $answer, $stdout,
$c = DBConnect();
DBExec($c, "begin work", "DBUpdateRunAutojudging(transaction)");
$sql = "select * from runtable as r " .
- "where r.contestnumber=$contest and r.runnumber=$number and r.runsitenumber=$site and " .
- "r.autoip='$ip'";
+ "where r.contestnumber=$contest and r.runnumber=$number and r.runsitenumber=$site and " .
+ "r.autoip='$ip'";
$r = DBExec ($c, $sql . " for update", "DBUpdateRunAutoJudging(get run for update)");
$n = DBnlines($r);
if ($n != 1) {
@@ -455,7 +457,7 @@ function DBUpdateRunAutojudging($contest, $site, $number, $ip, $answer, $stdout,
}
$a = DBRow($r,0);
$b = DBSiteInfo($contest, $site, $c);
- $t = time();
+ $t = time();
if (($oid1 = DB_lo_import($c, $stdout)) === false) {
DBExec($c, "rollback work", "DBUpdateRunAutojudging(rollback-stdout)");
@@ -488,7 +490,7 @@ function DBUpdateRunAutojudging($contest, $site, $number, $ip, $answer, $stdout,
if(DBUpdateRunO($contest, $site, $a["usernumber"], $site, $number, $retval, $c)==false) {
DBExec($c, "rollback work", "DBUpdateRunAutoJudging(rollback)");
LOGError("Unable to automatically update a run answer (run=$number, site=$site, ".
- "contest=$contest, answer='$answer', retval=$retval)");
+ "contest=$contest, answer='$answer', retval=$retval)");
return false;
}
DBExec($c, "commit work", "DBUpdateRunAutojudging(commit)");
@@ -499,7 +501,7 @@ function DBGiveUpRunAutojudging($contest, $site, $number, $ip="", $ans="") {
$c = DBConnect();
DBExec($c, "begin work", "DBGiveUpRunAutojudging(transaction)");
$sql = "select * from runtable as r " .
- "where r.contestnumber=$contest and r.runnumber=$number and r.runsitenumber=$site";
+ "where r.contestnumber=$contest and r.runnumber=$number and r.runsitenumber=$site";
$r = DBExec ($c, $sql . " for update", "DBGiveUpRunAutoJudging(get run for update)");
$n = DBnlines($r);
if ($n != 1) {
@@ -508,19 +510,19 @@ function DBGiveUpRunAutojudging($contest, $site, $number, $ip="", $ans="") {
return false;
}
$a = DBRow($r,0);
- $t = time();
-
- if($ip=="") {
- DBExec($c, "update runtable set autoenddate=null, autoanswer=null, autostdout=null, autostderr=null, " .
- "updatetime=$t, autobegindate=null, autoip='' " .
- "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
- "DBGiveUpRunAutojudging(update run)");
- } else {
- DBExec($c, "update runtable set autoenddate=$t, autoanswer='$ans', autostdout=null, ".
- "autostderr=null, updatetime=$t, autoip='$ip' " .
- "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
- "DBGiveUpRunAutojudging(update run-withip)");
- }
+ $t = time();
+
+ if($ip=="") {
+ DBExec($c, "update runtable set autoenddate=null, autoanswer=null, autostdout=null, autostderr=null, " .
+ "updatetime=$t, autobegindate=null, autoip='' " .
+ "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
+ "DBGiveUpRunAutojudging(update run)");
+ } else {
+ DBExec($c, "update runtable set autoenddate=$t, autoanswer='$ans', autostdout=null, ".
+ "autostderr=null, updatetime=$t, autoip='$ip' " .
+ "where contestnumber=$contest and runnumber=$number and runsitenumber=$site",
+ "DBGiveUpRunAutojudging(update run-withip)");
+ }
DBExec($c, "commit work", "DBGiveUpRunAutojudging(commit)");
LOGLevel("Run gaveup from Autojudging (run=$number, site=$site, contest=$contest)", 3);
return true;
@@ -554,27 +556,27 @@ function DBOpenRunsSNS($contest,$site,$st,$order='run') {
"l.langnumber=r.runlangnumber and a.answernumber=r.runanswer and " .
"a.contestnumber=r.contestnumber";
if ($site != "x") {
- $str = explode(",", $site);
- $sql .= " and (r.runsitenumber=-1";
- for ($i=0;$i<count($str);$i++) {
+ $str = explode(",", $site);
+ $sql .= " and (r.runsitenumber=-1";
+ for ($i=0;$i<count($str);$i++) {
if (is_numeric($str[$i])) $sql .= " or r.runsitenumber=".$str[$i];
- }
- $sql .= ")";
+ }
+ $sql .= ")";
}
if ($st == 1) {
- $sql .= " and (not (r.runjudge1=". $_SESSION["usertable"]["usernumber"] . " and " .
- "r.runjudgesite1=". $_SESSION["usertable"]["usersitenumber"] . " and r.runanswer1!=0)) and ";
- $sql .= " (not (r.runjudge2=". $_SESSION["usertable"]["usernumber"] . " and " .
- "r.runjudgesite2=". $_SESSION["usertable"]["usersitenumber"] . " and r.runanswer2!=0)) and " .
-
- "(not ((r.runjudge1!=". $_SESSION["usertable"]["usernumber"] . " or " .
- "r.runjudgesite1!=". $_SESSION["usertable"]["usersitenumber"] . ") and " .
- " (r.runjudge2!=". $_SESSION["usertable"]["usernumber"] . " or " .
- "r.runjudgesite2!=". $_SESSION["usertable"]["usersitenumber"] . ") and " .
- " (not (r.runjudge1 is null)) and (not (r.runjudge2 is null))))";
+ $sql .= " and (not (r.runjudge1=". $_SESSION["usertable"]["usernumber"] . " and " .
+ "r.runjudgesite1=". $_SESSION["usertable"]["usersitenumber"] . " and r.runanswer1!=0)) and ";
+ $sql .= " (not (r.runjudge2=". $_SESSION["usertable"]["usernumber"] . " and " .
+ "r.runjudgesite2=". $_SESSION["usertable"]["usersitenumber"] . " and r.runanswer2!=0)) and " .
+
+ "(not ((r.runjudge1!=". $_SESSION["usertable"]["usernumber"] . " or " .
+ "r.runjudgesite1!=". $_SESSION["usertable"]["usersitenumber"] . ") and " .
+ " (r.runjudge2!=". $_SESSION["usertable"]["usernumber"] . " or " .
+ "r.runjudgesite2!=". $_SESSION["usertable"]["usersitenumber"] . ") and " .
+ " (not (r.runjudge1 is null)) and (not (r.runjudge2 is null))))";
$sql .= " and (not r.runstatus = 'judged') " .
- " and not r.runstatus ~ 'deleted' order by ";
+ " and not r.runstatus ~ 'deleted' order by ";
} else $sql .= " order by ";
if($order == "site")
@@ -583,9 +585,9 @@ function DBOpenRunsSNS($contest,$site,$st,$order='run') {
$sql .= "r.runstatus,";
else if ($order == "judge")
$sql .= "r.runjudge,r.runjudgesite,";
- else if ($order == "problem")
- $sql .= "p.problemname,";
- else if ($order == "language")
+ else if ($order == "problem")
+ $sql .= "p.problemname,";
+ else if ($order == "language")
$sql .= "l.langname,";
else if ($order == "answer")
$sql .= "a.runanswer,";
@@ -837,11 +839,11 @@ function DBNewRun($param,$c=null) {
/* // isso gera problemas de portabilidade e de seguranca (quando outros usuarios tambem tem shell
// no servidor e podem construir paginas web. Eles podem usar essas paginas para acessar esses arquivos,
// pois os mesmos ficaram com dono apache/www-data/etc)
- umask(0077);
- @mkdir("/tmp/boca");
- if (!move_uploaded_file ($filepath,
- "/tmp/boca/contest${contest}.site${site}.run${n}.user${user}.problem${problem}.time${t}.${filename}"))
- LOGLevel("Run not saved as file (run=$n,site=$site,contest=$contest", 1);
+ umask(0077);
+ @mkdir("/tmp/boca");
+ if (!move_uploaded_file ($filepath,
+ "/tmp/boca/contest${contest}.site${site}.run${n}.user${user}.problem${problem}.time${t}.${filename}"))
+ LOGLevel("Run not saved as file (run=$n,site=$site,contest=$contest", 1);
*/
}
//recebe o numero do contest, o numero do site e o numero do usuario
@@ -892,25 +894,25 @@ function DBUserRunsYES($contest,$site,$user) {
$c = DBConnect();
$r = DBExec($c, "select distinct p.problemcolorname as colorname, p.problemcolor as color, " .
"r.rundatediff as timestamp, p.problemnumber as number " .
- "from runtable as r, problemtable as p, answertable as a " .
- "where r.contestnumber=$contest and p.contestnumber=r.contestnumber and " .
- "r.contestnumber=a.contestnumber and r.runproblem=p.problemnumber and " .
- "r.runsitenumber=$site and r.usernumber=$user and not r.runstatus ~ 'deleted' and " .
- "(r.rundatediffans<=$t or (r.runstatus != 'judged' and r.rundatediff<=$t)) and " .
- "a.answernumber=r.runanswer and a.yes='t' order by r.rundatediff",
- "DBUserRunsYES(get run/prob/ans/lang)");
+ "from runtable as r, problemtable as p, answertable as a " .
+ "where r.contestnumber=$contest and p.contestnumber=r.contestnumber and " .
+ "r.contestnumber=a.contestnumber and r.runproblem=p.problemnumber and " .
+ "r.runsitenumber=$site and r.usernumber=$user and not r.runstatus ~ 'deleted' and " .
+ "(r.rundatediffans<=$t or (r.runstatus != 'judged' and r.rundatediff<=$t)) and " .
+ "a.answernumber=r.runanswer and a.yes='t' order by r.rundatediff",
+ "DBUserRunsYES(get run/prob/ans/lang)");
$n = DBnlines($r);
$a = array(); $j=0;
- $p = array();
+ $p = array();
for ($i=0;$i<$n;$i++) {
$aa = DBRow($r,$i);
if ($aa["timestamp"] < $b["sitelastmileanswer"]) {
- if(!isset($p[$aa["number"]])) {
- $p[$aa["number"]] = 1;
- $a[$j] = $aa;
- $j++;
- }
+ if(!isset($p[$aa["number"]])) {
+ $p[$aa["number"]] = 1;
+ $a[$j] = $aa;
+ $j++;
+ }
}
}
return $a;
diff --git a/boca-1.5.0/src/fscore.php b/boca-1.5.0/src/fscore.php
index abbe22f..7b59561 100644
--- a/boca-1.5.0/src/fscore.php
+++ b/boca-1.5.0/src/fscore.php
@@ -157,25 +157,25 @@ function DBScore($contest, $verifylastmile, $hor=-1, $globalsite='0') {
return $result;
}
-function DBBalloon($contest, $site, $user, $problem, $localsite=true) {
- if (($b = DBSiteInfo($contest, $site)) == null)
+function DBBalloon($contest, $site, $user, $problem, $localsite=true, $c=null) {
+ if($c==null)
+ $c = DBConnect();
+ if (($b = DBSiteInfo($contest, $site, $c)) == null)
exit;
if ($localsite) {
- if (($blocal = DBSiteInfo($contest, $_SESSION["usertable"]["usersitenumber"])) == null)
+ if (($blocal = DBSiteInfo($contest, $_SESSION["usertable"]["usersitenumber"], $c)) == null)
exit;
} else $blocal = $b;
- if (($ct = DBContestInfo($contest)) == null)
+ if (($ct = DBContestInfo($contest,$c)) == null)
exit;
$t = time();
$ta = $blocal["currenttime"];
- if ($verifylastmile)
- $tf = $b["sitelastmilescore"];
- else {
- $tf = $b["siteduration"];
- }
-
- $c = DBConnect();
+// if ($verifylastmile)
+ $tf = $b["sitelastmilescore"];
+// else {
+// $tf = $b["siteduration"];
+// }
$r = DBExec($c, "select r.rundatediff as time, a.yes as yes from " .
"runtable as r, answertable as a where r.runanswer=a.answernumber and " .
"a.contestnumber=$contest and r.usernumber=$user and r.runproblem=$problem and " .
diff --git a/boca-1.5.0/src/ftask.php b/boca-1.5.0/src/ftask.php
index 6575210..8265cc4 100644
--- a/boca-1.5.0/src/ftask.php
+++ b/boca-1.5.0/src/ftask.php
@@ -419,11 +419,13 @@ function DBNewTask($param, $c=null) {
"VALUES ($contest, $site, $tasknumber, $user, $taskdate, $taskdatediff, $taskdatediffans, '$filename', $oid, '$status', " .
"'$desc', '$sys', '$color', '$colorname', $updatetime)",
"DBNewTask(insert task)");
- if($cw) DBExec($c, "commit work", "DBNewTask(commit-insert)");
+ if($cw) {
+ DBExec($c, "commit work", "DBNewTask(commit-insert)");
+ LOGLevel("$u submitted a task (#$tasknumber) on site #$site " .
+ "(filename=$filename, contest=$contest).",2);
+ }
if($sys=="t") $u="System";
else $u = "User $user";
- LOGLevel("$u submitted a task (#$tasknumber) on site #$site " .
- "(filename=$filename, contest=$contest).",2);
$ret=2;
} else {
if($updatetime > $t) {
diff --git a/boca-1.5.0/src/judge/runedit.php b/boca-1.5.0/src/judge/runedit.php
index 0361d30..e446ad7 100644
--- a/boca-1.5.0/src/judge/runedit.php
+++ b/boca-1.5.0/src/judge/runedit.php
@@ -48,7 +48,7 @@ if (isset($_POST["answer"]) && isset($_POST["Submit"]) && $_POST["Submit"]=="Jud
DBUpdateRun($_SESSION["usertable"]["contestnumber"],
$_SESSION["usertable"]["usersitenumber"],
$_SESSION["usertable"]["usernumber"],
- $sitenumber, $number, $answer); //, $notuser, updscore);
+ $sitenumber, $number, $answer); //, $notuser, $updscore);
}
ForceLoad("run.php");
}
@@ -69,7 +69,6 @@ if (($a = DBGetRunToAnswer($runnumber, $runsitenumber,
}
$b = DBGetProblemData($_SESSION["usertable"]["contestnumber"], $a["problemnumber"]);
-$c = DBGetLanguageData($_SESSION["usertable"]["contestnumber"], $a["langnumber"], $a["problemnumber"]);
?>
<br><br><center><b>Use the following fields to judge the run:
</b></center>
@@ -105,35 +104,25 @@ for ($i=0;$i<count($b);$i++) {
$if = rawurlencode($b[$i]["inputfilename"]);
$sf = rawurlencode($b[$i]["solfilename"]);
- echo "<b>Input:</b><a href=\"../filedownload.php?". filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) . "\">";
+ echo "<a href=\"../filedownload.php?". filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) . "\">";
echo $b[$i]["inputfilename"] . "</a>";
- echo " <a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('../filewindow.php?".
- filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) ."', 'View$i - INPUT','width=680,height=600,scrollbars=yes,".
- "resizable=yes')\">view</a> &nbsp;";
+// echo " <a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('../filewindow.php?".
+// filedownload($b[$i]["inputoid"],$b[$i]["inputfilename"]) ."', 'View$i - INPUT','width=680,height=600,scrollbars=yes,".
+// "resizable=yes')\">view</a> &nbsp;";
- echo "<b>Sol:</b><a href=\"../filedownload.php?". filedownload($b[$i]["soloid"],$b[$i]["solfilename"]) . "\">";
- echo $b[$i]["solfilename"] . "</a>";
- echo " <a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('../filewindow.php?".
- filedownload($b[$i]["soloid"],$b[$i]["solfilename"]) . "', 'View$i - CORRECT OUTPUT','width=680,height=600,scrollbars=yes,".
- "resizable=yes')\">view</a>";
+// echo "<b>Sol:</b><a href=\"../filedownload.php?". filedownload($b[$i]["soloid"],$b[$i]["solfilename"]) . "\">";
+// echo $b[$i]["solfilename"] . "</a>";
+// echo " <a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('../filewindow.php?".
+// filedownload($b[$i]["soloid"],$b[$i]["solfilename"]) . "', 'View$i - CORRECT OUTPUT','width=680,height=600,scrollbars=yes,".
+// "resizable=yes')\">view</a>";
}
?>
&nbsp;</td>
</tr>
<tr>
- <td width="27%" align=right><b>Language</b><i> <?php echo $a["language"]; ?></i>:</td>
+ <td width="27%" align=right><b>Language</b>:</td>
<td width="83%">
-<?php
- if (isset($c["compilation"]) && $c["compilation"]!="") echo "<b>Compilation Line:</b> ".$c["compilation"]. "<br>";
-if (isset($c["execution"]) && $c["execution"]!="") echo "<b>Execution Line:</b> ".$c["execution"]. "<br>";
-if (isset($c["showoutput"]) && $c["showoutput"]!="") echo "<b>Showing Output Line:</b> ". $c["showoutput"]. "<br>";
-
- if (isset($c["scriptname"]) && $c["scriptname"]!="") {
- echo "<b>Script for judging:</b> <a href=\"../filedownload.php?". filedownload($c["scriptoid"],$c["scriptname"]) ."\">";
- echo $c["scriptname"] . "</a>";
- }
-?>
- &nbsp;</td>
+ <i> <?php echo $a["language"]; ?></i></td>
</tr>
<tr>
<td width="27%" align=right><b>Source code:</b></td>
diff --git a/boca-1.5.0/src/private/autojudging.php b/boca-1.5.0/src/private/autojudging.php
index 3685254..cdd1e2e 100755
--- a/boca-1.5.0/src/private/autojudging.php
+++ b/boca-1.5.0/src/private/autojudging.php
@@ -15,16 +15,24 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////////////
-// Last modified 05/aug/2012 by cassio@ime.usp.br
+// Last modified 06/aug/2012 by cassio@ime.usp.br
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
-if(is_readable(getcwd() . $ds . '..' .$ds . 'db.php')) {
- require_once(getcwd() . $ds . '..' .$ds . 'db.php');
- require_once(getcwd() . $ds . '..' .$ds . 'version.php');
+
+if(is_readable('/etc/boca.conf')) {
+ $pif=parse_ini_file('/etc/boca.conf');
+ $bocadir = trim($pif['bocadir']) . $ds . 'src';
+} else {
+ $bocadir = getcwd();
+}
+
+if(is_readable($bocadir . $ds . '..' .$ds . 'db.php')) {
+ require_once($bocadir . $ds . '..' .$ds . 'db.php');
+ require_once($bocadir . $ds . '..' .$ds . 'version.php');
} else {
- if(is_readable(getcwd() . $ds . 'db.php')) {
- require_once(getcwd() . $ds . 'db.php');
- require_once(getcwd() . $ds . 'version.php');
+ if(is_readable($bocadir . $ds . 'db.php')) {
+ require_once($bocadir . $ds . 'db.php');
+ require_once($bocadir . $ds . 'version.php');
} else {
echo "unable to find db.php";
exit;
diff --git a/boca-1.5.0/src/private/createdb.php b/boca-1.5.0/src/private/createdb.php
index e06682d..34eedb5 100644
--- a/boca-1.5.0/src/private/createdb.php
+++ b/boca-1.5.0/src/private/createdb.php
@@ -16,17 +16,24 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////////////
-//Last updated 21/jul/2012 by cassio@ime.usp.br
+//Last updated 06/aug/2012 by cassio@ime.usp.br
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
-if(is_readable(getcwd() . $ds . '..' .$ds . 'db.php')) {
- require_once(getcwd() . $ds . '..' .$ds . 'db.php');
- @include_once(getcwd() . $ds . '..' .$ds . 'version.php');
+if(is_readable('/etc/boca.conf')) {
+ $pif=parse_ini_file('/etc/boca.conf');
+ $bocadir = trim($pif['bocadir']) . $ds . 'src';
} else {
- if(is_readable(getcwd() . $ds . 'db.php')) {
- require_once(getcwd() . $ds . 'db.php');
- @include_once(getcwd() . $ds . 'version.php');
+ $bocadir = getcwd();
+}
+
+if(is_readable($bocadir . $ds . '..' .$ds . 'db.php')) {
+ require_once($bocadir . $ds . '..' .$ds . 'db.php');
+ @include_once($bocadir . $ds . '..' .$ds . 'version.php');
+} else {
+ if(is_readable($bocadir . $ds . 'db.php')) {
+ require_once($bocadir . $ds . 'db.php');
+ @include_once($bocadir . $ds . 'version.php');
} else {
echo "unable to find db.php";
exit;
diff --git a/boca-1.5.0/src/private/createproblemzip.php b/boca-1.5.0/src/private/createproblemzip.php
index 1b3b3cc..bbcacf9 100755
--- a/boca-1.5.0/src/private/createproblemzip.php
+++ b/boca-1.5.0/src/private/createproblemzip.php
@@ -16,17 +16,24 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////////////
-//Last updated 21/jul/2012 by cassio@ime.usp.br
+//Last updated 06/aug/2012 by cassio@ime.usp.br
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
-if(is_readable(getcwd() . $ds . '..' .$ds . 'db.php')) {
- require_once(getcwd() . $ds . '..' .$ds . 'db.php');
- @include_once(getcwd() . $ds . '..' .$ds . 'version.php');
+if(is_readable('/etc/boca.conf')) {
+ $pif=parse_ini_file('/etc/boca.conf');
+ $bocadir = trim($pif['bocadir']) . $ds . 'src';
} else {
- if(is_readable(getcwd() . $ds . 'db.php')) {
- require_once(getcwd() . $ds . 'db.php');
- @include_once(getcwd() . $ds . 'version.php');
+ $bocadir = getcwd();
+}
+
+if(is_readable($bocadir . $ds . '..' .$ds . 'db.php')) {
+ require_once($bocadir . $ds . '..' .$ds . 'db.php');
+ @include_once($bocadir . $ds . '..' .$ds . 'version.php');
+} else {
+ if(is_readable($bocadir . $ds . 'db.php')) {
+ require_once($bocadir . $ds . 'db.php');
+ @include_once($bocadir . $ds . 'version.php');
} else {
echo "unable to find db.php";
exit;
diff --git a/boca-1.5.0/src/private/insertlanguages.php b/boca-1.5.0/src/private/insertlanguages.php
index c6b150a..c969841 100644
--- a/boca-1.5.0/src/private/insertlanguages.php
+++ b/boca-1.5.0/src/private/insertlanguages.php
@@ -16,16 +16,24 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////////////
-//Last updated 21/jul/2012 by cassio@ime.usp.br
+//Last updated 06/aug/2012 by cassio@ime.usp.br
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
-if(is_readable(getcwd() . $ds . '..' .$ds . 'db.php')) {
- require_once(getcwd() . $ds . '..' .$ds . 'db.php');
- require_once(getcwd() . $ds . '..' .$ds . 'version.php');
+
+if(is_readable('/etc/boca.conf')) {
+ $pif=parse_ini_file('/etc/boca.conf');
+ $bocadir = trim($pif['bocadir']) . $ds . 'src';
+} else {
+ $bocadir = getcwd();
+}
+
+if(is_readable($bocadir . $ds . '..' .$ds . 'db.php')) {
+ require_once($bocadir . $ds . '..' .$ds . 'db.php');
+ require_once($bocadir . $ds . '..' .$ds . 'version.php');
} else {
- if(is_readable(getcwd() . $ds . 'db.php')) {
- require_once(getcwd() . $ds . 'db.php');
- require_once(getcwd() . $ds . 'version.php');
+ if(is_readable($bocadir . $ds . 'db.php')) {
+ require_once($bocadir . $ds . 'db.php');
+ require_once($bocadir . $ds . 'version.php');
} else {
echo "unable to find db.php";
exit;
diff --git a/boca-1.5.0/src/team/clar.php b/boca-1.5.0/src/team/clar.php
index 7b391b9..a1e3972 100644
--- a/boca-1.5.0/src/team/clar.php
+++ b/boca-1.5.0/src/team/clar.php
@@ -29,6 +29,7 @@ if (isset($_POST["message"]) && isset($_POST["problem"]) && isset($_POST["Submit
}
ForceLoad("clar.php");
}
+$_SESSION["popuptime"] = time();
?>
<br>
<table width="100%" border=1>
@@ -58,11 +59,6 @@ for ($i=0; $i<count($clar); $i++) {
echo " <textarea name=\"m$i\" cols=\"60\" rows=\"8\" readonly>".$clar[$i]["question"]."</textarea>\n";
echo "</td>\n";
- if ($clar[$i]["timestamp"]>$_SESSION["usertable"]["userlastlogin"]-$st["sitestartdate"] && $clar[$i]["timestamp"] < $st['siteduration'] &&
- trim($clar[$i]["answer"])!='' && !isset($_SESSION["popups"]['clar' . $i . '-' . $clar[$i]["timestamp"]])) {
- $_SESSION["popups"]['clar' . $i . '-' . $clar[$i]["timestamp"]] = "Clarification for problem ".$clar[$i]["problem"]." answered<br>";
- }
-
if (trim($clar[$i]["answer"]) == "") $clar[$i]["answer"] = "Not answered yet";
echo " <td>";
// echo " <pre>" . $clar[$i]["answer"] . "</pre>";
diff --git a/boca-1.5.0/src/team/header.php b/boca-1.5.0/src/team/header.php
index 862f284..23c6d98 100644
--- a/boca-1.5.0/src/team/header.php
+++ b/boca-1.5.0/src/team/header.php
@@ -85,15 +85,42 @@ if($doslow) {
}
}
-$str = '';
-foreach($_SESSION["popups"] as $key => $value) {
- if($value != null) {
- $str .= $value;
- $_SESSION["popups"][$key] = null;
+if(!isset($_SESSION["popuptime"]) || $_SESSION["popuptime"] < time()-120) {
+ $_SESSION["popuptime"] = time();
+
+ if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) != null) {
+ $clar = DBUserClars($_SESSION["usertable"]["contestnumber"],
+ $_SESSION["usertable"]["usersitenumber"],
+ $_SESSION["usertable"]["usernumber"]);
+ for ($i=0; $i<count($clar); $i++) {
+ if ($clar[$i]["timestamp"]>$_SESSION["usertable"]["userlastlogin"]-$st["sitestartdate"] &&
+ $clar[$i]["timestamp"] < $st['siteduration'] &&
+ trim($clar[$i]["answer"])!='' && !isset($_SESSION["popups"]['clar' . $i . '-' . $clar[$i]["timestamp"]])) {
+ $_SESSION["popups"]['clar' . $i . '-' . $clar[$i]["timestamp"]] = "Clarification for problem ".$clar[$i]["problem"]." answered\n";
+ }
+ }
+ $run = DBUserRuns($_SESSION["usertable"]["contestnumber"],
+ $_SESSION["usertable"]["usersitenumber"],
+ $_SESSION["usertable"]["usernumber"]);
+ for ($i=0; $i<count($run); $i++) {
+ if ($run[$i]["anstime"]>$_SESSION["usertable"]["userlastlogin"]-$st["sitestartdate"] &&
+ $run[$i]["anstime"] < $st['sitelastmileanswer'] &&
+ $run[$i]["ansfake"]!="t" && !isset($_SESSION["popups"]['run' . $i . '-' . $run[$i]["anstime"]])) {
+ $_SESSION["popups"]['run' . $i . '-' . $run[$i]["anstime"]] = "Run ".$run[$i]["number"]." result: ".$run[$i]["answer"] . '\n';
+ }
+ }
+ }
+
+ $str = '';
+ foreach($_SESSION["popups"] as $key => $value) {
+ if($value != '') {
+ $str .= $value;
+ $_SESSION["popups"][$key] = '';
+ }
+ }
+ if($str != '') {
+ MSGError('YOU GOT NEWS:\n' . $str . '\n');
}
-}
-if($str != '') {
- MSGError('YOU GOT NEWS:<br>' . $str);
}
list($clockstr,$clocktype)=siteclock();
diff --git a/boca-1.5.0/src/team/run.php b/boca-1.5.0/src/team/run.php
index f00adac..51afc75 100644
--- a/boca-1.5.0/src/team/run.php
+++ b/boca-1.5.0/src/team/run.php
@@ -82,6 +82,7 @@ if(!isset($_SESSION['forceredo']) || $_SESSION['forceredo']==false) {
}
}
if($redo) {
+ $_SESSION["popuptime"] = time();
$_SESSION['forceredo']=false;
if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null)
ForceLoad("../index.php");
@@ -117,11 +118,6 @@ if($redo) {
$strtmp .= "</td>\n";
$strtmp .= " </tr>\n";
-
- if ($run[$i]["anstime"]>$_SESSION["usertable"]["userlastlogin"]-$st["sitestartdate"] && $run[$i]["anstime"] < $st['sitelastmileanswer'] &&
- $run[$i]["ansfake"]!="t" && !isset($_SESSION["popups"]['run' . $i . '-' . $run[$i]["anstime"]])) {
- $_SESSION["popups"]['run' . $i . '-' . $run[$i]["anstime"]] = "Run ".$run[$i]["number"]." result: ".$run[$i]["answer"]. "<br>";
- }
}
$strtmp .= "</table>";
if (count($run) == 0) $strtmp .= "<br><center><b><font color=\"#ff0000\">NO RUNS AVAILABLE</font></b></center>";
diff --git a/boca-1.5.0/tools/icpc.etc.tgz b/boca-1.5.0/tools/icpc.etc.tgz
index d3b7025..11090b0 100644
--- a/boca-1.5.0/tools/icpc.etc.tgz
+++ b/boca-1.5.0/tools/icpc.etc.tgz
Binary files differ