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

pull/3127/head
Angel Fernando Quiroz Campos 6 years ago
parent 43834f5774
commit c5f260fc82
  1. 2
      plugin/migrationmoodle/admin.php
  2. 2
      plugin/migrationmoodle/lang/english.php
  3. 102
      plugin/migrationmoodle/src/Loader/UserLearnPathLessonTimerLoader.php
  4. 2
      plugin/migrationmoodle/src/Loader/UserLearnPathsLoader.php
  5. 58
      plugin/migrationmoodle/src/Loader/UserLearnPathsSectionsLoader.php
  6. 28
      plugin/migrationmoodle/src/Task/UsersLearnPathsLessonTimerTask.php
  7. 22
      plugin/migrationmoodle/src/Transformer/Property/LoadedUserSessionLookup.php

@ -96,7 +96,7 @@ $menu = [
'users_scorms_view', 'users_scorms_view',
], ],
'users_learn_paths' => [ 'users_learn_paths' => [
'users_learn_paths_sections', 'users_learn_paths_lesson_timer',
], ],
'users_scorms_view' => [ 'users_scorms_view' => [
'users_scorms_progress', 'users_scorms_progress',

@ -58,6 +58,6 @@ $strings['SortSectionModulesTask'] = 'Sort modules in section';
$strings['UsersScormsViewTask'] = 'Scorm views for users'; $strings['UsersScormsViewTask'] = 'Scorm views for users';
$strings['UsersScormsProgressTask'] = 'Scorm progress'; $strings['UsersScormsProgressTask'] = 'Scorm progress';
$strings['UsersLearnPathsTask'] = 'Learn paths views of users'; $strings['UsersLearnPathsTask'] = 'Learn paths views of users';
$strings['UsersLearnPathsSectionsTask'] = 'Learn paths sections views of users'; $strings['UsersLearnPathsLessonTimerTask'] = 'Lesson timer to start time of Learn paths section';
$strings['QuizzesScoresTask'] = 'Update quiz scores in learn path'; $strings['QuizzesScoresTask'] = 'Update quiz scores in learn path';
$strings['QuestionGapselectTask'] = 'Answers for gapselect questions'; $strings['QuestionGapselectTask'] = 'Answers for gapselect questions';

@ -0,0 +1,102 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\CourseBundle\Entity\CLpItemView;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class UserLearnPathLessonTimerLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class UserLearnPathLessonTimerLoader implements LoaderInterface
{
/**
* @inheritDoc
*/
public function load(array $incomingData)
{
$em = \Database::getManager();
$parentItemView = $this->findViewOfParentItem($incomingData)->setStartTime($incomingData['start_time']);
$itemView = $this->findViewOfFirstItem($incomingData)->setStartTime($incomingData['start_time']);
$em->persist($parentItemView);
$em->persist($itemView);
$em->flush();
return $itemView->getId();
}
/**
* @param array $incomingData
*
* @throws \Doctrine\ORM\NonUniqueResultException
*
* @return CLpItemView
*/
private function findViewOfParentItem(array $incomingData)
{
/** @var CLpItemView $parentItemView */
$parentItemView = \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['parent_item_id'], 'user_id' => $incomingData['user_id']])
->getOneOrNullResult();
if (!$parentItemView) {
throw new \Exception("Item dir ({$incomingData['parent_item_id']}) not found.");
}
return $parentItemView;
}
/**
* @param array $incomingData
*
* @throws \Doctrine\ORM\NonUniqueResultException
*
* @return CLpItemView
*/
private function findViewOfFirstItem(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)
INNER JOIN ChamiloCourseBundle:CLpItem lpi
WITH (lpi.lpId = lpv.lpId AND lpi.cId = lpv.cId AND lpi.iid = lpiv.lpItemId)
WHERE lpi.itemType = :type
AND lpv.userId = :user_id
AND lpi.parentItemId = :parent_item_id
AND lpv.sessionId = :session_id
ORDER BY lpi.displayOrder ASC"
)
->setMaxResults(1)
->setParameters(
[
'type' => 'document',
'user_id' => $incomingData['user_id'],
'parent_item_id' => $incomingData['parent_item_id'],
'session_id' => $incomingData['session_id'],
]
)
->getOneOrNullResult();
if (!$itemView) {
throw new \Exception("Item view not found for item with"
." parent item ({$incomingData['parent_item_id']}) and user ({$incomingData['user_id']})");
}
return $itemView;
}
}

