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/team/clar.php | 113 +++++++++++++++++++++++++++++ src/team/files.php | 123 ++++++++++++++++++++++++++++++++ src/team/getfile.php | 47 ++++++++++++ src/team/header.php | 143 +++++++++++++++++++++++++++++++++++++ src/team/index.php | 22 ++++++ src/team/option.php | 21 ++++++ src/team/problem.php | 58 +++++++++++++++ src/team/run.php | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/team/score.php | 21 ++++++ src/team/task.php | 121 +++++++++++++++++++++++++++++++ 10 files changed, 865 insertions(+) create mode 100644 src/team/clar.php create mode 100644 src/team/files.php create mode 100644 src/team/getfile.php create mode 100644 src/team/header.php create mode 100644 src/team/index.php create mode 100644 src/team/option.php create mode 100644 src/team/problem.php create mode 100644 src/team/run.php create mode 100644 src/team/score.php create mode 100644 src/team/task.php (limited to 'src/team') diff --git a/src/team/clar.php b/src/team/clar.php new file mode 100644 index 0000000..a1e3972 --- /dev/null +++ b/src/team/clar.php @@ -0,0 +1,113 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require('header.php'); + +if (isset($_POST["message"]) && isset($_POST["problem"]) && isset($_POST["Submit"]) && is_numeric($_POST["problem"])) { + if ($_POST["confirmation"] == "confirm") { + $param['contest']=$_SESSION["usertable"]["contestnumber"]; + $param['site']=$_SESSION["usertable"]["usersitenumber"]; + $param['user']= $_SESSION["usertable"]["usernumber"]; + $param['problem'] = htmlspecialchars($_POST["problem"]); + $param['question'] = htmlspecialchars($_POST["message"]); + DBNewClar($param); + } + ForceLoad("clar.php"); +} +$_SESSION["popuptime"] = time(); +?> +
+ + + + + + + + + +\n"; +// echo " \n"; + echo " \n"; + echo " \n"; +// echo " \n"; + if ($clar[$i]["question"] == "") $clar[$i]["question"] = " "; + echo " \n"; + + if (trim($clar[$i]["answer"]) == "") $clar[$i]["answer"] = "Not answered yet"; + echo " \n"; + echo " \n"; +} +echo "
TimeProblemQuestionAnswer
" . $clar[$i]["number"] . "" . dateconvminutes($clar[$i]["timestamp"]) . "" . $clar[$i]["problem"] . "" . $clar[$i]["status"] . ""; +// echo "
" . $clar[$i]["question"] . "
"; + echo " \n"; + echo "
"; +// echo "
" . $clar[$i]["answer"] . "
"; + echo " \n"; + echo "
"; +if (count($clar) == 0) echo "
NO CLARIFICATIONS AVAILABLE
"; + +?> + +

