MigrationMoodle: Add task for lesson branch - refs BT#15992

pull/3127/head
Angel Fernando Quiroz Campos 6 years ago
parent c5f260fc82
commit d03754ea03
  1. 1
      plugin/migrationmoodle/admin.php
  2. 1
      plugin/migrationmoodle/lang/english.php
  3. 105
      plugin/migrationmoodle/src/Loader/UserLearnPathLessonBranchLoader.php
  4. 71
      plugin/migrationmoodle/src/Task/UsersLearnPathsLessonBranchTask.php

@ -97,6 +97,7 @@ $menu = [
],
'users_learn_paths' => [
'users_learn_paths_lesson_timer',
'users_learn_paths_lesson_branch',
],
'users_scorms_view' => [
'users_scorms_progress',

@ -61,3 +61,4 @@ $strings['UsersLearnPathsTask'] = 'Learn paths views of users';
$strings['UsersLearnPathsLessonTimerTask'] = 'Lesson timer to start time of Learn paths section';
$strings['QuizzesScoresTask'] = 'Update quiz scores in learn path';
$strings['QuestionGapselectTask'] = 'Answers for gapselect questions';
$strings['UsersLearnPathsLessonBranchTask'] = 'Lesson branch to total time in learn paths documents';

@ -0,0 +1,105 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\CourseBundle\Entity\CLpItemView;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class UserLearnPathLessonBranchLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class UserLearnPathLessonBranchLoader implements LoaderInterface
{
/**
* @inheritDoc
*/
public function load(array $incomingData)
{
$em = \Database::getManager();
$item = $em->find('ChamiloCourseBundle:CLpItem', $incomingData['item_id']);
if (!$item) {
throw new \Exception("LP item ({$incomingData['item_id']}) not found.");
}
$itemView = $this->findViewOfItem($incomingData);
if ($item->getDisplayOrder() !== 1) {
$previuousItemView = $this->findViewOfPreviousItem($incomingData);
$itemView->setStartTime(
$previuousItemView->getStartTime() + $previuousItemView->getTotalTime()
);
}
$totalTime = $incomingData['end_time'] - $itemView->getStartTime();
$itemView
->setStatus('completed')
->setTotalTime($totalTime);
$em->persist($itemView);
$em->flush();
return $itemView->getId();
}
/**
* @param array $incomingData
*
* @throws \Doctrine\ORM\NonUniqueResultException
*
* @return CLpItemView
*/
private function findViewOfItem(array $incomingData)
{
/** @var CLpItemView $itemView */
$itemView = \Database::getManager()
->createQuery("SELECT lpiv
FROM ChamiloCourseBundle:CLpItemView lpiv
INNER JOIN ChamiloCourseBundle:CLpView lpv WITH (lpv.iid = lpiv.lpViewId AND lpv.cId = lpiv.cId)
WHERE lpiv.lpItemId = :item_id AND lpv.userId = :user_id")
->setMaxResults(1)
->setParameters(['item_id' => $incomingData['item_id'], 'user_id' => $incomingData['user_id']])
->getOneOrNullResult();
if (!$itemView) {
throw new \Exception("Item view not found for "
."item ({$incomingData['item_id']}) and user ({$incomingData['user_id']}).");
}
return $itemView;
}
/**
* @param array $incomingData
*
* @throws \Doctrine\ORM\NonUniqueResultException
*
* @return CLpItemView
*/
private function findViewOfPreviousItem(array $incomingData)
{
/** @var CLpItemView $previuousItemView */
$previuousItemView = \Database::getManager()
->createQuery("SELECT lpiv
FROM ChamiloCourseBundle:CLpItemView lpiv
INNER JOIN ChamiloCourseBundle:CLpView lpv WITH (lpv.iid = lpiv.lpViewId AND lpv.cId = lpiv.cId)
INNER JOIN ChamiloCourseBundle:CLpItem lpi WITH (lpi.iid = lpiv.lpItemId AND lpi.cId = lpiv.cId)
WHERE lpi.nextItemId = :item_id AND lpv.userId = :user_id")
->setMaxResults(1)
->setParameters(['item_id' => $incomingData['item_id'], 'user_id' => $incomingData['user_id']])
->getOneOrNullResult();
if (!$previuousItemView) {
throw new \Exception("Item view not found for "
."previous item ({$incomingData['item_id']}) and user ({$incomingData['user_id']}).");
}
return $previuousItemView;
}
}

@ -0,0 +1,71 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\LoadedUsersFilterExtractor;
use Chamilo\PluginBundle\MigrationMoodle\Loader\UserLearnPathLessonBranchLoader;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseModuleLessonLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedLessonPageLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserSessionLookup;
/**
* Class UsersLearnPathsLessonBranchTask.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class UsersLearnPathsLessonBranchTask extends BaseTask
{
/**
* @inheritDoc
*/
public function getExtractConfiguration()
{
return [
'class' => LoadedUsersFilterExtractor::class,
'query' => "SELECT * FROM mdl_lesson_branch",
];
}
/**
* @inheritDoc
*/
public function getTransformConfiguration()
{
return [
'class' => BaseTransformer::class,
'map' => [
'parent_item_id' => [
'class' => LoadedCourseModuleLessonLookup::class,
'properties' => ['lessonid'],
],
'item_id' => [
'class' => LoadedLessonPageLookup::class,
'properties' => ['pageid'],
],
'user_id' => [
'class' => LoadedUserLookup::class,
'properties' => ['userid'],
],
'end_time' => 'timeseen',
'session_id' => [
'class' => LoadedUserSessionLookup::class,
'properties' => ['userid'],
],
'view_count' => 'retry',
],
];
}
/**
* @inheritDoc
*/
public function getLoadConfiguration()
{
return [
'class' => UserLearnPathLessonBranchLoader::class,
];
}
}
Loading…
Cancel
Save