Skip to content
Snippets Groups Projects
Commit 0f00cae0 authored by Ryan Smith's avatar Ryan Smith Committed by GitHub
Browse files

Merge pull request #119 from mikemcgowan/travis

Updated .travis.yml to support Moodlerooms plugin
parents 6b6f5cba 1dbf2c1b
No related branches found
No related tags found
No related merge requests found
Showing
with 107 additions and 1161 deletions
language: php language: php
sudo: false
cache:
directories:
- $HOME/.composer/cache
php: php:
- 5.5
- 5.6 - 5.6
- 7.0 - 7.0
install: composer install --no-interaction - 7.1
script: ./vendor/bin/phpunit
env:
global:
- MOODLE_BRANCH=MOODLE_32_STABLE
matrix:
- DB=pgsql
# - DB=mysqli
before_install:
- composer install --no-interaction
- phpenv config-rm xdebug.ini
- nvm install node
- cd ../..
- composer selfupdate
- composer create-project -n --no-dev --prefer-dist moodlerooms/moodle-plugin-ci ci ^2
- export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH"
install:
- moodle-plugin-ci install
script:
# - moodle-plugin-ci phplint
# - moodle-plugin-ci phpcpd
# - moodle-plugin-ci phpmd
# - moodle-plugin-ci codechecker
- moodle-plugin-ci validate
- moodle-plugin-ci savepoints
# - moodle-plugin-ci mustache
# - moodle-plugin-ci grunt
- moodle-plugin-ci phpunit
# - moodle-plugin-ci behat
# run codechecker without the vendor/ directory
- rm -rf "$(find -type d -name xapi)/vendor"
- moodle-plugin-ci codechecker
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
> Emits events from the [Moodle](https://moodle.org/) Logstore as [xAPI](https://github.com/adlnet/xAPI-Spec/blob/master/xAPI.md) statements. > Emits events from the [Moodle](https://moodle.org/) Logstore as [xAPI](https://github.com/adlnet/xAPI-Spec/blob/master/xAPI.md) statements.
[![Build Status](https://travis-ci.org/xAPI-vle/moodle-logstore_xapi.svg?branch=master)](https://travis-ci.org/xAPI-vle/moodle-logstore_xapi) [![Build Status](https://travis-ci.org/xAPI-vle/moodle-logstore_xapi.svg?branch=master)](https://travis-ci.org/xAPI-vle/moodle-logstore_xapi)
[![Code Climate](https://codeclimate.com/github/xAPI-vle/moodle-logstore_xapi.png)](https://codeclimate.com/github/xAPI-vle/moodle-logstore_xapi)
[![Moodle Plugin Directory](http://img.shields.io/badge/moodle-plugin-orange.svg)](https://moodle.org/plugins/view/logstore_xapi) [![Moodle Plugin Directory](http://img.shields.io/badge/moodle-plugin-orange.svg)](https://moodle.org/plugins/view/logstore_xapi)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/LearningLocker/learninglocker?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/LearningLocker/learninglocker?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
......
...@@ -98,7 +98,7 @@ class store extends php_obj implements log_writer { ...@@ -98,7 +98,7 @@ class store extends php_obj implements log_writer {
protected function insert_event_entries(array $events) { protected function insert_event_entries(array $events) {
global $DB; global $DB;
// If in background mode, just save them in the database // If in background mode, just save them in the database.
if (get_config('logstore_xapi', 'backgroundmode')) { if (get_config('logstore_xapi', 'backgroundmode')) {
$DB->insert_records('logstore_xapi_log', $events); $DB->insert_records('logstore_xapi_log', $events);
} else { } else {
...@@ -109,9 +109,9 @@ class store extends php_obj implements log_writer { ...@@ -109,9 +109,9 @@ class store extends php_obj implements log_writer {
public function process_events(array $events) { public function process_events(array $events) {
// Initializes required services. // Initializes required services.
$xapiController = new xapi_controller($this->connect_xapi_repository()); $xapicontroller = new xapi_controller($this->connect_xapi_repository());
$moodleController = new moodle_controller($this->connect_moodle_repository()); $moodlecontroller = new moodle_controller($this->connect_moodle_repository());
$translatorController = new translator_controller(); $translatorcontroller = new translator_controller();
// Emits events to other APIs. // Emits events to other APIs.
foreach ($events as $index => $event) { foreach ($events as $index => $event) {
...@@ -120,45 +120,46 @@ class store extends php_obj implements log_writer { ...@@ -120,45 +120,46 @@ 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->create_events($events);
// Clear the user email if mbox setting is not set to mbox // Clear the user email if mbox setting is not set to mbox.
$mbox = get_config('logstore_xapi', 'mbox'); $mbox = get_config('logstore_xapi', 'mbox');
foreach(array_keys($moodleEvents) as $event_key) { foreach (array_keys($moodleevents) as $eventkey) {
$moodleEvents[$event_key]['sendmbox'] = $mbox; $moodleevents[$eventkey]['sendmbox'] = $mbox;
} }
$this->error_log_value('moodleevent', $moodleEvents); $this->error_log_value('moodleevent', $moodleevents);
$translatorEvents = $translatorController->createEvents($moodleEvents); $translatorevents = $translatorcontroller->create_events($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.
$eventBatches = array($translatorEvents); $eventbatches = array($translatorevents);
$maxBatchSize = get_config('logstore_xapi', 'maxbatchsize'); $maxbatchsize = get_config('logstore_xapi', 'maxbatchsize');
if (!empty($maxBatchSize) && $maxBatchSize < count($translatorEvents)) { if (!empty($maxbatchsize) && $maxbatchsize < count($translatorevents)) {
$eventBatches = array_chunk($translatorEvents, $maxBatchSize); $eventbatches = array_chunk($translatorevents, $maxbatchsize);
} }
$translatorEvent = new Event(); $translatorevent = new Event();
$translatorEventReadReturn = @$translatorEvent->read([]); $translatoreventreadreturn = @$translatorevent->read([]);
$sentEvents = []; $sentevents = [];
foreach ($eventBatches as $translatorEventsBatch) { foreach ($eventbatches as $translatoreventsbatch) {
$xapiEvents = $xapiController->createEvents($translatorEventsBatch); $xapievents = $xapicontroller->create_events($translatoreventsbatch);
foreach(array_keys($xapiEvents) as $key) { foreach (array_keys($xapievents) as $key) {
if (is_numeric($key)) { if (is_numeric($key)) {
$sentEvents[$xapiEvents[$key]['context']['extensions'][$translatorEventReadReturn[0]['context_ext_key']]['id']] = $xapiEvents['last_action_result']; $k = $xapievents[$key]['context']['extensions'][$translatoreventreadreturn[0]['context_ext_key']]['id'];
$sentevents[$k] = $xapievents['last_action_result'];
} }
} }
$this->error_log_value('xapievents', $xapiEvents); $this->error_log_value('xapievents', $xapievents);
} }
return $sentEvents; return $sentevents;
} }
private function error_log_value($key, $value) { private function error_log_value($key, $value) {
...@@ -167,6 +168,7 @@ class store extends php_obj implements log_writer { ...@@ -167,6 +168,7 @@ class store extends php_obj implements log_writer {
private function error_log($message) { private function error_log($message) {
if ($this->loggingenabled) { if ($this->loggingenabled) {
// @codingStandardsIgnoreLine
error_log($message."\r\n", 3, __DIR__.'/error_log.txt'); error_log($message."\r\n", 3, __DIR__.'/error_log.txt');
} }
} }
...@@ -191,16 +193,16 @@ class store extends php_obj implements log_writer { ...@@ -191,16 +193,16 @@ class store extends php_obj implements log_writer {
*/ */
private function connect_xapi_repository() { private function connect_xapi_repository() {
global $CFG; global $CFG;
$remote_lrs = new tincan_remote_lrs( $remotelrs = new tincan_remote_lrs(
$this->get_config('endpoint', ''), $this->get_config('endpoint', ''),
'1.0.1', '1.0.1',
$this->get_config('username', ''), $this->get_config('username', ''),
$this->get_config('password', '') $this->get_config('password', '')
); );
if (!empty($CFG->proxyhost)) { if (!empty($CFG->proxyhost)) {
$remote_lrs->setProxy($CFG->proxyhost.':'.$CFG->proxyport); $remotelrs->setProxy($CFG->proxyhost.':'.$CFG->proxyport);
} }
return new xapi_repository($remote_lrs); return new xapi_repository($remotelrs);
} }
/** /**
......
...@@ -49,10 +49,10 @@ class emit_task extends \core\task\scheduled_task { ...@@ -49,10 +49,10 @@ 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_return = $store->process_events($events); $storereturn = $store->process_events($events);
foreach(array_keys($store_return) as $event_id) { foreach (array_keys($storereturn) as $eventid) {
if ($store_return[$event_id] == 'success') { if ($storereturn[$eventid] == 'success') {
$DB->delete_records_list('logstore_xapi_log', 'id', array($event_id)); $DB->delete_records_list('logstore_xapi_log', 'id', array($eventid));
} }
} }
......
...@@ -6,15 +6,14 @@ ...@@ -6,15 +6,14 @@
"logstore_xapi\\": "classes/", "logstore_xapi\\": "classes/",
"Tests\\": "tests/", "Tests\\": "tests/",
"XREmitter\\": "lib/emitter/src/", "XREmitter\\": "lib/emitter/src/",
"XREmitter\\Tests\\": "lib/emitter/tests/", "XREmitter\\Tests\\": "tests/lib/emitter/",
"LogExpander\\": "lib/expander/src/", "LogExpander\\": "lib/expander/src/",
"LogExpander\\Tests\\": "lib/expander/tests/", "LogExpander\\Tests\\": "tests/lib/expander/",
"MXTranslator\\": "lib/translator/src/", "MXTranslator\\": "lib/translator/src/",
"MXTranslator\\Tests\\": "lib/translator/tests/" "MXTranslator\\Tests\\": "tests/lib/translator/"
} }
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "~4.6",
"learninglocker/statementfactory": "~0.0" "learninglocker/statementfactory": "~0.0"
}, },
"require": { "require": {
......
This diff is collapsed.
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || die();
/** /**
* xAPI log store upgrade. * xAPI log store upgrade.
* *
...@@ -61,7 +63,14 @@ function xmldb_logstore_xapi_upgrade($oldversion) { ...@@ -61,7 +63,14 @@ function xmldb_logstore_xapi_upgrade($oldversion) {
// Adding indexes to table logstore_xapi_log. // Adding indexes to table logstore_xapi_log.
$table->add_index('timecreated', XMLDB_INDEX_NOTUNIQUE, array('timecreated')); $table->add_index('timecreated', XMLDB_INDEX_NOTUNIQUE, array('timecreated'));
$table->add_index('course-time', XMLDB_INDEX_NOTUNIQUE, array('courseid', 'anonymous', 'timecreated')); $table->add_index('course-time', XMLDB_INDEX_NOTUNIQUE, array('courseid', 'anonymous', 'timecreated'));
$table->add_index('user-module', XMLDB_INDEX_NOTUNIQUE, array('userid', 'contextlevel', 'contextinstanceid', 'crud', 'edulevel', 'timecreated')); $table->add_index('user-module', XMLDB_INDEX_NOTUNIQUE, array(
'userid',
'contextlevel',
'contextinstanceid',
'crud',
'edulevel',
'timecreated'
));
// Conditionally launch create table for logstore_xapi_log. // Conditionally launch create table for logstore_xapi_log.
if (!$dbman->table_exists($table)) { if (!$dbman->table_exists($table)) {
......
...@@ -26,10 +26,23 @@ If you've read the [plugin design](design.md) you should understand what each of ...@@ -26,10 +26,23 @@ If you've read the [plugin design](design.md) you should understand what each of
- [Moodle to xAPI Translator](https://github.com/LearningLocker/Moodle-xAPI-Translator/blob/master/docs/readme.md#adding-events) - [Moodle to xAPI Translator](https://github.com/LearningLocker/Moodle-xAPI-Translator/blob/master/docs/readme.md#adding-events)
- [xAPI Recipe Emitter](https://github.com/LearningLocker/xAPI-Recipe-Emitter/blob/master/docs/readme.md#adding-events) - [xAPI Recipe Emitter](https://github.com/LearningLocker/xAPI-Recipe-Emitter/blob/master/docs/readme.md#adding-events)
##PHPUnit Test Filter ## PHPUnit
All PHPUnit tests should pass, but if you'd like to only run the tests for specific events, add the 'filter' option. Run these with the [Moodle PHPUnit test framework](https://docs.moodle.org/dev/PHPUnit):
```
vendor/bin/phpunit --testsuite logstore_xapi_testsuite
```
### Test Filter
All PHPUnit tests should pass, but if you'd like to only run the tests for specific events, add the `--filter` option:
```
vendor/bin/phpunit --testsuite logstore_xapi_testsuite --filter <Test_Name>
```
e.g.:
``` ```
vendor/bin/phpunit --filter <Test_Name> vendor/bin/phpunit --testsuite logstore_xapi_testsuite --filter course_completed_test
``` ```
## Release Process ## Release Process
......
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