Skip to content

Commit

Permalink
feat: Adds statement for multichoicerated feedback questions. (#219)
Browse files Browse the repository at this point in the history
  • Loading branch information
ryasmi committed Aug 3, 2018
1 parent 43af5a5 commit 36536f9
Show file tree
Hide file tree
Showing 6 changed files with 327 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/transformer/events/mod_feedback/item_answered/handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ function handler(array $config, \stdClass $event, \stdClass $feedbackvalue) {
$feedbackitem = $repo->read_record_by_id('feedback_item', $feedbackvalue->item);

switch ($feedbackitem->typ) {
case 'multichoicerated':
return multichoicerated($config, $event, $feedbackvalue, $feedbackitem);
case 'multichoice':
return multichoice($config, $event, $feedbackvalue, $feedbackitem);
case 'numeric':
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?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/>.

namespace src\transformer\events\mod_feedback\item_answered;

defined('MOODLE_INTERNAL') || die();

use src\transformer\utils as utils;

function multichoicerated(array $config, \stdClass $event, \stdClass $feedbackvalue, \stdClass $feedbackitem) {
$repo = $config['repo'];
$user = $repo->read_record_by_id('user', $event->userid);
$course = $repo->read_record_by_id('course', $event->courseid);
$feedback = $repo->read_record_by_id('feedback', $feedbackitem->feedback);
$lang = utils\get_course_lang($course);
$presentedchoices = explode("|", substr($feedbackitem->presentation, 6));
$choices = array_map(function ($presentation, $id) {
$split = explode('####', $presentation);
$rating = $split[0];
$name = $split[1];
return (object) [
'rating' => intval($rating),
'name' => $name,
'id' => $id,
];
}, $presentedchoices, array_keys($presentedchoices));
$selectedchoice = $choices[intval($feedbackvalue->value) - 1];

return [[
'actor' => utils\get_user($config, $user),
'verb' => [
'id' => 'http://adlnet.gov/expapi/verbs/answered',
'display' => [
$lang => 'answered'
],
],
'object' => [
'id' => $config['app_url'].'/mod/feedback/edit_item.php?id='.$feedbackitem->id,
'definition' => [
'type' => 'http://adlnet.gov/expapi/activities/cmi.interaction',
'name' => [
$lang => $feedbackitem->name,
],
'interactionType' => 'choice',
]
],
'timestamp' => utils\get_event_timestamp($event),
'result' => [
'response' => $selectedchoice->name,
'completion' => $feedbackvalue->value !== '',
'extensions' => [
'http://learninglocker.net/xapi/moodle/feedback_item_rating' => $selectedchoice->rating,
'http://learninglocker.net/xapi/cmi/choice/response' => $selectedchoice->name,
],
],
'context' => [
'platform' => $config['source_name'],
'language' => $lang,
'extensions' => [
utils\INFO_EXTENSION => utils\get_info($config, $event),
],
'contextActivities' => [
'grouping' => [
utils\get_activity\site($config),
utils\get_activity\course($config, $course),
utils\get_activity\course_feedback($config, $event->contextinstanceid, $feedback, $lang),
],
'category' => [
utils\get_activity\source($config),
]
],
]
]];
}
45 changes: 45 additions & 0 deletions tests/mod_feedback/response_submitted/multichoicerated/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"user": [
{
"id": 1,
"firstname": "test_fullname",
"email": "test@test.com"
}
],
"course": [
{
"id": 1,
"fullname": "test_name",
"lang": "en"
}
],
"feedback_completed": [
{
"id": 1,
"feedback": 1
}
],
"feedback": [
{
"id": 1,
"name": "test_feedback_name"
}
],
"feedback_item": [
{
"id": 1,
"feedback": 1,
"name": "test_feedback_item",
"typ": "multichoicerated",
"presentation": "r>>>>>3####test_choice_1|2####test_choice_2|1####test_choice_3"
}
],
"feedback_value": [
{
"id": 1,
"item": 1,
"completed": 1,
"value": "3"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"id": 1,
"userid": 1,
"courseid": 1,
"timecreated": 1433946701,
"objectid": 1,
"contextinstanceid": 1,
"eventname": "\\mod_feedback\\event\\response_submitted"
}
160 changes: 160 additions & 0 deletions tests/mod_feedback/response_submitted/multichoicerated/statements.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
[
{
"actor": {
"name": "test_fullname",
"account": {
"homePage": "http:\/\/www.example.org",
"name": "1"
}
},
"verb": {
"id": "http:\/\/id.tincanapi.com\/verb\/submitted",
"display": {
"en": "submitted"
}
},
"object": {
"id": "http:\/\/www.example.org\/mod\/feedback\/view.php?id=1",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/survey",
"name": {
"en": "test_feedback_name"
}
}
},
"timestamp": "2015-06-10T15:31:41+01:00",
"context": {
"platform": "Moodle",
"language": "en",
"extensions": {
"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",
"event_name": "\\mod_feedback\\event\\response_submitted",
"event_function": "\\src\\transformer\\events\\mod_feedback\\response_submitted\\handler"
}
},
"contextActivities": {
"grouping": [
{
"id": "http:\/\/www.example.org",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/lms",
"name": {
"en": "test_name"
}
}
},
{
"id": "http:\/\/www.example.org\/course\/view.php?id=1",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/lms\/course",
"name": {
"en": "test_name"
}
}
}
],
"category": [
{
"id": "http:\/\/moodle.org",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/source",
"name": {
"en": "Moodle"
}
}
}
]
}
}
},
{
"actor": {
"name": "test_fullname",
"account": {
"homePage": "http:\/\/www.example.org",
"name": "1"
}
},
"verb": {
"id": "http:\/\/adlnet.gov\/expapi\/verbs\/answered",
"display": {
"en": "answered"
}
},
"object": {
"id": "http:\/\/www.example.org\/mod\/feedback\/edit_item.php?id=1",
"definition": {
"type": "http:\/\/adlnet.gov\/expapi\/activities\/cmi.interaction",
"name": {
"en": "test_feedback_item"
},
"interactionType": "choice"
}
},
"timestamp": "2015-06-10T15:31:41+01:00",
"result": {
"response": "test_choice_3",
"completion": true,
"extensions": {
"http:\/\/learninglocker.net\/xapi\/moodle\/feedback_item_rating": 1,
"http:\/\/learninglocker.net\/xapi\/cmi\/choice\/response": "test_choice_3"
}
},
"context": {
"platform": "Moodle",
"language": "en",
"extensions": {
"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",
"event_name": "\\mod_feedback\\event\\response_submitted",
"event_function": "\\src\\transformer\\events\\mod_feedback\\response_submitted\\handler"
}
},
"contextActivities": {
"grouping": [
{
"id": "http:\/\/www.example.org",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/lms",
"name": {
"en": "test_name"
}
}
},
{
"id": "http:\/\/www.example.org\/course\/view.php?id=1",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/lms\/course",
"name": {
"en": "test_name"
}
}
},
{
"id": "http:\/\/www.example.org\/mod\/feedback\/view.php?id=1",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/survey",
"name": {
"en": "test_feedback_name"
}
}
}
],
"category": [
{
"id": "http:\/\/moodle.org",
"definition": {
"type": "http:\/\/id.tincanapi.com\/activitytype\/source",
"name": {
"en": "Moodle"
}
}
}
]
}
}
}
]
24 changes: 24 additions & 0 deletions tests/mod_feedback/response_submitted/multichoicerated/test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?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/>.

namespace tests\mod_feedback\response_submitted\multichoicerated;
defined('MOODLE_INTERNAL') || die();

class test extends \tests\xapi_test_case {
protected function get_test_dir() {
return __DIR__;
}
}

0 comments on commit 36536f9

Please sign in to comment.