To submit a clarification, just fill in the following fields
+
+ +
+ + + + + + + + + +
Problem: + +
Clarification: + +
+
+ +
+ + +
+
+ + + diff --git a/src/team/files.php b/src/team/files.php new file mode 100644 index 0000000..42fba28 --- /dev/null +++ b/src/team/files.php @@ -0,0 +1,123 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require 'header.php'; + +if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) + ForceLoad("../index.php"); +if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) + ForceLoad("../index.php"); + +if (isset($_GET["delete"]) && is_numeric($_GET["delete"])) { + DBBkpDelete($_GET["delete"],$_SESSION["usertable"]["usersitenumber"],$_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usernumber"]); + ForceLoad("files.php"); +} + +if (isset($_FILES["sourcefile"]) && isset($_POST["Submit"]) && $_FILES["sourcefile"]["name"]!="") { + if ($_POST["confirmation"] == "confirm") { + $type=myhtmlspecialchars($_FILES["sourcefile"]["type"]); + $size=myhtmlspecialchars($_FILES["sourcefile"]["size"]); + $name=myhtmlspecialchars($_FILES["sourcefile"]["name"]); + $temp=myhtmlspecialchars($_FILES["sourcefile"]["tmp_name"]); + + if ($size > $ct["contestmaxfilesize"]) { + LOGLevel("User {$_SESSION["usertable"]["username"]} tried to submit file " . + "$name with $size bytes ({$ct["contestmaxfilesize"]} max allowed).", 1); + MSGError("File size exceeds the limit allowed."); + ForceLoad("run.php"); + } + if (!is_uploaded_file($temp) || strlen($name)>100) { + IntrusionNotify("file upload problem."); + ForceLoad("../index.php"); + } + + DBNewBkp ($_SESSION["usertable"]["contestnumber"], + $_SESSION["usertable"]["usersitenumber"], + $_SESSION["usertable"]["usernumber"], + $name, + $temp, $size); + } + ForceLoad("files.php"); +} +?> +
+ + + + + + +\n"; + echo " \n"; + + echo " \n"; + echo "\n"; + echo " \n"; + +} +echo "
Bkp #TimeFile
" . $run[$i]["number"] . "" . dateconvsimple($run[$i]["timestamp"]) . ""; + echo $run[$i]["filename"] . ""; + + echo "
"; +if (count($run) == 0) echo "
NO BACKUPS AVAILABLE
"; + +?> + +

To erase a file, click on its number. To download a file, click on its name. +To submit a new backup file, just fill in the following fields:
+
+ + +
+ + + + + +
File (size restrictions apply): + +
+
+ +
+ +
+
+ + + diff --git a/src/team/getfile.php b/src/team/getfile.php new file mode 100644 index 0000000..8c594d0 --- /dev/null +++ b/src/team/getfile.php @@ -0,0 +1,47 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require 'header.php'; + +if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) + ForceLoad("../index.php"); +if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) + ForceLoad("../index.php"); + +$fn = tempnam("/tmp","bkp-"); +$fout = fopen($fn,"wb"); +echo $_POST; +echo $_POST['data']; +fwrite($fout,base64_decode($_POST['data'])); +fclose($fout); +$size=filesize($fn); +$name=$_POST['name']; + if ($size > $ct["contestmaxfilesize"] || strlen($name)>100 || strlen($name)<1) { + LOGLevel("User {$_SESSION["usertable"]["username"]} tried to submit file " . + ":${name}: with $size bytes.", 1); + MSGError("File size exceeds the limit allowed or invalid name."); + } else + + DBNewBkp ($_SESSION["usertable"]["contestnumber"], + $_SESSION["usertable"]["usersitenumber"], + $_SESSION["usertable"]["usernumber"], + $name, + $fn, $size); +@unlink($fn); +ForceLoad("../index.php"); +?> diff --git a/src/team/header.php b/src/team/header.php new file mode 100644 index 0000000..ec7352a --- /dev/null +++ b/src/team/header.php @@ -0,0 +1,143 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 21/jul/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(); +ob_end_flush(); +require_once('../version.php'); + +require_once("../globals.php"); +require_once("../db.php"); +$runteam='run.php'; + +echo "Team's Page\n"; +echo "\n"; +echo "\n"; + +//echo ""; + +if(!ValidSession()) { + InvalidSession("team/index.php"); + ForceLoad("../index.php"); +} +if($_SESSION["usertable"]["usertype"] != "team") { + IntrusionNotify("team/index.php"); + ForceLoad("../index.php"); +} + +echo "\n"; +echo "\n"; +echo "\n"; +echo "
"; +echo "\"\""; +echo "BOCA"; +echo "\n"; +echo "Username: " . $_SESSION["usertable"]["userfullname"] . " (site=".$_SESSION["usertable"]["usersitenumber"].")\n"; + +$ds = DIRECTORY_SEPARATOR; +if($ds=="") $ds = "/"; + +$runtmp = $_SESSION["locr"] . $ds . "private" . $ds . "runtmp" . $ds . "run-contest" . $_SESSION["usertable"]["contestnumber"] . + "-site". $_SESSION["usertable"]["usersitenumber"] . "-user" . $_SESSION["usertable"]["usernumber"] . ".php"; +$doslow=true; +if(file_exists($runtmp)) { + if(($strtmp = file_get_contents($runtmp,FALSE,NULL,-1,1000000)) !== FALSE) { + $postab=strpos($strtmp,"\t"); + $conf=globalconf(); + $strcolors = decryptData(substr($strtmp,$postab+1,strpos($strtmp,"\n")-$postab-1),$conf['key'],''); + $doslow=false; + $rn=explode("\t",$strcolors); + $n=count($rn); + for($i=1; $i<$n-1;$i++) { + echo "\"".$rn[$i]."\"\n"; + $i++; + } + } else unset($strtmp); +} +if($doslow) { + $run = DBUserRunsYES($_SESSION["usertable"]["contestnumber"], + $_SESSION["usertable"]["usersitenumber"], + $_SESSION["usertable"]["usernumber"]); + $n=count($run); + for($i=0; $i<$n;$i++) { + echo "\"".$run[$i]["colorname"]."\"\n"; + } +} + +if(!isset($_SESSION["popuptime"]) || $_SESSION["popuptime"] < time()-120) { + $_SESSION["popuptime"] = time(); + + if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) != null) { + $clar = DBUserClars($_SESSION["usertable"]["contestnumber"], + $_SESSION["usertable"]["usersitenumber"], + $_SESSION["usertable"]["usernumber"]); + for ($i=0; $i$_SESSION["usertable"]["userlastlogin"]-$st["sitestartdate"] && + $clar[$i]["anstime"] < $st['siteduration'] && + trim($clar[$i]["answer"])!='' && !isset($_SESSION["popups"]['clar' . $i . '-' . $clar[$i]["anstime"]])) { + $_SESSION["popups"]['clar' . $i . '-' . $clar[$i]["anstime"]] = "(Clar for problem ".$clar[$i]["problem"]." answered)\n"; + } + } + $run = DBUserRuns($_SESSION["usertable"]["contestnumber"], + $_SESSION["usertable"]["usersitenumber"], + $_SESSION["usertable"]["usernumber"]); + for ($i=0; $i$_SESSION["usertable"]["userlastlogin"]-$st["sitestartdate"] && + $run[$i]["anstime"] < $st['sitelastmileanswer'] && + $run[$i]["ansfake"]!="t" && !isset($_SESSION["popups"]['run' . $i . '-' . $run[$i]["anstime"]])) { + $_SESSION["popups"]['run' . $i . '-' . $run[$i]["anstime"]] = "(Run ".$run[$i]["number"]." result: ".$run[$i]["answer"] . ')\n'; + } + } + } + + $str = ''; + if(isset($_SESSION["popups"])) { + foreach($_SESSION["popups"] as $key => $value) { + if($value != '') { + $str .= $value; + $_SESSION["popups"][$key] = ''; + } + } + if($str != '') { + MSGError('YOU GOT NEWS:\n' . $str . '\n'); + } + } +} + +list($clockstr,$clocktype)=siteclock(); +echo " ".$clockstr." 
\n"; +echo "\n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo " \n"; +echo "
ProblemsRunsScoreClarificationsTasksBackupsOptionsLogout
\n"; +?> diff --git a/src/team/index.php b/src/team/index.php new file mode 100644 index 0000000..ec74ce9 --- /dev/null +++ b/src/team/index.php @@ -0,0 +1,22 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require('header.php'); +?> + + diff --git a/src/team/option.php b/src/team/option.php new file mode 100644 index 0000000..81e5879 --- /dev/null +++ b/src/team/option.php @@ -0,0 +1,21 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require('header.php'); +require('../optionlower.php'); +?> diff --git a/src/team/problem.php b/src/team/problem.php new file mode 100644 index 0000000..2627990 --- /dev/null +++ b/src/team/problem.php @@ -0,0 +1,58 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require('header.php'); + +if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) + ForceLoad("../index.php"); + +?> +
+ + + + + + + +\n"; +// echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + if (isset($prob[$i]["descoid"]) && $prob[$i]["descoid"] != null && isset($prob[$i]["descfilename"])) { + echo " \n"; + } + else + echo " \n"; + echo " \n"; +} +echo "
NameBasenameFullnameDescfile
" . $prob[$i]["number"] . "" . $prob[$i]["problem"]; + if($prob[$i]["color"] != "") + echo " \"".$prob[$i]["colorname"]."\"\n"; + echo "" . $prob[$i]["basefilename"] . " " . $prob[$i]["fullname"] . " " . basename($prob[$i]["descfilename"]) . "no description file available
"; +if (count($prob) == 0) echo "
NO PROBLEMS AVAILABLE YET
"; + +?> + + diff --git a/src/team/run.php b/src/team/run.php new file mode 100644 index 0000000..270a672 --- /dev/null +++ b/src/team/run.php @@ -0,0 +1,196 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 21/jul/2012 by cassio@ime.usp.br +require('header.php'); + +if (isset($_FILES["sourcefile"]) && isset($_POST["problem"]) && isset($_POST["Submit"]) && isset($_POST["language"]) && + is_numeric($_POST["problem"]) && is_numeric($_POST["language"]) && $_FILES["sourcefile"]["name"]!="") { + if ($_POST["confirmation"] == "confirm") { + if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) + ForceLoad("../index.php"); + + $prob = myhtmlspecialchars($_POST["problem"]); + $lang = myhtmlspecialchars($_POST["language"]); + + $type=myhtmlspecialchars($_FILES["sourcefile"]["type"]); + $size=myhtmlspecialchars($_FILES["sourcefile"]["size"]); + $name=myhtmlspecialchars($_FILES["sourcefile"]["name"]); + $temp=myhtmlspecialchars($_FILES["sourcefile"]["tmp_name"]); + + if ($size > $ct["contestmaxfilesize"]) { + LOGLevel("User {$_SESSION["usertable"]["username"]} tried to submit file " . + "$name with $size bytes ({$ct["contestmaxfilesize"]} max allowed).", 1); + MSGError("File size exceeds the limit allowed."); + ForceLoad($runteam); + } + if(strpos($name,' ') === true || strpos($temp,' ') === true) { + MSGError("File name cannot contain spaces."); + ForceLoad($runteam); + } + if (!is_uploaded_file($temp) || strlen($name)>100) { + IntrusionNotify("file upload problem."); + ForceLoad("../index.php"); + } + + + $ac=array('contest','site','user','problem','lang','filename','filepath'); + $ac1=array('runnumber','rundate','rundatediff','rundatediffans','runanswer','runstatus','runjudge','runjudgesite', + 'runjudge1','runjudgesite1','runanswer1','runjudge2','runjudgesite2','runanswer2', + 'autoip','autobegindate','autoenddate','autoanswer','autostdout','autostderr','updatetime'); + $param = array('contest'=>$_SESSION["usertable"]["contestnumber"], + 'site'=>$_SESSION["usertable"]["usersitenumber"], + 'user'=> $_SESSION["usertable"]["usernumber"], + 'problem'=>$prob, + 'lang'=>$lang, + 'filename'=>$name, + 'filepath'=>$temp); + DBNewRun ($param); + $_SESSION['forceredo']=true; + } + ForceLoad($runteam); +} + +$ds = DIRECTORY_SEPARATOR; +if($ds=="") $ds = "/"; + +$runtmp = $_SESSION["locr"] . $ds . "private" . $ds . "runtmp" . $ds . "run-contest" . $_SESSION["usertable"]["contestnumber"] . + "-site". $_SESSION["usertable"]["usersitenumber"] . "-user" . $_SESSION["usertable"]["usernumber"] . ".php"; +$redo = TRUE; +if(!isset($_SESSION['forceredo']) || $_SESSION['forceredo']==false) { + $actualdelay = 30; + if(file_exists($runtmp)) { + if(isset($strtmp) || (($strtmp = file_get_contents($runtmp,FALSE,NULL,-1,1000000)) !== FALSE)) { + list($d) = sscanf($strtmp,"%*s %d"); + if($d > time() - $actualdelay) { + $conf=globalconf(); + $strtmp = decryptData(substr($strtmp,strpos($strtmp,"\n")+1),$conf["key"],'runtmp'); + if($strtmp !== false) + $redo = FALSE; + } + } + } +} +if($redo) { + $_SESSION["popuptime"] = time(); + $_SESSION['forceredo']=false; + if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) + ForceLoad("../index.php"); + $strtmp="
\n\n \n \n\n". + " \n \n \n \n \n"; + $strcolors = "0"; + $run = DBUserRuns($_SESSION["usertable"]["contestnumber"], + $_SESSION["usertable"]["usersitenumber"], + $_SESSION["usertable"]["usernumber"]); + for ($i=0; $i\n"; + $strtmp .= " \n"; + $strtmp .= " \n"; + $strtmp .= " \n"; +// $strtmp .= " \n"; + if (trim($run[$i]["answer"]) == "") { + $run[$i]["answer"] = "Not answered yet"; + $strtmp .= " \n"; + $strtmp .= "\n"; + + $strtmp .= " \n"; + } +$strtmp .= "
Run #TimeProblemLanguageAnswerFile
" . dateconvminutes($run[$i]["timestamp"]) . "" . $run[$i]["problem"] . "" . $run[$i]["language"] . "" . $run[$i]["status"] . "Not answered yet"; + } + else { + $strtmp .= " " . $run[$i]["answer"]; + if($run[$i]['yes']=='t') { + $strtmp .= " \"".$run[$i]["colorname"]."\""; + $strcolors .= "\t" . $run[$i]["colorname"] . "\t" . $run[$i]["color"]; + } + } + $strtmp .= ""; + $strtmp .= $run[$i]["filename"] . ""; + + $strtmp .= "
"; +if (count($run) == 0) $strtmp .= "
NO RUNS AVAILABLE
"; + +$strtmp .= "

