aboutsummaryrefslogtreecommitdiffstats
path: root/web/sqmod/sqmod_contest/sqmod_contest.php
diff options
context:
space:
mode:
Diffstat (limited to 'web/sqmod/sqmod_contest/sqmod_contest.php')
-rwxr-xr-xweb/sqmod/sqmod_contest/sqmod_contest.php123
1 files changed, 123 insertions, 0 deletions
diff --git a/web/sqmod/sqmod_contest/sqmod_contest.php b/web/sqmod/sqmod_contest/sqmod_contest.php
new file mode 100755
index 0000000..f999cfa
--- /dev/null
+++ b/web/sqmod/sqmod_contest/sqmod_contest.php
@@ -0,0 +1,123 @@
+<?php
+//ini_set("display_errors", "On");
+
+require_once('common.inc.php');
+require_once('user.inc.php');
+require_once('square.inc.php');
+require_once('sqmod_contest.inc.php');
+require_once('team.inc.php');
+require_once('sqlib_scoreboard.inc.php');
+
+$sqlc = db_connect();
+$msqlc = db_connect('toj_mod');
+
+$action = $_POST['action'];
+$data = $_POST['data'];
+
+if(strlen($action)==0)
+ die('Eno_action');
+if($action == 'get_prolist')
+{
+ $dt = json_decode($data);
+ $sqid = intval($dt->sqid);
+ if(square::get_sqmod($sqlc, $sqid) != SQMODNAME)
+ die('Eerror_sqid_this_mod');
+ if(!sec_is_login())
+ die('Enot_login');
+ $uid = intval($_COOKIE['uid']);
+ if(square::get_user_relationship($sqlc, $uid, $sqid) < SQUARE_USER_ACTIVE)
+ die('Ecannot_view_sq');
+
+ $list = square::get_pro_list($sqlc, $sqid);
+ if(!$list)
+ die('Eno_problem');
+ $data = get_setting($sqid);
+ $nlist = process_pro_list($list, $data, $sqid);
+ echo(json_encode($nlist));
+}
+if($action == 'get_user_stat')
+{
+ $dt = json_decode($data);
+ $sqid = intval($dt->sqid);
+ $display_team = $dt->display_team;
+ if(square::get_sqmod($sqlc, $sqid) != SQMODNAME)
+ die('Eerror_sqid_this_mod');
+ if(!sec_is_login())
+ die('Enot_login');
+ $uid = intval($_COOKIE['uid']);
+ if(square::get_user_relationship($sqlc, $uid, $sqid) < SQUARE_USER_ACTIVE)
+ die('Ecannot_view_sq');
+
+ $data = get_setting($sqid);
+
+ $ret = new stdClass();
+ $prostat = get_pro_stat_uid($sqlc, $msqlc, $sqid, SCOREBOARD_ID_PROBSTAT, $uid);
+ $tmpstat = process_pro_stat($prostat);
+ $ret->prostat = calc_score($tmpstat, $data, $sqid);
+ $ret->base_line = get_base_line($data, $sqid, false);
+
+ if($display_team)
+ {
+ $term = get_term($data, $sqid);
+ $teamid = intval(get_teamid($msqlc, $term, $uid));
+ if($teamid)
+ {
+ $ret->team_base_line = get_base_line($data, $sqid, true);
+ $members = get_team_member($msqlc, $term, $teamid);
+ $arr = array();
+ foreach($members as $mem)
+ {
+ if($mem->uid == $uid)continue;
+ $tmpstat = process_pro_stat(get_pro_stat_uid($sqlc, $msqlc, $sqid, SCOREBOARD_ID_PROBSTAT, $mem->uid));
+ $mem->prostat = calc_score($tmpstat, $data, $sqid);
+ array_push($arr, $mem);
+ }
+ $ret->team = $arr;
+ $ret->teamid = $teamid;
+ }
+ }
+ echo(json_encode($ret));
+}
+if($action == 'get_scoreboard'){
+ $dt = json_decode($data);
+ $sqid = intval($dt->sqid);
+
+ $sqo = square::get($sqlc, $sqid);
+ if($sqo == NULL || $sqo->sqmodname != SQMODNAME)
+ die('Eerror_sq_error');
+ if(!sec_is_login())
+ die('Enot_login');
+ $uid = intval($_COOKIE['uid']);
+ if(square::get_user_relationship($sqlc, $uid, $sqid) < SQUARE_USER_ACTIVE)
+ die('Ecannot_view_sq');
+
+ $list = get_scoreboard($sqlc, $msqlc, $sqid, SCOREBOARD_ID_SCOREBOARD);
+ $user_map = array();
+ for($idx = 0;$idx < count($list);$idx++){
+ $list[$idx]->nickname = user::get_nickname($sqlc, $list[$idx]->uid);
+ $user_map[$list[$idx]->uid] = true;
+ }
+
+ $user_list = square::get_user_list($sqlc, $sqid);
+ for($idx = 0;$idx < count($user_list);$idx++){
+ if(!array_key_exists($user_list[$idx]->uid,$user_map)){
+ array_push($list,array(
+ 'uid' => $user_list[$idx]->uid,
+ 'nickname' => $user_list[$idx]->nickname,
+ 'rank' => -1,
+ 'rank_score' => 0,
+ 'problem' => []
+ ));
+ }
+ }
+
+ echo(json_encode(array(
+ 'start_time' => $sqo->start_time,
+ 'list' => $list
+ )));
+}
+
+db_close($sqlc);
+db_close($msqlc);
+
+?>