. //////////////////////////////////////////////////////////////////////////////// //Last updated 03/nov/2012 by cassio@ime.usp.br // //PC^2 integration developed by Fabio Antonio Avellaneda Pachon // //Now it is also the integration of scores of BOCA // $quiet=true; require 'header.php'; $ds = DIRECTORY_SEPARATOR; if($ds=="") $ds = "/"; $remotedir=$ds . "private" . $ds . "remotescoresfull"; if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) exit; if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null) exit; if(is_writable($_SESSION["locr"] . $remotedir)) { if(isset($_POST['PC2']) && is_numeric($_POST['PC2']) && $_POST['PC2'] > 0) { $site = $_POST['PC2']; $problemCount = 4; for($i=0;$i<$problemCount;$i++) { $problems[$i]["name"]=chr($i+ord("A")); $problems[$i]["color"]="FFFFFF"; $problems[$i]["colorname"]="white"; $problems[$i]["solved"]=0; $problems[$i]["judging"]=false; $problems[$i]["time"]=0; $problems[$i]["penalty"]=0; $problems[$i]["count"]=0; } /*** Load PC2 summary.html **/ $board=base64_decode($_POST['data']); /*** a new dom object ***/ $dom = new domDocument; /*** load the html into the object ***/ $dom->loadHTML($board); /*** discard white space ***/ $dom->preserveWhiteSpace = false; /*** the table by its tag name ***/ $tables = $dom->getElementsByTagName('table'); /*** get all rows from the table ***/ $rows = $tables->item(0)->getElementsByTagName('tr'); /*** loop over the table rows ***/ $userCount = 1; $firstProblem=-1; foreach ($rows as $row) { //teams are always being renumbered since their number is not important... just they have to be different $team["user"]=(string)$userCount; $team["site"]=(string)$site; /*** get each column by tag name ***/ $cols = $row->getElementsByTagName('td'); $colCount=0; $probCount=1; //Ignore empty cols if($cols->item(0)->nodeValue=="") { continue; } foreach ($cols as $col) { switch($colCount) { //First column, start the problem counter and by default, the team hasnt solved a problem case 0; $probCount=1; $firstProblem=-1; break; //First column: team name case 1: $team["username"]=$col->nodeValue; // echo "username: $col->nodeValue\n"; $team["usertype"]="team"; $team["userfullname"]=$col->nodeValue; break; //Second column: How many problems does the team solved at this time case 2: $team["totalcount"]=(int)$col->nodeValue; // echo "totalcount: $col->nodeValue\n"; break; //Third column: Elapsed time, including penalisations case 3: $team["totaltime"]=$col->nodeValue; // echo "totaltime: $col->nodeValue\n"; break; //No more problems to process case $problemCount+4: $total[$userCount-1]=$team; //If firstProblem is different to -1 is because the team has solved at least one problem if($firstProblem!=-1) { $total[$userCount-1]["first"]=$firstProblem; } break; //Problems columns default: list($count, $time) = split('/', $col->nodeValue); //echo "Sol: $solved / time: $count"; if($time=="--") { $solved=false; $time=""; }else { $solved=true; } $team["problem"][$probCount]=$problems[$probCount]; $team["problem"][$probCount]["solved"]=$solved; $team["problem"][$probCount]["time"]=$time; //I can calculate the effective time and the penalisation time, if needed $team["problem"][$probCount]["penalty"]=$time; $team["problem"][$probCount]["count"]=$count; //look for the time which first problem was solved if($firstProblem==-1 && $solved) { $firstProblem=$time; }else { if($solved && $time<$firstProblem) { $firstProblem=$time; } } $probCount++; }//end switch $colCount++; //echo $col->nodeValue."\t"; }//end col for $userCount++; // echo '