mirror of
https://github.com/moodle/moodle.git
synced 2025-08-10 03:16:42 +02:00
MDL-60957 mod_assign: Add calendar event for extension due dates
This commit is contained in:
parent
1a33da6637
commit
f6fb07be52
3 changed files with 78 additions and 7 deletions
|
@ -130,6 +130,7 @@ $string['blindmarkingenabledwarning'] = 'Anonymous submissions are enabled for t
|
|||
$string['blindmarking_help'] = 'Anonymous submissions hide the identity of students from markers. Anonymous submission settings will be locked once a submission or grade has been made in relation to this assignment.';
|
||||
$string['cachedef_overrides'] = 'User and group override information';
|
||||
$string['calendardue'] = '{$a} is due';
|
||||
$string['calendarextension'] = '{$a} is due (extension)';
|
||||
$string['calendargradingdue'] = '{$a} is due to be graded';
|
||||
$string['caneditsubmission'] = 'You can edit your submission and submit it after the time limit has expired, but it will be marked as late.';
|
||||
$string['changeuser'] = 'Change user';
|
||||
|
|
|
@ -88,6 +88,7 @@ define('ASSIGN_EVENT_TYPE_DUE', 'due');
|
|||
define('ASSIGN_EVENT_TYPE_GRADINGDUE', 'gradingdue');
|
||||
define('ASSIGN_EVENT_TYPE_OPEN', 'open');
|
||||
define('ASSIGN_EVENT_TYPE_CLOSE', 'close');
|
||||
define('ASSIGN_EVENT_TYPE_EXTENSION', 'extension');
|
||||
|
||||
require_once($CFG->libdir . '/accesslib.php');
|
||||
require_once($CFG->libdir . '/formslib.php');
|
||||
|
@ -6940,7 +6941,8 @@ class assign {
|
|||
* @return boolean
|
||||
*/
|
||||
public function save_user_extension($userid, $extensionduedate) {
|
||||
global $DB;
|
||||
global $DB, $CFG;
|
||||
require_once($CFG->dirroot.'/calendar/lib.php');
|
||||
|
||||
// Need submit permission to submit an assignment.
|
||||
require_capability('mod/assign:grantextension', $this->context);
|
||||
|
@ -6970,6 +6972,48 @@ class assign {
|
|||
|
||||
if ($result) {
|
||||
\mod_assign\event\extension_granted::create_from_assign($this, $userid)->trigger();
|
||||
|
||||
$cm = $this->get_course_module();
|
||||
$instance = $this->get_instance();
|
||||
|
||||
if ($extensionduedate) {
|
||||
$event = $DB->get_record('event', [
|
||||
'userid' => $userid,
|
||||
'eventtype' => ASSIGN_EVENT_TYPE_EXTENSION,
|
||||
'modulename' => 'assign',
|
||||
'instance' => $instance->id,
|
||||
]);
|
||||
|
||||
if ($event) {
|
||||
$event->timestart = $extensionduedate;
|
||||
$DB->update_record('event', $event);
|
||||
} else {
|
||||
$event = new stdClass();
|
||||
$event->type = CALENDAR_EVENT_TYPE_ACTION;
|
||||
$event->name = get_string('calendarextension', 'assign', $instance->name);
|
||||
$event->description = format_module_intro('assign', $instance, $cm->id);
|
||||
$event->format = FORMAT_HTML;
|
||||
$event->courseid = 0;
|
||||
$event->groupid = 0;
|
||||
$event->userid = $userid;
|
||||
$event->modulename = 'assign';
|
||||
$event->instance = $instance->id;
|
||||
$event->timestart = $extensionduedate;
|
||||
$event->timeduration = 0;
|
||||
$event->visible = instance_is_visible('assign', $instance);
|
||||
$event->eventtype = ASSIGN_EVENT_TYPE_EXTENSION;
|
||||
$event->priority = null;
|
||||
|
||||
calendar_event::create($event, false);
|
||||
}
|
||||
} else {
|
||||
$DB->delete_records('event', [
|
||||
'userid' => $userid,
|
||||
'eventtype' => ASSIGN_EVENT_TYPE_EXTENSION,
|
||||
'modulename' => 'assign',
|
||||
'instance' => $instance->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
|
|
@ -265,7 +265,15 @@ class events_test extends \advanced_testcase {
|
|||
$sink->close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test event creation for save_user_extension().
|
||||
*
|
||||
* @covers \assign::save_user_extension
|
||||
*/
|
||||
public function test_extension_granted(): void {
|
||||
global $DB, $CFG;
|
||||
require_once($CFG->dirroot.'/calendar/lib.php');
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
|
@ -287,12 +295,30 @@ class events_test extends \advanced_testcase {
|
|||
$assign->testable_save_user_extension($student->id, $tomorrow);
|
||||
|
||||
$events = $sink->get_events();
|
||||
$this->assertCount(1, $events);
|
||||
$event = reset($events);
|
||||
$this->assertInstanceOf('\mod_assign\event\extension_granted', $event);
|
||||
$this->assertEquals($assign->get_context(), $event->get_context());
|
||||
$this->assertEquals($assign->get_instance()->id, $event->objectid);
|
||||
$this->assertEquals($student->id, $event->relateduserid);
|
||||
|
||||
// Event for extension granted and extension due date.
|
||||
$this->assertCount(2, $events);
|
||||
|
||||
$grantedevent = $events[0];
|
||||
$this->assertInstanceOf('\mod_assign\event\extension_granted', $grantedevent);
|
||||
$this->assertEquals($assign->get_context(), $grantedevent->get_context());
|
||||
$this->assertEquals($assign->get_instance()->id, $grantedevent->objectid);
|
||||
$this->assertEquals($student->id, $grantedevent->relateduserid);
|
||||
|
||||
$calendarevent = $events[1];
|
||||
$this->assertInstanceOf('\core\event\calendar_event_created', $calendarevent);
|
||||
|
||||
// Check that the calendar event is deleted if extension is revoked.
|
||||
$assign->testable_save_user_extension($student->id, '');
|
||||
|
||||
$isexist = $DB->record_exists('event', [
|
||||
'userid' => $student->id,
|
||||
'eventtype' => ASSIGN_EVENT_TYPE_EXTENSION,
|
||||
'modulename' => 'assign',
|
||||
'instance' => $assign->get_course_module()->id,
|
||||
]);
|
||||
$this->assertFalse($isexist);
|
||||
|
||||
$sink->close();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue