From 2ce394daa331e6ca375d6bc600dc5e28f09a0d2f Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 23 Mar 2020 16:38:54 -0500 Subject: [PATCH] MigrationMoodle: Add task for track course access - refs BT#15992 --- plugin/migrationmoodle/admin.php | 1 + plugin/migrationmoodle/lang/english.php | 1 + plugin/migrationmoodle/run_cli.php | 1 + .../src/Loader/TrackCourseAccessLoader.php | 66 ++++++++++++++ .../src/Task/TrackCourseAccessTask.php | 86 +++++++++++++++++++ 5 files changed, 155 insertions(+) create mode 100644 plugin/migrationmoodle/src/Loader/TrackCourseAccessLoader.php create mode 100644 plugin/migrationmoodle/src/Task/TrackCourseAccessTask.php diff --git a/plugin/migrationmoodle/admin.php b/plugin/migrationmoodle/admin.php index 1781d2c69c..3ae505db9f 100644 --- a/plugin/migrationmoodle/admin.php +++ b/plugin/migrationmoodle/admin.php @@ -100,6 +100,7 @@ $menu = [ 'user_sessions' => [ 'users_learn_paths', 'users_scorms_view', + 'track_course_access', ], 'users_learn_paths' => [ 'users_learn_paths_lesson_timer', diff --git a/plugin/migrationmoodle/lang/english.php b/plugin/migrationmoodle/lang/english.php index b8306b7e14..89d67f2105 100644 --- a/plugin/migrationmoodle/lang/english.php +++ b/plugin/migrationmoodle/lang/english.php @@ -74,3 +74,4 @@ $strings['UserQuestionAttemptsGapselectTask'] = 'Question attempts of users for $strings['UserQuestionAttemptsTruefalseTask'] = 'Question attempts of users for truefalse'; $strings['UsersLastLoginTask'] = 'Last logins for users'; $strings['TrackLoginTask'] = 'First login and last logout'; +$strings['TrackCourseAccessTask'] = 'User access to course'; diff --git a/plugin/migrationmoodle/run_cli.php b/plugin/migrationmoodle/run_cli.php index 928d4b1577..45ee43a9f0 100644 --- a/plugin/migrationmoodle/run_cli.php +++ b/plugin/migrationmoodle/run_cli.php @@ -71,6 +71,7 @@ $taskNames = [ 'user_question_attempts_gapselect', 'user_question_attempts_truefalse', 'users_scorms_view', + 'track_course_access', ]; foreach ($taskNames as $i => $taskName) { diff --git a/plugin/migrationmoodle/src/Loader/TrackCourseAccessLoader.php b/plugin/migrationmoodle/src/Loader/TrackCourseAccessLoader.php new file mode 100644 index 0000000000..23c7b3eb88 --- /dev/null +++ b/plugin/migrationmoodle/src/Loader/TrackCourseAccessLoader.php @@ -0,0 +1,66 @@ +modify("-$sessionLifetime seconds"); + + $time = $time->format('Y-m-d H:i:s'); + $loginCourseDate = $loginCourseDate->format('Y-m-d H:i:s'); + + $tableCourseAccess = \Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS); + + $result = \Database::query( + "SELECT course_access_id + FROM $tableCourseAccess + WHERE user_id = $userId AND c_id = $cId AND session_id = $sessionId AND login_course_date > '$time' + ORDER BY login_course_date DESC + LIMIT 1" + ); + + if (\Database::num_rows($result) > 0) { + $row = \Database::fetch_assoc($result); + + \Database::query( + "UPDATE $tableCourseAccess + SET logout_course_date = '$loginCourseDate', counter = counter + 1 + WHERE course_access_id = {$row['course_access_id']}" + ); + + return $row['course_access_id']; + } + + return \Database::insert( + $tableCourseAccess, + [ + 'c_id' => $cId, + 'user_ip' => $ip, + 'user_id' => $userId, + 'login_course_date' => $loginCourseDate, + 'logout_course_date' => $loginCourseDate, + 'counter' => 1, + 'session_id' => $sessionId, + ] + ); + } +} diff --git a/plugin/migrationmoodle/src/Task/TrackCourseAccessTask.php b/plugin/migrationmoodle/src/Task/TrackCourseAccessTask.php new file mode 100644 index 0000000000..fc82edd89d --- /dev/null +++ b/plugin/migrationmoodle/src/Task/TrackCourseAccessTask.php @@ -0,0 +1,86 @@ +plugin->getUserFilterSetting(); + + if (!empty($userFilter)) { + $query = "SELECT lsl.id, lsl.userid, lsl.courseid, lsl.timecreated, lsl.ip + FROM mdl_logstore_standard_log lsl + INNER JOIN mdl_user u ON lsl.userid = u.id + WHERE (lsl.courseid IS NOT NULL AND lsl.courseid != 0) + AND u.username LIKE '$userFilter%' + ORDER BY lsl.timecreated"; + } + + return [ + 'class' => LoadedUsersFilterExtractor::class, + 'query' => $query, + ]; + } + + /** + * @inheritDoc + */ + public function getTransformConfiguration() + { + return [ + 'class' => BaseTransformer::class, + 'map' => [ + 'user_id' => [ + 'class' => LoadedUserLookup::class, + 'properties' => ['userid'], + ], + 'c_id' => [ + 'class' => LoadedCourseLookup::class, + 'properties' => ['courseid'], + ], + 'login_course_date' => [ + 'class' => DateTimeObject::class, + 'properties' => ['timecreated'], + ], + 'ip' => 'ip', + 'session_id' => [ + 'class' => LoadedUserSessionLookup::class, + 'properties' => ['userid'], + ], + ], + ]; + } + + /** + * @inheritDoc + */ + public function getLoadConfiguration() + { + return [ + 'class' => TrackCourseAccessLoader::class, + ]; + } +}