From e018e876b3234177b51c5c2f946aaf4f2f7a87d4 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Thu, 21 Nov 2019 11:43:30 -0500 Subject: [PATCH] MigrationMoodle: Add task for multiple answers in lesson pages - refs BT#15992 --- plugin/migrationmoodle/admin.php | 9 +++ .../LessonAnswersMultipleAnswerLoader.php | 74 +++++++++++++++++++ .../Task/LessonAnswersMultipleAnswerTask.php | 43 +++++++++++ 3 files changed, 126 insertions(+) create mode 100644 plugin/migrationmoodle/src/Loader/LessonAnswersMultipleAnswerLoader.php create mode 100644 plugin/migrationmoodle/src/Task/LessonAnswersMultipleAnswerTask.php diff --git a/plugin/migrationmoodle/admin.php b/plugin/migrationmoodle/admin.php index df06edc880..5be3f87c3f 100644 --- a/plugin/migrationmoodle/admin.php +++ b/plugin/migrationmoodle/admin.php @@ -7,6 +7,7 @@ use Chamilo\PluginBundle\MigrationMoodle\Task\CoursesTask; use Chamilo\PluginBundle\MigrationMoodle\Task\CourseUsersTask; use Chamilo\PluginBundle\MigrationMoodle\Task\CQuizTask; use Chamilo\PluginBundle\MigrationMoodle\Task\LearningPathsTask; +use Chamilo\PluginBundle\MigrationMoodle\Task\LessonAnswersMultipleAnswerTask; use Chamilo\PluginBundle\MigrationMoodle\Task\LessonAnswersMultipleChoiceTask; use Chamilo\PluginBundle\MigrationMoodle\Task\LessonAnswersTrueFalseTask; use Chamilo\PluginBundle\MigrationMoodle\Task\LpDirsTask; @@ -89,6 +90,11 @@ $menu = [ 'learnin_path_quiz_answers_multiple_choice', 'Answers for Multiple Choice questions', [] + ], + [ + 'learnin_path_quiz_answers_multiple_answer', + 'Answers for Multiple Answers questions', + [] ] ], ], @@ -169,6 +175,9 @@ if (!empty($action)) { case 'learnin_path_quiz_answers_multiple_choice': $task = new LessonAnswersMultipleChoiceTask(); break; + case 'learnin_path_quiz_answers_multiple_answer': + $task = new LessonAnswersMultipleAnswerTask(); + break; } if ($task) { diff --git a/plugin/migrationmoodle/src/Loader/LessonAnswersMultipleAnswerLoader.php b/plugin/migrationmoodle/src/Loader/LessonAnswersMultipleAnswerLoader.php new file mode 100644 index 0000000000..4ed3392cd4 --- /dev/null +++ b/plugin/migrationmoodle/src/Loader/LessonAnswersMultipleAnswerLoader.php @@ -0,0 +1,74 @@ +read($incomingData['quiz_id']); + + $question = \Question::read($incomingData['question_id'], $courseInfo); + + $answer = new \Answer($incomingData['question_id'], $incomingData['c_id'], $exercise); + $questionsAnswers = $answer->getAnswers(); + + foreach ($questionsAnswers as $questionsAnswer) { + $answer->createAnswer( + $questionsAnswer['answer'], + $questionsAnswer['correct'], + $questionsAnswer['comment'], + $questionsAnswer['ponderation'], + $questionsAnswer['position'], + $questionsAnswer['hotspot_coordinates'], + $questionsAnswer['hotspot_type'], + $questionsAnswer['destination'] + ); + } + + $isGoodAnswer = !empty($incomingData['score']); + $incomingData['score'] = abs($incomingData['score']); + + if (!$isGoodAnswer) { + $incomingData['score'] = -$incomingData['score']; + } + + if ($incomingData['score'] > 0) { + $question->weighting += $incomingData['score']; + } + + $answer->createAnswer( + $incomingData['answer'], + $isGoodAnswer, + $incomingData['feedback'], + $incomingData['score'], + $question->countAnswers() + 1, + null, + null, + '0@@0@@0@@0' + ); + + $answer->save(); + $question->save($exercise); + + return $question->id; + } +} diff --git a/plugin/migrationmoodle/src/Task/LessonAnswersMultipleAnswerTask.php b/plugin/migrationmoodle/src/Task/LessonAnswersMultipleAnswerTask.php new file mode 100644 index 0000000000..cb16371ca5 --- /dev/null +++ b/plugin/migrationmoodle/src/Task/LessonAnswersMultipleAnswerTask.php @@ -0,0 +1,43 @@ + BaseExtractor::class, + 'query' => 'SELECT la.id, la.pageid, la.score, la.answer, la.response, l.course + FROM mdl_lesson_answers la + INNER JOIN mdl_lesson_pages lp ON (la.pageid = lp.id AND la.lessonid = lp.lessonid) + INNER JOIN mdl_lesson l ON (lp.lessonid = l.id AND la.lessonid = l.id) + WHERE lp.qtype = 3 AND lp.qoption = 1 + ORDER BY lp.id', + ]; + } + + /** + * @return array + */ + public function getLoadConfiguration() + { + return [ + 'class' => LessonAnswersMultipleAnswerLoader::class, + ]; + } +}