aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/.htaccess2
-rw-r--r--src/admin/contest.php36
-rw-r--r--src/admin/header.php6
-rw-r--r--src/admin/misc.php28
-rw-r--r--src/admin/option.php1
-rw-r--r--src/admin/problem.php55
-rw-r--r--src/admin/site.php18
-rw-r--r--src/admin/task.php3
-rw-r--r--src/admin/user.php24
-rw-r--r--src/db.php25
-rw-r--r--src/fclar.php92
-rw-r--r--src/fcontest.php101
-rw-r--r--src/fextdata.php312
-rw-r--r--src/filedownload.php2
-rw-r--r--src/filewindow.php2
-rw-r--r--src/fproblem.php2
-rw-r--r--src/frun.php40
-rw-r--r--src/fscore.php2
-rw-r--r--src/ftask.php3
-rwxr-xr-xsrc/globals.php9
-rw-r--r--src/judge/runeditchief.php8
-rw-r--r--src/optionlower.php29
-rwxr-xr-xsrc/private/autojudging.php115
-rw-r--r--src/private/conf.php2
-rw-r--r--src/private/score.sep1
-rw-r--r--src/site/getsite.php16
-rw-r--r--src/staff/header.php8
-rw-r--r--src/system/header.php2
-rw-r--r--src/team/run.php3
-rw-r--r--src/version2
-rw-r--r--src/versionnum.php2
31 files changed, 623 insertions, 328 deletions
diff --git a/src/.htaccess b/src/.htaccess
index dbafa30..7c89b5b 100644
--- a/src/.htaccess
+++ b/src/.htaccess
@@ -1,5 +1,5 @@
php_flag output_buffering on
-php_value memory_limit 256M
+php_value memory_limit 1024M
php_value post_max_size 128M
php_flag magic_quotes_gpc off
php_value upload_max_filesize 128M
diff --git a/src/admin/contest.php b/src/admin/contest.php
index 58df217..fda17da 100644
--- a/src/admin/contest.php
+++ b/src/admin/contest.php
@@ -26,6 +26,37 @@ $localsite=$ct["contestlocalsite"];
$mainsite=$ct["contestmainsite"];
if ($localsite == $mainsite) $main=true; else $main=false;
+if($main) {
+ if (isset($_POST["SubmitDC"]) && $_POST["SubmitDC"] == "Delete ALL clars") {
+ if ($_POST["confirmation"] == "confirm") {
+ DBSiteDeleteAllClars ($_SESSION["usertable"]["contestnumber"], -1,
+ $_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
+ }
+ ForceLoad("contest.php");
+ }
+ if (isset($_POST["SubmitDR"]) && $_POST["SubmitDR"] == "Delete ALL runs") {
+ if ($_POST["confirmation"] == "confirm") {
+ DBSiteDeleteAllRuns ($_SESSION["usertable"]["contestnumber"], -1,
+ $_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
+ }
+ ForceLoad("contest.php");
+ }
+ if (isset($_POST["SubmitDT"]) && $_POST["SubmitDT"] == "Delete ALL tasks") {
+ if ($_POST["confirmation"] == "confirm") {
+ DBSiteDeleteAllTasks ($_SESSION["usertable"]["contestnumber"], -1,
+ $_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
+ }
+ ForceLoad("contest.php");
+ }
+ if (isset($_POST["SubmitDB"]) && $_POST["SubmitDB"] == "Delete ALL bkps") {
+ if ($_POST["confirmation"] == "confirm") {
+ DBSiteDeleteAllBkps ($_SESSION["usertable"]["contestnumber"], -1,
+ $_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
+ }
+ ForceLoad("contest.php");
+ }
+}
+
if (isset($_POST["Submit3"]) && isset($_POST["penalty"]) && is_numeric($_POST["penalty"]) &&
isset($_POST["maxfilesize"]) && isset($_POST["mainsite"]) && isset($_POST["name"]) &&
$_POST["name"] != "" && isset($_POST["lastmileanswer"]) && is_numeric($_POST["lastmileanswer"]) &&
@@ -254,6 +285,11 @@ echo $contest;
<input type="submit" name="Submit3" value="Update" onClick="conf()">
<input type="submit" name="Submit3" value="Update Contest and All Sites" onClick="conf2()">
<input type="reset" name="Submit4" value="Clear">
+<br><br>
+ <input type="submit" name="SubmitDC" value="Delete ALL clars" onClick="conf2()">
+ <input type="submit" name="SubmitDR" value="Delete ALL runs" onClick="conf2()">
+ <input type="submit" name="SubmitDT" value="Delete ALL tasks" onClick="conf2()">
+ <input type="submit" name="SubmitDB" value="Delete ALL bkps" onClick="conf2()">
<?php } else { ?>
<input type="submit" name="Submit3" value="Update" onClick="conf()">
<input type="submit" name="Submit3" value="Become Main Site" onClick="conf3()">
diff --git a/src/admin/header.php b/src/admin/header.php
index 6002b18..116f4f6 100644
--- a/src/admin/header.php
+++ b/src/admin/header.php
@@ -42,7 +42,6 @@ if(!isset($_POST['noflush'])) {
echo "<link rel=stylesheet href=\"$loc/Css.php\" type=\"text/css\">\n";
}
-//echo "<meta http-equiv=\"refresh\" content=\"60\" />";
if(!ValidSession()) {
InvalidSession("admin/index.php");
ForceLoad("$loc/index.php");
@@ -52,6 +51,11 @@ if($_SESSION["usertable"]["usertype"] != "admin") {
ForceLoad("$loc/index.php");
}
+if ((isset($_GET["Submit1"]) && $_GET["Submit1"] == "Transfer") ||
+ (isset($_GET["Submit3"]) && $_GET["Submit3"] == "Transfer scores")) {
+ echo "<meta http-equiv=\"refresh\" content=\"60\" />";
+}
+
if(!isset($_POST['noflush'])) {
echo "</head><body id=\"body\"><table border=1 width=\"100%\">\n";
echo "<tr><td nowrap bgcolor=\"eeee00\" align=center>";
diff --git a/src/admin/misc.php b/src/admin/misc.php
index 3e8d224..8ff1aeb 100644
--- a/src/admin/misc.php
+++ b/src/admin/misc.php
@@ -19,7 +19,7 @@
require 'header.php';
?>
<br>
-<form name="form1" enctype="multipart/form-data" method="post" action="misc.php">
+<form name="form1" enctype="multipart/form-data" method="get" action="misc.php">
<input type=hidden name="confirmation" value="noconfirm" />
<script language="javascript" type="text/javascript">
function conf() {
@@ -38,7 +38,7 @@ require 'header.php';
<center>
<input type="submit" name="Submit1" value="Transfer" onClick="conf()"> &nbsp;
<input type="submit" name="Submit2" value="Transfer all" onClick="conf()"> &nbsp;
- <input type="submit" name="Submit3" value="Transfer scores"> &nbsp;
+ <input type="submit" name="Submit3" value="Transfer scores" onClick="conf()"> &nbsp;
<input type="submit" name="Submit4" value="Clear cache" onClick="conf()"> &nbsp;
<input type="submit" name="Submit5" value="Full clear" onClick="conf2()"> &nbsp;
<input type="submit" name="Submit6" value="Update BOCA" onClick="conf2()"> &nbsp;
@@ -49,35 +49,36 @@ require 'header.php';
OPERATION LOG DISPLAYS BELOW:
<?php
-if(isset($_POST['confirmation']) && $_POST['confirmation'] == 'confirm') {
+echo "Start: " . now() . "\n";
+if(isset($_GET['confirmation']) && $_GET['confirmation'] == 'confirm') {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
$dotransfer=false;
$doscore=false;
$dotransferall=false;
-if (isset($_POST["Submit1"]) && $_POST["Submit1"] == "Transfer") {
+if (isset($_GET["Submit1"]) && $_GET["Submit1"] == "Transfer") {
$dotransfer=true;
$doscore=true;
}
-if (isset($_POST["Submit2"]) && $_POST["Submit2"] == "Transfer all") {
+if (isset($_GET["Submit2"]) && $_GET["Submit2"] == "Transfer all") {
$dotransfer=true;
$dotransferall=true;
$doscore=true;
}
-if (isset($_POST["Submit3"]) && $_POST["Submit3"] == "Transfer scores") {
+if (isset($_GET["Submit3"]) && $_GET["Submit3"] == "Transfer scores") {
$doscore=true;
}
-if (isset($_POST["Submit4"]) && $_POST["Submit4"] == "Clear cache") {
+if (isset($_GET["Submit4"]) && $_GET["Submit4"] == "Clear cache") {
if(fixbocadir(dirname(__DIR__)))
echo "Done\n";
else echo "Error (likely permission/ownership issues)\n";
}
-if (isset($_POST["Submit5"]) && $_POST["Submit5"] == "Full clear") {
+if (isset($_GET["Submit5"]) && $_GET["Submit5"] == "Full clear") {
if(fixbocadir(dirname(__DIR__),true))
echo "Done\n";
else echo "Error (likely permission/ownership issues)\n";
}
-if (isset($_POST["Submit6"]) && $_POST["Submit6"] == "Update BOCA") {
+if (isset($_GET["Submit6"]) && $_GET["Submit6"] == "Update BOCA") {
$dir = dirname(__DIR__);
if(!is_readable($dir . $ds . "private" . $ds . "updateboca.log")) @file_put_contents($dir . $ds . "private" . $ds . "updateboca.log", "");
if(is_writable($dir . $ds . "private" . $ds . "updateboca.log")) {
@@ -112,7 +113,7 @@ if (isset($_POST["Submit6"]) && $_POST["Submit6"] == "Update BOCA") {
echo "Cannot update log file\n";
}
}
-if (isset($_POST["Submit7"]) && $_POST["Submit7"] == "Revert Update") {
+if (isset($_GET["Submit7"]) && $_GET["Submit7"] == "Revert Update") {
$dir = dirname(__DIR__);
if(!is_readable($dir . $ds . "private" . $ds . "updateboca.log")) @file_put_contents($dir . $ds . "private" . $ds . "updateboca.log", "");
if(is_writable($dir . $ds . "private" . $ds . "updateboca.log")) {
@@ -168,7 +169,7 @@ if($dotransfer || $doscore || $dotransferall) {
$fname = $remotedir . $ds . "score_site" . $localsite . "_" . $localsite . "_x"; // . md5($_SERVER['HTTP_HOST']);
@file_put_contents($fname . ".tmp",base64_encode(serialize($data0)));
@rename($fname . ".tmp",$fname . ".dat");
- echo "Transferring scores\n";
+ echo "Checking for transfers\n";
echo scoretransfer($fname . ".dat", $localsite);
echo "Saving scores\n";
if(@create_zip($remotedir,glob($remotedir . '/*.dat'),$fname . ".tmp") != 1) {
@@ -181,8 +182,8 @@ if($dotransfer || $doscore || $dotransferall) {
@fclose($fp);
}
if($dotransfer) {
- echo "Processing other data\n";
- getMainXML($_SESSION["usertable"]["contestnumber"],10,$dotransferall);
+ echo "Processing contest data\n";
+ echo getMainXML($_SESSION["usertable"]["contestnumber"],10,$dotransferall);
}
@unlink($destination . ".lck");
} else {
@@ -193,6 +194,7 @@ if($dotransfer || $doscore || $dotransferall) {
}
}
}
+echo "End: " . now() . "\n";
?>
</pre>
</body>
diff --git a/src/admin/option.php b/src/admin/option.php
index 81e5879..d3581a4 100644
--- a/src/admin/option.php
+++ b/src/admin/option.php
@@ -15,7 +15,6 @@
// 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
require('header.php');
require('../optionlower.php');
?>
diff --git a/src/admin/problem.php b/src/admin/problem.php
index d462e79..a01bd35 100644
--- a/src/admin/problem.php
+++ b/src/admin/problem.php
@@ -192,13 +192,36 @@ if (isset($_POST["Submit3"]) && isset($_POST["problemnumber"]) && is_numeric($_P
$param['inputfilename'] = $name;
$param['inputfilepath'] = $temp;
$param['fake'] = 'f';
- $param['colorname'] = $_POST["colorname"];
- $param['color'] = $_POST["color"];
+ $param['colorname'] = trim($_POST["colorname"]);
+ $param['color'] = trim($_POST["color"]);
DBNewProblem ($_SESSION["usertable"]["contestnumber"], $param);
}
}
ForceLoad("problem.php");
}
+
+$prob = DBGetFullProblemData($_SESSION["usertable"]["contestnumber"],true);
+for ($i=0; $i<count($prob); $i++) {
+ if($prob[$i]["fake"]!='t') {
+ if (isset($_POST["SubmitProblem" . $prob[$i]['number']]) && $_POST["SubmitProblem" . $prob[$i]['number']] == 'Update' &&
+ isset($_POST["colorname" . $prob[$i]['number']]) && strlen($_POST["colorname" . $prob[$i]['number']]) <= 100 &&
+ isset($_POST["color" . $prob[$i]['number']]) && strlen($_POST["color" . $prob[$i]['number']]) <= 6 &&
+ isset($_POST["problemname" . $prob[$i]['number']]) && $_POST["problemname" . $prob[$i]['number']] != "" && strlen($_POST["problemname" . $prob[$i]['number']]) <= 20) {
+ if(strpos(trim($_POST["problemname" . $prob[$i]['number']]),' ')!==false) {
+ MSGError('Problem short name cannot have spaces');
+ } else {
+ $param = array();
+ $param['number'] = $prob[$i]['number'];
+ $param['name'] = trim($_POST["problemname" . $prob[$i]['number']]);
+ $param['fake'] = 'f';
+ $param['colorname'] = trim($_POST["colorname" . $prob[$i]['number']]);
+ $param['color'] = trim($_POST["color" . $prob[$i]['number']]);
+ DBNewProblem ($_SESSION["usertable"]["contestnumber"], $param);
+ }
+ ForceLoad("problem.php");
+ }
+ }
+}
?>
<br>
<script language="javascript">
@@ -221,6 +244,7 @@ if (isset($_POST["Submit3"]) && isset($_POST["problemnumber"]) && is_numeric($_P
}
}
</script>
+<form name="form0" enctype="multipart/form-data" method="post" action="problem.php">
<table width="100%" border=1>
<tr>
<td><b>Problem #</b></td>
@@ -234,7 +258,6 @@ if (isset($_POST["Submit3"]) && isset($_POST["problemnumber"]) && is_numeric($_P
<td><b>Color</b></td>
</tr>
<?php
- $prob = DBGetFullProblemData($_SESSION["usertable"]["contestnumber"],true);
for ($i=0; $i<count($prob); $i++) {
echo " <tr>\n";
if($prob[$i]["fake"]!='t') {
@@ -247,10 +270,15 @@ for ($i=0; $i<count($prob); $i++) {
"')\">" . $prob[$i]["number"];
}
echo "</a></td>\n";
+ echo "<input type=hidden name=\"problemname" . $prob[$i]['number'] . "\" value=\"" . $prob[$i]["name"] . "\" />";
+ echo " <td nowrap>" . $prob[$i]["name"] . "</td>\n";
+ //echo " <td nowrap>";
+ //echo "<input type=\"text\" name=\"problemname" . $prob[$i]['number'] . "\" value=\"" . $prob[$i]["name"] . "\" size=\"4\" maxlength=\"20\" />";
+ //echo "</td>\n";
} else {
echo " <td nowrap>" . $prob[$i]["number"] . " (fake)</td>\n";
+ echo " <td nowrap>" . $prob[$i]["name"] . "</td>\n";
}
- echo " <td nowrap>" . $prob[$i]["name"] . "</td>\n";
echo " <td nowrap>" . $prob[$i]["fullname"] . "&nbsp;</td>\n";
echo " <td nowrap>" . $prob[$i]["basefilename"] . "&nbsp;</td>\n";
if (isset($prob[$i]["descoid"]) && $prob[$i]["descoid"] != null && isset($prob[$i]["descfilename"])) {
@@ -283,15 +311,20 @@ for ($i=0; $i<count($prob); $i++) {
else
echo " <td nowrap>&nbsp;</td>\n";
*/
- if ($prob[$i]["color"]!="") {
- echo " <td nowrap>" . $prob[$i]["colorname"] .
- "<img title=\"".$prob[$i]["color"]."\" alt=\"".$prob[$i]["colorname"]."\" width=\"25\" src=\"" .
- balloonurl($prob[$i]["color"]) . "\" /></td>\n";
- } else
- echo " <td nowrap>&nbsp;</td>\n";
+ echo " <td nowrap>";
+ if($prob[$i]["fake"]!='t') {
+ if ($prob[$i]["color"]!="") {
+ echo "<img title=\"".$prob[$i]["color"]."\" alt=\"".$prob[$i]["colorname"]."\" width=\"25\" src=\"" .
+ balloonurl($prob[$i]["color"]) . "\" />\n";
+ }
+ echo "<input type=\"text\" name=\"colorname" . $prob[$i]['number'] . "\" value=\"" . $prob[$i]["colorname"] . "\" size=\"10\" maxlength=\"100\" />";
+ echo "<input type=\"text\" name=\"color" . $prob[$i]['number'] . "\" value=\"" . $prob[$i]["color"]. "\" size=\"6\" maxlength=\"6\" />";
+ echo "<input type=\"submit\" name=\"SubmitProblem" . $prob[$i]["number"] . "\" value=\"Update\">";
+ } else echo "&nbsp;";
+ echo "</td>\n";
echo " </tr>\n";
}
-echo "</table>";
+echo "</table></form>";
if (count($prob) == 0) echo "<br><center><b><font color=\"#ff0000\">NO PROBLEMS DEFINED</font></b></center>";
?>
diff --git a/src/admin/site.php b/src/admin/site.php
index dd88d1c..b71d9c8 100644
--- a/src/admin/site.php
+++ b/src/admin/site.php
@@ -76,28 +76,30 @@ if (isset($_POST["Submit2"]) && $_POST["Submit2"] == "Start Now") {
}
ForceLoad("site.php?site=$site");
}
-if (isset($_POST["SubmitDC"]) && $_POST["SubmitDC"] == "Delete ALL site clars") {
+if (isset($_POST["SubmitDC"]) && $_POST["SubmitDC"] == "Delete ALL clars") {
if ($_POST["confirmation"] == "confirm") {
DBSiteDeleteAllClars ($_SESSION["usertable"]["contestnumber"], $site,
$_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
+ DBSiteDeleteAllClars ($_SESSION["usertable"]["contestnumber"], $ct["contestmainsite"],
+ $_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
}
ForceLoad("site.php?site=$site");
}
-if (isset($_POST["SubmitDR"]) && $_POST["SubmitDR"] == "Delete ALL site runs") {
+if (isset($_POST["SubmitDR"]) && $_POST["SubmitDR"] == "Delete ALL runs") {
if ($_POST["confirmation"] == "confirm") {
DBSiteDeleteAllRuns ($_SESSION["usertable"]["contestnumber"], $site,
$_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
}
ForceLoad("site.php?site=$site");
}
-if (isset($_POST["SubmitDT"]) && $_POST["SubmitDT"] == "Delete ALL site tasks") {
+if (isset($_POST["SubmitDT"]) && $_POST["SubmitDT"] == "Delete ALL tasks") {
if ($_POST["confirmation"] == "confirm") {
DBSiteDeleteAllTasks ($_SESSION["usertable"]["contestnumber"], $site,
$_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
}
ForceLoad("site.php?site=$site");
}
-if (isset($_POST["SubmitDB"]) && $_POST["SubmitDB"] == "Delete ALL site bkps") {
+if (isset($_POST["SubmitDB"]) && $_POST["SubmitDB"] == "Delete ALL bkps") {
if ($_POST["confirmation"] == "confirm") {
DBSiteDeleteAllBkps ($_SESSION["usertable"]["contestnumber"], $site,
$_SESSION["usertable"]["usernumber"], $_SESSION["usertable"]["usersitenumber"]);
@@ -530,10 +532,10 @@ echo "):</td>";
<input type="submit" name="Logins" value="Enable logins" onClick="conf()">
<br><br><br>
- <input type="submit" name="SubmitDC" value="Delete ALL site clars" onClick="conf2()">
- <input type="submit" name="SubmitDR" value="Delete ALL site runs" onClick="conf2()">
- <input type="submit" name="SubmitDT" value="Delete ALL site tasks" onClick="conf2()">
- <input type="submit" name="SubmitDB" value="Delete ALL site bkps" onClick="conf2()">
+ <input type="submit" name="SubmitDC" value="Delete ALL clars" onClick="conf2()">
+ <input type="submit" name="SubmitDR" value="Delete ALL runs" onClick="conf2()">
+ <input type="submit" name="SubmitDT" value="Delete ALL tasks" onClick="conf2()">
+ <input type="submit" name="SubmitDB" value="Delete ALL bkps" onClick="conf2()">
<?php
}
?>
diff --git a/src/admin/task.php b/src/admin/task.php
index a1446ce..cf707bc 100644
--- a/src/admin/task.php
+++ b/src/admin/task.php
@@ -81,6 +81,9 @@ if (isset($_GET["done"]) && is_numeric($_GET["done"]) && isset($_GET["site"]) &&
if (($s=DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null)
ForceLoad("../index.php");
+if (trim($s["sitetasking"])!="") $s["sitetasking"].=",".$_SESSION["usertable"]["usersitenumber"];
+else $s["sitetasking"]=$_SESSION["usertable"]["usersitenumber"];
+
$task = DBAllTasksInSites($_SESSION["usertable"]["contestnumber"], $s["sitetasking"], $order, true);
for ($i=0; $i<count($task); $i++) {
$st = $task[$i]["status"];
diff --git a/src/admin/user.php b/src/admin/user.php
index 9085e45..466cb07 100644
--- a/src/admin/user.php
+++ b/src/admin/user.php
@@ -15,9 +15,6 @@
// 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 26/oct/2014 by cassio@ime.usp.br
-// allow passwords to be changed by default
-//
require('header.php');
if (isset($_GET["site"]) && isset($_GET["user"]) && is_numeric($_GET["site"]) && is_numeric($_GET["user"]) &&
@@ -52,6 +49,7 @@ if (isset($_POST["username"]) && isset($_POST["userfullname"]) && isset($_POST["
$param['permitip'] = htmlspecialchars($_POST["userip"]);
$param['contest'] = $_SESSION["usertable"]["contestnumber"];
$param['changepass']='t';
+ if(isset($_POST['changepass']) && $_POST['changepass'] != 't') $param['changepass']='f';
/*
$param['user'] = myhtmlspecialchars($_POST["usernumber"]);
$param['site'] = myhtmlspecialchars($_POST["usersitenumber"]);
@@ -66,13 +64,14 @@ if (isset($_POST["username"]) && isset($_POST["userfullname"]) && isset($_POST["
*/
- $passcheck = htmlspecialchars($_POST["passwordo"]);
+ $passcheck = $_POST["passwordo"];
$a = DBUserInfo($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], $_SESSION["usertable"]["usernumber"], null, false);
if(myhash($a['userpassword'] . session_id()) != $passcheck) {
MSGError('Admin password is incorrect');
} else {
if ($_POST["passwordn1"] == $_POST["passwordn2"]) {
- $param['pass'] = bighexsub(htmlspecialchars($_POST["passwordn1"]),$a['userpassword']);
+ $param['pass'] = bighexsub($_POST["passwordn1"],$a['userpassword']);
+ while(strlen($param['pass']) < strlen($a['userpassword'])) $param['pass'] = '0' . $param['pass'];
if($param['user'] != 1000)
DBNewUser($param);
}
@@ -257,9 +256,11 @@ for ($i=0; $i < count($usr); $i++) {
($usr[$i]["usernumber"] != $_SESSION["usertable"]["usernumber"] ||
$usr[$i]["usersitenumber"] != $_SESSION["usertable"]["usersitenumber"]))
echo " <td nowrap><a href=\"user.php?site=" . $usr[$i]["usersitenumber"] . "&user=" .
- $usr[$i]["usernumber"] . "\">" . $usr[$i]["usernumber"] . "</a></td>\n";
+ $usr[$i]["usernumber"] . "\">" . $usr[$i]["usernumber"] . "</a>";
else
- echo " <td nowrap>" . $usr[$i]["usernumber"] . "</td>\n";
+ echo " <td nowrap>" . $usr[$i]["usernumber"];
+ if($usr[$i]['userenabled'] != 't' && $usr[$i]['userlastlogin'] < 1) echo "(inactive)";
+ echo "</td>\n";
echo " <td nowrap>" . $usr[$i]["usersitenumber"] . "</td>\n";
echo " <td nowrap>" . $usr[$i]["username"] . "&nbsp;</td>\n";
@@ -473,6 +474,15 @@ echo $u["userdesc"]; } ?>" size="50" maxlength="300" />
</td>
</tr>
<tr>
+ <td width="35%" align=right>Allow password change:</td>
+ <td width="65%">
+ <select name="changepass">
+ <option <?php if(isset($u) && $u["changepassword"]) echo "selected"; ?> value="t">Yes</option>
+ <option <?php if(!isset($u) || !$u["changepassword"]) echo "selected"; ?> value="f">No</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
<td width="35%" align=right>Admin (this user) Password:</td>
<td width="65%">
<input type="password" name="passwordo" value="" size="20" maxlength="200" />
diff --git a/src/db.php b/src/db.php
index 2f6dd57..c43816f 100644
--- a/src/db.php
+++ b/src/db.php
@@ -33,28 +33,28 @@ function DB_lo_open($conn, $file, $mode) {
else
return pg_lo_open ($conn, $file, $mode);
}
-function DB_lo_read_tobrowser($contest,$id) {
- $str = DB_lo_read($contest,$id);
- echo $str;
- return true;
+function DB_lo_read_tobrowser($contest,$id,$c=null) {
+ $str = DB_lo_read($contest,$id,-1,$c);
+ echo $str;
+ return true;
}
-function DB_lo_read($contest,$id,$s=-1) {
+function DB_lo_read($contest,$id,$s=-1,$c=null) {
if (strcmp(phpversion(),'4.2.0')<0) {
if($s<0) {
$str='';
- while (($buf = pg_loread ($id, 100000)) != false) $str .= $buf;
+ while (($buf = pg_loread ($id, 1000000)) != false) $str .= $buf;
} else
$str = pg_loread ($id, $s);
}
else {
if($s<0) {
$str='';
- while (($buf = pg_lo_read ($id, 100000)) != false) $str .= $buf;
+ while (($buf = pg_lo_read ($id, 1000000)) != false) $str .= $buf;
} else
$str = pg_lo_read ($id, $s);
}
- if(($str2 = DB_unlock($contest,$str))===false) return $str;
+ if(($str2 = DB_unlock($contest,$str,$c))===false) return $str;
return $str2;
}
function DB_unlock($contest,$str,$c=null) {
@@ -245,9 +245,10 @@ function DBGetRow ($sql,$i,$c=null,$txt='') {
if (DBnlines($r) < $i+1) return null;
$a = DBRow ($r, $i);
if (!$a) {
- LOGError("Unable to get row $i from a query ($txt). SQL=(" . $sql . ")");
- MSGError("Unable to get row from query ($txt).");
- exit;
+ DBClose($c);
+ LOGError("Unable to get row $i from a query ($txt). SQL=(" . $sql . ")");
+ MSGError("Unable to get row from query ($txt).");
+ exit;
}
return $a;
}
@@ -296,7 +297,7 @@ function DBcrc($contest,$id, $c=null) {
// just to return a unique string that will not match any other...
return "no-HASH-" . rand() . "-" . rand() . "-" . time();
}
- $str = DB_lo_read($contest,$f);
+ $str = DB_lo_read($contest,$f,-1,$c);
DB_lo_close($f);
if($docommit)
DBExec($c, "commit work", "DBcrc(commit)");
diff --git a/src/fclar.php b/src/fclar.php
index 72364e8..2ac61fb 100644
--- a/src/fclar.php
+++ b/src/fclar.php
@@ -157,10 +157,38 @@ function DBUpdateClarC($contest, $usersite, $usernumber, $clarsite, $clarnumber,
$time = time();
$t = $b["currenttime"];
- DBExec($c, "update clartable set clarstatus='$status', clarjudge=$usernumber, clarjudgesite=$usersite, " .
- "claranswer='$answer', clardatediffans=$t, updatetime=".time()." " .
- "where contestnumber=$contest and clarnumber=$clarnumber and clarsitenumber=$clarsite",
- "DBUpdateClarC(update clar)");
+ $theclar = DBRow($r,0);
+ if($type=="all" && $usersite != $theclar['clarsitenumber']) {
+ $param = $theclar;
+ $param['clarsitenumber'] = $usersite;
+ $param['usernumber'] = $usernumber;
+ $param['clarstatus'] = $status;
+ $param['clarjudge'] = $usernumber;
+ $param['clarjudgesite'] = $usersite;
+ $param['claranswer'] = $answer;
+ $param['clardatediffans'] = $t;
+ $param['updatetime'] = time();
+ $param['contest'] = $contest;
+ if(DBNewClar($param, $c, false) !== false) {
+ if(DBClarDelete($clarnumber, $theclar['clarsitenumber'], $contest, $usernumber, $usersite, $c)) {
+ LOGInfo("CLAR number $clarnumber site $clarsite contest $contest: user " . $theclar['usernumber'] . " replaced");
+ } else {
+ DBExec($c, "rollback work", "DBUpdateClarC(rollback promoted)");
+ LOGError("CLAR number $clarnumber site $clarsite contest $contest should be promoted (delete)");
+ MSGError("Clarification not update (error promoting it for answer all)");
+ return false;
+ }
+ } else {
+ DBExec($c, "rollback work", "DBUpdateClarC(rollback promoted2)");
+ LOGError("CLAR number $clarnumber site $clarsite contest $contest should be promoted (insert)");
+ MSGError("Clarification not update (error2 promoting it for answer all)");
+ return false;
+ }
+ } else
+ DBExec($c, "update clartable set clarstatus='$status', clarjudge=$usernumber, clarjudgesite=$usersite, " .
+ "claranswer='$answer', clardatediffans=$t, updatetime=".time()." " .
+ "where contestnumber=$contest and clarnumber=$clarnumber and clarsitenumber=$clarsite",
+ "DBUpdateClarC(update clar)");
DBExec($c, "commit work", "DBUpdateClarC(commit)");
LOGLevel("Clarification updated (clar=$clarnumber, site=$clarsite, contest=$contest, status=$status, " .
@@ -202,28 +230,32 @@ function DBClarGiveUp($number,$site,$contest, $usernumber, $usersite) {
}
//seta o status como 'deleted' de uma clarification que estava sendo respondida. Recebe o numero da clar,
//o numero do site e o numero do contest. Se nao conseguir retorna false.
-function DBClarDelete($number,$site,$contest,$user,$usersite) {
- $c = DBConnect();
- DBExec($c, "begin work", "DBClarDelete(transaction)");
- $r = DBExec($c, "select * from clartable as c where c.contestnumber=$contest and " .
- "c.clarsitenumber=$site and c.clarnumber=$number for update", "DBClarDelete(get clar for update)");
- $n = DBnlines($r);
- if ($n != 1) {
- DBExec($c, "rollback work", "DBClarDelete(rollback)");
- LogLevel("Unable to delete a clar. " .
- "(clar=$number, site=$site, contest=$contest)",1);
- return false;
- }
+function DBClarDelete($number,$site,$contest,$user,$usersite,$c=null) {
+ $cw=false;
+ if($c == null) {
+ $c = DBConnect();
+ DBExec($c, "begin work", "DBClarDelete(transaction)");
+ $cw = true;
+ }
+ $r = DBExec($c, "select * from clartable as c where c.contestnumber=$contest and " .
+ "c.clarsitenumber=$site and c.clarnumber=$number for update", "DBClarDelete(get clar for update)");
+ $n = DBnlines($r);
+ if ($n != 1) {
+ if($cw) DBExec($c, "rollback work", "DBClarDelete(rollback)");
+ LOGError("Unable to delete a clar. " .
+ "(clar=$number, site=$site, contest=$contest)");
+ return false;
+ }
- DBExec($c, "update clartable set clarstatus='deleted', clarjudge=$user, clarjudgesite=$usersite, updatetime=" .
- time(). " where contestnumber=$contest and clarnumber=$number and clarsitenumber=$site",
- "DBClarDelete(update clar)");
-
- DBExec($c, "commit work", "DBClarDelete(commit)");
- LOGLevel("Clarification deleted (clar=$number, site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
- return true;
+ DBExec($c, "update clartable set clarstatus='deleted', clarjudge=$user, clarjudgesite=$usersite, updatetime=" .
+ time(). " where contestnumber=$contest and clarnumber=$number and clarsitenumber=$site",
+ "DBClarDelete(update clar)");
+
+ if ($cw) DBExec($c, "commit work", "DBClarDelete(commit)");
+ LOGInfo("Clarification deleted (clar=$number, site=$site, contest=$contest, user=$user(site=$usersite)).");
+ return true;
}
-function DBNewClar($param,$c=null) {
+function DBNewClar($param,$c=null,$allowupdate=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['clarsitenumber']) && !isset($param['site'])) $param['site']=$param['clarsitenumber'];
@@ -308,9 +340,13 @@ function DBNewClar($param,$c=null) {
$r = DBExec ($c, $sql . " for update", "DBNewClar(get clar for update)");
$n = DBnlines($r);
if ($n > 0) {
- $insert=false;
- $lr = DBRow($r,0);
- $t = $lr['updatetime'];
+ if(!$allowupdate) {
+ if($cw) DBExec($c, "rollback work", "DBNewClar(rollback-allowupdate)");
+ return false;
+ }
+ $insert=false;
+ $lr = DBRow($r,0);
+ $t = $lr['updatetime'];
}
$clarinc = $clarnumber - 1;
}
@@ -478,7 +514,7 @@ function DBOpenClarsSNS($contest,$site,$st,$order='clar') {
"from clartable as c, problemtable as p " .
"where c.contestnumber=$contest and p.contestnumber=c.contestnumber and " .
"c.clarproblem=p.problemnumber";
- if ($site != "x") {
+ if (strpos($site,"x")===false) {
$str = explode(",", $site);
$sql .= " and (c.clarstatus='answeredall'";
for ($i=0;$i<count($str);$i++) {
diff --git a/src/fcontest.php b/src/fcontest.php
index f8f2cff..e61631b 100644
--- a/src/fcontest.php
+++ b/src/fcontest.php
@@ -125,6 +125,10 @@ CREATE TABLE \"sitetimetable\" (
$r = DBexec($c, "CREATE INDEX \"sitetimesite_index\" ON \"sitetimetable\" USING btree ".
"(\"contestnumber\" int4_ops, \"sitenumber\" int4_ops)", "DBCreateSiteTimeTable(create site_index)");
}
+// begin; update answertable set updatetime=EXTRACT(EPOCH FROM now());
+// begin; update langtable set updatetime=EXTRACT(EPOCH FROM now()); select * from langtable;
+// begin; update problemtable set updatetime=EXTRACT(EPOCH FROM now()); select * from problemtable;
+
function DBDropUserTable() {
$c = DBConnect();
$r = DBExec($c, "drop table \"usertable\"", "DBDropUserTable(drop table)");
@@ -298,8 +302,8 @@ function cleanuserdesc($a) {
$inst = explode('[',$inst[1]);
if(isset($inst[1])) {
$inst2 = explode(',',trim($inst[1]));
- $a['userflag'] = $inst2[0];
- if(isset($inst2[1])) $a['usersitename']=trim($inst2[1]);
+ $a['userflag'] = strtolower($inst2[0]);
+ if(isset($inst2[1])) $a['usersitename']=strtoupper(trim($inst2[1]));
}
} else {
$a['userdesc']=trim($inst[1]);
@@ -315,14 +319,26 @@ function DBDeleteUser($contest, $site, $user) {
DBExec($c, "begin work");
DBExec($c, "lock table usertable");
$sql = "select * from usertable where usernumber=$user and usersitenumber=$site and " .
- "contestnumber=$contest";
- $a = DBGetRow ($sql, 0);
+ "contestnumber=$contest for update";
+ $a = DBGetRow ($sql, 0, $c);
if ($a != null) {
- $sql = "delete from usertable where usernumber=$user and usersitenumber=$site and " .
+ $sql = "update usertable set userenabled='f', userlastlogin=NULL, usersessionextra='', usersession='', updatetime=".time(). " where usernumber=$user and usersitenumber=$site and " .
"contestnumber=$contest";
+ // $sql = "delete from usertable where usernumber=$user and usersitenumber=$site and " .
+ // "contestnumber=$contest";
DBExec ($c, $sql);
+ $r = DBExec($c,"select runnumber as number, runsitenumber as site from runtable where contestnumber=$contest and usernumber=$user and runsitenumber=$site for update");
+ $n = DBnlines($r);
+ for ($i=0;$i<$n;$i++) {
+ $a = DBRow($r,$i);
+ if(DBRunDelete($a["number"],$a["site"],$contest,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c) === false) {
+ DBExec($c, "rollback work");
+ LOGLevel("User $user (site=$site,contest=$contest) could not be removed (run delete error).", 1);
+ return false;
+ }
+ }
DBExec($c, "commit work");
- LOGLevel("User $user (site=$site,contest=$contest) removed.", 1);
+ LOGLevel("User $user (site=$site,contest=$contest) marked as inactive.", 1);
return true;
} else {
DBExec($c, "rollback work");
@@ -490,11 +506,11 @@ function DBSiteDeleteAllClars ($contest, $site, $user, $usersite, $c=null) {
DBExec($c, "lock table sitetable");
DBExec($c, "lock table clartable");
DBExec($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
- $r = DBExec($c, "select * from clartable as c where c.contestnumber=$contest and " .
- "c.clarsitenumber=$site for update");
- DBExec($c, "delete from clartable where contestnumber=$contest and clarsitenumber=$site");
+ $r = DBExec($c, "select * from clartable as c where c.contestnumber=$contest " .
+ " and (c.clarsitenumber=$site or $site < 0) for update");
+ DBExec($c, "delete from clartable where contestnumber=$contest and (clarsitenumber=$site or $site < 0)");
DBExec($c, "update sitetable set sitenextclar=0, updatetime=".time()." " .
- "where contestnumber=$contest and sitenumber=$site");
+ "where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Clarifications deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -512,10 +528,10 @@ function DBSiteDeleteAllTasks ($contest, $site, $user, $usersite,$c=null) {
DBExec($c, "lock table tasktable");
DBExec($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
$r = DBExec($c, "select * from tasktable as t where t.contestnumber=$contest and " .
- "t.sitenumber=$site for update");
- DBExec($c, "delete from tasktable where contestnumber=$contest and sitenumber=$site");
+ "(t.sitenumber=$site or $site < 0) for update");
+ DBExec($c, "delete from tasktable where contestnumber=$contest and (sitenumber=$site or $site < 0)");
DBExec($c, "update sitetable set sitenexttask=0, updatetime=".time()." " .
- "where contestnumber=$contest and sitenumber=$site");
+ "where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Tasks deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -530,13 +546,13 @@ function DBSiteDeleteAllBkps ($contest, $site, $user, $usersite,$c=null) {
DBExec($c, "begin work");
}
DBExec($c, "lock table bkptable");
- $r = DBExec($c, "select bkpdata from bkptable where contestnumber=$contest and sitenumber=$site and bkpstatus='active'");
+ $r = DBExec($c, "select bkpdata from bkptable where contestnumber=$contest and (sitenumber=$site or $site < 0) and bkpstatus='active'");
$n = DBnlines($r);
for ($i=0;$i<$n;$i++) {
$a = DBRow($r,$i);
DB_lo_unlink($c,$a["bkpdata"]);
}
- DBExec($c, "delete from bkptable where contestnumber=$contest and sitenumber=$site");
+ DBExec($c, "delete from bkptable where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Bkps deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -552,13 +568,13 @@ function DBSiteDeleteAllRuns ($contest, $site, $user, $usersite,$c=null) {
}
DBExec($c, "lock table sitetable");
DBExec($c, "lock table runtable");
- DBExec($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
+ DBExec($c, "select * from sitetable where contestnumber=$contest and (sitenumber=$site or $site < 0) for update");
$sql = "select * from runtable as r where r.contestnumber=$contest and " .
"r.runsitenumber=$site";
$r = DBExec ($c, $sql . " for update");
- DBExec($c, "delete from runtable where contestnumber=$contest and runsitenumber=$site");
+ DBExec($c, "delete from runtable where contestnumber=$contest and (runsitenumber=$site or $site < 0)");
DBExec($c, "update sitetable set sitenextrun=0, updatetime=".time()." " .
- "where contestnumber=$contest and sitenumber=$site");
+ "where contestnumber=$contest and (sitenumber=$site or $site < 0)");
if($cw) {
DBExec($c, "commit work");
LOGLevel("All Runs deleted (site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
@@ -685,12 +701,12 @@ function DBUpdateSite ($param,$c=null) {
$ret=1;
if($updatetime > $a['updatetime']) {
$ret=2;
- if($sitenextrun==0)
- DBSiteDeleteAllRuns($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
- if($sitenextclar==0)
- DBSiteDeleteAllClars($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
- if($sitenexttask==0)
- DBSiteDeleteAllTasks($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
+ // if($sitenextrun==0)
+ // DBSiteDeleteAllRuns($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
+ //if($sitenextclar==0)
+ // DBSiteDeleteAllClars($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
+ //if($sitenexttask==0)
+ // DBSiteDeleteAllTasks($contestnumber,$sitenumber,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c);
$sql = "update sitetable set sitename='$sitename', ";
if ($sitepermitlogins!="") $sql .= "sitepermitlogins='$sitepermitlogins', ";
@@ -1179,11 +1195,12 @@ function DBUserUpdate($contest, $site, $user, $username, $userfull, $userdesc, $
else $temp = $a["userpassword"];
$lentmp = strlen($temp);
$temp = bighexsub($passn, $temp);
- if($lentmp > strlen($temp))
- $newpass = '0' . $temp;
- else
- $newpass = substr($temp, strlen($temp)-$lentmp);
-
+ if($lentmp > strlen($temp)) {
+ $newpass = '0' . $temp;
+ while(strlen($newpass) < $lentmp) $newpass = '0' . $newpass;
+ } else {
+ $newpass = substr($temp, strlen($temp)-$lentmp);
+ }
$c = DBConnect();
DBExec($c, "begin work");
DBExec($c, "lock table usertable");
@@ -1291,11 +1308,12 @@ function DBNewUser($param, $c=null) {
$r = DBExec($c, "select * from sitetable where sitenumber=$site and contestnumber=$contest", "DBNewUser(get site)");
$n = DBnlines ($r);
if($n == 0) {
- DBExec ($c, "rollback work","DBNewUser(no-site)");
- MSGError("DBNewUser param error: site $site does not exist");
- return false;
+ if($cw)
+ DBExec ($c, "rollback work","DBNewUser(no-site)");
+ MSGError("DBNewUser param error: site $site does not exist");
+ return false;
}
- if($pass != myhash("") && $type != "admin" && $changepass != "t") $pass='!'.$pass;
+ if($pass != myhash("") && $type != "admin" && $changepass != "t" && substr($pass,0,1) != "!") $pass='!'.$pass;
$r = DBExec($c, "select * from usertable where username='$username' and usernumber!=$user and ".
"usersitenumber=$site and contestnumber=$contest", "DBNewUser(get user)");
$n = DBnlines ($r);
@@ -1307,11 +1325,12 @@ function DBNewUser($param, $c=null) {
if ($a == null) {
$ret=2;
$sql = "select * from sitetable where sitenumber=$site and contestnumber=$contest";
- $aa = DBGetRow ($sql, 0);
+ $aa = DBGetRow ($sql, 0, $c);
if($aa==null) {
+ if($cw)
DBExec ($c, "rollback work");
- MSGError("Site $site does not exist");
- return false;
+ MSGError("Site $site does not exist");
+ return false;
}
$sql = "insert into usertable (contestnumber, usersitenumber, usernumber, username, usericpcid, userfullname, " .
"userdesc, usertype, userenabled, usermultilogin, userpassword, userpermitip) values " .
@@ -1343,11 +1362,13 @@ function DBNewUser($param, $c=null) {
}
}
} else {
- DBExec ($c, "rollback work");
- LOGLevel ("Update problem for user $user (site=$site,contest=$contest) (maybe username already in use).",1);
- MSGError ("Update problem for user $user, site $site (maybe username already in use).");
- return false;
+ if($cw)
+ DBExec ($c, "rollback work");
+ LOGLevel ("Update problem for user $user (site=$site,contest=$contest) (maybe username already in use).",1);
+ MSGError ("Update problem for user $user, site $site (maybe username already in use).");
+ return false;
}
+ if($cw) DBExec($c, "commit work");
return $ret;
}
diff --git a/src/fextdata.php b/src/fextdata.php
index 8dfb134..070031a 100644
--- a/src/fextdata.php
+++ b/src/fextdata.php
@@ -15,7 +15,6 @@
// 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 24/oct/2017 by cassio@ime.usp.br
function makeurlhttps($siteurl) {
if(substr($siteurl,0,7) == 'http://')
@@ -24,10 +23,10 @@ function makeurlhttps($siteurl) {
$siteurl = 'https://' . $siteurl;
if(substr($siteurl,strlen($siteurl)-1,1) != '/')
$siteurl .= '/';
- return $siterul;
+ return $siteurl;
}
-function scoretransfer($putname, $localsite, $timeo=5) {
+function scoretransfer($putname, $localsite, $timeo=60) {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
$logstr='';
@@ -66,8 +65,10 @@ function scoretransfer($putname, $localsite, $timeo=5) {
$tmp = explode(' ',$ct['contestmainsiteurl']);
if(count($tmp) >= 3) {
$remotesite[count($remotesite)] = $ct['contestmainsiteurl'];
- }
- }
+ } else $logstr .= "Main site URL is invalid\n";
+ } else $logstr .= "Main site URL not defined\n";
+ } else {
+ $logstr .= "Error to load contest data\n";
}
for($i = 0; $i < count($remotesite); $i++) {
@@ -81,7 +82,9 @@ function scoretransfer($putname, $localsite, $timeo=5) {
// LOGError("url=" .$siteurl . "index.php?getsessionid=1");
$opts = array();
$opts['http']['timeout'] = $timeo;
- $context = stream_context_create($opts);
+ $opts['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $opts['https'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $context = stream_context_create($opts);
if(($sess = @file_get_contents($siteurl . "index.php?getsessionid=1", 0, $context))===false) {
LOGError("scoretransfer: timeout at get session id for $siteurl");
$logstr .= "timeout at get-session-id for $siteurl\n";
@@ -95,14 +98,17 @@ function scoretransfer($putname, $localsite, $timeo=5) {
'http' => array(
'method' => 'GET',
'request_fulluri' => true,
- 'header' => 'Cookie: PHPSESSID=' . $sess
+ 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\n"
)
);
if($bocaproxy != "")
$opts['http']['proxy'] = $bocaproxy;
if($bocaproxypass != "")
- $opts['http']['header'] .= "\r\nProxy-Authorization: Basic " . $bocaproxypass;
+ $opts['http']['header'] .= "Proxy-Authorization: Basic " . $bocaproxypass . "\r\n";
+ $opts['http']['header'] .= "Connection: close\r\n";
$opts['http']['timeout'] = $timeo;
+ $opts['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $opts['https'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
$context = stream_context_create($opts);
try {
$ok = @file_get_contents($siteurl . "index.php?name=${user}&password=${res}&action=transfer", 0, $context);
@@ -138,7 +144,7 @@ function scoretransfer($putname, $localsite, $timeo=5) {
@rename($file, $privatedir . $ds . 'remotescores' . $ds . $bn);
}
$zip->close();
- LOGError("scoretransfer: download OK");
+ LOGInfo("scoretransfer: download OK");
$logstr .= "download OK from $siteurl\n";
} else {
$logstr .= "reading failed from $siteurl (zip open error)\n";
@@ -164,15 +170,18 @@ function scoretransfer($putname, $localsite, $timeo=5) {
'http' => array(
'method' => 'POST',
'request_fulluri' => true,
- 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\nContent-Type: application/x-www-form-urlencoded",
+ 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\nContent-Type: application/x-www-form-urlencoded\r\n",
'content' => $data_url
)
);
if($bocaproxy != "")
$opts['http']['proxy'] = $bocaproxy;
if($bocaproxypass != "")
- $opts['http']['header'] .= "\r\nProxy-Authorization: Basic " . $bocaproxypass;
+ $opts['http']['header'] .= "Proxy-Authorization: Basic " . $bocaproxypass . "\r\n";
+ $opts['http']['header'] .= "Connection: close\r\n";
$opts['http']['timeout'] = $timeo;
+ $opts['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $opts['https'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
$context = stream_context_create($opts);
try {
$s = @file_get_contents($siteurl . "site/putfile.php", 0, $context);
@@ -184,7 +193,7 @@ function scoretransfer($putname, $localsite, $timeo=5) {
$logstr .= "timeout at full upload to $siteurl\n";
} else {
if(strpos($s,'SCORE UPLOADED OK') !== false) {
- LOGError("scoretransfer: upload OK");
+ LOGInfo("scoretransfer: upload OK");
$logstr .= "upload of score to $siteurl OK\n";
} else {
LOGError("scoretransfer: upload failed (" . $s . ")");
@@ -200,15 +209,17 @@ function scoretransfer($putname, $localsite, $timeo=5) {
'http' => array(
'method' => 'POST',
'request_fulluri' => true,
- 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\nContent-Type: application/x-www-form-urlencoded",
+ 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\nContent-Type: application/x-www-form-urlencoded\r\n",
'content' => $data_url
)
);
if($bocaproxy != "")
$opts['http']['proxy'] = $bocaproxy;
if($bocaproxypass != "")
- $opts['http']['header'] .= "\r\nProxy-Authorization: Basic " . $bocaproxypass;
+ $opts['http']['header'] .= "Proxy-Authorization: Basic " . $bocaproxypass . "\r\n";
$opts['http']['timeout'] = $timeo;
+ $opts['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $opts['https'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
$context = stream_context_create($opts);
try {
$s = @file_get_contents($siteurl . "site/putfilesuper.php", 0, $context);
@@ -221,12 +232,12 @@ function scoretransfer($putname, $localsite, $timeo=5) {
continue;
} else {
if(strpos($s,'SCORE UPLOADED OK') !== false) {
- LOGError("scoretransfer: upload full OK");
- $logstr .= 'upload of full score to $siteurl OK\n';
+ LOGInfo("scoretransfer: upload full OK");
+ $logstr .= "upload of full score to $siteurl OK\n";
}
else {
LOGError("scoretransfer: upload full failed (" . $s . ")");
- $logstr .= 'upload of full score to $siteurl failed (' . $s . ')';
+ $logstr .= "upload of full score to $siteurl failed (" . $s . ")\n";
}
}
}
@@ -235,10 +246,11 @@ function scoretransfer($putname, $localsite, $timeo=5) {
}
-function getMainXML($contest,$timeo=5,$upd=false) {
+function getMainXML($contest,$timeo=60,$upd=false) {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
-
+ $logstr = '';
+ // $logstr .= "A: " . now() . "\n"
if(is_readable('/etc/boca.conf')) {
$pif=parse_ini_file('/etc/boca.conf');
$bocaproxy = @trim($pif['proxy']);
@@ -252,28 +264,33 @@ function getMainXML($contest,$timeo=5,$upd=false) {
$bocaproxy = "";
$bocaproxypass = "";
}
-
+ // $logstr .= "AA: " . now() . "\n"
$privatedir = $_SESSION['locr'] . $ds . "private";
$c = DBConnect();
- if ($c==null) return false;
+ if ($c==null) {
+ $logstr .= "local database connection problem\n";
+ return $logstr;
+ }
$r = DBExec($c, "select * from contesttable where contestnumber=$contest");
if (DBnLines($r)==0) {
- echo "Unable to find the contest $contest in the database.\n";
+ $logstr .= "Unable to find the contest $contest in the database.\n";
LOGError("Unable to find the contest $contest in the database.");
- return false;
+ return $logstr;
}
$ct = DBRow($r,0);
$localsite = $ct["contestlocalsite"];
$mainsite = $ct["contestmainsite"];
if(trim($ct['contestmainsiteurl']) == '') {
- return false;
+ $logstr .= "Main site URL not defined\n";
+ return $logstr;
}
$sitedata = explode(' ',$ct['contestmainsiteurl']);
if(count($sitedata) < 3) {
LOGError("getMainXML: invalid mainsiteurl entry");
- return false;
+ $logstr .= "Main site URL is invalid\n";
+ return $logstr;
}
if(count($sitedata) == 3 || $upd) {
$updatetime=0;
@@ -286,17 +303,19 @@ function getMainXML($contest,$timeo=5,$upd=false) {
// LOGError("url=" .$siteurl . "index.php?getsessionid=1");
$opts = array();
$opts['http']['timeout'] = $timeo;
+ $opts['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $opts['https'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
$context = stream_context_create($opts);
- echo "Connecting to ". $siteurl . "\n";
+ $logstr .= "Connecting to ". $siteurl . " (updatetime=" . $updatetime . ")\n";
try {
$sess = @file_get_contents($siteurl . "index.php?getsessionid=1", 0, $context);
} catch(Exception $e) {
$sess=false;
}
if($sess===false) {
- echo "timeout at connection\n";
+ $logstr .= "timeout at connection\n";
LOGError("getMainXML: timeout at get session id for $siteurl");
- return false;
+ return $logstr;
}
$user = trim($sitedata[1]);
$res = myhash( myhash (trim($sitedata[2])) . $sess);
@@ -304,31 +323,39 @@ function getMainXML($contest,$timeo=5,$upd=false) {
'http' => array(
'method' => 'GET',
'request_fulluri' => true,
- 'header' => 'Cookie: PHPSESSID=' . $sess
+ 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\n"
)
);
if($bocaproxy != "")
$opts['http']['proxy'] = $bocaproxy;
if($bocaproxypass != "")
- $opts['http']['header'] .= "\r\nProxy-Authorization: Basic " . $bocaproxypass;
+ $opts['http']['header'] .= "Proxy-Authorization: Basic " . $bocaproxypass . "\r\n";
+ $opts['http']['header'] .= "Connection: close\r\n";
$opts['http']['timeout'] = $timeo;
+ $opts['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $opts['https'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
$context = stream_context_create($opts);
- echo "Authorizing\n";
+ $logstr .= "Authorizing\n";
try {
$ok = @file_get_contents($siteurl . "index.php?name=${user}&password=${res}&action=transfer", 0, $context);
} catch(Exception $e) {
$ok=false;
}
if($ok===false) {
- echo "timeout at authorization\n";
+ $logstr .= "timeout at authorization\n";
LOGError("getMainXML: timeout at login for $siteurl");
- return false;
+ return $logstr;
}
+ // $logstr .= "AAA: " . now() . "\n"
$ti = mytime();
// LOGError("ok=" . $ok);
if(substr($ok,strlen($ok)-strlen('TRANSFER OK'),strlen('TRANSFER OK')) == 'TRANSFER OK') {
- echo "Generating local data\n";
- $data = encryptData(generateSiteXML($contest, $localsite, $updatetime-30),myhash(trim($sitedata[2])));
+ $logstr .= "Generating local data for site [$localsite] at time [$updatetime]\n";
+ $data = generateSiteXML($contest, $localsite, $updatetime-30, $localsite);
+ $logstr .= $data[1];
+ // $logstr .= $s;
+ $data = encryptData($data[0], myhash(trim($sitedata[2])),false);
+ // $logstr .= "AB: " . now() . "\n"
$data_url = http_build_query(array('xml' => $data, 'updatetime' => ($updatetime-30)
));
@@ -337,64 +364,75 @@ function getMainXML($contest,$timeo=5,$upd=false) {
'http' => array(
'method' => 'POST',
'request_fulluri' => true,
- 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\nContent-Type: application/x-www-form-urlencoded",
+ 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\nContent-Type: application/x-www-form-urlencoded\r\n",
'content' => $data_url
)
);
if($bocaproxy != "")
$opts['http']['proxy'] = $bocaproxy;
if($bocaproxypass != "")
- $opts['http']['header'] .= "\r\nProxy-Authorization: Basic " . $bocaproxypass;
+ $opts['http']['header'] .= "Proxy-Authorization: Basic " . $bocaproxypass . "\r\n";
+ $opts['http']['header'] .= "Connection: close\r\n";
$opts['http']['timeout'] = $timeo;
+ $opts['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
+ $opts['https'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
$context = stream_context_create($opts);
- echo "Transferring data\n";
+ $logstr .= "Transferring data to main server\n";
try {
$s = @file_get_contents($siteurl . "site/getsite.php", 0, $context);
} catch(Exception $e) {
$s=false;
}
+ // $logstr .= "ABB: " . now() . "\n"
if($s===false) {
- echo "timeout at transferring\n";
+ $logstr .= "timeout at transferring\n";
LOGError("getMainXML: timeout at transfer for $siteurl");
- return false;
+ return $logstr;
}
- $chstr = "<!-- <OK> -->\n";
+ $chstr = "<!-- <OK> --><!-- ";
if(strpos($s,$chstr) !== false) {
- echo "Transfer succeeded\n";
+ $logstr .= "Transfer succeeded\n";
LOGInfo("xmltransfer: OK");
} else {
- echo "Transfer error (" . $s . ")\n";
+ $logstr .= "Transfer error (" . $s . ")\n";
LOGError("xmltransfer: failed (" . $s . ")");
+ $chstr = "<!-- <NOTOK> --><!-- ";
}
- echo "Processing received data\n";
+ $logstr .= "Processing received data from main server\n";
$s = substr($s, strpos($s, $chstr) + strlen($chstr));
+ $s = substr($s, 0, strpos($s, " -->"));
// LOGError("string: " . substr($s,0,50));
- $s = decryptData($s,myhash (trim($sitedata[2])),'xml from main not ok');
+ $s = decryptData($s,myhash(trim($sitedata[2])),'xml from main not ok');
+ // $logstr .= "ABBB: " . now() . "\n"
if(strtoupper(substr($s,0,5)) != "<XML>") {
- echo "Data corrupted\n";
- return false;
+ $logstr .= "Data corrupted\n";
+ return $logstr;
}
- echo "Importing data to local server\n";
- if(importFromXML($s, $contest, $localsite, false, 1+$ct['updatetime'])) {
+ $logstr .= "Importing data to local server\n";
+ $resp = importFromXML($s, $contest, $localsite, false, 1+$ct['updatetime'], $mainsite);
+ // $logstr .= "AC: " . now() . "\n"
+ $logstr .= $resp[1];
+ if($resp[0]) {
$str = $sitedata[0] . ' ' . $sitedata[1] . ' ' . $sitedata[2] . ' ' . $ti;
$ti = 2+$ct['updatetime'];
$param = array('contestnumber' => $contest, 'mainsiteurl' => $str, 'updatetime' => $ti);
DBUpdateContest ($param, null);
- return true;
+ return $logstr;
} else {
- echo "Importing error\n";
+ $logstr .= "Importing error\n";
LOGError("error importing xml");
}
} else {
- echo "Transfer error (" . $ok . ")\n";
- LOGError("xmltransfer: failed (" . $ok . ")");
+ $logstr .= "Transfer init connection error (" . $ok . ")\n";
+ LOGError("xmltransfer: init connection failed (" . $ok . ")");
}
- return false;
+ return $logstr;
}
-function importFromXML($ar,$contest,$site,$tomain=false,$uptime=0) {
+function importFromXML($ar,$contest,$site,$tomain=false,$uptime=0,$mainsite=-1) {
LOGInfo("importFromXML: contest $contest site $site tomain $tomain");
+ $logstr = '';
if($tomain) $serv='Main'; else $serv='Local';
$data = implode("",explode("\n",$ar));
$parser = xml_parser_create('');
@@ -405,15 +443,15 @@ function importFromXML($ar,$contest,$site,$tomain=false,$uptime=0) {
// print_r($tags);
// print_r($values);
$conn = DBConnect();
- if ($conn==null) return false;
- DBExec($conn,"begin work","importFromXML(begin)");
+ if ($conn==null) return array(false, $logstr);
+ //DBExec($conn,"begin work","importFromXML(begin)");
// DBExec($conn,"lock","importFromXML(lock)");
$r = DBExec($conn, "select * from contesttable where contestnumber=$contest");
if (DBnLines($r)==0) {
- echo "$serv - error finding contest $contest \n";
+ $logstr .= "$serv - error finding contest $contest \n";
LOGError("importFromXML: Unable to find the contest $contest in the database.");
// DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
$ct = DBRow($r,0);
@@ -446,105 +484,107 @@ function importFromXML($ar,$contest,$site,$tomain=false,$uptime=0) {
if(count($param) < 2) continue;
unset($param['number']);
- if(!$tomain && $table == "contesttable") {
+ if($table == "contesttable") {
+ if($tomain) continue;
if($uptime > 0) $param['updatetime']=$uptime;
if(($ret=DBUpdateContest ($param, $conn))) {
if($ret==2) {
- echo "$serv - Contest " . $param["contestnumber"] . " updated\n";
+ $logstr .= "$serv - Contest " . $param["contestnumber"] . " updated\n";
LOGInfo("importFromXML: Contest " . $param["contestnumber"] . " updated");
}
}
else {
- echo "$serv - error to update $table ". $param["contestnumber"] . "\n";
+ $logstr .= "$serv - error to update $table ". $param["contestnumber"] . "\n";
LOGError("importFromXML: error to update $table ". $param["contestnumber"]);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
+ continue;
}
// LOGInfo("importFromXML: $key params " .print_r( $param,true));
- if(!$tomain && $table == "answertable") {
+ if($table == "answertable") {
+ if($tomain) continue;
if(($ret=DBNewAnswer ($contest, $param, $conn))) {
if($ret==2) {
- echo "$serv - Answer " . $param["answernumber"] . " updated\n";
+ $logstr .= "$serv - Answer " . $param["answernumber"] . " updated\n";
LOGInfo("importFromXML: Answer " . $param["answernumber"] . " updated");
}
}
else {
- echo "$serv - error to update $table ". $param["answernumber"] . "\n";
+ $logstr .= "$serv - error to update $table ". $param["answernumber"] . "\n";
LOGError("importFromXML: error to update $table ". $param["answernumber"]);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
+ continue;
}
- if(!$tomain && $table == "langtable") {
+ if($table == "langtable") {
+ if($tomain) continue;
if(($ret=DBNewLanguage ($contest,$param, $conn))) {
if($ret==2) {
- echo "$serv - Language " . $param['langnumber'] ." updated\n";
+ $logstr .= "$serv - Language " . $param['langnumber'] ." updated\n";
LOGInfo("importFromXML: Language " . $param['langnumber'] ." updated");
}
}
else {
- echo "$serv - error to update $table ". $param['langnumber'] . "\n";
+ $logstr .= "$serv - error to update $table ". $param['langnumber'] . "\n";
LOGError("importFromXML: error to update $table ". $param['langnumber']);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
+ continue;
}
- if(!$tomain && $table == "problemtable") {
+ if($table == "problemtable") {
+ if($tomain) continue;
if(($ret=DBNewProblem ($contest,$param, $conn))) {
if($ret==2)
- echo "$serv - Problem " . $param['problemnumber'] ." updated\n";
+ $logstr .= "$serv - Problem " . $param['problemnumber'] ." updated\n";
LOGInfo("importFromXML: Problem " . $param['problemnumber'] ." updated");
}
else {
- echo "$serv - error to update $table ". $param['problemnumber'] . "\n";
+ $logstr .= "$serv - error to update $table ". $param['problemnumber'] . "\n";
LOGError("importFromXML: error to update $table " . $param['problemnumber']);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
+ continue;
}
if(isset($param['usersitenumber']) && !isset($param['sitenumber'])) $param['sitenumber']=$param['usersitenumber'];
if(isset($param['clarsitenumber']) && !isset($param['sitenumber'])) $param['sitenumber']=$param['clarsitenumber'];
if(isset($param['runsitenumber']) && !isset($param['sitenumber'])) $param['sitenumber']=$param['runsitenumber'];
- if(!isset($param['sitenumber']) || $param['sitenumber'] != $site) {
- echo "$serv - site mismatch $site " . $param['sitenumber'] . "\n";
- LOGError("importFromXML: site mismatch $site " . $param['sitenumber']);
+ if(!isset($param['sitenumber']) || ($param['sitenumber'] != $site && ($param['sitenumber'] != $mainsite || $tomain))) {
+ $logstr .= "$serv - site mismatch should be [$site] and is [" . $param['sitenumber'] . "]\n";
+ LOGError("importFromXML: site mismatch should be [$site] and is [" . $param['sitenumber'] . "]");
continue;
}
if($tomain && $table == "sitetable") {
- if(!DBNewSite($contest, $conn, $param)) {
- echo "$serv - error to update $table \n";
- LOGError("importFromXML: error to update $table");
- if($conn != null)
- DBExec($conn,"rollback work");
- return false;
- }
- if(($ret=DBUpdateSite($param, $conn))) {
+ DBNewSite($contest, $conn, $param);
+ if(($ret=DBUpdateSite($param, $conn)) !== false) {
if($ret==2) {
- echo "$serv - Site " . $param["sitenumber"] . " updated\n";
+ $logstr .= "$serv - Site " . $param["sitenumber"] . " updated\n";
LOGInfo("importFromXML: Site " . $param["sitenumber"] . " updated");
}
} else {
- echo "$serv - error to update $table ". $param["sitenumber"] . "\n";
+ $logstr .= "$serv - error to update $table ". $param["sitenumber"] . "\n";
LOGError("importFromXML: error to update $table ". $param["sitenumber"]);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
}
if($tomain && $table == "sitetimetable") {
if(!DBUpdateSiteTime($contest, $param, $firsttimetime, $conn)) {
- echo "$serv - error to update $table \n";
+ $logstr .= "$serv - error to update $table \n";
LOGError("importFromXML: error to update $table");
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
} else {
LOGInfo("importFromXML: SiteTime updated");
}
@@ -553,60 +593,60 @@ function importFromXML($ar,$contest,$site,$tomain=false,$uptime=0) {
if($table == "usertable") {
if(($ret=DBNewUser($param, $conn))) {
if($ret==2) {
- echo "$serv - User " . $param["usernumber"]."/".$param['sitenumber']. " updated\n";
+ $logstr .= "$serv - User " . $param["usernumber"]."/".$param['sitenumber']. " updated\n";
LOGInfo("importFromXML: User " . $param["usernumber"]."/".$param['sitenumber']. " updated");
}
} else {
- echo "$serv - error to update $table ". $param["usernumber"]."/".$param['sitenumber'] . "\n";
+ $logstr .= "$serv - error to update $table ". $param["usernumber"]."/".$param['sitenumber'] . "\n";
LOGError("importFromXML: error to update $table ". $param["usernumber"]."/".$param['sitenumber']);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
}
if($table == "tasktable") {
if(($ret=DBNewTask ($param, $conn))) {
if($ret==2) {
- echo "$serv - Task " . $param['tasknumber']."/".$param['sitenumber']." updated\n";
+ $logstr .= "$serv - Task " . $param['tasknumber']."/".$param['sitenumber']." updated\n";
LOGInfo("importFromXML: Task " . $param['tasknumber']."/".$param['sitenumber']." updated");
}
}
else {
- echo "$serv - error to update $table " . $param['tasknumber']."/".$param['sitenumber'] . "\n";
+ $logstr .= "$serv - error to update $table " . $param['tasknumber']."/".$param['sitenumber'] . "\n";
LOGError("importFromXML: error to update $table " . $param['tasknumber']."/".$param['sitenumber']);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
}
if($table == "clartable") {
if(($ret=DBNewClar ($param, $conn))) {
if($ret==2) {
- echo "$serv - Clarification " . $param['clarnumber']."/".$param['sitenumber'] ." updated\n";
+ $logstr .= "$serv - Clarification " . $param['clarnumber']."/".$param['sitenumber'] ." updated\n";
LOGInfo("importFromXML: Clarification " . $param['clarnumber']."/".$param['sitenumber'] ." updated");
}
}
else {
- echo "$serv - error to update $table ". $param['clarnumber']."/".$param['sitenumber'] . "\n";
+ $logstr .= "$serv - error to update $table ". $param['clarnumber']."/".$param['sitenumber'] . "\n";
LOGError("importFromXML: error to update $table ". $param['clarnumber']."/".$param['sitenumber']);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
}
if($table == "runtable") {
- if(($ret=DBNewRun ($param, $conn))) {
+ if(($ret=DBNewRun ($param, $conn, $tomain))) {
if($ret==2) {
- echo "$serv - Run " . $param['runnumber'] ."/".$param['sitenumber']." updated\n";
+ $logstr .= "$serv - Run " . $param['runnumber'] ."/".$param['sitenumber']." updated\n";
LOGInfo("importFromXML: Run " . $param['runnumber'] ."/".$param['sitenumber']." updated");
}
}
else {
- echo "$serv - error to update $table ". $param['runnumber'] ."/".$param['sitenumber'] . "\n";
+ $logstr .= "$serv - error to update $table ". $param['runnumber'] ."/".$param['sitenumber'] . "\n";
LOGError("importFromXML: error to update $table ". $param['runnumber'] ."/".$param['sitenumber']);
if($conn != null)
DBExec($conn,"rollback work");
- return false;
+ return array(false, $logstr);
}
}
}
@@ -615,30 +655,68 @@ function importFromXML($ar,$contest,$site,$tomain=false,$uptime=0) {
}
if($conn != null)
DBExec($conn,"commit work","importFromXML(commit)");
- return true;
+ return array(true, $logstr);
}
-function genSQLs($contest, $site, $updatetime) {
+function genSQLs($contest, $site, $updatetime, $mainsite=1) {
$sql = array();
$sql['contesttable']="select contestnumber, contestname, conteststartdate, contestduration, contestlastmileanswer," .
"contestlastmilescore, contestpenalty, contestmaxfilesize, contestmainsite, contestkeys " .
"from contesttable where contestnumber=$contest"; // and updatetime >= $updatetime";
- $sql['sitetable']="select * from sitetable where contestnumber=$contest and sitenumber=$site and updatetime >= $updatetime";
- $sql['answertable']="select * from answertable where contestnumber=$contest and fake='f' and updatetime >= $updatetime";
- $sql['langtable']="select * from langtable where contestnumber=$contest and updatetime >= $updatetime";
- $sql['problemtable']="select * from problemtable where contestnumber=$contest and fake='f' and updatetime >= $updatetime";
+ $sql['sitetable']="select " .
+ "contestnumber, " .
+ "sitenumber, " .
+ "siteip, " .
+ "sitename, " .
+ "siteactive, " .
+ "sitepermitlogins, " .
+ "sitelastmileanswer, " .
+ "sitelastmilescore, " .
+ "siteduration, " .
+ "siteautoend, " .
+ "sitejudging, " .
+ "sitetasking, " .
+ "siteglobalscore, " .
+ "sitescorelevel, " .
+ "sitemaxtask, " .
+ "sitechiefname, " .
+ "siteautojudge, " .
+ "sitemaxruntime, " .
+ "sitemaxjudgewaittime, " .
+ "updatetime " .
+ " from sitetable where contestnumber=$contest and sitenumber=$site and updatetime >= $updatetime";
+ if($site != $mainsite) {
+ $sql['answertable']="select * from answertable where contestnumber=$contest and fake='f' and updatetime >= $updatetime";
+ $sql['langtable']="select * from langtable where contestnumber=$contest and updatetime >= $updatetime";
+ $sql['problemtable']="select " .
+ "contestnumber, " .
+ "problemnumber, " .
+ "problemname, " .
+ "problemfullname, " .
+ "problembasefilename, " .
+ "probleminputfilename, " .
+ "probleminputfile, " .
+ "probleminputfilehash, " .
+ "fake, " .
+ //"problemcolorname, " .
+ //"problemcolor, " .
+ "updatetime" .
+ " from problemtable where contestnumber=$contest and fake='f' and updatetime >= $updatetime";
+ $sql['usertable']="select * from usertable where contestnumber=$contest and usersitenumber=$mainsite and updatetime >= $updatetime";
+ } else
+ $sql['usertable']="select * from usertable where contestnumber=$contest and usersitenumber=$site and updatetime >= $updatetime";
$sql['sitetimetable']="select * from sitetimetable where contestnumber=$contest and sitenumber=$site and updatetime >= $updatetime";
- $sql['usertable']="select * from usertable where contestnumber=$contest and usersitenumber=$site and updatetime >= $updatetime";
- $sql['clartable']="select * from clartable where contestnumber=$contest and clarsitenumber=$site and updatetime >= $updatetime";
+ $sql['clartable']="select * from clartable where contestnumber=$contest and (clarsitenumber=$site or clarsitenumber=$mainsite) and updatetime >= $updatetime";
$sql['runtable']="select * from runtable where contestnumber=$contest and runsitenumber=$site and updatetime >= $updatetime";
$sql['tasktable']="select * from tasktable where contestnumber=$contest and sitenumber=$site and updatetime >= $updatetime";
return $sql;
}
-function generateSiteXML($contest,$site,$updatetime) {
- $sql = genSQLs($contest, $site, $updatetime);
+function generateSiteXML($contest,$site,$updatetime, $mainsite=1) {
+ $sql = genSQLs($contest, $site, $updatetime, $mainsite);
$c = DBConnect();
$str = "<XML>\n";
+ $logstr = '';
if ($c==null) return null;
DBExec($c, "begin work");
foreach($sql as $kk => $vv) {
@@ -646,13 +724,15 @@ function generateSiteXML($contest,$site,$updatetime) {
if (!is_array($meta)) return null;
$r = DBExec ($c, $vv, "generateSiteXML($kk)");
$n = DBnLines ($r);
+ if($n > 0)
+ $logstr .= "$kk has $n records to update\n";
for($i=0; $i<$n; $i++) {
$atual = DBRow($r,$i);
$str .= "<" . $kk . ">\n";
foreach($atual as $key => $val) {
if($meta[$key]['type'] == 'oid' && $val != '') {
if (($lo = DB_lo_open ($c, $val, "r")) !== false) {
- $str .= " <" . $key . ">" . base64_encode("base64:" . base64_encode(DB_lo_read($contest,$lo))) . "</" . $key . ">\n";
+ $str .= " <" . $key . ">" . base64_encode("base64:" . base64_encode(DB_lo_read($contest,$lo,-1,$c))) . "</" . $key . ">\n";
DB_lo_close($lo);
} else {
LOGError("large object ($key,$val) not readable");
@@ -667,6 +747,6 @@ function generateSiteXML($contest,$site,$updatetime) {
$str .= "</XML>\n";
DBExec($c,"commit work","generateSiteXML(commit)");
LOGInfo("xml data generated for contest $contest site $site at time $updatetime");
- return $str;
+ return array($str,$logstr);
}
diff --git a/src/filedownload.php b/src/filedownload.php
index 92de694..6b56ca9 100644
--- a/src/filedownload.php
+++ b/src/filedownload.php
@@ -74,7 +74,7 @@ if ($_GET["oid"]>=0) {
header ("Content-Disposition: attachment; filename=" . basename($fname));
ob_end_flush();
- if (DB_lo_read_tobrowser ($_SESSION["usertable"]["contestnumber"],$lo) === false) {
+ if (DB_lo_read_tobrowser ($_SESSION["usertable"]["contestnumber"],$lo,$c) === false) {
echo "<html><head><title>Download Page</title>";
DBExec($c, "rollback work");
LOGError ("Unable to download file (" . basename($fname) . ")");
diff --git a/src/filewindow.php b/src/filewindow.php
index 594e483..64bd1ec 100644
--- a/src/filewindow.php
+++ b/src/filewindow.php
@@ -79,7 +79,7 @@ if ($_GET["oid"]>=0) {
echo $msg ."\n\n\n";
}
// echo "<pre>\n";
- if (DB_lo_read_tobrowser ($_SESSION["usertable"]["contestnumber"],$lo) === false) {
+ if (DB_lo_read_tobrowser ($_SESSION["usertable"]["contestnumber"],$lo,$c) === false) {
header ("Content-type: text/html");
echo "<html><head><title>View Page</title>";
DBExec($c, "rollback work");
diff --git a/src/fproblem.php b/src/fproblem.php
index a66f62c..c14a61b 100644
--- a/src/fproblem.php
+++ b/src/fproblem.php
@@ -457,6 +457,8 @@ function DBGetProblems($contest,$showanyway=false) {
if ($b["currenttime"] < 0 && !$showanyway)
return array();
+ if(($c = DBContestInfo($contest)) == null) return array();
+ if (time() < $c['conteststartdate'] && !$showanyway) return array();
$c = DBConnect();
$sql = "select distinct p.problemnumber as number, p.problemname as problem, " .
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)");
}
diff --git a/src/fscore.php b/src/fscore.php
index 2c57695..ec03091 100644
--- a/src/fscore.php
+++ b/src/fscore.php
@@ -265,7 +265,7 @@ function DBRecentNews($contest, $site, $verifylastmile, $minutes=3) {
"u.usernumber as usernumber, p.problemnumber as problemnumber, p.problemname, (r.rundatediffans>$ta) as fut, min(r.rundatediff) as time from " .
"runtable as r, answertable as a, problemtable as p, usertable as u where r.runanswer=a.answernumber and " .
"p.contestnumber=$contest and a.contestnumber=$contest and r.usernumber = u.usernumber and u.usertype='team' and " .
- "p.problemnumber=r.runproblem and r.contestnumber=$contest and r.runsitenumber=$site and u.userenabled='t' and " .
+ "p.problemnumber=r.runproblem and r.contestnumber=$contest and r.runsitenumber=$site and u.userenabled='t' and (not r.runstatus ~ 'deleted') and " .
"r.rundatediff>=$taa and r.rundatediff<=$tf and r.rundatediff<=$ta and u.contestnumber=$contest and u.usersitenumber=$site and " .
"((a.yes='t' and r.rundatediffans<=$ta) or (r.rundatediffans>$ta)) " .
"group by a.yes,p.problemcolor,p.problemcolorname,p.problemname,u.userfullname,u.usernumber,p.problemnumber,fut order by time", "DBRecentNews(get runs)");
diff --git a/src/ftask.php b/src/ftask.php
index c54503a..643554e 100644
--- a/src/ftask.php
+++ b/src/ftask.php
@@ -15,7 +15,6 @@
// 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 13/aug/2017 by cassio@ime.usp.br
function DBDropTaskTable() {
$c = DBConnect();
$r = DBExec($c, "drop table \"tasktable\"", "DBDropTaskTable(drop table)");
@@ -226,7 +225,7 @@ function DBOpenTasksSNS($contest,$site,$st,$order='task',$adm=false) {
"usertable as u " .
"where t.contestnumber=$contest and u.contestnumber=t.contestnumber and ".
"u.usernumber=t.usernumber and u.usersitenumber=t.sitenumber";
- if ($site != "x") {
+ if (strpos($site,"x")===false) {
$str = explode(",", $site);
$sql .= " and (t.sitenumber=-1";
for ($i=0;$i<count($str);$i++) {
diff --git a/src/globals.php b/src/globals.php
index 1d449c1..fbbecce 100755
--- a/src/globals.php
+++ b/src/globals.php
@@ -146,6 +146,7 @@ function revertupdatebocafile($dirboca, $t) {
return $ok;
}
function cleardir($dir,$cddir=true,$secure=true,$removedir=true) {
+ if(file_exists($dir)) {
if(is_dir($dir)) {
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
@@ -166,6 +167,7 @@ function cleardir($dir,$cddir=true,$secure=true,$removedir=true) {
file_put_contents($dir,str_repeat('XXXXXXXXXX',10000));
@unlink($dir);
}
+ }
}
// gen random alphanum string
@@ -318,12 +320,13 @@ function ValidSession() {
// $_SESSION["usertable"]["usersession"] != session_id()) return(FALSE);
// } else {
if($_SESSION["usertable"]["usersession"] != session_id()) return(FALSE);
- // }
- if($_SESSION["usertable"]["usermultilogin"] == 't') return(TRUE);
-
+ // }
$tmp = DBUserInfo($_SESSION["usertable"]["contestnumber"],
$_SESSION["usertable"]["usersitenumber"],
$_SESSION["usertable"]["usernumber"]);
+ if($tmp['usersession']=='') return(FALSE);
+ if($_SESSION["usertable"]["usermultilogin"] == 't') return(TRUE);
+
if ($tmp["userip"] != $gip) return(FALSE); //cassiopc: they may create a problem here too...
return(TRUE);
}
diff --git a/src/judge/runeditchief.php b/src/judge/runeditchief.php
index c538dca..04395ba 100644
--- a/src/judge/runeditchief.php
+++ b/src/judge/runeditchief.php
@@ -132,9 +132,11 @@ for ($i=0;$i<count($b);$i++) {
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 "<b>Sol:</b><a href=\"../filedownload.php?". filedownload($b[$i]["soloid"], $b[$i]["solfilename"]) . "\">";
- echo $b[$i]["solfilename"] . "</a>";
+
+ if(isset($b[$i]["soloid"])) {
+ 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>";
}
diff --git a/src/optionlower.php b/src/optionlower.php
index b3f6055..9be827b 100644
--- a/src/optionlower.php
+++ b/src/optionlower.php
@@ -21,7 +21,7 @@
// todos os usuarios
require_once("globals.php");
-if(!ValidSession()) {
+if(!ValidSession()) { // || $_SESSION["usertable"]["usertype"] == 'team') {
InvalidSession("optionlower.php");
ForceLoad("index.php");
}
@@ -32,16 +32,16 @@ if (isset($_GET["username"]) && isset($_GET["userfullname"]) && isset($_GET["use
$username = myhtmlspecialchars($_GET["username"]);
$userfullname = myhtmlspecialchars($_GET["userfullname"]);
$userdesc = myhtmlspecialchars($_GET["userdesc"]);
- $passwordo = myhtmlspecialchars($_GET["passwordo"]);
- $passwordn = myhtmlspecialchars($_GET["passwordn"]);
+ $passwordo = $_GET["passwordo"];
+ $passwordn = $_GET["passwordn"];
DBUserUpdate($_SESSION["usertable"]["contestnumber"],
- $_SESSION["usertable"]["usersitenumber"],
- $_SESSION["usertable"]["usernumber"],
- $_SESSION["usertable"]["username"], // $username, but users should not change their names
- $userfullname,
- $userdesc,
- $passwordo,
- $passwordn);
+ $_SESSION["usertable"]["usersitenumber"],
+ $_SESSION["usertable"]["usernumber"],
+ $_SESSION["usertable"]["username"], // $username, but users should not change their names
+ $userfullname,
+ $userdesc,
+ $passwordo,
+ $passwordn);
ForceLoad("option.php");
}
@@ -56,18 +56,19 @@ $a = DBUserInfo($_SESSION["usertable"]["contestnumber"],
<script language="JavaScript">
function computeHASH()
{
- var username, userdesc, userfull, passHASHo, passHASHn1, passHASHn2;
+ var username, userdesc, userfull, passHASHo, passHASHn;
if (document.form1.passwordn1.value != document.form1.passwordn2.value) return;
+ if (document.form1.passwordn1.value == document.form1.passwordo.value) return;
username = document.form1.username.value;
userdesc = document.form1.userdesc.value;
userfull = document.form1.userfull.value;
- passMDo = js_myhash(js_myhash(document.form1.passwordo.value)+'<?php echo session_id(); ?>');
- passMDn = bighexsoma(js_myhash(document.form1.passwordn2.value),js_myhash(document.form1.passwordo.value));
+ passHASHo = js_myhash(js_myhash(document.form1.passwordo.value)+'<?php echo session_id(); ?>');
+ passHASHn = bighexsoma(js_myhash(document.form1.passwordn2.value),js_myhash(document.form1.passwordo.value));
document.form1.passwordo.value = ' ';
document.form1.passwordn1.value = ' ';
document.form1.passwordn2.value = ' ';
- document.location='option.php?username='+username+'&userdesc='+userdesc+'&userfullname='+userfull+'&passwordo='+passMDo+'&passwordn='+passMDn;
+ document.location='option.php?username='+username+'&userdesc='+userdesc+'&userfullname='+userfull+'&passwordo='+passHASHo+'&passwordn='+passHASHn;
}
</script>
diff --git a/src/private/autojudging.php b/src/private/autojudging.php
index 2a8b1ed..e44aaeb 100755
--- a/src/private/autojudging.php
+++ b/src/private/autojudging.php
@@ -1,7 +1,7 @@
<?php
////////////////////////////////////////////////////////////////////////////////
//BOCA Online Contest Administrator
-// Copyright (C) 2003-2013 by BOCA Development Team (bocasystem@gmail.com)
+// Copyright (C) 2003-2017 by BOCA Development Team (bocasystem@gmail.com)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -15,7 +15,6 @@
// 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 29/aug/2017 by cassio@ime.usp.br
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
@@ -157,6 +156,8 @@ while(42) {
DBExec($c, "commit", "Autojudging(exportcommit)");
continue;
}
+ cleardir($dir . $ds . "problemdatalocal");
+ cleardir($dir . $ds . "problemdata");
if(is_readable($cache . $ds . $run["inputoid"] . "." . $run["inputname"])) {
DBExec($c, "commit", "Autojudging(exportcommit)");
echo "Getting problem package file from local cache: " . $cache . $ds . $run["inputoid"] . "." . $run["inputname"] . "\n";
@@ -164,6 +165,25 @@ while(42) {
file_put_contents($dir . $ds . $run["inputname"], decryptData($s,$key));
$basename=$basenames[$run['inputoid']. "." . $run["inputname"]];
} else {
+ $flocal = '/root/icpc-latam-packages/' . trim($run["problemname"]) . ".zip"; //cassiopc: HARDCODED FOR ICPC 2017
+ if(!is_readable($flocal)) $flocal = '/root/icpc-latam-packages/' . trim($run["problemname"]) . ".ZIP";
+ if(!is_readable($flocal)) $flocal = '';
+ if($flocal != '') {
+ echo "Getting problem package file from local version: " . $flocal . "\n";
+ $zip = new ZipArchive;
+ if ($zip->open($flocal) === true) {
+ $zip->extractTo($dir . $ds . "problemdatalocal");
+ $zip->close();
+ } else {
+ DBExec($c, "rollback work", "Autojudging(zipfailed)");
+ echo "Failed to unzip the package file -- please check the problem package (maybe it is encrypted?)\n";
+ DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: problem package file is invalid (1)");
+ cleardir($dir . $ds . "problemdata");
+ continue;
+ }
+ }
+
+ @unlink($dir . $ds . $run["inputname"]);
echo "Downloading problem package file from db into: " . $dir . $ds . $run["inputname"] . "\n";
if(DB_lo_export($contest,$c, $run["inputoid"], $dir . $ds . $run["inputname"]) === false) {
DBExec($c, "rollback work", "Autojudging(rollback-input)");
@@ -176,7 +196,7 @@ while(42) {
@chmod($dir . $ds . $run["inputname"], 0600);
@chown($dir . $ds . $run["inputname"],"root");
- echo "Problem package downloaded -- running init scripts to obtain limits and other information\n";
+ echo "Problem package obtained -- running init scripts to obtain limits and other information\n";
$zip = new ZipArchive;
if ($zip->open($dir . $ds . $run["inputname"]) === true) {
$zip->extractTo($dir . $ds . "problemdata");
@@ -187,12 +207,15 @@ while(42) {
cleardir($dir . $ds . "problemdata");
continue;
}
- if(($info=@parse_ini_file($dir . $ds . "problemdata" . $ds . "description" . $ds . 'problem.info'))===false) {
- echo "Problem content missing (description/problem.info) -- please check the problem package\n";
- DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: problem package file is invalid (2)");
- cleardir($dir . $ds . "problemdata");
- continue;
- }
+ if(($info=@parse_ini_file($dir . $ds . "problemdatalocal" . $ds . "description" . $ds . 'problem.info'))===false) {
+ if(($info=@parse_ini_file($dir . $ds . "problemdata" . $ds . "description" . $ds . 'problem.info'))===false) {
+ echo "Problem content missing (description/problem.info) -- please check the problem package\n";
+ DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: problem package file is invalid (2)");
+ cleardir($dir . $ds . "problemdata");
+ cleardir($dir . $ds . "problemdatalocal");
+ continue;
+ }
+ } else echo "Problem info obtained from local package file\n";
if(isset($info['descfile']))
$descfile=trim(sanitizeFilename($info['descfile']));
$basename=trim(sanitizeFilename($info['basename']));
@@ -201,6 +224,7 @@ while(42) {
echo "Problem content missing (description/problem.info) -- please check the problem package\n";
DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: problem package file is invalid (3)");
cleardir($dir . $ds . "problemdata");
+ cleardir($dir . $ds . "problemdatalocal");
continue;
}
$basenames[$run['inputoid']. "." . $run["inputname"]]=$basename;
@@ -208,11 +232,18 @@ while(42) {
echo "Problem content missing (limits) -- please check the problem package\n";
DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: problem package file is invalid (4)");
cleardir($dir . $ds . "problemdata");
+ cleardir($dir . $ds . "problemdatalocal");
continue;
}
- chdir($dir . $ds . "problemdata" . $ds . "limits");
+ $pd = 'problemdata';
+ if(is_dir($dir . $ds . "problemdatalocal" . $ds . "limits")) {
+ echo "Obtaining limits from local package file\n";
+ $pd = 'problemdatalocal';
+ }
+ chdir($dir . $ds . $pd . $ds . "limits");
$limits[$basename]=array();
- foreach(glob($dir . $ds . "problemdata" . $ds . "limits" .$ds . '*') as $file) {
+ $cont=false;
+ foreach(glob($dir . $ds . $pd . $ds . "limits" .$ds . '*') as $file) {
chmod($file,0700);
$ex = escapeshellcmd($file);
$ex .= " >stdout 2>stderr";
@@ -223,38 +254,50 @@ while(42) {
if($retval != 0) {
echo "Error running script -- please check the problem package\n";
DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: problem package file is invalid (5)");
- cleardir($dir . $ds . "problemdata");
- continue;
+ $cont=true;
+ break;
}
$limits[$basename][basename($file)] = file('stdout',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
}
- $cont=false;
- foreach(glob($dir . $ds . "problemdata" . $ds . "tests" .$ds . '*') as $file) {
- chdir($dir . $ds . "problemdata" . $ds . "tests");
- chmod($file,0700);
- $ex = escapeshellcmd($file);
- $ex .= " >stdout 2>stderr";
- @unlink('stdout');
- @unlink('stderr');
- echo "Executing TEST SCRIPT " . $ex . " at " . getcwd() . "\n";
- if(system($ex, $retval)===false) $retval=-1;
- if($retval != 0) {
- echo "Error running test script -- please check the problem package or your installation\n";
- echo "=====stderr======\n";
- echo file_get_contents('stderr');
- echo "\n=====stdout======\n";
- echo file_get_contents('stdout');
- echo "\n===========\n";
- DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: internal test script failed (" . $file . ")");
- $cont=true;
- break;
+ if(!$cont) {
+ $pd = 'problemdata';
+ if(is_dir($dir . $ds . "problemdatalocal" . $ds . "tests")) {
+ echo "Running test scripts from local package file\n";
+ $pd = 'problemdatalocal';
}
+ foreach(glob($dir . $ds . $pd . $ds . "tests" .$ds . '*') as $file) {
+ chdir($dir . $ds . $pd . $ds . "tests");
+ chmod($file,0700);
+ $ex = escapeshellcmd($file);
+ $ex .= " >stdout 2>stderr";
+ @unlink('stdout');
+ @unlink('stderr');
+ echo "Executing TEST SCRIPT " . $ex . " at " . getcwd() . "\n";
+ if(system($ex, $retval)===false) $retval=-1;
+ if($retval != 0) {
+ echo "Error running test script -- please check the problem package or your installation\n";
+ echo "=====stderr======\n";
+ echo file_get_contents('stderr');
+ echo "\n=====stdout======\n";
+ echo file_get_contents('stdout');
+ echo "\n===========\n";
+ DBGiveUpRunAutojudging($contest, $site, $number, $ip, "error: internal test script failed (" . $file . ")");
+ $cont=true;
+ break;
+ }
+ }
+ }
+ if(is_dir($dir . $ds . "problemdatalocal" . $ds . "output")) {
+ echo "Using scripts and inputs/outputs from local package file\n";
+ @copy($flocal, $dir . $ds . $run["inputname"]);
}
+ $s = file_get_contents($dir . $ds . $run["inputname"]);
cleardir($dir . $ds . "problemdata");
- if($cont)
+ cleardir($dir . $ds . "problemdatalocal");
+ if($cont) {
+ echo "Aborting judging because of issues in the package\n";
continue;
-
- $s = file_get_contents($dir . $ds . $run["inputname"]);
+ }
file_put_contents($cache . $ds . $run["inputoid"] . "." . $run["inputname"], encryptData($s,$key));
}
diff --git a/src/private/conf.php b/src/private/conf.php
index 71956c0..c35fb6a 100644
--- a/src/private/conf.php
+++ b/src/private/conf.php
@@ -20,7 +20,7 @@
function globalconf() {
$conf["dbencoding"]="UTF8";
$conf["dbclientenc"]="UTF8";
- $conf['doenc']=FALSE;
+ $conf['doenc']=false;
$conf["dblocal"]="false"; // use unix socket to connect?
$conf["dbhost"]="localhost";
diff --git a/src/private/score.sep b/src/private/score.sep
index b4798d9..7863dde 100644
--- a/src/private/score.sep
+++ b/src/private/score.sep
@@ -17,3 +17,4 @@ Peru 108
PuertoRico 123
RepDominicana 121
Venezuela 103
+TEST 99
diff --git a/src/site/getsite.php b/src/site/getsite.php
index 08235a0..c29581c 100644
--- a/src/site/getsite.php
+++ b/src/site/getsite.php
@@ -33,20 +33,24 @@ if($ct["contestlocalsite"]==$ct["contestmainsite"]) {
$u = DBUserInfo($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], $_SESSION["usertable"]["usernumber"],null,false);
if(isset($_POST['xml'])) {
// $fp=fopen('/tmp/aaa',"w"); fwrite($fp,$_POST['xml']); fclose($fp);
- $s = decryptData(rawurldecode($_POST['xml']),$u["userpassword"],'xml from local not ok');
+ $s = decryptData($_POST['xml'],$u["userpassword"],'xml from local not ok');
// $fp=fopen('/tmp/aaa1',"w"); fwrite($fp,$s); fclose($fp);
if(strtoupper(substr($s,0,5)) != "<XML>") {
echo "<!-- <ERROR8> ".session_id() . " -->\n";
+ echo "<!-- <NOTOK> -->";
} else {
- if(importFromXML($s,$_SESSION["usertable"]["contestnumber"],$fromsite,true))
- echo "<!-- <OK> -->\n";
+ $resp = importFromXML($s,$_SESSION["usertable"]["contestnumber"],$fromsite,true,0,-1);
+ echo $resp[1];
+ if($resp[0])
+ echo "<!-- <OK> -->";
else
- echo "<!-- <NOTOK> -->\n";
+ echo "<!-- <NOTOK> -->";
}
}
if(isset($_POST['updatetime']) && is_numeric($_POST['updatetime'])) {
- $xml = generateSiteXML($_SESSION["usertable"]["contestnumber"],$fromsite,$_POST['updatetime']);
- echo encryptData($xml,$u["userpassword"]);
+ $xml = generateSiteXML($_SESSION["usertable"]["contestnumber"],$fromsite,$_POST['updatetime'],$ct["contestmainsite"]);
+ echo "<!-- " . encryptData($xml[0],$u["userpassword"],false) . " -->";
+ // echo "MAIN\n" . $xml[1];
}
} else {
echo "<!-- <ERROR3> ".session_id() . " -->\n";
diff --git a/src/staff/header.php b/src/staff/header.php
index 21f93f9..10b0338 100644
--- a/src/staff/header.php
+++ b/src/staff/header.php
@@ -69,11 +69,11 @@ echo " <td align=center width=\"20%\"><a class=menu style=\"font-weight:bold\"
echo " <td align=center width=\"20%\"><a class=menu style=\"font-weight:bold\" href=score.php>Score</a></td>\n";
echo " <td align=center width=\"20%\"><a class=menu style=\"font-weight:bold\" href=run.php>Runs</a></td>\n";
-echo " <td align=center width=\"20%\"><a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('report/stat.php', ".
- "'Problem Statistics','width=800,height=600,scrollbars=yes,toolbar=yes,menubar=yes,".
- "resizable=yes')\">Statistics</a></td>\n";
+//echo " <td align=center width=\"20%\"><a href=\"#\" class=menu style=\"font-weight:bold\" onClick=\"window.open('report/stat.php', ".
+// "'Problem Statistics','width=800,height=600,scrollbars=yes,toolbar=yes,menubar=yes,".
+// "resizable=yes')\">Statistics</a></td>\n";
-echo " <td align=center width=\"20%\"><a class=menu style=\"font-weight:bold\" href=option.php>Options</a></td>\n";
+//echo " <td align=center width=\"20%\"><a class=menu style=\"font-weight:bold\" href=option.php>Options</a></td>\n";
echo " <td align=center width=\"20%\"><a class=menu style=\"font-weight:bold\" href=../index.php>Logout</a></td>\n";
echo " </tr>\n";
echo "</table>\n";
diff --git a/src/system/header.php b/src/system/header.php
index 75d0fca..ab5a522 100644
--- a/src/system/header.php
+++ b/src/system/header.php
@@ -55,7 +55,7 @@ echo "</table>\n";
echo "<table border=0 width=\"100%\" align=center>\n";
echo " <tr>\n";
echo " <td align=center><a class=menu style=\"font-weight:bold\" href=contest.php>Contest</a></td>\n";
-echo " <td align=center><a class=menu style=\"font-weight:bold\" href=importxml.php>Import</a></td>\n";
+//echo " <td align=center><a class=menu style=\"font-weight:bold\" href=importxml.php>Import</a></td>\n";
echo " <td align=center><a class=menu style=\"font-weight:bold\" href=option.php>Options</a></td>\n";
echo " <td align=center><a class=menu style=\"font-weight:bold\" href=../index.php>Logout</a></td>\n";
echo " </tr>\n";
diff --git a/src/team/run.php b/src/team/run.php
index 61d3a84..077b76c 100644
--- a/src/team/run.php
+++ b/src/team/run.php
@@ -15,7 +15,6 @@
// 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 12/aug/2017 by cassio@ime.usp.br
require('header.php');
$ds = DIRECTORY_SEPARATOR;
if($ds=="") $ds = "/";
@@ -290,7 +289,7 @@ $runtmp = $_SESSION["locr"] . $ds . "private" . $ds . "runtmp" . $ds . "run-cont
"-site". $_SESSION["usertable"]["usersitenumber"] . "-user" . $_SESSION["usertable"]["usernumber"] . ".php";
$redo = TRUE;
if(!isset($_SESSION['forceredo']) || $_SESSION['forceredo']==false) {
- $actualdelay = 30;
+ $actualdelay = 15;
if(file_exists($runtmp)) {
if(isset($strtmp) || (($strtmp = file_get_contents($runtmp,FALSE,NULL,-1,1000000)) !== FALSE)) {
list($d) = sscanf($strtmp,"%*s %d");
diff --git a/src/version b/src/version
index 07c98a8..e466e5e 100644
--- a/src/version
+++ b/src/version
@@ -1 +1 @@
-boca-1.5.12
+boca-1.5.13
diff --git a/src/versionnum.php b/src/versionnum.php
index 560983d..a833695 100644
--- a/src/versionnum.php
+++ b/src/versionnum.php
@@ -1,5 +1,5 @@
<?php
-$BOCAVERSION='boca-1.5.12';
+$BOCAVERSION='boca-1.5.13';
$YEAR='2017';
?>