ui: allow deleting contest/homework via edit page

pull/92/head
masnn 4 years ago
parent 1bb340f27a
commit 8a8e312ca4

@ -96,6 +96,14 @@ class ContestDetailHandler extends ContestHandler {
await contest.attend(domainId, tid, this.user._id); await contest.attend(domainId, tid, this.user._id);
this.back(); this.back();
} }
@param('tid', Types.ObjectID)
async postDelete(domainId: string, tid: ObjectID) {
const tdoc = await contest.get(domainId, tid);
if (tdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_CONTEST);
await contest.del(domainId, tid);
this.response.redirect = this.url('contest_main');
}
} }
class ContestBoardcastHandler extends ContestHandler { class ContestBoardcastHandler extends ContestHandler {

@ -108,6 +108,14 @@ class HomeworkDetailHandler extends HomeworkHandler {
await contest.attend(domainId, tdoc.docId, this.user._id, document.TYPE_HOMEWORK); await contest.attend(domainId, tdoc.docId, this.user._id, document.TYPE_HOMEWORK);
this.back(); this.back();
} }
@param('tid', Types.ObjectID)
async postDelete(domainId: string, tid: ObjectID) {
const tdoc = await contest.get(domainId, tid, document.TYPE_HOMEWORK);
if (tdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_HOMEWORK);
await contest.del(domainId, tid, document.TYPE_HOMEWORK);
this.response.redirect = this.url('homework_main');
}
} }
class HomeworkDetailProblemHandler extends HomeworkHandler { class HomeworkDetailProblemHandler extends HomeworkHandler {

@ -1,8 +1,34 @@
import { NamedPage } from 'vj/misc/Page'; import { NamedPage } from 'vj/misc/Page';
import { ConfirmDialog } from 'vj/components/dialog';
import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete'; import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete';
import tpl from 'vj/utils/tpl';
import i18n from 'vj/utils/i18n';
import request from 'vj/utils/request';
const page = new NamedPage(['contest_edit', 'contest_create'], () => { const page = new NamedPage(['contest_edit', 'contest_create', 'homework_create', 'homework_edit'], (pagename) => {
ProblemSelectAutoComplete.getOrConstruct($('[name="pids"]'), { multi: true }); ProblemSelectAutoComplete.getOrConstruct($('[name="pids"]'), { multi: true });
if (pagename.endsWith('edit')) {
let confirmed = false;
$(document).on('click', '[name="operation"]', (ev) => {
ev.preventDefault();
if (confirmed) {
return request.post('.', { operation: 'delete' }).then((res) => {
window.location.href = res.url;
});
}
const message = `Confirm deleting this ${pagename.split('_')[0]}? Its status will be deleted as well.`;
return new ConfirmDialog({
$body: tpl`
<div class="typo">
<p>${i18n(message)}</p>
</div>`,
}).open().then((action) => {
if (action !== 'yes') return;
confirmed = true;
ev.target.click();
});
});
}
}); });
export default page; export default page;

@ -79,6 +79,11 @@
<button type="submit" class="rounded primary button"> <button type="submit" class="rounded primary button">
{{ _('Update') }} {{ _('Update') }}
</button> </button>
{% if tdoc.owner == handler.user._id or handler.user.hasPerm(perm.PERM_EDIT_CONTEST) %}
<button name="operation" value="delete" type="submit" class="rounded button">
{{ _('Delete') }}
</button>
{% endif %}
{% else %} {% else %}
<button type="submit" class="rounded primary button"> <button type="submit" class="rounded primary button">
{{ _('Create') }} {{ _('Create') }}

@ -85,6 +85,11 @@
<button type="submit" class="rounded primary button"> <button type="submit" class="rounded primary button">
{{ _('Update') }} {{ _('Update') }}
</button> </button>
{% if tdoc.owner == handler.user._id or handler.user.hasPerm(perm.PERM_EDIT_HOMEWORK) %}
<button name="operation" value="delete" type="submit" class="rounded button">
{{ _('Delete') }}
</button>
{% endif %}
{% else %} {% else %}
<button type="submit" class="rounded primary button"> <button type="submit" class="rounded primary button">
{{ _('Create') }} {{ _('Create') }}

Loading…
Cancel
Save