aboutsummaryrefslogtreecommitdiff
path: root/boca-1.5.0/src/fproblem.php
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 /boca-1.5.0/src/fproblem.php
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
Diffstat (limited to 'boca-1.5.0/src/fproblem.php')
-rw-r--r--boca-1.5.0/src/fproblem.php29
1 files changed, 9 insertions, 20 deletions
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'] != '')