Skip to content

Commit

Permalink
MDL-49430 Lesson: Add restarted and resumed events
Browse files Browse the repository at this point in the history
  • Loading branch information
sbourget committed Mar 18, 2015
1 parent 06122e4 commit e0f7b96
Show file tree
Hide file tree
Showing 6 changed files with 219 additions and 1 deletion.
75 changes: 75 additions & 0 deletions mod/lesson/classes/event/lesson_restarted.php
@@ -0,0 +1,75 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* The mod_lesson lesson restarted event class.
*
* @package mod_lesson
* @copyright 2015 Stephen Bourget
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later.
*/

namespace mod_lesson\event;

defined('MOODLE_INTERNAL') || die();

/**
* The mod_lesson lesson restarted event class
*
* @package mod_lesson
* @since Moodle 2.9
* @copyright 2015 Stephen Bourget
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later.
*/
class lesson_restarted extends \core\event\base {

/**
* Set basic properties for the event.
*/
protected function init() {
$this->data['objecttable'] = 'lesson';
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_PARTICIPATING;
}

/**
* Returns localised general event name.
*
* @return string
*/
public static function get_name() {
return get_string('eventlessonrestarted', '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->contextinstanceid));
}

/**
* Returns non-localised event description with id's for admin use only.
*
* @return string
*/
public function get_description() {
return "The user with id '$this->userid' abandoned their previous incomplete attempt ".
"and started a new attempt on the lesson with course module id '$this->contextinstanceid'.";
}
}
75 changes: 75 additions & 0 deletions mod/lesson/classes/event/lesson_resumed.php
@@ -0,0 +1,75 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* The mod_lesson lesson resumed event class.
*
* @package mod_lesson
* @copyright 2015 Stephen Bourget
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later.
*/

namespace mod_lesson\event;

defined('MOODLE_INTERNAL') || die();

/**
* The mod_lesson lesson resumed event class
*
* @package mod_lesson
* @since Moodle 2.9
* @copyright 2015 Stephen Bourget
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later.
*/
class lesson_resumed extends \core\event\base {

/**
* Set basic properties for the event.
*/
protected function init() {
$this->data['objecttable'] = 'lesson';
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_PARTICIPATING;
}

/**
* Returns localised general event name.
*
* @return string
*/
public static function get_name() {
return get_string('eventlessonresumed', '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->contextinstanceid));
}

/**
* Returns non-localised event description with id's for admin use only.
*
* @return string
*/
public function get_description() {
return "The user with id '$this->userid' resumed their previous incomplete attempt on".
" the lesson with course module id '$this->contextinstanceid'.";
}
}
2 changes: 2 additions & 0 deletions mod/lesson/lang/en/lesson.php
Expand Up @@ -179,6 +179,8 @@
$string['eventhighscoreadded'] = 'Highscore added';
$string['eventhighscoresviewed'] = 'Highscores viewed';
$string['eventlessonended'] = 'Lesson ended';
$string['eventlessonrestarted'] = 'Lesson restarted';
$string['eventlessonresumed'] = 'Lesson resumed';
$string['eventlessonstarted'] = 'Lesson started';
$string['eventpagecreated'] = 'Page created';
$string['eventpageupdated'] = 'Page updated';
Expand Down
21 changes: 21 additions & 0 deletions mod/lesson/locallib.php
Expand Up @@ -1256,6 +1256,9 @@ public function start_timer() {
*/
public function update_timer($restart=false, $continue=false, $endreached =false) {
global $USER, $DB;

$cm = get_coursemodule_from_instance('lesson', $this->properties->id, $this->properties->course);

// clock code
// get time information for this user
$params = array("lessonid" => $this->properties->id, "userid" => $USER->id);
Expand All @@ -1269,9 +1272,27 @@ public function update_timer($restart=false, $continue=false, $endreached =false
if ($continue) {
// continue a previous test, need to update the clock (think this option is disabled atm)
$timer->starttime = time() - ($timer->lessontime - $timer->starttime);

// Trigger lesson resumed event.
$event = \mod_lesson\event\lesson_resumed::create(array(
'objectid' => $this->properties->id,
'context' => context_module::instance($cm->id),
'courseid' => $this->properties->course
));
$event->trigger();

} else {
// starting over, so reset the clock
$timer->starttime = time();

// Trigger lesson restarted event.
$event = \mod_lesson\event\lesson_restarted::create(array(
'objectid' => $this->properties->id,
'context' => context_module::instance($cm->id),
'courseid' => $this->properties->course
));
$event->trigger();

}
}

Expand Down
45 changes: 45 additions & 0 deletions mod/lesson/tests/events_test.php
Expand Up @@ -259,6 +259,51 @@ public function test_lesson_started() {
$this->assertEventContextNotUsed($event);
}

/**
* Test the lesson restarted event.
*/
public function test_lesson_restarted() {

// Initialize timer.
$this->lesson->start_timer();
// Trigger and capture the event.
$sink = $this->redirectEvents();
$this->lesson->update_timer(true);
$events = $sink->get_events();
$event = reset($events);

// Check that the event data is valid.
$this->assertInstanceOf('\mod_lesson\event\lesson_restarted', $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->assertEventContextNotUsed($event);
$this->assertDebuggingNotCalled();

}

/**
* Test the lesson restarted event.
*/
public function test_lesson_resumed() {

// Initialize timer.
$this->lesson->start_timer();
// Trigger and capture the event.
$sink = $this->redirectEvents();
$this->lesson->update_timer(true, true);
$events = $sink->get_events();
$event = reset($events);

// Check that the event data is valid.
$this->assertInstanceOf('\mod_lesson\event\lesson_resumed', $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->assertEventContextNotUsed($event);
$this->assertDebuggingNotCalled();

}
/**
* Test the lesson ended event.
*/
Expand Down
2 changes: 1 addition & 1 deletion mod/lesson/version.php
Expand Up @@ -24,7 +24,7 @@

defined('MOODLE_INTERNAL') || die();

$plugin->version = 2015030401; // The current module version (Date: YYYYMMDDXX)
$plugin->version = 2015031800; // The current module version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->component = 'mod_lesson'; // Full name of the plugin (used for diagnostics)
$plugin->cron = 0;

0 comments on commit e0f7b96

Please sign in to comment.