diff --git a/mod/lesson/classes/event/lesson_started.php b/mod/lesson/classes/event/lesson_started.php new file mode 100644 index 00000000000..de377275feb --- /dev/null +++ b/mod/lesson/classes/event/lesson_started.php @@ -0,0 +1,76 @@ +. + +/** + * Event to be triggered when a lesson is started. + * + * @package mod_lesson + * @copyright 2013 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later. + */ + +namespace mod_lesson\event; + +defined('MOODLE_INTERNAL') || die(); + +class lesson_started extends \core\event\base { + + /** + * Set basic properties for the event. + */ + protected function init() { + $this->data['objecttable'] = 'lesson'; + $this->data['crud'] = 'r'; + $this->data['level'] = self::LEVEL_PARTICIPATING; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventlessonstarted', 'mod_lesson'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/lesson/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Returns non-localised event description with id's for admin use only. + * + * @return string + */ + public function get_description() { + return 'The lesson ' . $this->objectid . ' was started by the user ' . $this->userid; + } + + /** + * Replace add_to_log() statement. + * + * @return array of parameters to be passed to legacy add_to_log() function. + */ + protected function get_legacy_logdata() { + return array($this->courseid, 'lesson', 'start', 'view.php?id=' . $this->context->instanceid, + $this->objectid, $this->context->instanceid); + } +} diff --git a/mod/lesson/lang/en/lesson.php b/mod/lesson/lang/en/lesson.php index 6400122dbab..106eeb73eba 100644 --- a/mod/lesson/lang/en/lesson.php +++ b/mod/lesson/lang/en/lesson.php @@ -172,6 +172,7 @@ $string['essayscore'] = 'Essay score'; $string['eventessayattemptviewed'] = 'Essay attempt viewed'; $string['eventhighscoreadded'] = 'Highscore added'; $string['eventhighscoresviewed'] = 'Highscores viewed'; +$string['eventlessonstarted'] = 'Lesson started'; $string['fileformat'] = 'File format'; $string['finish'] = 'Finish'; $string['firstanswershould'] = 'First answer should jump to the "Correct" page'; diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php index 7011be6e293..0c6370afb34 100644 --- a/mod/lesson/locallib.php +++ b/mod/lesson/locallib.php @@ -1191,6 +1191,18 @@ class lesson extends lesson_base { */ public function start_timer() { global $USER, $DB; + + $cm = get_coursemodule_from_instance('lesson', $this->properties()->id, $this->properties()->course, + false, MUST_EXIST); + + // Trigger lesson started event. + $event = \mod_lesson\event\lesson_started::create(array( + 'objectid' => $this->properties()->id, + 'context' => context_module::instance($cm->id), + 'courseid' => $this->properties()->course + )); + $event->trigger(); + $USER->startlesson[$this->properties->id] = true; $startlesson = new stdClass; $startlesson->lessonid = $this->properties->id; diff --git a/mod/lesson/tests/events_test.php b/mod/lesson/tests/events_test.php index 395987b9601..0fb7552abf5 100644 --- a/mod/lesson/tests/events_test.php +++ b/mod/lesson/tests/events_test.php @@ -148,4 +148,22 @@ class mod_lesson_events_testcase extends advanced_testcase { $this->lesson->properties()->name, $this->lesson->properties()->cmid); $this->assertEventLegacyLogData($expected, $event); } + + /** + * Test the lesson started event. + */ + public function test_lesson_started() { + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $this->lesson->start_timer(); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\mod_lesson\event\lesson_started', $event); + $this->assertEquals(context_module::instance($this->lesson->properties()->cmid), $event->get_context()); + $expected = array($this->course->id, 'lesson', 'start', 'view.php?id=' . $this->lesson->properties()->cmid, + $this->lesson->properties()->id, $this->lesson->properties()->cmid); + $this->assertEventLegacyLogData($expected, $event); + } } diff --git a/mod/lesson/view.php b/mod/lesson/view.php index 133c7be80cb..9d54e107304 100644 --- a/mod/lesson/view.php +++ b/mod/lesson/view.php @@ -179,8 +179,6 @@ if (empty($pageid)) { } } - add_to_log($course->id, 'lesson', 'start', 'view.php?id='. $cm->id, $lesson->id, $cm->id); - // if no pageid given see if the lesson has been started $retries = $DB->count_records('lesson_grades', array("lessonid" => $lesson->id, "userid" => $USER->id)); if ($retries > 0) {