diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fcontest.php | 31 | ||||
| -rw-r--r-- | src/fextdata.php | 78 | ||||
| -rw-r--r-- | src/site/getsite.php | 4 |
3 files changed, 78 insertions, 35 deletions
diff --git a/src/fcontest.php b/src/fcontest.php index 8f636f7..fae2a74 100644 --- a/src/fcontest.php +++ b/src/fcontest.php @@ -547,6 +547,37 @@ function DBSiteDeleteAllRuns ($contest, $site, $user, $usersite,$c=null) { } return true; } +function DBUpdateSiteTime($contest,$param,$dodelete=false,$c=null) { + $ac=array('sitenumber','sitestartdate','siteenddate','updatetime'); + $type['sitenumber']=1; + $type['updatetime']=1; + $type['sitestartdate']=1; + $type['siteenddate']=1; + foreach($ac as $key) { + if(!isset($param[$key])) { + LOGError("DBUpdateSiteTime param error: $key is not set"); + return false; + } + $$key = sanitizeText($param[$key]); + if(isset($type[$key]) && !is_numeric($param[$key])) { + LOGError("DBUpdateSiteTime param error: $key is not numeric"); + return false; + } + } + if($c==null) { + $c = DBConnect(); + DBExec($c, "begin work", "DBUpdateSiteTime(begin)"); + $docommit=true; + } + if($dodelete) + DBExec($c, "delete from sitetimetable where contestnumber=$contest and sitenumber=$sitenumber", "DBUpdateSiteTime(delete)"); + DBExec($c, "insert into sitetimetable (contestnumber, sitenumber, sitestartdate, siteenddate, updatetime) ". + "values ($contest,$sitenumber,$sitestartdate,$siteenddate,$updatetime)", "DBRenewSiteTime(insert)"); + if($docommit) + DBExec($c, "commit work", "DBUpdateSiteTime(commit-noupdate)"); + return true; +} + function DBUpdateSite ($param,$c=null) { $ac=array('contestnumber','sitenumber','sitename','sitepermitlogins','sitescorelevel'); $ac1=array('updatetime','siteautoend','siteglobalscore','siteip','siteactive','siteduration','sitelastmileanswer','sitelastmilescore', diff --git a/src/fextdata.php b/src/fextdata.php index cdb087c..c5125df 100644 --- a/src/fextdata.php +++ b/src/fextdata.php @@ -271,25 +271,28 @@ function getMainXML() { LOGError("xmltransfer: OK"); else LOGError("xmltransfer: failed (" . $s . ")"); + + $s = substr($s, strpos($s, "\n") + 1); + LOGError("string: " . substr($s,0,50)); + $s = decryptData($s,myhash (trim($sitedata[2])),'xml from main not ok'); + if(strtoupper(substr($s,0,5)) != "<XML>") { + return false; + } + importFromXML($s, $contest, $localsite); + $str = $sitedata[0] . ' ' . $sitedata[1] . ' ' . $sitedata[2] . ' ' . $ti; + $param = array('contestnumber' => $contest, 'mainsiteurl' => $str, 'updatetime' => $ct['updatetime']); + DBUpdateContest ($param, $c); + return true; } else { LOGError("xmltransfer: failed (" . $ok . ")"); } - - $s = decryptData($s,myhash (trim($sitedata[2])),'xml from main not ok'); - if(strtoupper(substr($s,0,5)) != "<XML>") { - return false; - } - importFromXML($s, $contest, $localsite); - $str = $sitedata[0] . ' ' . $sitedata[1] . ' ' . $sitedata[2] . ' ' . $ti; - $param = array('contestnumber' => $contest, 'mainsiteurl' => $str, 'updatetime' => $ct['updatetime']); - DBUpdateContest ($param, $c); - return true; + return false; } function importFromXML($ar,$contest,$site,$tomain=false) { LOGError("importFromXML: contest $contest site $site tomain $tomain"); $data = implode("",explode("\n",$ar)); - $parser = xml_parser_create(); + $parser = xml_parser_create(''); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 1); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, $data, $values, $tags); @@ -302,7 +305,7 @@ function importFromXML($ar,$contest,$site,$tomain=false) { // DBExec($conn,"lock","importFromXML(lock)"); $r = DBExec($conn, "select * from contesttable where contestnumber=$contest"); if (DBnLines($r)==0) { - echo "Unable to find the contest $contest in the database.\n"; + LOGError("importFromXML: Unable to find the contest $contest in the database."); // DBExec($conn,"rollback work"); return false; } @@ -310,14 +313,14 @@ function importFromXML($ar,$contest,$site,$tomain=false) { DBClose($conn); $conn=null; - - $tables = array('answertable','langtable','problemtable','sitetable','usertable','clartable','runtable','tasktable'); + $firsttimetime=true; + $tables = array('answertable','langtable','problemtable','sitetable','sitetimetable','usertable','clartable','runtable','tasktable'); foreach($tables as $table) { foreach($tags as $key=>$val) { if($values[$val[0]]['type'] != 'open') continue; if($key == "XML") continue; - if($key != $table) continue; + if($key != strtoupper($table)) continue; foreach($val as $k=>$v) { if($values[$v]['type'] != 'open') continue; @@ -339,13 +342,14 @@ function importFromXML($ar,$contest,$site,$tomain=false) { // echo "\n"; // print_r($param); $param['contestnumber'] = $contest; + $param['contest'] = $contest; if(count($param) < 2) continue; unset($param['number']); - if(!$tomain && $key == "answertable") { + if(!$tomain && $table == "answertable") { if(($ret=DBNewAnswer ($contest, $param, $conn))) { if($ret==2) { - echo "Answer " . $param["answernumber"] . " updated<br>"; + LOGError("Answer " . $param["answernumber"] . " updated"); } } else { @@ -354,10 +358,10 @@ function importFromXML($ar,$contest,$site,$tomain=false) { return false; } } - if(!$tomain && $key == "langtable") { + if(!$tomain && $table == "langtable") { if(($ret=DBNewLanguage ($contest,$param, $conn))) { if($ret==2) { - echo "Language " . $param['langnumber'] ." updated<br>"; + LOGError("Language " . $param['langnumber'] ." updated"); } } else { @@ -366,10 +370,10 @@ function importFromXML($ar,$contest,$site,$tomain=false) { return false; } } - if(!$tomain && $key == "problemtable") { + if(!$tomain && $table == "problemtable") { if(($ret=DBNewProblem ($contest,$param, $conn))) { if($ret==2) - echo "Problem " . $param['problemnumber'] ." updated<br>"; + LOGError("Problem " . $param['problemnumber'] ." updated"); } else { if($conn != null) @@ -377,10 +381,10 @@ function importFromXML($ar,$contest,$site,$tomain=false) { return false; } } - + if(isset($param['usersitenumber']) && !isset($param['sitenumber'])) $param['sitenumber']=$param['usersitenumber']; if(!isset($param['sitenumber']) || $param['sitenumber'] != $site) continue; - if($tomain && $key == "sitetable") { + if($tomain && $table == "sitetable") { if(!DBNewSite($contest, $conn, $param)) { if($conn != null) DBExec($conn,"rollback work"); @@ -388,7 +392,7 @@ function importFromXML($ar,$contest,$site,$tomain=false) { } if(($ret=DBUpdateSite($param, $conn))) { if($ret==2) { - echo "Site " . $param["sitenumber"] . " updated<br>"; + LOGError("Site " . $param["sitenumber"] . " updated"); } } else { if($conn != null) @@ -396,10 +400,18 @@ function importFromXML($ar,$contest,$site,$tomain=false) { return false; } } - if($key == "usertable") { + if($tomain && $table == "sitetimetable") { + if(!DBUpdateSiteTime($contest, $param, $firsttimetime, $conn)) { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + $firsttimetime=false; + } + if($table == "usertable") { if(($ret=DBNewUser($param, $conn))) { if($ret==2) { - echo "User " . $param["usernumber"]."/".$param['sitenumber']. " updated<br>"; + LOGError("User " . $param["usernumber"]."/".$param['sitenumber']. " updated"); } } else { if($conn != null) @@ -407,10 +419,10 @@ function importFromXML($ar,$contest,$site,$tomain=false) { return false; } } - if($key == "tasktable") { + if($table == "tasktable") { if(($ret=DBNewTask ($param, $conn))) { if($ret==2) - echo "Task " . $param['tasknumber']."/".$param['sitenumber']." updated<br>"; + LOGError("Task " . $param['tasknumber']."/".$param['sitenumber']." updated"); } else { if($conn != null) @@ -418,10 +430,10 @@ function importFromXML($ar,$contest,$site,$tomain=false) { return false; } } - if($key == "clartable") { + if($table == "clartable") { if(($ret=DBNewClar ($param, $conn))) { if($ret==2) - echo "Clarification " . $param['clarnumber']."/".$param['sitenumber'] ." updated<br>"; + LOGError("Clarification " . $param['clarnumber']."/".$param['sitenumber'] ." updated"); } else { if($conn != null) @@ -429,10 +441,10 @@ function importFromXML($ar,$contest,$site,$tomain=false) { return false; } } - if($key == "runtable") { + if($table == "runtable") { if(($ret=DBNewRun ($param, $conn))) { if($ret==2) - echo "Run " . $param['runnumber'] ."/".$param['sitenumber']." updated<br>"; + LOGError("Run " . $param['runnumber'] ."/".$param['sitenumber']." updated"); } else { if($conn != null) @@ -453,7 +465,7 @@ function genSQLs($contest, $site, $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['sitetimetable']="select * from sitetimetable where contestnumber=$contest and sitenumber=$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['runtable']="select * from runtable where contestnumber=$contest and runsitenumber=$site and updatetime >= $updatetime"; diff --git a/src/site/getsite.php b/src/site/getsite.php index 27d581e..4cb247d 100644 --- a/src/site/getsite.php +++ b/src/site/getsite.php @@ -31,8 +31,8 @@ if($ct["contestlocalsite"]==$ct["contestmainsite"]) { ",session=".session_id(),2); if($fromsite != '' && is_numeric($fromsite) && $fromsite > 0) { if(isset($_POST)) { + $u = DBUserInfo($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], $_SESSION["usertable"]["usernumber"],null,false); if(isset($_POST['xml'])) { - $u = DBUserInfo($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], $_SESSION["usertable"]["usernumber"],null,false); // $fp=fopen('/tmp/aaa',"w"); fwrite($fp,$_POST['xml']); fclose($fp); $s = decryptData(rawurldecode($_POST['xml']),$u["userpassword"],'xml from local not ok'); // $fp=fopen('/tmp/aaa1',"w"); fwrite($fp,$s); fclose($fp); @@ -47,7 +47,7 @@ if($ct["contestlocalsite"]==$ct["contestmainsite"]) { } if(isset($_POST['updatetime']) && is_numeric($_POST['updatetime'])) { $xml = generateSiteXML($_SESSION["usertable"]["contestnumber"],$fromsite,$_POST['updatetime']); - echo encryptData($xml,myhash($_SESSION["usertable"]["userpassword"])); + echo encryptData($xml,$u["userpassword"]); } } else { echo "<!-- <ERROR3> ".session_id() . " " . session_id() . " -->\n"; |