';
$html .= Display::div(Display::tag('span', $items).$reply_label, array('class' =>'group_discussions_replies'));
$html .= ' ';
diff --git a/main/inc/lib/model.lib.php b/main/inc/lib/model.lib.php
index 83a53589b3..1b4c393526 100644
--- a/main/inc/lib/model.lib.php
+++ b/main/inc/lib/model.lib.php
@@ -84,7 +84,7 @@ class Model {
* Get the count of elements
*/
public function get_count() {
- $row = Database::select('count(*) as count', $this->table, array(),'first');
+ $row = Database::select('count(*) as count', $this->table, array('where' => array('parent_id = ?' => '0')),'first');
return $row['count'];
}
diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php
index d04ce5a78c..2b91ae9496 100644
--- a/main/inc/lib/sessionmanager.lib.php
+++ b/main/inc/lib/sessionmanager.lib.php
@@ -19,8 +19,8 @@
*/
class SessionManager {
private function __construct() {
-
}
+
/**
* Fetches a session from the database
* @param int Session ID
@@ -135,18 +135,19 @@ class SessionManager {
VALUES('".$name."','$date_start','$date_end','$id_coach',".api_get_user_id().",".$nb_days_acess_before.", ".$nb_days_acess_after.", ".$id_session_category.", ".$id_visibility.")";
Database::query($sql_insert);
$session_id = Database::insert_id();
-
- //Adding to the correct URL
- require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php';
- $tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
- $access_url_id = api_get_current_access_url_id();
- UrlManager::add_session_to_url($session_id,$access_url_id);
-
- // add event to system log
- $user_id = api_get_user_id();
- event_system(LOG_SESSION_CREATE, LOG_SESSION_ID, $session_id, api_get_utc_datetime(), $user_id);
-
+ if (!empty($session_id)) {
+ //Adding to the correct URL
+ require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php';
+
+ $tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
+ $access_url_id = api_get_current_access_url_id();
+ UrlManager::add_session_to_url($session_id,$access_url_id);
+
+ // add event to system log
+ $user_id = api_get_user_id();
+ event_system(LOG_SESSION_CREATE, LOG_SESSION_ID, $session_id, api_get_utc_datetime(), $user_id);
+ }
return $session_id;
}
}
@@ -193,11 +194,12 @@ class SessionManager {
$num = $recorset['total_rows'];
return $num;
}
+
/**
* Gets the admin session list callback of the admin/session_list.php page
* @param array order and limit keys
*/
- function get_sessions_admin($options) {
+ public function get_sessions_admin($options) {
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
@@ -207,19 +209,31 @@ class SessionManager {
if (api_is_session_admin()==true) {
$where.=" AND s.session_admin_id = $user_id ";
}
-
- if (!empty($options['where'])) {
- $where .= ' AND '.$options['where'];
- }
-
+
$coach_name = " CONCAT (u.lastname , ' ', u.firstname) as coach_name ";
+
if (api_is_western_name_order()) {
$coach_name = " CONCAT (u.firstname, ' ', u.lastname) as coach_name ";
- }
- $query = "SELECT s.name, nbr_courses, s.date_start, s.date_end, $coach_name , sc.name as category_name, s.visibility, u.user_id, s.id ".
- " FROM $tbl_session s ".
- " LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id ".
- " INNER JOIN $tbl_user u ON s.id_coach = u.user_id ".
+ }
+
+ $today = api_get_utc_datetime();
+ $today = api_strtotime($today);
+
+ $today = date('Y-m-d', $today);
+
+ $select = "SELECT * FROM (SELECT
+ IF (
+ (s.date_start <= '$today' AND '$today' < s.date_end) OR
+ (s.date_start = '0000-00-00' AND s.date_end = '0000-00-00' ) OR
+ (s.date_start <= '$today' AND '0000-00-00' = s.date_end) OR
+ ('$today' < s.date_end AND '0000-00-00' = s.date_start)
+ , 1, 0)
+ as session_active,
+ s.name, nbr_courses, s.date_start, s.date_end, $coach_name, sc.name as category_name, s.visibility, u.user_id, s.id";
+
+ $query = "$select FROM $tbl_session s
+ LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
+ INNER JOIN $tbl_user u ON s.id_coach = u.user_id ".
$where;
if ($_configuration['multiple_access_urls']) {
@@ -227,31 +241,52 @@ class SessionManager {
$access_url_id = api_get_current_access_url_id();
if ($access_url_id != -1) {
$where.= " AND ar.access_url_id = $access_url_id ";
- $query = "SELECT s.id, s.name, s.nbr_courses, s.date_start, s.date_end, u.firstname, u.lastname , sc.name as category_name , s.visibility, u.user_id
+ $query = "$select
FROM $tbl_session s
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
INNER JOIN $tbl_user u ON s.id_coach = u.user_id
INNER JOIN $table_access_url_rel_session ar ON ar.session_id = s.id
$where";
}
- }
- $query .= "ORDER BY ".$options['order']." LIMIT ".$options['limit'];
-
- $result = Database::query($query);
+ }
+ $query .= ") AS session_table";
+
+
+ if (!empty($options['where'])) {
+ $query .= ' WHERE '.$options['where'];
+ }
+
+ $query .= " ORDER BY ".$options['order']." LIMIT ".$options['limit'];
+
+ // echo $query;
+ $result = Database::query($query);
$formatted_sessions = array();
if (Database::num_rows($result)) {
$sessions = Database::store_result($result);
foreach ($sessions as $session) {
$session['name'] = Display::url($session['name'], "resume_session.php?id_session=".$session['id']);
- $session['coach_name'] = Display::url($session['coach_name'], "user_information.php?user_id=".$session['user_id']);
+ $session['coach_name'] = Display::url($session['coach_name'], "user_information.php?user_id=".$session['user_id']);
+
+ if ($session['date_start'] == '0000-00-00' && $session['date_end'] == '0000-00-00') {
+ // $session['session_active'] = 1;
+ }
+
+ if ($session['session_active'] == 1) {
+ $session['session_active'] = Display::return_icon('accept.png', get_lang('Active'), array(), 22);
+ } else {
+ $session['session_active'] = Display::return_icon('error.png', get_lang('Inactive'), array(), 22);
+ }
+
if ($session['date_start'] == '0000-00-00') {
$session['date_start'] = '';
}
if ($session['date_end'] == '0000-00-00') {
$session['date_end'] = '';
- }
+ }
+
+
switch ($session['visibility']) {
case SESSION_VISIBLE_READ_ONLY: //1
$session['visibility'] = get_lang('ReadOnly');
@@ -1086,11 +1121,16 @@ class SessionManager {
public static function delete_session_category($id_checked, $delete_session = false,$from_ws = false){
$tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
- if(is_array($id_checked)) {
- $id_checked=Database::escape_string(implode(',',$id_checked));
+ if (is_array($id_checked)) {
+ $id_checked = Database::escape_string(implode(',',$id_checked));
} else {
- $id_checked=intval($id_checked);
+ $id_checked = intval($id_checked);
}
+
+ //Setting session_category_id to 0
+ $sql = "UPDATE $tbl_session SET session_category_id = 0 WHERE session_category_id IN (".$id_checked.")";
+ $result = Database::query($sql);
+
$sql = "SELECT id FROM $tbl_session WHERE session_category_id IN (".$id_checked.")";
$result = @Database::query($sql);
while ($rows = Database::fetch_array($result)) {
@@ -1109,6 +1149,7 @@ class SessionManager {
// Add event to system log
$user_id = api_get_user_id();
+
event_system(LOG_SESSION_CATEGORY_DELETE, LOG_SESSION_CATEGORY_ID, $id_checked, api_get_utc_datetime(), $user_id);
diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php
index 52026852fd..95159dac2a 100644
--- a/main/inc/lib/skill.lib.php
+++ b/main/inc/lib/skill.lib.php
@@ -331,6 +331,7 @@ class Skill extends Model {
$sql = "SELECT id, name, description, parent_id, relation_type
FROM {$this->table} s INNER JOIN {$this->table_skill_rel_skill} ss ON (s.id = ss.skill_id)
$id_condition";
+
$result = Database::query($sql);
$skills = array();
@@ -507,11 +508,10 @@ class Skill extends Model {
public function get_user_skills($user_id, $get_skill_data = false) {
$user_id = intval($user_id);
- //$sql = 'SELECT skill.*, user.* FROM '.$this->table_skill_rel_user.' user INNER JOIN '.$this->table_skill.' skill
-
$sql = 'SELECT DISTINCT s.id, s.name FROM '.$this->table_skill_rel_user.' u INNER JOIN '.$this->table.' s
ON u.skill_id = s.id
WHERE user_id = '.$user_id;
+
$result = Database::query($sql);
$skills = Database::store_result($result, 'ASSOC');
$clean_skill = array();
diff --git a/main/inc/lib/system_announcements.lib.php b/main/inc/lib/system_announcements.lib.php
index b0689a429a..f8f5952e93 100644
--- a/main/inc/lib/system_announcements.lib.php
+++ b/main/inc/lib/system_announcements.lib.php
@@ -531,14 +531,17 @@ class SystemAnnouncementManager {
$user_table = Database :: get_main_table(TABLE_MAIN_USER);
if ($teacher <> 0 AND $student == 0) {
- $sql = "SELECT firstname, lastname, email, status FROM $user_table u $url_condition WHERE email<>'' AND status = '1' AND active = 1";
+ $sql = "SELECT firstname, lastname, email, status FROM $user_table u $url_condition WHERE status = '1' ";
}
+
if ($teacher == 0 AND $student <> 0) {
- $sql = "SELECT firstname, lastname, email, status FROM $user_table u $url_condition WHERE email<>'' AND status = '5' AND active = 1 ";
+ $sql = "SELECT firstname, lastname, email, status FROM $user_table u $url_condition WHERE status = '5' ";
}
+
if ($teacher<> 0 AND $student <> 0) {
- $sql = "SELECT firstname, lastname, email FROM $user_table u $url_condition WHERE email<>'' AND active = 1 ";
+ $sql = "SELECT firstname, lastname, email FROM $user_table u $url_condition WHERE 1=1 ";
}
+
if (!empty($language)) { //special condition because language was already treated for SQL insert before
$sql .= " AND language = '".Database::escape_string($language)."' ";
}
@@ -547,10 +550,14 @@ class SystemAnnouncementManager {
if ($_configuration['multiple_access_urls']) {
$sql .= " AND access_url_id = '".$current_access_url_id."' ";
}
+
+ //Sent to active users
+ $sql .= " AND email <>'' AND active = 1 ";
if ((empty($teacher) or $teacher == '0') AND (empty($student) or $student == '0')) {
return true;
}
+
$result = Database::query($sql);
if ($result === false) {
return false;
diff --git a/main/inc/lib/template.lib.php b/main/inc/lib/template.lib.php
index 79d7d40911..2f71ab024e 100644
--- a/main/inc/lib/template.lib.php
+++ b/main/inc/lib/template.lib.php
@@ -26,11 +26,14 @@ class Template extends Smarty {
$this->cache_lifetime = Smarty::CACHING_OFF; // no caching
//$this->cache_lifetime = 120;
- //By default we show the header and footer
+ //header and footer are showed by default
$this->set_footer($show_footer);
$this->set_header($show_header);
- $this->set_system_parameters();
+ //Setting system variables
+ $this->set_system_parameters();
+
+ //Setting user variables
$this->set_user_parameters();
//Creating a Smarty modifier - Now we can call the get_lang from a template!!! Just use {"MyString"|get_lang}
@@ -38,16 +41,33 @@ class Template extends Smarty {
$this->registerPlugin("modifier","get_path", "api_get_path");
$this->registerPlugin("modifier","get_setting", "api_get_setting");
- //To load a smarty plugin
+ //To load a smarty plugin
//$this->loadPlugin('smarty_function_get_lang');
+
+ //To the the smarty installation
//$this->testInstall();
+
$this->set_header_parameters();
- $this->set_footer_parameters();
+ $this->set_footer_parameters();
+
$this->assign('style', $this->style);
}
+ /*
+ * Use smarty to parse the actions menu
+ * @todo finish it!
+ * */
+ function set_actions($actions) {
+ $action_string = '';
+ if (!empty($actions)) {
+ foreach($actions as $action) {
+ }
+ }
+ $this->assign('actions', $actions);
+ }
+
/**
- * Shortcut to display a 1 col layout
+ * Shortcut to display a 1 col layout (index.php)
* */
function display_one_col_template() {
$tpl = $this->get_template('layout/layout_1_col.tpl');
@@ -55,7 +75,7 @@ class Template extends Smarty {
}
/**
- * Shortcut to display a 2 col layout
+ * Shortcut to display a 2 col layout (userportal.php)
* */
function display_two_col_template() {
$tpl = $this->get_template('layout/layout_2_col.tpl');
@@ -77,8 +97,6 @@ class Template extends Smarty {
$tpl = $this->get_template('layout/no_layout.tpl');
$this->display($tpl);
}
-
-
/**
* Sets the footer visibility
@@ -90,11 +108,33 @@ class Template extends Smarty {
}
/**
* Sets the header visibility
- *
+ * @param bool true if we show the header
*/
function set_header($status) {
$this->show_header = $status;
- $this->assign('show_header', $status);
+ $this->assign('show_header', $status);
+
+ $show_admin_toolbar = api_get_setting('show_admin_toolbar');
+ $show_toolbar = 0;
+
+ switch($show_admin_toolbar) {
+ case 'do_not_show':
+ break;
+ case 'show_to_admin':
+ if (api_is_platform_admin()) {
+ $show_toolbar = 1;
+ }
+ break;
+ case 'show_to_admin_and_teachers':
+ if (api_is_platform_admin() || api_is_allowed_to_edit()) {
+ $show_toolbar = 1;
+ }
+ break;
+ case 'show_to_all':
+ $show_toolbar = 1;
+ break;
+ }
+ $this->assign('show_toolbar', $show_toolbar);
}
function get_template($name) {
@@ -107,8 +147,15 @@ class Template extends Smarty {
if (api_get_user_id() && !api_is_anonymous()) {
$user_info = api_get_user_info();
$user_info['logged'] = 1;
+
+ $user_info['is_admin'] = 0;
+ if (api_is_platform_admin()) {
+ $user_info['is_admin'] = 1;
+ }
+
$user_info['messages_count'] = MessageManager::get_new_messages();
}
+ //Setting the $_u array that could be use in any template
$this->assign('_u', $user_info);
}
diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php
index f843882e75..1e3e3e7aec 100644
--- a/main/inc/lib/tracking.lib.php
+++ b/main/inc/lib/tracking.lib.php
@@ -587,2400 +587,2400 @@ class Tracking {
}
- /**
- * This function gets:
- * 1. The score average from all SCORM Test items in all LP in a course-> All the answers / All the max scores.
- * 2. The score average from all Tests (quiz) in all LP in a course-> All the answers / All the max scores.
- * 3. And finally it will return the average between 1. and 2.
- * @todo improve performance, when loading 1500 users with 20 lps the script dies
- * This function does not take the results of a Test out of a LP
- *
- * @param mixed Array of user ids or an user id
- * @param string Course code
- * @param array List of LP ids
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @param bool Returns an array of the type [sum_score, num_score] if set to true
- * @param bool get only the latest attempts or ALL attempts
- * @return string Value (number %) Which represents a round integer explain in got in 3.
- */
- public static function get_avg_student_score($student_id, $course_code, $lp_ids = array(), $session_id = null, $return_array = false, $get_only_latest_attempt_results = false) {
+ /**
+ * This function gets:
+ * 1. The score average from all SCORM Test items in all LP in a course-> All the answers / All the max scores.
+ * 2. The score average from all Tests (quiz) in all LP in a course-> All the answers / All the max scores.
+ * 3. And finally it will return the average between 1. and 2.
+ * @todo improve performance, when loading 1500 users with 20 lps the script dies
+ * This function does not take the results of a Test out of a LP
+ *
+ * @param mixed Array of user ids or an user id
+ * @param string Course code
+ * @param array List of LP ids
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @param bool Returns an array of the type [sum_score, num_score] if set to true
+ * @param bool get only the latest attempts or ALL attempts
+ * @return string Value (number %) Which represents a round integer explain in got in 3.
+ */
+ public static function get_avg_student_score($student_id, $course_code, $lp_ids = array(), $session_id = null, $return_array = false, $get_only_latest_attempt_results = false) {
+ $debug = false;
+ if (empty($lp_ids)) {
$debug = false;
- if (empty($lp_ids)) {
- $debug = false;
- }
-
- if ($debug) echo 'Tracking::get_avg_student_score ';
- // get global tables names
- $course_table = Database :: get_main_table(TABLE_MAIN_COURSE);
- $course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
- $table_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
- $tbl_stats_attempts = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
+ }
- $course = CourseManager :: get_course_information($course_code);
+ if ($debug) echo 'Tracking::get_avg_student_score ';
+ // get global tables names
+ $course_table = Database :: get_main_table(TABLE_MAIN_COURSE);
+ $course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
+ $table_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
+ $tbl_stats_attempts = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
- if (!empty($course)) {
+ $course = CourseManager :: get_course_information($course_code);
- // get course tables names
- $tbl_quiz_questions = Database :: get_course_table(TABLE_QUIZ_QUESTION);
- $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
- $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM);
- $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW);
- $lp_item_view_table = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
-
- $course_id = $course['real_id'];
+ if (!empty($course)) {
- // Compose a filter based on optional learning paths list given
+ // get course tables names
+ $tbl_quiz_questions = Database :: get_course_table(TABLE_QUIZ_QUESTION);
+ $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
+ $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM);
+ $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW);
+ $lp_item_view_table = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
+
+ $course_id = $course['real_id'];
- $condition_lp = "";
- if (count($lp_ids) > 0) {
- $condition_lp =" AND id IN(".implode(',',$lp_ids).") ";
- }
+ // Compose a filter based on optional learning paths list given
- // Compose a filter based on optional session id
- $condition_session = "";
+ $condition_lp = "";
+ if (count($lp_ids) > 0) {
+ $condition_lp =" AND id IN(".implode(',',$lp_ids).") ";
+ }
- $session_id = intval($session_id);
- if (count($lp_ids) > 0) {
- $condition_session = " AND session_id = $session_id ";
- } else {
- $condition_session = " WHERE session_id = $session_id ";
- }
+ // Compose a filter based on optional session id
+ $condition_session = "";
- // Check the real number of LPs corresponding to the filter in the
- // database (and if no list was given, get them all)
+ $session_id = intval($session_id);
+ if (count($lp_ids) > 0) {
+ $condition_session = " AND session_id = $session_id ";
+ } else {
+ $condition_session = " WHERE session_id = $session_id ";
+ }
- if (empty($session_id)) {
- $sql = "SELECT DISTINCT(id), use_max_score FROM $lp_table WHERE c_id = $course_id AND session_id = 0 $condition_lp ";
- } else {
- $sql = "SELECT DISTINCT(id), use_max_score FROM $lp_table WHERE c_id = $course_id $condition_lp ";
- }
+ // Check the real number of LPs corresponding to the filter in the
+ // database (and if no list was given, get them all)
- $res_row_lp = Database::query($sql);
- $count_row_lp = Database::num_rows($res_row_lp);
+ if (empty($session_id)) {
+ $sql = "SELECT DISTINCT(id), use_max_score FROM $lp_table WHERE c_id = $course_id AND session_id = 0 $condition_lp ";
+ } else {
+ $sql = "SELECT DISTINCT(id), use_max_score FROM $lp_table WHERE c_id = $course_id $condition_lp ";
+ }
- $lp_list = $use_max_score = array();
- while ($row_lp = Database::fetch_array($res_row_lp)) {
- $lp_list[] = $row_lp['id'];
- $use_max_score[$row_lp['id']] = $row_lp['use_max_score'];
- }
+ $res_row_lp = Database::query($sql);
+ $count_row_lp = Database::num_rows($res_row_lp);
- if ($debug) {
- echo 'Use max score or not list '; var_dump($use_max_score);
- }
+ $lp_list = $use_max_score = array();
+ while ($row_lp = Database::fetch_array($res_row_lp)) {
+ $lp_list[] = $row_lp['id'];
+ $use_max_score[$row_lp['id']] = $row_lp['use_max_score'];
+ }
- // Init local variables that will be used through the calculation
- $progress = 0;
+ if ($debug) {
+ echo 'Use max score or not list '; var_dump($use_max_score);
+ }
- // prepare filter on users
- $condition_user1 = "";
+ // Init local variables that will be used through the calculation
+ $progress = 0;
- if (is_array($student_id)) {
- array_walk($student_id, 'intval');
- $condition_user1 =" AND user_id IN (".implode(',', $student_id).") ";
- } else {
- $condition_user1 =" AND user_id = $student_id ";
- }
+ // prepare filter on users
+ $condition_user1 = "";
- if ($count_row_lp > 0 && !empty($student_id)) {
+ if (is_array($student_id)) {
+ array_walk($student_id, 'intval');
+ $condition_user1 =" AND user_id IN (".implode(',', $student_id).") ";
+ } else {
+ $condition_user1 =" AND user_id = $student_id ";
+ }
- // Getting latest LP result for a student
- //@todo problem when a course have more than 1500 users
- $sql = "SELECT MAX(view_count) as vc, id, progress, lp_id, user_id FROM $lp_view_table
- WHERE c_id = $course_id AND
- lp_id IN (".implode(',',$lp_list).")
- $condition_user1 AND
- session_id = $session_id
- GROUP BY lp_id, user_id";
- if ($debug) echo $sql;
- $rs_last_lp_view_id = Database::query($sql);
-
- $global_result = 0;
-
- if (Database::num_rows($rs_last_lp_view_id) > 0) {
- // Cycle through each line of the results (grouped by lp_id, user_id)
- $exe_list = array();
- while ($row_lp_view = Database::fetch_array($rs_last_lp_view_id)) {
- $count_items = 0;
- $lp_partial_total = 0;
-
- $list = array();
- $lp_view_id = $row_lp_view['id'];
- $progress = $row_lp_view['progress'];
- $lp_id = $row_lp_view['lp_id'];
- $user_id = $row_lp_view['user_id'];
- if ($debug) echo 'LP id '.$lp_id.' ';
-
- if ($get_only_latest_attempt_results) {
- //if (1) {
- //Getting lp_items done by the user
- $sql = "SELECT DISTINCT lp_item_id FROM $lp_item_view_table
- WHERE c_id = $course_id AND lp_view_id = $lp_view_id ORDER BY lp_item_id";
- $res_lp_item = Database::query($sql);
-
- while ($row_lp_item = Database::fetch_array($res_lp_item,'ASSOC')) {
- $my_lp_item_id = $row_lp_item['lp_item_id'];
-
- //Getting the most recent attempt
- $sql = "SELECT lp_iv.id as lp_item_view_id, lp_iv.score as score,lp_i.max_score, lp_iv.max_score as max_score_item_view, lp_i.path, lp_i.item_type, lp_i.id as iid
- FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."')
- WHERE lp_iv.c_id = $course_id AND
- lp_i.c_id = $course_id AND
- lp_item_id = $my_lp_item_id AND
- lp_view_id = $lp_view_id
- ORDER BY view_count DESC
- LIMIT 1";
- $res_lp_item_result = Database::query($sql);
- while ($row_max_score = Database::fetch_array($res_lp_item_result,'ASSOC')) {
- $list[]= $row_max_score;
- }
- }
- } else {
- // For the currently analysed view, get the score and
- // max_score of each item if it is a sco or a TOOL_QUIZ
- $sql_max_score = "SELECT lp_iv.id as lp_item_view_id, lp_iv.score as score,lp_i.max_score, lp_iv.max_score as max_score_item_view, lp_i.path, lp_i.item_type, lp_i.id as iid
- FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."')
- WHERE lp_iv.c_id = $course_id AND
- lp_i.c_id = $course_id AND
- lp_view_id = $lp_view_id ";
- if ($debug) echo $sql_max_score.' ';
-
- $res_max_score = Database::query($sql_max_score);
-
- while ($row_max_score = Database::fetch_array($res_max_score,'ASSOC')) {
+ if ($count_row_lp > 0 && !empty($student_id)) {
+
+ // Getting latest LP result for a student
+ //@todo problem when a course have more than 1500 users
+ $sql = "SELECT MAX(view_count) as vc, id, progress, lp_id, user_id FROM $lp_view_table
+ WHERE c_id = $course_id AND
+ lp_id IN (".implode(',',$lp_list).")
+ $condition_user1 AND
+ session_id = $session_id
+ GROUP BY lp_id, user_id";
+ if ($debug) echo $sql;
+ $rs_last_lp_view_id = Database::query($sql);
+
+ $global_result = 0;
+
+ if (Database::num_rows($rs_last_lp_view_id) > 0) {
+ // Cycle through each line of the results (grouped by lp_id, user_id)
+ $exe_list = array();
+ while ($row_lp_view = Database::fetch_array($rs_last_lp_view_id)) {
+ $count_items = 0;
+ $lp_partial_total = 0;
+
+ $list = array();
+ $lp_view_id = $row_lp_view['id'];
+ $progress = $row_lp_view['progress'];
+ $lp_id = $row_lp_view['lp_id'];
+ $user_id = $row_lp_view['user_id'];
+ if ($debug) echo 'LP id '.$lp_id.' ';
+
+ if ($get_only_latest_attempt_results) {
+ //if (1) {
+ //Getting lp_items done by the user
+ $sql = "SELECT DISTINCT lp_item_id FROM $lp_item_view_table
+ WHERE c_id = $course_id AND lp_view_id = $lp_view_id ORDER BY lp_item_id";
+ $res_lp_item = Database::query($sql);
+
+ while ($row_lp_item = Database::fetch_array($res_lp_item,'ASSOC')) {
+ $my_lp_item_id = $row_lp_item['lp_item_id'];
+
+ //Getting the most recent attempt
+ $sql = "SELECT lp_iv.id as lp_item_view_id, lp_iv.score as score,lp_i.max_score, lp_iv.max_score as max_score_item_view, lp_i.path, lp_i.item_type, lp_i.id as iid
+ FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."')
+ WHERE lp_iv.c_id = $course_id AND
+ lp_i.c_id = $course_id AND
+ lp_item_id = $my_lp_item_id AND
+ lp_view_id = $lp_view_id
+ ORDER BY view_count DESC
+ LIMIT 1";
+ $res_lp_item_result = Database::query($sql);
+ while ($row_max_score = Database::fetch_array($res_lp_item_result,'ASSOC')) {
$list[]= $row_max_score;
}
}
- $count_total_loop = 0;
-
- // Go through each scorable element of this view
+ } else {
+ // For the currently analysed view, get the score and
+ // max_score of each item if it is a sco or a TOOL_QUIZ
+ $sql_max_score = "SELECT lp_iv.id as lp_item_view_id, lp_iv.score as score,lp_i.max_score, lp_iv.max_score as max_score_item_view, lp_i.path, lp_i.item_type, lp_i.id as iid
+ FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."')
+ WHERE lp_iv.c_id = $course_id AND
+ lp_i.c_id = $course_id AND
+ lp_view_id = $lp_view_id ";
+ if ($debug) echo $sql_max_score.' ';
+
+ $res_max_score = Database::query($sql_max_score);
- $score_of_scorm_calculate = 0;
-
- foreach ($list as $row_max_score) {
- $max_score = $row_max_score['max_score']; //Came from the original lp_item
- $max_score_item_view = $row_max_score['max_score_item_view']; //Came from the lp_item_view
- $score = $row_max_score['score'];
-
- if ($debug) echo 'Item Type: ' .$row_max_score['item_type'].' ';
-
- if ($row_max_score['item_type'] == 'sco') {
- //var_dump($row_max_score);
- // Check if it is sco (easier to get max_score)
- //when there's no max score, we assume 100 as the max score, as the SCORM 1.2 says that the value should always be between 0 and 100.
- if ($max_score == 0 || is_null($max_score) || $max_score == '') {
- //Chamilo style
- if ($use_max_score[$lp_id]) {
- $max_score = 100;
- } else {
- //Overwrites max score = 100 to use the one that came in the lp_item_view see BT#1613
- $max_score = $max_score_item_view;
- }
+ while ($row_max_score = Database::fetch_array($res_max_score,'ASSOC')) {
+ $list[]= $row_max_score;
+ }
+ }
+ $count_total_loop = 0;
+
+ // Go through each scorable element of this view
+
+ $score_of_scorm_calculate = 0;
+
+ foreach ($list as $row_max_score) {
+ $max_score = $row_max_score['max_score']; //Came from the original lp_item
+ $max_score_item_view = $row_max_score['max_score_item_view']; //Came from the lp_item_view
+ $score = $row_max_score['score'];
+
+ if ($debug) echo 'Item Type: ' .$row_max_score['item_type'].' ';
+
+ if ($row_max_score['item_type'] == 'sco') {
+ //var_dump($row_max_score);
+ // Check if it is sco (easier to get max_score)
+ //when there's no max score, we assume 100 as the max score, as the SCORM 1.2 says that the value should always be between 0 and 100.
+ if ($max_score == 0 || is_null($max_score) || $max_score == '') {
+ //Chamilo style
+ if ($use_max_score[$lp_id]) {
+ $max_score = 100;
+ } else {
+ //Overwrites max score = 100 to use the one that came in the lp_item_view see BT#1613
+ $max_score = $max_score_item_view;
}
- //Avoid division by zero errors
- if (!empty($max_score)) {
- $lp_partial_total += $score/$max_score;
+ }
+ //Avoid division by zero errors
+ if (!empty($max_score)) {
+ $lp_partial_total += $score/$max_score;
+ }
+ if ($debug) echo '$lp_partial_total, $score, $max_score '.$lp_partial_total.' '.$score.' '.$max_score.' ';
+ } else {
+ // Case of a TOOL_QUIZ element
+ $item_id = $row_max_score['iid'];
+ $item_path = $row_max_score['path'];
+ $lp_item_view_id = $row_max_score['lp_item_view_id'];
+
+ // Get last attempt to this exercise through
+ // the current lp for the current user
+ $sql_last_attempt = "SELECT exe_id FROM $tbl_stats_exercices WHERE
+ exe_exo_id = '$item_path' AND
+ exe_user_id = $user_id AND
+ orig_lp_item_id = $item_id AND
+ orig_lp_item_view_id = $lp_item_view_id AND
+ exe_cours_id = '$course_code' AND
+ session_id = $session_id
+ ORDER BY exe_date DESC LIMIT 1";
+ if ($debug) echo $sql_last_attempt .' ';
+ $result_last_attempt = Database::query($sql_last_attempt);
+ $num = Database :: num_rows($result_last_attempt);
+ if ($num > 0 ) {
+ $id_last_attempt = Database :: result($result_last_attempt, 0, 0);
+ if ($debug) echo $id_last_attempt.' ';
+ /* if (in_array($id_last_attempt, $exe_list)) {
+ continue;
+ }*/
+ //$exe_list[] = $id_last_attempt;
+ //echo $id_last_attempt .' ';
+
+ // Within the last attempt number tracking, get the sum of
+ // the max_scores of all questions that it was
+ // made of (we need to make this call dynamic
+ // because of random questions selection)
+ $sql = "SELECT SUM(t.ponderation) as maxscore FROM
+ ( SELECT distinct question_id, marks, ponderation FROM $tbl_stats_attempts AS at INNER JOIN $tbl_quiz_questions AS q ON (q.id = at.question_id)
+ WHERE exe_id ='$id_last_attempt' ) AS t";
+ $res_max_score_bis = Database::query($sql);
+ $row_max_score_bis = Database :: fetch_array($res_max_score_bis);
+ if (!empty($row_max_score_bis['maxscore'])) {
+ $max_score = $row_max_score_bis['maxscore'];
}
- if ($debug) echo '$lp_partial_total, $score, $max_score '.$lp_partial_total.' '.$score.' '.$max_score.' ';
- } else {
- // Case of a TOOL_QUIZ element
- $item_id = $row_max_score['iid'];
- $item_path = $row_max_score['path'];
- $lp_item_view_id = $row_max_score['lp_item_view_id'];
-
- // Get last attempt to this exercise through
- // the current lp for the current user
- $sql_last_attempt = "SELECT exe_id FROM $tbl_stats_exercices WHERE
- exe_exo_id = '$item_path' AND
- exe_user_id = $user_id AND
- orig_lp_item_id = $item_id AND
- orig_lp_item_view_id = $lp_item_view_id AND
- exe_cours_id = '$course_code' AND
- session_id = $session_id
- ORDER BY exe_date DESC LIMIT 1";
- if ($debug) echo $sql_last_attempt .' ';
- $result_last_attempt = Database::query($sql_last_attempt);
- $num = Database :: num_rows($result_last_attempt);
- if ($num > 0 ) {
- $id_last_attempt = Database :: result($result_last_attempt, 0, 0);
- if ($debug) echo $id_last_attempt.' ';
- /* if (in_array($id_last_attempt, $exe_list)) {
- continue;
- }*/
- //$exe_list[] = $id_last_attempt;
- //echo $id_last_attempt .' ';
-
- // Within the last attempt number tracking, get the sum of
- // the max_scores of all questions that it was
- // made of (we need to make this call dynamic
- // because of random questions selection)
- $sql = "SELECT SUM(t.ponderation) as maxscore FROM
- ( SELECT distinct question_id, marks, ponderation FROM $tbl_stats_attempts AS at INNER JOIN $tbl_quiz_questions AS q ON (q.id = at.question_id)
- WHERE exe_id ='$id_last_attempt' ) AS t";
- $res_max_score_bis = Database::query($sql);
- $row_max_score_bis = Database :: fetch_array($res_max_score_bis);
- if (!empty($row_max_score_bis['maxscore'])) {
- $max_score = $row_max_score_bis['maxscore'];
- }
- if (!empty($max_score)) {
- $lp_partial_total += $score/$max_score;
- }
- if ($debug) echo '$lp_partial_total, $score, $max_score '.$lp_partial_total.' '.$score.' '.$max_score.' ';
+ if (!empty($max_score)) {
+ $lp_partial_total += $score/$max_score;
}
+ if ($debug) echo '$lp_partial_total, $score, $max_score '.$lp_partial_total.' '.$score.' '.$max_score.' ';
}
+ }
- if (in_array($row_max_score['item_type'], array('quiz','sco'))) {
- // Normal way
- if ($use_max_score[$lp_id]) {
+ if (in_array($row_max_score['item_type'], array('quiz','sco'))) {
+ // Normal way
+ if ($use_max_score[$lp_id]) {
+ $count_items++;
+ } else {
+ if ($max_score != '') {
$count_items++;
- } else {
- if ($max_score != '') {
- $count_items++;
- }
}
- if ($debug) echo '$count_items: '.$count_items;
}
- } //end for
+ if ($debug) echo '$count_items: '.$count_items;
+ }
+ } //end for
- $score_of_scorm_calculate += $count_items?(($lp_partial_total/$count_items)*100):0;
+ $score_of_scorm_calculate += $count_items?(($lp_partial_total/$count_items)*100):0;
- if ($debug) echo '$count_items '.$count_items.' ';
- if ($debug) echo '$score_of_scorm_calculate '.$score_of_scorm_calculate.' ';
-
- // var_dump($score_of_scorm_calculate);
- $global_result += $score_of_scorm_calculate;
- if ($debug) echo '$global_result '.$global_result.' ';
- } // end while
- }
+ if ($debug) echo '$count_items '.$count_items.' ';
+ if ($debug) echo '$score_of_scorm_calculate '.$score_of_scorm_calculate.' ';
+
+ // var_dump($score_of_scorm_calculate);
+ $global_result += $score_of_scorm_calculate;
+ if ($debug) echo '$global_result '.$global_result.' ';
+ } // end while
+ }
- $lp_with_quiz = 0;
- if ($debug) var_dump($lp_list);
- foreach($lp_list as $lp_id) {
- //Check if LP have a score we asume that all SCO have an score
- $sql = "SELECT count(id) as count FROM $lp_item_table WHERE c_id = $course_id AND (item_type = 'quiz' OR item_type = 'sco') AND lp_id = ".$lp_id;
- if ($debug) echo $sql;
- $result_have_quiz = Database::query($sql);
-
- if (Database::num_rows($result_have_quiz) > 0 ) {
- $row = Database::fetch_array($result_have_quiz,'ASSOC');
- if (is_numeric($row['count']) && $row['count'] != 0) {
- $lp_with_quiz ++;
- }
+ $lp_with_quiz = 0;
+ if ($debug) var_dump($lp_list);
+ foreach($lp_list as $lp_id) {
+ //Check if LP have a score we asume that all SCO have an score
+ $sql = "SELECT count(id) as count FROM $lp_item_table WHERE c_id = $course_id AND (item_type = 'quiz' OR item_type = 'sco') AND lp_id = ".$lp_id;
+ if ($debug) echo $sql;
+ $result_have_quiz = Database::query($sql);
+
+ if (Database::num_rows($result_have_quiz) > 0 ) {
+ $row = Database::fetch_array($result_have_quiz,'ASSOC');
+ if (is_numeric($row['count']) && $row['count'] != 0) {
+ $lp_with_quiz ++;
}
}
+ }
- if ($debug) echo '$lp_with_quiz '.$lp_with_quiz.' ';
- if ($debug) echo 'Final return ';
+ if ($debug) echo '$lp_with_quiz '.$lp_with_quiz.' ';
+ if ($debug) echo 'Final return ';
- if ($lp_with_quiz != 0 ) {
- if (!$return_array) {
- $score_of_scorm_calculate = round(($global_result/$lp_with_quiz),2);
- if ($debug) var_dump($score_of_scorm_calculate);
- if (empty($lp_ids)) {
- //$score_of_scorm_calculate = round($score_of_scorm_calculate/count($lp_list),2);
- if ($debug) echo 'All lps fix: '.$score_of_scorm_calculate.' ';
- }
- return $score_of_scorm_calculate;
- } else {
- if ($debug) var_dump($global_result, $lp_with_quiz);
- return array($global_result, $lp_with_quiz);
+ if ($lp_with_quiz != 0 ) {
+ if (!$return_array) {
+ $score_of_scorm_calculate = round(($global_result/$lp_with_quiz),2);
+ if ($debug) var_dump($score_of_scorm_calculate);
+ if (empty($lp_ids)) {
+ //$score_of_scorm_calculate = round($score_of_scorm_calculate/count($lp_list),2);
+ if ($debug) echo 'All lps fix: '.$score_of_scorm_calculate.' ';
}
+ return $score_of_scorm_calculate;
} else {
- return '-';
+ if ($debug) var_dump($global_result, $lp_with_quiz);
+ return array($global_result, $lp_with_quiz);
}
+ } else {
+ return '-';
}
}
- return null;
}
+ return null;
+ }
- /**
- * This function gets time spent in learning path for a student inside a course
- * @param int|array Student id(s)
- * @param string Course code
- * @param array Limit average to listed lp ids
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @return int Total time
- */
- public static function get_time_spent_in_lp($student_id, $course_code, $lp_ids = array(), $session_id = null) {
-
- $course = CourseManager :: get_course_information($course_code);
- $student_id = intval($student_id);
- $total_time = 0;
+ /**
+ * This function gets time spent in learning path for a student inside a course
+ * @param int|array Student id(s)
+ * @param string Course code
+ * @param array Limit average to listed lp ids
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @return int Total time
+ */
+ public static function get_time_spent_in_lp($student_id, $course_code, $lp_ids = array(), $session_id = null) {
- if (!empty($course)) {
+ $course = CourseManager :: get_course_information($course_code);
+ $student_id = intval($student_id);
+ $total_time = 0;
- $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
- $t_lpv = Database :: get_course_table(TABLE_LP_VIEW);
- $t_lpiv = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
-
- $course_id = $course['real_id'];
+ if (!empty($course)) {
- // Compose a filter based on optional learning paths list given
- $condition_lp = "";
- if(count($lp_ids) > 0) {
- $condition_lp =" AND id IN(".implode(',',$lp_ids).") ";
- }
+ $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
+ $t_lpv = Database :: get_course_table(TABLE_LP_VIEW);
+ $t_lpiv = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
+
+ $course_id = $course['real_id'];
- // Compose a filter based on optional session id
- $condition_session = "";
- $session_id = intval($session_id);
+ // Compose a filter based on optional learning paths list given
+ $condition_lp = "";
+ if(count($lp_ids) > 0) {
+ $condition_lp =" AND id IN(".implode(',',$lp_ids).") ";
+ }
-
- if (isset($session_id)) {
- $condition_session = " AND session_id = $session_id ";
- }
+ // Compose a filter based on optional session id
+ $condition_session = "";
+ $session_id = intval($session_id);
- // Check the real number of LPs corresponding to the filter in the
- // database (and if no list was given, get them all)
- //$res_row_lp = Database::query("SELECT DISTINCT(id) FROM $lp_table $condition_lp $condition_session");
- $res_row_lp = Database::query("SELECT DISTINCT(id) FROM $lp_table WHERE c_id = $course_id $condition_lp");
- $count_row_lp = Database::num_rows($res_row_lp);
-
- // calculates time
- if ($count_row_lp > 0) {
- while ($row_lp = Database::fetch_array($res_row_lp)) {
- $lp_id = intval($row_lp['id']);
- $sql = 'SELECT SUM(total_time)
- FROM '.$t_lpiv.' AS item_view
- INNER JOIN '.$t_lpv.' AS view
- ON item_view.lp_view_id = view.id
- WHERE
- item_view.c_id = '.$course_id.' AND
- view.c_id = '.$course_id.' AND
- view.lp_id = '.$lp_id.'
- AND view.user_id = '.$student_id.' AND
- session_id = '.$session_id;
-
- $rs = Database::query($sql);
- if (Database :: num_rows($rs) > 0) {
- $total_time += Database :: result($rs, 0, 0);
- }
- }
- }
+
+ if (isset($session_id)) {
+ $condition_session = " AND session_id = $session_id ";
}
- return $total_time;
- }
- /**
- * This function gets last connection time to one learning path
- * @param int|array Student id(s)
- * @param string Course code
- * @param int Learning path id
- * @return int Total time
- */
- public static function get_last_connection_time_in_lp($student_id, $course_code, $lp_id, $session_id = 0) {
- $course = CourseManager :: get_course_information($course_code);
- $student_id = intval($student_id);
- $lp_id = intval($lp_id);
- $last_time = 0;
- $session_id = intval($session_id);
+ // Check the real number of LPs corresponding to the filter in the
+ // database (and if no list was given, get them all)
+ //$res_row_lp = Database::query("SELECT DISTINCT(id) FROM $lp_table $condition_lp $condition_session");
+ $res_row_lp = Database::query("SELECT DISTINCT(id) FROM $lp_table WHERE c_id = $course_id $condition_lp");
+ $count_row_lp = Database::num_rows($res_row_lp);
- if (!empty($course)) {
-
- $course_id = $course['real_id'];
-
- $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
- $t_lpv = Database :: get_course_table(TABLE_LP_VIEW);
- $t_lpiv = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
-
- // Check the real number of LPs corresponding to the filter in the
- // database (and if no list was given, get them all)
- $res_row_lp = Database::query("SELECT id FROM $lp_table WHERE c_id = $course_id AND id = $lp_id ");
- $count_row_lp = Database::num_rows($res_row_lp);
-
- // calculates last connection time
- if ($count_row_lp > 0) {
- $sql = 'SELECT MAX(start_time)
- FROM ' . $t_lpiv . ' AS item_view
- INNER JOIN ' . $t_lpv . ' AS view
+ // calculates time
+ if ($count_row_lp > 0) {
+ while ($row_lp = Database::fetch_array($res_row_lp)) {
+ $lp_id = intval($row_lp['id']);
+ $sql = 'SELECT SUM(total_time)
+ FROM '.$t_lpiv.' AS item_view
+ INNER JOIN '.$t_lpv.' AS view
ON item_view.lp_view_id = view.id
WHERE
item_view.c_id = '.$course_id.' AND
- view.c_id = '.$course_id.' AND
+ view.c_id = '.$course_id.' AND
view.lp_id = '.$lp_id.'
- AND view.user_id = '.$student_id.'
- AND view.session_id = '.$session_id;
+ AND view.user_id = '.$student_id.' AND
+ session_id = '.$session_id;
+
$rs = Database::query($sql);
if (Database :: num_rows($rs) > 0) {
- $last_time = Database :: result($rs, 0, 0);
+ $total_time += Database :: result($rs, 0, 0);
}
}
}
- return $last_time;
}
+ return $total_time;
+ }
+
+ /**
+ * This function gets last connection time to one learning path
+ * @param int|array Student id(s)
+ * @param string Course code
+ * @param int Learning path id
+ * @return int Total time
+ */
+ public static function get_last_connection_time_in_lp($student_id, $course_code, $lp_id, $session_id = 0) {
+ $course = CourseManager :: get_course_information($course_code);
+ $student_id = intval($student_id);
+ $lp_id = intval($lp_id);
+ $last_time = 0;
+ $session_id = intval($session_id);
- /**
- * gets the list of students followed by coach
- * @param int Coach id
- * @return array List of students
- */
- public static function get_student_followed_by_coach($coach_id) {
- $coach_id = intval($coach_id);
-
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
- $tbl_session_user = Database :: get_main_table(TABLE_MAIN_SESSION_USER);
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
-
- $a_students = array ();
-
- // At first, courses where $coach_id is coach of the course //
- $sql = 'SELECT id_session, course_code FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id.' AND status=2';
-
- global $_configuration;
- if ($_configuration['multiple_access_urls']) {
- $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
- $access_url_id = api_get_current_access_url_id();
- if ($access_url_id != -1) {
- $sql = 'SELECT scu.id_session, scu.course_code
- FROM ' . $tbl_session_course_user . ' scu INNER JOIN '.$tbl_session_rel_access_url.' sru
- ON (scu.id_session=sru.session_id)
- WHERE scu.id_user=' . $coach_id.' AND scu.status=2 AND sru.access_url_id = '.$access_url_id;
+ if (!empty($course)) {
+
+ $course_id = $course['real_id'];
+
+ $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
+ $t_lpv = Database :: get_course_table(TABLE_LP_VIEW);
+ $t_lpiv = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
+
+ // Check the real number of LPs corresponding to the filter in the
+ // database (and if no list was given, get them all)
+ $res_row_lp = Database::query("SELECT id FROM $lp_table WHERE c_id = $course_id AND id = $lp_id ");
+ $count_row_lp = Database::num_rows($res_row_lp);
+
+ // calculates last connection time
+ if ($count_row_lp > 0) {
+ $sql = 'SELECT MAX(start_time)
+ FROM ' . $t_lpiv . ' AS item_view
+ INNER JOIN ' . $t_lpv . ' AS view
+ ON item_view.lp_view_id = view.id
+ WHERE
+ item_view.c_id = '.$course_id.' AND
+ view.c_id = '.$course_id.' AND
+ view.lp_id = '.$lp_id.'
+ AND view.user_id = '.$student_id.'
+ AND view.session_id = '.$session_id;
+ $rs = Database::query($sql);
+ if (Database :: num_rows($rs) > 0) {
+ $last_time = Database :: result($rs, 0, 0);
}
}
+ }
+ return $last_time;
+ }
- $result = Database::query($sql);
-
- while ($a_courses = Database::fetch_array($result)) {
+ /**
+ * gets the list of students followed by coach
+ * @param int Coach id
+ * @return array List of students
+ */
+ public static function get_student_followed_by_coach($coach_id) {
+ $coach_id = intval($coach_id);
- $course_code = $a_courses["course_code"];
- $id_session = $a_courses["id_session"];
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+ $tbl_session_user = Database :: get_main_table(TABLE_MAIN_SESSION_USER);
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
- $sql = "SELECT distinct srcru.id_user
- FROM $tbl_session_course_user AS srcru, $tbl_session_user sru
- WHERE srcru.id_user = sru.id_user AND sru.relation_type<>".SESSION_RELATION_TYPE_RRHH." AND srcru.id_session = sru.id_session AND srcru.course_code='$course_code' AND srcru.id_session='$id_session'";
+ $a_students = array ();
- $rs = Database::query($sql);
+ // At first, courses where $coach_id is coach of the course //
+ $sql = 'SELECT id_session, course_code FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id.' AND status=2';
- while ($row = Database::fetch_array($rs)) {
- $a_students[$row['id_user']] = $row['id_user'];
- }
+ global $_configuration;
+ if ($_configuration['multiple_access_urls']) {
+ $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
+ $access_url_id = api_get_current_access_url_id();
+ if ($access_url_id != -1) {
+ $sql = 'SELECT scu.id_session, scu.course_code
+ FROM ' . $tbl_session_course_user . ' scu INNER JOIN '.$tbl_session_rel_access_url.' sru
+ ON (scu.id_session=sru.session_id)
+ WHERE scu.id_user=' . $coach_id.' AND scu.status=2 AND sru.access_url_id = '.$access_url_id;
}
+ }
- // Then, courses where $coach_id is coach of the session //
-
- $sql = 'SELECT session_course_user.id_user
- FROM ' . $tbl_session_course_user . ' as session_course_user
- INNER JOIN '.$tbl_session_user.' sru ON session_course_user.id_user = sru.id_user AND session_course_user.id_session = sru.id_session
- INNER JOIN ' . $tbl_session_course . ' as session_course
- ON session_course.course_code = session_course_user.course_code
- AND session_course_user.id_session = session_course.id_session
- INNER JOIN ' . $tbl_session . ' as session
- ON session.id = session_course.id_session
- AND session.id_coach = ' . $coach_id;
- if ($_configuration['multiple_access_urls']) {
- $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
- $access_url_id = api_get_current_access_url_id();
- if ($access_url_id != -1){
- $sql = 'SELECT session_course_user.id_user
- FROM ' . $tbl_session_course_user . ' as session_course_user
- INNER JOIN '.$tbl_session_user.' sru ON session_course_user.id_user = sru.id_user AND session_course_user.id_session = sru.id_session
- INNER JOIN ' . $tbl_session_course . ' as session_course
- ON session_course.course_code = session_course_user.course_code
- AND session_course_user.id_session = session_course.id_session
- INNER JOIN ' . $tbl_session . ' as session
- ON session.id = session_course.id_session
- AND session.id_coach = ' . $coach_id.'
- INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url
- ON session.id = session_rel_url.session_id WHERE access_url_id = '.$access_url_id;
- }
- }
+ $result = Database::query($sql);
- $result = Database::query($sql);
+ while ($a_courses = Database::fetch_array($result)) {
- while ($row = Database::fetch_array($result)) {
+ $course_code = $a_courses["course_code"];
+ $id_session = $a_courses["id_session"];
+
+ $sql = "SELECT distinct srcru.id_user
+ FROM $tbl_session_course_user AS srcru, $tbl_session_user sru
+ WHERE srcru.id_user = sru.id_user AND sru.relation_type<>".SESSION_RELATION_TYPE_RRHH." AND srcru.id_session = sru.id_session AND srcru.course_code='$course_code' AND srcru.id_session='$id_session'";
+
+ $rs = Database::query($sql);
+
+ while ($row = Database::fetch_array($rs)) {
$a_students[$row['id_user']] = $row['id_user'];
}
- return $a_students;
}
- /**
- * Get student followed by a coach inside a session
- * @param int Session id
- * @param int Coach id
- * @return array students list
- */
- public static function get_student_followed_by_coach_in_a_session($id_session, $coach_id) {
+ // Then, courses where $coach_id is coach of the session //
+
+ $sql = 'SELECT session_course_user.id_user
+ FROM ' . $tbl_session_course_user . ' as session_course_user
+ INNER JOIN '.$tbl_session_user.' sru ON session_course_user.id_user = sru.id_user AND session_course_user.id_session = sru.id_session
+ INNER JOIN ' . $tbl_session_course . ' as session_course
+ ON session_course.course_code = session_course_user.course_code
+ AND session_course_user.id_session = session_course.id_session
+ INNER JOIN ' . $tbl_session . ' as session
+ ON session.id = session_course.id_session
+ AND session.id_coach = ' . $coach_id;
+ if ($_configuration['multiple_access_urls']) {
+ $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
+ $access_url_id = api_get_current_access_url_id();
+ if ($access_url_id != -1){
+ $sql = 'SELECT session_course_user.id_user
+ FROM ' . $tbl_session_course_user . ' as session_course_user
+ INNER JOIN '.$tbl_session_user.' sru ON session_course_user.id_user = sru.id_user AND session_course_user.id_session = sru.id_session
+ INNER JOIN ' . $tbl_session_course . ' as session_course
+ ON session_course.course_code = session_course_user.course_code
+ AND session_course_user.id_session = session_course.id_session
+ INNER JOIN ' . $tbl_session . ' as session
+ ON session.id = session_course.id_session
+ AND session.id_coach = ' . $coach_id.'
+ INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url
+ ON session.id = session_rel_url.session_id WHERE access_url_id = '.$access_url_id;
+ }
+ }
- $coach_id = intval($coach_id);
+ $result = Database::query($sql);
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+ while ($row = Database::fetch_array($result)) {
+ $a_students[$row['id_user']] = $row['id_user'];
+ }
+ return $a_students;
+ }
- $a_students = array ();
+ /**
+ * Get student followed by a coach inside a session
+ * @param int Session id
+ * @param int Coach id
+ * @return array students list
+ */
+ public static function get_student_followed_by_coach_in_a_session($id_session, $coach_id) {
- //////////////////////////////////////////////////////////////
- // At first, courses where $coach_id is coach of the course //
- //////////////////////////////////////////////////////////////
- $sql = 'SELECT course_code FROM ' . $tbl_session_course_user . ' WHERE id_session="' . $id_session . '" AND id_user=' . $coach_id.' AND status=2';
+ $coach_id = intval($coach_id);
- $result = Database::query($sql);
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
- while ($a_courses = Database::fetch_array($result)) {
- $course_code = $a_courses["course_code"];
+ $a_students = array ();
- $sql = "SELECT distinct srcru.id_user
- FROM $tbl_session_course_user AS srcru
- WHERE course_code='$course_code' and id_session = '" . $id_session . "'";
+ //////////////////////////////////////////////////////////////
+ // At first, courses where $coach_id is coach of the course //
+ //////////////////////////////////////////////////////////////
+ $sql = 'SELECT course_code FROM ' . $tbl_session_course_user . ' WHERE id_session="' . $id_session . '" AND id_user=' . $coach_id.' AND status=2';
- $rs = Database::query($sql);
+ $result = Database::query($sql);
- while ($row = Database::fetch_array($rs)) {
- $a_students[$row['id_user']] = $row['id_user'];
- }
- }
+ while ($a_courses = Database::fetch_array($result)) {
+ $course_code = $a_courses["course_code"];
- //////////////////////////////////////////////////////////////
- // Then, courses where $coach_id is coach of the session //
- //////////////////////////////////////////////////////////////
+ $sql = "SELECT distinct srcru.id_user
+ FROM $tbl_session_course_user AS srcru
+ WHERE course_code='$course_code' and id_session = '" . $id_session . "'";
- $dsl_session_coach = 'SELECT id_coach FROM ' . $tbl_session . ' WHERE id="' . $id_session . '" AND id_coach="' . $coach_id . '"';
- $result = Database::query($dsl_session_coach);
- //He is the session_coach so we select all the users in the session
- if (Database::num_rows($result) > 0) {
- $sql = 'SELECT DISTINCT srcru.id_user FROM ' . $tbl_session_course_user . ' AS srcru WHERE id_session="' . $id_session . '"';
- $result = Database::query($sql);
- while ($row = Database::fetch_array($result)) {
- $a_students[$row['id_user']] = $row['id_user'];
- }
+ $rs = Database::query($sql);
+
+ while ($row = Database::fetch_array($rs)) {
+ $a_students[$row['id_user']] = $row['id_user'];
}
- return $a_students;
}
- /**
- * Check if a coach is allowed to follow a student
- * @param int Coach id
- * @param int Student id
- * @return bool
- */
- public static function is_allowed_to_coach_student($coach_id, $student_id) {
- $coach_id = intval($coach_id);
- $student_id = intval($student_id);
-
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
-
- //////////////////////////////////////////////////////////////
- // At first, courses where $coach_id is coach of the course //
- //////////////////////////////////////////////////////////////
- /*$sql = 'SELECT 1
- FROM ' . $tbl_session_course_user . ' AS session_course_user
- INNER JOIN ' . $tbl_session_course . ' AS session_course
- ON session_course.course_code = session_course_user.course_code
- AND id_coach=' . $coach_id . '
- WHERE id_user=' . $student_id;*/
-
- $sql = 'SELECT 1 FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id .' AND status=2';
+ //////////////////////////////////////////////////////////////
+ // Then, courses where $coach_id is coach of the session //
+ //////////////////////////////////////////////////////////////
+ $dsl_session_coach = 'SELECT id_coach FROM ' . $tbl_session . ' WHERE id="' . $id_session . '" AND id_coach="' . $coach_id . '"';
+ $result = Database::query($dsl_session_coach);
+ //He is the session_coach so we select all the users in the session
+ if (Database::num_rows($result) > 0) {
+ $sql = 'SELECT DISTINCT srcru.id_user FROM ' . $tbl_session_course_user . ' AS srcru WHERE id_session="' . $id_session . '"';
$result = Database::query($sql);
- if (Database::num_rows($result) > 0) {
- return true;
+ while ($row = Database::fetch_array($result)) {
+ $a_students[$row['id_user']] = $row['id_user'];
}
+ }
+ return $a_students;
+ }
- //////////////////////////////////////////////////////////////
- // Then, courses where $coach_id is coach of the session //
- //////////////////////////////////////////////////////////////
-
- $sql = 'SELECT session_course_user.id_user
- FROM ' . $tbl_session_course_user . ' as session_course_user
- INNER JOIN ' . $tbl_session_course . ' as session_course
- ON session_course.course_code = session_course_user.course_code
- INNER JOIN ' . $tbl_session . ' as session
- ON session.id = session_course.id_session
- AND session.id_coach = ' . $coach_id . '
- WHERE id_user = ' . $student_id;
- $result = Database::query($sql);
- if (Database::num_rows($result) > 0) {
- return true;
- }
+ /**
+ * Check if a coach is allowed to follow a student
+ * @param int Coach id
+ * @param int Student id
+ * @return bool
+ */
+ public static function is_allowed_to_coach_student($coach_id, $student_id) {
+ $coach_id = intval($coach_id);
+ $student_id = intval($student_id);
+
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+
+ //////////////////////////////////////////////////////////////
+ // At first, courses where $coach_id is coach of the course //
+ //////////////////////////////////////////////////////////////
+ /*$sql = 'SELECT 1
+ FROM ' . $tbl_session_course_user . ' AS session_course_user
+ INNER JOIN ' . $tbl_session_course . ' AS session_course
+ ON session_course.course_code = session_course_user.course_code
+ AND id_coach=' . $coach_id . '
+ WHERE id_user=' . $student_id;*/
+
+ $sql = 'SELECT 1 FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id .' AND status=2';
- return false;
+ $result = Database::query($sql);
+ if (Database::num_rows($result) > 0) {
+ return true;
+ }
+ //////////////////////////////////////////////////////////////
+ // Then, courses where $coach_id is coach of the session //
+ //////////////////////////////////////////////////////////////
+
+ $sql = 'SELECT session_course_user.id_user
+ FROM ' . $tbl_session_course_user . ' as session_course_user
+ INNER JOIN ' . $tbl_session_course . ' as session_course
+ ON session_course.course_code = session_course_user.course_code
+ INNER JOIN ' . $tbl_session . ' as session
+ ON session.id = session_course.id_session
+ AND session.id_coach = ' . $coach_id . '
+ WHERE id_user = ' . $student_id;
+ $result = Database::query($sql);
+ if (Database::num_rows($result) > 0) {
+ return true;
}
+ return false;
- /**
- * Get courses followed by coach
- * @param int Coach id
- * @param int Session id (optional)
- * @return array Courses list
- */
- public static function get_courses_followed_by_coach($coach_id, $id_session = '')
- {
+ }
- $coach_id = intval($coach_id);
- if (!empty ($id_session))
- $id_session = intval($id_session);
-
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
- $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
-
- //////////////////////////////////////////////////////////////
- // At first, courses where $coach_id is coach of the course //
- //////////////////////////////////////////////////////////////
- $sql = 'SELECT DISTINCT course_code FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id.' AND status=2';
-
- global $_configuration;
- if ($_configuration['multiple_access_urls']) {
- $tbl_course_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
- $access_url_id = api_get_current_access_url_id();
- if ($access_url_id != -1){
- $sql = 'SELECT DISTINCT scu.course_code FROM ' . $tbl_session_course_user . ' scu INNER JOIN '.$tbl_course_rel_access_url.' cru
- ON (scu.course_code = cru.course_code)
- WHERE scu.id_user=' . $coach_id.' AND scu.status=2 AND cru.access_url_id = '.$access_url_id;
- }
- }
- if (!empty ($id_session))
- $sql .= ' AND id_session=' . $id_session;
- $result = Database::query($sql);
- while ($row = Database::fetch_array($result)) {
- $a_courses[$row['course_code']] = $row['course_code'];
- }
+ /**
+ * Get courses followed by coach
+ * @param int Coach id
+ * @param int Session id (optional)
+ * @return array Courses list
+ */
+ public static function get_courses_followed_by_coach($coach_id, $id_session = '')
+ {
- //////////////////////////////////////////////////////////////
- // Then, courses where $coach_id is coach of the session //
- //////////////////////////////////////////////////////////////
- $sql = 'SELECT DISTINCT session_course.course_code
- FROM ' . $tbl_session_course . ' as session_course
- INNER JOIN ' . $tbl_session . ' as session
- ON session.id = session_course.id_session
- AND session.id_coach = ' . $coach_id . '
- INNER JOIN ' . $tbl_course . ' as course
- ON course.code = session_course.course_code';
-
- if ($_configuration['multiple_access_urls']) {
- $tbl_course_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
- $access_url_id = api_get_current_access_url_id();
- if ($access_url_id != -1){
- $sql = 'SELECT DISTINCT session_course.course_code
- FROM ' . $tbl_session_course . ' as session_course
- INNER JOIN ' . $tbl_session . ' as session
- ON session.id = session_course.id_session
- AND session.id_coach = ' . $coach_id . '
- INNER JOIN ' . $tbl_course . ' as course
- ON course.code = session_course.course_code
- INNER JOIN '.$tbl_course_rel_access_url.' course_rel_url
- ON (session_course.course_code = course_rel_url.course_code)';
- }
- }
+ $coach_id = intval($coach_id);
+ if (!empty ($id_session))
+ $id_session = intval($id_session);
- if (!empty ($id_session)) {
- $sql .= ' WHERE session_course.id_session=' . $id_session;
- if ($_configuration['multiple_access_urls'])
- $sql .= ' AND access_url_id = '.$access_url_id;
- } else {
- if ($_configuration['multiple_access_urls'])
- $sql .= ' WHERE access_url_id = '.$access_url_id;
- }
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+ $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
- $result = Database::query($sql);
+ //////////////////////////////////////////////////////////////
+ // At first, courses where $coach_id is coach of the course //
+ //////////////////////////////////////////////////////////////
+ $sql = 'SELECT DISTINCT course_code FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id.' AND status=2';
- while ($row = Database::fetch_array($result)) {
- $a_courses[$row['course_code']] = $row['course_code'];
+ global $_configuration;
+ if ($_configuration['multiple_access_urls']) {
+ $tbl_course_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
+ $access_url_id = api_get_current_access_url_id();
+ if ($access_url_id != -1){
+ $sql = 'SELECT DISTINCT scu.course_code FROM ' . $tbl_session_course_user . ' scu INNER JOIN '.$tbl_course_rel_access_url.' cru
+ ON (scu.course_code = cru.course_code)
+ WHERE scu.id_user=' . $coach_id.' AND scu.status=2 AND cru.access_url_id = '.$access_url_id;
}
-
- return $a_courses;
}
- /**
- * Get sessions coached by user
- * @param int Coach id
- * @return array Sessions list
- */
- public static function get_sessions_coached_by_user($coach_id) {
- // table definition
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
- $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
-
- // protect datas
- $coach_id = intval($coach_id);
-
- // session where we are general coach
- $sql = 'SELECT DISTINCT id, name, date_start, date_end
- FROM ' . $tbl_session . '
- WHERE id_coach=' . $coach_id;
-
- global $_configuration;
- if ($_configuration['multiple_access_urls']) {
- $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
- $access_url_id = api_get_current_access_url_id();
- if ($access_url_id != -1){
- $sql = 'SELECT DISTINCT id, name, date_start, date_end
- FROM ' . $tbl_session . ' session INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url
- ON (session.id = session_rel_url.session_id)
- WHERE id_coach=' . $coach_id.' AND access_url_id = '.$access_url_id;
- }
- }
-
- $rs = Database::query($sql);
+ if (!empty ($id_session))
+ $sql .= ' AND id_session=' . $id_session;
+ $result = Database::query($sql);
+ while ($row = Database::fetch_array($result)) {
+ $a_courses[$row['course_code']] = $row['course_code'];
+ }
- while ($row = Database::fetch_array($rs))
- {
- $a_sessions[$row["id"]] = $row;
- }
+ //////////////////////////////////////////////////////////////
+ // Then, courses where $coach_id is coach of the session //
+ //////////////////////////////////////////////////////////////
+ $sql = 'SELECT DISTINCT session_course.course_code
+ FROM ' . $tbl_session_course . ' as session_course
+ INNER JOIN ' . $tbl_session . ' as session
+ ON session.id = session_course.id_session
+ AND session.id_coach = ' . $coach_id . '
+ INNER JOIN ' . $tbl_course . ' as course
+ ON course.code = session_course.course_code';
- // session where we are coach of a course
- $sql = 'SELECT DISTINCT session.id, session.name, session.date_start, session.date_end
- FROM ' . $tbl_session . ' as session
- INNER JOIN ' . $tbl_session_course_user . ' as session_course_user
- ON session.id = session_course_user.id_session
- AND session_course_user.id_user=' . $coach_id.' AND session_course_user.status=2';
-
- global $_configuration;
- if ($_configuration['multiple_access_urls']) {
- $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
- $access_url_id = api_get_current_access_url_id();
- if ($access_url_id != -1){
- $sql = 'SELECT DISTINCT session.id, session.name, session.date_start, session.date_end
- FROM ' . $tbl_session . ' as session
- INNER JOIN ' . $tbl_session_course_user . ' as session_course_user
- ON session.id = session_course_user.id_session AND session_course_user.id_user=' . $coach_id.' AND session_course_user.status=2
- INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url
- ON (session.id = session_rel_url.session_id)
- WHERE access_url_id = '.$access_url_id;
- }
+ if ($_configuration['multiple_access_urls']) {
+ $tbl_course_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
+ $access_url_id = api_get_current_access_url_id();
+ if ($access_url_id != -1){
+ $sql = 'SELECT DISTINCT session_course.course_code
+ FROM ' . $tbl_session_course . ' as session_course
+ INNER JOIN ' . $tbl_session . ' as session
+ ON session.id = session_course.id_session
+ AND session.id_coach = ' . $coach_id . '
+ INNER JOIN ' . $tbl_course . ' as course
+ ON course.code = session_course.course_code
+ INNER JOIN '.$tbl_course_rel_access_url.' course_rel_url
+ ON (session_course.course_code = course_rel_url.course_code)';
}
+ }
- $rs = Database::query($sql);
-
- while ($row = Database::fetch_array($rs))
- {
- $a_sessions[$row["id"]] = $row;
- }
+ if (!empty ($id_session)) {
+ $sql .= ' WHERE session_course.id_session=' . $id_session;
+ if ($_configuration['multiple_access_urls'])
+ $sql .= ' AND access_url_id = '.$access_url_id;
+ } else {
+ if ($_configuration['multiple_access_urls'])
+ $sql .= ' WHERE access_url_id = '.$access_url_id;
+ }
- if (is_array($a_sessions)) {
- foreach ($a_sessions as & $session) {
- if ($session['date_start'] == '0000-00-00') {
- $session['status'] = get_lang('SessionActive');
- }
- else {
- $date_start = explode('-', $session['date_start']);
- $time_start = mktime(0, 0, 0, $date_start[1], $date_start[2], $date_start[0]);
- $date_end = explode('-', $session['date_end']);
- $time_end = mktime(0, 0, 0, $date_end[1], $date_end[2], $date_end[0]);
- if ($time_start < time() && time() < $time_end) {
- $session['status'] = get_lang('SessionActive');
- }
- else{
- if (time() < $time_start) {
- $session['status'] = get_lang('SessionFuture');
- }
- else{
- if (time() > $time_end) {
- $session['status'] = get_lang('SessionPast');
- }
- }
- }
- }
- }
- }
- return $a_sessions;
+ $result = Database::query($sql);
+ while ($row = Database::fetch_array($result)) {
+ $a_courses[$row['course_code']] = $row['course_code'];
}
- /**
- * Get courses list from a session
- * @param int Session id
- * @return array Courses list
- */
- public static function get_courses_list_from_session($session_id) {
- //protect datas
- $session_id = intval($session_id);
+ return $a_courses;
+ }
- // table definition
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
- $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+ /**
+ * Get sessions coached by user
+ * @param int Coach id
+ * @return array Sessions list
+ */
+ public static function get_sessions_coached_by_user($coach_id) {
+ // table definition
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+ $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $sql = 'SELECT DISTINCT course_code
- FROM ' . $tbl_session_course . '
- WHERE id_session=' . $session_id;
+ // protect datas
+ $coach_id = intval($coach_id);
- $rs = Database::query($sql);
- $a_courses = array ();
- while ($row = Database::fetch_array($rs)) {
- $a_courses[$row['course_code']] = $row;
+ // session where we are general coach
+ $sql = 'SELECT DISTINCT id, name, date_start, date_end
+ FROM ' . $tbl_session . '
+ WHERE id_coach=' . $coach_id;
+
+ global $_configuration;
+ if ($_configuration['multiple_access_urls']) {
+ $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
+ $access_url_id = api_get_current_access_url_id();
+ if ($access_url_id != -1){
+ $sql = 'SELECT DISTINCT id, name, date_start, date_end
+ FROM ' . $tbl_session . ' session INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url
+ ON (session.id = session_rel_url.session_id)
+ WHERE id_coach=' . $coach_id.' AND access_url_id = '.$access_url_id;
}
- return $a_courses;
}
- /**
- * Count the number of documents that an user has uploaded to a course
- * @param int|array Student id(s)
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) return count of assignments including sessions, 0 = session is not filtered
- * @return int Number of documents
- */
-
- public static function count_student_uploaded_documents($student_id, $course_code, $session_id = null){
- // protect datas
- $course_code = Database::escape_string($course_code);
- // get the informations of the course
- $a_course = CourseManager :: get_course_information($course_code);
- if (!empty($a_course)) {
- // table definition
- $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
- $tbl_document = Database :: get_course_table(TABLE_DOCUMENT);
-
- $course_id = $a_course['real_id'];
+ $rs = Database::query($sql);
- $condition_user = "";
- if (is_array($student_id)) {
- $condition_user = " AND ip.insert_user_id IN (".implode(',',$student_id).") ";
- } else {
- $condition_user = " AND ip.insert_user_id = '$student_id' ";
- }
+ while ($row = Database::fetch_array($rs))
+ {
+ $a_sessions[$row["id"]] = $row;
+ }
- $condition_session = "";
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = " AND pub.session_id = $session_id ";
- }
+ // session where we are coach of a course
+ $sql = 'SELECT DISTINCT session.id, session.name, session.date_start, session.date_end
+ FROM ' . $tbl_session . ' as session
+ INNER JOIN ' . $tbl_session_course_user . ' as session_course_user
+ ON session.id = session_course_user.id_session
+ AND session_course_user.id_user=' . $coach_id.' AND session_course_user.status=2';
- $sql = "SELECT count(ip.tool)
- FROM $tbl_item_property ip INNER JOIN $tbl_document pub
- ON ip.ref = pub.id
- WHERE ip.c_id = $course_id AND
- pub.c_id = $course_id AND
- pub.filetype ='file' AND
- ip.tool = 'document'
- $condition_user $condition_session ";
- $rs = Database::query($sql);
- $row = Database::fetch_row($rs);
- return $row[0];
+ global $_configuration;
+ if ($_configuration['multiple_access_urls']) {
+ $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
+ $access_url_id = api_get_current_access_url_id();
+ if ($access_url_id != -1){
+ $sql = 'SELECT DISTINCT session.id, session.name, session.date_start, session.date_end
+ FROM ' . $tbl_session . ' as session
+ INNER JOIN ' . $tbl_session_course_user . ' as session_course_user
+ ON session.id = session_course_user.id_session AND session_course_user.id_user=' . $coach_id.' AND session_course_user.status=2
+ INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url
+ ON (session.id = session_rel_url.session_id)
+ WHERE access_url_id = '.$access_url_id;
}
- return null;
}
+ $rs = Database::query($sql);
- /**
- * Count assignments per student
- * @param int|array Student id(s)
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) return count of assignments including sessions, 0 = session is not filtered
- * @return int Count of assignments
- */
- public static function count_student_assignments($student_id, $course_code, $session_id = null) {
- // protect datas
- $course_code = Database::escape_string($course_code);
- // get the informations of the course
- $a_course = CourseManager :: get_course_information($course_code);
- if (!empty($a_course)) {
- // table definition
- $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
- $tbl_student_publication = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
-
- $course_id = $a_course['real_id'];
+ while ($row = Database::fetch_array($rs))
+ {
+ $a_sessions[$row["id"]] = $row;
+ }
- $condition_user = "";
- if (is_array($student_id)) {
- $condition_user = " AND ip.insert_user_id IN (".implode(',',$student_id).") ";
- } else {
- $condition_user = " AND ip.insert_user_id = '$student_id' ";
+ if (is_array($a_sessions)) {
+ foreach ($a_sessions as & $session) {
+ if ($session['date_start'] == '0000-00-00') {
+ $session['status'] = get_lang('SessionActive');
}
-
- $condition_session = "";
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = " AND pub.session_id = $session_id ";
+ else {
+ $date_start = explode('-', $session['date_start']);
+ $time_start = mktime(0, 0, 0, $date_start[1], $date_start[2], $date_start[0]);
+ $date_end = explode('-', $session['date_end']);
+ $time_end = mktime(0, 0, 0, $date_end[1], $date_end[2], $date_end[0]);
+ if ($time_start < time() && time() < $time_end) {
+ $session['status'] = get_lang('SessionActive');
+ }
+ else{
+ if (time() < $time_start) {
+ $session['status'] = get_lang('SessionFuture');
+ }
+ else{
+ if (time() > $time_end) {
+ $session['status'] = get_lang('SessionPast');
+ }
+ }
+ }
}
-
- $sql = "SELECT count(ip.tool)
- FROM $tbl_item_property ip INNER JOIN $tbl_student_publication pub
- ON ip.ref = pub.id
- WHERE ip.c_id = $course_id AND
- pub.c_id = $course_id AND
- ip.tool='work'
- $condition_user $condition_session ";
- $rs = Database::query($sql);
- $row = Database::fetch_row($rs);
- return $row[0];
}
- return null;
}
+ return $a_sessions;
+ }
- /**
- * Count messages per student inside forum tool
- * @param int Student id
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) return count of messages including sessions, 0 = session is not filtered
- * @return int Count of messages
- */
- function count_student_messages($student_id, $course_code, $session_id = null) {
-
- // protect datas
- $student_id = intval($student_id);
- $course_code = addslashes($course_code);
+ /**
+ * Get courses list from a session
+ * @param int Session id
+ * @return array Courses list
+ */
+ public static function get_courses_list_from_session($session_id) {
+ //protect datas
+ $session_id = intval($session_id);
- // get the informations of the course
- $a_course = CourseManager :: get_course_information($course_code);
+ // table definition
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+ $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
- if (!empty($a_course)) {
-
- // table definition
- $tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST);
- $tbl_forum = Database :: get_course_table(TABLE_FORUM);
-
- $course_id = $a_course['real_id'];
+ $sql = 'SELECT DISTINCT course_code
+ FROM ' . $tbl_session_course . '
+ WHERE id_session=' . $session_id;
- $condition_user = "";
- if (is_array($student_id)) {
- $condition_user = " AND post.poster_id IN (".implode(',',$student_id).") ";
- } else {
- $condition_user = " AND post.poster_id = '$student_id' ";
- }
+ $rs = Database::query($sql);
+ $a_courses = array ();
+ while ($row = Database::fetch_array($rs)) {
+ $a_courses[$row['course_code']] = $row;
+ }
+ return $a_courses;
+ }
- $condition_session = "";
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = " AND forum.session_id = $session_id";
- }
+ /**
+ * Count the number of documents that an user has uploaded to a course
+ * @param int|array Student id(s)
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) return count of assignments including sessions, 0 = session is not filtered
+ * @return int Number of documents
+ */
- $sql = "SELECT 1 FROM $tbl_forum_post post INNER JOIN $tbl_forum forum
- ON forum.forum_id = post.forum_id
- WHERE post.c_id = $course_id AND
- forum.c_id = $course_id
- $condition_user $condition_session ";
- $rs = Database::query($sql);
- return Database::num_rows($rs);
- } else {
- return null;
- }
- }
+ public static function count_student_uploaded_documents($student_id, $course_code, $session_id = null){
+ // protect datas
+ $course_code = Database::escape_string($course_code);
+ // get the informations of the course
+ $a_course = CourseManager :: get_course_information($course_code);
+ if (!empty($a_course)) {
+ // table definition
+ $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
+ $tbl_document = Database :: get_course_table(TABLE_DOCUMENT);
+
+ $course_id = $a_course['real_id'];
- /**
- * This function counts the number of post by course
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @return int The number of post by course
- */
- public static function count_number_of_posts_by_course($course_code, $session_id = null) {
- //protect data
- $course_code = Database::escape_string($course_code);
- // get the informations of the course
- $a_course = CourseManager :: get_course_information($course_code);
- $count = 0;
- if (!empty($a_course)) {
- $tbl_posts = Database :: get_course_table(TABLE_FORUM_POST);
- $tbl_forums = Database :: get_course_table(TABLE_FORUM);
-
- $condition_session = '';
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = ' AND f.session_id = '. $session_id;
- }
-
- $course_id = $a_course['real_id'];
-
- $sql = "SELECT count(*) FROM $tbl_posts p INNER JOIN $tbl_forums f
- ON f.forum_id = p.forum_id
- WHERE p.c_id = $course_id AND
- f.c_id = $course_id
- $condition_session
- ";
- $result = Database::query($sql);
- $row = Database::fetch_row($result);
- $count = $row[0];
- return $count;
+ $condition_user = "";
+ if (is_array($student_id)) {
+ $condition_user = " AND ip.insert_user_id IN (".implode(',',$student_id).") ";
} else {
- return null;
+ $condition_user = " AND ip.insert_user_id = '$student_id' ";
}
- }
- /**
- * This function counts the number of threads by course
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @return int The number of threads by course
- */
- public static function count_number_of_threads_by_course($course_code, $session_id = null) {
- $course_info = api_get_course_info($course_code);
- if (empty($course_info)) {
- return null;
- }
- $course_id = $course_info['real_id'];
-
- $count = 0;
-
- $tbl_threads = Database :: get_course_table(TABLE_FORUM_THREAD);
- $tbl_forums = Database :: get_course_table(TABLE_FORUM);
- $condition_session = '';
+ $condition_session = "";
if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = ' AND f.session_id = '. $session_id;
- }
-
- $sql = "SELECT count(*) FROM $tbl_threads t INNER JOIN $tbl_forums f ON f.forum_id = t.forum_id
- WHERE t.c_id = $course_id AND f.c_id = $course_id $condition_session ";
- $result = Database::query($sql);
- if (Database::num_rows($result)) {
- $row = Database::fetch_row($result);
- $count = $row[0];
- return $count;
- } else {
- return null;
+ $session_id = intval($session_id);
+ $condition_session = " AND pub.session_id = $session_id ";
}
+
+ $sql = "SELECT count(ip.tool)
+ FROM $tbl_item_property ip INNER JOIN $tbl_document pub
+ ON ip.ref = pub.id
+ WHERE ip.c_id = $course_id AND
+ pub.c_id = $course_id AND
+ pub.filetype ='file' AND
+ ip.tool = 'document'
+ $condition_user $condition_session ";
+ $rs = Database::query($sql);
+ $row = Database::fetch_row($rs);
+ return $row[0];
}
+ return null;
+ }
- /**
- * This function counts the number of forums by course
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @return int The number of forums by course
- */
- public static function count_number_of_forums_by_course($course_code, $session_id = null) {
- $course_info = api_get_course_info($course_code);
- if (empty($course_info)) {
- return null;
- }
- $course_id = $course_info['real_id'];
- $condition_session = '';
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = ' session_id = '. $session_id;
- }
+ /**
+ * Count assignments per student
+ * @param int|array Student id(s)
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) return count of assignments including sessions, 0 = session is not filtered
+ * @return int Count of assignments
+ */
+ public static function count_student_assignments($student_id, $course_code, $session_id = null) {
+ // protect datas
+ $course_code = Database::escape_string($course_code);
+ // get the informations of the course
+ $a_course = CourseManager :: get_course_information($course_code);
+ if (!empty($a_course)) {
+ // table definition
+ $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
+ $tbl_student_publication = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
+
+ $course_id = $a_course['real_id'];
- $tbl_forums = Database :: get_course_table(TABLE_FORUM);
- $sql = "SELECT count(*) FROM $tbl_forums WHERE c_id = $course_id AND $condition_session";
- $result = Database::query($sql);
- if (Database::num_rows($result)) {
- $row = Database::fetch_row($result);
- $count = $row[0];
- return $count;
+ $condition_user = "";
+ if (is_array($student_id)) {
+ $condition_user = " AND ip.insert_user_id IN (".implode(',',$student_id).") ";
} else {
- return null;
+ $condition_user = " AND ip.insert_user_id = '$student_id' ";
+ }
+
+ $condition_session = "";
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = " AND pub.session_id = $session_id ";
}
+
+ $sql = "SELECT count(ip.tool)
+ FROM $tbl_item_property ip INNER JOIN $tbl_student_publication pub
+ ON ip.ref = pub.id
+ WHERE ip.c_id = $course_id AND
+ pub.c_id = $course_id AND
+ ip.tool='work'
+ $condition_user $condition_session ";
+ $rs = Database::query($sql);
+ $row = Database::fetch_row($rs);
+ return $row[0];
}
+ return null;
+ }
+
- /**
- * This function counts the chat last connections by course in x days
- * @param string Course code
- * @param int Last x days
- * @param int Session id (optional)
- * @return int Chat last connections by course in x days
- */
- public static function chat_connections_during_last_x_days_by_course($course_code,$last_days, $session_id = 0) {
- $course_info = api_get_course_info($course_code);
- if (empty($course_info)) {
- return null;
- }
- $course_id = $course_info['real_id'];
-
- //protect data
- $last_days = intval($last_days);
- $course_code = Database::escape_string($course_code);
- $session_id = intval($session_id);
+ /**
+ * Count messages per student inside forum tool
+ * @param int Student id
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) return count of messages including sessions, 0 = session is not filtered
+ * @return int Count of messages
+ */
+ function count_student_messages($student_id, $course_code, $session_id = null) {
+
+ // protect datas
+ $student_id = intval($student_id);
+ $course_code = addslashes($course_code);
+
+ // get the informations of the course
+ $a_course = CourseManager :: get_course_information($course_code);
+
+ if (!empty($a_course)) {
- $count = 0;
+ // table definition
+ $tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST);
+ $tbl_forum = Database :: get_course_table(TABLE_FORUM);
- $tbl_stats_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
+ $course_id = $a_course['real_id'];
- $sql = "SELECT count(*) FROM $tbl_stats_access WHERE DATE_SUB(NOW(),INTERVAL $last_days DAY) <= access_date
- AND access_cours_code = '$course_code' AND access_tool='".TOOL_CHAT."' AND access_session_id='$session_id' ";
- $result = Database::query($sql);
- if (Database::num_rows($result)) {
- $row = Database::fetch_row($result);
- $count = $row[0];
- return $count;
+ $condition_user = "";
+ if (is_array($student_id)) {
+ $condition_user = " AND post.poster_id IN (".implode(',',$student_id).") ";
} else {
- return null;
+ $condition_user = " AND post.poster_id = '$student_id' ";
}
- }
- /**
- * This function gets the last student's connection in chat
- * @param int Student id
- * @param string Course code
- * @param int Session id (optional)
- * @return string datetime formatted without day (e.g: February 23, 2010 10:20:50 )
- */
- public static function chat_last_connection($student_id, $course_code, $session_id = 0) {
-
- //protect datas
- $student_id = intval($student_id);
- $course_code= Database::escape_string($course_code);
- $session_id = intval($session_id);
- $date_time = '';
+ $condition_session = "";
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = " AND forum.session_id = $session_id";
+ }
- // table definition
- $tbl_stats_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
- $sql = "SELECT access_date FROM $tbl_stats_access
- WHERE access_tool='".TOOL_CHAT."' AND access_user_id='$student_id' AND access_cours_code = '$course_code' AND access_session_id = '$session_id' ORDER BY access_date DESC limit 1";
+ $sql = "SELECT 1 FROM $tbl_forum_post post INNER JOIN $tbl_forum forum
+ ON forum.forum_id = post.forum_id
+ WHERE post.c_id = $course_id AND
+ forum.c_id = $course_id
+ $condition_user $condition_session ";
$rs = Database::query($sql);
- if (Database::num_rows($rs) > 0) {
- $row = Database::fetch_array($rs);
- $date_time = api_convert_and_format_date($row['access_date'], null, date_default_timezone_get());
+ return Database::num_rows($rs);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * This function counts the number of post by course
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @return int The number of post by course
+ */
+ public static function count_number_of_posts_by_course($course_code, $session_id = null) {
+ //protect data
+ $course_code = Database::escape_string($course_code);
+ // get the informations of the course
+ $a_course = CourseManager :: get_course_information($course_code);
+ $count = 0;
+ if (!empty($a_course)) {
+ $tbl_posts = Database :: get_course_table(TABLE_FORUM_POST);
+ $tbl_forums = Database :: get_course_table(TABLE_FORUM);
+
+ $condition_session = '';
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = ' AND f.session_id = '. $session_id;
}
- return $date_time;
+
+ $course_id = $a_course['real_id'];
+
+ $sql = "SELECT count(*) FROM $tbl_posts p INNER JOIN $tbl_forums f
+ ON f.forum_id = p.forum_id
+ WHERE p.c_id = $course_id AND
+ f.c_id = $course_id
+ $condition_session
+ ";
+ $result = Database::query($sql);
+ $row = Database::fetch_row($result);
+ $count = $row[0];
+ return $count;
+ } else {
+ return null;
}
+ }
- /**
- * Get count student's visited links
- * @param int Student id
- * @param string Course code
- * @param int Session id (optional)
- * @return int count of visited links
- */
- public static function count_student_visited_links($student_id, $course_code, $session_id = 0) {
+ /**
+ * This function counts the number of threads by course
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @return int The number of threads by course
+ */
+ public static function count_number_of_threads_by_course($course_code, $session_id = null) {
+ $course_info = api_get_course_info($course_code);
+ if (empty($course_info)) {
+ return null;
+ }
+ $course_id = $course_info['real_id'];
+
+ $count = 0;
+
+ $tbl_threads = Database :: get_course_table(TABLE_FORUM_THREAD);
+ $tbl_forums = Database :: get_course_table(TABLE_FORUM);
+ $condition_session = '';
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = ' AND f.session_id = '. $session_id;
+ }
+
+ $sql = "SELECT count(*) FROM $tbl_threads t INNER JOIN $tbl_forums f ON f.forum_id = t.forum_id
+ WHERE t.c_id = $course_id AND f.c_id = $course_id $condition_session ";
+ $result = Database::query($sql);
+ if (Database::num_rows($result)) {
+ $row = Database::fetch_row($result);
+ $count = $row[0];
+ return $count;
+ } else {
+ return null;
+ }
+ }
- // protect datas
- $student_id = intval($student_id);
- $course_code = Database::escape_string($course_code);
- $session_id = intval($session_id);
+ /**
+ * This function counts the number of forums by course
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @return int The number of forums by course
+ */
+ public static function count_number_of_forums_by_course($course_code, $session_id = null) {
+ $course_info = api_get_course_info($course_code);
+ if (empty($course_info)) {
+ return null;
+ }
+ $course_id = $course_info['real_id'];
+
+ $condition_session = '';
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = ' session_id = '. $session_id;
+ }
+
+ $tbl_forums = Database :: get_course_table(TABLE_FORUM);
+ $sql = "SELECT count(*) FROM $tbl_forums WHERE c_id = $course_id AND $condition_session";
+ $result = Database::query($sql);
+ if (Database::num_rows($result)) {
+ $row = Database::fetch_row($result);
+ $count = $row[0];
+ return $count;
+ } else {
+ return null;
+ }
+ }
- // table definition
- $tbl_stats_links = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
+ /**
+ * This function counts the chat last connections by course in x days
+ * @param string Course code
+ * @param int Last x days
+ * @param int Session id (optional)
+ * @return int Chat last connections by course in x days
+ */
+ public static function chat_connections_during_last_x_days_by_course($course_code,$last_days, $session_id = 0) {
+ $course_info = api_get_course_info($course_code);
+ if (empty($course_info)) {
+ return null;
+ }
+ $course_id = $course_info['real_id'];
+
+ //protect data
+ $last_days = intval($last_days);
+ $course_code = Database::escape_string($course_code);
+ $session_id = intval($session_id);
+
+ $count = 0;
+
+ $tbl_stats_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
- $sql = 'SELECT 1
- FROM '.$tbl_stats_links.'
- WHERE links_user_id= '.$student_id.'
- AND links_cours_id = "'.$course_code.'"
- AND links_session_id = '.$session_id.' ';
+ $sql = "SELECT count(*) FROM $tbl_stats_access WHERE DATE_SUB(NOW(),INTERVAL $last_days DAY) <= access_date
+ AND access_cours_code = '$course_code' AND access_tool='".TOOL_CHAT."' AND access_session_id='$session_id' ";
+ $result = Database::query($sql);
+ if (Database::num_rows($result)) {
+ $row = Database::fetch_row($result);
+ $count = $row[0];
+ return $count;
+ } else {
+ return null;
+ }
+ }
- $rs = Database::query($sql);
- return Database::num_rows($rs);
+ /**
+ * This function gets the last student's connection in chat
+ * @param int Student id
+ * @param string Course code
+ * @param int Session id (optional)
+ * @return string datetime formatted without day (e.g: February 23, 2010 10:20:50 )
+ */
+ public static function chat_last_connection($student_id, $course_code, $session_id = 0) {
+
+ //protect datas
+ $student_id = intval($student_id);
+ $course_code= Database::escape_string($course_code);
+ $session_id = intval($session_id);
+ $date_time = '';
+
+ // table definition
+ $tbl_stats_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
+ $sql = "SELECT access_date FROM $tbl_stats_access
+ WHERE access_tool='".TOOL_CHAT."' AND access_user_id='$student_id' AND access_cours_code = '$course_code' AND access_session_id = '$session_id' ORDER BY access_date DESC limit 1";
+ $rs = Database::query($sql);
+ if (Database::num_rows($rs) > 0) {
+ $row = Database::fetch_array($rs);
+ $date_time = api_convert_and_format_date($row['access_date'], null, date_default_timezone_get());
}
+ return $date_time;
+ }
- /**
- * Get count student downloaded documents
- * @param int Student id
- * @param string Course code
- * @param int Session id (optional)
- * @return int Count downloaded documents
- */
- public static function count_student_downloaded_documents($student_id, $course_code, $session_id = 0) {
- // protect datas
- $student_id = intval($student_id);
- $course_code = Database::escape_string($course_code);
- $session_id = intval($session_id);
+ /**
+ * Get count student's visited links
+ * @param int Student id
+ * @param string Course code
+ * @param int Session id (optional)
+ * @return int count of visited links
+ */
+ public static function count_student_visited_links($student_id, $course_code, $session_id = 0) {
- // table definition
- $tbl_stats_documents = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
+ // protect datas
+ $student_id = intval($student_id);
+ $course_code = Database::escape_string($course_code);
+ $session_id = intval($session_id);
- $sql = 'SELECT 1
- FROM ' . $tbl_stats_documents . '
- WHERE down_user_id = '.$student_id.'
- AND down_cours_id = "'.$course_code.'"
- AND down_session_id = '.$session_id.' ';
- $rs = Database::query($sql);
- return Database::num_rows($rs);
- }
+ // table definition
+ $tbl_stats_links = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
- /**
- * Get course list inside a session from a student
- * @param int Student id
- * @param int Session id (optional)
- * @return array Courses list
- */
- public static function get_course_list_in_session_from_student($user_id, $id_session = 0) {
- $user_id = intval($user_id);
- $id_session = intval($id_session);
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $sql = 'SELECT course_code FROM ' . $tbl_session_course_user . ' WHERE id_user="' . $user_id . '" AND id_session="' . $id_session . '"';
- $result = Database::query($sql);
- $a_courses = array ();
- while ($row = Database::fetch_array($result)) {
- $a_courses[$row['course_code']] = $row['course_code'];
- }
- return $a_courses;
+ $sql = 'SELECT 1
+ FROM '.$tbl_stats_links.'
+ WHERE links_user_id= '.$student_id.'
+ AND links_cours_id = "'.$course_code.'"
+ AND links_session_id = '.$session_id.' ';
+
+ $rs = Database::query($sql);
+ return Database::num_rows($rs);
+ }
+
+ /**
+ * Get count student downloaded documents
+ * @param int Student id
+ * @param string Course code
+ * @param int Session id (optional)
+ * @return int Count downloaded documents
+ */
+ public static function count_student_downloaded_documents($student_id, $course_code, $session_id = 0) {
+ // protect datas
+ $student_id = intval($student_id);
+ $course_code = Database::escape_string($course_code);
+ $session_id = intval($session_id);
+
+ // table definition
+ $tbl_stats_documents = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
+
+ $sql = 'SELECT 1
+ FROM ' . $tbl_stats_documents . '
+ WHERE down_user_id = '.$student_id.'
+ AND down_cours_id = "'.$course_code.'"
+ AND down_session_id = '.$session_id.' ';
+ $rs = Database::query($sql);
+ return Database::num_rows($rs);
+ }
+
+ /**
+ * Get course list inside a session from a student
+ * @param int Student id
+ * @param int Session id (optional)
+ * @return array Courses list
+ */
+ public static function get_course_list_in_session_from_student($user_id, $id_session = 0) {
+ $user_id = intval($user_id);
+ $id_session = intval($id_session);
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $sql = 'SELECT course_code FROM ' . $tbl_session_course_user . ' WHERE id_user="' . $user_id . '" AND id_session="' . $id_session . '"';
+ $result = Database::query($sql);
+ $a_courses = array ();
+ while ($row = Database::fetch_array($result)) {
+ $a_courses[$row['course_code']] = $row['course_code'];
}
+ return $a_courses;
+ }
- /**
- * Get inactives students in course
- * @param string Course code
- * @param string Since login course date (optional, default = 'never')
- * @param int Session id (optional)
- * @return array Inactives users
- */
- public static function get_inactives_students_in_course($course_code, $since = 'never', $session_id=0) {
- $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $table_course_rel_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
- $inner = '';
- if($session_id!=0)
- {
- $inner = ' INNER JOIN '.$tbl_session_course_user.' session_course_user
- ON stats_login.course_code = session_course_user.course_code
- AND session_course_user.id_session = '.intval($session_id).'
- AND session_course_user.id_user = stats_login.user_id ';
- }
- $sql = 'SELECT user_id, MAX(login_course_date) max_date FROM'.$tbl_track_login.' stats_login'.$inner.'
- GROUP BY user_id
- HAVING DATE_SUB( NOW(), INTERVAL '.$since.' DAY) > max_date ';
- //HAVING DATE_ADD(max_date, INTERVAL '.$since.' DAY) < NOW() ';
-
- if ($since == 'never') {
- $sql = 'SELECT course_user.user_id FROM '.$table_course_rel_user.' course_user
- LEFT JOIN '. $tbl_track_login.' stats_login
- ON course_user.user_id = stats_login.user_id AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' '.
- $inner.'
- WHERE course_user.course_code = \''.Database::escape_string($course_code).'\'
- AND stats_login.login_course_date IS NULL
- GROUP BY course_user.user_id';
- }
- $rs = Database::query($sql);
- $inactive_users = array();
- while($user = Database::fetch_array($rs))
- {
- $inactive_users[] = $user['user_id'];
- }
- return $inactive_users;
+ /**
+ * Get inactives students in course
+ * @param string Course code
+ * @param string Since login course date (optional, default = 'never')
+ * @param int Session id (optional)
+ * @return array Inactives users
+ */
+ public static function get_inactives_students_in_course($course_code, $since = 'never', $session_id=0) {
+ $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $table_course_rel_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
+ $inner = '';
+ if($session_id!=0)
+ {
+ $inner = ' INNER JOIN '.$tbl_session_course_user.' session_course_user
+ ON stats_login.course_code = session_course_user.course_code
+ AND session_course_user.id_session = '.intval($session_id).'
+ AND session_course_user.id_user = stats_login.user_id ';
}
+ $sql = 'SELECT user_id, MAX(login_course_date) max_date FROM'.$tbl_track_login.' stats_login'.$inner.'
+ GROUP BY user_id
+ HAVING DATE_SUB( NOW(), INTERVAL '.$since.' DAY) > max_date ';
+ //HAVING DATE_ADD(max_date, INTERVAL '.$since.' DAY) < NOW() ';
+
+ if ($since == 'never') {
+ $sql = 'SELECT course_user.user_id FROM '.$table_course_rel_user.' course_user
+ LEFT JOIN '. $tbl_track_login.' stats_login
+ ON course_user.user_id = stats_login.user_id AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' '.
+ $inner.'
+ WHERE course_user.course_code = \''.Database::escape_string($course_code).'\'
+ AND stats_login.login_course_date IS NULL
+ GROUP BY course_user.user_id';
+ }
+ $rs = Database::query($sql);
+ $inactive_users = array();
+ while($user = Database::fetch_array($rs))
+ {
+ $inactive_users[] = $user['user_id'];
+ }
+ return $inactive_users;
+ }
- /**
- * Get count login per student
- * @param int Student id
- * @param string Course code
- * @param int Session id (optional)
- * @return int count login
- */
- public static function count_login_per_student($student_id, $course_code, $session_id = 0) {
- $student_id = intval($student_id);
- $course_code = Database::escape_string($course_code);
- $session_id = intval($session_id);
- $tbl_course_rel_user = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
-
- $sql = 'SELECT '.$student_id.'
- FROM ' . $tbl_course_rel_user . '
- WHERE access_user_id=' . $student_id . '
- AND access_cours_code="' . $course_code . '" AND access_session_id = "'.$session_id.'" ';
+ /**
+ * Get count login per student
+ * @param int Student id
+ * @param string Course code
+ * @param int Session id (optional)
+ * @return int count login
+ */
+ public static function count_login_per_student($student_id, $course_code, $session_id = 0) {
+ $student_id = intval($student_id);
+ $course_code = Database::escape_string($course_code);
+ $session_id = intval($session_id);
+ $tbl_course_rel_user = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
- $rs = Database::query($sql);
- $nb_login = Database::num_rows($rs);
+ $sql = 'SELECT '.$student_id.'
+ FROM ' . $tbl_course_rel_user . '
+ WHERE access_user_id=' . $student_id . '
+ AND access_cours_code="' . $course_code . '" AND access_session_id = "'.$session_id.'" ';
- return $nb_login;
- }
+ $rs = Database::query($sql);
+ $nb_login = Database::num_rows($rs);
+ return $nb_login;
+ }
- /**
- * Get students followed by a human resources manager
- * @param int Drh id
- * @return array Student list
- */
- public static function get_student_followed_by_drh($hr_dept_id) {
- $hr_dept_id = intval($hr_dept_id);
- $a_students = array();
+ /**
+ * Get students followed by a human resources manager
+ * @param int Drh id
+ * @return array Student list
+ */
+ public static function get_student_followed_by_drh($hr_dept_id) {
- $tbl_organism = Database :: get_main_table(TABLE_MAIN_ORGANISM);
- $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
+ $hr_dept_id = intval($hr_dept_id);
+ $a_students = array();
- $sql = 'SELECT DISTINCT user_id FROM '.$tbl_user.' as user
- WHERE hr_dept_id='.$hr_dept_id;
- $rs = Database::query($sql);
+ $tbl_organism = Database :: get_main_table(TABLE_MAIN_ORGANISM);
+ $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
- while($user = Database :: fetch_array($rs))
- {
- $a_students[$user['user_id']] = $user['user_id'];
- }
+ $sql = 'SELECT DISTINCT user_id FROM '.$tbl_user.' as user
+ WHERE hr_dept_id='.$hr_dept_id;
+ $rs = Database::query($sql);
- return $a_students;
+ while($user = Database :: fetch_array($rs))
+ {
+ $a_students[$user['user_id']] = $user['user_id'];
}
- /**
- * Gets the average of test and scorm inside a learning path
- * @param int User id
- * @param string Course id
- * @return float average of test
- * @author isaac flores paz
- * @deprecated get_avg_student_score should be use
- */
- public static function get_average_test_scorm_and_lp ($user_id, $course_id) {
-
- //the score inside the Reporting table
- $course_info = api_get_course_info($course_id);
- $course_id = $course_info['real_id'];
-
- $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
- $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW);
- $lp_item_view_table = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
- $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM);
-
- $sql_type = "SELECT id, lp_type FROM $lp_table WHERE c_id = $course_id";
- $rs_type=Database::query($sql_type);
- $average_data=0;
- $count_loop=0;
- $lp_list = array();
- while ($row_type = Database::fetch_array($rs_type)) {
- $lp_list[] = $row_type['id'];
- if ($row_type['lp_type']==1) {
- //lp chamilo
-
- $sql = "SELECT id FROM $lp_view_table WHERE c_id = $course_id AND user_id = '".intval($user_id)."' and lp_id='".$row_type['id']."'";
- $rs_last_lp_view_id = Database::query($sql);
- $lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id'));
-
- $sql_list_view="SELECT li.max_score,lv.user_id,liw.score,(liw.score/li.max_score) as sum_data
- FROM $lp_item_table li INNER JOIN $lp_view_table lv
- ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id
- WHERE li.c_id = $course_id AND
- liw.c_id = $course_id AND
- lv.c_id = $course_id AND
- lv.user_id= $user_id AND li.item_type = 'quiz' AND liw.lp_view_id= $lp_view_id";
- $sum=0;
- $tot=0;
- $rs_list_view1=Database::query($sql_list_view);
- while ($row_list_view=Database::fetch_array($rs_list_view1)) {
- $sum=$sum+$row_list_view['sum_data'];
- $tot++;
- }
- if ($tot==0) {
- $tot=1;
- }
- $average_data1=$sum/$tot;
-
- $sql_list_view='';
- $rs_last_lp_view_id='';
-
- } elseif ($row_type['lp_type']==2) {
- //lp scorm
- $sql = "SELECT id FROM $lp_view_table WHERE c_id = $course_id AND user_id = '".intval($user_id)."' and lp_id='".$row_type['id']."'";
- $rs_last_lp_view_id = Database::query($sql);
- $lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id'));
-
- $sql_list_view = "SELECT li.max_score,lv.user_id,liw.score,((liw.score/li.max_score)*100) as sum_data
- FROM $lp_item_table li INNER JOIN $lp_view_table lv
- ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id
- WHERE li.c_id = $course_id AND
- liw.c_id = $course_id AND
- lv.c_id = $course_id AND
- lv.user_id= $user_id AND (li.item_type = 'sco' OR li.item_type='quiz') AND liw.lp_view_id = $lp_view_id";
- $tot=0;
- $sum=0;
-
- $rs_list_view2=Database::query($sql_list_view);
- while ($row_list_view=Database::fetch_array($rs_list_view2)) {
- $sum=$sum+$row_list_view['sum_data'];
- $tot++;
- }
- if ($tot==0) {
- $tot=1;
- }
- $average_data2=$sum/$tot;
+ return $a_students;
+ }
+
+ /**
+ * Gets the average of test and scorm inside a learning path
+ * @param int User id
+ * @param string Course id
+ * @return float average of test
+ * @author isaac flores paz
+ * @deprecated get_avg_student_score should be use
+ */
+ public static function get_average_test_scorm_and_lp ($user_id, $course_id) {
+
+ //the score inside the Reporting table
+ $course_info = api_get_course_info($course_id);
+ $course_id = $course_info['real_id'];
+
+ $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
+ $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW);
+ $lp_item_view_table = Database :: get_course_table(TABLE_LP_ITEM_VIEW);
+ $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM);
+
+ $sql_type = "SELECT id, lp_type FROM $lp_table WHERE c_id = $course_id";
+ $rs_type=Database::query($sql_type);
+ $average_data=0;
+ $count_loop=0;
+ $lp_list = array();
+ while ($row_type = Database::fetch_array($rs_type)) {
+ $lp_list[] = $row_type['id'];
+ if ($row_type['lp_type']==1) {
+ //lp chamilo
+
+ $sql = "SELECT id FROM $lp_view_table WHERE c_id = $course_id AND user_id = '".intval($user_id)."' and lp_id='".$row_type['id']."'";
+ $rs_last_lp_view_id = Database::query($sql);
+ $lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id'));
+
+ $sql_list_view="SELECT li.max_score,lv.user_id,liw.score,(liw.score/li.max_score) as sum_data
+ FROM $lp_item_table li INNER JOIN $lp_view_table lv
+ ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id
+ WHERE li.c_id = $course_id AND
+ liw.c_id = $course_id AND
+ lv.c_id = $course_id AND
+ lv.user_id= $user_id AND li.item_type = 'quiz' AND liw.lp_view_id= $lp_view_id";
+ $sum=0;
+ $tot=0;
+ $rs_list_view1=Database::query($sql_list_view);
+ while ($row_list_view=Database::fetch_array($rs_list_view1)) {
+ $sum=$sum+$row_list_view['sum_data'];
+ $tot++;
+ }
+ if ($tot==0) {
+ $tot=1;
+ }
+ $average_data1=$sum/$tot;
+
+ $sql_list_view='';
+ $rs_last_lp_view_id='';
+
+ } elseif ($row_type['lp_type']==2) {
+ //lp scorm
+ $sql = "SELECT id FROM $lp_view_table WHERE c_id = $course_id AND user_id = '".intval($user_id)."' and lp_id='".$row_type['id']."'";
+ $rs_last_lp_view_id = Database::query($sql);
+ $lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id'));
+
+ $sql_list_view = "SELECT li.max_score,lv.user_id,liw.score,((liw.score/li.max_score)*100) as sum_data
+ FROM $lp_item_table li INNER JOIN $lp_view_table lv
+ ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id
+ WHERE li.c_id = $course_id AND
+ liw.c_id = $course_id AND
+ lv.c_id = $course_id AND
+ lv.user_id= $user_id AND (li.item_type = 'sco' OR li.item_type='quiz') AND liw.lp_view_id = $lp_view_id";
+ $tot=0;
+ $sum=0;
+
+ $rs_list_view2=Database::query($sql_list_view);
+ while ($row_list_view=Database::fetch_array($rs_list_view2)) {
+ $sum=$sum+$row_list_view['sum_data'];
+ $tot++;
+ }
+ if ($tot==0) {
+ $tot=1;
}
- $average_data_sum=$average_data_sum+$average_data1+$average_data2;
- $average_data2=0;
- $average_data1=0;
- $count_loop++;
+ $average_data2=$sum/$tot;
}
+ $average_data_sum=$average_data_sum+$average_data1+$average_data2;
+ $average_data2=0;
+ $average_data1=0;
+ $count_loop++;
+ }
- //We only count the LP that have an exercise to get the average
- $lp_with_quiz = 0;
- foreach($lp_list as $lp_id) {
+ //We only count the LP that have an exercise to get the average
+ $lp_with_quiz = 0;
+ foreach($lp_list as $lp_id) {
- //check if LP have a score
- $sql = "SELECT count(id) as count FROM $lp_item_table
- WHERE c_id = $course_id AND item_type = 'quiz' AND lp_id = ".$lp_id." ";
- $result_have_quiz = Database::query($sql);
+ //check if LP have a score
+ $sql = "SELECT count(id) as count FROM $lp_item_table
+ WHERE c_id = $course_id AND item_type = 'quiz' AND lp_id = ".$lp_id." ";
+ $result_have_quiz = Database::query($sql);
- if (Database::num_rows($result_have_quiz) > 0 ) {
- $row = Database::fetch_array($result_have_quiz,'ASSOC');
- if (is_numeric($row['count']) && $row['count'] != 0) {
- $lp_with_quiz++;
- }
+ if (Database::num_rows($result_have_quiz) > 0 ) {
+ $row = Database::fetch_array($result_have_quiz,'ASSOC');
+ if (is_numeric($row['count']) && $row['count'] != 0) {
+ $lp_with_quiz++;
}
}
+ }
- if ($lp_with_quiz > 0) {
- $avg_student_score = round(($average_data_sum / $lp_with_quiz * 100), 2);
- }
- return $avg_student_score;
+ if ($lp_with_quiz > 0) {
+ $avg_student_score = round(($average_data_sum / $lp_with_quiz * 100), 2);
}
+ return $avg_student_score;
+ }
- /**
- * get count clicks about tools most used by course
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @return array tools data
- */
- public static function get_tools_most_used_by_course($course_code, $session_id = null) {
- //protect data
- $course_code = Database::escape_string($course_code);
- $data = array();
- $TABLETRACK_ACCESS = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
- $condition_session = '';
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = ' AND access_session_id = '. $session_id;
- }
- $sql = "SELECT access_tool, COUNT(DISTINCT access_user_id),count( access_tool ) as count_access_tool
- FROM $TABLETRACK_ACCESS
- WHERE access_tool IS NOT NULL AND access_tool != '' AND access_cours_code = '$course_code' $condition_session
- GROUP BY access_tool
- ORDER BY count_access_tool DESC
- LIMIT 0, 3";
- $rs = Database::query($sql);
- if (Database::num_rows($rs) > 0) {
- while ($row = Database::fetch_array($rs)) {
- $data[] = $row;
- }
+ /**
+ * get count clicks about tools most used by course
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @return array tools data
+ */
+ public static function get_tools_most_used_by_course($course_code, $session_id = null) {
+ //protect data
+ $course_code = Database::escape_string($course_code);
+ $data = array();
+ $TABLETRACK_ACCESS = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
+ $condition_session = '';
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = ' AND access_session_id = '. $session_id;
+ }
+ $sql = "SELECT access_tool, COUNT(DISTINCT access_user_id),count( access_tool ) as count_access_tool
+ FROM $TABLETRACK_ACCESS
+ WHERE access_tool IS NOT NULL AND access_tool != '' AND access_cours_code = '$course_code' $condition_session
+ GROUP BY access_tool
+ ORDER BY count_access_tool DESC
+ LIMIT 0, 3";
+ $rs = Database::query($sql);
+ if (Database::num_rows($rs) > 0) {
+ while ($row = Database::fetch_array($rs)) {
+ $data[] = $row;
}
- return $data;
}
+ return $data;
+ }
- /**
- * get documents most downloaded by course
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @param int Limit (optional, default = 0, 0 = without limit)
- * @return array documents downloaded
- */
- public static function get_documents_most_downloaded_by_course($course_code, $session_id = null, $limit = 0) {
+ /**
+ * get documents most downloaded by course
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @param int Limit (optional, default = 0, 0 = without limit)
+ * @return array documents downloaded
+ */
+ public static function get_documents_most_downloaded_by_course($course_code, $session_id = null, $limit = 0) {
- //protect data
- $course_code = Database::escape_string($course_code);
- $data = array();
+ //protect data
+ $course_code = Database::escape_string($course_code);
+ $data = array();
- $TABLETRACK_DOWNLOADS = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
- $condition_session = '';
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = ' AND down_session_id = '. $session_id;
- }
- $sql = "SELECT down_doc_path, COUNT(DISTINCT down_user_id), COUNT(down_doc_path) as count_down
- FROM $TABLETRACK_DOWNLOADS
- WHERE down_cours_id = '$course_code'
- $condition_session
- GROUP BY down_doc_path
- ORDER BY count_down DESC
- LIMIT 0, $limit";
- $rs = Database::query($sql);
+ $TABLETRACK_DOWNLOADS = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
+ $condition_session = '';
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = ' AND down_session_id = '. $session_id;
+ }
+ $sql = "SELECT down_doc_path, COUNT(DISTINCT down_user_id), COUNT(down_doc_path) as count_down
+ FROM $TABLETRACK_DOWNLOADS
+ WHERE down_cours_id = '$course_code'
+ $condition_session
+ GROUP BY down_doc_path
+ ORDER BY count_down DESC
+ LIMIT 0, $limit";
+ $rs = Database::query($sql);
- if (Database::num_rows($rs) > 0) {
- while ($row = Database::fetch_array($rs)) {
- $data[] = $row;
- }
+ if (Database::num_rows($rs) > 0) {
+ while ($row = Database::fetch_array($rs)) {
+ $data[] = $row;
}
- return $data;
}
+ return $data;
+ }
- /**
- * get links most visited by course
- * @param string Course code
- * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
- * @return array links most visited
- */
- public static function get_links_most_visited_by_course($course_code, $session_id = null) {
-
- //protect data
- $course_code = Database::escape_string($course_code);
- $course_info = api_get_course_info($course_code);
-
- $course_id = $course_info['real_id'];
-
- $data = array();
+ /**
+ * get links most visited by course
+ * @param string Course code
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+ * @return array links most visited
+ */
+ public static function get_links_most_visited_by_course($course_code, $session_id = null) {
- $TABLETRACK_LINKS = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
- $TABLECOURSE_LINKS = Database::get_course_table(TABLE_LINK);
+ //protect data
+ $course_code = Database::escape_string($course_code);
+ $course_info = api_get_course_info($course_code);
+
+ $course_id = $course_info['real_id'];
+
+ $data = array();
- $condition_session = '';
- if (isset($session_id)) {
- $session_id = intval($session_id);
- $condition_session = ' AND cl.session_id = '.$session_id;
- }
+ $TABLETRACK_LINKS = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
+ $TABLECOURSE_LINKS = Database::get_course_table(TABLE_LINK);
- $sql = "SELECT cl.title, cl.url,count(DISTINCT sl.links_user_id), count(cl.title) as count_visits
- FROM $TABLETRACK_LINKS AS sl, $TABLECOURSE_LINKS AS cl
- WHERE cl.c_id = $course_id AND
- sl.links_link_id = cl.id
- AND sl.links_cours_id = '$course_code'
- $condition_session
- GROUP BY cl.title, cl.url
- ORDER BY count_visits DESC
- LIMIT 0, 3";
- $rs = Database::query($sql);
- if (Database::num_rows($rs) > 0) {
- while ($row = Database::fetch_array($rs)) {
- $data[] = $row;
- }
+ $condition_session = '';
+ if (isset($session_id)) {
+ $session_id = intval($session_id);
+ $condition_session = ' AND cl.session_id = '.$session_id;
+ }
+
+ $sql = "SELECT cl.title, cl.url,count(DISTINCT sl.links_user_id), count(cl.title) as count_visits
+ FROM $TABLETRACK_LINKS AS sl, $TABLECOURSE_LINKS AS cl
+ WHERE cl.c_id = $course_id AND
+ sl.links_link_id = cl.id
+ AND sl.links_cours_id = '$course_code'
+ $condition_session
+ GROUP BY cl.title, cl.url
+ ORDER BY count_visits DESC
+ LIMIT 0, 3";
+ $rs = Database::query($sql);
+ if (Database::num_rows($rs) > 0) {
+ while ($row = Database::fetch_array($rs)) {
+ $data[] = $row;
}
- return $data;
}
+ return $data;
+ }
- /**
- * Shows the user progress (when clicking in the Progress tab)
- * @param int user id
- * @return string html code
- */
- function show_user_progress($user_id, $session_id = 0, $extra_params = '', $show_courses = true) {
- require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.class.php';
-
- global $_configuration;
- $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
- $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
- $tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
- $tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
- $tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
- $user_id = intval($user_id);
+ /**
+ * Shows the user progress (when clicking in the Progress tab)
+ * @param int user id
+ * @return string html code
+ */
+ function show_user_progress($user_id, $session_id = 0, $extra_params = '', $show_courses = true) {
+ require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.class.php';
+
+ global $_configuration;
+ $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+ $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
+ $tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+ $tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
+ $tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
+ $user_id = intval($user_id);
+
+ // get course list
+ if ($_configuration['multiple_access_urls']) {
+ $sql = 'SELECT cu.course_code as code, title
+ FROM '.$tbl_course_user.' cu INNER JOIN '.$tbl_access_rel_course.' a ON(a.course_code = cu.course_code) INNER JOIN '.$tbl_course.' c ON( cu.course_code = c.code)
+ WHERE user_id='.$user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' AND access_url_id = '.api_get_current_access_url_id().' ORDER BY title ';
+ } else {
+ $sql = 'SELECT course_code as code, title FROM '.$tbl_course_user.' u INNER JOIN '.$tbl_course.' c ON(course_code = c.code)
+ WHERE u.user_id='.$user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' ORDER BY title ';
+ }
- // get course list
- if ($_configuration['multiple_access_urls']) {
- $sql = 'SELECT cu.course_code as code, title
- FROM '.$tbl_course_user.' cu INNER JOIN '.$tbl_access_rel_course.' a ON(a.course_code = cu.course_code) INNER JOIN '.$tbl_course.' c ON( cu.course_code = c.code)
- WHERE user_id='.$user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' AND access_url_id = '.api_get_current_access_url_id().' ORDER BY title ';
- } else {
- $sql = 'SELECT course_code as code, title FROM '.$tbl_course_user.' u INNER JOIN '.$tbl_course.' c ON(course_code = c.code)
- WHERE u.user_id='.$user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' ORDER BY title ';
- }
+ $rs = Database::query($sql);
+ $courses = $course_in_session = $temp_course_in_session = array();
+
+ $courses = array();
+ while($row = Database :: fetch_array($rs, 'ASSOC')) {
+ $courses[$row['code']] = $row['title'];
+ }
+
+ /*
+ if (!empty($courses)) {
+ //sort need to be improved
+ sort($courses);
+ }*/
+
+ // Get the list of sessions where the user is subscribed as student
+ if ($_configuration['multiple_access_urls']) {
+ $sql = 'SELECT DISTINCT cu.course_code, id_session as session_id, name FROM '.$tbl_session_course_user.' cu INNER JOIN '.$tbl_access_rel_session.' a ON(a.session_id = cu.id_session) INNER JOIN '.$tbl_session.' s ON(s.id = a.session_id)
+ WHERE id_user='.$user_id.' AND access_url_id = '.api_get_current_access_url_id().' ORDER BY name ';
+ } else {
+ $sql = 'SELECT DISTINCT course_code, id_session as session_id, name FROM '.$tbl_session_course_user.' u INNER JOIN '.$tbl_session.' s ON(s.id = u.id_session)
+ WHERE id_user='.$user_id.' ORDER BY name ';
+ }
- $rs = Database::query($sql);
- $courses = $course_in_session = $temp_course_in_session = array();
+ $rs = Database::query($sql);
+ $simple_session_array = array();
+ while ($row = Database :: fetch_array($rs)) {
+ $course_info = CourseManager::get_course_information($row['course_code']);
+ $temp_course_in_session[$row['session_id']]['course_list'][$course_info['id']] = $course_info;
+ $temp_course_in_session[$row['session_id']]['name'] = $row['name'];
+ $simple_session_array[$row['session_id']] = $row['name'];
+ }
+ foreach($simple_session_array as $my_session_id => $session_name) {
+ $course_list = $temp_course_in_session[$my_session_id]['course_list'];
+ $my_course_data = array();
- $courses = array();
- while($row = Database :: fetch_array($rs, 'ASSOC')) {
- $courses[$row['code']] = $row['title'];
+ foreach($course_list as $course_data) {
+ $my_course_data[$course_data['id']] = $course_data['title'];
}
-
- /*
- if (!empty($courses)) {
- //sort need to be improved
- sort($courses);
- }*/
+ $my_course_data = utf8_sort($my_course_data);
+ $final_course_data = array();
- // Get the list of sessions where the user is subscribed as student
- if ($_configuration['multiple_access_urls']) {
- $sql = 'SELECT DISTINCT cu.course_code, id_session as session_id, name FROM '.$tbl_session_course_user.' cu INNER JOIN '.$tbl_access_rel_session.' a ON(a.session_id = cu.id_session) INNER JOIN '.$tbl_session.' s ON(s.id = a.session_id)
- WHERE id_user='.$user_id.' AND access_url_id = '.api_get_current_access_url_id().' ORDER BY name ';
- } else {
- $sql = 'SELECT DISTINCT course_code, id_session as session_id, name FROM '.$tbl_session_course_user.' u INNER JOIN '.$tbl_session.' s ON(s.id = u.id_session)
- WHERE id_user='.$user_id.' ORDER BY name ';
+ foreach($my_course_data as $course_id => $value) {
+ $final_course_data[$course_id] = $course_list[$course_id];
}
+ $course_in_session[$my_session_id]['course_list'] = $final_course_data;
+ $course_in_session[$my_session_id]['name'] = $session_name;
+ }
+
+ $html = '';
- $rs = Database::query($sql);
- $simple_session_array = array();
- while ($row = Database :: fetch_array($rs)) {
- $course_info = CourseManager::get_course_information($row['course_code']);
- $temp_course_in_session[$row['session_id']]['course_list'][$course_info['id']] = $course_info;
- $temp_course_in_session[$row['session_id']]['name'] = $row['name'];
- $simple_session_array[$row['session_id']] = $row['name'];
- }
- foreach($simple_session_array as $my_session_id => $session_name) {
- $course_list = $temp_course_in_session[$my_session_id]['course_list'];
- $my_course_data = array();
-
- foreach($course_list as $course_data) {
- $my_course_data[$course_data['id']] = $course_data['title'];
- }
- $my_course_data = utf8_sort($my_course_data);
- $final_course_data = array();
-
- foreach($my_course_data as $course_id => $value) {
- $final_course_data[$course_id] = $course_list[$course_id];
- }
- $course_in_session[$my_session_id]['course_list'] = $final_course_data;
- $course_in_session[$my_session_id]['name'] = $session_name;
- }
-
- $html = '';
+ // Course list
+
+ if ($show_courses) {
+ if (!empty($courses)) {
+ $html .= Display::tag('h1', Display::return_icon('course.png', get_lang('MyCourses'), array(), 22).' '.get_lang('MyCourses'));
+ $html .= '';
+ $html .= '
+ '.Display::tag('th', get_lang('Course'), array('width'=>'300px')).'
+ '.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('Progress'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('Score').Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')),array('class'=>'head')).'
+ '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('Details'), array('class'=>'head')).'
+ ';
- // Course list
-
- if ($show_courses) {
- if (!empty($courses)) {
- $html .= Display::tag('h1', Display::return_icon('course.png', get_lang('MyCourses'), array(), 22).' '.get_lang('MyCourses'));
- $html .= '';
- $html .= '
- '.Display::tag('th', get_lang('Course'), array('width'=>'300px')).'
- '.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('Progress'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('Score').Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')),array('class'=>'head')).'
- '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('Details'), array('class'=>'head')).'
- ';
-
- foreach ($courses as $course_code => $course_title) {
- $weighting = 0;
-
- $total_time_login = Tracking :: get_time_spent_on_the_course($user_id, $course_code);
- $time = api_time_to_hms($total_time_login);
- $progress = Tracking :: get_avg_student_progress($user_id, $course_code);
- $percentage_score = Tracking :: get_avg_student_score($user_id, $course_code, array());
- $last_connection = Tracking :: get_last_connection_date_on_the_course($user_id, $course_code);
-
- if ($course_code == $_GET['course'] && empty($_GET['session_id'])) {
- $html .= '';
- } else {
- $html .= ' ';
- }
- $url = api_get_course_url($course_code, $session_id);
- $course_url = Display::url($course_title, $url, array('target'=>SESSION_LINK_TARGET));
- $html .= ''.$course_url.' ';
+ foreach ($courses as $course_code => $course_title) {
+ $weighting = 0;
- $html .= ''.$time.' ';
- $html .= ''.$progress.'% ';
+ $total_time_login = Tracking :: get_time_spent_on_the_course($user_id, $course_code);
+ $time = api_time_to_hms($total_time_login);
+ $progress = Tracking :: get_avg_student_progress($user_id, $course_code);
+ $percentage_score = Tracking :: get_avg_student_score($user_id, $course_code, array());
+ $last_connection = Tracking :: get_last_connection_date_on_the_course($user_id, $course_code);
- $html .= '';
- if (is_numeric($percentage_score)) {
- $html .= $percentage_score.'%';
- } else {
- $html .= '0%';
- }
- $html .= ' ';
- $html .= ''.$last_connection.' ';
- $html .= '';
- if ($course_code == $_GET['course'] && empty($_GET['session_id'])) {
- $html .= '';
- $html .= Display::return_icon('2rightarrow_na.gif', get_lang('Details'));
- } else {
- $html .= ' ';
- $html .= Display::return_icon('2rightarrow.gif', get_lang('Details'));
- }
- $html .= ' ';
- $html .= ' ';
+ if ($course_code == $_GET['course'] && empty($_GET['session_id'])) {
+ $html .= '';
+ } else {
+ $html .= ' ';
}
- $html .= '
';
- }
- }
+ $url = api_get_course_url($course_code, $session_id);
+ $course_url = Display::url($course_title, $url, array('target'=>SESSION_LINK_TARGET));
+ $html .= ''.$course_url.' ';
- // Session list
- if (!empty($course_in_session)) {
- $main_session_graph = '';
-
- if (!isset($_GET['session_id']) && !isset($_GET['course'])) {
-
- //Load graphics only when calling to an specific session
- $session_graph = array();
-
- $all_exercise_graph_name_list = array();
- $all_user_results = array();
- $all_exercise_graph_list = array();
-
- $all_exercise_start_time = array();
-
- foreach ($course_in_session as $my_session_id => $session_data) {
-
- $course_list = $session_data['course_list'];
- $session_name = $session_data['name'];
-
- $user_count = count(SessionManager::get_users_by_session($my_session_id));
-
- $exercise_graph_name_list = array();
- $user_results = array();
- $exercise_graph_list = array();
-
- foreach ($course_list as $course_data) {
-
- $exercise_list = get_all_exercises($course_data, $my_session_id);
-
- foreach($exercise_list as $exercise_data) {
- $exercise_obj = new Exercise($course_data['id']);
- $exercise_obj->read($exercise_data['id']);
- if ($exercise_obj->is_visible()) {
- $best_average = intval(get_best_average_score_by_exercise($exercise_data['id'], $course_data['code'], $my_session_id, $user_count));
- $exercise_graph_list[] = $best_average;
- $all_exercise_graph_list[] = $best_average;
-
- $user_result_data = get_best_attempt_by_user(api_get_user_id(), $exercise_data['id'], $course_data['code'], $my_session_id);
- $score = 0;
- if (!empty($user_result_data['exe_weighting']) && intval($user_result_data['exe_weighting']) != 0) {
- $score = intval($user_result_data['exe_result']/$user_result_data['exe_weighting'] * 100);
- }
- //$user_results[] = 100;
- $user_results[] = $score;
- $time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time']) : 0;
- $all_exercise_start_time[] = $time ;
- $all_user_results[] = $score;
- if (count($exercise_list)<=10) {
- $title = cut($course_data['title'], 30)." \n ".cut($exercise_data['title'], 30);
- $exercise_graph_name_list[]= $title;
- $all_exercise_graph_name_list[] = $title;
- } else {
- // if there are more than 10 results, space becomes difficult to find, so only show the title of the exercise, not the tool
- $title = cut($exercise_data['title'], 30);
- $exercise_graph_name_list[]= $title;
- $all_exercise_graph_name_list[]= $title;
- }
- }
- }
- }
- //Graph per session
- if (!empty($user_results) && !empty($exercise_graph_list)) {
- //$session_graph[$my_session_id] = self::generate_session_exercise_graph($exercise_graph_name_list, $user_results, $exercise_graph_list);
- }
+ $html .= ''.$time.' ';
+ $html .= ''.$progress.'% ';
+
+ $html .= '';
+ if (is_numeric($percentage_score)) {
+ $html .= $percentage_score.'%';
+ } else {
+ $html .= '0%';
}
-
-
- //Complete graph
- if (!empty($all_user_results) && !empty($all_exercise_graph_list)) {
- asort($all_exercise_start_time);
-
- //Fix exams order
- $final_all_exercise_graph_name_list = array();
- $final_all_user_results = array();
- $final_all_exercise_graph_list = array();
-
- foreach($all_exercise_start_time as $key => $time) {
- $label_time = '';
- if (!empty($time)) {
- $label_time = date('d-m-y', $time);
- //$label_time = api_format_date($time, DATE_FORMAT_NUMBER);
- }
- $final_all_exercise_graph_name_list[] = $all_exercise_graph_name_list[$key].' '.$label_time;
- $final_all_user_results[] = $all_user_results[$key];
- $final_all_exercise_graph_list[] = $all_exercise_graph_list[$key];
- }
- //var_dump($final_all_exercise_graph_name_list, $final_all_user_results, $final_all_exercise_graph_list);
- $main_session_graph = self::generate_session_exercise_graph($final_all_exercise_graph_name_list, $final_all_user_results, $final_all_exercise_graph_list);
+ $html .= ' ';
+ $html .= ''.$last_connection.' ';
+ $html .= '';
+ if ($course_code == $_GET['course'] && empty($_GET['session_id'])) {
+ $html .= '';
+ $html .= Display::return_icon('2rightarrow_na.gif', get_lang('Details'));
+ } else {
+ $html .= ' ';
+ $html .= Display::return_icon('2rightarrow.gif', get_lang('Details'));
}
+ $html .= ' ';
+ $html .= ' ';
}
+ $html .= '
';
+ }
+ }
+
+ // Session list
+ if (!empty($course_in_session)) {
+ $main_session_graph = '';
+
+ if (!isset($_GET['session_id']) && !isset($_GET['course'])) {
+
+ //Load graphics only when calling to an specific session
+ $session_graph = array();
+ $all_exercise_graph_name_list = array();
+ $all_user_results = array();
+ $all_exercise_graph_list = array();
- $html .= Display::tag('h1',Display::return_icon('session.png', get_lang('Sessions'), array(), 22).' '.get_lang('Sessions'));
+ $all_exercise_start_time = array();
- $html .= '';
- //'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).'
- $html .= '
- '.Display::tag('th', get_lang('Session'), array('width'=>'300px')).'
- '.Display::tag('th', get_lang('PublishedExercises'), array('width'=>'300px')).'
- '.Display::tag('th', get_lang('NewExercises'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('AverageExerciseResult'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('Details'), array('class'=>'head')).'
- ';
-
foreach ($course_in_session as $my_session_id => $session_data) {
- $course_list = $session_data['course_list'];
+
+ $course_list = $session_data['course_list'];
$session_name = $session_data['name'];
-
- if (isset($session_id) && !empty($session_id)) {
- if ($session_id != $my_session_id) {
- continue;
- }
- }
-
- $all_exercises = 0;
- $all_unanswered_exercises_by_user = 0;
- $all_done_exercise = 0;
- $all_average = 0;
-
- $stats_array = array();
-
- foreach($course_list as $course_data) {
- //All exercises in the course @todo change for a real count
- $exercises = get_all_exercises($course_data, $my_session_id);
- $count_exercises = 0;
- if (!empty($exercises)) {
- $count_exercises = count($exercises);
- }
-
- //Count of user results
- //$done_exercises = get_count_exercises_attempted_by_course($course_data['code'], $my_session_id);
- $done_exercises = null;
+
+ $user_count = count(SessionManager::get_users_by_session($my_session_id));
+
+ $exercise_graph_name_list = array();
+ $user_results = array();
+ $exercise_graph_list = array();
+
+ foreach ($course_list as $course_data) {
+
+ $exercise_list = get_all_exercises($course_data, $my_session_id);
- $answered_exercises = 0;
- if (!empty($exercises)) {
- foreach($exercises as $exercise_item) {
- $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_data['code'], $my_session_id);
- if ($attempts > 1) {
- $answered_exercises++;
+ foreach($exercise_list as $exercise_data) {
+ $exercise_obj = new Exercise($course_data['id']);
+ $exercise_obj->read($exercise_data['id']);
+ if ($exercise_obj->is_visible()) {
+ $best_average = intval(get_best_average_score_by_exercise($exercise_data['id'], $course_data['code'], $my_session_id, $user_count));
+ $exercise_graph_list[] = $best_average;
+ $all_exercise_graph_list[] = $best_average;
+
+ $user_result_data = get_best_attempt_by_user(api_get_user_id(), $exercise_data['id'], $course_data['code'], $my_session_id);
+ $score = 0;
+ if (!empty($user_result_data['exe_weighting']) && intval($user_result_data['exe_weighting']) != 0) {
+ $score = intval($user_result_data['exe_result']/$user_result_data['exe_weighting'] * 100);
}
- }
- }
-
- //Average
- $average = get_average_score_by_course($course_data['code'], $my_session_id);
-
- $all_exercises += $count_exercises;
-
- $all_unanswered_exercises_by_user += $count_exercises - $answered_exercises;
- //$all_done_exercise += $done_exercises;
- $all_average += $average;
- //$stats_array[$course_data['code']] = array('exercises'=>$count_exercises, 'unanswered_exercises_by_user'=>$answered_exercises,'done_exercises'=>$done_exercises, 'average'=>$average);
- }
-
- $all_average = $all_average / count($course_list);
-
- if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) {
- $html .= '';
- } else {
- $html .= ' ';
+ //$user_results[] = 100;
+ $user_results[] = $score;
+ $time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time']) : 0;
+ $all_exercise_start_time[] = $time ;
+ $all_user_results[] = $score;
+ if (count($exercise_list)<=10) {
+ $title = cut($course_data['title'], 30)." \n ".cut($exercise_data['title'], 30);
+ $exercise_graph_name_list[]= $title;
+ $all_exercise_graph_name_list[] = $title;
+ } else {
+ // if there are more than 10 results, space becomes difficult to find, so only show the title of the exercise, not the tool
+ $title = cut($exercise_data['title'], 30);
+ $exercise_graph_name_list[]= $title;
+ $all_exercise_graph_name_list[]= $title;
+ }
+ }
+ }
}
- $url = api_get_path(WEB_CODE_PATH)."session/?session_id={$my_session_id}";
-
- $html .= Display::tag('td', Display::url($session_name, $url, array('target'=>SESSION_LINK_TARGET)));
- $html .= Display::tag('td', $all_exercises);
- $html .= Display::tag('td', $all_unanswered_exercises_by_user);
-
- //$html .= Display::tag('td', $all_done_exercise);
- $html .= Display::tag('td', convert_to_percentage($all_average));
-
- if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) {
- $icon = Display::url(Display::return_icon('2rightarrow_na.gif', get_lang('Details')), '?session_id='.$my_session_id);
- } else {
- $icon = Display::url(Display::return_icon('2rightarrow.gif', get_lang('Details')), '?session_id='.$my_session_id);
+ //Graph per session
+ if (!empty($user_results) && !empty($exercise_graph_list)) {
+ //$session_graph[$my_session_id] = self::generate_session_exercise_graph($exercise_graph_name_list, $user_results, $exercise_graph_list);
}
- $html .= Display::tag('td', $icon);
- $html .= ' ';
}
- $html .= '
';
- $html .= Display::div($main_session_graph, array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') );
- //Checking selected session
-
- if (isset($_GET['session_id'])) {
- $session_id_from_get = intval($_GET['session_id']);
-
- $session_data = $course_in_session[$session_id_from_get];
- $course_list = $session_data['course_list'];
+
+ //Complete graph
+ if (!empty($all_user_results) && !empty($all_exercise_graph_list)) {
+ asort($all_exercise_start_time);
+
+ //Fix exams order
+ $final_all_exercise_graph_name_list = array();
+ $final_all_user_results = array();
+ $final_all_exercise_graph_list = array();
- $html .= Display::tag('h2',$session_data['name'].' - '.get_lang('CourseList'));
-
- $html .= '';
- //'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).'
- $html .= '
-
- '.get_lang('Course').'
- '.Display::tag('th', get_lang('PublishedExercises'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('NewExercises'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('MyAverage'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('AverageExerciseResult'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('LPProgress') , array('class'=>'head')).'
- '.Display::tag('th', get_lang('Score').Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array ('align' => 'absmiddle', 'hspace' => '3px')), array('class'=>'head')).'
- '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).'
- '.Display::tag('th', get_lang('Details'), array('class'=>'head')).'
- ';
-
- foreach ($course_list as $course_data) {
- $course_code = $course_data['code'];
- $course_title = $course_data['title'];
-
- //All exercises in the course @todo change for a real count
- $exercises = get_all_exercises($course_data, $session_id_from_get);
- $count_exercises = 0;
- if (!empty($exercises)) {
- $count_exercises = count($exercises);
- }
- //Count of user results
- //$done_exercises = get_best_exercise_results_by_course($course_code, $session_id_from_get);
-
- //From course exercises NOT from LP exercises!!!
- //$done_exercises = get_count_exercises_attempted_by_course($course_code, $session_id_from_get);
- $answered_exercises = 0;
- foreach($exercises as $exercise_item) {
- $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_code, $session_id_from_get);
- if ($attempts > 1) {
- $answered_exercises++;
- }
- }
-
- $unanswered_exercises = $count_exercises - $answered_exercises;
-
- //Average
- $average = get_average_score_by_course($course_code, $session_id_from_get);
- $my_average = get_average_score_by_course_by_user(api_get_user_id(), $course_code, $session_id_from_get);
-
- $stats_array[$course_code] = array( 'exercises' => $count_exercises,
- 'unanswered_exercises_by_user' => $unanswered_exercises,
- 'done_exercises' => $done_exercises,
- 'average' => $average,
- 'my_average' => $my_average);
-
- $weighting = 0;
- $last_connection = Tracking :: get_last_connection_date_on_the_course($user_id, $course_code, $session_id_from_get);
- $progress = Tracking :: get_avg_student_progress($user_id, $course_code,array(), $session_id_from_get);
- $total_time_login = Tracking :: get_time_spent_on_the_course($user_id, $course_code, $session_id_from_get);
- $time = api_time_to_hms($total_time_login);
- $percentage_score = Tracking :: get_avg_student_score($user_id, $course_code, array(), $session_id_from_get);
-
- if ($course_code == $_GET['course'] && $_GET['session_id'] == $session_id_from_get) {
- $html .= '';
- } else {
- $html .= ' ';
- }
-
- $url = api_get_course_url($course_code, $session_id_from_get);
- $course_url = Display::url($course_title, $url, array('target'=>SESSION_LINK_TARGET));
-
- $html .= Display::tag('td', $course_url);
- $html .= Display::tag('td', $stats_array[$course_code]['exercises']);
- $html .= Display::tag('td', $stats_array[$course_code]['unanswered_exercises_by_user']);
- //$html .= Display::tag('td', $stats_array[$course_code]['done_exercises']);
- $html .= Display::tag('td', convert_to_percentage($stats_array[$course_code]['my_average']));
-
- $html .= Display::tag('td', $stats_array[$course_code]['average'] == 0 ? '-' : '('.convert_to_percentage($stats_array[$course_code]['average']).')');
- $html .= Display::tag('td', $time, array('align'=>'center'));
-
- if (is_numeric($progress)) {
- $progress = $progress.'%';
- } else {
- $progress = '0%';
- }
- //Progress
- $html .= Display::tag('td', $progress, array('align'=>'center'));
- if (is_numeric($percentage_score)) {
- $percentage_score = $percentage_score.'%';
- } else {
- $percentage_score = '0%';
- }
- //Score
- $html .= Display::tag('td', $percentage_score, array('align'=>'center'));
- $html .= Display::tag('td', $last_connection, array('align'=>'center'));
-
- if ($course_code == $_GET['course'] && $_GET['session_id'] == $session_id_from_get) {
- $details = '';
- $details .=Display::return_icon('2rightarrow_na.gif', get_lang('Details'));
- } else {
- $details = ' ';
- $details .=Display::return_icon('2rightarrow.gif', get_lang('Details'));
+ foreach($all_exercise_start_time as $key => $time) {
+ $label_time = '';
+ if (!empty($time)) {
+ $label_time = date('d-m-y', $time);
+ //$label_time = api_format_date($time, DATE_FORMAT_NUMBER);
}
- $details .= ' ';
- $html .= Display::tag('td', $details, array('align'=>'center'));
- $html .= ' ';
+ $final_all_exercise_graph_name_list[] = $all_exercise_graph_name_list[$key].' '.$label_time;
+ $final_all_user_results[] = $all_user_results[$key];
+ $final_all_exercise_graph_list[] = $all_exercise_graph_list[$key];
}
- $html .= '
';
-
- if (!empty($session_graph[$session_id_from_get])) {
- //$html .= Display::div($session_graph[$session_id_from_get], array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') );
- }
-
+ //var_dump($final_all_exercise_graph_name_list, $final_all_user_results, $final_all_exercise_graph_list);
+ $main_session_graph = self::generate_session_exercise_graph($final_all_exercise_graph_name_list, $final_all_user_results, $final_all_exercise_graph_list);
}
}
- if (!empty($html)) {
- $html = Display::div($html, array('class'=>'rounded_div', 'style'=>'position:relative; float:none; width:95%'));
- }
- return $html;
- }
-
-
- /**
- * Shows the user detail progress (when clicking in the details link)
- * @param int user id
- * @param string course code
- * @param int session id
- * @return string html code
- */
- function show_course_detail($user_id, $course_code, $session_id) {
- $html = '';
- if (isset($course_code)) {
- require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php';
-
- $user_id = intval($user_id);
- $session_id = intval($session_id);
- $course = Database::escape_string($course_code);
- $course_info = CourseManager::get_course_information($course);
-
- $course_id = $course_info['real_id'];
-
- $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
- $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
- $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
- $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
-
- $tbl_course_lp = Database :: get_course_table(TABLE_LP_MAIN);
- $tbl_course_quiz = Database :: get_course_table(TABLE_QUIZ_TEST);
-
- $session_name = api_get_session_name($session_id);
- $html .= Display::tag('h2', $course_info['title']);
-
- $html .= '';
-
- // This code was commented on purpose see BT#924
-
- /*$sql = 'SELECT visibility FROM '.$course_info['db_name'].'.'.TABLE_TOOL_LIST.' WHERE name="quiz"';
- $result_visibility_tests = Database::query($sql);
-
- if (Database::result($result_visibility_tests, 0, 'visibility') == 1) {*/
-
- //Course details
- $html .= '
- '.get_lang('Exercices').'
- '.get_lang('Attempts').'
- '.get_lang('BestAttempt').'
- '.get_lang('Ranking').'
- '.get_lang('BestResultInCourse').'
- '.get_lang('Statistics').' '.Display :: return_icon('info3.gif', get_lang('OnlyBestResultsPerStudent'), array('align' => 'absmiddle', 'hspace' => '3px')).'
- ';
-
- if (empty($session_id)) {
- $sql_exercices = "SELECT quiz.title,id, results_disabled FROM ".$tbl_course_quiz." AS quiz WHERE c_id = $course_id AND active='1' AND session_id = 0";
- } else {
- $sql_exercices = "SELECT quiz.title,id, results_disabled FROM ".$tbl_course_quiz." AS quiz WHERE c_id = $course_id AND active='1'";
+
+
+ $html .= Display::tag('h1',Display::return_icon('session.png', get_lang('Sessions'), array(), 22).' '.get_lang('Sessions'));
+
+ $html .= '';
+ //'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).'
+ $html .= '
+ '.Display::tag('th', get_lang('Session'), array('width'=>'300px')).'
+ '.Display::tag('th', get_lang('PublishedExercises'), array('width'=>'300px')).'
+ '.Display::tag('th', get_lang('NewExercises'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('AverageExerciseResult'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('Details'), array('class'=>'head')).'
+ ';
+
+ foreach ($course_in_session as $my_session_id => $session_data) {
+ $course_list = $session_data['course_list'];
+ $session_name = $session_data['name'];
+
+ if (isset($session_id) && !empty($session_id)) {
+ if ($session_id != $my_session_id) {
+ continue;
+ }
}
- $result_exercices = Database::query($sql_exercices);
- $to_graph_exercise_result = array();
-
-
- if (empty($session_id)) {
- $user_list = UserManager::get_user_list();
- } else {
- $user_list = SessionManager::get_users_by_session($session_id);
- }
-
- if (Database::num_rows($result_exercices) > 0) {
- $score = $weighting = $exe_id = 0;
- while ($exercices = Database::fetch_array($result_exercices)) {
- //if ($exercices['id'] != 3) continue;
- $score = $weighting = $attempts = 0;
- //Getting count of attempts by user
- $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id);
- //For graphics
- $best_exercise_stats = get_best_exercise_results_by_user($exercices['id'], $course_info['code'], $session_id);
- $to_graph_exercise_result[$exercices['id']] = array('title'=>$exercices['title'], 'data'=>$best_exercise_stats);
-
- $html .= '';
- $url = api_get_path(WEB_CODE_PATH)."exercice/overview.php?cidReq={$course_info['code']}&id_session=$session_id&exerciseId={$exercices['id']}";
- $exercices['title'] = Display::url($exercices['title'], $url, array('target'=>SESSION_LINK_TARGET));
- $html .= Display::tag('td', $exercices['title']);
-
- //Exercise configuration show results show results or show only score
- if ($exercices['results_disabled'] == 0 || $exercices['results_disabled'] == 2) {
- $latest_attempt_url = '';
- $best_score = $position = $percentage_score_result = '-';
- $graph = $normal_graph = null;
-
- //Getting best results
- $best_score_data = get_best_attempt_in_course($exercices['id'], $course_info['code'], $session_id);
- $best_score = show_score($best_score_data['exe_result'], $best_score_data['exe_weighting']);
-
- if ($attempts > 0) {
- $exercise_stat = get_best_attempt_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id);
- if (!empty($exercise_stat)) {
-
- //Always getting the BEST attempt
- $score = $exercise_stat['exe_result'];
- $weighting = $exercise_stat['exe_weighting'];
- $exe_id = $exercise_stat['exe_id'];
-
- //$latest_attempt_url .= ' '.Display::return_icon('quiz.gif', get_lang('Quiz')).' ';
- $latest_attempt_url .= '../exercice/exercise_show.php?origin=myprogress&id='.$exe_id.'&cidReq='.$course_info['code'].'&id_session='.$session_id;
- $percentage_score_result = Display::url(show_score($score, $weighting), $latest_attempt_url);
- $my_score = 0;
- if (!empty($weighting) && intval($weighting) != 0) {
- $my_score = $score/$weighting;
- }
- $position = get_exercise_result_ranking($my_score, $exe_id, $exercices['id'], $course_info['code'], $session_id, $user_list);
-
- $graph = self::generate_exercise_result_thumbnail_graph($to_graph_exercise_result[$exercices['id']]);
- $normal_graph = self::generate_exercise_result_graph($to_graph_exercise_result[$exercices['id']]);
- }
- }
-
- echo Display::div($normal_graph, array('id'=>'main_graph_'.$exercices['id'],'class'=>'dialog', 'style'=>'display:none') );
-
- if (empty($graph)) {
- $graph = '-';
- } else {
- $graph = Display::url($graph, '#', array('id'=>$exercices['id'], 'class'=>'opener'));
+
+ $all_exercises = 0;
+ $all_unanswered_exercises_by_user = 0;
+ $all_done_exercise = 0;
+ $all_average = 0;
+
+ $stats_array = array();
+
+ foreach($course_list as $course_data) {
+ //All exercises in the course @todo change for a real count
+ $exercises = get_all_exercises($course_data, $my_session_id);
+ $count_exercises = 0;
+ if (!empty($exercises)) {
+ $count_exercises = count($exercises);
+ }
+
+ //Count of user results
+ //$done_exercises = get_count_exercises_attempted_by_course($course_data['code'], $my_session_id);
+ $done_exercises = null;
+
+ $answered_exercises = 0;
+ if (!empty($exercises)) {
+ foreach($exercises as $exercise_item) {
+ $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_data['code'], $my_session_id);
+ if ($attempts > 1) {
+ $answered_exercises++;
}
-
- $html .= Display::tag('td', $attempts, array('align'=>'center'));
- $html .= Display::tag('td', $percentage_score_result, array('align'=>'center'));
- $html .= Display::tag('td', $position, array('align'=>'center'));
- $html .= Display::tag('td', $best_score, array('align'=>'center'));
- $html .= Display::tag('td', $graph, array('align'=>'center'));
- //$html .= Display::tag('td', $latest_attempt_url, array('align'=>'center', 'width'=>'25'));
-
- } else {
- // Exercise configuration NO results
- $html .= Display::tag('td', $attempts, array('align'=>'center'));
- $html .= Display::tag('td', '-', array('align'=>'center'));
- $html .= Display::tag('td', '-', array('align'=>'center'));
- $html .= Display::tag('td', '-', array('align'=>'center'));
- $html .= Display::tag('td', '-', array('align'=>'center'));
- }
- $html .= ' ';
+ }
}
+
+ //Average
+ $average = get_average_score_by_course($course_data['code'], $my_session_id);
+
+ $all_exercises += $count_exercises;
+
+ $all_unanswered_exercises_by_user += $count_exercises - $answered_exercises;
+ //$all_done_exercise += $done_exercises;
+ $all_average += $average;
+ //$stats_array[$course_data['code']] = array('exercises'=>$count_exercises, 'unanswered_exercises_by_user'=>$answered_exercises,'done_exercises'=>$done_exercises, 'average'=>$average);
+ }
+
+ $all_average = $all_average / count($course_list);
+
+ if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) {
+ $html .= '';
} else {
- $html .= ' '.get_lang('NoEx').' ';
+ $html .= '';
}
- $html .= '
';
+ $url = api_get_path(WEB_CODE_PATH)."session/?session_id={$my_session_id}";
+ $html .= Display::tag('td', Display::url($session_name, $url, array('target'=>SESSION_LINK_TARGET)));
+ $html .= Display::tag('td', $all_exercises);
+ $html .= Display::tag('td', $all_unanswered_exercises_by_user);
- //LP table results
-
- $html .='';
- $html .= Display::tag('th', get_lang('Learnpaths'), array('class'=>'head', 'style'=>'color:#000'));
- $html .= Display::tag('th', get_lang('LatencyTimeSpent'), array('class'=>'head', 'style'=>'color:#000'));
- $html .= Display::tag('th', get_lang('Progress'), array('class'=>'head', 'style'=>'color:#000'));
- $html .= Display::tag('th', get_lang('Score'), array('class'=>'head', 'style'=>'color:#000'));
- $html .= Display::tag('th', get_lang('LastConnexion'), array('class'=>'head', 'style'=>'color:#000'));
- $html .= '';
-
- if (empty($session_id)) {
- $sql_learnpath = "SELECT lp.name,lp.id FROM ".$tbl_course_lp." AS lp WHERE c_id = $course_id AND session_id = 0 ORDER BY lp.display_order";
+ //$html .= Display::tag('td', $all_done_exercise);
+ $html .= Display::tag('td', convert_to_percentage($all_average));
+
+ if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) {
+ $icon = Display::url(Display::return_icon('2rightarrow_na.gif', get_lang('Details')), '?session_id='.$my_session_id);
} else {
- $sql_learnpath = "SELECT lp.name,lp.id FROM ".$tbl_course_lp." AS lp WHERE c_id = $course_id ORDER BY lp.display_order";
+ $icon = Display::url(Display::return_icon('2rightarrow.gif', get_lang('Details')), '?session_id='.$my_session_id);
}
+ $html .= Display::tag('td', $icon);
+ $html .= '';
+ }
+ $html .= '
';
+ $html .= Display::div($main_session_graph, array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') );
+
+ //Checking selected session
- $result_learnpath = Database::query($sql_learnpath);
- if (Database::num_rows($result_learnpath) > 0) {
- while($learnpath = Database::fetch_array($result_learnpath)) {
- $progress = Tracking::get_avg_student_progress($user_id, $course, array($learnpath['id']), $session_id);
- $last_connection_in_lp = Tracking::get_last_connection_time_in_lp($user_id, $course, $learnpath['id'], $session_id);
- $time_spent_in_lp = Tracking::get_time_spent_in_lp($user_id, $course, array($learnpath['id']), $session_id);
- $percentage_score = Tracking::get_avg_student_score($user_id, $course, array($learnpath['id']), $session_id);
- if (is_numeric($percentage_score)) {
- $percentage_score = $percentage_score.'%';
- } else {
- $percentage_score = '0%';
- }
+ if (isset($_GET['session_id'])) {
+ $session_id_from_get = intval($_GET['session_id']);
- $time_spent_in_lp = api_time_to_hms($time_spent_in_lp);
+ $session_data = $course_in_session[$session_id_from_get];
+ $course_list = $session_data['course_list'];
+
+ $html .= Display::tag('h2',$session_data['name'].' - '.get_lang('CourseList'));
- $html .= '';
- $url = api_get_path(WEB_CODE_PATH)."newscorm/lp_controller.php?cidReq={$course_code}&id_session=$session_id&lp_id={$learnpath['id']}&action=view";
- $html .= Display::tag('td', Display::url($learnpath['name'], $url, array('target'=>SESSION_LINK_TARGET)));
- $html .= Display::tag('td', $time_spent_in_lp, array('align'=>'center'));
- if (is_numeric($progress)) {
- $progress = $progress.'%';
+ $html .= '';
+ //'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).'
+ $html .= '
+
+ '.get_lang('Course').'
+ '.Display::tag('th', get_lang('PublishedExercises'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('NewExercises'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('MyAverage'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('AverageExerciseResult'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('LPProgress') , array('class'=>'head')).'
+ '.Display::tag('th', get_lang('Score').Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array ('align' => 'absmiddle', 'hspace' => '3px')), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).'
+ '.Display::tag('th', get_lang('Details'), array('class'=>'head')).'
+ ';
+
+ foreach ($course_list as $course_data) {
+ $course_code = $course_data['code'];
+ $course_title = $course_data['title'];
+
+ //All exercises in the course @todo change for a real count
+ $exercises = get_all_exercises($course_data, $session_id_from_get);
+ $count_exercises = 0;
+ if (!empty($exercises)) {
+ $count_exercises = count($exercises);
+ }
+ //Count of user results
+ //$done_exercises = get_best_exercise_results_by_course($course_code, $session_id_from_get);
+
+ //From course exercises NOT from LP exercises!!!
+ //$done_exercises = get_count_exercises_attempted_by_course($course_code, $session_id_from_get);
+ $answered_exercises = 0;
+ foreach($exercises as $exercise_item) {
+ $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_code, $session_id_from_get);
+ if ($attempts > 1) {
+ $answered_exercises++;
}
- $html .= Display::tag('td', $progress, array('align'=>'center'));
- $html .= Display::tag('td', $percentage_score);
+ }
+
+ $unanswered_exercises = $count_exercises - $answered_exercises;
+
+ //Average
+ $average = get_average_score_by_course($course_code, $session_id_from_get);
+ $my_average = get_average_score_by_course_by_user(api_get_user_id(), $course_code, $session_id_from_get);
+
+ $stats_array[$course_code] = array( 'exercises' => $count_exercises,
+ 'unanswered_exercises_by_user' => $unanswered_exercises,
+ 'done_exercises' => $done_exercises,
+ 'average' => $average,
+ 'my_average' => $my_average);
+
+ $weighting = 0;
+ $last_connection = Tracking :: get_last_connection_date_on_the_course($user_id, $course_code, $session_id_from_get);
+ $progress = Tracking :: get_avg_student_progress($user_id, $course_code,array(), $session_id_from_get);
+ $total_time_login = Tracking :: get_time_spent_on_the_course($user_id, $course_code, $session_id_from_get);
+ $time = api_time_to_hms($total_time_login);
+ $percentage_score = Tracking :: get_avg_student_score($user_id, $course_code, array(), $session_id_from_get);
+
+ if ($course_code == $_GET['course'] && $_GET['session_id'] == $session_id_from_get) {
+ $html .= '';
+ } else {
+ $html .= ' ';
+ }
- $last_connection = '-';
- if (!empty($last_connection_in_lp)) {
- $last_connection = api_convert_and_format_date($last_connection_in_lp, DATE_TIME_FORMAT_LONG);
- }
- $html .= Display::tag('td', $last_connection, array('align'=>'center','width'=>'180px'));
- $html .= " ";
+ $url = api_get_course_url($course_code, $session_id_from_get);
+ $course_url = Display::url($course_title, $url, array('target'=>SESSION_LINK_TARGET));
+
+ $html .= Display::tag('td', $course_url);
+ $html .= Display::tag('td', $stats_array[$course_code]['exercises']);
+ $html .= Display::tag('td', $stats_array[$course_code]['unanswered_exercises_by_user']);
+ //$html .= Display::tag('td', $stats_array[$course_code]['done_exercises']);
+ $html .= Display::tag('td', convert_to_percentage($stats_array[$course_code]['my_average']));
+
+ $html .= Display::tag('td', $stats_array[$course_code]['average'] == 0 ? '-' : '('.convert_to_percentage($stats_array[$course_code]['average']).')');
+ $html .= Display::tag('td', $time, array('align'=>'center'));
+
+ if (is_numeric($progress)) {
+ $progress = $progress.'%';
+ } else {
+ $progress = '0%';
}
- } else {
- $html .= '
-
- '.get_lang('NoLearnpath').'
-
- ';
+ //Progress
+ $html .= Display::tag('td', $progress, array('align'=>'center'));
+ if (is_numeric($percentage_score)) {
+ $percentage_score = $percentage_score.'%';
+ } else {
+ $percentage_score = '0%';
+ }
+ //Score
+ $html .= Display::tag('td', $percentage_score, array('align'=>'center'));
+ $html .= Display::tag('td', $last_connection, array('align'=>'center'));
+
+ if ($course_code == $_GET['course'] && $_GET['session_id'] == $session_id_from_get) {
+ $details = '';
+ $details .=Display::return_icon('2rightarrow_na.gif', get_lang('Details'));
+ } else {
+ $details = ' ';
+ $details .=Display::return_icon('2rightarrow.gif', get_lang('Details'));
+ }
+ $details .= ' ';
+ $html .= Display::tag('td', $details, array('align'=>'center'));
+ $html .= '';
}
- $html .='
';
- }
- if (!empty($html)) {
- $html = Display::div($html, array('class'=>'rounded_div', 'style'=>'position:relative; float:none; width:95%'));
+ $html .= '
';
+
+ if (!empty($session_graph[$session_id_from_get])) {
+ //$html .= Display::div($session_graph[$session_id_from_get], array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') );
+ }
+
}
- return $html;
}
+ if (!empty($html)) {
+ $html = Display::div($html, array('class'=>'rounded_div', 'style'=>'position:relative; float:none; width:95%'));
+ }
+ return $html;
+ }
- /**
- * Generates an histogram
- *
- * @param array list of exercise names
- * @param array my results 0 to 100
- * @param array average scores 0-100
- */
- function generate_session_exercise_graph($names, $my_results, $average) {
- require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php';
- require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php';
- require_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php';
- $cache = new pCache();
+ /**
+ * Shows the user detail progress (when clicking in the details link)
+ * @param int user id
+ * @param string course code
+ * @param int session id
+ * @return string html code
+ */
+ function show_course_detail($user_id, $course_code, $session_id) {
+ $html = '';
+ if (isset($course_code)) {
+ require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php';
- // Dataset definition
- $data_set = new pData();
+ $user_id = intval($user_id);
+ $session_id = intval($session_id);
+ $course = Database::escape_string($course_code);
+ $course_info = CourseManager::get_course_information($course);
+
+ $course_id = $course_info['real_id'];
- // Dataset definition
- $data_set->AddPoint($average, "Serie1");
- $data_set->AddPoint($my_results, "Serie2");
- $data_set->AddPoint($names, "Serie3");
- $data_set->AddAllSeries();
- $data_set->SetAbsciseLabelSerie('Serie3');
- $data_set->SetSerieName(get_lang('AverageScore'),"Serie1");
- $data_set->SetSerieName(get_lang('MyResults'), "Serie2");
+ $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
+ $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+ $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+ $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+
+ $tbl_course_lp = Database :: get_course_table(TABLE_LP_MAIN);
+ $tbl_course_quiz = Database :: get_course_table(TABLE_QUIZ_TEST);
+
+ $session_name = api_get_session_name($session_id);
+ $html .= Display::tag('h2', $course_info['title']);
+
+ $html .= '';
+
+ // This code was commented on purpose see BT#924
+
+ /*$sql = 'SELECT visibility FROM '.$course_info['db_name'].'.'.TABLE_TOOL_LIST.' WHERE name="quiz"';
+ $result_visibility_tests = Database::query($sql);
+
+ if (Database::result($result_visibility_tests, 0, 'visibility') == 1) {*/
+
+ //Course details
+ $html .= '
+ '.get_lang('Exercices').'
+ '.get_lang('Attempts').'
+ '.get_lang('BestAttempt').'
+ '.get_lang('Ranking').'
+ '.get_lang('BestResultInCourse').'
+ '.get_lang('Statistics').' '.Display :: return_icon('info3.gif', get_lang('OnlyBestResultsPerStudent'), array('align' => 'absmiddle', 'hspace' => '3px')).'
+ ';
+
+ if (empty($session_id)) {
+ $sql_exercices = "SELECT quiz.title,id, results_disabled FROM ".$tbl_course_quiz." AS quiz WHERE c_id = $course_id AND active='1' AND session_id = 0";
+ } else {
+ $sql_exercices = "SELECT quiz.title,id, results_disabled FROM ".$tbl_course_quiz." AS quiz WHERE c_id = $course_id AND active='1'";
+ }
+ $result_exercices = Database::query($sql_exercices);
+ $to_graph_exercise_result = array();
+
+
+ if (empty($session_id)) {
+ $user_list = UserManager::get_user_list();
+ } else {
+ $user_list = SessionManager::get_users_by_session($session_id);
+ }
+
+ if (Database::num_rows($result_exercices) > 0) {
+ $score = $weighting = $exe_id = 0;
+ while ($exercices = Database::fetch_array($result_exercices)) {
+ //if ($exercices['id'] != 3) continue;
+ $score = $weighting = $attempts = 0;
+ //Getting count of attempts by user
+ $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id);
+ //For graphics
+ $best_exercise_stats = get_best_exercise_results_by_user($exercices['id'], $course_info['code'], $session_id);
+ $to_graph_exercise_result[$exercices['id']] = array('title'=>$exercices['title'], 'data'=>$best_exercise_stats);
+
+ $html .= '';
+ $url = api_get_path(WEB_CODE_PATH)."exercice/overview.php?cidReq={$course_info['code']}&id_session=$session_id&exerciseId={$exercices['id']}";
+ $exercices['title'] = Display::url($exercices['title'], $url, array('target'=>SESSION_LINK_TARGET));
+ $html .= Display::tag('td', $exercices['title']);
+
+ //Exercise configuration show results show results or show only score
+ if ($exercices['results_disabled'] == 0 || $exercices['results_disabled'] == 2) {
+ $latest_attempt_url = '';
+ $best_score = $position = $percentage_score_result = '-';
+ $graph = $normal_graph = null;
+
+ //Getting best results
+ $best_score_data = get_best_attempt_in_course($exercices['id'], $course_info['code'], $session_id);
+ $best_score = show_score($best_score_data['exe_result'], $best_score_data['exe_weighting']);
+
+ if ($attempts > 0) {
+ $exercise_stat = get_best_attempt_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id);
+ if (!empty($exercise_stat)) {
+
+ //Always getting the BEST attempt
+ $score = $exercise_stat['exe_result'];
+ $weighting = $exercise_stat['exe_weighting'];
+ $exe_id = $exercise_stat['exe_id'];
+
+ //$latest_attempt_url .= ' '.Display::return_icon('quiz.gif', get_lang('Quiz')).' ';
+ $latest_attempt_url .= '../exercice/exercise_show.php?origin=myprogress&id='.$exe_id.'&cidReq='.$course_info['code'].'&id_session='.$session_id;
+ $percentage_score_result = Display::url(show_score($score, $weighting), $latest_attempt_url);
+ $my_score = 0;
+ if (!empty($weighting) && intval($weighting) != 0) {
+ $my_score = $score/$weighting;
+ }
+ $position = get_exercise_result_ranking($my_score, $exe_id, $exercices['id'], $course_info['code'], $session_id, $user_list);
+
+ $graph = self::generate_exercise_result_thumbnail_graph($to_graph_exercise_result[$exercices['id']]);
+ $normal_graph = self::generate_exercise_result_graph($to_graph_exercise_result[$exercices['id']]);
+ }
+ }
+
+ echo Display::div($normal_graph, array('id'=>'main_graph_'.$exercices['id'],'class'=>'dialog', 'style'=>'display:none') );
+
+ if (empty($graph)) {
+ $graph = '-';
+ } else {
+ $graph = Display::url($graph, '#', array('id'=>$exercices['id'], 'class'=>'opener'));
+ }
+
+ $html .= Display::tag('td', $attempts, array('align'=>'center'));
+ $html .= Display::tag('td', $percentage_score_result, array('align'=>'center'));
+ $html .= Display::tag('td', $position, array('align'=>'center'));
+ $html .= Display::tag('td', $best_score, array('align'=>'center'));
+ $html .= Display::tag('td', $graph, array('align'=>'center'));
+ //$html .= Display::tag('td', $latest_attempt_url, array('align'=>'center', 'width'=>'25'));
+
+ } else {
+ // Exercise configuration NO results
+ $html .= Display::tag('td', $attempts, array('align'=>'center'));
+ $html .= Display::tag('td', '-', array('align'=>'center'));
+ $html .= Display::tag('td', '-', array('align'=>'center'));
+ $html .= Display::tag('td', '-', array('align'=>'center'));
+ $html .= Display::tag('td', '-', array('align'=>'center'));
+ }
+ $html .= ' ';
+ }
+ } else {
+ $html .= ''.get_lang('NoEx').' ';
+ }
+ $html .= '
';
+
+
+ //LP table results
+
+ $html .='';
+ $html .= Display::tag('th', get_lang('Learnpaths'), array('class'=>'head', 'style'=>'color:#000'));
+ $html .= Display::tag('th', get_lang('LatencyTimeSpent'), array('class'=>'head', 'style'=>'color:#000'));
+ $html .= Display::tag('th', get_lang('Progress'), array('class'=>'head', 'style'=>'color:#000'));
+ $html .= Display::tag('th', get_lang('Score'), array('class'=>'head', 'style'=>'color:#000'));
+ $html .= Display::tag('th', get_lang('LastConnexion'), array('class'=>'head', 'style'=>'color:#000'));
+ $html .= '';
+
+ if (empty($session_id)) {
+ $sql_learnpath = "SELECT lp.name,lp.id FROM ".$tbl_course_lp." AS lp WHERE c_id = $course_id AND session_id = 0 ORDER BY lp.display_order";
+ } else {
+ $sql_learnpath = "SELECT lp.name,lp.id FROM ".$tbl_course_lp." AS lp WHERE c_id = $course_id ORDER BY lp.display_order";
+ }
- //$data_set->SetYAxisName(get_lang("Percentage"));
+ $result_learnpath = Database::query($sql_learnpath);
+ if (Database::num_rows($result_learnpath) > 0) {
+ while($learnpath = Database::fetch_array($result_learnpath)) {
+ $progress = Tracking::get_avg_student_progress($user_id, $course, array($learnpath['id']), $session_id);
+ $last_connection_in_lp = Tracking::get_last_connection_time_in_lp($user_id, $course, $learnpath['id'], $session_id);
+ $time_spent_in_lp = Tracking::get_time_spent_in_lp($user_id, $course, array($learnpath['id']), $session_id);
+ $percentage_score = Tracking::get_avg_student_score($user_id, $course, array($learnpath['id']), $session_id);
+ if (is_numeric($percentage_score)) {
+ $percentage_score = $percentage_score.'%';
+ } else {
+ $percentage_score = '0%';
+ }
- $data_set->SetYAxisUnit("%");
+ $time_spent_in_lp = api_time_to_hms($time_spent_in_lp);
- // Initialise the graph
- $main_width = 860;
- $main_height = 500;
- $y_label_angle = 50;
- $data_set->RemoveSerie("Serie3");
- $graph = new pChart($main_width, $main_height);
- //See 3.2 BT#2797
- $graph->setFixedScale(0,100);
+ $html .= '';
+ $url = api_get_path(WEB_CODE_PATH)."newscorm/lp_controller.php?cidReq={$course_code}&id_session=$session_id&lp_id={$learnpath['id']}&action=view";
+ $html .= Display::tag('td', Display::url($learnpath['name'], $url, array('target'=>SESSION_LINK_TARGET)));
+ $html .= Display::tag('td', $time_spent_in_lp, array('align'=>'center'));
+ if (is_numeric($progress)) {
+ $progress = $progress.'%';
+ }
+ $html .= Display::tag('td', $progress, array('align'=>'center'));
+ $html .= Display::tag('td', $percentage_score);
- $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',8);
- $graph->setGraphArea(65,50,$main_width-20, $main_height-140);
-
- $graph->drawFilledRoundedRectangle(7,7,$main_width-7,$main_height-7,5,240,240,240);
- $graph->drawRoundedRectangle(5,5,$main_width-5,$main_height -5,5,230,230,230);
- $graph->drawGraphArea(255,255,255,TRUE);
+ $last_connection = '-';
+ if (!empty($last_connection_in_lp)) {
+ $last_connection = api_convert_and_format_date($last_connection_in_lp, DATE_TIME_FORMAT_LONG);
+ }
+ $html .= Display::tag('td', $last_connection, array('align'=>'center','width'=>'180px'));
+ $html .= " ";
+ }
+ } else {
+ $html .= '
+
+ '.get_lang('NoLearnpath').'
+
+ ';
+ }
+ $html .='
';
+ }
+ if (!empty($html)) {
+ $html = Display::div($html, array('class'=>'rounded_div', 'style'=>'position:relative; float:none; width:95%'));
+ }
+ return $html;
+ }
- //SCALE_NORMAL, SCALE_START0, SCALE_ADDALLSTART0, SCALE_ADDALL
- $graph->drawScale($data_set->GetData(),$data_set->GetDataDescription(),SCALE_NORMAL ,150,150,150,TRUE,$y_label_angle,1, TRUE);
- $graph->drawGrid(4,TRUE,230,230,230,70);
+ /**
+ * Generates an histogram
+ *
+ * @param array list of exercise names
+ * @param array my results 0 to 100
+ * @param array average scores 0-100
+ */
+ function generate_session_exercise_graph($names, $my_results, $average) {
+ require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php';
+ require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php';
+ require_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php';
+
+ $cache = new pCache();
+
+ // Dataset definition
+ $data_set = new pData();
+
+ // Dataset definition
+ $data_set->AddPoint($average, "Serie1");
+ $data_set->AddPoint($my_results, "Serie2");
+ $data_set->AddPoint($names, "Serie3");
+ $data_set->AddAllSeries();
+ $data_set->SetAbsciseLabelSerie('Serie3');
+ $data_set->SetSerieName(get_lang('AverageScore'),"Serie1");
+ $data_set->SetSerieName(get_lang('MyResults'), "Serie2");
+
+ //$data_set->SetYAxisName(get_lang("Percentage"));
+
+ $data_set->SetYAxisUnit("%");
+
+ // Initialise the graph
+ $main_width = 860;
+ $main_height = 500;
+ $y_label_angle = 50;
+ $data_set->RemoveSerie("Serie3");
+ $graph = new pChart($main_width, $main_height);
+ //See 3.2 BT#2797
+ $graph->setFixedScale(0,100);
+
+ $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',8);
+ $graph->setGraphArea(65,50,$main_width-20, $main_height-140);
+
+ $graph->drawFilledRoundedRectangle(7,7,$main_width-7,$main_height-7,5,240,240,240);
+ $graph->drawRoundedRectangle(5,5,$main_width-5,$main_height -5,5,230,230,230);
+ $graph->drawGraphArea(255,255,255,TRUE);
- // Draw the 0 line
- $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',6);
- $graph->drawTreshold(0,143,55,72,TRUE,TRUE);
+ //SCALE_NORMAL, SCALE_START0, SCALE_ADDALLSTART0, SCALE_ADDALL
+ $graph->drawScale($data_set->GetData(),$data_set->GetDataDescription(),SCALE_NORMAL ,150,150,150,TRUE,$y_label_angle,1, TRUE);
+ $graph->drawGrid(4,TRUE,230,230,230,70);
- // Draw the cubic curve graph
- $graph->drawLineGraph($data_set->GetData(),$data_set->GetDataDescription());
- $graph->drawPlotGraph($data_set->GetData(),$data_set->GetDataDescription(),1,1,230,255,255);
+ // Draw the 0 line
+ $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',6);
+ $graph->drawTreshold(0,143,55,72,TRUE,TRUE);
- // Finish the graph
- $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',10);
- $graph->drawLegend($main_width - 150,70,$data_set->GetDataDescription(),255,255,255);
-
- $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',11);
- $graph->drawTitle(50, 30, get_lang('ExercisesInTimeProgressChart'), 50,50,50,$main_width-110, true);
+ // Draw the cubic curve graph
+ $graph->drawLineGraph($data_set->GetData(),$data_set->GetDataDescription());
+ $graph->drawPlotGraph($data_set->GetData(),$data_set->GetDataDescription(),1,1,230,255,255);
- // $main_graph = new pChart($main_width,$main_height);
+ // Finish the graph
+ $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',10);
+ $graph->drawLegend($main_width - 150,70,$data_set->GetDataDescription(),255,255,255);
+
+ $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',11);
+ $graph->drawTitle(50, 30, get_lang('ExercisesInTimeProgressChart'), 50,50,50,$main_width-110, true);
- $graph_id = 'generate_session_exercise_graph'.Security::remove_XSS($_GET['course']).'-'.intval($_GET['session_id']).'-'.api_get_user_id();
- if ($cache->IsInCache($graph_id, $data_set->GetData())) {
- //if (0) {
- //if we already created the img
- //echo 'in cache';
- $img_file = $cache->GetHash($graph_id,$data_set->GetData());
- } else {
- $cache->WriteToCache($graph_id, $data_set->GetData(), $graph);
- ob_start();
- $graph->Stroke();
- ob_end_clean();
- $img_file = $cache->GetHash($graph_id, $data_set->GetData());
- }
- $html = ' ';
- return $html;
- }
+ // $main_graph = new pChart($main_width,$main_height);
- /**
- *
- * Returns a thumbnail of the function generate_exercise_result_graph
- * @param array attempts
+ $graph_id = 'generate_session_exercise_graph'.Security::remove_XSS($_GET['course']).'-'.intval($_GET['session_id']).'-'.api_get_user_id();
+ if ($cache->IsInCache($graph_id, $data_set->GetData())) {
+ //if (0) {
+ //if we already created the img
+ //echo 'in cache';
+ $img_file = $cache->GetHash($graph_id,$data_set->GetData());
+ } else {
+ $cache->WriteToCache($graph_id, $data_set->GetData(), $graph);
+ ob_start();
+ $graph->Stroke();
+ ob_end_clean();
+ $img_file = $cache->GetHash($graph_id, $data_set->GetData());
+ }
+ $html = ' ';
+ return $html;
+ }
- */
- function generate_exercise_result_thumbnail_graph($attempts) {
- require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php';
- require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php';
- require_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php';
+ /**
+ *
+ * Returns a thumbnail of the function generate_exercise_result_graph
+ * @param array attempts
- $exercise_title = $attempts['title'];
- $attempts = $attempts['data'];
- $my_exercise_result_array = $exercise_result = array();
- if (empty($attempts)) {
- return null;
- }
-
- foreach ($attempts as $attempt) {
- if (api_get_user_id() == $attempt['exe_user_id']) {
- if ($attempt['exe_weighting'] != 0 ) {
- $my_exercise_result_array[]= $attempt['exe_result']/$attempt['exe_weighting'];
- }
- } else {
- if ($attempt['exe_weighting'] != 0 ) {
- $exercise_result[]= $attempt['exe_result']/$attempt['exe_weighting'];
- }
+ */
+ function generate_exercise_result_thumbnail_graph($attempts) {
+ require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php';
+ require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php';
+ require_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php';
+
+ $exercise_title = $attempts['title'];
+ $attempts = $attempts['data'];
+ $my_exercise_result_array = $exercise_result = array();
+ if (empty($attempts)) {
+ return null;
+ }
+
+ foreach ($attempts as $attempt) {
+ if (api_get_user_id() == $attempt['exe_user_id']) {
+ if ($attempt['exe_weighting'] != 0 ) {
+ $my_exercise_result_array[]= $attempt['exe_result']/$attempt['exe_weighting'];
+ }
+ } else {
+ if ($attempt['exe_weighting'] != 0 ) {
+ $exercise_result[]= $attempt['exe_result']/$attempt['exe_weighting'];
}
}
+ }
- //Getting best result
- rsort($my_exercise_result_array);
- $my_exercise_result = 0;
- if (isset($my_exercise_result_array[0])) {
- $my_exercise_result = $my_exercise_result_array[0] *100;
- }
+ //Getting best result
+ rsort($my_exercise_result_array);
+ $my_exercise_result = 0;
+ if (isset($my_exercise_result_array[0])) {
+ $my_exercise_result = $my_exercise_result_array[0] *100;
+ }
- //var_dump($exercise_result, $my_exercise_result);
+ //var_dump($exercise_result, $my_exercise_result);
- $max = 100;
- $pieces = 5 ;
- $part = round($max / $pieces);
- $x_axis = array();
- $final_array = array();
- $my_final_array = array();
+ $max = 100;
+ $pieces = 5 ;
+ $part = round($max / $pieces);
+ $x_axis = array();
+ $final_array = array();
+ $my_final_array = array();
- for ($i=1; $i <=$pieces; $i++) {
- $sum = 1;
- if ($i == 1) {
- $sum = 0;
- }
- $min = ($i-1)*$part + $sum;
- $max = ($i)*$part;
- $x_axis[]= $min." - ".$max;
- $count = 0;
- foreach($exercise_result as $result) {
- $percentage = $result*100;
- //echo $percentage.' - '.$min.' - '.$max." ";
- if ($percentage >= $min && $percentage <= $max) {
- //echo ' is > ';
- $count++;
- }
+ for ($i=1; $i <=$pieces; $i++) {
+ $sum = 1;
+ if ($i == 1) {
+ $sum = 0;
+ }
+ $min = ($i-1)*$part + $sum;
+ $max = ($i)*$part;
+ $x_axis[]= $min." - ".$max;
+ $count = 0;
+ foreach($exercise_result as $result) {
+ $percentage = $result*100;
+ //echo $percentage.' - '.$min.' - '.$max." ";
+ if ($percentage >= $min && $percentage <= $max) {
+ //echo ' is > ';
+ $count++;
}
- //echo ' ';
- $final_array[]= $count;
+ }
+ //echo ' ';
+ $final_array[]= $count;
- if ($my_exercise_result >= $min && $my_exercise_result <= $max) {
- $my_final_array[] = 1;
- } else {
- $my_final_array[] = 0;
- }
+ if ($my_exercise_result >= $min && $my_exercise_result <= $max) {
+ $my_final_array[] = 1;
+ } else {
+ $my_final_array[] = 0;
}
+ }
- //var_dump($my_final_array, $final_array); exit;
+ //var_dump($my_final_array, $final_array); exit;
- //Fix to remove the data of the user with my data
+ //Fix to remove the data of the user with my data
- for($i = 0; $i<=count($my_final_array); $i++) {
- if (!empty($my_final_array[$i])) {
- $my_final_array[$i] = $final_array[$i] + 1; //Add my result
- $final_array[$i] = 0;
- }
+ for($i = 0; $i<=count($my_final_array); $i++) {
+ if (!empty($my_final_array[$i])) {
+ $my_final_array[$i] = $final_array[$i] + 1; //Add my result
+ $final_array[$i] = 0;
}
- //var_dump($my_final_array, $final_array); echo ' ';
-
- //echo ''; var_dump($my_exercise_result, $exercise_result,$x_axis);
-
- $cache = new pCache();
+ }
+ //var_dump($my_final_array, $final_array); echo ' ';
- // Dataset definition
- $data_set = new pData();
- $data_set->AddPoint($final_array,"Serie1");
- $data_set->AddPoint($my_final_array,"Serie2");
- //$data_set->AddPoint($x_axis,"Serie3");
- $data_set->AddAllSeries();
-
- // Initialise the graph
+ //echo ''; var_dump($my_exercise_result, $exercise_result,$x_axis);
+
+ $cache = new pCache();
+
+ // Dataset definition
+ $data_set = new pData();
+ $data_set->AddPoint($final_array,"Serie1");
+ $data_set->AddPoint($my_final_array,"Serie2");
+ //$data_set->AddPoint($x_axis,"Serie3");
+ $data_set->AddAllSeries();
+
+ // Initialise the graph
- $main_width = 80;
- $main_height = 35;
+ $main_width = 80;
+ $main_height = 35;
- $thumbnail_graph = new pChart($main_width, $main_height);
+ $thumbnail_graph = new pChart($main_width, $main_height);
- $thumbnail_graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',8);
- //$thumbnail_graph->setGraphArea(50,30,680,200);
- $thumbnail_graph->drawFilledRoundedRectangle(2,2,$main_width-2,$main_height-2,2,230,230,230);
- $thumbnail_graph->setGraphArea(5,5,$main_width-5,$main_height-5);
- $thumbnail_graph->drawGraphArea(255,255,255);
+ $thumbnail_graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',8);
+ //$thumbnail_graph->setGraphArea(50,30,680,200);
+ $thumbnail_graph->drawFilledRoundedRectangle(2,2,$main_width-2,$main_height-2,2,230,230,230);
+ $thumbnail_graph->setGraphArea(5,5,$main_width-5,$main_height-5);
+ $thumbnail_graph->drawGraphArea(255,255,255);
- //SCALE_NORMAL, SCALE_START0, SCALE_ADDALLSTART0
- $thumbnail_graph->drawScale($data_set->GetData(),$data_set->GetDataDescription(),SCALE_ADDALLSTART0, 150,150,150,FALSE,0,1,TRUE);
+ //SCALE_NORMAL, SCALE_START0, SCALE_ADDALLSTART0
+ $thumbnail_graph->drawScale($data_set->GetData(),$data_set->GetDataDescription(),SCALE_ADDALLSTART0, 150,150,150,FALSE,0,1,TRUE);
- $thumbnail_graph->drawOverlayBarGraph($data_set->GetData(),$data_set->GetDataDescription(), 100);
+ $thumbnail_graph->drawOverlayBarGraph($data_set->GetData(),$data_set->GetDataDescription(), 100);
- // Finish the graph
- $graph_id = 'thumbnail_exercise_result_graph_'.Security::remove_XSS($_GET['course']).'-'.intval($_GET['session_id']).'-'.api_get_user_id();
+ // Finish the graph
+ $graph_id = 'thumbnail_exercise_result_graph_'.Security::remove_XSS($_GET['course']).'-'.intval($_GET['session_id']).'-'.api_get_user_id();
- if ($cache->IsInCache($graph_id, $data_set->GetData())) {
- //if (0) {
- //if we already created the img
- //echo 'in cache';
- $img_file = $cache->GetHash($graph_id,$data_set->GetData());
- } else {
- $cache->WriteToCache($graph_id, $data_set->GetData(), $thumbnail_graph);
- ob_start();
- $thumbnail_graph->Stroke();
- ob_end_clean();
- $img_file = $cache->GetHash($graph_id, $data_set->GetData());
- }
- $html = ' ';
- return $html;
+ if ($cache->IsInCache($graph_id, $data_set->GetData())) {
+ //if (0) {
+ //if we already created the img
+ //echo 'in cache';
+ $img_file = $cache->GetHash($graph_id,$data_set->GetData());
+ } else {
+ $cache->WriteToCache($graph_id, $data_set->GetData(), $thumbnail_graph);
+ ob_start();
+ $thumbnail_graph->Stroke();
+ ob_end_clean();
+ $img_file = $cache->GetHash($graph_id, $data_set->GetData());
}
+ $html = ' ';
+ return $html;
+ }
- /**
- * Generates a big graph with the number of best results
- * @param array
- */
- function generate_exercise_result_graph($attempts) {
+ /**
+ * Generates a big graph with the number of best results
+ * @param array
+ */
+ function generate_exercise_result_graph($attempts) {
require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php';
require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php';
@@ -3721,8 +3721,11 @@ class TrackingCourseLog {
}
$user_row[]= $user['first_connection'];
- $user_row[]= $user['last_connection'];
- $user_row[]= $user['additional'];
+ $user_row[]= $user['last_connection'];
+ if (isset($_GET['additional_profile_field']) AND is_numeric($_GET['additional_profile_field'])) {
+ $user_row[]= $user['additional'];
+ }
+
$user_row[]= $user['link'];
diff --git a/main/inc/lib/urlmanager.lib.php b/main/inc/lib/urlmanager.lib.php
old mode 100755
new mode 100644
index 701eeff32a..dec537aed4
--- a/main/inc/lib/urlmanager.lib.php
+++ b/main/inc/lib/urlmanager.lib.php
@@ -535,12 +535,11 @@ class UrlManager
* @param array user list
* @param int access_url_id
* */
- public static function update_urls_rel_course($course_list,$access_url_id)
- {
+ public static function update_urls_rel_course($course_list,$access_url_id) {
$table_course = Database :: get_main_table(TABLE_MAIN_COURSE);
$table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
- $sql = "SELECT course_code FROM $table_url_rel_course WHERE access_url_id=".Database::escape_string($access_url_id);
+ $sql = "SELECT course_code FROM $table_url_rel_course WHERE access_url_id=".intval($access_url_id);
$result = Database::query($sql);
$existing_courses = array();
@@ -549,9 +548,11 @@ class UrlManager
}
//adding courses
- foreach($course_list as $course) {
- if(!in_array($course, $existing_courses)) {
- UrlManager::add_course_to_url($course,$access_url_id);
+ foreach($course_list as $course_code) {
+ if(!in_array($course_code, $existing_courses)) {
+ UrlManager::add_course_to_url($course_code, $access_url_id);
+ $course_info = api_get_course_info($course_code);
+ CourseManager::update_course_ranking($course_info['real_id'], 0, $access_url_id);
}
}
@@ -559,6 +560,8 @@ class UrlManager
foreach($existing_courses as $existing_course) {
if(!in_array($existing_course, $course_list)) {
UrlManager::delete_url_rel_course($existing_course,$access_url_id);
+ $course_info = api_get_course_info($existing_course);
+ CourseManager::update_course_ranking($course_info['real_id'], 0, $access_url_id);
}
}
}
diff --git a/main/inc/lib/userportal.lib.php b/main/inc/lib/userportal.lib.php
index b1ff40d305..0ae2ab8fe6 100644
--- a/main/inc/lib/userportal.lib.php
+++ b/main/inc/lib/userportal.lib.php
@@ -391,20 +391,9 @@ class IndexManager {
}
function return_skills_links() {
- $content = ' ';
$html = self::show_right_block(get_lang("Skills"), $content);
return $html;
}
@@ -444,10 +433,7 @@ class IndexManager {
}
}
return ''.$message.'
';
- }
-
-
-
+ }
/**
* Display list of courses in a category.
@@ -1338,4 +1324,8 @@ class IndexManager {
}
}
}
+
+ function return_hot_courses() {
+ return CourseManager::return_hot_courses();
+ }
}
diff --git a/main/inc/local.inc.php b/main/inc/local.inc.php
index 3965c71512..222e8a7388 100644
--- a/main/inc/local.inc.php
+++ b/main/inc/local.inc.php
@@ -800,11 +800,21 @@ if (isset($cidReset) && $cidReset) { // course session data refresh requested or
if (!isset($_SESSION['login_as'])) {
$course_tracking_table = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+
+ /*
+ * When $_configuration['session_lifetime'] is too big 100 hours (in order to let users take exercises with no problems)
+ * the function Tracking::get_time_spent_on_the_course() returns big values (200h) due the condition:
+ * login_course_date > now() - INTERVAL $session_lifetime SECOND
+ *
+ */
+ /*
if (isset($_configuration['session_lifetime'])) {
$session_lifetime = $_configuration['session_lifetime'];
} else {
$session_lifetime = 3600; // 1 hour
- }
+ }*/
+
+ $session_lifetime = 3600; // 1 hour
$course_code = $_course['sysCode'];
$time = api_get_datetime();
@@ -883,7 +893,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
if (Database::num_rows($result) > 0) { // this user have a recorded state for this course
$cuData = Database::fetch_array($result);
- if ($_course['activate_legal'] == 1) {
+ if ($_course['activate_legal'] == 1 && !api_is_platform_admin()) {
$user_is_subscribed = CourseManager::is_user_accepted_legal($_user['user_id'], $_course['id'], $session_id);
if (!$user_is_subscribed) {
$url = api_get_path(WEB_CODE_PATH).'course_info/legal.php?course_code='.$_course['code'].'&session_id='.$session_id;
@@ -918,7 +928,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
$result = Database::query($sql);
$row = Database::store_result($result);
- if (isset($row) && $row[0]['id_coach'] == $_user['user_id']) {
+ if (isset($row) && isset($row[0]) && $row[0]['id_coach'] == $_user['user_id']) {
$_courseUser['role'] = 'Professor';
$is_courseMember = true;
$is_courseTutor = true;
@@ -931,7 +941,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
$is_courseAdmin = false;
}
api_session_register('_courseUser');
- } elseif(isset($row) && $row[0]['session_admin_id']==$_user['user_id']) {
+ } elseif( isset($row) && isset($row[0]) && $row[0]['session_admin_id']==$_user['user_id']) {
$_courseUser['role'] = 'Professor';
$is_courseMember = false;
$is_courseTutor = false;
@@ -1060,8 +1070,8 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
if ((isset($gidReset) && $gidReset) || (isset($cidReset) && $cidReset)) { // session data refresh requested
if ($gidReq && $_cid ) { // have keys to search data
- $group_table = Database::get_course_table(TABLE_GROUP);
- $sql = "SELECT * FROM $group_table WHERE id = '$gidReq'";
+ $group_table = Database::get_course_table(TABLE_GROUP);
+ $sql = "SELECT * FROM $group_table WHERE c_id = ".$_course['real_id']." AND id = '$gidReq'";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) { // This group has recorded status related to this course
$gpData = Database::fetch_array($result);
diff --git a/main/install/db_main.sql b/main/install/db_main.sql
index 81684c4ff2..beb54792c1 100644
--- a/main/install/db_main.sql
+++ b/main/install/db_main.sql
@@ -855,7 +855,8 @@ VALUES
('allow_teacher_change_gradebook_grading_model', NULL, 'radio', 'Gradebook', 'false', 'AllowTeacherChangeGradebookGradingModelTitle', 'AllowTeacherChangeGradebookGradingModelComment', NULL, NULL, 1),
('grading_model', 'grading_model', 'custom', 'Gradebook', 'false', 'GradingModelTitle', 'GradingModelComment', NULL, NULL, 1),
('allow_users_to_change_email_with_no_password', NULL, 'radio', 'User', 'false', 'AllowUsersToChangeEmailWithNoPasswordTitle', 'AllowUsersToChangeEmailWithNoPasswordComment', NULL, NULL, 0),
-('chamilo_database_version',NULL,'textfield',NULL, '1.9.0.16305','DokeosDatabaseVersion','', NULL, NULL, 0);
+('show_admin_toolbar', NULL, 'radio', 'Platform', 'true', 'ShowAdminToolbarTitle', 'ShowAdminToolbarComment', NULL, NULL, 1),
+('chamilo_database_version',NULL,'textfield',NULL, '1.9.0.16368','DokeosDatabaseVersion','', NULL, NULL, 0);
/*
('use_custom_pages',NULL,'radio','Platform','false','UseCustomPages','useCustomPagesComment','platform',NULL,0),
@@ -1163,7 +1164,11 @@ VALUES
('grading_model', '1*X+1*X+1*X+1*X/4', 'Model 3'),
('grading_model', '1*X+2*X+1*X+2*X/6', 'Model 4'),
('allow_users_to_change_email_with_no_password', 'true', 'Yes'),
-('allow_users_to_change_email_with_no_password', 'false', 'No');
+('allow_users_to_change_email_with_no_password', 'false', 'No'),
+('show_admin_toolbar', 'do_not_show', 'DoNotShow'),
+('show_admin_toolbar', 'show_to_admin', 'ShowToAdminsOnly'),
+('show_admin_toolbar', 'show_to_admin_and_teachers', 'ShowToAdminsAndTeachers'),
+('show_admin_toolbar', 'show_to_all', 'ShowToAllUsers');
/*
('use_custom_pages','true','Yes'),
@@ -2813,35 +2818,34 @@ CREATE TABLE skill_rel_profile (
+CREATE TABLE track_course_ranking (
+ id int unsigned not null PRIMARY KEY AUTO_INCREMENT,
+ c_id int unsigned not null,
+ session_id int unsigned not null default 0,
+ url_id int unsigned not null default 0,
+ accesses int unsigned not null default 0,
+ points int unsigned not null default 0,
+ users int unsigned not null default 0,
+ creation_date datetime not null
+);
+
+ALTER TABLE track_course_ranking ADD INDEX idx_tcc_cid (c_id);
+ALTER TABLE track_course_ranking ADD INDEX idx_tcc_sid (session_id);
+ALTER TABLE track_course_ranking ADD INDEX idx_tcc_urlid (url_id);
+ALTER TABLE track_course_ranking ADD INDEX idx_tcc_creation_date (creation_date);
+
+CREATE TABLE user_course_vote(
+ id int unsigned not null AUTO_INCREMENT PRIMARY KEY,
+ c_id int unsigned not null,
+ user_id int unsigned not null,
+ session_id int unsigned not null default 0,
+ url_id int unsigned not null default 0,
+ vote int unsigned not null default 0
+);
+
+ALTER TABLE user_course_vote ADD INDEX idx_ucv_cid (c_id);
+ALTER TABLE user_course_vote ADD INDEX idx_ucv_uid (user_id);
+ALTER TABLE user_course_vote ADD INDEX idx_ucv_cuid (user_id, c_id);
+
---
--- Table structure for event alert sending
--- Pending check and approval
--- CREATE TABLE event_type (
--- id int unsigned NOT NULL AUTO_INCREMENT,
--- name varchar(50) NOT NULL,
--- name_lang_var varchar(40) NOT NULL,
--- desc_lang_var varchar(50) NOT NULL,
--- PRIMARY KEY (id)
--- );
---
--- CREATE TABLE event_type_message (
--- id int unsigned NOT NULL AUTO_INCREMENT,
--- event_type_id int NOT NULL,
--- language_id int NOT NULL,
--- message varchar(200) NOT NULL,
--- subject varchar(60) NOT NULL,
--- PRIMARY KEY (id)
--- );
---
--- CREATE TABLE user_rel_event_type (
--- id int NOT NULL AUTO_INCREMENT,
--- user_id int unsigned NOT NULL,
--- event_type_id int unsigned NOT NULL,
--- PRIMARY KEY (id)
--- );
---
--- INSERT INTO event_type VALUES (1, 'course_deleted','courseDeletedTitle','courseDeletedComment'),(2,'course_created','courseCreatedTitle','courseCreatedComment'),(3,'user_deleted','userDeletedTitle','userDeletedComment'),(4,'user_created','userCreatedTitle','userCreatedComment'), (5, 'session_created','sessionCreatedTitle','sessionCreatedComment'), (6,'session_deleted','sessionDeletedTitle','sessionDeletedComment'), (7,'session_category_created','sessionCategoryCreatedTitle','sessionCategoryCreatedComment'),(8,'session_category_deleted','sessionCategoryDeletedTitle','sessionCategoryDeletedComment'),(9,'settings_changed','settingsChangedTitle','settingsChangedComment'),(10,'user_subscribed','userSubscribedTitle','userSubscribedComment'), (11,'user_unsubscribed','userUnsubscribedTitle','userUnsubscribedComment');
---
--- INSERT INTO event_type_message (id,event_type_id,language_id,message,subject) VALUES (1,4,10,'ReportMessageUserCreated',''),(2,1,10,'DeleteCourse',''),(3,2,10,'CreateCourse',''),(4,3,10,'ReportMessageUserDeleted',''),(6,5,10,'CreateSessionTest',''),(7,6,10,'DeleteSession',''),(8,7,10,'CreateSessionCategory',''),(9,8,10,'DeleteSessionCategory',''),(10,9,10,'ChangeSetting',''),(11,10,10,'Subscribe',''),(12,11,10,'Unsubscribe','');
diff --git a/main/install/migrate-db-1.8.8-1.9.0-pre.sql b/main/install/migrate-db-1.8.8-1.9.0-pre.sql
index be26a44a4e..c3df1c0f24 100755
--- a/main/install/migrate-db-1.8.8-1.9.0-pre.sql
+++ b/main/install/migrate-db-1.8.8-1.9.0-pre.sql
@@ -123,11 +123,25 @@ INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_hel
ALTER TABLE gradebook_category MODIFY COLUMN weight FLOAT NOT NULL;
ALTER TABLE gradebook_link MODIFY COLUMN weight FLOAT NOT NULL;
--- Do not move this query
-UPDATE settings_current SET selected_value = '1.9.0.16305' WHERE variable = 'chamilo_database_version';
+INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_hr_skills_management', NULL, 'radio', 'Gradebook', 'true', 'AllowHRSkillsManagementTitle', 'AllowHRSkillsManagementComment', NULL, NULL, 1);
+
+INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_hr_skills_management', 'true', 'Yes');
+INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_hr_skills_management', 'false', 'No');
+
+INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_admin_toolbar', NULL, 'radio', 'Platform', 'true', 'ShowAdminToolbarTitle', 'ShowAdminToolbarComment', NULL, NULL, 1);
+
+INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'do_not_show', 'DoNotShow');
+INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'show_to_admin', 'ShowToAdminsOnly');
+INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'show_to_admin_and_teachers', 'ShowToAdminsAndTeachers');
+INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'show_to_all', 'ShowToAllUsers');
+
+
+-- Do not move this query
+UPDATE settings_current SET selected_value = '1.9.0.16368' WHERE variable = 'chamilo_database_version';
+
-- xxSTATSxx
ALTER TABLE track_e_exercices ADD COLUMN questions_to_check TEXT NOT NULL DEFAULT '';
--CREATE TABLE track_filtered_terms (id int, user_id int, course_id int, session_id int, tool_id char(12), filtered_term varchar(255), created_at datetime);
@@ -140,11 +154,6 @@ CREATE TABLE stored_values_stack (user_id INT NOT NULL, sco_id INT NOT NULL, sta
ALTER TABLE stored_values_stack ADD KEY (user_id, sco_id, course_id, sv_key, stack_order);
ALTER TABLE stored_values_stack ADD UNIQUE (user_id, sco_id, course_id, sv_key, stack_order);
-INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_hr_skills_management', NULL, 'radio', 'Gradebook', 'true', 'AllowHRSkillsManagementTitle', 'AllowHRSkillsManagementComment', NULL, NULL, 1);
-
-INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_hr_skills_management', 'true', 'Yes');
-INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_hr_skills_management', 'false', 'No');
-
-- xxUSERxx
-- xxCOURSExx
diff --git a/main/link/link.php b/main/link/link.php
index b8cf379233..ef7dc9893a 100644
--- a/main/link/link.php
+++ b/main/link/link.php
@@ -218,7 +218,7 @@ if (api_is_allowed_to_edit(null, true) && isset($_GET['action'])) {
}
echo '
- * '.get_lang('Url').'
+ * URL
diff --git a/main/metadata/md_document.php b/main/metadata/md_document.php
old mode 100755
new mode 100644
index e174a9e6a8..26afa70e4f
--- a/main/metadata/md_document.php
+++ b/main/metadata/md_document.php
@@ -149,9 +149,9 @@ function mdo_add_breadcrump_nav()
}
-function mdobject($_course, $id)
-{
+function mdobject($_course, $id) {
global $ieee_dcmap_e, $ieee_dcmap_v; // md_funcs
+ $course_id = api_get_course_int_id();
$this->mdo_course = $_course; $this->mdo_type = 'Document';
$this->mdo_id = $id; $this->mdo_eid = $this->mdo_type . '.' . $id;
@@ -159,10 +159,9 @@ function mdobject($_course, $id)
$this->mdo_dcmap_e = $ieee_dcmap_e; $this->mdo_dcmap_v = $ieee_dcmap_v;
$document_table = Database::get_course_table(TABLE_DOCUMENT);
- if (($docinfo = @Database::fetch_array(Database::query(
- "SELECT path,title,comment,filetype FROM $document_table WHERE id='" .
- addslashes($id) . "'"))))
- {
+ $sql = "SELECT path,title,comment,filetype FROM $document_table WHERE c_id = $course_id AND id='" .intval($id) . "'";
+
+ if (($docinfo = Database::fetch_array(Database::query($sql)))) {
$this->mdo_path = $docinfo['path'];
$this->mdo_title = $docinfo['title'];
$this->mdo_comment = $docinfo['comment'];
@@ -170,8 +169,8 @@ function mdobject($_course, $id)
$this->mdo_group = ''; // 2005-05-30: find group_id, if any
$group_info = Database::get_course_table(TABLE_GROUP);
- if (($result = Database::query(
- "SELECT id,secret_directory FROM $group_info")))
+ $sql = "SELECT id,secret_directory FROM $group_info WHERE c_id = $course_id";
+ if (($result = Database::query($sql)))
while (($row = Database::fetch_array($result)))
if (($secdir = $row['secret_directory'] . '/') ==
substr($this->mdo_path, 0, strlen($secdir)))
diff --git a/main/metadata/md_link.php b/main/metadata/md_link.php
old mode 100755
new mode 100644
index 877fef4d28..b84b22773e
--- a/main/metadata/md_link.php
+++ b/main/metadata/md_link.php
@@ -135,6 +135,8 @@ function mdo_override(&$xmlDoc) // by ref!
function mdo_storeback(&$xmlDoc) // by ref!
{
+ $course_id = api_get_course_int_id();
+
if (!$this->mdo_url) return; // no record in link table, most probably
if (!($v = $xmlDoc->xmd_value('metadata/lom/technical/location'))) return;
@@ -164,7 +166,7 @@ function mdo_storeback(&$xmlDoc) // by ref!
$link_table = Database::get_course_table(TABLE_LINK);
if ($u) Database::query("UPDATE $link_table SET " . substr($u, 2) .
- " WHERE id='" . addslashes($this->mdo_id) . "'");
+ " WHERE c_id = $course_id AND id='" . addslashes($this->mdo_id) . "'");
}
@@ -186,7 +188,8 @@ function mdo_add_breadcrump_nav()
function mdobject($_course, $id)
{
global $ieee_dcmap_e, $ieee_dcmap_v; // md_funcs
-
+ $course_id = api_get_course_int_id();
+
$this->mdo_course = $_course; $this->mdo_type = 'Link';
$this->mdo_id = $id; $this->mdo_eid = $this->mdo_type . '.' . $id;
@@ -194,8 +197,7 @@ function mdobject($_course, $id)
$link_table = Database::get_course_table(TABLE_LINK);
if (($linkinfo = @Database::fetch_array(Database::query(
- "SELECT url,title,description,category_id FROM $link_table WHERE id='" .
- addslashes($id) . "'"))))
+ "SELECT url,title,description,category_id FROM $link_table WHERE c_id = $course_id AND id='" .intval($id) . "'"))))
{
$this->mdo_url = $linkinfo['url'];
$this->mdo_title = $linkinfo['title'];
@@ -204,7 +206,7 @@ function mdobject($_course, $id)
$linkcat_table = Database::get_course_table(TABLE_LINK_CATEGORY);
if (($catinfo = @Database::fetch_array(Database::query(
- "SELECT category_title FROM $linkcat_table WHERE id='" .
+ "SELECT category_title FROM $linkcat_table WHERE c_id = $course_id AND id='" .
addslashes($lci) . "'"))))
$this->mdo_category_title = $catinfo['category_title'];
}
diff --git a/main/mySpace/access_details.php b/main/mySpace/access_details.php
index f3122522a8..4d15350fbc 100644
--- a/main/mySpace/access_details.php
+++ b/main/mySpace/access_details.php
@@ -160,6 +160,7 @@ $(function() {
';
//Changes END
+$interbreadcrumb[] = array ('url' => '#', 'name' => get_lang('AccessDetails'));
Display :: display_header('');
$main_user_info = api_get_user_info($user_id);
diff --git a/main/mySpace/index.php b/main/mySpace/index.php
index cbc73b050f..6d303eead0 100644
--- a/main/mySpace/index.php
+++ b/main/mySpace/index.php
@@ -367,10 +367,10 @@ if (api_is_allowed_to_create_course() && $view == 'teacher') {
$table->set_additional_parameters($parameters);
$table -> set_header(0, get_lang('CourseTitle'), false, 'align="center"');
$table -> set_header(1, get_lang('NbStudents'), false);
- $table -> set_header(2, get_lang('AvgTimeSpentInTheCourse').Display :: return_icon('info3.gif', get_lang('TimeOfActiveByTraining'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
- $table -> set_header(3, get_lang('AvgStudentsProgress').Display :: return_icon('info3.gif', get_lang('AvgAllUsersInAllCourses'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
- $table -> set_header(4, get_lang('AvgCourseScore').Display :: return_icon('info3.gif', get_lang('AvgAllUsersInAllCourses'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
- $table -> set_header(5, get_lang('AvgExercisesScore').Display :: return_icon('info3.gif', get_lang('AvgAllUsersInAllCourses'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
+ $table -> set_header(2, get_lang('AvgTimeSpentInTheCourse').' '.Display :: return_icon('info3.gif', get_lang('TimeOfActiveByTraining'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
+ $table -> set_header(3, get_lang('AvgStudentsProgress').' '.Display :: return_icon('info3.gif', get_lang('AvgAllUsersInAllCourses'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
+ $table -> set_header(4, get_lang('AvgCourseScore').' '.Display :: return_icon('info3.gif', get_lang('AvgAllUsersInAllCourses'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
+ $table -> set_header(5, get_lang('AvgExercisesScore').' '.Display :: return_icon('info3.gif', get_lang('AvgAllUsersInAllCourses'), array('align' => 'absmiddle', 'hspace' => '3px')), false);
$table -> set_header(6, get_lang('AvgMessages'), false);
$table -> set_header(7, get_lang('AvgAssignments'), false);
$table -> set_header(8, get_lang('Details'), false);
diff --git a/main/mySpace/myStudents.php b/main/mySpace/myStudents.php
index 2e3e82ad2b..630ea7c811 100644
--- a/main/mySpace/myStudents.php
+++ b/main/mySpace/myStudents.php
@@ -511,11 +511,11 @@ if (!empty($student_id)) {