. //////////////////////////////////////////////////////////////////////////////// //Last updated 02/sep/2013 by cassio@ime.usp.br require_once("db.php"); if(isset($_SESSION["locr"])) $locr=$_SESSION["locr"]; else $locr='.'; if(isset($_GET["clock"]) && $_GET["clock"]==1) { 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(); if(!isset($contest) || !isset($localsite)) { $ct=DBGetActiveContest(); $contest=$ct['contestnumber']; $localsite=$ct['contestlocalsite']; } if (($blocal = DBSiteInfo($contest, $localsite)) == null) { echo "0"; exit; } if(isset($blocal['currenttime'])) echo $blocal["currenttime"]; else echo "0"; exit; } if(isset($_GET['remote']) && is_numeric($_GET['remote'])) { 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(); if (isset($_SESSION["usertable"])) { $_SESSION["usertable"] = DBUserInfo($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], $_SESSION["usertable"]["usernumber"]); } else { IntrusionNotify("scoretable1"); ForceLoad("index.php"); } if(!isset($_SESSION['usertable']['usertype']) || $_SESSION["usertable"]["usertype"] != "score") { IntrusionNotify("scoretable2"); ForceLoad("index.php"); } } if(!ValidSession()) { InvalidSession("scoretable.php"); ForceLoad("index.php"); } $loc = $_SESSION["loc"]; if(!isset($detail)) $detail=true; if(!isset($final)) $final=false; $scoredelay["admin"] = 2; $scoredelay["score"] = 30; $scoredelay["team"] = 30; $scoredelay["judge"] = 10; $scoredelay["staff"] = 60; $actualdelay = 60; if(isset($scoredelay[$_SESSION["usertable"]["usertype"]])) $actualdelay = $scoredelay[$_SESSION["usertable"]["usertype"]]; $ds = DIRECTORY_SEPARATOR; if($ds=="") $ds = "/"; $scoretmp = $_SESSION["locr"] . $ds . "private" . $ds . "scoretmp" . $ds . $_SESSION["usertable"]["usertype"] . ".php"; $redo = TRUE; if(file_exists($scoretmp)) { if(($strtmp = file_get_contents($scoretmp,FALSE,NULL,-1,100000)) !== FALSE) { list($d) = sscanf($strtmp,"%*s %d"); if($d > time() - $actualdelay) { $redo = FALSE; } } } if($_SESSION["usertable"]["usertype"]=='score' || $_SESSION["usertable"]["usertype"]=='admin' || (isset($_GET["remote"]) && is_numeric($_GET["remote"]))) { $privatedir = $_SESSION['locr'] . $ds . "private"; $remotedir = $_SESSION['locr'] . $ds . "private" . $ds . "remotescores"; $destination = $remotedir . $ds ."scores.zip"; if(is_writable($remotedir)) { if($redo || !is_readable($destination)) { if (($s = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) ForceLoad("index.php"); $level=$s["sitescorelevel"]; $data0 = array(); if($level>0) { list($score,$data0) = DBScoreSite($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], 0, -1); } $ct=DBGetActiveContest(); $localsite=$ct['contestlocalsite']; $fname = $privatedir . $ds . "score_localsite_" . $localsite . "_"; // . md5($_SERVER['HTTP_HOST']); @file_put_contents($fname . ".tmp",base64_encode(serialize($data0))); @rename($fname . ".tmp",$fname . ".dat"); $data0 = array(); if($level>0) { list($score,$data0) = DBScoreSite($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], 1, -1); } $ct=DBGetActiveContest(); $localsite=$ct['contestlocalsite']; $fname = $remotedir . $ds . "score_site" . $localsite . "_" . $localsite . "_"; // . md5($_SERVER['HTTP_HOST']); @file_put_contents($fname . ".tmp",base64_encode(serialize($data0))); @rename($fname . ".tmp",$fname . ".dat"); if(@create_zip($remotedir,glob($remotedir . '/*.dat'),$fname . ".tmp") != 1) { LOGError("Cannot create score zip file"); if(@create_zip($remotedir,array(),$fname . ".tmp") == 1) @rename($fname . ".tmp",$destination); } else { @rename($fname . ".tmp",$destination); } scoretransfer($destination); } } } if(isset($_GET["remote"])) { if(is_numeric($_GET["remote"])) { if($_GET["remote"]==-42) { echo file_get_contents($destination); } else { if (($s = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) ForceLoad("index.php"); $level=$s["sitescorelevel"]; $score = array(); if($level>0) { list($score,$data0) = DBScoreSite($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], 1, -1, $_GET["remote"]); } echo base64_encode(serialize($score)); } } else { echo base64_encode(serialize(array())); } exit; } if(!$redo) { $conf=globalconf(); $strtmp = decryptData(substr($strtmp,strpos($strtmp,"\n")),$conf["key"],'score'); if($strtmp=="") $redo=TRUE; } if($redo) { $strtmp = "\n"; $pr = DBGetProblems($_SESSION["usertable"]["contestnumber"]); $ct=DBGetActiveContest(); $contest=$ct['contestnumber']; $duration=$ct['contestduration']; if(!isset($hor)) $hor = -1; if($hor>$duration) $hor=$duration; $level=$s["sitescorelevel"]; if($level<=0) $level=-$level; else { $des=true; } if (($s = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) ForceLoad("index.php"); $score = DBScore($_SESSION["usertable"]["contestnumber"], $ver, $hor*60, $s["siteglobalscore"]); if ($_SESSION["usertable"]["usertype"]!="score" && $_SESSION["usertable"]["usertype"]!="admin" && $level>3) $level=3; $minu = 3; $rn = DBRecentNews($_SESSION["usertable"]["contestnumber"], $_SESSION["usertable"]["usersitenumber"], $ver, $minu); if(count($rn)>0 && $level>3) { $strtmp .= ""; $strtmp .= "\n"; for($i=0; $i"; } else $strtmp .= "\"\"\n"; $strtmp .= $rn[$i]["problemname"] . ": " . $rn[$i]["userfullname"] . " (" . ((int) ($rn[$i]["time"]/60)) . "')"; $strtmp .= "\n"; } $strtmp .= "
News (last ${minu}'):  
"; } if($hor>=0) { $strtmp .= "
As of $hor minutes. Next: "; for($h=-30; $h<40; $h+=10) { if($hor+$h>=0 && $h!=0) { $strtmp .= ""; if($h>0) $strtmp .= "+"; $strtmp .= "$h "; } } $strtmp .= "

"; } if(is_readable($_SESSION["locr"] . $ds . 'private' . $ds . 'score.sep')) { $rf=file($_SESSION["locr"] . $ds . 'private' . $ds . 'score.sep'); $strtmp .= "
\"\" Available scores: \n"; for($rfi=1;$rfi<=count($rf);$rfi++) { $lin = explode('#',trim($rf[$rfi-1])); if(isset($lin[1]) && $_SESSION["usertable"]["usertype"]!='admin') { $arr=explode(' ',trim($lin[1])); for($arri=0;$arri=count($arr)) continue; } $lin = trim($lin[0]); if($lin=='') continue; $grname=explode(' ',$lin); $class=1; reset($score); while(list($e,$c) = each($score)) { if(!isset($score[$e]['classingroup'])) $score[$e]['classingroup']=array(); for($k=1;$k= 1) { $u1 = explode('/',$grname[$k]); if(isset($u1[1]) && $score[$e]['user'] >= $u1[0] && $score[$e]['user'] <= $u1[1]) { if(!isset($u1[2]) || $u1[2]==$score[$e]['site']) { $score[$e]['classingroup'][$rfi]=$class; $class++; } } } } } if($class>1) $strtmp .= "" . $grname[0] . " "; } $strtmp .= "
\n"; } else { reset($score); $class = 1; while(list($e,$c) = each($score)) { $score[$e]['classingroup'][1]=$class; $class++; } } $strtmp .= "
\n\n \n \n \n \n"; if(!$des) { if($level>0) $strtmp .= ""; } else if($detail) { for($i=0;$i"; } $strtmp .= "\n"; $strtmp .= "\n"; $n=0; reset($score); while(list($e, $c) = each($score)) { reset($score[$e]['classingroup']); while(list($cg1,$cg2) = each($score[$e]['classingroup'])) { $strtmp .= " "; $strtmp .= "\n"; /* if($level>3 && !$final && $score[$e]["site"]==$ct['contestlocalsite'] && ((isset($_SESSION["scorepos"][$score[$e]["username"]."-".$score[$e]["site"]]) && $_SESSION["scorepos"][$score[$e]["username"]."-".$score[$e]["site"]] > $cg2) || (isset($_SESSION["scoreblink"][$score[$e]["username"]."-".$score[$e]["site"]]) && $_SESSION["scoreblink"][$score[$e]["username"]."-".$score[$e]["site"]]>time()))) { $strtmp .= " \n"; // if(!$detail && $score[$e]["userdesc"]!="") // $strtmp .= "(" . $score[$e]["userdesc"] . ")"; $strtmp .= ""; if($level > 0) { if(!$des) $strtmp .= ""; } } if(!$des) $strtmp .= " \n"; } $strtmp .= " \n"; $strtmp .= " \n"; $n++; } } $strtmp .= "
#UserNameProblemsTotal
" . $cg2 . "" . $score[$e]["username"]."/".$score[$e]["site"]; $strtmp .= "" . $score[$e]["userfullname"]; if(!isset($_SESSION["scoreblink"][$score[$e]["username"]."-".$score[$e]["site"]]) || $_SESSION["scoreblink"][$score[$e]["username"]."-".$score[$e]["site"]]==0) { $_SESSION["scoreblink"][$score[$e]["username"]."-".$score[$e]["site"]] = time()+1; } } else { */ $_SESSION["scoreblink"][$score[$e]["username"]."-".$score[$e]["site"]]=0; $strtmp .= " " . $score[$e]["username"]."/".$score[$e]["site"] . " "; $strtmp .= "" . $score[$e]["userfullname"]; // } $_SESSION["scorepos"][$score[$e]["username"]."-".$score[$e]["site"]] = $cg2; // $strtmp .= "(" . $score[$e]["site"] . ")"; // $strtmp .= ""; for($h=0;$h"; } else { if($level>3 && isset($score[$e]["problem"][$ee]["judging"]) && $score[$e]["problem"][$ee]["judging"]) $strtmp .= "\"\"\n"; else $strtmp .= " "; } } if ($ver && $level<3) { if(isset($score[$e]["problem"][$ee]["solved"]) && $score[$e]["problem"][$ee]["solved"]) { if ($level==1) { $strtmp .= "/". $score[$e]["problem"][$ee]["time"] . "\n"; } else $strtmp .= $score[$e]["problem"][$ee]["count"] . "/" . $score[$e]["problem"][$ee]["time"] . "\n"; } else if($des) $strtmp .= " "; } else { if (isset($score[$e]["problem"][$ee]['count']) && $score[$e]["problem"][$ee]["count"]!=0) { $tn = $score[$e]["problem"][$ee]["count"]; if (isset($score[$e]["problem"][$ee]["solved"]) && $score[$e]["problem"][$ee]["solved"]) $t = $score[$e]["problem"][$ee]["time"]; else $t = "-"; $strtmp .= "" . $tn . "/${t}" . "\n"; } else if($des) $strtmp .= " "; } if($des) $strtmp .= "" . $score[$e]["totalcount"] . " (" . $score[$e]["totaltime"] . ")
"; if ($n == 0) $strtmp .= "
SCOREBOARD IS EMPTY
"; else { if(!$des) if($level>0) $strtmp .= "
P.S. Problem names are hidden."; else $strtmp .= "
P.S. Problem data are hidden."; } $conf=globalconf(); $strtmp = " \n" . encryptData($strtmp,$conf["key"],false); if(file_put_contents($scoretmp, $strtmp,LOCK_EX)===FALSE) { if($_SESSION["usertable"]["usertype"] == 'admin') { MSGError("Cannot write to the score cache file -- performance might be compromised"); } LOGError("Cannot write to the ".$_SESSION["usertable"]["usertype"]."-score cache file -- performance might be compromised"); } $conf=globalconf(); $strtmp = decryptData(substr($strtmp,strpos($strtmp,"\n")),$conf["key"]); } echo $strtmp; ?>