From 0f0a9f31132ea420a63cf492dba5cd1db7e56c40 Mon Sep 17 00:00:00 2001 From: Carlos Joa Date: Thu, 19 Oct 2017 11:37:31 -0400 Subject: Add new option to download contest results in S4RiS JSON format Fix user institution in webcast report Add flag for Puerto Rico --- src/admin/report.php | 4 ++ src/admin/report/s4ris.php | 162 +++++++++++++++++++++++++++++++++++++++++++ src/admin/report/webcast.php | 4 +- 3 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 src/admin/report/s4ris.php (limited to 'src/admin') diff --git a/src/admin/report.php b/src/admin/report.php index fe4b88d..895cac6 100644 --- a/src/admin/report.php +++ b/src/admin/report.php @@ -58,6 +58,10 @@ if (isset($_GET)) { "'Webcast File','width=800,height=600,scrollbars=yes,toolbar=yes,menubar=yes,". "resizable=yes')\">Webcast File
\n"; + echo " S4RiS File
\n"; + echo " Statistics
\n"; diff --git a/src/admin/report/s4ris.php b/src/admin/report/s4ris.php new file mode 100644 index 0000000..eaa0264 --- /dev/null +++ b/src/admin/report/s4ris.php @@ -0,0 +1,162 @@ +. +//////////////////////////////////////////////////////////////////////////////// +//Last updated 18/oct/2017 + +require('header.php'); + +$contest = $_SESSION["usertable"]["contestnumber"]; +$site = $_SESSION["usertable"]["usersitenumber"]; + +$ct = DBContestInfo($contest); +if(($st = DBSiteInfo($contest, $site)) == null) + ForceLoad("../index.php"); + +//if(isset($_GET['full']) && $_GET['full'] > 0) + $freezeTime = $st['siteduration']; +//else +// $freezeTime = $st['sitelastmilescore']; + + +$obj = array( + 'contestName' => $ct['contestname'], + 'freezeTimeMinutesFromStart' => $ct['contestlastmilescore']/60 +); + +$c = DBConnect(); + +$r = DBExec($c, + 'SELECT problemname FROM problemtable' . + ' WHERE contestnumber = ' . $contest . + ' AND problemnumber > 0'); + +$problems = array(); +$numProblems = DBnlines($r); +for ($i = 0; $i < $numProblems; $i++) { + $a = DBRow($r, $i); + $problems[$i] = $a['problemname']; +} + +$obj['problemLetters'] = $problems; + + +$r = DBExec($c, + 'SELECT * FROM usertable' . + ' WHERE contestnumber = ' . $contest . + ' AND userenabled = \'t\' AND usersitenumber = ' . $site . + ' AND usertype = \'team\''); + +$contestans = array(); +$numTeams = DBnlines($r); +for ($i = 0; $i < $numTeams; $i++) { + $a = cleanuserdesc(DBRow($r, $i)); + //$teamID = $a['username']; + + if (isset($a['usershortname'])) + $teamName = $a['usershortname']; + else + $teamName = $a['userfullname']; + + if (isset($a['usershortinstitution'])) { + $teamName .= ' @ ' . $a['usershortinstitution']; + if (isset($a['userflag'])) { + $teamName .= '.' . $a['userflag']; + } + } + + $contestants[$i] = $teamName; +} + +$obj['contestants'] = $contestants; + +$run = DBAllRunsInSites($contest, $site, 'report'); +$numRuns = count($run); + +$runs = array(); +for ($i = 0; $i < $numRuns; $i++) { + $runTime = dateconvminutes($run[$i]['timestamp']); + if ($runTime > $freezeTime) { + continue; + } + + $u = DBUserInfo($contest, $site, $run[$i]['user']); + + if(isset($u['usershortname'])) + $runTeam = $u['usershortname']; + else + $runTeam = $u['userfullname']; + + if(isset($u['usershortinstitution'])) { + $runTeam .= ' @ ' . $u['usershortinstitution']; + if (isset($a['userflag'])) { + $runTeam .= '.' . $a['userflag']; + } + } + + $runProblem = $run[$i]['problem']; + + $runs[$i] = array( + 'contestant' => $runTeam, + 'problemLetter' => $runProblem, + 'timeMinutesFromStart' => $runTime, + 'success' => $run[$i]['yes'] == 't' + ); +} + +$obj['runs'] = $runs; + + + +$ds = DIRECTORY_SEPARATOR; +if($ds=="") $ds = "/"; + +if(isset($_SESSION['locr'])) { + $s4risparentdir = $_SESSION['locr'] . $ds. 'private'; + $s4risdir = $s4risparentdir .$ds. 's4ris'; +} else { + $s4risparentdir = $locr . $ds . 'private'; + $s4risdir = $s4risparentdir . $ds . 's4ris'; +} +cleardir($s4risdir); +@mkdir($s4risdir); +if(is_writable($s4risdir)) { + file_put_contents($s4risdir . $ds . 'results.json', json_encode($obj, JSON_PRETTY_PRINT)); + if(@create_zip($s4risparentdir,array('s4ris'), $s4risdir . ".tmp") != 1) { + LOGError("Cannot create score s4risdir.tmp file"); + MSGError("Cannot create score s4risdir.tmp file"); + } else { + $cf = globalconf(); + file_put_contents($s4risdir . ".tmp", encryptData(file_get_contents($s4risdir . ".tmp"), $cf["key"],false)); + @rename($s4risdir . ".tmp",$s4risdir . '.zip'); + } + echo "


"; + echo "CLICK TO DOWNLOAD"; + echo "
"; +} else { + LOGError('Error creating the folder for the ZIP file: '. $s4risdir); + MSGError('Error creating the folder for the ZIP file: '.$s4risdir); + ForceLoad("../index.php"); +} +echo "


\n"; +echo "


\n"; +echo "


\n"; +echo "


\n"; +echo "


\n"; +echo "


\n"; +?> + diff --git a/src/admin/report/webcast.php b/src/admin/report/webcast.php index 5a595fc..0f85317 100644 --- a/src/admin/report/webcast.php +++ b/src/admin/report/webcast.php @@ -46,7 +46,7 @@ $r = DBExec($c, ' AND problemnumber > 0'); $numProblems = DBnlines($r); $r = DBExec($c, - 'SELECT username, userfullname FROM usertable' . + 'SELECT * FROM usertable' . ' WHERE contestnumber = ' . $contest . ' AND userenabled = \'t\' AND usersitenumber = ' . $site . ' AND usertype = \'team\''); @@ -57,7 +57,7 @@ $contestfile = $contestfile . $numProblems . "\n"; for ($i = 0; $i < $numTeams; $i++) { - $a = DBRow($r, $i); + $a = cleanuserdesc(DBRow($r, $i)); $teamID = $a['username']; if(isset($a['usershortname'])) $teamName = $a['usershortname']; -- cgit v1.2.3