Skip to content
Snippets Groups Projects
Commit 10a18ddc authored by David Pesce's avatar David Pesce Committed by GitHub
Browse files

Merge pull request #104 from xAPI-vle/email-as-identifier

add functionality for the email address to be used as an identifier
parents f176d0b3 b2407942
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