-
-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathrejudge.php
117 lines (102 loc) · 4.76 KB
/
rejudge.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
// This file is part of Moodle - https://moodle.org
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* NOTICE OF COPYRIGHT
*
* Online Judge for Moodle
* https://github.com/hit-moodle/moodle-local_onlinejudge
*
* Copyright (C) 2009 onwards
* Sun Zhigang http://sunner.cn
* Andrew Naguib <andrew at fci helwan edu eg>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
*
* http://www.gnu.org/copyleft/gpl.html
*/
// Threshhold to prevent further rejudge-all requests
define('PREVENTION_THRESHHOLD', 500);
require_once(dirname(__FILE__) . '/../../../../config.php');
require_once($CFG->dirroot . "/mod/assign/locallib.php");
require_once("$CFG->dirroot/mod/assign/feedback/onlinejudge/lib.php");
require_once("$CFG->dirroot/mod/assign/feedback/onlinejudge/locallib.php");
$id = optional_param('id', 0, PARAM_INT); // Course Module ID
$a = optional_param('a', 0, PARAM_INT); // Assignment ID
$confirm = optional_param('confirm', 0, PARAM_INT); // Force to rejudge
$url = new moodle_url('/mod/assign/feedback/onlinejudge/rejudge.php');
global $DB, $PAGE, $OUTPUT;
if ($id) {
if (!$cm = get_coursemodule_from_id('assign', $id)) {
print_error('invalidcoursemodule');
}
if (!$assignment = $DB->get_record("assign", array("id" => $cm->instance))) {
print_error('invalidid', 'assign');
}
if (!$course = $DB->get_record("course", array("id" => $assignment->course))) {
print_error('coursemisconf', 'assign');
}
$url->param('id', $id);
} else {
if (!$assignment = $DB->get_record("assign", array("id" => $a))) {
print_error('invalidid', 'assign');
}
if (!$course = $DB->get_record("course", array("id" => $assignment->course))) {
print_error('coursemisconf', 'assign');
}
if (!$cm = get_coursemodule_from_instance("assign", $assignment->id, $course->id)) {
print_error('invalidcoursemodule');
}
$url->param('a', $a);
}
$PAGE->set_url($url);
require_login($course, true, $cm);
$context = context_course::instance($cm->course);
require_capability('mod/assign:grade', $context);
$assign = new assign($context, $cm, $course);
$assignmentinstance = new assign_feedback_onlinejudge($assign, 'feedback');
$pending = $DB->count_records('onlinejudge_tasks', array('status' => ONLINEJUDGE_STATUS_PENDING));
if ($pending > PREVENTION_THRESHHOLD) {
// Prevent rejudge all requests if judged is busy
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('rejudgeall', 'assignfeedback_onlinejudge'));
echo $OUTPUT->box(get_string('rejudgelater', 'assignfeedback_onlinejudge'));
echo $OUTPUT->footer();
} else if ($confirm == 1 && confirm_sesskey()) {
$rejudgestate = $assignmentinstance->rejudge_all();
if ($rejudgestate) {
$urlparams = array('id' => $cm->id, 'action' => 'grading');
$url = new moodle_url('/mod/assign/view.php', $urlparams);
redirect($url, get_string('rejudgeallrequestsent', 'assignfeedback_onlinejudge'), 10, \core\output\notification::NOTIFY_SUCCESS);
} else {
$urlparams = array('id' => $cm->id,);
$url = new moodle_url('/mod/assign/view.php', $urlparams);
redirect($url, get_string('rejudgeallrequestfailed', 'assignfeedback_onlinejudge'), 10, \core\output\notification::NOTIFY_ERROR);
}
} else {
$optionsno = array('id' => $id);
$optionsyes = array('id' => $id, 'confirm' => 1, 'sesskey' => sesskey());
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('rejudgeall', 'assignfeedback_onlinejudge'));
echo $OUTPUT->confirm(get_string('rejudgeallnotice', 'assignfeedback_onlinejudge'), new moodle_url('rejudge.php', $optionsyes), new moodle_url('../../view.php', $optionsno));
echo $OUTPUT->footer();
}