Skip to content

Commit

Permalink
Add events to track usage
Browse files Browse the repository at this point in the history
Fixes #13
Fixes #14
  • Loading branch information
andrewnicols committed Aug 31, 2016
1 parent df441ab commit 20e1e4b
Show file tree
Hide file tree
Showing 9 changed files with 680 additions and 53 deletions.
2 changes: 1 addition & 1 deletion amd/build/usertours.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

46 changes: 38 additions & 8 deletions amd/src/usertours.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ function(ajax, BootstrapTour, $, templates, str) {
{
methodname: 'local_usertours_fetch_tour',
args: {
tourid: tourId,
context: usertours.context
tourid: tourId,
context: usertours.context,
pageurl: window.location.href,
}
}
])[0],
Expand Down Expand Up @@ -88,12 +89,16 @@ function(ajax, BootstrapTour, $, templates, str) {
*/
startBootstrapTour: function(tourId, template, tourConfig) {
if (usertours.currentTour) {
// End the current tour, but disable end tour handler.
tourConfig.onEnd = null;
usertours.currentTour.end();
}

// Add the various handlers.
tourConfig.onEnd = usertours.markTourComplete;
tourConfig.onShown = usertours.markStepShown;

// Add the templtae to the configuration.
// Add the template to the configuration.
// This enables translations of the buttons.
tourConfig.template = template;

Expand All @@ -103,17 +108,41 @@ function(ajax, BootstrapTour, $, templates, str) {
usertours.currentTour.start(true);
},

/**
* Mark the specified step as being shownd by the user.
*
* @param Tour tour The data from the step.
*/
markStepShown: function(tour) {
ajax.call([
{
methodname: 'local_usertours_step_shown',
args: {
tourid: usertours.tourId,
context: usertours.context,
pageurl: window.location.href,
stepid: tour.getStep(tour.getCurrentStep()).stepid,
stepindex: tour.getCurrentStep(),
}
}
]);
},

/**
* Mark the specified tour as being completed by the user.
*
* @param int tourId The ID of the tour to mark complete.
* @param Tour our The data from the tour.
*/
markTourComplete: function() {
markTourComplete: function(tour) {
ajax.call([
{
methodname: 'local_usertours_complete_tour',
args: {
tourid: usertours.tourId
tourid: usertours.tourId,
context: usertours.context,
pageurl: window.location.href,
stepid: tour.getStep(tour.getCurrentStep()).stepid,
stepindex: tour.getCurrentStep(),
}
}
]);
Expand All @@ -127,8 +156,9 @@ function(ajax, BootstrapTour, $, templates, str) {
{
methodname: 'local_usertours_reset_tour',
args: {
path: window.location.href,
tourid: tourId
tourid: tourId,
context: usertours.context,
pageurl: window.location.href,
},
done: function(response) {
if (response.startTour) {
Expand Down
123 changes: 123 additions & 0 deletions classes/event/step_shown.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<?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 local_usertours step_shown event.
*
* @package local_usertours
* @copyright 2016 Andrew Nicols <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace local_usertours\event;

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

/**
* The local_usertours step_shown event.
*
* @package local_usertours
* @copyright 2016 Andrew Nicols <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @property-read array $other {
* Extra information about the event.
*
* - int tourid: The id of the tour
* - string pageurl: The URL of the page viewing the tour
* }
*/
class step_shown extends \core\event\base {

/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_PARTICIPATING;
$this->data['objecttable'] = 'usertours_steps';
}

/**
* Returns localised general event name.
*
* @return string
*/
public static function get_name() {
return get_string('event_step_shown', 'local_usertours');
}

/**
* Custom validation.
*
* @throws \coding_exception
* @return void
*/
protected function validate_data() {
parent::validate_data();

if (!isset($this->other['tourid'])) {
throw new \coding_exception('The \'tourid\' value must be set in other.');
}

if (!isset($this->other['stepindex'])) {
throw new \coding_exception('The \'stepindex\' value must be set in other.');
}

if (!isset($this->other['pageurl'])) {
throw new \coding_exception('The \'pageurl\' value must be set in other.');
}
}

public static function get_other_mapping() {
return [
'pageurl' => \core\event\base::NOT_MAPPED,
'tourid' => [
'db' => 'usertours_tours',
'restore' => \core\event\base::NOT_MAPPED,
],
'stepindex' => \core\event\base::NOT_MAPPED,
];
}

public static function get_objectid_mapping() {
return [
'db' => 'usertours_steps',
'restore' => \core\event\base::NOT_MAPPED,
];
}

/**
* 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}' has viewed the tour with id " .
"'{$this->other['tourid']}' at step index " .
"'{$this->other['stepindex']}' (id '{$this->objectid}') on the page with URL " .
"'{$this->other['pageurl']}'.";
}

/**
* Returns relevant URL.
*
* @return \moodle_url
*/
public function get_url() {
return \local_usertours\helper::get_edit_step_link($this->other['tourid'], $this->objectid);
}
}
123 changes: 123 additions & 0 deletions classes/event/tour_ended.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<?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 local_usertours tour_ended event.
*
* @package local_usertours
* @copyright 2016 Andrew Nicols <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace local_usertours\event;

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

/**
* The local_usertours tour_ended event.
*
* @package local_usertours
* @copyright 2016 Andrew Nicols <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @property-read array $other {
* Extra information about the event.
*
* - int tourid: The id of the tour
* - string pageurl: The URL of the page viewing the tour
* }
*/
class tour_ended extends \core\event\base {

/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_PARTICIPATING;
$this->data['objecttable'] = 'usertours_tours';
}

/**
* Returns localised general event name.
*
* @return string
*/
public static function get_name() {
return get_string('event_tour_ended', 'local_usertours');
}

/**
* Custom validation.
*
* @throws \coding_exception
* @return void
*/
protected function validate_data() {
parent::validate_data();

if (!isset($this->other['stepindex'])) {
throw new \coding_exception('The \'stepindex\' value must be set in other.');
}

if (!isset($this->other['stepid'])) {
throw new \coding_exception('The \'stepid\' value must be set in other.');
}

if (!isset($this->other['pageurl'])) {
throw new \coding_exception('The \'pageurl\' value must be set in other.');
}
}

public static function get_other_mapping() {
return [
'stepindex' => \core\event\base::NOT_MAPPED,
'stepid' => [
'db' => 'usertours_steps',
'restore' => \core\event\base::NOT_MAPPED,
],
'pageurl' => \core\event\base::NOT_MAPPED,
];
}

public static function get_objectid_mapping() {
return [
'db' => 'usertours_tours',
'restore' => \core\event\base::NOT_MAPPED,
];
}

/**
* 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}' has ended the tour with id " .
"'{$this->objectid}' at step index " .
"'{$this->other['stepindex']}' (id '{$this->other['stepid']}') on the page with URL " .
"'{$this->other['pageurl']}'.";
}

/**
* Returns relevant URL.
*
* @return \moodle_url
*/
public function get_url() {
return \local_usertours\helper::get_view_tour_link($this->objectid);
}
}
Loading

0 comments on commit 20e1e4b

Please sign in to comment.