diff options
Diffstat (limited to 'src/frun.php')
| -rw-r--r-- | src/frun.php | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/frun.php b/src/frun.php index 20fb616..d920e74 100644 --- a/src/frun.php +++ b/src/frun.php @@ -289,18 +289,21 @@ function DBRunGiveUp($number,$site,$contest,$usernumber,$usersite) { "newstatus=$newstatus", 3); return true; } -function DBRunDelete($number,$site,$contest,$user,$usersite) { - $c = DBConnect(); - DBExec($c, "begin work", "DBRunDelete(transaction)"); +function DBRunDelete($number,$site,$contest,$user,$usersite,$cc=null) { + if($cc == null) { + $c = DBConnect(); + DBExec($c, "begin work", "DBRunDelete(transaction)"); + } else $c = $cc; $sql = "select * from runtable as r where r.contestnumber=$contest and " . "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); - return false; + if($cc == null) + DBExec($c, "rollback work", "DBRunDelete(rollback)"); + LogLevel("Unable to delete a run. ". + "(run=$number, site=$site, contest=$contest)",1); + return false; } $temp = DBRow($r, 0); @@ -320,8 +323,8 @@ function DBRunDelete($number,$site,$contest,$user,$usersite) { ": " . $p[0]["fullname"]), "", "", "t", $p[0]["color"], $p[0]["colorname"], $c); } } - - DBExec($c, "commit work", "DBRunDelete(commit)"); + if($cc == null) + DBExec($c, "commit work", "DBRunDelete(commit)"); LOGLevel("Run deleted (run=$number, site=$site, contest=$contest, user=$user(site=$usersite)).", 3); return true; } @@ -585,7 +588,7 @@ function DBOpenRunsSNS($contest,$site,$st,$order='run') { "r.runproblem=p.problemnumber and l.contestnumber=r.contestnumber and r.usernumber=u.usernumber and r.runsitenumber=u.usersitenumber and " . "l.langnumber=r.runlangnumber and a.answernumber=r.runanswer and " . "a.contestnumber=r.contestnumber"; - if ($site != "x") { + if (strpos($site,"x")===false) { $str = explode(",", $site); $sql .= " and (r.runsitenumber=-1"; for ($i=0;$i<count($str);$i++) { @@ -641,7 +644,7 @@ function DBOpenRunsSNS($contest,$site,$st,$order='run') { $a[$i] = DBRow($r,$i); return $a; } -function DBNewRun($param,$c=null) { +function DBNewRun($param,$c=null,$allowinsert=true) { if(isset($param['contestnumber']) && !isset($param['contest'])) $param['contest']=$param['contestnumber']; if(isset($param['sitenumber']) && !isset($param['site'])) $param['site']=$param['sitenumber']; if(isset($param['runsitenumber']) && !isset($param['site'])) $param['site']=$param['runsitenumber']; @@ -757,9 +760,20 @@ function DBNewRun($param,$c=null) { $oid1 = $lr['autostdout']; if(isset($lr['autostderr'])) $oid2 = $lr['autostderr']; + } else { + if(!$allowinsert) { + if($cw) + DBExec($c, "rollback work", "DBNewRun(rollback-noinsert)"); + return -1; + } } $runinc = $runnumber - 1; } else { + if(!$allowinsert) { + if($cw) + DBExec($c, "rollback work", "DBNewRun(rollback-noinsert)"); + return -1; + } $runnumber = $a["nextrun"] + 1; DBExec($c, "update sitetable set sitenextrun=$runnumber" . " where sitenumber=$site and contestnumber=$contest and sitenextrun<$runnumber", "DBNewRun(update site)"); @@ -913,8 +927,8 @@ function DBNewRun($param,$c=null) { "autostdout=$oid1, autostderr=$oid2 " . "where runnumber=$runnumber and contestnumber=$contest and runsitenumber=$site", "DBNewRun(update run)"); - if(is_numeric($oldoid1)) DB_lo_unlink($c,$oldoid1); - if(is_numeric($oldoid2)) DB_lo_unlink($c,$oldoid2); + if(isset($oldoid1) && is_numeric($oldoid1)) DB_lo_unlink($c,$oldoid1); + if(isset($oldoid2) && is_numeric($oldoid2)) DB_lo_unlink($c,$oldoid2); } if($cw) DBExec($c, "commit work", "DBNewRun(commit-update)"); } |