MigrationMoodle: Add quizzes task - refs BT#15992

pull/3127/head
Angel Fernando Quiroz Campos 6 years ago
parent ce04c49a80
commit 2fdd5d0569
  1. 6
      plugin/migrationmoodle/admin.php
  2. 69
      plugin/migrationmoodle/src/Loader/CQuizLoader.php
  3. 78
      plugin/migrationmoodle/src/Task/CQuizTask.php
  4. 30
      plugin/migrationmoodle/src/Transformer/Property/Percentage.php

@ -4,6 +4,7 @@
use Chamilo\PluginBundle\MigrationMoodle\Task\CourseCategoriesTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\CoursesTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\CourseUsersTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\CQuizTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\UsersTask;
require_once __DIR__.'/../../main/inc/global.inc.php';
@ -17,6 +18,7 @@ $actionNames = [
'course_categories' => 'Course categories',
'courses' => 'Courses',
'course_users' => 'Users in courses',
'quizzes' => 'Quizzes',
];
foreach ($actionNames as $actionName => $actionTitle) {
@ -45,6 +47,10 @@ if (!empty($action)) {
$courseUsersMigration = new CourseUsersTask();
$courseUsersMigration->execute();
break;
case 'quizzes':
$quizTask = new CQuizTask();
$quizTask->execute();
break;
}
}

@ -0,0 +1,69 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class CQuizLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class CQuizLoader implements LoaderInterface
{
/**
* Load the data and return the ID inserted.
*
* @param array $incomingData
*
* @throws \Doctrine\DBAL\DBALException
*
* @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->updatePropagateNegative($incomingData['propagate_neg']);
//$exercise->updateSaveCorrectAnswers($incomingData['save_correct_answers']);
//$exercise->updateRandomByCat($incomingData['randomByCat']);
$exercise->updateTextWhenFinished('');
$exercise->updateDisplayCategoryName(1);
//$exercise->updateReviewAnswers($incomingData['review_answers']);
$exercise->updatePassPercentage($incomingData['pass_percentage']);
//$exercise->updateCategories($incomingData['category']);
//$exercise->updateEndButton($incomingData['end_button']);
//$exercise->setOnSuccessMessage($incomingData['on_success_message']);
//$exercise->setOnFailedMessage($incomingData['on_failed_message']);
//$exercise->updateEmailNotificationTemplate($incomingData['email_notification_template']);
//$exercise->setEmailNotificationTemplateToUser($incomingData['email_notification_template_to_user']);
//$exercise->setNotifyUserByEmail($incomingData['notify_user_by_email']);
//$exercise->setModelType($incomingData['model_type']);
$exercise->setQuestionSelectionType(1);
$exercise->setHideQuestionTitle(0);
$exercise->sessionId = 0;
//$exercise->setScoreTypeModel($incomingData['score_type_model']);
//$exercise->setGlobalCategoryId($incomingData['global_category_id']);
//$exercise->setShowPreviousButton($incomingData['show_previous_button']);
//$exercise->setNotifications($incomingData['notifications']);
//$exercise->setExerciseCategoryId($incomingData['exercise_category_id']);
$exercise->setPageResultConfiguration($incomingData);
$exercise->start_time = api_get_utc_datetime($incomingData['start_time'], true);
$exercise->end_time = api_get_utc_datetime($incomingData['end_time'], true);
$exercise->expired_time = $incomingData['enabletimercontroltotalminutes'];
$exercise->random_answers = $incomingData['randomAnswers'] == 1 ? 1 : 0;
$iId = $exercise->save();
return $iId;
}
}

@ -0,0 +1,78 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\BaseExtractor;
use Chamilo\PluginBundle\MigrationMoodle\Loader\CQuizLoader;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\DateTimeObject;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\Percentage;
/**
* Class CQuizTask.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class CQuizTask extends BaseTask
{
/**
* @return array
*/
public function getExtractConfiguration()
{
return [
'class' => BaseExtractor::class,
'query' => 'SELECT * FROM mdl_quiz',
];
}
/**
* @return array
*/
public function getTransformConfiguration()
{
return [
'class' => BaseTransformer::class,
'map' => [
'c_id' => [
'class' => LoadedCourseLookup::class,
'properties' => ['course'],
],
'exerciseTitle' => 'name',
'exerciseDescription' => 'intro',
//'exerciseFeedbackType',
//'results_disabled',
//'exerciseType',
//'question_selection_type',
//'randomQuestions' => 'shufflequestions',
'randomAnswers' => 'shuffleanswers',
//'display_category_name',
//'hide_question_title',
'exerciseAttempts' => 'attempts',
//'activate_start_date_check',
'start_time' => 'timeopen',
//'activate_end_date_check',
'end_time' => 'timeclose',
//'enabletimercontrol',
'enabletimercontroltotalminutes' => 'timelimit',
'pass_percentage' => [
'class' => Percentage::class,
'properties' => ['sumgrades', 'grade']
],
//'text_when_finished',
],
];
}
/**
* @return array
*/
public function getLoadConfiguration()
{
return [
'class' => CQuizLoader::class,
];
}
}

@ -0,0 +1,30 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\TransformPropertyInterface;
/**
* Class Percentage.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Transformer\Property
*/
class Percentage implements TransformPropertyInterface
{
/**
* @param array $data
*
* @return float|int
*/
public function transform(array $data)
{
list($a, $b) = array_values($data);
if (empty($b)) {
return 0;
}
return $a / $b * 100;
}
}
Loading…
Cancel
Save