MigrationMoodle: Add task to migration lp views - refs BT#15992

pull/3127/head
Angel Fernando Quiroz Campos 6 years ago
parent dafc4c1cf0
commit a0ff7c2674
  1. 7
      plugin/migrationmoodle/admin.php
  2. 1
      plugin/migrationmoodle/lang/english.php
  3. 6
      plugin/migrationmoodle/src/Extractor/UserExtractor.php
  4. 50
      plugin/migrationmoodle/src/Loader/UsersScormsViewLoader.php
  5. 73
      plugin/migrationmoodle/src/Task/UsersScormsViewTask.php

@ -21,12 +21,11 @@ if ('true' != $plugin->get('active')) {
$menu = [
'_' => [
//'users',
'efc_users',
'course_categories',
//'courses',
'efc_courses',
//'role_assignments',
'efc_user_sessions',
'efc_users',
],
'efc_courses' => [
'course_introductions',
@ -91,6 +90,10 @@ $menu = [
'course_modules_url' => [
'urls',
],
'efc_users' => [
'efc_user_sessions',
'users_scorms_view',
],
];
Display::display_header($plugin->get_title());

@ -48,3 +48,4 @@ $strings['FilesForCourseSectionsTask'] = 'Files for course sections';
$strings['CourseModulesUrlTask'] = 'Course modules: URLs';
$strings['UrlsTask'] = 'URLs';
$strings['SortSectionModulesTask'] = 'Sort modules in section';
$strings['UsersScormsViewTask'] = 'Scorm views for users';

@ -31,7 +31,11 @@ class UserExtractor extends FilterExtractor
*/
public function filter(array $sourceData)
{
$userId = current($sourceData);
$userId = $sourceData['id'];
if (isset($sourceData['userid'])) {
$userId = $sourceData['userid'];
}
return !$this->existsExtracted($userId);
}

@ -0,0 +1,50 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class UsersScormsViewLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class UsersScormsViewLoader implements LoaderInterface
{
/**
* @inheritDoc
*/
public function load(array $incomingData)
{
$em = \Database::getManager();
$userSessionSubscription = $em
->getRepository('ChamiloCoreBundle:SessionRelCourseRelUser')
->findOneBy(
[
'user' => $incomingData['user_id'],
'course' => $incomingData['c_id']
]
);
if (empty($userSessionSubscription)) {
throw new \Exception(
"Session not found for user ({$incomingData['user_id']}) with course ({$incomingData['c_id']})"
);
}
$incomingData['session_id'] = $userSessionSubscription->getSession()->getId();
$incomingData['last_item'] = 0;
$tblLpView = \Database::get_course_table(TABLE_LP_VIEW);
$lpviewId = \Database::insert(
$tblLpView,
$incomingData
);
\Database::query("UPDATE $tblLpView SET id = iid WHERE iid = $lpviewId");
return $lpviewId;
}
}

@ -0,0 +1,73 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\UserExtractor;
use Chamilo\PluginBundle\MigrationMoodle\Loader\UsersScormsViewLoader;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedLpLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedScormLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserLookup;
/**
* Class UsersScormsViewTask.
*
* Task for register the LP view of user coming from moodle scorm track.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class UsersScormsViewTask extends BaseTask
{
/**
* @inheritDoc
*/
public function getExtractConfiguration()
{
return [
'class' => UserExtractor::class,
'query' => 'SELECT sst.id, sst.userid, MAX(sst.attempt) view_count, s.course, s.id scorm
FROM mdl_scorm_scoes_track sst
INNER JOIN mdl_scorm_scoes ss ON (sst.scoid = ss.id AND sst.scormid = ss.scorm)
INNER JOIN mdl_scorm s ON (ss.scorm = s.id)
GROUP BY sst.scormid, sst.userid
ORDER BY s.course, s.id, sst.scoid',
];
}
/**
* @inheritDoc
*/
public function getTransformConfiguration()
{
return [
'class' => BaseTransformer::class,
'map' => [
'c_id' => [
'class' => LoadedCourseLookup::class,
'properties' => ['course'],
],
'lp_id' => [
'class' => LoadedScormLookup::class,
'properties' => ['scorm'],
],
'user_id' => [
'class' => LoadedUserLookup::class,
'properties' => ['userid'],
],
'view_count' => 'view_count',
],
];
}
/**
* @inheritDoc
*/
public function getLoadConfiguration()
{
return [
'class' => UsersScormsViewLoader::class,
];
}
}
Loading…
Cancel
Save