Hacked By AnonymousFox
<?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