aboutsummaryrefslogtreecommitdiff
path: root/boca-1.5.0/src/fproblem.php
diff options
context:
space:
mode:
authorcassiopc <cassiopc@gmail.com>2012-08-08 17:52:19 +0000
committercassiopc <cassiopc@gmail.com>2012-08-08 17:52:19 +0000
commit5d4eca5257a60c5f1de043fdf3f67e0a9df011f4 (patch)
tree6d4ec6ffe1b6490be4120c0f06ae6cdabca41dd8 /boca-1.5.0/src/fproblem.php
parentf8c7c32e3ea6417ccf04309ec521b39a0c20414d (diff)
downloadboca-5d4eca5257a60c5f1de043fdf3f67e0a9df011f4.tar.gz
boca-5d4eca5257a60c5f1de043fdf3f67e0a9df011f4.zip
many small bug fixes
Diffstat (limited to 'boca-1.5.0/src/fproblem.php')
-rw-r--r--boca-1.5.0/src/fproblem.php49
1 files changed, 40 insertions, 9 deletions
diff --git a/boca-1.5.0/src/fproblem.php b/boca-1.5.0/src/fproblem.php
index 669c2ef..42346cb 100644
--- a/boca-1.5.0/src/fproblem.php
+++ b/boca-1.5.0/src/fproblem.php
@@ -85,7 +85,8 @@ function DBGetProblemData($contestnumber, $problemnumber, $c=null) {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
- $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "problem" . $a[$i]['number'] . "-contest" . $contestnumber;
+ $nn = $a[$i]['number'];
+ $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "contest" . $contestnumber ."-problem" . $nn;
if(is_readable($ptmp . ".name")) {
$a[$i]['descfilename']=trim(file_get_contents($ptmp . ".name"));
if($a[$i]['descfilename'] != '')
@@ -94,6 +95,14 @@ function DBGetProblemData($contestnumber, $problemnumber, $c=null) {
}
return $a;
}
+function DBClearProblemTmp($contestnumber) {
+ $ds = DIRECTORY_SEPARATOR;
+ if($ds=="") $ds = "/";
+ $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "contest" . $contestnumber . "-*.name";
+ foreach(glob($ptmp) as $file) @unlink($file);
+ $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "contest" . $contestnumber . "-*.hash";
+ foreach(glob($ptmp) as $file) @unlink($file);
+}
function DBGetFullProblemData($contestnumber,$freeproblems=false) {
$c = DBConnect();
DBExec($c, "begin work", "GetFullProblemData");
@@ -110,18 +119,31 @@ function DBGetFullProblemData($contestnumber,$freeproblems=false) {
}
$cf = globalconf();
$a = array();
+ $ds = DIRECTORY_SEPARATOR;
+ if($ds=="") $ds = "/";
for ($i=0;$i<$n;$i++) {
$a[$i] = array_merge(array(),DBRow($r,$i));
$nn=$a[$i]['number'];
+ $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "contest" . $contestnumber ."-problem" . $nn;
+ $ck = myshorthash('');
+ if(is_readable($ptmp . ".hash")) {
+ $ck = trim(file_get_contents($ptmp . ".hash"));
+ }
+ if($ck != $a[$i]['inputhash']) {
+ @unlink($ptmp . ".name");
+ @unlink($ptmp . ".hash");
+ $a[$i]['basefilename']='';
+ $a[$i]['descfilename']='';
+ $a[$i]['fullname']='';
+ }
if($freeproblems && $a[$i]['fake'] != 't') {
- $ds = DIRECTORY_SEPARATOR;
- if($ds=="") $ds = "/";
- $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "problem" . $nn . "-contest" . $contestnumber;
if(is_readable($ptmp . ".name")) {
$a[$i]['descfilename']=trim(file_get_contents($ptmp . ".name"));
if($a[$i]['descfilename'] != '')
$a[$i]['descoid']=-1;
} else {
+ @unlink($ptmp . ".name");
+ @unlink($ptmp . ".hash");
$randnum = session_id() . "_" . rand();
$dir = $ptmp . '-' . $randnum;
@mkdir($dir,0770,true);
@@ -153,6 +175,7 @@ function DBGetFullProblemData($contestnumber,$freeproblems=false) {
$failed=5;
if(!$failed) {
file_put_contents($ptmp . ".name",$ptmp . $ds . $descfile);
+ file_put_contents($ptmp . ".hash",$a[$i]['inputhash']);
if(is_readable($ptmp . ".name")) {
$a[$i]['descfilename']=trim(file_get_contents($ptmp . ".name"));
if($a[$i]['descfilename'] != '')
@@ -166,6 +189,13 @@ function DBGetFullProblemData($contestnumber,$freeproblems=false) {
}
}
if($failed) {
+ $a[$i]['basefilename']='';
+ $a[$i]['descfilename']='';
+ @unlink($ptmp . ".name");
+ @unlink($ptmp . ".hash");
+ DBExec($c,"update problemtable set problemfullname='', problembasefilename='' where problemnumber=$nn and contestnumber=$contestnumber",
+ "DBGetFullProblemData(unfree problem)");
+
if($failed!=4) {
LogError("Failed to unzip problem package (failcode=$failed, problem=$nn, contest=$contestnumber)");
if($failed==1) $a[$i]['fullname']='(ERROR READING FROM DATABASE, OR DIRECTORY PERMISSION PROBLEM)';
@@ -177,7 +207,7 @@ function DBGetFullProblemData($contestnumber,$freeproblems=false) {
}
cleardir($dir,false,true);
}
- }
+ }
}
DBExec($c, "commit", "GetFullProblemData");
return $a;
@@ -282,8 +312,8 @@ function DBNewProblem($contestnumber, $param, $c=null) {
$oldfullname='';
$deservesupdatetime=false;
if ($n == 0) {
- DBExec ($c, "insert into problemtable (contestnumber, problemnumber, problemname) values " .
- "($contestnumber, $number, '$name')", "DBNewProblem(insert problem)");
+ DBExec ($c, "insert into problemtable (contestnumber, problemnumber, problemname, problemcolor) values " .
+ "($contestnumber, $number, '$name','-1')", "DBNewProblem(insert problem)");
$deservesupdatetime=true;
$s = "created";
}
@@ -369,7 +399,7 @@ function DBNewProblem($contestnumber, $param, $c=null) {
if($deservesupdatetime) {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
- @unlink($_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "problem" . $number . "-contest" . $contestnumber . '.name');
+ @unlink($_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "contest" . $contestnumber ."-problem" . $number . '.name');
DBExec ($c, "update problemtable set updatetime=" . $updatetime .
" where contestnumber=$contestnumber and problemnumber=$number", "DBNewProblem(time)");
}
@@ -407,7 +437,8 @@ function DBGetProblems($contest,$showanyway=false) {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
- $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "problem" . $a[$i]['number'] . "-contest" . $contest;
+ $nn = $a[$i]['number'];
+ $ptmp = $_SESSION["locr"] . $ds . "private" . $ds . "problemtmp" . $ds . "contest" . $contestnumber ."-problem" . $nn;
if(is_readable($ptmp . ".name")) {
$a[$i]['descfilename']=trim(file_get_contents($ptmp . ".name"));
if($a[$i]['descfilename'] != '')