diff --git a/packages/hydrooj/locales/zh.yaml b/packages/hydrooj/locales/zh.yaml index 838e63f48..174c91a4a 100644 --- a/packages/hydrooj/locales/zh.yaml +++ b/packages/hydrooj/locales/zh.yaml @@ -338,6 +338,8 @@ Homework Introduction: 作业介绍 Homework scoreboard is not visible.: 目前无法查看作业成绩表。 homework_create: 创建作业 homework_detail_problem_submit: 递交作业题目 +homework_detail_problem: 题目详情 +homework_detail: 作业详情 homework_edit: 编辑作业 homework_main: 作业 homework_scoreboard: 作业成绩表 @@ -602,9 +604,9 @@ RP Algorithm: RP 算法 Rule: 规则 Run Pretest: 运行自测 Run: 运行 -Sample: 样例 Sample Input: 输入数据 Sample Output: 输出数据 +Sample: 样例 Save All Changes: 保存所有修改 Saved session: 已保存的会话 score canceled: 成绩取消 @@ -819,4 +821,4 @@ You've already attended this contest.: 您已经参加本次比赛。 You've already claimed this homework.: 您已认领过该作业。 You've already voted.: 您已经投过票。 Your permission: 您的权限 -Your role: 您的角色 +Your role: 您的角色 \ No newline at end of file diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 56c30354c..a43e9a285 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.16.0", + "version": "2.16.1", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index 8b352042e..59afc6b94 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -140,7 +140,7 @@ class HomeworkDetailProblemHandler extends HomeworkHandler { ]; this.response.template = 'problem_detail.html'; this.response.body = { - tdoc: this.tdoc, pdoc: this.pdoc, tsdoc: this.tsdoc, udoc, attended, path, + tdoc: this.tdoc, pdoc: this.pdoc, tsdoc: this.tsdoc, udoc, attended, path, page_name: 'homework_detail_problem', }; } } @@ -247,9 +247,9 @@ class HomeworkCreateHandler extends HomeworkHandler { const endAt = penaltySince.clone().add(extensionDays, 'days'); if (beginAt.isSameOrAfter(penaltySince)) throw new ValidationError('endAtDate', 'endAtTime'); if (penaltySince.isAfter(endAt)) throw new ValidationError('extensionDays'); - await this.verifyProblems(domainId, pids); + const verified = await this.verifyProblems(domainId, pids); const tid = await contest.add(domainId, title, content, this.user._id, - 'homework', beginAt.toDate(), endAt.toDate(), pids, rated, + 'homework', beginAt.toDate(), endAt.toDate(), verified, rated, { penaltySince: penaltySince.toDate(), penaltyRules }, document.TYPE_HOMEWORK); this.response.body = { tid }; this.response.redirect = this.url('homework_detail', { tid }); @@ -324,17 +324,17 @@ class HomeworkEditHandler extends HomeworkHandler { } let endAt = penaltySince.clone().add(extensionDays, 'days'); if (beginAt.isSameOrAfter(penaltySince)) throw new ValidationError('endAtDate', 'endAtTime'); - await this.verifyProblems(domainId, pids); + const verified = await this.verifyProblems(domainId, pids); beginAt = beginAt.toDate(); endAt = endAt.toDate(); penaltySince = penaltySince.toDate(); await contest.edit(domainId, tid, { - title, content, beginAt, endAt, pids, penaltySince, penaltyRules, rated, + title, content, beginAt, endAt, verified, penaltySince, penaltyRules, rated, }, document.TYPE_HOMEWORK); if (tdoc.beginAt !== beginAt || tdoc.endAt !== endAt || tdoc.penaltySince !== penaltySince - || new Set(tdoc.pids) !== new Set(pids)) { + || tdoc.pids.sort().join(' ') !== verified.sort().join(' ')) { await contest.recalcStatus(domainId, tdoc.docId, document.TYPE_HOMEWORK); } this.response.body = { tid }; diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index c221aed8e..ecebc18c2 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -190,7 +190,7 @@ export async function getList( } } } - return r; + return Object.assign(r, l); } export async function getListStatus(domainId: string, uid: number, pids: number[]) { diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 7dd044b25..b32463bc4 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -446,7 +446,7 @@ export class Handler extends HandlerCommon { this.getSession(), this.getBdoc(), ]); - if (inferDomain) { + if (inferDomain && !this.request.path.startsWith('/d/')) { this.domainId = inferDomain._id; this.args.domainId = inferDomain._id; this.domain = inferDomain; diff --git a/packages/hydrooj/src/upgrade.ts b/packages/hydrooj/src/upgrade.ts index ee4f13625..552071875 100644 --- a/packages/hydrooj/src/upgrade.ts +++ b/packages/hydrooj/src/upgrade.ts @@ -21,14 +21,15 @@ import * as system from './model/system'; const logger = new Logger('upgrade'); type UpgradeScript = () => Promise; -async function iterateAllDomain(cb: (ddoc: DomainDoc) => Promise) { - const domains = await domain.getMulti().project({ _id: 1 }).toArray(); - for (const d of domains) await cb(d); +async function iterateAllDomain(cb: (ddoc: DomainDoc, current?: number, total?: number) => Promise) { + const ddocs = await domain.getMulti().project({ _id: 1 }).toArray(); + for (const i in ddocs) await cb(ddocs[i], +i, ddocs.length); } -async function iterateAllProblem(cb: (pdoc: problem.Pdoc) => Promise) { +async function iterateAllProblem(cb: (pdoc: problem.Pdoc, current?: number, total?: number) => Promise) { await iterateAllDomain(async (d) => { - await problem.getMulti(d._id, {}).forEach(cb); + const pdocs = await problem.getMulti(d._id, {}).toArray(); + for (const i in pdocs) await cb(pdocs[i], +i, pdocs.length); }); } @@ -77,7 +78,7 @@ const scripts: UpgradeScript[] = [ if (savedProgress) savedProgress = JSON.parse(savedProgress); else savedProgress = { pdocs: [] }; const ddocs = await domain.getMulti().project({ _id: 1 }).toArray(); - logger.info('Total found %d domains.', ddocs.length); + logger.info('Found %d domains.', ddocs.length); for (let i = 0; i < ddocs.length; i++) { const ddoc = ddocs[i]; logger.info('Domain %s (%d/%d)', ddoc._id, i + 1, ddocs.length);