File manager - Edit - /home/missmand/public_html/learning/old/main/formation/utils.php
Back
<?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(); }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0 |
proxy
|
phpinfo
|
Settings