diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php
index dc2561dbe53..9e56fb2435c 100644
--- a/mod/lesson/locallib.php
+++ b/mod/lesson/locallib.php
@@ -1017,6 +1017,13 @@ class lesson extends lesson_base {
*/
protected $cm = null;
+ /**
+ * Course object gets set and retrieved by directly calling $lesson->courserecord;
+ * @see get_courserecord()
+ * @var stdClass
+ */
+ protected $courserecord = null;
+
/**
* Context object gets set and retrieved by directly calling $lesson->context;
* @see get_context()
@@ -1029,11 +1036,13 @@ class lesson extends lesson_base {
*
* @param object $properties
* @param stdClass $cm course module object
+ * @param stdClass $course course object
* @since Moodle 3.3
*/
- public function __construct($properties, $cm = null) {
+ public function __construct($properties, $cm = null, $course = null) {
parent::__construct($properties);
$this->cm = $cm;
+ $this->courserecord = $course;
}
/**
@@ -2129,6 +2138,31 @@ class lesson extends lesson_base {
return $this->cm;
}
+ /**
+ * Set the lesson course object.
+ *
+ * @param stdClass $course course objct
+ * @since Moodle 3.3
+ */
+ private function set_courserecord($course) {
+ $this->courserecord = $course;
+ }
+
+ /**
+ * Return the lesson course object.
+ *
+ * @return stdClass course
+ * @since Moodle 3.3
+ */
+ public function get_courserecord() {
+ global $DB;
+
+ if ($this->courserecord == null) {
+ $this->courserecord = $DB->get_record('course', array('id' => $this->properties->course));
+ }
+ return $this->courserecord;
+ }
+
/**
* Check if the user can manage the lesson activity.
*
@@ -2350,6 +2384,7 @@ class lesson extends lesson_base {
*
* @param int $retriescount the number of retries for the lesson (the last retry number).
* @return true if the user left the timed session
+ * @since Moodle 3.3
*/
public function left_during_timed_session($retriescount) {
global $DB, $USER;
@@ -2357,6 +2392,29 @@ class lesson extends lesson_base {
$conditions = array('lessonid' => $this->properties->id, 'userid' => $USER->id, 'retry' => $retriescount);
return $DB->count_records('lesson_attempts', $conditions) > 0 || $DB->count_records('lesson_branch', $conditions) > 0;
}
+
+ /**
+ * Trigger module viewed event and set the module viewed for completion.
+ *
+ * @since Moodle 3.3
+ */
+ public function set_module_viewed() {
+ global $CFG;
+ require_once($CFG->libdir . '/completionlib.php');
+
+ // Trigger module viewed event.
+ $event = \mod_lesson\event\course_module_viewed::create(array(
+ 'objectid' => $this->properties->id,
+ 'context' => $this->get_context()
+ ));
+ $event->add_record_snapshot('course_modules', $this->get_cm());
+ $event->add_record_snapshot('course', $this->get_courserecord());
+ $event->trigger();
+
+ // Mark as viewed.
+ $completion = new completion_info($this->get_courserecord());
+ $completion->set_module_viewed($this->get_cm());
+ }
}
diff --git a/mod/lesson/view.php b/mod/lesson/view.php
index 50fca69a1ef..74a2ae45595 100644
--- a/mod/lesson/view.php
+++ b/mod/lesson/view.php
@@ -26,7 +26,6 @@
require_once(__DIR__ . '/../../config.php');
require_once($CFG->dirroot.'/mod/lesson/locallib.php');
require_once($CFG->dirroot.'/mod/lesson/view_form.php');
-require_once($CFG->libdir . '/completionlib.php');
require_once($CFG->libdir . '/grade/constants.php');
$id = required_param('id', PARAM_INT); // Course Module ID
@@ -37,7 +36,7 @@ $backtocourse = optional_param('backtocourse', false, PARAM_RAW);
$cm = get_coursemodule_from_id('lesson', $id, 0, false, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
-$lesson = new lesson($DB->get_record('lesson', array('id' => $cm->instance), '*', MUST_EXIST), $cm);
+$lesson = new lesson($DB->get_record('lesson', array('id' => $cm->instance), '*', MUST_EXIST), $cm, $course);
require_login($course, false, $cm);
@@ -48,10 +47,6 @@ if ($backtocourse) {
// Apply overrides.
$lesson->update_effective_access($USER->id);
-// Mark as viewed
-$completion = new completion_info($course);
-$completion->set_module_viewed($cm);
-
$url = new moodle_url('/mod/lesson/view.php', array('id'=>$id));
if ($pageid !== null) {
$url->param('pageid', $pageid);
@@ -196,14 +191,7 @@ if ($pageid != LESSON_EOL) {
$page = $lesson->load_page($newpageid);
}
- // Trigger module viewed event.
- $event = \mod_lesson\event\course_module_viewed::create(array(
- 'objectid' => $lesson->id,
- 'context' => $context
- ));
- $event->add_record_snapshot('course_modules', $cm);
- $event->add_record_snapshot('course', $course);
- $event->trigger();
+ $lesson->set_module_viewed();
// This is where several messages (usually warnings) are displayed
// all of this is displayed above the actual page