parent
cea010048d
commit
5fbf3c555a
@ -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…
Reference in new issue