Skip to content

Commit

Permalink
User Enrolment CUD (#35)
Browse files Browse the repository at this point in the history
* amend enrolment created event

* add possible instructor to enrolment created

* user enrolment deleted

* correct table

* put in our enrol type extension

* user enrolment updated

* refactor out context building
  • Loading branch information
milt authored Oct 25, 2024
1 parent 067cee1 commit 81ea489
Show file tree
Hide file tree
Showing 20 changed files with 718 additions and 43 deletions.
32 changes: 15 additions & 17 deletions src/transformer/events/core/user_enrolment_created.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
* @copyright Jerret Fowler <[email protected]>
* Ryan Smith <https://www.linkedin.com/in/ryan-smith-uk/>
* David Pesce <[email protected]>
* Milt Reder <[email protected]>
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

Expand All @@ -37,31 +38,28 @@
*/
function user_enrolment_created(array $config, \stdClass $event) {
$repo = $config['repo'];
$user = $repo->read_record_by_id('user', $event->relateduserid);
$user = $repo->read_record_by_id('user', $event->userid);
$cuser = $repo->read_record_by_id('user', $event->relateduserid);
$course = $repo->read_record_by_id('course', $event->courseid);
$lang = utils\get_course_lang($course);

return[[
'actor' => utils\get_user($config, $user),
return [[
'actor' => utils\get_user($config, $cuser),
'verb' => [
'id' => 'http://adlnet.gov/expapi/verbs/registered',
'id' => 'https://xapi.edlm/profiles/edlm-lms/concepts/verbs/enrolled',
'display' => [
$lang => 'enrolled to'
$lang => 'Enrolled',
],
],
'object' => utils\get_activity\course($config, $course),
'context' => [
'language' => $lang,
'extensions' => utils\extensions\base($config, $event, $course),
'contextActivities' => [
'grouping' => [
utils\get_activity\site($config)
],
'category' => [
utils\get_activity\source($config)
]
],
]
'context' => utils\get_enrolment_context(
$config,
$event,
$course,
$cuser,
$user,
$lang
),
]];

}
63 changes: 63 additions & 0 deletions src/transformer/events/core/user_enrolment_deleted.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?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/>.

/**
* Transformer fn for user enrolment deleted event.
*
* @package logstore_xapi
* @copyright Milt Reder <[email protected]>
*
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace src\transformer\events\core;

use src\transformer\utils as utils;

/**
* Transformer fn for user enrolment deleted event.
*
* @param array $config The transformer config settings.
* @param \stdClass $event The event to be transformed.
* @return array
*/

function user_enrolment_deleted(array $config, \stdClass $event) {
$repo = $config['repo'];
$user = $repo->read_record_by_id('user', $event->userid);
$cuser = $repo->read_record_by_id('user', $event->relateduserid);
$course = $repo->read_record_by_id('course', $event->courseid);
$lang = utils\get_course_lang($course);

return [[
'actor' => utils\get_user($config, $cuser),
'verb' => [
'id' => 'http://activitystrea.ms/leave',
'display' => [
$lang => 'Left',
],
],
'object' => utils\get_activity\course($config, $course),
'context' => utils\get_enrolment_context(
$config,
$event,
$course,
$cuser,
$user,
$lang
),
]];
}
74 changes: 74 additions & 0 deletions src/transformer/events/core/user_enrolment_updated.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?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/>.

/**
* Transform for user enrolment updated event.
*
* @package logstore_xapi
* @copyright Milt Reder <[email protected]>
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace src\transformer\events\core;

use src\transformer\utils as utils;

/**
* Transformer for the user enrolment updated event.
*
* @param array $config The transformer config settings.
* @param \stdClass $event The event to be transformed.
* @return array
*/
function user_enrolment_updated(array $config, \stdClass $event) {
$repo = $config['repo'];
$enrolment = $repo->read_record_by_id('user_enrolments', $event->objectid);
$user = $repo->read_record_by_id('user', $event->userid);
$cuser = $repo->read_record_by_id('user', $event->relateduserid);
$course = $repo->read_record_by_id('course', $event->courseid);
$lang = utils\get_course_lang($course);

if ($enrolment->status == 1) {
$verb = [
'id' => 'https://w3id.org/xapi/tla/verbs/suspended',
'display' => [
$lang => 'Suspended',
],
];
} else {
$verb = [
'id' => 'https://w3id.org/xapi/tla/verbs/resumed',
'display' => [
$lang => 'Resumed',
],
];
}

return [[
'actor' => utils\get_user($config, $cuser),
'verb' => $verb,
'object' => utils\get_activity\course($config, $course),
'context' => utils\get_enrolment_context(
$config,
$event,
$course,
$cuser,
$user,
$lang
),
]];

}
2 changes: 2 additions & 0 deletions src/transformer/get_event_function_map.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ function get_event_function_map() {
'\core\event\group_member_removed' => 'core\group_member_removed',
'\core\event\user_created' => 'core\user_created',
'\core\event\user_enrolment_created' => 'core\user_enrolment_created',
'\core\event\user_enrolment_deleted' => 'core\user_enrolment_deleted',
'\core\event\user_enrolment_updated' => 'core\user_enrolment_updated',
'\core\event\user_loggedin' => 'core\user_loggedin',
'\core\event\user_loggedout' => 'core\user_loggedout',
'\core\event\course_module_created' => 'core\course_module_created',
Expand Down
70 changes: 70 additions & 0 deletions src/transformer/utils/get_enrolment_context.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?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/>.

/**
* Transformer utility for retrieving enrolment context object.
*
* @package logstore_xapi
* @copyright Milt Reder <[email protected]>
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace src\transformer\utils;

use src\transformer\utils as utils;

/**
* Return a context object for a user enrolment.
* @param array $config The transformer config array.
* @param \stdClass $event The moodle event.
* @param \stdClass $course The moodle course.
* @param \stdClass $cuser The user attending the course.
* @param \stdClass $user The user triggering the event.
* @param string $lang The language to use.
* @return array
*/
function get_enrolment_context(
array $config,
\stdClass $event,
\stdClass $course,
\stdClass $cuser,
\stdClass $user,
string $lang
) {
$info = unserialize($event->other);

$ctx = [
'language' => $lang,
'extensions' => array_merge(
utils\extensions\base($config, $event, $course),
[
'https://xapi.edlm/profiles/edlm-lms/concepts/context-extensions/enrolment-type' =>
$info['enrol']
]
),
'contextActivities' => [
'category' => [
utils\get_activity\site($config),
],
],
];

// add a possible instructor different from course user
if ($cuser->id !== $user->id) {
$ctx['instructor'] = utils\get_user($config, $user);
}
return $ctx;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@
"user": [
{
"id": 1,
"firstname": "test_fullname",
"firstname": "test_fullname1",
"email": "[email protected]"
}
],
"course": [
},
{
"id": 1,
"fullname": "test_name",
"lang": "en"
"id": 2,
"firstname": "test_fullname2",
"email": "[email protected]"
}
]
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{
"id": 1,
"relateduserid": 1,
"userid": 1,
"relateduserid": 2,
"courseid": 1,
"timecreated": 1433946701,
"objecttable": "user",
"objecttable": "user_enrolments",
"objectid": 1,
"eventname": "\\core\\event\\user_enrolment_created"
"eventname": "\\core\\event\\user_enrolment_created",
"other": "a:1:{s:5:\"enrol\";s:6:\"manual\";}"
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
[
{
"actor": {
"name": "test_fullname",
"name": "test_fullname2",
"account": {
"homePage": "http://www.example.org",
"name": "1"
"name": "2"
}
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/registered",
"id": "https://xapi.edlm/profiles/edlm-lms/concepts/verbs/enrolled",
"display": {
"en": "enrolled to"
"en": "Enrolled"
}
},
"object": {
Expand All @@ -23,8 +23,16 @@
}
},
"context": {
"instructor": {
"name": "test_fullname1",
"account": {
"homePage": "http://www.example.org",
"name": "1"
}
},
"language": "en",
"extensions": {
"https://xapi.edlm/profiles/edlm-lms/concepts/context-extensions/enrolment-type": "manual",
"http://lrs.learninglocker.net/define/extensions/info": {
"http://moodle.org": "1.0.0",
"https://github.com/xAPI-vle/moodle-logstore_xapi": "0.0.0-development",
Expand All @@ -33,7 +41,7 @@
}
},
"contextActivities": {
"grouping": [
"category": [
{
"id": "http://www.example.org",
"definition": {
Expand All @@ -43,17 +51,6 @@
}
}
}
],
"category": [
{
"id": "http://moodle.org",
"definition": {
"type": "http://id.tincanapi.com/activitytype/source",
"name": {
"en": "Moodle"
}
}
}
]
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"user": [
{
"id": 1,
"firstname": "test_fullname1",
"email": "[email protected]"
},
{
"id": 2,
"firstname": "test_fullname2",
"email": "[email protected]"
}
]
}
Loading

0 comments on commit 81ea489

Please sign in to comment.