Hacked By AnonymousFox

Current Path : /home/missmand/public_html/learning/old/main/formation/
Upload File :
Current File : /home/missmand/public_html/learning/old/main/formation/utils.php

<?php
/* For licensing terms, see /license.txt */

/**
* @author Batiste Roger <batiste.roger@live.fr>
* @package chamilo.formation
*/

// Tabs
define ('TAB_THEME', 0);
define ('TAB_CAS',   1);
define ('TAB_VIDEO', 2);

// Categories
define ('CATEGORY_FORMATION', 'FO');

/* Returns a list of all courses for this tab
 * The list may be (at least) an array of elements with parameters (id, title, text)
 */
function get_courses () {
    $course_list = get_course_list_for_user();
    
    // In case of null
    if (empty($course_list)) return null;
    
    $formation_course_list = array();
                
    foreach ($course_list as $elem) {
        $info = api_get_course_info_by_id($elem['id']);
        if ($info['categoryCode'] == CATEGORY_FORMATION) {
            switch (substr($elem['course_code'], 0, 2)) {
                case 'CA' :
                    $formation_course_list[TAB_CAS]['array'][] = $info;
                    break;
                case 'TE' :
                    $formation_course_list[TAB_VIDEO]['array'][] = $info;
                    break;
                case 'MO' :
                    $formation_course_list[TAB_THEME]['array'][intval(substr($info['code'], 2, 3))] = $info; //(*)
                    break;
                default :
                    return array();
            }
        }
    }
    
    //Sort the courses by module id (MO1 before MO2)
    //(*) The array's keys are the number after MO so it is quite easy to do
    ksort($formation_course_list[TAB_THEME]['array']);
        
    return $formation_course_list;
}

function get_course_list_for_user() {
    $sql = "SELECT id, course_code FROM course_rel_user, course WHERE user_id='".  api_get_user_id() . "' AND course.code = course_rel_user.course_code";
    $result = Database::query($sql);
    $course = array();
    while ($row = Database::fetch_array($result, ASSOC)) {
        $course[] = $row; // this_course is pushed in the course stack (see array_push)
    }
    return $course;
}

/* Returns all stones to display in main frame 
 * Content depends on tab
 */
function get_content ($tab, $course_code) {    
    $course_info = api_get_course_info($course_code);
    $course_id = $course_info['real_id'];

    if (empty($course_id)) {
        return array();
    }
    
    $scores = get_scores_by_lp($tab);
    //echo "SCORES"; var_dump($scores); echo "/SCORES";

    $sql = "SELECT id, name as title, c_id, description, ref, lp_type FROM c_lp WHERE c_id = $course_id AND description!='video_intro'";
    $res = Database::query($sql);
    $parcours_list = array();
    while ($row = Database::fetch_array($res,'ASSOC')) {
        $c_id = $row['c_id'];
        $lp_id = $row['id'];
        $row['code'] = CourseManager::get_course_code_from_course_id($c_id);
        $row['description'] = get_description_lp($c_id, $lp_id);
        if (isset($scores[$c_id][$lp_id]['score'])) $row['score'] = round($scores[$c_id][$lp_id]['score']);
        $row['progress'] = round($scores[$c_id][$lp_id]['progress']);
        $row['is_turbomedia'] = in_array($row['description'], array('jpg', 'png'));
        $parcours_list[] = $row;
    }
    
    return $parcours_list;
}

function get_video_intro() {
    $sql = "SELECT id, name as title, c_id, description, ref, lp_type FROM c_lp WHERE c_id = (SELECT id FROM course WHERE code='TEM') AND description='video_intro'";
    $res = Database::query($sql);
    return Database::num_rows($res) == 0 ? null : Database::fetch_assoc($res);
}

// Computes the %progress and %score for a list of learning paths
function get_scores($tab = TAB_THEME, $user_id = null) {
    $course_list = get_courses();
    
    if (empty($user_id)) $user_id = api_get_user_id();
            
    // In case of null
    if (empty($course_list)) return null;
    
    $courses = $course_list[$tab]['array'];
    
    $scores = array();
    
    foreach ($courses as $cours) {
        $c_id = $cours['real_id'];
        
        // Let's list all items in this course
        $sql = "SELECT * FROM c_lp_item WHERE c_id = $c_id";
        $res = Database::query($sql);
        while ($item = Database::fetch_array($res, 'ASSOC')) {
            $lp_id = $item['lp_id'];
            $item_id = $item['id'];
            
            // Let's get the scores
            // Select c_id, lp_id, item_id, MAX(score), max_score
            $score_sql =  "SELECT VIEW.c_id AS c_id, VIEW.lp_id AS lp_id, IV.lp_item_id AS item_id, MAX(score) AS score, MAX(max_score) AS max_score, GROUP_CONCAT(status) AS status ";
            $score_sql .= "FROM c_lp_item_view IV ";
            
            // Join with VIEW to access the user_id
            $score_sql .= "JOIN c_lp_view VIEW ";
            $score_sql .= "ON IV.c_id = VIEW.c_id AND IV.lp_view_id = VIEW.id ";
            
            // Select only the right item
            $score_sql .= "WHERE IV.c_id = $c_id AND IV.lp_item_id = $item_id "; // Right item
            $score_sql .= "AND VIEW.user_id = $user_id "; // Right user
            
            // Group by learning path
            $score_sql .= "GROUP BY VIEW.c_id, VIEW.lp_id ";
                        
            $score_res = Database::query($score_sql);
            $row_one = Database::fetch_array($score_res, 'ASSOC');
            //var_dump($row_one);
            $scores[$c_id][$lp_id][$item_id] = $row_one;
        }
    }
    return $scores;
}

