Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/cron/check_lp_total_time.php

156 lines
4.8 KiB

<?php
/* For licensing terms, see /license.txt */
/**
* This script checks and propose a query fix for LP items with high time values
* Only if the total LP time is bigger than the total course time.
*/
exit;
require_once __DIR__.'/../../main/inc/global.inc.php';
api_protect_admin_script();
opcache_reset();
$testSessionId = 182;
$testCourseId = 97;
$max = 10;
$counter = 0;
// Check Sessions
$_configuration['access_url'] = 6;
$sessions = SessionManager::formatSessionsAdminForGrid();
foreach ($sessions as $session) {
$sessionId = $session['id'];
if (!empty($testSessionId)) {
if ($sessionId != $testSessionId) {
continue;
}
}
$courses = SessionManager::getCoursesInSession($sessionId);
foreach ($courses as $courseId) {
if (!empty($testCourseId)) {
if ($testCourseId != $courseId) {
continue;
}
}
$courseInfo = api_get_course_info_by_id($courseId);
$courseCode = $courseInfo['code'];
$users = CourseManager::get_user_list_from_course_code(
$courseCode,
$sessionId,
null,
null,
0
);
foreach ($users as $user) {
$result = compareLpTimeAndCourseTime($user, $courseInfo, $sessionId);
if ($result) {
$counter++;
}
if ($counter > $max) {
break 3;
}
}
}
}
// Courses
/*$courses = CourseManager::get_courses_list();
foreach($courses as $courseInfo) {
$courseCode = $courseInfo['code'];
$courseInfo['real_id'] = $courseInfo['id'];
$users = CourseManager::get_user_list_from_course_code($courseCode);
foreach ($users as $user) {
$userId = $user['id'];
compareLpTimeAndCourseTime($userId, $courseInfo);
}
}*/
/**
* @param array $user
* @param array $courseInfo
* @param int $sessionId
*
* @return bool
*/
function compareLpTimeAndCourseTime($user, $courseInfo, $sessionId = 0)
{
$userId = $user['user_id'];
$defaultValue = 600; // 10 min
$courseCode = $courseInfo['code'];
$courseId = $courseInfo['real_id'];
$totalLpTime = Tracking::get_time_spent_in_lp(
$userId,
$courseCode,
[],
$sessionId
);
if (empty($totalLpTime)) {
return false;
}
$totalCourseTime = Tracking::get_time_spent_on_the_course(
$userId,
$courseId,
$sessionId
);
$content = '';
if ($totalLpTime > $totalCourseTime) {
$totalCourseTimeFormatted = api_time_to_hms($totalCourseTime);
$totalLpTimeFormatted = api_time_to_hms($totalLpTime);
$diff = $totalLpTime - $totalCourseTime;
$content = PHP_EOL."User: ".$user['user_id']." - Total course: $totalCourseTimeFormatted / Total LP: $totalLpTimeFormatted".PHP_EOL;
$content .= PHP_EOL."Diff: ".api_time_to_hms($diff).PHP_EOL;
$url = api_get_path(WEB_CODE_PATH).'mySpace/myStudents.php?student='.$userId.'&course='.$courseCode.'&id_session='.$sessionId;
$content .= Display::url('Check', $url, ['target' => '_blank']);
$content .= PHP_EOL;
// Check possible records with high values
$sql = "SELECT iv.iid, lp_id, total_time
FROM c_lp_view v
INNER JOIN c_lp_item_view iv
ON (iv.c_id = v.c_id AND v.id = iv.lp_view_id)
WHERE
user_id = $userId AND
v.c_id = $courseId AND
session_id = $sessionId
ORDER BY total_time desc
LIMIT 1
";
echo $sql.PHP_EOL;
$result = Database::query($sql);
$results = Database::store_result($result, 'ASSOC');
if (!empty($results)) {
$content .= 'Top 1 high lp item times'.PHP_EOL.PHP_EOL;
foreach ($results as $item) {
$lpId = $item['lp_id'];
$link = api_get_path(WEB_CODE_PATH).'mySpace/lp_tracking.php?cidReq='.$courseCode.
'&course='.$courseCode.'&origin=&lp_id='.$lpId.'&student_id='.$userId.'&id_session='.$sessionId;
$content .= "total_time to be reduced = ".api_time_to_hms($item['total_time']).PHP_EOL;
$content .= Display::url('See report before update', $link, ['target' => '_blank']).PHP_EOL;
$content .= "SQL with possible fix:".PHP_EOL;
if ($item['total_time'] < $defaultValue) {
$content .= "Skip because total_time is too short. total_time: ".$item['total_time'].' value to rest'.$defaultValue.PHP_EOL;
continue;
}
$content .= "UPDATE c_lp_item_view SET total_time = total_time - '$defaultValue' WHERE iid = ".$item['iid'].";".PHP_EOL.PHP_EOL;
}
}
}
echo nl2br($content);
return true;
}
exit;