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.
		
		
		
		
		
			
		
			
				
					
					
						
							156 lines
						
					
					
						
							4.8 KiB
						
					
					
				
			
		
		
	
	
							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;
 | 
						|
 |