aboutsummaryrefslogtreecommitdiff
path: root/src/fextdata.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/fextdata.php')
-rw-r--r--src/fextdata.php312
1 files changed, 196 insertions, 116 deletions
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);
}