diff options
Diffstat (limited to 'web/square_scoreboard_list.php')
-rw-r--r-- | web/square_scoreboard_list.php | 115 |
1 files changed, 0 insertions, 115 deletions
diff --git a/web/square_scoreboard_list.php b/web/square_scoreboard_list.php deleted file mode 100644 index 6fdbf13..0000000 --- a/web/square_scoreboard_list.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -require_once('common.php'); - -function scoreboardlist_cmp($a,$b){ - if($a['acceptcount'] == $b['acceptcount']){ - if($a['penalty'] == $b['penalty']){ - return $a['userid'] - $b['userid']; - }else{ - return $a['penalty'] - $b['penalty']; - } - } - return $b['acceptcount'] - $a['acceptcount']; -} - -function square_scoreboard_list($sqlc,$paramo){ - $squareid = $paramo->squareid; - - if(gettype($squareid) != 'integer' || $squareid < 1){ - return null; - } - - $squareid = pg_escape_string($squareid); - $sqlr = pg_query_params($sqlc,'SELECT * FROM "square" WHERE "squareid"=$1', - array($squareid)); - - if(($squareo = pg_fetch_object($sqlr)) == null){ - pg_free_result($sqlr); - return null; - } - pg_free_result($sqlr); - - $sqlr = pg_query_params($sqlc,'SELECT "proid" FROM "problem" WHERE $1=ANY("squarelist") ORDER BY "proid";', - array($squareid)); - - $proidlist = array(); - while($sqlo = pg_fetch_object($sqlr)){ - $proidlist[] = $sqlo->proid; - } - pg_free_result($sqlr); - - $sqlr = pg_query_params($sqlc,'SELECT "userid","nickname" FROM "user" WHERE $1=ANY("squarelist");', - array($squareid)); - - $useridlist = array(); - while($sqlo = pg_fetch_object($sqlr)){ - $useridlist[$sqlo->userid] = array( - 'nickname' => $sqlo->nickname, - 'acceptcount' => 0, - 'penalty' => 0, - 'prolist' => array() - ); - } - pg_free_result($sqlr); - - $sqlr = pg_query_params($sqlc,'SELECT "userid","proid",EXTRACT(EPOCH FROM age("timestamp",$1)) AS "time","result"=0 AS "accept" FROM "submit" WHERE "proid" IN ('.implode(',',$proidlist).') ORDER BY "timestamp";', - array($squareo->starttime)); - - while($sqlo = pg_fetch_object($sqlr)){ - if(!array_key_exists($sqlo->userid,$useridlist)){ - continue; - } - - $userido = &$useridlist[$sqlo->userid]; - if(!array_key_exists($sqlo->proid,$userido['prolist'])){ - $userido['prolist'][$sqlo->proid] = array( - 'accepttime' => null, - 'submitcount' => 0, - 'penalty' => 0 - ); - } - $proo = &$userido['prolist'][$sqlo->proid]; - - if($proo['accepttime'] == null){ - if($sqlo->accept == 't'){ - $proo['accepttime'] = intval($sqlo->time); - $proo['submitcount']++; - $proo['penalty'] = ($userido->submitcount - 1) * 1200 + $proo['accepttime']; - - $userido['acceptcount']++; - $userido['penalty'] += $proo['penalty']; - }else{ - $proo['submitcount']++; - } - } - } - pg_free_result($sqlr); - - $scoreboardlist = array(); - foreach($useridlist as $key => $value){ - $scoreboardlist[] = array( - 'userid' => $key, - 'nickname' => $value['nickname'], - 'acceptcount' => $value['acceptcount'], - 'penalty' => $value['penalty'], - 'prolist' => $value['prolist']); - } - usort($scoreboardlist,'scoreboardlist_cmp'); - - $rank = 1; - for($idx = 0;$idx < count($scoreboardlist);$idx++){ - if($idx > 0){ - if($scoreboardlist[$idx]['acceptcount'] != $scoreboardlist[$idx - 1]['acceptcount'] || - $scoreboardlist[$idx]['penalty'] != $scoreboardlist[$idx - 1]['penalty']){ - $rank = $idx + 1; - } - } - $scoreboardlist[$idx]['rank'] = $rank; - } - - return array( - 'proidlist' => $proidlist, - 'scoreboardlist' => $scoreboardlist - ); -} -?> |