MigrationMoodle: Add task for quizzes in cours sections - refs BT#15992

pull/3127/head
Angel Fernando Quiroz Campos 7 years ago
parent cea010048d
commit 5fbf3c555a
  1. 4
      plugin/migrationmoodle/admin.php
  2. 1
      plugin/migrationmoodle/lang/english.php
  3. 54
      plugin/migrationmoodle/src/Loader/QuizzesLoader.php
  4. 95
      plugin/migrationmoodle/src/Task/QuizzesTask.php
  5. 22
      plugin/migrationmoodle/src/Transformer/Property/LoadedCourseModulesQuizLookup.php

@ -96,6 +96,10 @@ $menu = [
'action' => 'role_assignments',
'parent' => 0,
],
21 => [
'action' => 'quizzes',
'parent' => 6,
],
];
Display::display_header($plugin->get_title());

@ -28,3 +28,4 @@ $strings['FilesForLessonAnswersTask'] = 'Files for lesson answers';
$strings['CourseModulesQuizTask'] = 'Course modules: Quizzes';
$strings['CQuizTask'] = 'C Quiz';
$strings['RoleAssignmentsTask'] = 'Role assignments';
$strings['QuizzesTask'] = 'Quizzes';

@ -0,0 +1,54 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class QuizzesLoader.
*
* Loader for create a Chamilo quiz inside a learning path item coming from a Moodle quiz.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class QuizzesLoader implements LoaderInterface
{
/**
* Load the data and return the ID inserted.
*
* @param array $incomingData
*
* @return int
*/
public function load(array $incomingData)
{
$exercise = new \Exercise($incomingData['c_id']);
$exercise->updateTitle(\Exercise::format_title_variable($incomingData['exerciseTitle']));
$exercise->updateDescription($incomingData['exerciseDescription']);
$exercise->updateAttempts($incomingData['exerciseAttempts']);
$exercise->updateFeedbackType(0);
$exercise->updateType(2);
$exercise->setRandom(0);
$exercise->updateRandomAnswers($incomingData['randomAnswers']);
$exercise->updateResultsDisabled(0);
$exercise->updateExpiredTime($incomingData['enabletimercontroltotalminutes']);
$exercise->updateTextWhenFinished('');
$exercise->updateDisplayCategoryName(1);
$exercise->updatePassPercentage($incomingData['pass_percentage']);
$exercise->setQuestionSelectionType(1);
$exercise->setHideQuestionTitle(0);
$exercise->sessionId = 0;
$exercise->start_time = api_get_utc_datetime($incomingData['start_time'], true);
$exercise->end_time = api_get_utc_datetime($incomingData['end_time'], true);
$quizId = $exercise->save();
\Database::getManager()
->createQuery('UPDATE ChamiloCourseBundle:CLpItem i SET i.path = :path WHERE i.iid = :id')
->setParameters(['path' => $quizId, 'id' => $incomingData['item_id']])
->execute();
return $quizId;
}
}

@ -0,0 +1,95 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\BaseExtractor;
use Chamilo\PluginBundle\MigrationMoodle\Loader\QuizzesLoader;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseModulesQuizLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\Percentage;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\ReplaceFilePaths;
/**
* Class QuizzesTask.
*
* Task for convert a Moodle quiz inside a cours section in a Chamilo quiz for learning path.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class QuizzesTask extends BaseTask
{
/**
* @return array
*/
public function getExtractConfiguration()
{
return [
'class' => BaseExtractor::class,
'query' => "SELECT
q.id,
q.course,
q.name,
q.intro,
q.shuffleanswers,
q.attempts,
q.timeopen,
q.timeclose,
q.timelimit,
q.sumgrades,
q.grade,
cm.id cm_id
FROM mdl_quiz q
INNER JOIN mdl_course_modules cm ON (q.course = cm.course AND cm.instance = q.id)
INNER JOIN mdl_modules m ON cm.module = m.id
INNER JOIN mdl_course_sections cs ON (cm.course = cs.course AND cm.section = cs.id )
WHERE m.name = 'quiz'
ORDER BY cs.id, FIND_IN_SET(cm.id, cs.sequence)",
];
}
/**
* @return array
*/
public function getTransformConfiguration()
{
return [
'class' => BaseTransformer::class,
'map' => [
'c_id' => [
'class' => LoadedCourseLookup::class,
'properties' => ['course'],
],
'item_id' => [
'class' => LoadedCourseModulesQuizLookup::class,
'properties' => ['cm_id'],
],
'exerciseTitle' => 'name',
'exerciseDescription' => [
'class' => ReplaceFilePaths::class,
'properties' => ['intro', 'course'],
],
'randomAnswers' => 'shuffleanswers',
'exerciseAttempts' => 'attempts',
'start_time' => 'timeopen',
'end_time' => 'timeclose',
'enabletimercontroltotalminutes' => 'timelimit',
'pass_percentage' => [
'class' => Percentage::class,
'properties' => ['sumgrades', 'grade']
],
],
];
}
/**
* @return array
*/
public function getLoadConfiguration()
{
return [
'class' => QuizzesLoader::class,
];
}
}

@ -0,0 +1,22 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Task\CourseModulesQuizTask;
/**
* Class LoadedCourseModulesQuizLookup.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Transformer\Property
*/
class LoadedCourseModulesQuizLookup extends LoadedKeyLookup
{
/**
* LoadedCourseModulesQuizLookup constructor.
*/
public function __construct()
{
$this->calledClass = CourseModulesQuizTask::class;
}
}
Loading…
Cancel
Save