diff options
| author | cassio <cassiopc@gmail.com> | 2013-07-02 05:46:45 +0000 |
|---|---|---|
| committer | cassio <cassiopc@gmail.com> | 2013-07-02 05:46:45 +0000 |
| commit | be2491b093b1f0ca430bede679ecbb670041e483 (patch) | |
| tree | fe2da63d1811cb93e4352a43a113ace37b9f6017 /src/site | |
| parent | a9aa438ea0558eb0044cf1e54a9190ddb41b65e5 (diff) | |
| download | boca-be2491b093b1f0ca430bede679ecbb670041e483.tar.gz boca-be2491b093b1f0ca430bede679ecbb670041e483.zip | |
restructuring of boca's git
Diffstat (limited to 'src/site')
| -rw-r--r-- | src/site/get.php | 167 | ||||
| -rw-r--r-- | src/site/header.php | 88 | ||||
| -rw-r--r-- | src/site/index.php | 312 | ||||
| -rw-r--r-- | src/site/putfile.php | 190 |
4 files changed, 757 insertions, 0 deletions
diff --git a/src/site/get.php b/src/site/get.php new file mode 100644 index 0000000..81ede0d --- /dev/null +++ b/src/site/get.php @@ -0,0 +1,167 @@ +<?php +//////////////////////////////////////////////////////////////////////////////// +//BOCA Online Contest Administrator +// Copyright (C) 2003-2012 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 +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// 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'); + +header ("Content-transfer-encoding: binary\n"); +ob_end_flush(); + +if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) { + echo "<!-- <ERROR4> ".session_id() . " " . session_id() . " -->\n"; + exit; +} +if($ct["contestlocalsite"]==$ct["contestmainsite"]) { + $fromsite = $_SESSION["usertable"]["usericpcid"]; + LOGLevel("Connection received from site=$fromsite PHPID=".$_COOKIE['PHPSESSID'].",extra=".$_SESSION['usertable']['usersessionextra']. + ",session=".session_id().",name=".$getx['name'].", check=".$getx['check'],2); + if($fromsite != '' && is_numeric($fromsite) && $fromsite > 0) { + $siteinfo = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$fromsite); + $scores = explode(",", $siteinfo['siteglobalscore']); + if(count($scores)==0 || (count($scores)==1 && !is_numeric($scores[0]))) $scores=array($fromsite); + $judges = explode(",", $siteinfo['sitejudging']); + if(count($judges)==0 || (count($judges)==1 && !is_numeric($judges[0]))) $judges=array($fromsite); + $scores = array_unique(array_merge($scores,$judges)); + if(in_array(0,$scores)) $scores=null; + + $tasks = explode(",", $siteinfo['sitetasking']); + if(count($tasks)==0 || (count($tasks)==1 && !is_numeric($tasks[0]))) $tasks=array($fromsite); + } else { + echo "<!-- <ERROR9> ".session_id() . " " . session_id() . " -->\n"; + exit; + } + if(isset($_POST) && isset($_POST['xml'])) { +// $fp=fopen('/tmp/aaa',"w"); fwrite($fp,$_POST['xml']); fclose($fp); + $s = decryptData(rawurldecode($_POST['xml']),myhash($_SESSION["usertable"]["userpassword"])); +// $fp=fopen('/tmp/aaa1',"w"); fwrite($fp,$s); fclose($fp); + + $ac=array(); + $ac['SITEREC']=array( + 'site'=>$fromsite, + 'sitenumber'=>0, + 'number'=>0, + 'sitename'=>0, + 'siteip'=>0, + 'siteduration'=>0, + 'sitelastmileanswer'=>0, + 'sitelastmilescore'=>0, +// 'sitejudging'=>0, +// 'sitetasking'=>0, + 'siteautoend'=>0, +// 'siteglobalscore'=>0, + 'siteactive'=>0, + 'sitescorelevel'=>0, + 'sitepermitlogins'=>0, + 'siteautojudge'=>0, + 'sitenextuser'=>0, + 'sitenextclar'=>0, + 'sitenextrun'=>0, + 'sitenexttask'=>0, + 'sitemaxtask'=>0, + 'sitechiefname'=>0, + 'updatetime'=>0); + $ac['SITETIME']=array('site'=>$fromsite, + 'number'=>0, + 'start'=>0, + 'enddate'=>0, + 'updatetime'=>0); + $ac['USERREC']=array('site'=>$fromsite, + 'user'=>0, + 'number'=>0, + 'username'=>0, + 'usericpcid'=>0, + 'userfull'=>0, + 'userdesc'=>0, + 'type'=>0, + 'enabled'=>0, + 'multilogin'=>0, + 'userip'=>0, + 'userlastlogin'=>0, + 'userlastlogout'=>0, + 'permitip'=>0, + 'updatetime'=>0); + $ac['CLARREC']=array('site'=>$judges, + 'user'=>0, + 'number'=>0, + 'problem'=>0, + 'question'=>0, + 'clarnumber'=>0, + 'clardate'=>0, + 'clardatediff'=>0, + 'clardatediffans'=>0, + 'claranswer'=>0, + 'clarstatus'=>0, + 'clarjudge'=>0, + 'clarjudgesite'=>0, + 'updatetime'=>0); + $ac['RUNREC']=array('site'=>$judges, + 'user'=>0, + 'number'=>0, + 'runnumber'=>0, + 'problem'=>0, + 'lang'=>0, + 'filename'=>0, + 'filepath'=>0, + 'rundate'=>0, + 'rundatediff'=>0, + 'rundatediffans'=>0, + 'runanswer'=>0, + 'runstatus'=>0, + 'runjudge'=>0, + 'runjudgesite'=>0, + 'runjudge1'=>0, + 'runjudgesite1'=>0, + 'runanswer1'=>0, + 'runjudge2'=>0, + 'runjudgesite2'=>0, + 'runanswer2'=>0, + 'autoip'=>0, + 'autobegindate'=>0, + 'autoenddate'=>0, + 'autoanswer'=>0, + 'autostdout'=>0, + 'autostderr'=>0, + 'updatetime'=>0); + $ac['TASKREC']=array( + 'site'=>$tasks, + 'user'=>0, + 'desc'=>0, + 'number'=>0, + 'tasknumber'=>0, + 'color'=>0, + 'colorname'=>0, + 'updatetime'=>0, + 'filename'=>0, + 'filepath'=>0, + 'sys'=>0, + 'status'=>0, + 'taskdate'=>0, + 'taskdatediff'=>0, + 'taskdatediffans'=>0, + 'taskstaffnumber'=>0, + 'taskstaffsite'=>0); + + if(importFromXML($s,$ac,$_SESSION["usertable"]["contestnumber"])) + echo "<!-- <OK> -->"; + else + echo "<!-- <NOTOK> -->"; + } + $xml = generateXML($_SESSION["usertable"]["contestnumber"],0,$scores); + echo encryptData($xml,myhash($_SESSION["usertable"]["userpassword"])); +} else + echo "<!-- <ERROR3> ".session_id() . " " . session_id() . " -->\n"; +?> diff --git a/src/site/header.php b/src/site/header.php new file mode 100644 index 0000000..f1b47b3 --- /dev/null +++ b/src/site/header.php @@ -0,0 +1,88 @@ +<?php +//////////////////////////////////////////////////////////////////////////////// +//BOCA Online Contest Administrator +// Copyright (C) 2003-2012 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 +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// 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 +ob_start(); +header ("Expires: " . gmdate("D, d M Y H:i:s") . " GMT"); +header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); +header ("Cache-Control: no-cache, must-revalidate"); +header ("Pragma: no-cache"); +header ("Content-Type: text/html; charset=utf-8"); +session_start(); +//require_once('../version.php'); +require_once("../globals.php"); +require_once("../db.php"); + +if(!function_exists("globalconf") || !function_exists("sanitizeVariables")) { + ob_end_flush(); + ForceLoad("../index.php"); + exit; +} + +$getx=array(); +if(isset($_GET['name'])) $getx['name']=$_GET['name']; +if(isset($_GET['password'])) $getx['password']=$_GET['password']; +if(isset($_GET['check'])) $getx['check']=$_GET['check']; +//if(isset($_POST)) { +if(isset($_POST["name"])) $getx['name']=$_POST['name']; +if(isset($_POST["password"])) $getx['password']=$_POST['password']; +if(isset($_POST["check"])) $getx['check']=$_POST['check']; +//} +//LOGError("PHPID=".$_COOKIE['PHPSESSID'].",extra=".$_SESSION['usertable']['usersessionextra']. +// ",session=".session_id().",name=".$getx['name'].", password=".$getx['password'].",check=".$getx['check']); +if (!isset($_SESSION["usertable"])) { + if(isset($getx['name']) && $getx['name'] != "" && isset($getx['password']) && $getx['password'] != "") { + $name = $getx["name"]; + LogLevel("Connection try by IP " . getIP() . ", username=" . $name,2); + $password = $getx["password"]; + $usertable = DBLogIn($name, $password, false); + if(!$usertable) { + ob_end_flush(); + echo "<!-- <ERROR1> ". session_id() . " " . session_id() . " -->\n"; + exit; + } + if(!isset($getx['check'])) { + ob_end_flush(); + echo "<!-- <ERROR2> ". session_id() . " " . session_id() . " -->\n"; + exit; + } + } else { + ob_end_flush(); + LogLevel("Init connection by IP " . getIP(),2); + echo "<!-- <SESSION1> ". session_id() . " " . session_id() . " -->\n"; + exit; + } +} +if(!ValidSession()) { + ob_end_flush(); + InvalidSession("site/index.php"); + ForceLoad("../index.php"); + exit; +} +if(isset($getx['check']) && isset($getx["password"]) && $getx['check'] != myhash($getx["password"] . $_SESSION['usertable']['userpassword'])) { + ob_end_flush(); + echo "<!-- <SESSION2> ". session_id() . " " . $_SESSION['usertable']['usersessionextra'] . " -->\n"; + exit; +} + +if($_SESSION["usertable"]["usertype"] != "site") { + ob_end_flush(); + IntrusionNotify("site/index.php"); + ForceLoad("../index.php"); + exit; +} +?> diff --git a/src/site/index.php b/src/site/index.php new file mode 100644 index 0000000..3b066ab --- /dev/null +++ b/src/site/index.php @@ -0,0 +1,312 @@ +<?php +//////////////////////////////////////////////////////////////////////////////// +//BOCA Online Contest Administrator +// Copyright (C) 2003-2012 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 +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// 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 21/jul/2012 by cassio@ime.usp.br +require('header.php'); +if(isset($_GET['mainuser']) && isset($_GET['mainpass']) && $_GET['mainuser']!="" && $_GET['mainpass']!="") { + $_SESSION['mainuser'] = $_GET['mainuser']; + $_SESSION['mainpass'] = $_GET['mainpass']; + $_SESSION['check'] = $_GET['check']; + unset($_GET['mainuser']); + unset($_GET['mainpass']); + unset($_GET['check']); + ForceLoad('index.php'); +} +$smi = isset($_SESSION['mainid'])? $_SESSION['mainid']: ""; +$smu = isset($_SESSION['mainuser'])? $_SESSION['mainuser']: ""; +$smp = isset($_SESSION['mainpass'])? $_SESSION['mainpass']: ""; +$smc = isset($_SESSION['check'])? $_SESSION['check']: ""; +//MSGError("id=".$smi." user=".$smu." pass=".$smp. " check=".$smc); + +echo "<html><head><title>Site Page</title>\n"; +echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n"; +echo "<link rel=stylesheet href=\"../Css.php\" type=\"text/css\">\n"; +if ($smp != $smc && $smp != '' && $smc != '') + echo "<meta http-equiv=\"refresh\" content=\"60\" />"; + +if ($smu != '') + echo "</head><body onload=\"document.form1.password.focus()\"><table border=1 width=\"100%\">\n"; +else + echo "</head><body onload=\"document.form1.name.focus()\"><table border=1 width=\"100%\">\n"; +echo "<tr><td nowrap bgcolor=\"#ff00ff\" align=center>"; +echo "<img src=\"../images/smallballoontransp.png\" alt=\"\">"; +echo "<font color=\"#000000\">BOCA</font>"; +echo "</td><td bgcolor=\"#ff00ff\" width=\"99%\">\n"; +echo "Username: " . $_SESSION["usertable"]["userfullname"] . " (site=".$_SESSION["usertable"]["usersitenumber"].")<br>\n"; +list($clockstr,$clocktype)=siteclock(); +echo "</td><td bgcolor=\"#ff00ff\" align=center nowrap> ".$clockstr." </td></tr>\n"; +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=../index.php>Logout</a></td>\n"; +echo " </tr>\n"; +echo "</table>\n"; + +list($t,$id,$idextra) = getMainXML($smu,$smi,$smp,$smc); +//MSGError("t=". ($t==false?"false":"true") ." id=$id idextra=$idextra"); +if($t==false) + $_SESSION['mainid'] = $id; +$_SESSION['mainok'] = $t; + +if(!$t) { + unset($_GET['mainuser']); + unset($_GET['mainpass']); + unset($_GET['check']); + unset($_SESSION["mainuser"]); + unset($_SESSION["mainpass"]); + unset($_SESSION["check"]); +?> +<script language="JavaScript" src="../sha256.js"></script> +<script language="JavaScript"> +function computeHASH() +{ + var userHASH, passHASH, passHASH2; + userHASH = document.form1.name.value; + <?php if(strlen($id) > 20 && strlen($idextra) > 20) { ?> + tmpv = js_myhash(document.form1.password.value); + passHASH = js_myhash(tmpv+'<?php echo $id; ?>'); + passHASH2 = js_myhash(tmpv+'<?php echo $idextra; ?>'); + <?php } ?> + tmpv = ' '; + document.form1.name.value = ''; + document.form1.password.value = ' '; + document.location = 'index.php?mainuser='+userHASH+'&mainpass='+passHASH+'&check='+passHASH2; +} +</script> +<table width="100%" height="100%" border="0"> + <tr align="center" valign="middle"> + <td> + <form name="form1" action="javascript:computeHASH()"> + <div align="center"> + <table border="0" align="center"> +<?php + if($id == '' || $idextra=='') { +?> + <input type="hidden" name="name" value=""> + <input type="hidden" name="password" value=""> + <tr> + <td nowrap> + <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="+1"> +Cannot access main server. Check IP address,<br> password and internet connection, then press OK.</font></div> + </td> + </tr> + <tr> + <td valign="top"> + <center><input type="submit" name="Submit" value="OK"></center> + </td> + </tr> +<?php + } else { +?> + <tr> + <td nowrap> + <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="+1"> + <?php + if($id==$idextra) { + $contest=$_SESSION["usertable"]["contestnumber"]; + $ct = DBContestInfo($contest); + echo "Credentials to connect to main server<br>"; + echo "at URL: " . $ct['contestmainsiteurl']; + } else + echo "<u>Status</u>: initial connection established<br><br>To guarantee an encrypted connection, please type the same password again:"; +?> + </font></div> + </td> + </tr> + <tr> + <td valign="top"> + <table border="0" align="left"> + <tr> + <td><font face="Verdana, Arial, Helvetica, sans-serif" > + Name + </font></td> + <td> + <input type="text" name="name" value="<?php echo $smu; ?>"> + </td> + </tr> + <tr> + <td><font face="Verdana, Arial, Helvetica, sans-serif" >Password</font></td> + <td> + <input type="password" name="password"> + </td> + </tr> + </table> + <input type="submit" name="Submit" value="Login"> + </td> + </tr> +<?php } ?> + </table> + </div> + </form> + </td> + </tr> +</table> +<?php +} else { + if($idextra == "<OK>") + echo "<u>Data sent correctly to main server</u><br><br>"; + else + echo "<u>Error sending data to main server</u><br><br>"; + $ac['CONTESTREC']=array('number'=>-1, + 'name'=>-1, + 'startdate'=>-1, + 'duration'=>-1, + 'lastmileanswer'=>-1, + 'lastmilescore'=>-1, + 'penalty'=>-1, + 'maxfilesize'=>-1, + 'updatetime'=>-1); + $ac['ANSWERREC']=array('number'=>-1, + 'name'=>-1, + 'yes'=>-1, + 'updatetime'=>-1); + $ac['LANGUAGEREC']=array('number'=>-1, + 'name'=>-1, + 'filepath'=>-1, + 'filename'=>-1, + 'comppath'=>-1, + 'compname'=>-1, + 'problemnumber'=>-1, + 'updatetime'=>-1); + $ac['PROBLEMREC']=array('number'=>-1, + 'name'=>-1, + 'fullname'=>-1, + 'basename'=>-1, + 'inputfilename'=>-1, + 'inputfilepath'=>-1, + 'solfilename'=>-1, + 'solfilepath'=>-1, + 'descfilename'=>-1, + 'descfilepath'=>-1, + 'tl'=>-1, +// 'colorname'=>-1, +// 'color'=>-1, + 'fake'=>-1, + 'updatetime'=>-1); + $ac['SITETIME']=array('site'=>-1, + 'start'=>-1, + 'enddate'=>-1, + 'updatetime'=>-1); + $ac['SITEREC']=array('sitenumber'=>-1, + 'site'=>-1, + 'number'=>-1, + 'sitename'=>-1, + 'siteip'=>-1, + 'siteduration'=>-1, + 'sitelastmileanswer'=>-1, + 'sitelastmilescore'=>-1, + 'sitejudging'=>-1, + 'sitetasking'=>-1, + 'siteautoend'=>-1, + 'siteglobalscore'=>-1, + 'siteactive'=>-1, + 'sitescorelevel'=>-1, + 'sitepermitlogins'=>-1, + 'siteautojudge'=>-1, + 'sitenextuser'=>-1, + 'sitenextclar'=>-1, + 'sitenextrun'=>-1, + 'sitenexttask'=>-1, + 'sitemaxtask'=>-1, + 'sitechiefname'=>-1, + 'updatetime'=>-1); + $ac['USERREC']=array('site'=>-1, + 'user'=>-1, + 'number'=>-1, + 'username'=>-1, + 'updatetime'=>-1, + 'usericpcid'=>-1, + 'userfull'=>-1, + 'userdesc'=>-1, + 'type'=>-1, + 'enabled'=>-1, + 'multilogin'=>-1, + 'userip'=>-1, + 'userlastlogin'=>-1, + 'userlastlogout'=>-1, + 'permitip'=>-1); + $ac['CLARREC']=array('site'=>-1, + 'user'=>-1, + 'number'=>-1, + 'problem'=>-1, + 'question'=>-1, + 'clarnumber'=>-1, + 'clardate'=>-1, + 'clardatediff'=>-1, + 'clardatediffans'=>-1, + 'claranswer'=>-1, + 'clarstatus'=>-1, + 'clarjudge'=>-1, + 'clarjudgesite'=>-1, + 'updatetime'=>-1); + $ac['RUNREC']=array('site'=>-1, + 'user'=>-1, + 'number'=>-1, + 'runnumber'=>-1, + 'problem'=>-1, + 'lang'=>-1, + 'filename'=>-1, + 'filepath'=>-1, + 'rundate'=>-1, + 'rundatediff'=>-1, + 'rundatediffans'=>-1, + 'runanswer'=>-1, + 'runstatus'=>-1, + 'runjudge'=>-1, + 'runjudgesite'=>-1, + 'runjudge1'=>-1, + 'runjudgesite1'=>-1, + 'runanswer1'=>-1, + 'runjudge2'=>-1, + 'runjudgesite2'=>-1, + 'runanswer2'=>-1, + 'autoip'=>-1, + 'autobegindate'=>-1, + 'autoenddate'=>-1, + 'autoanswer'=>-1, + 'autostdout'=>-1, + 'autostderr'=>-1, + 'updatetime'=>-1); + $ac['TASKREC']=array( + 'site'=>-1, + 'user'=>-1, + 'desc'=>-1, + 'number'=>-1, + 'tasknumber'=>-1, + 'color'=>-1, + 'colorname'=>-1, + 'updatetime'=>-1, + 'filename'=>-1, + 'filepath'=>-1, + 'sys'=>-1, + 'status'=>-1, + 'taskdate'=>-1, + 'taskdatediff'=>-1, + 'taskdatediffans'=>-1, + 'taskstaffnumber'=>-1, + 'taskstaffsite'=>-1); + + if(importFromXML($id,$ac,$_SESSION["usertable"]["contestnumber"])) + echo "<u>Data received correctly from main server at " . dateconv(time()) . "</u>"; + else + echo "<u>Error receiving data from main server at ". dateconv(time()) . "</u>"; +// echo "<pre>" . $id . "</pre>"; + echo "<br><br><b>waiting for next round...</b>"; +} +?> +</body> +</html> diff --git a/src/site/putfile.php b/src/site/putfile.php new file mode 100644 index 0000000..8a1d89a --- /dev/null +++ b/src/site/putfile.php @@ -0,0 +1,190 @@ +<?php +//////////////////////////////////////////////////////////////////////////////// +//BOCA Online Contest Administrator +// Copyright (C) 2003-2012 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 +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +//////////////////////////////////////////////////////////////////////////////// +//Last updated 03/nov/2012 by cassio@ime.usp.br +// +//PC^2 integration developed by Fabio Antonio Avellaneda Pachon +// +//Now it is also the integration of scores of BOCA +// +$quiet=true; +require 'header.php'; +$ds = DIRECTORY_SEPARATOR; +if($ds=="") $ds = "/"; +$remotedir=$ds . "private" . $ds . "remotescores"; + +if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) +exit; +if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) +exit; + +if(is_writable($_SESSION["locr"] . $remotedir)) { + if(isset($_POST['PC2']) && is_numeric($_POST['PC2']) && $_POST['PC2'] > 0) { + $site = $_POST['PC2']; + $problemCount = 4; + for($i=0;$i<$problemCount;$i++) { + $problems[$i]["name"]=chr($i+ord("A")); + $problems[$i]["color"]="FFFFFF"; + $problems[$i]["colorname"]="white"; + $problems[$i]["solved"]=0; + $problems[$i]["judging"]=false; + $problems[$i]["time"]=0; + $problems[$i]["penalty"]=0; + $problems[$i]["count"]=0; + } + + /*** Load PC2 summary.html **/ + $board=base64_decode($_POST['data']); + + /*** a new dom object ***/ + $dom = new domDocument; + + /*** load the html into the object ***/ + $dom->loadHTML($board); + + /*** discard white space ***/ + $dom->preserveWhiteSpace = false; + + /*** the table by its tag name ***/ + $tables = $dom->getElementsByTagName('table'); + + /*** get all rows from the table ***/ + $rows = $tables->item(0)->getElementsByTagName('tr'); + + /*** loop over the table rows ***/ + $userCount = 1; + $firstProblem=-1; + foreach ($rows as $row) + { + //teams are always being renumbered since their number is not important... just they have to be different + $team["user"]=(string)$userCount; + $team["site"]=(string)$site; + + /*** get each column by tag name ***/ + $cols = $row->getElementsByTagName('td'); + $colCount=0; + $probCount=1; + //Ignore empty cols + if($cols->item(0)->nodeValue=="") + { + continue; + } + foreach ($cols as $col) + { + switch($colCount) + { + //First column, start the problem counter and by default, the team hasnt solved a problem + case 0; + $probCount=1; + $firstProblem=-1; + break; + //First column: team name + case 1: + $team["username"]=$col->nodeValue; +// echo "username: $col->nodeValue\n"; + $team["usertype"]="team"; + $team["userfullname"]=$col->nodeValue; + break; + //Second column: How many problems does the team solved at this time + case 2: + $team["totalcount"]=(int)$col->nodeValue; + // echo "totalcount: $col->nodeValue\n"; + break; + //Third column: Elapsed time, including penalisations + case 3: + $team["totaltime"]=$col->nodeValue; + // echo "totaltime: $col->nodeValue\n"; + break; + //No more problems to process + case $problemCount+4: + $total[$userCount-1]=$team; + //If firstProblem is different to -1 is because the team has solved at least one problem + if($firstProblem!=-1) + { + $total[$userCount-1]["first"]=$firstProblem; + } + break; + //Problems columns + default: + list($count, $time) = split('/', $col->nodeValue); + //echo "Sol: $solved / time: $count"; + if($time=="--") + { + $solved=false; + $time=""; + }else + { + $solved=true; + } + $team["problem"][$probCount]=$problems[$probCount]; + $team["problem"][$probCount]["solved"]=$solved; + $team["problem"][$probCount]["time"]=$time; + //I can calculate the effective time and the penalisation time, if needed + $team["problem"][$probCount]["penalty"]=$time; + $team["problem"][$probCount]["count"]=$count; + //look for the time which first problem was solved + if($firstProblem==-1 && $solved) + { + $firstProblem=$time; + }else + { + if($solved && $time<$firstProblem) + { + $firstProblem=$time; + } + } + $probCount++; + }//end switch + + $colCount++; //echo $col->nodeValue."\t"; + }//end col for + + $userCount++; +// echo '<hr />'; + } //end row col +//echo print_r($total); + $total=base64_encode(serialize($total)); + } else + $total=$_POST['data']; + + if($_SESSION["usertable"]["usericpcid"] != '' && $_SESSION["usertable"]["usericpcid"] > 0) + { + $arr = unserialize(base64_decode($total)); + $arr['site']=$_SESSION["usertable"]["usericpcid"]; + $total=base64_encode(serialize($arr)); + } + + $fn = tempnam($_SESSION["locr"] . $remotedir,"score_"); + $fout = fopen($fn,"wb"); + fwrite($fout,$total,10000000); + fclose($fout); + + // test the format of the file + $fc=file_get_contents($fn); + if(($arr = unserialize(base64_decode($fc)))===false || + !is_array($arr) || !isset($arr['site'])) { + echo "FAILED: File " . $fn . " is not compatible\n"; + } else { + + if(@rename($fn, $_SESSION["locr"] . $remotedir . $ds . "score_" . $_SESSION["usertable"]["username"] . + "_" . $_SESSION["usertable"]["usericpcid"] . "_" . md5(getIP()) . ".dat")) + echo "SCORE UPLOADED OK\n"; + else + echo "FAILED: UPDATE SCORE ERROR\n"; + } +} else echo "FAILED: PERMISSION DENIED IN THE SERVER\n"; +?> |