@ -62,7 +62,7 @@ class UserLearnPathsLoader implements LoaderInterface
'lp_view_id' => $lpViewId, 'lp_view_id' => $lpViewId,
'view_count' => 1, 'view_count' => 1,
'status' => 'not attempted', 'status' => 'not attempted',
'start_time' => time(), 'start_time' => 0,
'total_time' => 0, 'total_time' => 0,
'score' => 0, 'score' => 0,
'max_score' => $lpItem->getMaxScore(), 'max_score' => $lpItem->getMaxScore(),

@ -1,58 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\CourseBundle\Entity\CLpItemView;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class UserLearnPathsSectionsLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class UserLearnPathsSectionsLoader implements LoaderInterface
{
/**
* @inheritDoc
*/
public function load(array $incomingData)
{
$em = \Database::getManager();
$lpViewRepo = $em->getRepository('ChamiloCourseBundle:CLpView');
$lpItemViewRepo = $em->getRepository('ChamiloCourseBundle:CLpItemView');
$lpView = $lpViewRepo->findOneBy(['userId' => $incomingData['user_id'], 'lpId' => $incomingData['lp_id']]);
if (empty($lpView)) {
throw new \Exception(
"LP view not found for user ({$incomingData['user_id']}) and LP ({$incomingData['lp_id']})"
);
}
/** @var CLpItemView $lpItemView */
$lpItemView = $lpItemViewRepo->findOneBy(
[
'lpViewId' => $lpView->getId(),
'lpItemId' => $incomingData['item_id']
]
);
if (empty($lpItemView)) {
throw new \Exception(
"LP item view not found for view ({$lpView->getId()}) and item ({$incomingData['item_id']})"
);
}
$lpItemView
->setMaxScore('100')
->setStartTime($incomingData['start_time'])
->setTotalTime($incomingData['total_time']);
$em->persist($lpItemView);
$em->flush();
return $lpItemView->getId();
}
}

@ -4,20 +4,20 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Task; namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\LoadedUsersFilterExtractor; use Chamilo\PluginBundle\MigrationMoodle\Extractor\LoadedUsersFilterExtractor;
use Chamilo\PluginBundle\MigrationMoodle\Loader\UserLearnPathsSectionsLoader; use Chamilo\PluginBundle\MigrationMoodle\Loader\UserLearnPathLessonTimerLoader;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer; use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseModuleLessonLookup; use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseModuleLessonLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseSectionFromLessonLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserLookup; use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserSessionLookup;
/** /**
* Class UsersLearnPathsSectionsTask. * Class UsersLearnPathsLessonTimerTask.
* *
* Update lp item (dirs) view. * Update lp item (dirs) view.
* *
* @package Chamilo\PluginBundle\MigrationMoodle\Task * @package Chamilo\PluginBundle\MigrationMoodle\Task
*/ */
class UsersLearnPathsSectionsTask extends BaseTask class UsersLearnPathsLessonTimerTask extends BaseTask
{ {
/** /**
* @inheritDoc * @inheritDoc
@ -26,8 +26,7 @@ class UsersLearnPathsSectionsTask extends BaseTask
{ {
return [ return [
'class' => LoadedUsersFilterExtractor::class, 'class' => LoadedUsersFilterExtractor::class,
'query' => "SELECT id, lessonid, userid, starttime, lessontime - starttime AS total_time 'query' => "SELECT * FROM mdl_lesson_timer",
FROM mdl_lesson_timer",
]; ];
} }
@ -39,19 +38,18 @@ class UsersLearnPathsSectionsTask extends BaseTask
return [ return [
'class' => BaseTransformer::class, 'class' => BaseTransformer::class,
'map' => [ 'map' => [
'parent_item_id' => [
'class' => LoadedCourseModuleLessonLookup::class,
'properties' => ['lessonid'],
],
'user_id' => [ 'user_id' => [
'class' => LoadedUserLookup::class, 'class' => LoadedUserLookup::class,
'properties' => ['userid'], 'properties' => ['userid'],
], ],
'item_id' => [
'class' => LoadedCourseModuleLessonLookup::class,
'properties' => ['lessonid']
],
'start_time' => 'starttime', 'start_time' => 'starttime',
'total_time' => 'total_time', 'session_id' => [
'lp_id' => [ 'class' => LoadedUserSessionLookup::class,
'class' => LoadedCourseSectionFromLessonLookup::class, 'properties' => ['userid'],
'properties' => ['lessonid'],
], ],
], ],
]; ];
@ -63,7 +61,7 @@ class UsersLearnPathsSectionsTask extends BaseTask
public function getLoadConfiguration() public function getLoadConfiguration()
{ {
return [ return [
'class' => UserLearnPathsSectionsLoader::class, 'class' => UserLearnPathLessonTimerLoader::class,
]; ];
} }
} }

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