diff options
| author | cassiopc <cassiopc@gmail.com> | 2012-08-06 17:59:23 +0000 |
|---|---|---|
| committer | cassiopc <cassiopc@gmail.com> | 2012-08-06 17:59:23 +0000 |
| commit | f8c7c32e3ea6417ccf04309ec521b39a0c20414d (patch) | |
| tree | 86befe96e554f00d25e1f3717d456ef6da470405 | |
| parent | d75956684f9599b8daf705b11d67c75186ea7e3f (diff) | |
| download | boca-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.php | 21 | ||||
| -rw-r--r-- | boca-1.5.0/src/fclar.php | 2 | ||||
| -rw-r--r-- | boca-1.5.0/src/fcontest.php | 4 | ||||
| -rw-r--r-- | boca-1.5.0/src/fproblem.php | 29 | ||||
| -rw-r--r-- | boca-1.5.0/src/frun.php | 388 | ||||
| -rw-r--r-- | boca-1.5.0/src/fscore.php | 22 | ||||
| -rw-r--r-- | boca-1.5.0/src/ftask.php | 8 | ||||
| -rw-r--r-- | boca-1.5.0/src/judge/runedit.php | 35 | ||||
| -rwxr-xr-x | boca-1.5.0/src/private/autojudging.php | 22 | ||||
| -rw-r--r-- | boca-1.5.0/src/private/createdb.php | 21 | ||||
| -rwxr-xr-x | boca-1.5.0/src/private/createproblemzip.php | 21 | ||||
| -rw-r--r-- | boca-1.5.0/src/private/insertlanguages.php | 22 | ||||
| -rw-r--r-- | boca-1.5.0/src/team/clar.php | 6 | ||||
| -rw-r--r-- | boca-1.5.0/src/team/header.php | 43 | ||||
| -rw-r--r-- | boca-1.5.0/src/team/run.php | 6 | ||||
| -rw-r--r-- | boca-1.5.0/tools/icpc.etc.tgz | bin | 8634 -> 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> "; +// 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> "; /* 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++) { </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>"; - } -?> - </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> "; +// 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> "; - 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>"; } ?> </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>"; - } -?> - </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 Binary files differindex d3b7025..11090b0 100644 --- a/boca-1.5.0/tools/icpc.etc.tgz +++ b/boca-1.5.0/tools/icpc.etc.tgz |