MDL-57487 mod_assign: final deprecation xxx_print_overview
Apart from deprecating assign_print_overview , the following methods have been also deprecated because they are not used anymore: - assign_get_mysubmission_details_for_print_overview - assign_get_grade_details_for_print_overview
This commit is contained in:
+9
-300
@@ -560,315 +560,24 @@ function assign_page_type_list($pagetype, $parentcontext, $currentcontext) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Print an overview of all assignments
|
||||
* for the courses.
|
||||
*
|
||||
* @deprecated since 3.3
|
||||
* @todo The final deprecation of this function will take place in Moodle 3.7 - see MDL-57487.
|
||||
* @param mixed $courses The list of courses to print the overview for
|
||||
* @param array $htmlarray The array of html to return
|
||||
* @return true
|
||||
* @deprecated since Moodle 3.3, when the block_course_overview block was removed.
|
||||
*/
|
||||
function assign_print_overview($courses, &$htmlarray) {
|
||||
global $CFG, $DB;
|
||||
|
||||
debugging('The function assign_print_overview() is now deprecated.', DEBUG_DEVELOPER);
|
||||
|
||||
if (empty($courses) || !is_array($courses) || count($courses) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!$assignments = get_all_instances_in_courses('assign', $courses)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$assignmentids = array();
|
||||
|
||||
// Do assignment_base::isopen() here without loading the whole thing for speed.
|
||||
foreach ($assignments as $key => $assignment) {
|
||||
$time = time();
|
||||
$isopen = false;
|
||||
if ($assignment->duedate) {
|
||||
$duedate = false;
|
||||
if ($assignment->cutoffdate) {
|
||||
$duedate = $assignment->cutoffdate;
|
||||
}
|
||||
if ($duedate) {
|
||||
$isopen = ($assignment->allowsubmissionsfromdate <= $time && $time <= $duedate);
|
||||
} else {
|
||||
$isopen = ($assignment->allowsubmissionsfromdate <= $time);
|
||||
}
|
||||
}
|
||||
if ($isopen) {
|
||||
$assignmentids[] = $assignment->id;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($assignmentids)) {
|
||||
// No assignments to look at - we're done.
|
||||
return true;
|
||||
}
|
||||
|
||||
// Definitely something to print, now include the constants we need.
|
||||
require_once($CFG->dirroot . '/mod/assign/locallib.php');
|
||||
|
||||
$strduedate = get_string('duedate', 'assign');
|
||||
$strcutoffdate = get_string('nosubmissionsacceptedafter', 'assign');
|
||||
$strnolatesubmissions = get_string('nolatesubmissions', 'assign');
|
||||
$strduedateno = get_string('duedateno', 'assign');
|
||||
$strassignment = get_string('modulename', 'assign');
|
||||
|
||||
// We do all possible database work here *outside* of the loop to ensure this scales.
|
||||
list($sqlassignmentids, $assignmentidparams) = $DB->get_in_or_equal($assignmentids);
|
||||
|
||||
$mysubmissions = null;
|
||||
$unmarkedsubmissions = null;
|
||||
|
||||
foreach ($assignments as $assignment) {
|
||||
|
||||
// Do not show assignments that are not open.
|
||||
if (!in_array($assignment->id, $assignmentids)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$context = context_module::instance($assignment->coursemodule);
|
||||
|
||||
// Does the submission status of the assignment require notification?
|
||||
if (has_capability('mod/assign:submit', $context, null, false)) {
|
||||
// Does the submission status of the assignment require notification?
|
||||
$submitdetails = assign_get_mysubmission_details_for_print_overview($mysubmissions, $sqlassignmentids,
|
||||
$assignmentidparams, $assignment);
|
||||
} else {
|
||||
$submitdetails = false;
|
||||
}
|
||||
|
||||
if (has_capability('mod/assign:grade', $context, null, false)) {
|
||||
// Does the grading status of the assignment require notification ?
|
||||
$gradedetails = assign_get_grade_details_for_print_overview($unmarkedsubmissions, $sqlassignmentids,
|
||||
$assignmentidparams, $assignment, $context);
|
||||
} else {
|
||||
$gradedetails = false;
|
||||
}
|
||||
|
||||
if (empty($submitdetails) && empty($gradedetails)) {
|
||||
// There is no need to display this assignment as there is nothing to notify.
|
||||
continue;
|
||||
}
|
||||
|
||||
$dimmedclass = '';
|
||||
if (!$assignment->visible) {
|
||||
$dimmedclass = ' class="dimmed"';
|
||||
}
|
||||
$href = $CFG->wwwroot . '/mod/assign/view.php?id=' . $assignment->coursemodule;
|
||||
$basestr = '<div class="assign overview">' .
|
||||
'<div class="name">' .
|
||||
$strassignment . ': '.
|
||||
'<a ' . $dimmedclass .
|
||||
'title="' . $strassignment . '" ' .
|
||||
'href="' . $href . '">' .
|
||||
format_string($assignment->name) .
|
||||
'</a></div>';
|
||||
if ($assignment->duedate) {
|
||||
$userdate = userdate($assignment->duedate);
|
||||
$basestr .= '<div class="info">' . $strduedate . ': ' . $userdate . '</div>';
|
||||
} else {
|
||||
$basestr .= '<div class="info">' . $strduedateno . '</div>';
|
||||
}
|
||||
if ($assignment->cutoffdate) {
|
||||
if ($assignment->cutoffdate == $assignment->duedate) {
|
||||
$basestr .= '<div class="info">' . $strnolatesubmissions . '</div>';
|
||||
} else {
|
||||
$userdate = userdate($assignment->cutoffdate);
|
||||
$basestr .= '<div class="info">' . $strcutoffdate . ': ' . $userdate . '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
// Show only relevant information.
|
||||
if (!empty($submitdetails)) {
|
||||
$basestr .= $submitdetails;
|
||||
}
|
||||
|
||||
if (!empty($gradedetails)) {
|
||||
$basestr .= $gradedetails;
|
||||
}
|
||||
$basestr .= '</div>';
|
||||
|
||||
if (empty($htmlarray[$assignment->course]['assign'])) {
|
||||
$htmlarray[$assignment->course]['assign'] = $basestr;
|
||||
} else {
|
||||
$htmlarray[$assignment->course]['assign'] .= $basestr;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
function assign_print_overview() {
|
||||
throw new coding_exception('assign_print_overview() can not be used any more and is obsolete.');
|
||||
}
|
||||
|
||||
/**
|
||||
* This api generates html to be displayed to students in print overview section, related to their submission status of the given
|
||||
* assignment.
|
||||
*
|
||||
* @deprecated since 3.3
|
||||
* @todo The final deprecation of this function will take place in Moodle 3.7 - see MDL-57487.
|
||||
* @param array $mysubmissions list of submissions of current user indexed by assignment id.
|
||||
* @param string $sqlassignmentids sql clause used to filter open assignments.
|
||||
* @param array $assignmentidparams sql params used to filter open assignments.
|
||||
* @param stdClass $assignment current assignment
|
||||
*
|
||||
* @return bool|string html to display , false if nothing needs to be displayed.
|
||||
* @throws coding_exception
|
||||
* @deprecated since Moodle 3.3, when the block_course_overview block was removed.
|
||||
*/
|
||||
function assign_get_mysubmission_details_for_print_overview(&$mysubmissions, $sqlassignmentids, $assignmentidparams,
|
||||
$assignment) {
|
||||
global $USER, $DB;
|
||||
|
||||
debugging('The function assign_get_mysubmission_details_for_print_overview() is now deprecated.', DEBUG_DEVELOPER);
|
||||
|
||||
if ($assignment->nosubmissions) {
|
||||
// Offline assignment. No need to display alerts for offline assignments.
|
||||
return false;
|
||||
}
|
||||
|
||||
$strnotsubmittedyet = get_string('notsubmittedyet', 'assign');
|
||||
|
||||
if (!isset($mysubmissions)) {
|
||||
|
||||
// Get all user submissions, indexed by assignment id.
|
||||
$dbparams = array_merge(array($USER->id), $assignmentidparams, array($USER->id));
|
||||
$mysubmissions = $DB->get_records_sql('SELECT a.id AS assignment,
|
||||
a.nosubmissions AS nosubmissions,
|
||||
g.timemodified AS timemarked,
|
||||
g.grader AS grader,
|
||||
g.grade AS grade,
|
||||
s.status AS status
|
||||
FROM {assign} a, {assign_submission} s
|
||||
LEFT JOIN {assign_grades} g ON
|
||||
g.assignment = s.assignment AND
|
||||
g.userid = ? AND
|
||||
g.attemptnumber = s.attemptnumber
|
||||
WHERE a.id ' . $sqlassignmentids . ' AND
|
||||
s.latest = 1 AND
|
||||
s.assignment = a.id AND
|
||||
s.userid = ?', $dbparams);
|
||||
}
|
||||
|
||||
$submitdetails = '';
|
||||
$submitdetails .= '<div class="details">';
|
||||
$submitdetails .= get_string('mysubmission', 'assign');
|
||||
$submission = false;
|
||||
|
||||
if (isset($mysubmissions[$assignment->id])) {
|
||||
$submission = $mysubmissions[$assignment->id];
|
||||
}
|
||||
|
||||
if ($submission && $submission->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED) {
|
||||
// A valid submission already exists, no need to notify students about this.
|
||||
return false;
|
||||
}
|
||||
|
||||
// We need to show details only if a valid submission doesn't exist.
|
||||
if (!$submission ||
|
||||
!$submission->status ||
|
||||
$submission->status == ASSIGN_SUBMISSION_STATUS_DRAFT ||
|
||||
$submission->status == ASSIGN_SUBMISSION_STATUS_NEW
|
||||
) {
|
||||
$submitdetails .= $strnotsubmittedyet;
|
||||
} else {
|
||||
$submitdetails .= get_string('submissionstatus_' . $submission->status, 'assign');
|
||||
}
|
||||
if ($assignment->markingworkflow) {
|
||||
$workflowstate = $DB->get_field('assign_user_flags', 'workflowstate', array('assignment' =>
|
||||
$assignment->id, 'userid' => $USER->id));
|
||||
if ($workflowstate) {
|
||||
$gradingstatus = 'markingworkflowstate' . $workflowstate;
|
||||
} else {
|
||||
$gradingstatus = 'markingworkflowstate' . ASSIGN_MARKING_WORKFLOW_STATE_NOTMARKED;
|
||||
}
|
||||
} else if (!empty($submission->grade) && $submission->grade !== null && $submission->grade >= 0) {
|
||||
$gradingstatus = ASSIGN_GRADING_STATUS_GRADED;
|
||||
} else {
|
||||
$gradingstatus = ASSIGN_GRADING_STATUS_NOT_GRADED;
|
||||
}
|
||||
$submitdetails .= ', ' . get_string($gradingstatus, 'assign');
|
||||
$submitdetails .= '</div>';
|
||||
return $submitdetails;
|
||||
function assign_get_mysubmission_details_for_print_overview() {
|
||||
throw new coding_exception('assign_get_mysubmission_details_for_print_overview() can not be used any more and is obsolete.');
|
||||
}
|
||||
|
||||
/**
|
||||
* This api generates html to be displayed to teachers in print overview section, related to the grading status of the given
|
||||
* assignment's submissions.
|
||||
*
|
||||
* @deprecated since 3.3
|
||||
* @todo The final deprecation of this function will take place in Moodle 3.7 - see MDL-57487.
|
||||
* @param array $unmarkedsubmissions list of submissions of that are currently unmarked indexed by assignment id.
|
||||
* @param string $sqlassignmentids sql clause used to filter open assignments.
|
||||
* @param array $assignmentidparams sql params used to filter open assignments.
|
||||
* @param stdClass $assignment current assignment
|
||||
* @param context $context context of the assignment.
|
||||
*
|
||||
* @return bool|string html to display , false if nothing needs to be displayed.
|
||||
* @throws coding_exception
|
||||
* @deprecated since Moodle 3.3, when the block_course_overview block was removed.
|
||||
*/
|
||||
function assign_get_grade_details_for_print_overview(&$unmarkedsubmissions, $sqlassignmentids, $assignmentidparams,
|
||||
$assignment, $context) {
|
||||
global $DB;
|
||||
|
||||
debugging('The function assign_get_grade_details_for_print_overview() is now deprecated.', DEBUG_DEVELOPER);
|
||||
|
||||
if (!isset($unmarkedsubmissions)) {
|
||||
// Build up and array of unmarked submissions indexed by assignment id/ userid
|
||||
// for use where the user has grading rights on assignment.
|
||||
$dbparams = array_merge(array(ASSIGN_SUBMISSION_STATUS_SUBMITTED), $assignmentidparams);
|
||||
$rs = $DB->get_recordset_sql('SELECT s.assignment as assignment,
|
||||
s.userid as userid,
|
||||
s.id as id,
|
||||
s.status as status,
|
||||
g.timemodified as timegraded
|
||||
FROM {assign_submission} s
|
||||
LEFT JOIN {assign_grades} g ON
|
||||
s.userid = g.userid AND
|
||||
s.assignment = g.assignment AND
|
||||
g.attemptnumber = s.attemptnumber
|
||||
LEFT JOIN {assign} a ON
|
||||
a.id = s.assignment
|
||||
WHERE
|
||||
( g.timemodified is NULL OR
|
||||
s.timemodified >= g.timemodified OR
|
||||
g.grade IS NULL OR
|
||||
(g.grade = -1 AND
|
||||
a.grade < 0)) AND
|
||||
s.timemodified IS NOT NULL AND
|
||||
s.status = ? AND
|
||||
s.latest = 1 AND
|
||||
s.assignment ' . $sqlassignmentids, $dbparams);
|
||||
|
||||
$unmarkedsubmissions = array();
|
||||
foreach ($rs as $rd) {
|
||||
$unmarkedsubmissions[$rd->assignment][$rd->userid] = $rd->id;
|
||||
}
|
||||
$rs->close();
|
||||
}
|
||||
|
||||
// Count how many people can submit.
|
||||
$submissions = 0;
|
||||
if ($students = get_enrolled_users($context, 'mod/assign:view', 0, 'u.id')) {
|
||||
foreach ($students as $student) {
|
||||
if (isset($unmarkedsubmissions[$assignment->id][$student->id])) {
|
||||
$submissions++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($submissions) {
|
||||
$urlparams = array('id' => $assignment->coursemodule, 'action' => 'grading');
|
||||
$url = new moodle_url('/mod/assign/view.php', $urlparams);
|
||||
$gradedetails = '<div class="details">' .
|
||||
'<a href="' . $url . '">' .
|
||||
get_string('submissionsnotgraded', 'assign', $submissions) .
|
||||
'</a></div>';
|
||||
return $gradedetails;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
function assign_get_grade_details_for_print_overview() {
|
||||
throw new coding_exception('assign_get_grade_details_for_print_overview() can not be used any more and is obsolete.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -128,8 +128,6 @@ trait mod_assign_test_generator {
|
||||
]);
|
||||
|
||||
// Bump all timecreated and timemodified for this user back.
|
||||
// The old assign_print_overview function includes submissions which have been graded where the grade modified
|
||||
// date matches the submission modified date.
|
||||
$DB->execute('UPDATE {assign_submission} SET timecreated = timecreated - 1, timemodified = timemodified - 1 WHERE userid = :userid',
|
||||
['userid' => $student->id]);
|
||||
|
||||
|
||||
@@ -46,139 +46,6 @@ class mod_assign_lib_testcase extends advanced_testcase {
|
||||
// Use the generator helper.
|
||||
use mod_assign_test_generator;
|
||||
|
||||
public function test_assign_print_overview() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$teacher = $this->getDataGenerator()->create_and_enrol($course, 'teacher');
|
||||
$student = $this->getDataGenerator()->create_and_enrol($course, 'student');
|
||||
|
||||
$this->setAdminUser();
|
||||
|
||||
// Assignment with default values.
|
||||
$firstassign = $this->create_instance($course, ['name' => 'First Assignment']);
|
||||
|
||||
// Assignment with submissions.
|
||||
$secondassign = $this->create_instance($course, [
|
||||
'name' => 'Assignment with submissions',
|
||||
'duedate' => time(),
|
||||
'attemptreopenmethod' => ASSIGN_ATTEMPT_REOPEN_METHOD_MANUAL,
|
||||
'maxattempts' => 3,
|
||||
'submissiondrafts' => 1,
|
||||
'assignsubmission_onlinetext_enabled' => 1,
|
||||
]);
|
||||
$this->add_submission($student, $secondassign);
|
||||
$this->submit_for_grading($student, $secondassign);
|
||||
$this->mark_submission($teacher, $secondassign, $student, 50.0);
|
||||
|
||||
// Past assignments should not show up.
|
||||
$pastassign = $this->create_instance($course, [
|
||||
'name' => 'Past Assignment',
|
||||
'duedate' => time() - DAYSECS - 1,
|
||||
'cutoffdate' => time() - DAYSECS,
|
||||
'nosubmissions' => 0,
|
||||
'assignsubmission_onlinetext_enabled' => 1,
|
||||
]);
|
||||
|
||||
// Open assignments should show up only if relevant.
|
||||
$openassign = $this->create_instance($course, [
|
||||
'name' => 'Open Assignment',
|
||||
'duedate' => time(),
|
||||
'cutoffdate' => time() + DAYSECS,
|
||||
'nosubmissions' => 0,
|
||||
'assignsubmission_onlinetext_enabled' => 1,
|
||||
]);
|
||||
$pastsubmission = $pastassign->get_user_submission($student->id, true);
|
||||
$opensubmission = $openassign->get_user_submission($student->id, true);
|
||||
|
||||
// Check the overview as the different users.
|
||||
// For students , open assignments should show only when there are no valid submissions.
|
||||
$this->setUser($student);
|
||||
$overview = array();
|
||||
$courses = $DB->get_records('course', array('id' => $course->id));
|
||||
assign_print_overview($courses, $overview);
|
||||
$this->assertDebuggingCalledCount(3);
|
||||
$this->assertEquals(1, count($overview));
|
||||
$this->assertRegExp('/.*Open Assignment.*/', $overview[$course->id]['assign']); // No valid submission.
|
||||
$this->assertNotRegExp('/.*First Assignment.*/', $overview[$course->id]['assign']); // Has valid submission.
|
||||
|
||||
// And now submit the submission.
|
||||
$opensubmission->status = ASSIGN_SUBMISSION_STATUS_SUBMITTED;
|
||||
$openassign->testable_update_submission($opensubmission, $student->id, true, false);
|
||||
|
||||
$overview = array();
|
||||
assign_print_overview($courses, $overview);
|
||||
$this->assertDebuggingCalledCount(3);
|
||||
$this->assertEquals(0, count($overview));
|
||||
|
||||
$this->setUser($teacher);
|
||||
$overview = array();
|
||||
assign_print_overview($courses, $overview);
|
||||
$this->assertDebuggingCalledCount(3);
|
||||
$this->assertEquals(1, count($overview));
|
||||
// Submissions without a grade.
|
||||
$this->assertRegExp('/.*Open Assignment.*/', $overview[$course->id]['assign']);
|
||||
$this->assertNotRegExp('/.*Assignment with submissions.*/', $overview[$course->id]['assign']);
|
||||
|
||||
$this->setUser($teacher);
|
||||
$overview = array();
|
||||
assign_print_overview($courses, $overview);
|
||||
$this->assertDebuggingCalledCount(3);
|
||||
$this->assertEquals(1, count($overview));
|
||||
// Submissions without a grade.
|
||||
$this->assertRegExp('/.*Open Assignment.*/', $overview[$course->id]['assign']);
|
||||
$this->assertNotRegExp('/.*Assignment with submissions.*/', $overview[$course->id]['assign']);
|
||||
|
||||
// Let us grade a submission.
|
||||
$this->setUser($teacher);
|
||||
$data = new stdClass();
|
||||
$data->grade = '50.0';
|
||||
$openassign->testable_apply_grade_to_user($data, $student->id, 0);
|
||||
|
||||
// The assign_print_overview expects the grade date to be after the submission date.
|
||||
$graderecord = $DB->get_record('assign_grades', array('assignment' => $openassign->get_instance()->id,
|
||||
'userid' => $student->id, 'attemptnumber' => 0));
|
||||
$graderecord->timemodified += 1;
|
||||
$DB->update_record('assign_grades', $graderecord);
|
||||
|
||||
$overview = array();
|
||||
assign_print_overview($courses, $overview);
|
||||
// Now assignment 4 should not show up.
|
||||
$this->assertDebuggingCalledCount(3);
|
||||
$this->assertEmpty($overview);
|
||||
|
||||
$this->setUser($teacher);
|
||||
$overview = array();
|
||||
assign_print_overview($courses, $overview);
|
||||
$this->assertDebuggingCalledCount(3);
|
||||
// Now assignment 4 should not show up.
|
||||
$this->assertEmpty($overview);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that assign_print_overview does not return any assignments which are Open Offline.
|
||||
*/
|
||||
public function test_assign_print_overview_open_offline() {
|
||||
$this->resetAfterTest();
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$student = $this->getDataGenerator()->create_and_enrol($course, 'student');
|
||||
|
||||
$this->setAdminUser();
|
||||
$openassign = $this->create_instance($course, [
|
||||
'duedate' => time() + DAYSECS,
|
||||
'cutoffdate' => time() + (DAYSECS * 2),
|
||||
]);
|
||||
|
||||
$this->setUser($student);
|
||||
$overview = [];
|
||||
assign_print_overview([$course], $overview);
|
||||
|
||||
$this->assertDebuggingCalledCount(1);
|
||||
$this->assertEquals(0, count($overview));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that assign_print_recent_activity shows ungraded submitted assignments.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user