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; ...@@ -36,6 +36,7 @@ use \core\event\base as event_base;
use \XREmitter\Controller as xapi_controller; use \XREmitter\Controller as xapi_controller;
use \XREmitter\Repository as xapi_repository; use \XREmitter\Repository as xapi_repository;
use \MXTranslator\Controller as translator_controller; use \MXTranslator\Controller as translator_controller;
use \MXTranslator\Events\Event as Event;
use \LogExpander\Controller as moodle_controller; use \LogExpander\Controller as moodle_controller;
use \LogExpander\Repository as moodle_repository; use \LogExpander\Repository as moodle_repository;
use \TinCan\RemoteLRS as tincan_remote_lrs; use \TinCan\RemoteLRS as tincan_remote_lrs;
...@@ -53,12 +54,21 @@ class store extends php_obj implements log_writer { ...@@ -53,12 +54,21 @@ class store extends php_obj implements log_writer {
protected $loggingenabled = false; 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. * Constructs a new store.
* @param log_manager $manager * @param log_manager $manager
*/ */
public function __construct(log_manager $manager) { public function __construct(log_manager $manager) {
$this->helper_setup($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 { ...@@ -68,6 +78,15 @@ class store extends php_obj implements log_writer {
* *
*/ */
protected function is_event_ignored(event_base $event) { 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; return false;
} }
...@@ -102,12 +121,19 @@ class store extends php_obj implements log_writer { ...@@ -102,12 +121,19 @@ class store extends php_obj implements log_writer {
$this->error_log(''); $this->error_log('');
$this->error_log_value('events', $events); $this->error_log_value('events', $events);
$moodleevents = $moodlecontroller->createEvents($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); $this->error_log_value('moodleevent', $moodleevents);
$translatorevents = $translatorcontroller->createEvents($moodleevents); $translatorevents = $translatorcontroller->createEvents($moodleevents);
$this->error_log_value('translatorevents', $translatorevents); $this->error_log_value('translatorevents', $translatorevents);
if (empty($translatorevents)) { if (empty($translatorevents)) {
return; return [];
} }
// Split statements into batches. // Split statements into batches.
...@@ -118,11 +144,21 @@ class store extends php_obj implements log_writer { ...@@ -118,11 +144,21 @@ class store extends php_obj implements log_writer {
$eventbatches = array_chunk($translatorevents, $maxbatchsize); $eventbatches = array_chunk($translatorevents, $maxbatchsize);
} }
$translator_event = new Event();
$translator_event_read_return = @$translator_event->read([]);
$sent_events = [];
foreach ($eventbatches as $translatoreventsbatch) { foreach ($eventbatches as $translatoreventsbatch) {
$xapievents = $xapicontroller->createEvents($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); $this->error_log_value('xapievents', $xapievents);
} }
return $sent_events;
} }
private function error_log_value($key, $value) { private function error_log_value($key, $value) {
......
...@@ -48,11 +48,13 @@ class emit_task extends \core\task\scheduled_task { ...@@ -48,11 +48,13 @@ class emit_task extends \core\task\scheduled_task {
$manager = get_log_manager(); $manager = get_log_manager();
$store = new store($manager); $store = new store($manager);
$events = $DB->get_records('logstore_xapi_log'); $events = $DB->get_records('logstore_xapi_log');
$store->process_events($events); $store_return = $store->process_events($events);
foreach(array_keys($store_return) as $event_id) {
$DB->delete_records_list('logstore_xapi_log', 'id', array_keys($events)); if ($store_return[$event_id] == 'success') {
$DB->delete_records_list('logstore_xapi_log', 'id', array($event_id));
}
}
mtrace("Sent learning records to LRS."); mtrace("Sent learning records to LRS.");
} }
......
...@@ -28,7 +28,7 @@ $tasks = array( ...@@ -28,7 +28,7 @@ $tasks = array(
array( array(
'classname' => '\logstore_xapi\task\emit_task', 'classname' => '\logstore_xapi\task\emit_task',
'blocking' => 0, 'blocking' => 0,
'minute' => '*/5', 'minute' => '*/1',
'hour' => '*', 'hour' => '*',
'day' => '*', 'day' => '*',
'dayofweek' => '*', 'dayofweek' => '*',
......
...@@ -43,4 +43,10 @@ $string['maxbatchsize'] = 'Maximum batch size'; ...@@ -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 $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 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.'; be sent at once, although this is not recommended.';
$string['taskemit'] = 'Emit records to LRS'; $string['taskemit'] = 'Emit records to LRS';
\ No newline at end of file $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 @@ ...@@ -25,6 +25,9 @@
defined('MOODLE_INTERNAL') || die(); defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/vendor/autoload.php');
use \MXTranslator\Controller as translator_controller;
if ($hassiteconfig) { if ($hassiteconfig) {
// Endpoint. // Endpoint.
$settings->add(new admin_setting_configtext('logstore_xapi/endpoint', $settings->add(new admin_setting_configtext('logstore_xapi/endpoint',
...@@ -45,4 +48,26 @@ if ($hassiteconfig) { ...@@ -45,4 +48,26 @@ if ($hassiteconfig) {
$settings->add(new admin_setting_configtext('logstore_xapi/maxbatchsize', $settings->add(new admin_setting_configtext('logstore_xapi/maxbatchsize',
get_string('maxbatchsize', 'logstore_xapi'), get_string('maxbatchsize', 'logstore_xapi'),
get_string('maxbatchsize_desc', 'logstore_xapi'), 30, PARAM_INT)); 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 @@ ...@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die(); defined('MOODLE_INTERNAL') || die();
$plugin->component = 'logstore_xapi'; $plugin->component = 'logstore_xapi';
$plugin->version = 2017053100; $plugin->version = 2017060500;
$plugin->release = '1.4.0'; $plugin->release = '1.5.0';
$plugin->requires = 2014111000; $plugin->requires = 2014111000;
$plugin->maturity = MATURITY_STABLE; $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