S2OJ/web/app/controllers/user_info.php

155 lines
5.9 KiB
PHP
Raw Normal View History

2016-07-18 16:39:37 +00:00
<?php
2022-03-17 04:00:03 +00:00
if (!Auth::check()) {
2022-04-02 10:01:26 +00:00
become403Page(UOJLocale::get('need login'));
2022-03-17 04:00:03 +00:00
}
2022-04-03 10:18:17 +00:00
if (!isNormalUser($myUser)) {
become403Page();
}
2016-07-18 16:39:37 +00:00
$username = $_GET['username'];
2022-03-25 05:16:37 +00:00
2022-09-28 07:39:39 +00:00
if (!validateUsername($username) || !($user = queryUser($username))) {
become404Page();
}
2022-09-18 04:58:35 +00:00
?>
2022-09-28 07:39:39 +00:00
<?php
if (!isset($_COOKIE['bootstrap4'])) {
$REQUIRE_LIB['bootstrap5'] = '';
$REQUIRE_LIB['calendar_heatmap'] = '';
} else {
$REQUIRE_LIB['github_contribution_graph'] = '';
}
?>
<?php echoUOJPageHeader($user['username'] . ' - ' . UOJLocale::get('user profile')) ?>
<?php if (isset($REQUIRE_LIB['bootstrap5'])): ?>
2022-10-05 10:53:51 +00:00
<?php uojIncludeView('user-info', array('user' => $user, 'myUser' => $myUser)) ?>
2022-09-28 07:39:39 +00:00
<?php else: ?>
<?php
2022-10-02 12:47:53 +00:00
$esc_sex = HTML::escape($user['sex']);
2022-09-28 07:39:39 +00:00
$col_sex="color:blue";
2022-10-02 12:47:53 +00:00
if ($esc_sex == "M") {
$esc_sex="";
$col_sex="color:blue";
} elseif ($esc_sex == "F") {
$esc_sex="";
$col_sex="color:red";
} else {
$esc_sex="";
$col_sex="color:black";
}
?>
2022-09-28 07:39:39 +00:00
<div class="card border-info">
<h5 class="card-header bg-info"><?= UOJLocale::get('user profile') ?></h5>
<div class="card-body">
<div class="row mb-4">
<div class="col-md-4 order-md-9">
<img class="media-object img-thumbnail d-block mx-auto" alt="<?= $user['username'] ?> Avatar" src="<?= HTML::avatar_addr($user, 256) ?>" />
</div>
<div class="col-md-8 order-md-1">
<h2><span class="uoj-honor" data-realname="<?= $user['realname'] ?>"><?= $user['username'] ?></span> <span><strong style="<?= $col_sex ?>"><?= $esc_sex ?></strong></span></h2>
<div class="list-group">
<div class="list-group-item">
<h4 class="list-group-item-heading"><?= UOJLocale::get('email') ?></h4>
<p class="list-group-item-text"><?= HTML::escape($user['email']) ?></p>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading"><?= UOJLocale::get('QQ') ?></h4>
<p class="list-group-item-text"><?= HTML::escape($user['qq'] != 0 ? $user['qq'] : 'Unfilled') ?></p>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading"><?= UOJLocale::get('motto') ?></h4>
2022-09-28 23:41:45 +00:00
<?php $motto_id = uniqid("motto-{$user['username']}-"); ?>
2022-09-28 07:39:39 +00:00
<p class="list-group-item-text" id="<?= $motto_id ?>"></p>
<script type="text/javascript">
2022-09-28 23:41:45 +00:00
$(function() { $('#<?= $motto_id ?>').html(DOMPurify.sanitize('<?= addslashes($user['motto']) ?>', <?= DOM_SANITIZE_CONFIG ?>)); });
2022-09-28 07:39:39 +00:00
</script>
</div>
<?php if (isSuperUser($myUser)): ?>
<div class="list-group-item">
<h4 class="list-group-item-heading">register time</h4>
<p class="list-group-item-text"><?= $user['register_time'] ?></p>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading">remote_addr</h4>
<p class="list-group-item-text"><?= $user['remote_addr'] ?></p>
2016-07-18 16:39:37 +00:00
</div>
2022-09-28 07:39:39 +00:00
<div class="list-group-item">
<h4 class="list-group-item-heading">http_x_forwarded_for</h4>
<p class="list-group-item-text"><?= $user['http_x_forwarded_for'] ?></p>
</div>
<?php endif ?>
2016-07-18 16:39:37 +00:00
</div>
</div>
2022-09-28 07:39:39 +00:00
</div>
<?php if (Auth::check()): ?>
<?php if (Auth::id() != $user['username']): ?>
<a type="button" class="btn btn-info btn-sm" href="/user/msg?enter=<?= $user['username'] ?>"><span class="glyphicon glyphicon-envelope"></span> <?= UOJLocale::get('send private message') ?></a>
<?php else: ?>
<a type="button" class="btn btn-info btn-sm" href="/user/modify-profile"><span class="glyphicon glyphicon-pencil"></span> <?= UOJLocale::get('modify my profile') ?></a>
<?php endif ?>
<?php endif ?>
<a type="button" class="btn btn-success btn-sm" href="<?= HTML::blog_url($user['username'], '/') ?>"><span class="glyphicon glyphicon-arrow-right"></span> <?= UOJLocale::get('visit his blog', $username) ?></a>
<a type="button" class="btn btn-success btn-sm" href="<?= HTML::blog_url($user['username'], '/self_reviews') ?>"><span class="glyphicon glyphicon-arrow-right"></span> 查看 <?= $username ?> 的所有赛后总结</a>
<div class="top-buffer-lg"></div>
<div class="list-group">
<div class="list-group-item">
<?php
2022-10-02 12:47:53 +00:00
$_result = DB::query("select date(submit_time), problem_id from submissions where submitter = '{$username}' and score = 100 and date(submit_time) between date_sub(curdate(), interval 1 year) and curdate()");
2022-09-18 04:58:35 +00:00
$result = [];
$vis = [];
while ($row = DB::fetch($_result)) {
$id = $row['date(submit_time)'] . ':' . $row['problem_id'];
if (!$vis[$id]) {
$vis[$id] = 1;
$result[strtotime($row['date(submit_time)']) * 1000]++;
}
}
?>
2022-09-28 07:39:39 +00:00
<h4 class="list-group-item-heading"><?= UOJLocale::get('n accepted in last year', count($result)) ?></h4>
<div id="accepted-graph"></div>
<script>
var accepted_graph_data = [
<?php
foreach ($result as $key => $val) {
echo "{ timestamp: {$key}, count: {$val} }, ";
}
2022-09-18 04:58:35 +00:00
?>
2022-09-28 07:39:39 +00:00
];
2022-03-25 05:16:37 +00:00
2022-09-28 07:39:39 +00:00
$(document).ready(function () {
$('#accepted-graph').github_graph({
data: accepted_graph_data,
texts: ['AC', 'AC'],
h_days: ['Tue', 'Thu', 'Sat'],
2022-03-25 05:16:37 +00:00
});
2022-09-28 07:39:39 +00:00
});
</script>
</div>
<div class="list-group-item">
<?php
$ac_problems = DB::selectAll("select a.problem_id as problem_id, b.title as title from best_ac_submissions a inner join problems b on a.problem_id = b.id where submitter = '{$user['username']}';");
2022-09-18 04:58:35 +00:00
?>
2022-09-28 07:39:39 +00:00
<h4 class="list-group-item-heading"><?= UOJLocale::get('accepted problems').''.UOJLocale::get('n problems in total', count($ac_problems))?> </h4>
<ul class="list-group-item-text nav">
<?php
2022-09-20 10:23:18 +00:00
foreach ($ac_problems as $problem) {
2022-09-21 05:58:53 +00:00
echo '<li class="mr-1 mb-1"><a href="/problem/', $problem['problem_id'], '" role="button" class="btn btn-light h-100" style="width: 12rem;">#', $problem['problem_id'], '. ', $problem['title'], '</a></li>';
2022-09-20 10:23:18 +00:00
}
if (empty($ac_problems)) {
echo UOJLocale::get('none');
}
2022-09-18 04:58:35 +00:00
?>
2022-09-28 07:39:39 +00:00
</ul>
2016-07-18 16:39:37 +00:00
</div>
</div>
</div>
2022-09-28 07:39:39 +00:00
</div>
2016-07-18 16:39:37 +00:00
<?php endif ?>
<?php echoUOJPageFooter() ?>