Skip to content

Commit

Permalink
feat: Adds statement for essay quiz questions. (#194)
Browse files Browse the repository at this point in the history
  • Loading branch information
ryasmi authored Jul 30, 2018
1 parent 1d76a9e commit 406d08a
Show file tree
Hide file tree
Showing 18 changed files with 640 additions and 7 deletions.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ indent_style = space
indent_size = 2
charset = utf-8

[*.php]
[*.{php,json}]
indent_size = 4
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 src\transformer\events\mod_quiz;
namespace src\transformer\events\mod_quiz\attempt_submitted;

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

Expand Down
36 changes: 36 additions & 0 deletions src/transformer/events/mod_quiz/attempt_submitted/handler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?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_quiz\attempt_submitted;

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

use src\transformer\utils as utils;
use src\transformer\events\mod_quiz\question_answered as question_answered;

function handler(array $config, \stdClass $event) {
$repo = $config['repo'];
$questionattempts = $repo->read_records('question_attempts', [
'questionusageid' => $event->objectid
]);

return array_merge(
attempt_submitted($config, $event),
array_reduce($questionattempts, function ($result, $questionattempt) use ($config, $event) {
return array_merge($result, question_answered\handler($config, $event, $questionattempt));
}, [])
);
}
74 changes: 74 additions & 0 deletions src/transformer/events/mod_quiz/question_answered/essay.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/>.

namespace src\transformer\events\mod_quiz\question_answered;

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

use src\transformer\utils as utils;

function essay(array $config, \stdClass $event, \stdClass $questionattempt, \stdClass $question) {
$repo = $config['repo'];
$user = $repo->read_record_by_id('user', $event->relateduserid);
$course = $repo->read_record_by_id('course', $event->courseid);
$attempt = $repo->read_record_by_id('quiz_attempts', $questionattempt->questionusageid);
$quiz = $repo->read_record_by_id('quiz', $attempt->quiz);
$coursemodule = $repo->read_record_by_id('course_modules', $event->contextinstanceid);
$lang = utils\get_course_lang($course);

return [[
'actor' => utils\get_user($config, $user),
'verb' => [
'id' => 'http://adlnet.gov/expapi/verbs/answered',
'display' => [
$lang => 'answered'
],
],
'object' => [
'id' => $config['app_url'].'/question/question.php?cmid='.$coursemodule->id.'&id='.$question->id,
'definition' => [
'type' => 'http://adlnet.gov/expapi/activities/question',
'name' => [
$lang => $questionattempt->questionsummary,
],
'interactionType' => 'long-fill-in',
]
],
'timestamp' => utils\get_event_timestamp($event),
'result' => [
'response' => $questionattempt->responsesummary,
'completion' => $questionattempt->responsesummary !== '',
],
'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\module($config, 'quiz', $quiz, $lang),
utils\get_activity\module($config, 'attempt', $attempt, $lang),
],
'category' => [
utils\get_activity\source($config),
]
],
]
]];
}
33 changes: 33 additions & 0 deletions src/transformer/events/mod_quiz/question_answered/handler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?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_quiz\question_answered;

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

use src\transformer\utils as utils;

function handler(array $config, \stdClass $event, \stdClass $questionattempt) {
$repo = $config['repo'];
$question = $repo->read_record_by_id('question', $questionattempt->questionid);

switch ($question->qtype) {
case 'essay':
return essay($config, $event, $questionattempt, $question);
default:
return [];
}
}
4 changes: 2 additions & 2 deletions src/transformer/get_event_function_map.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ function get_event_function_map() {
'\mod_lti\event\course_module_viewed' => 'all\course_module_viewed',
'\mod_page\event\course_module_viewed' => 'all\course_module_viewed',
'\mod_quiz\event\course_module_viewed' => 'all\course_module_viewed',
'\mod_quiz\event\attempt_abandoned' => 'mod_quiz\attempt_submitted',
'\mod_quiz\event\attempt_abandoned' => 'mod_quiz\attempt_submitted\handler',
'\mod_quiz\event\attempt_started' => 'mod_quiz\attempt_started',
'\mod_quiz\event\attempt_reviewed' => 'mod_quiz\attempt_reviewed',
'\mod_quiz\event\attempt_submitted' => 'mod_quiz\attempt_submitted',
'\mod_quiz\event\attempt_submitted' => 'mod_quiz\attempt_submitted\handler',
'\mod_quiz\event\attempt_viewed' => 'all\course_module_viewed',
'\mod_resource\event\course_module_viewed' => 'all\course_module_viewed',
'\mod_scorm\event\course_module_viewed' => 'all\course_module_viewed',
Expand Down
65 changes: 65 additions & 0 deletions tests/mod_quiz/attempt_submitted/essay/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"user": [
{
"id": 1,
"firstname": "test_fullname",
"email": "test@test.com"
}
],
"course": [
{
"id": 1,
"fullname": "test_name",
"lang": "en"
}
],
"course_modules": [
{
"id": 1,
"course": 1,
"module": 1,
"instance": 1
}
],
"quiz_attempts": [
{
"id": 1,
"quiz": 1,
"sumgrades": 50,
"state": "finished",
"timefinish": 1,
"timestart": 0
}
],
"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,
"questionsummary": "test_question",
"responsesummary": "test_answer"
}
],
"question": [
{
"id": 1,
"qtype": "essay"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
"timecreated": 1433946701,
"objecttable": "attempt",
"objectid": 1,
"contextinstanceid": 1,
"eventname": "\\mod_quiz\\event\\attempt_submitted"
}
Loading

0 comments on commit 406d08a

Please sign in to comment.