373 lines
15 KiB
PHP
373 lines
15 KiB
PHP
<?php $show_title="$MSG_USERINFO - $OJ_NAME"; ?>
|
||
<?php include("template/$OJ_TEMPLATE/header.php");?>
|
||
<style>
|
||
#avatar_container:before {
|
||
content: "";
|
||
display: block;
|
||
padding-top: 100%;
|
||
}
|
||
</style>
|
||
<?php
|
||
$calsed = '锦鲤';
|
||
$calledid = -1;
|
||
$acneed = [10,20,30,50,80,100,200,300,500,800,1000];
|
||
$accall = ["萌新","小小牛","小牛","小犇","中牛","中犇","大牛","大犇","神牛","神犇"];
|
||
for ($i = count($accall);$i > 0; $i--) {
|
||
if ($AC < $acneed[$i]) {$calsed = $accall[$i - 1];$calledid=$i-1;}
|
||
}
|
||
for ($i=0;$i<=11;++$i){
|
||
$ped[$i]=0;
|
||
}
|
||
$sql="SELECT * FROM `solution` WHERE `user_id`=?";
|
||
$result = pdo_query($sql, $user);
|
||
foreach ($result as $row) {
|
||
++$ped[$row['result']];
|
||
}?>
|
||
|
||
<div class="padding">
|
||
<div class="ui grid">
|
||
<div class="row">
|
||
<div class="five wide column">
|
||
<div class="ui card" style="width: 100%; " id="user_card">
|
||
<div class="blurring dimmable image" id="avatar_container" style="height:325px">
|
||
<?php $default = ""; $grav_url = "https://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=500"; ?>
|
||
<?php
|
||
// 如果email填写的是qq邮箱,取QQ头像显示
|
||
$qq=stripos($email,"@qq.com");
|
||
if($qq>0){
|
||
$qq=urlencode(substr($email,0,$qq));
|
||
$grav_url="https://q1.qlogo.cn/g?b=qq&nk=$qq&s=5";
|
||
};
|
||
|
||
?>
|
||
|
||
<img style="margin-top: -100%; " src="<?php echo $grav_url; ?>">
|
||
</div>
|
||
<div class="content">
|
||
<div class="header"><?php echo $nick?></div>
|
||
<div class="meta">
|
||
<a class="group"><?php echo $school?></a>
|
||
</div>
|
||
</div>
|
||
<table class="table table-hover" style="width:100%">
|
||
<tbody>
|
||
<tr>
|
||
<th width=20%>等级</th>
|
||
<td width=20%><?php echo $calsed;?></td>
|
||
<td width=55%>距离 <?php echo $accall[$calledid+1];?> 还需AC <?php echo $acneed[$calledid+1]-$AC;?>题</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div class="extra content">
|
||
<a><i class="check icon"></i>通过 <?php echo $AC ?> 题</a>
|
||
<a style="float: right; "><i class="star icon <?php if($starred) echo "active"?>"></i>排名 <?php echo $Rank ?></a>
|
||
|
||
<?php if ($email != "") { ?>
|
||
<div style="margin-top:10px;margin-bottom:10px">
|
||
<a href="mailto:<?php echo "Hello" ?>?body=CSPOJ">
|
||
<i class="icon large envelope"></i>
|
||
<span style="display:inline-block; vertical-align:middle"><?php echo $email?></span>
|
||
</a>
|
||
</div>
|
||
<?php } ?>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="eleven wide column">
|
||
<div class="ui grid" style="padding-left: 20px;">
|
||
<div class="row">
|
||
<div class="column">
|
||
<h4 class="ui top attached block header">提交统计</h4>
|
||
<div class="ui bottom attached segment">
|
||
<div id="sub_date_chart" style="width:100%;height:210px"></div>
|
||
<a href="/status.php?user_id=<?php echo $user?>"><i class="search icon"></i>查询该用户提交</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="column">
|
||
<h4 class="ui top attached block header">统计</h4>
|
||
<div class="ui bottom attached segment">
|
||
<div class="ui grid">
|
||
<div class="row">
|
||
<div id="pie_chart_legend" class="six wide column"></div>
|
||
<div class="ten wide column">
|
||
<canvas id="pie_chart"></canvas>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row">
|
||
<div class="column">
|
||
<h4 class="ui top attached block header">
|
||
通过的题目
|
||
|
||
</h4>
|
||
<div class="ui bottom attached segment">
|
||
<script language='javascript'>
|
||
function p(id, c) {
|
||
if(c>0)document.write("<a title=\"U've Passed!\" href=problem.php?id=" + id + " class=\"ui green basic label\" id=\"show-problem-id\">" + id + " </a>");
|
||
else document.write("<a title=\"U've Not Passed Yet!\" href=problem.php?id=" + id + " class=\"ui red basic label\" id=\"show-problem-id\">" + id + " </a>");
|
||
}
|
||
function ptot(len) {
|
||
document.write("<div style='text-align:right;margin-bottom:10px'><div class='ui green small horizontal statistic'><div class='value'>" + len + "</div><div class='label'>AC</div></div></div>")
|
||
}
|
||
<?php
|
||
$ac=array();
|
||
$sql = "SELECT `problem_id`,count(1) from solution where `user_id`=? and result=4 and problem_id != 0 group by `problem_id` ORDER BY `problem_id` ASC";
|
||
if ($ret = pdo_query($sql, $user)) {
|
||
$len = count($ret);
|
||
echo "ptot($len);";
|
||
foreach ($ret as $row){
|
||
if (isset($acc_arr[$row['problem_id']]))
|
||
echo "p($row[0],$row[1]);";
|
||
else
|
||
echo "p($row[0],0);";
|
||
array_push($ac,$row[0]);
|
||
}
|
||
}
|
||
?>
|
||
</script>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="column">
|
||
<h4 class="ui top attached block header">未通过的题目</h4>
|
||
<div class="ui bottom attached segment">
|
||
<script language='javascript'>
|
||
function p(id, c) {
|
||
document.write("<a href=problem.php?id=" + id + " class=\"ui basic label\" id=\"show-problem-id\">" + id +
|
||
" </a>");
|
||
}
|
||
<?php
|
||
$sql = "SELECT `sol`.`problem_id`, count(1) from solution sol where `sol`.`user_id`=? and `sol`.`result`!=4 and sol.problem_id != 0 group by `sol`.`problem_id` ORDER BY `sol`.`problem_id` ASC";
|
||
if ($result = pdo_query($sql, $user)) {
|
||
foreach ($result as $row)
|
||
if(!in_array($row[0],$ac))echo "p($row[0],$row[1]);";
|
||
}
|
||
?>
|
||
</script>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="row">
|
||
<div class="column">
|
||
<h4 class="ui top attached block header">
|
||
近期登录日志
|
||
|
||
</h4>
|
||
<div class="ui bottom attached segment">
|
||
|
||
<?php
|
||
if(isset($_SESSION[$OJ_NAME.'_'.'administrator'])){
|
||
?><table border=1 class='ui table'>
|
||
<thead><tr class=toprow><th>UserID</th><th>Password</th><th>IP</th><th>Time</th></tr></thead>
|
||
<tbody>
|
||
<?php
|
||
$cnt=0;
|
||
foreach($view_userinfo as $row){
|
||
if ($cnt)
|
||
echo "<tr class='oddrow'>";
|
||
else
|
||
echo "<tr class='evenrow'>";
|
||
for($i=0;$i<count($row)/2;$i++){
|
||
echo "<td>";
|
||
echo "\t".$row[$i];
|
||
echo "</td>";
|
||
}
|
||
echo "</tr>";
|
||
$cnt=1-$cnt;
|
||
}
|
||
?>
|
||
</tbody>
|
||
</table>
|
||
<?php
|
||
}
|
||
?>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
$(function() {
|
||
$('#user_card .image').dimmer({
|
||
on: 'hover'
|
||
});
|
||
var pie = new Chart(document.getElementById('pie_chart').getContext('2d'), {
|
||
aspectRatio: 1,
|
||
type: 'pie',
|
||
data: {
|
||
datasets: [{
|
||
data: [
|
||
<?php
|
||
foreach ($view_userstat as $row) {
|
||
echo $row[1] . ",\n";
|
||
}
|
||
?>
|
||
],
|
||
backgroundColor: [
|
||
"#32CD32",
|
||
"#FA8072",
|
||
"#DC143C",
|
||
"#FF9912",
|
||
"#8A2BE2",
|
||
"#4169E1",
|
||
"#DB7093",
|
||
"#082E54",
|
||
"#FFFF00",
|
||
]
|
||
}],
|
||
labels: [
|
||
<?php
|
||
foreach ($view_userstat as $row) {
|
||
echo "\"" . $jresult[$row[0]] . "\",\n";
|
||
}
|
||
?>
|
||
]
|
||
},
|
||
options: {
|
||
responsive: true,
|
||
legend: {
|
||
display: false
|
||
},
|
||
legendCallback: function(chart) {
|
||
var text = [];
|
||
text.push(
|
||
'<ul style="list-style: none; padding-left: 20px; margin-top: 0; " class="' +
|
||
chart.id + '-legend">');
|
||
|
||
var data = chart.data;
|
||
var datasets = data.datasets;
|
||
var labels = data.labels;
|
||
|
||
if (datasets.length) {
|
||
for (var i = 0; i < datasets[0].data.length; ++i) {
|
||
text.push(
|
||
'<li style="font-size: 15px; color: #666; margin:10px 20px"><span style="width: 12px; height: 12px; display: inline-block; border-radius: 50%; margin-right: 5px; background-color: ' +
|
||
datasets[0].backgroundColor[i] + '; "></span>');
|
||
if (labels[i]) {
|
||
text.push(labels[i]);
|
||
text.push(' : ' + datasets[0].data[i]);
|
||
}
|
||
text.push('</li>');
|
||
}
|
||
}
|
||
|
||
text.push('</ul>');
|
||
return text.join('');
|
||
}
|
||
},
|
||
});
|
||
document.getElementById('pie_chart_legend').innerHTML = pie.generateLegend();
|
||
});
|
||
</script>
|
||
|
||
<?php
|
||
$sub_data = [];
|
||
$max_count = 0;
|
||
$sql = "SELECT DATE(in_date),count(*) FROM solution WHERE user_id=? AND in_date >= DATE_SUB(CURDATE(),INTERVAL 1 YEAR) AND result < 13 GROUP BY DATE(in_date);";
|
||
$ret = pdo_query($sql, $user);
|
||
foreach ($ret as $row) {
|
||
array_push($sub_data, [$row[0], (int)$row[1]]);
|
||
$max_count = max($max_count, (int)$row[1]);
|
||
}
|
||
// $max_count = ceil($max_count / 100) * 100;
|
||
date_default_timezone_set('PRC');
|
||
$today = date('Y-m-d', time());
|
||
$beg_time = date('Y-m-d', strtotime("-6 month"));
|
||
// echo json_encode($sub_data, false);
|
||
?>
|
||
<script src="<?php echo $OJ_CDN_URL.$path_fix."template/$OJ_TEMPLATE"?>/js/echarts.min.js"></script>
|
||
<!--<script src="https://cdn.staticfile.org/echarts/5.1.2/echarts.min.js"></script>-->
|
||
|
||
<script type="text/javascript">
|
||
var chartDom = document.getElementById('sub_date_chart');
|
||
var myChart = echarts.init(chartDom);
|
||
var option;
|
||
var today = new Date();
|
||
console.log(today.getFullYear() + '-' + today.getMonth() + '-' + today.getDay());
|
||
option = {
|
||
title: {
|
||
top: 30,
|
||
left: 'center',
|
||
},
|
||
tooltip: {
|
||
formatter: function(params) {
|
||
return params.value[0] + '<br>提交数:' + params.value[1];
|
||
}
|
||
},
|
||
visualMap: {
|
||
min: 0,
|
||
max: <?php echo $max_count ?>,
|
||
show: false,
|
||
type: 'piecewise',
|
||
orient: 'horizontal',
|
||
left: 'center',
|
||
top: 10,
|
||
inRange: {
|
||
color: ['#80d596', '#156344']
|
||
}
|
||
},
|
||
calendar: {
|
||
top: 30,
|
||
left: 40,
|
||
right: 30,
|
||
cellSize: [20, 20],
|
||
range: ['<?php echo $beg_time ?>', '<?php echo $today ?>'],
|
||
itemStyle: {
|
||
borderWidth: 0.5,
|
||
|
||
},
|
||
lineStyle: {
|
||
color: '#D10E00',
|
||
width: 1,
|
||
opacity: 1
|
||
},
|
||
yearLabel: {
|
||
show: false
|
||
},
|
||
dayLabel: {
|
||
firstDay: 1,
|
||
nameMap: 'cn',
|
||
margin: '8px'
|
||
},
|
||
monthLabel: {
|
||
nameMap: 'cn',
|
||
margin: 15,
|
||
fontSize: 14,
|
||
color: 'gray'
|
||
},
|
||
splitLine: {
|
||
show: false
|
||
},
|
||
|
||
},
|
||
series: {
|
||
name: '提交次数',
|
||
type: 'heatmap',
|
||
coordinateSystem: 'calendar',
|
||
data: <?php echo json_encode($sub_data, false); ?>,
|
||
}
|
||
};
|
||
|
||
option && myChart.setOption(option);
|
||
</script>
|
||
|
||
<?php include("template/$OJ_TEMPLATE/footer.php");?>
|