parent
f3eeb5e381
commit
c2d0ab6a19
@ -0,0 +1,30 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PluginBundle\MigrationMoodle\Loader; |
||||
|
||||
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface; |
||||
|
||||
/** |
||||
* Class UserQuestionAttemptLoader. |
||||
* |
||||
* @package Chamilo\PluginBundle\MigrationMoodle\Loader |
||||
*/ |
||||
class UserQuestionAttemptLoader implements LoaderInterface |
||||
{ |
||||
/** |
||||
* @inheritDoc |
||||
*/ |
||||
public function load(array $incomingData) |
||||
{ |
||||
$incomingData['marks'] = (float) $incomingData['marks']; |
||||
$incomingData['teacher_comment'] = ''; |
||||
$incomingData['tms'] = $incomingData['tms']->format('Y-m-d H:i:s'); |
||||
$incomingData['position'] = 0; |
||||
|
||||
return \Database::insert( |
||||
\Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT), |
||||
$incomingData |
||||
); |
||||
} |
||||
} |
||||
@ -0,0 +1,112 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PluginBundle\MigrationMoodle\Task; |
||||
|
||||
use Chamilo\PluginBundle\MigrationMoodle\Extractor\LoadedUsersFilterExtractor; |
||||
use Chamilo\PluginBundle\MigrationMoodle\Loader\UserQuestionAttemptLoader; |
||||
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\LoadedQuestionLookup; |
||||
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserLookup; |
||||
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserQuizLookup; |
||||
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserSessionLookup; |
||||
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\UserQuestionAnswer; |
||||
|
||||
/** |
||||
* Class UserQuestionAttemptsTask. |
||||
* |
||||
* @package Chamilo\PluginBundle\MigrationMoodle\Task |
||||
*/ |
||||
class UserQuestionAttemptsTask extends BaseTask |
||||
{ |
||||
/** |
||||
* @inheritDoc |
||||
*/ |
||||
public function getExtractConfiguration() |
||||
{ |
||||
$userFilter = $this->plugin->getUserFilterSetting(); |
||||
|
||||
$userFilterCondition = !empty($userFilter) ? "AND u.username LIKE '$userFilter%'" : ''; |
||||
|
||||
return [ |
||||
'class' => LoadedUsersFilterExtractor::class, |
||||
'query' => "SELECT |
||||
qqa.id, |
||||
qa.userid, |
||||
qa.id quiz_attempt, |
||||
qqa.questionid, |
||||
qqa.rightanswer, |
||||
qqa.responsesummary, |
||||
qqa.timemodified, |
||||
qqas.fraction, |
||||
q.course, |
||||
qq.defaultmark, |
||||
qq.qtype |
||||
FROM mdl_question_attempts qqa |
||||
INNER JOIN mdl_quiz_attempts qa ON qqa.questionusageid = qa.uniqueid |
||||
INNER JOIN mdl_question_attempt_steps qqas |
||||
ON (qqa.id = qqas.questionattemptid AND qa.userid = qqas.userid) |
||||
INNER JOIN mdl_question_attempt_step_data qqasd ON qqas.id = qqasd.attemptstepid |
||||
INNER JOIN mdl_question qq ON (qqa.questionid = qq.id) |
||||
INNER JOIN mdl_quiz q ON (qa.quiz = q.id) |
||||
INNER JOIN mdl_user u ON (qqas.userid = u.id) |
||||
WHERE qqas.state NOT IN ('todo', 'complete') |
||||
AND (qqasd.name = '-finish' AND qqasd.value = 1) |
||||
$userFilterCondition |
||||
ORDER BY qa.userid, qa.quiz, qqa.slot", |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* @inheritDoc |
||||
*/ |
||||
public function getTransformConfiguration() |
||||
{ |
||||
return [ |
||||
'class' => BaseTransformer::class, |
||||
'map' => [ |
||||
'exe_id' => [ |
||||
'class' => LoadedUserQuizLookup::class, |
||||
'properties' => ['quiz_attempt'], |
||||
], |
||||
'user_id' => [ |
||||
'class' => LoadedUserLookup::class, |
||||
'properties' => ['userid'], |
||||
], |
||||
'question_id' => [ |
||||
'class' => LoadedQuestionLookup::class, |
||||
'properties' => ['questionid'], |
||||
], |
||||
'answer' => [ |
||||
'class' => UserQuestionAnswer::class, |
||||
'properties' => ['qtype', 'rightanswer', 'responsesummary', 'fraction', 'defaultmark'], |
||||
], |
||||
'marks' => 'fraction', |
||||
'c_id' => [ |
||||
'class' => LoadedCourseLookup::class, |
||||
'properties' => ['course'], |
||||
], |
||||
'tms' => [ |
||||
'class' => DateTimeObject::class, |
||||
'properties' => ['timemodified'], |
||||
], |
||||
'session_id' => [ |
||||
'class' => LoadedUserSessionLookup::class, |
||||
'properties' => ['userid'], |
||||
], |
||||
], |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* @inheritDoc |
||||
*/ |
||||
public function getLoadConfiguration() |
||||
{ |
||||
return [ |
||||
'class' => UserQuestionAttemptLoader::class, |
||||
]; |
||||
} |
||||
} |
||||
@ -0,0 +1,22 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property; |
||||
|
||||
use Chamilo\PluginBundle\MigrationMoodle\Task\UsersQuizzesAttemptsTask; |
||||
|
||||
/** |
||||
* Class LoadedUserQuizLookup. |
||||
* |
||||
* @package Chamilo\PluginBundle\MigrationMoodle\Transformer\Property |
||||
*/ |
||||
class LoadedUserQuizLookup extends LoadedKeyLookup |
||||
{ |
||||
/** |
||||
* LoadedUserQuizLookup constructor. |
||||
*/ |
||||
public function __construct() |
||||
{ |
||||
$this->calledClass = UsersQuizzesAttemptsTask::class; |
||||
} |
||||
} |
||||
@ -0,0 +1,45 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property; |
||||
|
||||
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\TransformPropertyInterface; |
||||
use Chamilo\PluginBundle\MigrationMoodle\Loader\LessonAnswersShortAnswerLoader; |
||||
|
||||
/** |
||||
* Class UserQuestionAnswer. |
||||
* |
||||
* @package Chamilo\PluginBundle\MigrationMoodle\Transformer\Property |
||||
*/ |
||||
class UserQuestionAnswer implements TransformPropertyInterface |
||||
{ |
||||
/** |
||||
* @inheritDoc |
||||
*/ |
||||
public function transform(array $data) |
||||
{ |
||||
list($mQType, $mRightAnswer, $mResponseSummary, $mFraction, $mDefaultMark) = array_values($data); |
||||
|
||||
switch ($mQType) { |
||||
case 'shortanswer': |
||||
return $this->showAnswer($mRightAnswer, $mResponseSummary, $mFraction, $mDefaultMark); |
||||
default: |
||||
return ''; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param string $mRightAnswer |
||||
* @param string $mResponseSummary |
||||
* @param float $mFraction |
||||
* @param float $mDefaultMark |
||||
* |
||||
* @return string |
||||
*/ |
||||
private function showAnswer($mRightAnswer, $mResponseSummary, $mFraction, $mDefaultMark) |
||||
{ |
||||
$width = LessonAnswersShortAnswerLoader::INPUT_WIDTH; |
||||
|
||||
return "[$mRightAnswer][$mResponseSummary][$mFraction]::$mDefaultMark:$width:0@"; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue