Skip to content

Commit

Permalink
MDL-65976 completion: New course completion message provider
Browse files Browse the repository at this point in the history
  • Loading branch information
jleyva committed Sep 29, 2020
1 parent e049d30 commit 417e5b9
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 2 deletions.
8 changes: 6 additions & 2 deletions badges/tests/badgeslib_test.php
Expand Up @@ -570,9 +570,13 @@ public function test_badges_observer_course_criteria_review() {
$this->assertFalse($badge->is_issued($this->user->id));

// Mark course as complete.
$sink = $this->redirectEmails();
$sink = $this->redirectMessages();
$ccompletion->mark_complete();
$this->assertCount(1, $sink->get_messages());
// Two messages are generated: One for the course completed and the other one for the badge awarded.
$messages = $sink->get_messages();
$this->assertCount(2, $messages);
$this->assertEquals('badgerecipientnotice', $messages[0]->eventtype);
$this->assertEquals('coursecompleted', $messages[1]->eventtype);
$sink->close();

// Check if badge is awarded.
Expand Down
30 changes: 30 additions & 0 deletions completion/completion_completion.php
Expand Up @@ -173,6 +173,36 @@ public function mark_complete($timecomplete = null) {
\core\event\course_completed::create_from_completion($data)->trigger();
}

// Notify user.
$course = get_course($data->course);
$messagesubject = get_string('coursecompleted', 'completion');
$a = [
'coursename' => get_course_display_name_for_list($course),
'courselink' => (string) new moodle_url('/course/view.php', array('id' => $course->id)),
];
$messagebody = get_string('coursecompletedmessage', 'completion', $a);
$messageplaintext = html_to_text($messagebody);

$eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->component = 'moodle';
$eventdata->name = 'coursecompleted';
$eventdata->userfrom = core_user::get_noreply_user();
$eventdata->userto = $data->userid;
$eventdata->notification = 1;
$eventdata->subject = $messagesubject;
$eventdata->fullmessage = $messageplaintext;
$eventdata->fullmessageformat = FORMAT_HTML;
$eventdata->fullmessagehtml = $messagebody;
$eventdata->smallmessage = $messageplaintext;

if ($courseimage = \core_course\external\course_summary_exporter::get_course_image($course)) {
$eventdata->customdata = [
'notificationpictureurl' => $courseimage,
];
}
message_send($eventdata);

return $result;
}

Expand Down
1 change: 1 addition & 0 deletions lang/en/completion.php
Expand Up @@ -122,6 +122,7 @@
$string['coursealreadycompleted'] = 'You have already completed this course';
$string['coursecomplete'] = 'Course complete';
$string['coursecompleted'] = 'Course completed';
$string['coursecompletedmessage'] = '<p>Congratulations!</p><p>You just completed the following course: <a href="{$a->courselink}">{$a->coursename}</a>.</p>';
$string['coursecompletion'] = 'Course completion';
$string['coursecompletioncondition'] = 'Condition: {$a}';
$string['coursegrade'] = 'Course grade';
Expand Down
1 change: 1 addition & 0 deletions lang/en/moodle.php
Expand Up @@ -1231,6 +1231,7 @@
$string['messageprovider:badgerecipientnotice'] = 'Badge recipient notifications';
$string['messageprovider:competencyplancomment'] = 'Comment posted on a learning plan';
$string['messageprovider:competencyusercompcomment'] = 'Comment posted on a competency';
$string['messageprovider:coursecompleted'] = 'Course completed';
$string['messageprovider:courserequestapproved'] = 'Course creation request approval notification';
$string['messageprovider:courserequested'] = 'Course creation request notification';
$string['messageprovider:courserequestrejected'] = 'Course creation request rejection notification';
Expand Down
3 changes: 3 additions & 0 deletions lib/db/messages.php
Expand Up @@ -86,6 +86,9 @@
),
),

// Course completed. Requires course completion configured at course level. It does not work with just activity progress.
'coursecompleted' => [],

// Badge award notification to a badge recipient.
'badgerecipientnotice' => array (
'defaults' => array(
Expand Down
26 changes: 26 additions & 0 deletions lib/tests/completionlib_test.php
Expand Up @@ -978,6 +978,32 @@ public function test_course_completed_event() {
$this->assertEventLegacyData($data, $event);
}

/**
* Test course completed message.
*/
public function test_course_completed_message() {
$this->setup_data();
$this->setAdminUser();

$completionauto = array('completion' => COMPLETION_TRACKING_AUTOMATIC);
$ccompletion = new completion_completion(array('course' => $this->course->id, 'userid' => $this->user->id));

// Mark course as complete and get the message.
$sink = $this->redirectMessages();
$ccompletion->mark_complete();
$messages = $sink->get_messages();
$sink->close();

$this->assertCount(1, $messages);
$message = array_pop($messages);

$this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom);
$this->assertEquals($this->user->id, $message->useridto);
$this->assertEquals('coursecompleted', $message->eventtype);
$this->assertEquals(get_string('coursecompleted', 'completion'), $message->subject);
$this->assertContains($this->course->fullname, $message->fullmessage);
}

/**
* Test course completed event.
*/
Expand Down

0 comments on commit 417e5b9

Please sign in to comment.