aboutsummaryrefslogblamecommitdiffstats
path: root/toj/sqmod/sqmod_test/sqmod_test_man.php
blob: b65804ce1f8b8890cf85cad0103fd71c205ee6ed (plain) (tree)






































































                                                                                                                                                                                                                       
                               





































































































                                                                                                                                                                                   
<?php

require_once('../../php/common.inc.php');
require_once('../../php/square.inc.php');
require_once('../../php/user.inc.php');
require_once('../../php/sqlib_scoreboard.inc.php');
require_once('sqmod_test.inc.php');

function get_sprout_data($msqlc, $uid, $term)
{
    $sqlstr = 'SELECT * FROM "sqmod_sprout_student" INNER JOIN "sqmod_sprout_team" ON "sqmod_sprout_student"."uid"="sqmod_sprout_team"."uid" WHERE "sqmod_sprout_student"."uid"=$1 AND "sqmod_sprout_team"."term"=$2;';
    $sqlarr = array($uid, $term);
    $res = pg_query_params($sqlstr, $sqlarr);
    $ret = pg_fetch_object($res);
    return $ret;
}

function trans_type($type)
{
    if($type==1)return '高中男';
    if($type==2)return '高中女';
    if($type==3)return '大學生';
    if($type==4)return '小老師';
    if($type==5)return '內測員';
    if($type==6)return '管理員';
}

function team_cmp($a, $b)
{
    if($a->sspd->teamid == $b->sspd->teamid)return ($a->sspd->type < $b->sspd->type);
    //var_dump($a);
    //echo($a->sspd->teamid.','.$b->sspd->teamid.'<br>');
    return $a->sspd->teamid > $b->sspd->teamid;
}

function get_user_spent_time($sqlc, $sqid, $uid, $start_time = null, $end_time = null)
{
    if(!$start_time)$start_time = '1990-01-01 01:01:01';
    if(!$end_time)$end_time = '2222-02-02 02:02:02';
    $sqlstr = 'SELECT "submit_time" FROM "submit" WHERE "uid"=$1 AND "submit_time">=$2 AND "submit_time"<$3 AND "proid" IN (SELECT "proid" FROM "pro_sq" WHERE "sqid"=$4) ORDER BY "submit_time";';
    $sqlarr = array($uid, $start_time, $end_time, $sqid);
    $res = pg_query_params($sqlc, $sqlstr, $sqlarr);
    $arr = pg_fetch_all_columns($res, 0);
    $last_time = 0;
    $tot_time = 0;
    $cnt = 0;
    //return 3;
    foreach($arr as $str)
    {
        $cnt += 1;
        $time = strtotime($str);
        //return $time/60;
        $mid = 10 * 60;
        $lng = 90 * 60;

        $nl_time = $time + $mid;
        if($nl_time <= $last_time + $lng)
        {
            $tot_time += $nl_time - $last_time;
        }
        else 
        {
            $tot_time += 2 * $mid;
        }

        $last_time = $nl_time;
    }
    return array($tot_time, $cnt);
}

$sqlc = db_connect();
$msqlc = db_connect('toj_mod');

$sqid = intval($_GET['sqid']);
if(!$sqid)
    die('Eno_sqid');

$sboard_id = 1;
$sq = square::get($sqlc, $sqid);
if(!$sq)
    die('Eerror_sqid');

$stime = $sq->start_time;
$etime = $sq->end_time;

$sbdata = sqlib_scoreboard::get_scoreboard($sqlc, $msqlc, $sqid, $sboard_id, 'score_func', $sq->start_time, $sq->end_time, 1, null);

//var_dump($sbdata);

$prol = '';
foreach($sbdata[0]->problem as $pro)
{
    $prol = $prol.'<td align=center width=50>'.$pro->proid.'</td>';
}

$dt = get_setting($sqid);
$base = get_base_line($dt, $sqid, false);
$term = get_term($dt, $sqid);

echo('<meta http-equiv="Content-Type" content="text/html; charset=utf8">');
echo('<table border = 1>');
echo('<h align=center><td>rank</td><td>uid</td><td>Nickname</td><td>Name</td><td>StuNo.</td><td>Team</td><td>Type</td><td>Total</td>'.$prol.'<td>Sub.</td><td>Est. Time</td></h>');

$teamsc = array();

foreach($sbdata as $usr)
{
    $usr->sspd = get_sprout_data($msqlc, $usr->uid, $term);
}

if($_GET['sort']=='team')usort($sbdata, 'team_cmp');

foreach($sbdata as $usr)
{
    $spd = $usr->sspd;
    if($_GET['stu_only'] && !($spd->type>=1 && $spd->type<=4))
        continue;
    echo('<tr align="center">');
    echo('<td>'.$usr->rank.'</td>');
    echo('<td>'.$usr->uid.'</td>');
    $user = user::get_from_uid($sqlc, $usr->uid);
    $original_nickname=$user->nickname;
    if(mb_strlen($user->nickname,'UTF-8')>7){
        $user->nickname=mb_substr($user->nickname,0,6,'UTF-8').'...';
        echo('<td title="'.str_replace("!","!",htmlspecialchars($original_nickname)).'">'.$user->nickname.'</td>');
    } else {
        echo('<td>'.$user->nickname.'</td>');
    }
    echo('<td>'.$spd->name.'</td>');
    echo('<td>'.$spd->stuno.'</td>');
    echo('<td>'.$spd->teamid.'</td>');
    echo('<td>'.trans_type($spd->type).'</td>');

    $color = 'black';
    if($usr->rank_score >= $base->total_score)$color = 'gray';
    else if($usr->rank_score >= $base->good_score)$color = 'goldenrod';
    else if($usr->rank_score >= $base->pass_score)$color = 'limegreen';
    echo('<td><b><font color="'.$color.'">'.intval($usr->rank_score).'</font></b></td>');

    
    foreach($usr->problem as $pro)
    {
        if(!$pro->tries){echo('<td></td>');continue;}

        $clr = 'red';
        $b = false;
        if($pro->is_ac){$clr = 'green';$b = true;}
        else if($pro->best_score>=50)$clr = 'orange';
        echo('<td><font color="'.$clr.'">'.(b?'<b>':'').intval($pro->rank_score).(b?'</b>':'').'</font></td>');
    }

    $usr_time = get_user_spent_time($sqlc, $sqid, $usr->uid, $stime, $etime);
    $uttmin = floor($usr_time[0] / 60);
    $uttcnt = $usr_time[1];
    $tm_clr = 'black';
    $utmin = $uttmin % 60;
    if($utmin<10)$utmin = '0'.$utmin;
    $uthr = floor($uttmin/60);
    if($uthr >= 2)$tm_clr = 'lime';
    if($uthr >= 6)$tm_clr = 'orange';
    if($uthr >= 10)$tm_clr = 'red';
    echo('<td>'.$uttcnt.'</td><td><font color="'.$tm_clr.'">'.$uthr.':'.$utmin.'</font></td>');


    echo('</tr>');
}

echo('</table>');


db_close($sqlc);
db_close($msqlc);

?>