diff --git a/plugin/migrationmoodle/admin.php b/plugin/migrationmoodle/admin.php index c7e982fdd0..c76af2c0d0 100644 --- a/plugin/migrationmoodle/admin.php +++ b/plugin/migrationmoodle/admin.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()); diff --git a/plugin/migrationmoodle/lang/english.php b/plugin/migrationmoodle/lang/english.php index 32a9172693..c93b143884 100644 --- a/plugin/migrationmoodle/lang/english.php +++ b/plugin/migrationmoodle/lang/english.php @@ -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'; diff --git a/plugin/migrationmoodle/src/Extractor/UserExtractor.php b/plugin/migrationmoodle/src/Extractor/UserExtractor.php index 51bdff5666..15d71d2b2a 100644 --- a/plugin/migrationmoodle/src/Extractor/UserExtractor.php +++ b/plugin/migrationmoodle/src/Extractor/UserExtractor.php @@ -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); } diff --git a/plugin/migrationmoodle/src/Loader/UsersScormsViewLoader.php b/plugin/migrationmoodle/src/Loader/UsersScormsViewLoader.php new file mode 100644 index 0000000000..22731ffd86 --- /dev/null +++ b/plugin/migrationmoodle/src/Loader/UsersScormsViewLoader.php @@ -0,0 +1,50 @@ +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; + } +} diff --git a/plugin/migrationmoodle/src/Task/UsersScormsViewTask.php b/plugin/migrationmoodle/src/Task/UsersScormsViewTask.php new file mode 100644 index 0000000000..a4977838a0 --- /dev/null +++ b/plugin/migrationmoodle/src/Task/UsersScormsViewTask.php @@ -0,0 +1,73 @@ + 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, + ]; + } +}