Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix two scenarios where null values were causing errors #473

Merged
merged 12 commits into from
Apr 10, 2019
21 changes: 15 additions & 6 deletions src/transformer/events/mod_assign/assignment_graded.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,16 @@ function assignment_graded(array $config, \stdClass $event) {
$assignment = $repo->read_record_by_id('assign', $grade->assignment);
$lang = utils\get_course_lang($course);

$gradecomment = $repo->read_record('assignfeedback_comments', [
'assignment' => $grade->assignment,
'grade' => $grade->id
])->commenttext;
$gradecomment = null;
try {
$gradecomment = $repo->read_record('assignfeedback_comments', [
'assignment' => $grade->assignment,
'grade' => $grade->id
])->commenttext;
} catch (\Exception $e) {
$gradecomment = null;
}

$gradeitems = $repo->read_record('grade_items', [
'itemmodule' => 'assign',
'iteminstance' => $grade->assignment
Expand Down Expand Up @@ -63,8 +69,7 @@ function assignment_graded(array $config, \stdClass $event) {
'raw' => $scoreraw
],
'completion' => true,
'success' => $success,
'response' => $gradecomment
'success' => $success
],
'timestamp' => utils\get_event_timestamp($event),
'context' => [
Expand All @@ -86,6 +91,10 @@ function assignment_graded(array $config, \stdClass $event) {
]
];

if (!is_null($gradecomment)) {
$statement['result']['response'] = $gradecomment;
}

// Only include min score if raw score is valid for that min.
if ($scoreraw >= $scoremin) {
$statement['result']['score']['min'] = $scoremin;
Expand Down
6 changes: 4 additions & 2 deletions src/transformer/events/mod_quiz/question_answered/essay.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ function essay(array $config, \stdClass $event, \stdClass $questionattempt, \std
$coursemodule = $repo->read_record_by_id('course_modules', $event->contextinstanceid);
$lang = utils\get_course_lang($course);

$responsesummary = is_null($questionattempt->responsesummary) ? '' : $questionattempt->responsesummary;

return [[
'actor' => utils\get_user($config, $user),
'verb' => [
Expand All @@ -49,8 +51,8 @@ function essay(array $config, \stdClass $event, \stdClass $questionattempt, \std
],
'timestamp' => utils\get_event_timestamp($event),
'result' => [
'response' => $questionattempt->responsesummary,
'completion' => $questionattempt->responsesummary !== '',
'response' => $responsesummary,
'completion' => $responsesummary !== '',
],
'context' => [
'platform' => $config['source_name'],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
// 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_assign\assignment_graded\existing_assignment_graded;
namespace tests\mod_assign\assignment_graded\existing_assignment_graded_comment;
defined('MOODLE_INTERNAL') || die();

class test extends \tests\xapi_test_case {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"user": [
{
"id": 1,
"firstname": "test_fullname",
"email": "[email protected]"
},
{
"id": 2,
"firstname": "test2_fullname",
"email": "[email protected]"
}
],
"course": [
{
"id": 1,
"fullname": "test_name",
"lang": "en"
}
],
"course_modules": [
{
"id": 1,
"course": 1,
"module": 1,
"instance": 1
}
],
"assign": [
{
"id": 1,
"name": "test_name"
}
],
"grade": [
{
"id": 1,
"userid": 2,
"assignment": 1,
"grade": 1
}
],
"assignfeedback_comments": [
],
"grade_items": [
{
"id": 1,
"itemmodule": "assign",
"iteminstance": 1,
"grademin": 0,
"grademax": 2,
"gradepass": 1
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"id": 1,
"userid": 1,
"courseid": 1,
"timecreated": 1433946701,
"objecttable": "grade",
"objectid": 1,
"contextinstanceid": 1,
"eventname": "\\mod_assign\\event\\submission_graded"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
[
{
"actor": {
"name": "test2_fullname",
"account": {
"homePage": "http:\/\/www.example.org",
"name": "2"
}
},
"verb": {
"id": "http:\/\/adlnet.gov\/expapi\/verbs\/scored",
"display": {
"en": "attained grade for"
}
},
"object": {
"id": "http:\/\/www.example.org\/mod\/assign\/view.php?id=1",
"definition": {
"type": "http:\/\/adlnet.gov\/expapi\/activities\/assessment",
"name": {
"en": "test_name"
}
}
},
"result": {
"score": {
"raw": 1,
"min": 0,
"max": 2,
"scaled": 0.5
},
"completion": true,
"success": true
},
"timestamp": "2015-06-10T15:31:41+01:00",
"context": {
"instructor": {
"name": "test_fullname",
"account": {
"homePage": "http:\/\/www.example.org",
"name": "1"
}
},
"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_assign\\event\\submission_graded",
"event_function": "\\src\\transformer\\events\\mod_assign\\assignment_graded"
}
},
"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"
}
}
}
]
}
}
}
]
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_assign\assignment_graded\existing_assignment_graded_nocomment;
defined('MOODLE_INTERNAL') || die();

class test extends \tests\xapi_test_case {
protected function get_test_dir() {
return __DIR__;
}
}
78 changes: 78 additions & 0 deletions tests/mod_quiz/attempt_submitted/essay_null_response/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"user": [
{
"id": 1,
"firstname": "test_fullname",
"email": "[email protected]"
}
],
"course": [
{
"id": 1,
"fullname": "test_name",
"lang": "en"
}
],
"course_modules": [
{
"id": 1,
"course": 1,
"module": 1,
"instance": 1
}
],
"modules": [
{
"id": 1,
"name": "quiz"
}
],
"quiz_attempts": [
{
"id": 1,
"quiz": 1,
"uniqueid": 1,
"sumgrades": 50,
"state": "finished",
"timefinish": 1,
"timestart": 0
}
],
"question_usages": [
{
"id": 1

}
],
"quiz": [
{
"id": 1,
"name": "test_quiz_name"
}
],
"grade_items": [
{
"id": 1,
"iteminstance": 1,
"itemmodule": "quiz",
"grademin": 0,
"grademax": 100,
"gradepass": 50
}
],
"question_attempts": [
{
"id": 1,
"questionusageid": 1,
"questionid": 1,
"responsesummary": null
}
],
"question": [
{
"id": 1,
"qtype": "essay",
"questiontext": "test_question"
}
]
}
10 changes: 10 additions & 0 deletions tests/mod_quiz/attempt_submitted/essay_null_response/event.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"id": 1,
"relateduserid": 1,
"courseid": 1,
"timecreated": 1433946701,
"objecttable": "attempt",
"objectid": 1,
"contextinstanceid": 1,
"eventname": "\\mod_quiz\\event\\attempt_submitted"
}
Loading