From 7d7a2a4ef1f390619fd1d355f2048cf7dacf2c15 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Fri, 13 Jan 2017 11:26:53 +0100 Subject: [PATCH] MDL-57645 mod_lesson: Refactor code to move completion to lib This commit also fix how completion was being set (before the access restriction checks) --- mod/lesson/locallib.php | 60 ++++++++++++++++++++++++++++++++++++++++- mod/lesson/view.php | 16 ++--------- 2 files changed, 61 insertions(+), 15 deletions(-) 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