Merge branch 'MDL-49430_m29v4' of git://github.com/sbourget/moodle

Conflicts:
	mod/lesson/version.php
This commit is contained in:
David Monllao 2015-03-24 13:25:26 +08:00
commit a2be9de182
6 changed files with 219 additions and 1 deletions

View File

@ -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'.";
}
}

View File

@ -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'.";
}
}

View File

@ -182,6 +182,8 @@ $string['eventessayattemptviewed'] = 'Essay attempt viewed';
$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['eventpagemoved'] = 'Page moved';

View File

@ -1266,6 +1266,9 @@ class lesson extends lesson_base {
*/
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);
@ -1279,9 +1282,27 @@ class lesson extends lesson_base {
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();
}
}

View File

@ -289,6 +289,51 @@ class mod_lesson_events_testcase extends advanced_testcase {
$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.
*/

View File

@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2015032400; // The current module version (Date: YYYYMMDDXX)
$plugin->version = 2015032401; // 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;