Skip to content
Snippets Groups Projects
Commit b2407942 authored by David Pesce's avatar David Pesce
Browse files

add functionality for the email address to be used as an identifier

parent f176d0b3
No related branches found
No related tags found
No related merge requests found
......@@ -36,6 +36,7 @@ use \core\event\base as event_base;
use \XREmitter\Controller as xapi_controller;
use \XREmitter\Repository as xapi_repository;
use \MXTranslator\Controller as translator_controller;
use \MXTranslator\Events\Event as Event;
use \LogExpander\Controller as moodle_controller;
use \LogExpander\Repository as moodle_repository;
use \TinCan\RemoteLRS as tincan_remote_lrs;
......@@ -53,12 +54,21 @@ class store extends php_obj implements log_writer {
protected $loggingenabled = false;
/** @var bool $logguests true if logging guest access */
protected $logguests;
/** @var array $routes An array of routes to include */
protected $routes = [];
/**
* Constructs a new store.
* @param log_manager $manager
*/
public function __construct(log_manager $manager) {
$this->helper_setup($manager);
$this->logguests = $this->get_config('logguests', 1);
$routes = $this->get_config('routes', '');
$this->routes = $routes === '' ? [] : explode(',', $routes);
}
/**
......@@ -68,6 +78,15 @@ class store extends php_obj implements log_writer {
*
*/
protected function is_event_ignored(event_base $event) {
if ((!CLI_SCRIPT || PHPUNIT_TEST) && !$this->logguests && (!isloggedin() || isguestuser())) {
// Always log inside CLI scripts because we do not login there.
return true;
}
if (!in_array($event->eventname, $this->routes)) {
// Ignore event if the store settings do not want to store it.
return true;
}
return false;
}
......@@ -102,12 +121,19 @@ class store extends php_obj implements log_writer {
$this->error_log('');
$this->error_log_value('events', $events);
$moodleevents = $moodlecontroller->createEvents($events);
// Clear the user email if mbox setting is not set to mbox
$mbox = get_config('logstore_xapi', 'mbox');
foreach(array_keys($moodleevents) as $event_key) {
$moodleevents[$event_key]['sendmbox'] = $mbox;
}
$this->error_log_value('moodleevent', $moodleevents);
$translatorevents = $translatorcontroller->createEvents($moodleevents);
$this->error_log_value('translatorevents', $translatorevents);
if (empty($translatorevents)) {
return;
return [];
}
// Split statements into batches.
......@@ -118,11 +144,21 @@ class store extends php_obj implements log_writer {
$eventbatches = array_chunk($translatorevents, $maxbatchsize);
}
$translator_event = new Event();
$translator_event_read_return = @$translator_event->read([]);
$sent_events = [];
foreach ($eventbatches as $translatoreventsbatch) {
$xapievents = $xapicontroller->createEvents($translatoreventsbatch);
foreach(array_keys($xapievents) as $key) {
if (is_numeric($key)) {
$sent_events[$xapievents[$key]['context']['extensions'][$translator_event_read_return[0]['context_ext_key']]['id']] = $xapievents['last_action_result'];
}
}
$this->error_log_value('xapievents', $xapievents);
}
return $sent_events;
}
private function error_log_value($key, $value) {
......
......@@ -48,11 +48,13 @@ class emit_task extends \core\task\scheduled_task {
$manager = get_log_manager();
$store = new store($manager);
$events = $DB->get_records('logstore_xapi_log');
$store->process_events($events);
$DB->delete_records_list('logstore_xapi_log', 'id', array_keys($events));
$store_return = $store->process_events($events);
foreach(array_keys($store_return) as $event_id) {
if ($store_return[$event_id] == 'success') {
$DB->delete_records_list('logstore_xapi_log', 'id', array($event_id));
}
}
mtrace("Sent learning records to LRS.");
}
......
......@@ -28,7 +28,7 @@ $tasks = array(
array(
'classname' => '\logstore_xapi\task\emit_task',
'blocking' => 0,
'minute' => '*/5',
'minute' => '*/1',
'hour' => '*',
'day' => '*',
'dayofweek' => '*',
......
......@@ -43,4 +43,10 @@ $string['maxbatchsize'] = 'Maximum batch size';
$string['maxbatchsize_desc'] = 'Statements are sent to the LRS in batches. This setting controls the maximum number of
statements that will be sent in a single operation. Setting this to zero will cause all available statements to
be sent at once, although this is not recommended.';
$string['taskemit'] = 'Emit records to LRS';
\ No newline at end of file
$string['taskemit'] = 'Emit records to LRS';
$string['routes'] = 'Include actions with these routes';
$string['filters'] = 'Filter logs';
$string['logguests'] = 'Log guest actions';
$string['filters_help'] = 'Enable filters that INCLUDE some actions to be logged.';
$string['mbox'] = 'Send user email';
$string['mbox_desc'] = 'Statements identify the user with its email (mbox) or with its userid on the moodle platform (account). Checking this will send the email (mbox).';
\ No newline at end of file
......@@ -25,6 +25,9 @@
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/vendor/autoload.php');
use \MXTranslator\Controller as translator_controller;
if ($hassiteconfig) {
// Endpoint.
$settings->add(new admin_setting_configtext('logstore_xapi/endpoint',
......@@ -45,4 +48,26 @@ if ($hassiteconfig) {
$settings->add(new admin_setting_configtext('logstore_xapi/maxbatchsize',
get_string('maxbatchsize', 'logstore_xapi'),
get_string('maxbatchsize_desc', 'logstore_xapi'), 30, PARAM_INT));
$settings->add(new admin_setting_configcheckbox('logstore_xapi/mbox',
get_string('mbox', 'logstore_xapi'),
get_string('mbox_desc', 'logstore_xapi'), 0));
// Filters.
$settings->add(new admin_setting_heading('filters',
get_string('filters', 'logstore_xapi'),
get_string('filters_help', 'logstore_xapi')));
$settings->add(new admin_setting_configcheckbox('logstore_xapi/logguests',
get_string('logguests',
'logstore_xapi'), '', '0'));
$menu_routes = array();
$routes = translator_controller::$routes;
foreach (array_keys($routes) as $route_key) $menu_routes[$route_key] = $route_key;
$settings->add(new admin_setting_configmulticheckbox('logstore_xapi/routes',
get_string('routes',
'logstore_xapi'), '', '', $menu_routes));
}
......@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'logstore_xapi';
$plugin->version = 2017053100;
$plugin->release = '1.4.0';
$plugin->version = 2017060500;
$plugin->release = '1.5.0';
$plugin->requires = 2014111000;
$plugin->maturity = MATURITY_STABLE;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment