mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-25 20:38:41 +00:00
feat(web/contest): username color
This commit is contained in:
parent
452c2ca12b
commit
1ebcda02d6
@ -87,14 +87,23 @@ function queryContestData($contest, $config = []) {
|
|||||||
$people = [];
|
$people = [];
|
||||||
|
|
||||||
if ($contest['extra_config']['individual_or_team'] == 'individual') {
|
if ($contest['extra_config']['individual_or_team'] == 'individual') {
|
||||||
$people = DB::selectAll([
|
$res = DB::selectAll([
|
||||||
"select contests_registrants.username, user_info.realname from contests_registrants",
|
"select contests_registrants.username, user_info.realname, user_info.extra, user_info.usergroup from contests_registrants",
|
||||||
"inner join user_info on contests_registrants.username = user_info.username",
|
"inner join user_info on contests_registrants.username = user_info.username",
|
||||||
"where", [
|
"where", [
|
||||||
"contest_id" => $contest['id'],
|
"contest_id" => $contest['id'],
|
||||||
"has_participated" => 1
|
"has_participated" => 1
|
||||||
]
|
]
|
||||||
], DB::NUM);
|
], DB::NUM);
|
||||||
|
foreach ($res as $row) {
|
||||||
|
$extra = json_decode($row[2], true);
|
||||||
|
$people[] = [
|
||||||
|
$row[0],
|
||||||
|
trim(HTML::escape($row[1])),
|
||||||
|
null,
|
||||||
|
UOJUser::getUserColor2($row[3], $extra['username_color']),
|
||||||
|
];
|
||||||
|
}
|
||||||
} elseif ($contest['extra_config']['individual_or_team'] == 'team') {
|
} elseif ($contest['extra_config']['individual_or_team'] == 'team') {
|
||||||
$res = DB::selectAll([
|
$res = DB::selectAll([
|
||||||
"select user_info.username, null, user_info.extra from contests_registrants, user_info",
|
"select user_info.username, null, user_info.extra from contests_registrants, user_info",
|
||||||
@ -106,11 +115,15 @@ function queryContestData($contest, $config = []) {
|
|||||||
], DB::NUM);
|
], DB::NUM);
|
||||||
foreach ($res as $row) {
|
foreach ($res as $row) {
|
||||||
$extra = json_decode($row[2], true);
|
$extra = json_decode($row[2], true);
|
||||||
$row[2] = [
|
$people[] = [
|
||||||
'team_name' => $extra['acm']['team_name'],
|
$row[0],
|
||||||
'members' => $extra['acm']['members']
|
null,
|
||||||
|
[
|
||||||
|
'team_name' => $extra['acm']['team_name'],
|
||||||
|
'members' => $extra['acm']['members'],
|
||||||
|
],
|
||||||
|
null,
|
||||||
];
|
];
|
||||||
$people[] = $row;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +386,7 @@ function calcStandings($contest, $contest_data, &$score, &$standings, $cfg = [])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// standings: rank => score, penalty, [username, realname], virtual_rank, ?review
|
// standings: rank => score, penalty, [username, realname, null|array, null|color], virtual_rank, ?review
|
||||||
$standings = [];
|
$standings = [];
|
||||||
foreach ($contest_data['people'] as $person) {
|
foreach ($contest_data['people'] as $person) {
|
||||||
$cur = array(0, 0, $person);
|
$cur = array(0, 0, $person);
|
||||||
|
@ -210,6 +210,33 @@ class UOJUser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getUserColor($user) {
|
||||||
|
$extra = UOJUser::getExtra($user);
|
||||||
|
|
||||||
|
return UOJUser::getUserColor2($user['usergroup'], $extra['username_color']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getUserColor2($usergroup, $custom_color = null) {
|
||||||
|
if ($usergroup == 'B') {
|
||||||
|
return '#996600';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($usergroup == 'T') {
|
||||||
|
return '#707070';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($usergroup == 'S') {
|
||||||
|
return $custom_color ?: '#9d3dcf';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 前管理员设置颜色为紫色、红色的,颜色改为蓝色
|
||||||
|
if ($custom_color == '#9d3dcf' || $custom_color == '#fe4c61') {
|
||||||
|
return '#0d6efd';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $custom_color ?: '#0d6efd';
|
||||||
|
}
|
||||||
|
|
||||||
public static function getLink($user) {
|
public static function getLink($user) {
|
||||||
if (is_string($user)) {
|
if (is_string($user)) {
|
||||||
$info = UOJUser::query($user);
|
$info = UOJUser::query($user);
|
||||||
@ -221,36 +248,21 @@ class UOJUser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$extra = UOJUser::getExtra($user);
|
|
||||||
$realname = $user['realname'];
|
$realname = $user['realname'];
|
||||||
$color = '#0d6efd';
|
|
||||||
|
|
||||||
if ($user['usergroup'] === 'B') {
|
|
||||||
$color = '#996600';
|
|
||||||
} else if (isTmpUser($user)) {
|
|
||||||
$color = '#707070';
|
|
||||||
} else {
|
|
||||||
if (isSuperUser($user)) {
|
|
||||||
$color = '#9d3dcf';
|
|
||||||
}
|
|
||||||
|
|
||||||
$color = $extra['username_color'];
|
|
||||||
|
|
||||||
// 前管理员设置颜色为紫色、红色的,颜色改为蓝色
|
|
||||||
if (($color === '#9d3dcf' || $color === '#fe4c61') && !isSuperUser($user)) {
|
|
||||||
$color = '#0d6efd';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($user['usertype'] == 'teacher') {
|
if ($user['usertype'] == 'teacher') {
|
||||||
$realname .= '老师';
|
$realname .= '老师';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Auth::check()) {
|
||||||
|
$realname = '';
|
||||||
|
}
|
||||||
|
|
||||||
return HTML::tag('span', [
|
return HTML::tag('span', [
|
||||||
'class' => 'uoj-username',
|
'class' => 'uoj-username',
|
||||||
|
'data-color' => UOJUser::getUserColor($user),
|
||||||
// 未登录不可查看真实姓名
|
// 未登录不可查看真实姓名
|
||||||
'data-realname' => Auth::check() ? trim(HTML::escape($realname)) : '',
|
'data-realname' => trim(HTML::escape($realname)),
|
||||||
'data-color' => $color,
|
|
||||||
], $user['username']);
|
], $user['username']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
function(row) {
|
function(row) {
|
||||||
var col_tr = '<tr>';
|
var col_tr = '<tr>';
|
||||||
col_tr += '<td>' + row[3] + '</td>';
|
col_tr += '<td>' + row[3] + '</td>';
|
||||||
col_tr += '<td>' + getUserLink(row[2][0], row[2][1]) + '</td>';
|
col_tr += '<td>' + getUserLink(row[2][0], row[2][1], row[2][3]) + '</td>';
|
||||||
col_tr += '<td>' + '<div><span class="uoj-score" data-max="' + problems.length * 100 + '" style="color:' + getColOfScore(row[0] / problems.length) + '">' + row[0] + '</span></div>' + '<div>' + getPenaltyTimeStr(row[1]) + '</div></td>';
|
col_tr += '<td>' + '<div><span class="uoj-score" data-max="' + problems.length * 100 + '" style="color:' + getColOfScore(row[0] / problems.length) + '">' + row[0] + '</span></div>' + '<div>' + getPenaltyTimeStr(row[1]) + '</div></td>';
|
||||||
for (var i = 0; i < problems.length; i++) {
|
for (var i = 0; i < problems.length; i++) {
|
||||||
col = score[row[2][0]][i];
|
col = score[row[2][0]][i];
|
||||||
|
@ -118,46 +118,51 @@ function getColOfScore(score) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getUserLink(username, realname) {
|
function getUserLink(username, realname, color) {
|
||||||
if (!username) {
|
if (!username) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
var text = username;
|
var text = username;
|
||||||
|
var style = '';
|
||||||
if (username.charAt(0) == '@') {
|
if (username.charAt(0) == '@') {
|
||||||
username = username.substr(1);
|
username = username.substr(1);
|
||||||
}
|
}
|
||||||
if (realname) {
|
if (realname) {
|
||||||
text = text + ' <span class="uoj-realname d-inline-block">(' + realname + ')</span>';
|
text = text + ' <span class="uoj-realname d-inline-block">(' + realname + ')</span>';
|
||||||
}
|
}
|
||||||
return '<a class="uoj-username" href="' + uojHome + '/user/' + username + '">' + text + '</a>';
|
if (color) {
|
||||||
|
style += 'color: ' + color + ';';
|
||||||
|
}
|
||||||
|
return '<a class="uoj-username" href="' + uojHome + '/user/' + username + '" ' + 'style="' + style + '">' + text + '</a>';
|
||||||
}
|
}
|
||||||
function getUserSpan(username, realname) {
|
function getUserSpan(username, realname, color) {
|
||||||
if (!username) {
|
if (!username) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
var text = username;
|
var text = username;
|
||||||
|
var style = '';
|
||||||
if (username.charAt(0) == '@') {
|
if (username.charAt(0) == '@') {
|
||||||
username = username.substr(1);
|
username = username.substr(1);
|
||||||
}
|
}
|
||||||
if (realname) {
|
if (realname) {
|
||||||
text = text + ' <span class="uoj-realname d-inline-block">(' + realname + ')</span>';
|
text = text + ' <span class="uoj-realname d-inline-block">(' + realname + ')</span>';
|
||||||
}
|
}
|
||||||
return '<span class="uoj-username">' + text + '</span>';
|
if (color) {
|
||||||
|
style += 'color: ' + color + ';';
|
||||||
|
}
|
||||||
|
return '<span class="uoj-username" ' + 'style="' + style + '">' + text + '</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
function replaceWithHighlightUsername() {
|
function replaceWithHighlightUsername() {
|
||||||
var username = $(this).text();
|
var username = $(this).text();
|
||||||
var realname = $(this).data("realname");
|
var realname = $(this).data("realname");
|
||||||
var color = $(this).data("color");
|
var color = $(this).data("color");
|
||||||
var new_elem_inner = '';
|
|
||||||
|
|
||||||
if ($(this).data("link") != 0) {
|
if ($(this).data("link") != 0) {
|
||||||
new_elem_inner = getUserLink(username, realname);
|
$(this).replaceWith(getUserLink(username, realname, color));
|
||||||
} else {
|
} else {
|
||||||
new_elem_inner = getUserSpan(username, realname);
|
$(this).replaceWith(getUserSpan(username, realname, color));
|
||||||
}
|
}
|
||||||
|
|
||||||
$(this).replaceWith($(new_elem_inner).css('color', color));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$.fn.uoj_honor = function() {
|
$.fn.uoj_honor = function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user