function get_scores_by_lp ($tab = TAB_THEME) {
    $scores = get_scores($tab);
    
    // In case of null
    if (empty($scores)) return null;
    
    $averages = array();
    foreach ($scores as $cid => $lp) {
        foreach ($lp as $lpid => $item) {
            // if ($cid == 13 && $lpid == 4) echo "cid $cid lpid $lpid item " . print_r($item, true);
            $lp_score = 0.0;
            $count_item = 0;
            $seen = 0;
            $count_score_item = 0;
            foreach ($item as $values) {
                // Get score values
                $item_score     =  $values['score'];
                $item_max_score =  $values['max_score'];
                
                // Increment lp_score
                if ($item_max_score != 0) {
                    $lp_score += floatval($item_score) / floatval($item_max_score);
                    $count_score_item++;
                }
                
                // If status is completed, then seen ++
                if (in_array('completed', explode(",", $values['status']))) $seen++;
                
                $count_item++;
            }
            if ($count_score_item != 0) {
                $averages[$cid][$lpid]['score'] = (100 * $lp_score) / $count_score_item;
            } elseif (lp_has_score($cid, $lpid)) {
                $averages[$cid][$lpid]['score'] = 0;
            }
            if ($count_item != 0) {
                $averages[$cid][$lpid]['progress'] = (100 * $seen) / $count_item;
            } else {
                $averages[$cid][$lpid]['progress'] = 0;
            }
        }
    }
    return $averages;
}

function get_description_lp ($c_id, $lp_id) {
    $sql = "SELECT description FROM c_lp WHERE c_id = $c_id AND id = $lp_id";
    $res = Database::query($sql);
    if (Database::num_rows($res) != 0) {
        $row = Database::fetch_array($res, 'ASSOC');
        return $row['description'];
    } else {
        return null;
    }
}

function lp_has_score ($course_id, $lp_id) {
    //$sql = "SELECT MAX(max_score) as max FROM c_lp_item WHERE c_id = $course_id AND lp_id = $lp_id";
    //$res = Database::fetch_assoc(Database::query($sql));
    //return $res['max'] > 0;
    $sql = "SELECT use_max_score FROM c_lp WHERE c_id = $course_id AND id = $lp_id";
    $res = Database::fetch_assoc(Database::query($sql));
    return $res['use_max_score'];
}

function video_create ($videoname, $videoid) {
    $c_id = turbo_get_course_id(); // TODO : probleme require cyclique, appeler depuis index plz.
    $sql = "INSERT INTO c_lp SET lp_type = '4', name = '$videoname', ref = '$videoid', c_id = '$c_id', use_max_score = '0'";
    Database::query($sql);
    
    $new_lp_id = Database::get_last_insert_id();
    $sql_item = "INSERT INTO c_lp_item SET c_id = '$c_id', lp_id = '$new_lp_id', item_type = 'video', max_score = '0'";
    Database::query($sql_item);
}

function video_view ($c_id, $lp_id) {
    
    $user_id = api_get_user_id();

    // TODO WARNING : Here I assume there is only 1 item in the video //
    
    // item nb is the title of the item. Its id is not necessarily the same.
    $item_id_sql = "SELECT id FROM c_lp_item WHERE c_id = '$c_id' AND lp_id = '$lp_id'";
    $item_id_res = Database::fetch_assoc(Database::query($item_id_sql));
    $item_id = $item_id_res['id'];
    
    // Create view if required
    $res = Database::query("SELECT * FROM c_lp_view WHERE c_id = '$c_id' AND lp_id = '$lp_id' AND user_id = '$user_id'");
    if (Database::num_rows($res) <= 0) {
        $sql = "INSERT INTO c_lp_view SET c_id = '$c_id', lp_id = '$lp_id', user_id = '$user_id', view_count = '1', last_item = '$item_id', progress = '100'";
        Database::query($sql);
        $id = Database::get_last_insert_id();
    } else {
        $sql = "UPDATE c_lp_view SET last_item = '$item_id', progress = '100' WHERE c_id = '$c_id' AND lp_id = '$lp_id' AND user_id = '$user_id'";
        Database::query($sql);
        $info = Database::fetch_assoc($res);
        $id = $info['id'];
    }
    
    // Set view for item $item_id
    $res_exists = Database::query("SELECT * FROM c_lp_item_view WHERE c_id = '$c_id' AND lp_item_id = '$item_id' AND lp_view_id = '$id'");
    
    if (Database::num_rows($res_exists) > 0) {
        $sql_item = "UPDATE c_lp_item_view SET view_count = '1', score = '0', status = 'completed' WHERE c_id = '$c_id' AND lp_item_id = '$item_id' AND lp_view_id = '$id'";
    } else {
        $sql_item = "INSERT INTO c_lp_item_view SET c_id = '$c_id', lp_item_id = '$item_id', lp_view_id = '$id', view_count = '1', score = '0', status = 'completed'";
    }
    Database::query($sql_item);
    
}

/**
 * Returns stats on every single lp, such as avg content viewed, avg score and avg rating
 */
function lp_get_admin_stats() {
    return array();
}

Hacked By AnonymousFox1.0, Coded By AnonymousFox