To submit a program, just fill in the following fields:
\n". +"
\n". +" \n". +"
\n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +" \n". +"
Problem:\n". +" \n". +"
Language: \n". +" \n". +"
Source code:\n". +" \n". +"
\n". +"
\n". +" \n". +"
\n". +" \n". +" \n". +"
\n". +"
\n"; + $conf=globalconf(); + $strtmp1 = " \t" . encryptData($strcolors,$conf["key"],false) . "\n" . encryptData($strtmp,$conf["key"],false); + $randnum = session_id() . "_" . rand(); + if(file_put_contents($runtmp . "_" . $randnum, $strtmp1,LOCK_EX)===FALSE) { + if(!isset($_SESSION['writewarn'])) { + LOGError("Cannot write to the user-run cache file $runtmp -- performance might be compromised"); + $_SESSION['writewarn']=true; + } + } + @rename($runtmp . "_" . $randnum, $runtmp); +} +echo $strtmp; +?> + + + + diff --git a/src/team/score.php b/src/team/score.php new file mode 100644 index 0000000..ef9675d --- /dev/null +++ b/src/team/score.php @@ -0,0 +1,21 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require('header.php'); +require('../scorelower.php'); +?> diff --git a/src/team/task.php b/src/team/task.php new file mode 100644 index 0000000..b23605c --- /dev/null +++ b/src/team/task.php @@ -0,0 +1,121 @@ +. +//////////////////////////////////////////////////////////////////////////////// +// Last modified 05/aug/2012 by cassio@ime.usp.br +require('header.php'); + +if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) + ForceLoad("../index.php"); +if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) + ForceLoad("../index.php"); + +if (isset($_POST["Submit"]) && $_POST["Submit"]=="S.O.S.") { + if ($_POST["confirmation"] == "confirm") { + $param['contest']=$_SESSION["usertable"]["contestnumber"]; + $param['site']=$_SESSION["usertable"]["usersitenumber"]; + $param['user']=$_SESSION["usertable"]["usernumber"]; + $param['desc']= "Staff assistance"; + DBNewTask ($param); + } + ForceLoad("task.php"); +} +if (isset($_FILES["filename"]) && isset($_POST["Submit"]) && $_FILES["filename"]["name"]!="") { + if ($_POST["confirmation"] == "confirm") { + $type=myhtmlspecialchars($_FILES["filename"]["type"]); + $size=myhtmlspecialchars($_FILES["filename"]["size"]); + $name=myhtmlspecialchars($_FILES["filename"]["name"]); + $temp=myhtmlspecialchars($_FILES["filename"]["tmp_name"]); + + if ($size > $ct["contestmaxfilesize"]) { + LOGLevel("User {$_SESSION["usertable"]["username"]} tried to print file " . + "$name with $size bytes ({$ct["contestmaxfilesize"]} max allowed).", 1); + MSGError("File size exceeds the limit allowed."); + ForceLoad("task.php"); + } + if (!is_uploaded_file($temp)) { + IntrusionNotify("Printing file upload problem"); + ForceLoad("../index.php"); + } + $param['contest']=$_SESSION["usertable"]["contestnumber"]; + $param['site']=$_SESSION["usertable"]["usersitenumber"]; + $param['user']=$_SESSION["usertable"]["usernumber"]; + $param['desc']= "File to print"; + $param['filename']=$name; + $param['filepath']=$temp; + DBNewTask ($param); + } + ForceLoad("task.php"); +} +?> +
+ + + + + + + + +\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; +} +echo "
Task #TimeDescriptionFileStatus
" . $task[$i]["number"] . "" . dateconvminutes($task[$i]["timestamp"]) . "" . $task[$i]["description"] . "" . $task[$i]["filename"] . " " . $task[$i]["status"] . "
"; +if (count($task) == 0) echo "
NO TASKS FOUND
"; +?> + +

To submit a file for printing, just fill in the following field:
+
+ + +
+ + + + + +
File name: + +
+
+ +
+ + +
+

If you needed staff assistance, please click +on the button above and wait.
+ +
+
+ + + -- cgit v1.2.3