mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
修复参加比赛的错误
This commit is contained in:
1 parent
32ad47e031
commit
f40e4e2c74
10 files changed
+62
-38
No files matched your search
+11
-10
@@ -14,10 +14,10 @@ const
|
||||
|
||||
class ContestHandler extends Handler {
|
||||
canViewHiddenScoreboard() {
|
||||
return this.hasPerm(PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD);
|
||||
return this.user.hasPerm(PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD);
|
||||
}
|
||||
canShowRecord(tdoc, allowPermOverride = true) {
|
||||
if (contest.RULES[tdoc.rule].showRecordFunc(tdoc, new Date())) return true;
|
||||
if (contest.RULES[tdoc.rule].showRecord(tdoc, new Date())) return true;
|
||||
if (allowPermOverride && this.canViewHiddenScoreboard(tdoc)) return true;
|
||||
return false;
|
||||
}
|
||||
@@ -27,14 +27,15 @@ class ContestHandler extends Handler {
|
||||
return false;
|
||||
}
|
||||
async getScoreboard(tid, isExport = false) {
|
||||
let [tdoc, tsdocs] = await contest.getAndListStatus(tid);
|
||||
let tdoc = await contest.get(tid);
|
||||
if (!this.canShowScoreboard(tdoc)) throw new ContestScoreboardHiddenError(tid);
|
||||
let tsdocs = await contest.getMultiStatus(tid).sort(contest.RULES[tdoc.rule].statusSort).toArray();
|
||||
let uids = [];
|
||||
for (let tsdoc of tsdocs) uids.push(tsdoc.uid);
|
||||
let [udict, pdict] = await Promise.all([user.getList(uids), problem.getList(tdoc['pids'])]);
|
||||
let ranked_tsdocs = contest.RULES[tdoc.rule].rank(tsdocs);
|
||||
let rows = contest.RULES[tdoc.rule].scoreboard(isExport, this.translate, tdoc, ranked_tsdocs, udict, pdict);
|
||||
return tdoc, rows, udict;
|
||||
let rows = contest.RULES[tdoc.rule].scoreboard(isExport, str => str ? str.toString().translate(this.user.language) : '', tdoc, ranked_tsdocs, udict, pdict);
|
||||
return [tdoc, rows, udict];
|
||||
}
|
||||
async verifyProblems(pids) {
|
||||
console.log(pids);
|
||||
@@ -61,17 +62,17 @@ class ContestListHandler extends ContestHandler {
|
||||
this.response.template = 'contest_main.html';
|
||||
let tdocs, qs, tpcount;
|
||||
if (!rule) {
|
||||
tdocs = contest.getMulti();
|
||||
tdocs = contest.getMulti().sort({ beginAt: -1 });
|
||||
qs = '';
|
||||
} else {
|
||||
if (!contest.CONTEST_RULES.includes(rule)) throw new ValidationError('rule');
|
||||
tdocs = contest.getMulti({ rule });
|
||||
tdocs = contest.getMulti({ rule }).sort({ beginAt: -1 });
|
||||
qs = 'rule={0}'.format(rule);
|
||||
}
|
||||
[tdocs, tpcount] = await paginate(tdocs, page, constants.CONTEST_PER_PAGE);
|
||||
let tids = [];
|
||||
for (let tdoc of tdocs) tids.push(tdoc._id);
|
||||
let tsdict = await contest.getListStatus(this.uid, tids);
|
||||
let tsdict = await contest.getListStatus(this.user._id, tids);
|
||||
this.response.body = {
|
||||
page, tpcount, qs, rule, tdocs, tsdict
|
||||
};
|
||||
@@ -84,7 +85,7 @@ class ContestDetailHandler extends ContestHandler {
|
||||
async get({ page = 1 }) {
|
||||
this.response.template = 'contest_detail.html';
|
||||
let [tsdoc, pdict] = await Promise.all([
|
||||
contest.getStatus(this.tdoc._id, this.uid),
|
||||
contest.getStatus(this.tdoc._id, this.user._id),
|
||||
problem.getList(this.tdoc.pids)
|
||||
]);
|
||||
let psdict = {}, rdict = {}, attended;
|
||||
@@ -111,7 +112,7 @@ class ContestDetailHandler extends ContestHandler {
|
||||
}
|
||||
async post_attend() {
|
||||
if (contest.is_done(this.tdoc)) throw new ContestNotLiveError(this.tdoc._id);
|
||||
await contest.attend(this.tdoc._id, this.uid);
|
||||
await contest.attend(this.tdoc._id, this.user._id);
|
||||
this.back();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user