From be2491b093b1f0ca430bede679ecbb670041e483 Mon Sep 17 00:00:00 2001 From: cassio Date: Tue, 2 Jul 2013 09:46:45 +0400 Subject: restructuring of boca's git --- src/fextdata.php | 580 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 580 insertions(+) create mode 100644 src/fextdata.php (limited to 'src/fextdata.php') diff --git a/src/fextdata.php b/src/fextdata.php new file mode 100644 index 0000000..2799bec --- /dev/null +++ b/src/fextdata.php @@ -0,0 +1,580 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 21/jul/2012 by cassio@ime.usp.br + +function getMainXML($username,$sess,$pass,$pass2) { + $c = DBConnect(); + if ($c==null) return array(false,""); + $contest = $_SESSION["usertable"]["contestnumber"]; + $r = DBExec($c, "select * from contesttable where contestnumber=$contest"); + if (DBnLines($r)==0) { + echo "Unable to find the contest $contest in the database.\n"; + exit; + } + $ct = DBRow($r,0); + $localsite = $ct["contestlocalsite"]; + $mainsite = $ct["contestmainsite"]; + $siteurl = $ct['contestmainsiteurl'] . '/site/get.php'; +// if ($mainsite==$localsite) return array(true,""); +/* + $r = DBExec($c, "select * from sitetable where sitenumber=".$mainsite." and contestnumber=$contest"); + if (DBnLines($r)==0) { + echo "Unable to find the main site in the database (site=$mainsite, contest=$contest).\n"; + exit; + } + $st = DBRow($r,0); + $siteurl = $st["siteip"] . '/site/get.php'; +*/ + if(substr($siteurl,0,7) != 'http://') + $siteurl = 'http://' . $siteurl; + if($sess == '') { +// MSGError('session empty'); + $s = file_get_contents($siteurl); + if($s === false) return array(false,'',''); +// MSGError($s); + $t = strtok($s," \t"); + while($t !== false && substr($t,0,8) != '\n"; + if(substr($t,0,8) == ' array( + 'method' => 'GET', + 'header' => 'Cookie: PHPSESSID=' . $sess + ) + ); + $context = stream_context_create($opts); + $s = file_get_contents($siteurl . '?name='. $username . '&password=' . + $pass . '&check=nocheck', 0, $context); + } else { + $data = encryptData(generateXML($contest),myhash($pass2)); + $data_url = http_build_query(array('xml' => $data, + 'name' => $username, + 'password' => $pass, + 'check' => myhash($pass . $pass2) + )); + $opts = array( + 'http' => array( + 'method' => 'POST', + 'header' => 'Cookie: PHPSESSID=' . $sess . "\r\nContent-Type: application/x-www-form-urlencoded", + 'content' => $data_url + )); + $context = stream_context_create($opts); + $s = file_get_contents($siteurl, 0, $context); + } + if($s === false) return array(false,"",''); +// MSGError('OPA1: ' . $s); + $t = strtok($s," \t"); + while($t !== false && substr($t,0,8) != '\n"; + if(substr($t,0,6) == "$val) { + if($values[$val[0]]['type'] != 'open') continue; + if($key == "XML") continue; + if($key != $orderkeys[$keyindex]) continue; + if(isset($acr[$key])) + $ac = $acr[$key]; + else + continue; + foreach($val as $k=>$v) { + if($values[$v]['type'] != 'open') continue; + if(count($val) > $k+1) { + $param = array(); + if(isset($ac['site'])) { + for($i=$v; $i < $val[$k+1]; $i++) { + $p = strtolower($values[$i]["tag"]); + if($p=='site') { + if($values[$i]["type"]=="complete" && isset($values[$i]["value"])) { + $tmp = sanitizeText(trim(implode('',explode('\n',$values[$i]["value"])))); + if(is_array($ac['site']) && in_array($tmp,$ac['site'])) { + $param['site'] = $tmp; + } else { + if($ac['site']==-1 || ($ac['site']==-2 && $tmp==$localsite) || ($ac['site']==-3 && $tmp!=$localsite) || + ($ac['site']>0 && $ac['site']==$tmp)) + $param['site'] = $tmp; + } + } + } + } + } + for($i=$v; $i < $val[$k+1]; $i++) { + $p = strtolower($values[$i]["tag"]); + if(isset($ac[$p]) && $p != 'site') { + if($values[$i]["type"]=="complete" && isset($values[$i]["value"])) { + if(is_string($ac[$p])) $param[$p] = $ac[$p]; + else { + $tmp = sanitizeText(trim(implode('',explode('\n',$values[$i]["value"])))); + if(is_array($ac[$p]) && in_array($tmp,$ac[$p])) { + $param[$p] = $tmp; + } else { + if($ac[$p]==-1 || ($ac[$p]==-2 && $tmp==$localsite) || ($ac[$p]==-3 && $tmp!=$localsite) || + ($ac[$p]==0 && isset($param['site'])) || ($ac[$p]>0 && $ac[$p]==$tmp)) + $param[$p] = $tmp; + } + } + } + } + } +// echo "\nKEY KEY KEY\n"; +// print_r($key); +// echo "\nVAL VAL VAL\n"; +// print_r($val); +// echo "\n"; +// print_r($param); + $param['contestnumber'] = $contest; + if($key == "CONTESTREC") { + $param['number'] = $contest; + if($contest == 0) { + $nc=1; + $contest = DBNewContest($param, $conn); + if($contest > 0) + echo "
Contest $contest created (not active by default)
"; + else { + echo "
Error creating contest
"; + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + $param['number'] = $contest; + $param['contestnumber'] = $contest; + if(($ret=DBUpdateContest($param, $conn))) { + if($ret==2) + echo "
Contest $contest updated
"; + } + else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + if(!isset($param['number']) || count($param) < 2) continue; + if($key == "SITEREC") { + if(!DBNewSite($contest, $conn, $param)) { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + if(($ret=DBUpdateSite($param, $conn))) { + if($ret==2) { + echo "Site " . $param["number"] . " updated
"; + } + } else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + if(isset($nsitetime[$param["number"]])) { + if(($qtd=DBRenewSiteTime($sitetime[$param["number"]], $conn))) { + if($qtd==2) { + echo "Time for site " . $param["number"] . " updated
"; + } + } else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + } + if($key == "SITETIME") { + if(isset($param['site']) && is_numeric($param['site'])) { + $s = $param['site']; + if(!isset($nsitetime[$s])) $nsitetime[$s]=0; + $sitetime[$s][$nsitetime[$s]] = $param; + $nsitetime[$s]++; + } + } + if($key == "USERREC") { + if(($ret=DBNewUser($param, $conn))) { + if($ret==2) { + echo "User " . $param["number"]."/".$param['site']. " updated
"; + } + } else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + if($key == "ANSWERREC") { + if(($ret=DBNewAnswer ($contest, $param, $conn))) { + if($ret==2) { + echo "Answer " . $param["number"] . " updated
"; + } + } + else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + if($key == "LANGUAGEREC") { + if(($ret=DBNewLanguage ($contest,$param, $conn))) { + if($ret==2) { + echo "Language " . $param['number'] ." updated
"; + } + } + else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + if($key == "PROBLEMREC") { + if(($ret=DBNewProblem ($contest,$param, $conn))) { + if($ret==2) + echo "Problem " . $param['number'] ." updated
"; + } + else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + if($key == "TASKREC") { + if(($ret=DBNewTask ($param, $conn))) { + if($ret==2) + echo "Task " . $param['number']."/".$param['site']." updated
"; + } + else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + if($key == "CLARREC") { + if(($ret=DBNewClar ($param, $conn))) { + if($ret==2) + echo "Clarification " . $param['number']."/".$param['site'] ." updated
"; + } + else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + if($key == "RUNREC") { + if(($ret=DBNewRun ($param, $conn))) { + if($ret==2) + echo "Run " . $param['number'] ."/".$param['site']." updated
"; + } + else { + if($conn != null) + DBExec($conn,"rollback work"); + return false; + } + } + } + } + } + } +// DBExec($conn,"commit work","importFromXML(commit)"); + return true; +} + + +function generateXML($contest,$localsite=0,$sites=null,$reduced=false) { + $str = "\n"; + $ac['CONTESTREC']=array('number'=>'contestnumber', + 'name'=>'contestname', + 'startdate'=>'conteststartdate', + 'duration'=>'contestduration', + 'lastmileanswer'=>'contestlastmileanswer', + 'lastmilescore'=>'contestlastmilescore', + 'penalty'=>'contestpenalty', + 'maxfilesize'=>'contestmaxfilesize', + 'updatetime'=>'updatetime', + 'mainsite'=>'contestmainsite', + 'mainsiteurl'=>'contestmainsiteurl', + 'keys'=>'contestkeys', + 'unlockkey'=>'contestunlockkey', + 'updatetime'=>'updatetime'); + if($localsite > 0) + $ac['CONTESTREC']['localsite'] = array($localsite,2); + $sql['CONTESTREC']="select * from contesttable where contestnumber=$contest"; + $ac['ANSWERREC']=array('number'=>'answernumber', + 'name'=>'runanswer', + 'yes'=>'yes', + 'updatetime'=>'updatetime'); + $sql['ANSWERREC']="select * from answertable where contestnumber=$contest and fake='f'"; + + $ac['LANGUAGEREC']=array('number'=>'langnumber', + 'name'=>'langname', + 'updatetime'=>'updatetime'); + $sql['LANGUAGEREC']="select * from langtable where contestnumber=$contest"; + + $ac['PROBLEMREC']=array('number'=>'problemnumber', + 'name'=>'problemname', + 'fullname'=>'problemfullname', + 'basename'=>'problembasefilename', + 'inputfilename'=>'probleminputfilename', + 'inputfilepath'=>array('probleminputfile',1), + 'solfilename'=>'problemsolfilename', + 'solfilepath'=>array('problemsolfile',1), + 'descfilename'=>'problemdescfilename', + 'descfilepath'=>array('problemdescfile',1), + 'tl'=>'problemtimelimit', + 'colorname'=>'problemcolorname', + 'color'=>'problemcolor', + 'fake'=>'fake', + 'updatetime'=>'updatetime'); + $sql['PROBLEMREC']="select * from problemtable where contestnumber=$contest and fake='f'"; + + $sql['SITEREC']="select * from sitetable where contestnumber=$contest"; + $ac['SITEREC']=array('sitenumber'=>'sitenumber', + 'site'=>'sitenumber', + 'number'=>'sitenumber', + 'sitename'=>'sitename', + 'siteip'=>'siteip', + 'siteduration'=>'siteduration', + 'sitelastmileanswer'=>'sitelastmileanswer', + 'sitelastmilescore'=>'sitelastmilescore', + 'sitejudging'=>'sitejudging', + 'sitetasking'=>'sitetasking', + 'siteautoend'=>'siteautoend', + 'siteglobalscore'=>'siteglobalscore', + 'siteactive'=>'siteactive', + 'sitescorelevel'=>'sitescorelevel', + 'sitepermitlogins'=>'sitepermitlogins', + 'siteautojudge'=>'siteautojudge', + 'sitenextuser'=>'sitenextuser', + 'sitenextclar'=>'sitenextclar', + 'sitenextrun'=>'sitenextrun', + 'sitenexttask'=>'sitenexttask', + 'sitemaxtask'=>'sitemaxtask', + 'sitechiefname'=>'sitechiefname', + 'updatetime'=>'updatetime'); + $sql['SITETIME']="select * from sitetimetable where contestnumber=$contest"; + $ac['SITETIME']=array('site'=>'sitenumber', + 'number'=>'sitenumber', + 'start'=>'sitestartdate', + 'enddate'=>'siteenddate', + 'updatetime'=>'updatetime'); + + $sql['USERREC']="select * from usertable where contestnumber=$contest"; + $ac['USERREC']=array('site'=>'usersitenumber', + 'user'=>'usernumber', + 'number'=>'usernumber', + 'username'=>'username', + 'updatetime'=>'updatetime', + 'usericpcid'=>'usericpcid', + 'userfull'=>'userfullname', + 'userdesc'=>'userdesc', + 'type'=>'usertype', + 'enabled'=>'userenabled', + 'multilogin'=>'usermultilogin', +// 'pass'=>'userpassword', +// 'usersession'=>'usersession', + 'userip'=>'userip', + 'userlastlogin'=>'userlastlogin', + 'userlastlogout'=>'userlastlogout', + 'permitip'=>'userpermitip', + 'updatetime'=>'updatetime'); + + if(!$reduced) { + $sql['CLARREC']="select * from clartable where contestnumber=$contest"; + $ac['CLARREC']=array('site'=>'clarsitenumber', + 'user'=>'usernumber', + 'number'=>'clarnumber', + 'problem'=>'clarproblem', + 'question'=>'clardata', + 'clarnumber'=>'clarnumber', + 'clardate'=>'clardate', + 'clardatediff'=>'clardatediff', + 'clardatediffans'=>'clardatediffans', + 'claranswer'=>'claranswer', + 'clarstatus'=>'clarstatus', + 'clarjudge'=>'clarjudge', + 'clarjudgesite'=>'clarjudgesite', + 'updatetime'=>'updatetime'); + + $sql['RUNREC']="select * from runtable where contestnumber=$contest"; + if(is_array($sites)) { + $sql['RUNREC'] .= " and (1=0"; + foreach($sites as $k => $v) { + $sql['RUNREC'] .= " or runsitenumber=$v"; + } + $sql['RUNREC'] .= ")"; + } + $ac['RUNREC']=array('site'=>'runsitenumber', + 'user'=>'usernumber', + 'number'=>'runnumber', + 'runnumber'=>'runnumber', + 'problem'=>'runproblem', + 'lang'=>'runlangnumber', + 'filename'=>'runfilename', + 'filepath'=>array('rundata',1), + 'rundate'=>'rundate', + 'rundatediff'=>'rundatediff', + 'rundatediffans'=>'rundatediffans', + 'runanswer'=>'runanswer', + 'runstatus'=>'runstatus', + 'runjudge'=>'runjudge', + 'runjudgesite'=>'runjudgesite', + 'runjudge1'=>'runjudge1', + 'runjudgesite1'=>'runjudgesite1', + 'runanswer1'=>'runanswer1', + 'runjudge2'=>'runjudge2', + 'runjudgesite2'=>'runjudgesite2', + 'runanswer2'=>'runanswer2', + 'autoip'=>'autoip', + 'autobegindate'=>'autobegindate', + 'autoenddate'=>'autoenddate', + 'autoanswer'=>'autoanswer', + 'autostdout'=>array('autostdout',1), + 'autostderr'=>array('autostderr',1), + 'updatetime'=>'updatetime'); + $sql['TASKREC']="select * from tasktable where contestnumber=$contest"; + if(is_array($sites)) { + $sql['TASKREC'] .= " and (1=0"; + foreach($sites as $k => $v) { + $sql['TASKREC'] .= " or sitenumber=$v"; + } + $sql['TASKREC'] .= ")"; + } + $ac['TASKREC']=array( + 'site'=>'sitenumber', + 'user'=>'usernumber', + 'desc'=>'taskdesc', + 'number'=>'tasknumber', + 'tasknumber'=>'tasknumber', + 'color'=>'color', + 'colorname'=>'colorname', + 'updatetime'=>'updatetime', + 'filename'=>'taskfilename', + 'filepath'=>array('taskdata',1), + 'sys'=>'tasksystem', + 'status'=>'taskstatus', + 'taskdate'=>'taskdate', + 'taskdatediff'=>'taskdatediff', + 'taskdatediffans'=>'taskdatediffans', + 'taskstaffnumber'=>'taskstaffnumber', + 'taskstaffsite'=>'taskstaffsite'); + } + $c = DBConnect(); + if ($c==null) return null; + DBExec($c, "begin work"); + foreach($ac as $kk => $vv) { + $r = DBExec ($c, $sql[$kk], "generateXML($kk)"); + $n = DBnLines ($r); + for($i=0; $i<$n; $i++) { + $atual = DBRow($r,$i); + $str .= "<" . $kk . ">\n"; + foreach($vv as $key => $val) { + if(is_array($val)) { + if(is_array($val[0])) { + if(!isset($atual['site']) || in_array($atual['site'],$val[0])) + if(isset($atual[$val[1]])) + $str .= " <" . $key . ">" . $atual[$val[1]] . "\n"; + } + if($val[1]==2) { + $str .= " <" . $key . ">" . $val[0] . "\n"; + } + if($val[1]==1) { + if(isset($atual[$val[0]]) && $atual[$val[0]]!='') { + if (($lo = DB_lo_open ($c, $atual[$val[0]], "r")) !== false) { + $str .= " <" . $key . ">base64:" . base64_encode(DB_lo_read($contest,$lo)) . "\n"; + DB_lo_close($lo); + } + } + } + } else { + if(isset($atual[$val])) + $str .= " <" . $key . ">" . $atual[$val] . "\n"; + } + } + $str .= "\n"; + } + } + $str .= "\n"; + DBExec($c,"commit work","generateXML(commit)"); + return $str; +} +?> -- cgit v1.2.3