Browse Source

Minor - replaced tabs per spaces and removed backticks

ywarnier 14 years ago
parent
commit
dba4a3d538
1 changed files with 2643 additions and 2665 deletions
  1. 2643 2665
      main/inc/lib/tracking.lib.php

+ 2643 - 2665
main/inc/lib/tracking.lib.php

@@ -1,458 +1,458 @@
 <?php
 /* For licensing terms, see /license.txt */
 /**
-*	This is the tracking library for Dokeos.
-*	Include/require it in your code to use its functionality.
+*    This is the tracking library for Dokeos.
+*    Include/require it in your code to use its functionality.
 *
-*	@package chamilo.library
-*	@author Julio Montoya <gugli100@gmail.com> (Score average fixes)
+*    @package chamilo.library
+*    @author Julio Montoya <gugli100@gmail.com> (Score average fixes)
 */
 
 class Tracking {
 
-	/**
-	 * Calculates the time spent on the platform by a user
-	 * @param int	User id
-	 * @param bool	True for calculating only time spent last week (optional)
-	 * @param int	Timestamp for filtering by Day (optional, default = 0)
-	 * @return timestamp $nb_seconds
-	 */
-	public static function get_time_spent_on_the_platform($user_id, $last_week = false, $by_day = 0) {
-
-		$tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
-
-		$condition_time = '';
-		if ($last_week) {
-			$a_last_week = get_last_week();
-			$fday_last_week = date('Y-m-d H:i:s',$a_last_week[0]);
-			$lday_last_week = date('Y-m-d H:i:s',$a_last_week[6]);
-			$condition_time = ' AND (login_date >= "'.$fday_last_week.'" AND logout_date <= "'.$lday_last_week.'") ';
-		} else if (!empty($by_day)) {
-			$fdate_time = date('Y-m-d',$by_day).' 00:00:00';
-			$ldate_time = date('Y-m-d',$by_day).' 23:59:59';
-			$condition_time = ' AND (login_date >= "'.$fdate_time.'" AND logout_date <= "'.$ldate_time.'" ) ';
-		}
-
-		$sql = 'SELECT login_date, logout_date FROM '.$tbl_track_login.'
-						WHERE login_user_id = '.intval($user_id).$condition_time;
-		$rs = Database::query($sql);
-
-		$nb_seconds = 0;
-
-		$wrong_logout_dates = false;
-
-		while ($a_connections = Database::fetch_array($rs)) {
-
-			$s_login_date = $a_connections["login_date"];
-			$s_logout_date = $a_connections["logout_date"];
-
-			$i_timestamp_login_date = strtotime($s_login_date);
-			$i_timestamp_logout_date = strtotime($s_logout_date);
-
-			if($i_timestamp_logout_date>0)
-			{
-				$nb_seconds += ($i_timestamp_logout_date - $i_timestamp_login_date);
-			}
-			else
-			{ // there are wrong datas in db, then we can't give a wrong time
-				$wrong_logout_dates = true;
-			}
-
-		}
-
-		if($nb_seconds>0 || !$wrong_logout_dates)
-		{
-			return $nb_seconds;
-		}
-		else
-		{
-			return -1; //-1 means we have wrong datas in the db
-		}
-	}
-
-	/**
-	 * Calculates the time spent on the course
-	 * @param 	integer 	User id
-	 * @param 	string 		Course code
-	 * @param 	int			Session id (optional)
-	 * @return 	timestamp 	Time in seconds
-	 */
-	public static function get_time_spent_on_the_course($user_id, $course_code, $session_id = 0) {
-		// protect datas
-		$course_code = Database::escape_string($course_code);
-		$session_id  = intval($session_id);
-
-		$tbl_track_course = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
-
-		$condition_user = "";
-		if (is_array($user_id)) {
-			$condition_user = " AND user_id IN (".implode(',',$user_id).") ";
-		} else {
-			$user_id = intval($user_id);
-			$condition_user = " AND user_id = '$user_id' ";
-		}
-
-		$sql = " SELECT SUM(UNIX_TIMESTAMP(logout_course_date)-UNIX_TIMESTAMP(login_course_date)) as nb_seconds
-				FROM $tbl_track_course
-				WHERE course_code='$course_code' AND session_id = '$session_id' $condition_user";
-
-		$rs = Database::query($sql);
-		$row = Database::fetch_array($rs);
-		return $row['nb_seconds'];
-	}
-
-	/**
-	 * Get first connection date for a student
-	 * @param	int	  			Student id
-	 * @return	string|bool 	Date format long without day or false if there are no connections
-	 */
-	public static function get_first_connection_date($student_id) {
-		$tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
-		$sql = 'SELECT login_date FROM ' . $tbl_track_login . '
-				WHERE login_user_id = ' . intval($student_id) . '
-				ORDER BY login_date ASC LIMIT 0,1';
-
-		$rs = Database::query($sql);
-		if(Database::num_rows($rs)>0) {
-			if ($first_login_date = Database::result($rs, 0, 0)) {
-				return api_convert_and_format_date($first_login_date, DATE_FORMAT_SHORT, date_default_timezone_get());
-			}
-		}
-		return false;
-	}
-
-
-	/**
-	 * Get las connection date for a student
-	 * @param	int	  			Student id
-	 * @param	bool			Show a warning message (optional)
-	 * @param	bool			True for returning results in timestamp (optional)
-	 * @return	string|int|bool Date format long without day, false if there are no connections or timestamp if parameter $return_timestamp is true
-	 */
-	public static function get_last_connection_date($student_id, $warning_message = false, $return_timestamp = false) {
-		$tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
-		$sql = 'SELECT login_date FROM ' . $tbl_track_login . '
-						WHERE login_user_id = ' . intval($student_id) . '
-						ORDER BY login_date DESC LIMIT 0,1';
-
-		$rs = Database::query($sql);
-		if(Database::num_rows($rs)>0) {
-			if ($last_login_date = Database::result($rs, 0, 0)) {                         
-				$last_login_date = api_get_local_time($last_login_date);
-				if ($return_timestamp) {
-					return api_strtotime($last_login_date,'UTC');
-				} else {
-					if (!$warning_message) {
-						return api_format_date($last_login_date, DATE_FORMAT_SHORT);
-					} else {
-						$timestamp = api_strtotime($last_login_date,'UTC');
-						$currentTimestamp = time();
-
-						//If the last connection is > than 7 days, the text is red
-						//345600 = 7 days in seconds
-						if ($currentTimestamp - $timestamp > 604800)
-						{
-							return '<span style="color: #F00;">' . api_format_date($last_login_date, DATE_FORMAT_SHORT) . '</span>';
-						}
-						else
-						{
-							return api_format_date($last_login_date, DATE_FORMAT_SHORT);
-						}
-					}
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Get first user's connection date on the course
-	 * @param 	int 		User id
-	 * @param	string		Course code
-	 * @param	int			Session id (optional, default=0)
-	 * @return	string|bool	Date with format long without day or false if there is no date
-	 */
-	public static function get_first_connection_date_on_the_course($student_id, $course_code, $session_id = 0, $convert_date = true) {
-
-		// protect data
-		$student_id  = intval($student_id);
-		$course_code = Database::escape_string($course_code);
-		$session_id  = intval($session_id);
-
-		$tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
-		$sql = 'SELECT login_course_date FROM '.$tbl_track_login.'
-						WHERE user_id = '.$student_id.'
-						AND course_code = "'.$course_code.'"
-						AND session_id = '.$session_id.'
-						ORDER BY login_course_date ASC LIMIT 0,1';
-		$rs = Database::query($sql);
-		if (Database::num_rows($rs)>0) {
-			if ($first_login_date = Database::result($rs, 0, 0)) {
-				if ($convert_date) {
-					return api_convert_and_format_date($first_login_date, DATE_FORMAT_SHORT, date_default_timezone_get());
-				} else {
-					return $first_login_date;
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Get last user's connection date on the course
-	 * @param 	int 		User id
-	 * @param	string		Course code
-	 * @param	int			Session id (optional, default=0)
-	 * @return	string|bool	Date with format long without day or false if there is no date
-	 */
-	public static function get_last_connection_date_on_the_course($student_id, $course_code, $session_id = 0, $convert_date = true) {
-
-		// protect data
-		$student_id  = intval($student_id);
-		$course_code = Database::escape_string($course_code);
-		$session_id  = intval($session_id);
-
-		$tbl_track_e_course_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
-		$sql = 'SELECT login_course_date FROM '.$tbl_track_e_course_access.'
-						WHERE user_id = '.$student_id.'
-						AND course_code = "'.$course_code.'"
-						AND session_id = '.$session_id.'
-						ORDER BY login_course_date DESC LIMIT 0,1';
-
-		$rs = Database::query($sql);
-		if (Database::num_rows($rs)>0) {
-			if ($last_login_date = Database::result($rs, 0, 0)) {
-				$last_login_date = api_get_local_time($last_login_date, null, date_default_timezone_get());
-				$timestamp = api_strtotime($last_login_date);
-				$currentTimestamp = time();
-				//If the last connection is > than 7 days, the text is red
-				//345600 = 7 days in seconds
-				if ($currentTimestamp - $timestamp > 604800) {
-					if ($convert_date) {
-						return '<span style="color: #F00;">' . api_format_date($last_login_date, DATE_FORMAT_SHORT) . (api_is_allowed_to_edit()?' <a href="'.api_get_path(REL_CODE_PATH).'announcements/announcements.php?action=add&remind_inactive='.$student_id.'" title="'.get_lang('RemindInactiveUser').'"><img align="middle" src="'.api_get_path(WEB_IMG_PATH).'messagebox_warning.gif" /></a>':'').'</span>';
-					} else {
-						return $last_login_date;
-					}
-				} else {
-					if ($convert_date) {
-						return api_format_date($last_login_date, DATE_FORMAT_SHORT);
-					} else {
-						return $last_login_date;
-					}
-				}
-			}
-		}
-		return false;
-	}
+    /**
+     * Calculates the time spent on the platform by a user
+     * @param int    User id
+     * @param bool    True for calculating only time spent last week (optional)
+     * @param int    Timestamp for filtering by Day (optional, default = 0)
+     * @return timestamp $nb_seconds
+     */
+    public static function get_time_spent_on_the_platform($user_id, $last_week = false, $by_day = 0) {
+
+        $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
+
+        $condition_time = '';
+        if ($last_week) {
+            $a_last_week = get_last_week();
+            $fday_last_week = date('Y-m-d H:i:s',$a_last_week[0]);
+            $lday_last_week = date('Y-m-d H:i:s',$a_last_week[6]);
+            $condition_time = ' AND (login_date >= "'.$fday_last_week.'" AND logout_date <= "'.$lday_last_week.'") ';
+        } else if (!empty($by_day)) {
+            $fdate_time = date('Y-m-d',$by_day).' 00:00:00';
+            $ldate_time = date('Y-m-d',$by_day).' 23:59:59';
+            $condition_time = ' AND (login_date >= "'.$fdate_time.'" AND logout_date <= "'.$ldate_time.'" ) ';
+        }
+
+        $sql = 'SELECT login_date, logout_date FROM '.$tbl_track_login.'
+                        WHERE login_user_id = '.intval($user_id).$condition_time;
+        $rs = Database::query($sql);
+
+        $nb_seconds = 0;
+
+        $wrong_logout_dates = false;
+
+        while ($a_connections = Database::fetch_array($rs)) {
+
+            $s_login_date = $a_connections["login_date"];
+            $s_logout_date = $a_connections["logout_date"];
+
+            $i_timestamp_login_date = strtotime($s_login_date);
+            $i_timestamp_logout_date = strtotime($s_logout_date);
+
+            if($i_timestamp_logout_date>0)
+            {
+                $nb_seconds += ($i_timestamp_logout_date - $i_timestamp_login_date);
+            }
+            else
+            { // there are wrong datas in db, then we can't give a wrong time
+                $wrong_logout_dates = true;
+            }
+
+        }
+
+        if($nb_seconds>0 || !$wrong_logout_dates)
+        {
+            return $nb_seconds;
+        }
+        else
+        {
+            return -1; //-1 means we have wrong datas in the db
+        }
+    }
+
+    /**
+     * Calculates the time spent on the course
+     * @param     integer     User id
+     * @param     string         Course code
+     * @param     int            Session id (optional)
+     * @return     timestamp     Time in seconds
+     */
+    public static function get_time_spent_on_the_course($user_id, $course_code, $session_id = 0) {
+        // protect datas
+        $course_code = Database::escape_string($course_code);
+        $session_id  = intval($session_id);
+
+        $tbl_track_course = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+
+        $condition_user = "";
+        if (is_array($user_id)) {
+            $condition_user = " AND user_id IN (".implode(',',$user_id).") ";
+        } else {
+            $user_id = intval($user_id);
+            $condition_user = " AND user_id = '$user_id' ";
+        }
+
+        $sql = " SELECT SUM(UNIX_TIMESTAMP(logout_course_date)-UNIX_TIMESTAMP(login_course_date)) as nb_seconds
+                FROM $tbl_track_course
+                WHERE course_code='$course_code' AND session_id = '$session_id' $condition_user";
+
+        $rs = Database::query($sql);
+        $row = Database::fetch_array($rs);
+        return $row['nb_seconds'];
+    }
+
+    /**
+     * Get first connection date for a student
+     * @param    int                  Student id
+     * @return    string|bool     Date format long without day or false if there are no connections
+     */
+    public static function get_first_connection_date($student_id) {
+        $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
+        $sql = 'SELECT login_date FROM ' . $tbl_track_login . '
+                WHERE login_user_id = ' . intval($student_id) . '
+                ORDER BY login_date ASC LIMIT 0,1';
+
+        $rs = Database::query($sql);
+        if(Database::num_rows($rs)>0) {
+            if ($first_login_date = Database::result($rs, 0, 0)) {
+                return api_convert_and_format_date($first_login_date, DATE_FORMAT_SHORT, date_default_timezone_get());
+            }
+        }
+        return false;
+    }
+
+
+    /**
+     * Get las connection date for a student
+     * @param    int                  Student id
+     * @param    bool            Show a warning message (optional)
+     * @param    bool            True for returning results in timestamp (optional)
+     * @return    string|int|bool Date format long without day, false if there are no connections or timestamp if parameter $return_timestamp is true
+     */
+    public static function get_last_connection_date($student_id, $warning_message = false, $return_timestamp = false) {
+        $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
+        $sql = 'SELECT login_date FROM ' . $tbl_track_login . '
+                        WHERE login_user_id = ' . intval($student_id) . '
+                        ORDER BY login_date DESC LIMIT 0,1';
+
+        $rs = Database::query($sql);
+        if(Database::num_rows($rs)>0) {
+            if ($last_login_date = Database::result($rs, 0, 0)) {                         
+                $last_login_date = api_get_local_time($last_login_date);
+                if ($return_timestamp) {
+                    return api_strtotime($last_login_date,'UTC');
+                } else {
+                    if (!$warning_message) {
+                        return api_format_date($last_login_date, DATE_FORMAT_SHORT);
+                    } else {
+                        $timestamp = api_strtotime($last_login_date,'UTC');
+                        $currentTimestamp = time();
+
+                        //If the last connection is > than 7 days, the text is red
+                        //345600 = 7 days in seconds
+                        if ($currentTimestamp - $timestamp > 604800)
+                        {
+                            return '<span style="color: #F00;">' . api_format_date($last_login_date, DATE_FORMAT_SHORT) . '</span>';
+                        }
+                        else
+                        {
+                            return api_format_date($last_login_date, DATE_FORMAT_SHORT);
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get first user's connection date on the course
+     * @param     int         User id
+     * @param    string        Course code
+     * @param    int            Session id (optional, default=0)
+     * @return    string|bool    Date with format long without day or false if there is no date
+     */
+    public static function get_first_connection_date_on_the_course($student_id, $course_code, $session_id = 0, $convert_date = true) {
+
+        // protect data
+        $student_id  = intval($student_id);
+        $course_code = Database::escape_string($course_code);
+        $session_id  = intval($session_id);
+
+        $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+        $sql = 'SELECT login_course_date FROM '.$tbl_track_login.'
+                        WHERE user_id = '.$student_id.'
+                        AND course_code = "'.$course_code.'"
+                        AND session_id = '.$session_id.'
+                        ORDER BY login_course_date ASC LIMIT 0,1';
+        $rs = Database::query($sql);
+        if (Database::num_rows($rs)>0) {
+            if ($first_login_date = Database::result($rs, 0, 0)) {
+                if ($convert_date) {
+                    return api_convert_and_format_date($first_login_date, DATE_FORMAT_SHORT, date_default_timezone_get());
+                } else {
+                    return $first_login_date;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get last user's connection date on the course
+     * @param     int         User id
+     * @param    string        Course code
+     * @param    int            Session id (optional, default=0)
+     * @return    string|bool    Date with format long without day or false if there is no date
+     */
+    public static function get_last_connection_date_on_the_course($student_id, $course_code, $session_id = 0, $convert_date = true) {
+
+        // protect data
+        $student_id  = intval($student_id);
+        $course_code = Database::escape_string($course_code);
+        $session_id  = intval($session_id);
+
+        $tbl_track_e_course_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+        $sql = 'SELECT login_course_date FROM '.$tbl_track_e_course_access.'
+                        WHERE user_id = '.$student_id.'
+                        AND course_code = "'.$course_code.'"
+                        AND session_id = '.$session_id.'
+                        ORDER BY login_course_date DESC LIMIT 0,1';
+
+        $rs = Database::query($sql);
+        if (Database::num_rows($rs)>0) {
+            if ($last_login_date = Database::result($rs, 0, 0)) {
+                $last_login_date = api_get_local_time($last_login_date, null, date_default_timezone_get());
+                $timestamp = api_strtotime($last_login_date);
+                $currentTimestamp = time();
+                //If the last connection is > than 7 days, the text is red
+                //345600 = 7 days in seconds
+                if ($currentTimestamp - $timestamp > 604800) {
+                    if ($convert_date) {
+                        return '<span style="color: #F00;">' . api_format_date($last_login_date, DATE_FORMAT_SHORT) . (api_is_allowed_to_edit()?' <a href="'.api_get_path(REL_CODE_PATH).'announcements/announcements.php?action=add&remind_inactive='.$student_id.'" title="'.get_lang('RemindInactiveUser').'"><img align="middle" src="'.api_get_path(WEB_IMG_PATH).'messagebox_warning.gif" /></a>':'').'</span>';
+                    } else {
+                        return $last_login_date;
+                    }
+                } else {
+                    if ($convert_date) {
+                        return api_format_date($last_login_date, DATE_FORMAT_SHORT);
+                    } else {
+                        return $last_login_date;
+                    }
+                }
+            }
+        }
+        return false;
+    }
 
         /**
-	 * Get count connections on the course
+     * Get count connections on the course
          * @param   string  Course code
          * @param   int     Session id (optional)
-	 * @param   int     number of month (optional)
-	 * @return  int     count connections
-	 */
-	public static function get_count_connections_on_the_course($course_code, $session_id = 0, $month = null) {
+     * @param   int     number of month (optional)
+     * @return  int     count connections
+     */
+    public static function get_count_connections_on_the_course($course_code, $session_id = 0, $month = null) {
 
-		// protect data
+        // protect data
                 $month_filter = '';
                 if (isset($month)) {
                     $month = intval($month);
                     $month_filter = " AND MONTH(login_course_date)= $month ";
                 }
 
-		$course_code = Database::escape_string($course_code);
-		$session_id  = intval($session_id);
+        $course_code = Database::escape_string($course_code);
+        $session_id  = intval($session_id);
                 $count = 0;
 
-		$tbl_track_e_course_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
-		$sql = "SELECT count(*) as count_connections FROM $tbl_track_e_course_access WHERE course_code = '$course_code' AND session_id = $session_id $month_filter";
-		$rs = Database::query($sql);
-		if (Database::num_rows($rs)>0) {
+        $tbl_track_e_course_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+        $sql = "SELECT count(*) as count_connections FROM $tbl_track_e_course_access WHERE course_code = '$course_code' AND session_id = $session_id $month_filter";
+        $rs = Database::query($sql);
+        if (Database::num_rows($rs)>0) {
                     $row = Database::fetch_object($rs);
                     $count = $row->count_connections;
-		}
-		return $count;
-	}
-
-	/**
-	 * Get count courses per student
-	 * @param 	int		Student id
-	 * @param	bool	Include sessions (optional)
-	 * @return  int		count courses
-	 */
-	public static function count_course_per_student($user_id, $include_sessions = true) {
-
-		$user_id = intval($user_id);
-		$tbl_course_rel_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
-		$tbl_session_course_rel_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
-
-		$sql = 'SELECT DISTINCT course_code
-						FROM ' . $tbl_course_rel_user . '
-						WHERE user_id = ' . $user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH;
-		$rs = Database::query($sql);
-		$nb_courses = Database::num_rows($rs);
-
-		if ($include_sessions) {
-			$sql = 'SELECT DISTINCT course_code
-							FROM ' . $tbl_session_course_rel_user . '
-							WHERE id_user = ' . $user_id;
-			$rs = Database::query($sql);
-			$nb_courses += Database::num_rows($rs);
-		}
-
-		return $nb_courses;
-	}
-
-	/**
-	 * This function gets the score average from all tests in a course by student
-	 * @param 	int|array 	Student(s) id
-	 * @param 	string 		Course code
-	 * @param	int			Exercise id (optional), filtered by exercise
-	 * @param	int			Session id (optional), if param $session_id is null it'll return results including sessions, 0 = session is not filtered
-	 * @return 	string 		value (number %) Which represents a round integer about the score average.
-	 */
-	public static function get_avg_student_exercise_score($student_id, $course_code, $exercise_id = 0, $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['db_name'])) {
-			// table definition
-			$tbl_course_quiz = Database::get_course_table(TABLE_QUIZ_TEST,$a_course['db_name']);
-			$tbl_stats_exercise = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
-
-			// Compose a filter based on optional exercise given
-			$condition_quiz = "";
-			if(!empty($exercise_id)) {
-				$exercise_id = intval($exercise_id);
-				$condition_quiz =" AND id = $exercise_id ";
-			}
-
-			// Compose a filter based on optional session id given
-			$condition_session = "";
-			if (isset($session_id)) {
-				$session_id = intval($session_id);
-				$condition_session = " AND session_id = $session_id ";
-			}
-			$sql = "SELECT count(id) FROM $tbl_course_quiz WHERE active <> -1 $condition_quiz ";
-			$count_quiz = Database::fetch_row(Database::query($sql));
-
-			$quiz_avg_total_score = 0;
-			if (!empty($count_quiz[0]) && !empty($student_id)) {
-				$condition_user = "";
-				if (is_array($student_id)) {
-					$condition_user = " AND exe_user_id IN (".implode(',',$student_id).") ";
-				} else {
-					$condition_user = " AND exe_user_id = '$student_id' ";
-				}
-				$sql = "SELECT SUM(exe_result/exe_weighting*100) as avg_score, COUNT(*) as num_attempts
-						FROM $tbl_stats_exercise
-						WHERE exe_exo_id IN (SELECT id FROM $tbl_course_quiz WHERE active <> -1 $condition_quiz)
-						$condition_user
-						AND orig_lp_id = 0
-						AND exe_cours_id = '$course_code'
-						AND orig_lp_item_id = 0 $condition_session
-					    ORDER BY exe_date DESC";                     
-				$res = Database::query($sql);
-				$row = Database::fetch_array($res);
-				$quiz_avg_score = 0;
-				if (!empty($row['avg_score'])) {
-					$quiz_avg_score = round($row['avg_score'],2);
-				}
-				if(!empty($row['num_attempts'])) {
-					$quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2);
-		        }
-		        return $quiz_avg_score;
-			}
-		}
-		return null;
-	}
-
-
-	/**
-	 * Get count student's exercise attempts
-	 * @param 	int 	Student id
-	 * @param	string	Course code
-	 * @param	int		Exercise id
-	 * @param	int		Learning path id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required.
-	 * @param	int		Learning path item id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required.
-	 * @return  int 	count of attempts
-	 */
-	public function count_student_exercise_attempts($student_id, $course_code, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0) {
-
-		$course_code = Database::escape_string($course_code);
-		$course_info = CourseManager :: get_course_information($course_code);
-		$student_id  = intval($student_id);
-		$exercise_id = intval($exercise_id);
+        }
+        return $count;
+    }
+
+    /**
+     * Get count courses per student
+     * @param     int        Student id
+     * @param    bool    Include sessions (optional)
+     * @return  int        count courses
+     */
+    public static function count_course_per_student($user_id, $include_sessions = true) {
+
+        $user_id = intval($user_id);
+        $tbl_course_rel_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
+        $tbl_session_course_rel_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+
+        $sql = 'SELECT DISTINCT course_code
+                        FROM ' . $tbl_course_rel_user . '
+                        WHERE user_id = ' . $user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH;
+        $rs = Database::query($sql);
+        $nb_courses = Database::num_rows($rs);
+
+        if ($include_sessions) {
+            $sql = 'SELECT DISTINCT course_code
+                            FROM ' . $tbl_session_course_rel_user . '
+                            WHERE id_user = ' . $user_id;
+            $rs = Database::query($sql);
+            $nb_courses += Database::num_rows($rs);
+        }
+
+        return $nb_courses;
+    }
+
+    /**
+     * This function gets the score average from all tests in a course by student
+     * @param     int|array     Student(s) id
+     * @param     string         Course code
+     * @param    int            Exercise id (optional), filtered by exercise
+     * @param    int            Session id (optional), if param $session_id is null it'll return results including sessions, 0 = session is not filtered
+     * @return     string         value (number %) Which represents a round integer about the score average.
+     */
+    public static function get_avg_student_exercise_score($student_id, $course_code, $exercise_id = 0, $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['db_name'])) {
+            // table definition
+            $tbl_course_quiz = Database::get_course_table(TABLE_QUIZ_TEST,$a_course['db_name']);
+            $tbl_stats_exercise = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
+
+            // Compose a filter based on optional exercise given
+            $condition_quiz = "";
+            if(!empty($exercise_id)) {
+                $exercise_id = intval($exercise_id);
+                $condition_quiz =" AND id = $exercise_id ";
+            }
+
+            // Compose a filter based on optional session id given
+            $condition_session = "";
+            if (isset($session_id)) {
+                $session_id = intval($session_id);
+                $condition_session = " AND session_id = $session_id ";
+            }
+            $sql = "SELECT count(id) FROM $tbl_course_quiz WHERE active <> -1 $condition_quiz ";
+            $count_quiz = Database::fetch_row(Database::query($sql));
+
+            $quiz_avg_total_score = 0;
+            if (!empty($count_quiz[0]) && !empty($student_id)) {
+                $condition_user = "";
+                if (is_array($student_id)) {
+                    $condition_user = " AND exe_user_id IN (".implode(',',$student_id).") ";
+                } else {
+                    $condition_user = " AND exe_user_id = '$student_id' ";
+                }
+                $sql = "SELECT SUM(exe_result/exe_weighting*100) as avg_score, COUNT(*) as num_attempts
+                        FROM $tbl_stats_exercise
+                        WHERE exe_exo_id IN (SELECT id FROM $tbl_course_quiz WHERE active <> -1 $condition_quiz)
+                        $condition_user
+                        AND orig_lp_id = 0
+                        AND exe_cours_id = '$course_code'
+                        AND orig_lp_item_id = 0 $condition_session
+                        ORDER BY exe_date DESC";                     
+                $res = Database::query($sql);
+                $row = Database::fetch_array($res);
+                $quiz_avg_score = 0;
+                if (!empty($row['avg_score'])) {
+                    $quiz_avg_score = round($row['avg_score'],2);
+                }
+                if(!empty($row['num_attempts'])) {
+                    $quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2);
+                }
+                return $quiz_avg_score;
+            }
+        }
+        return null;
+    }
+
+
+    /**
+     * Get count student's exercise attempts
+     * @param     int     Student id
+     * @param    string    Course code
+     * @param    int        Exercise id
+     * @param    int        Learning path id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required.
+     * @param    int        Learning path item id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required.
+     * @return  int     count of attempts
+     */
+    public function count_student_exercise_attempts($student_id, $course_code, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0) {
+
+        $course_code = Database::escape_string($course_code);
+        $course_info = CourseManager :: get_course_information($course_code);
+        $student_id  = intval($student_id);
+        $exercise_id = intval($exercise_id);
         $session_id = intval($session_id);
-		$count_attempts = 0;
+        $count_attempts = 0;
 
-		if (!empty($lp_id)) $lp_id = intval($lp_id);
-		if (!empty($lp_item_id)) $lp_id = intval($lp_item_id);
+        if (!empty($lp_id)) $lp_id = intval($lp_id);
+        if (!empty($lp_item_id)) $lp_id = intval($lp_item_id);
 
-		if (!empty($course_info['db_name'])) {
-			$tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES, $course_info['db_name']);
+        if (!empty($course_info['db_name'])) {
+            $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES, $course_info['db_name']);
 
-			$sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex
-					WHERE  ex.exe_cours_id = '$course_code'
-					AND ex.exe_exo_id = $exercise_id
-					AND orig_lp_id = $lp_id
-					AND orig_lp_item_id = $lp_item_id
-					AND exe_user_id= $student_id 
+            $sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex
+                    WHERE  ex.exe_cours_id = '$course_code'
+                    AND ex.exe_exo_id = $exercise_id
+                    AND orig_lp_id = $lp_id
+                    AND orig_lp_item_id = $lp_item_id
+                    AND exe_user_id= $student_id 
                     AND session_id = $session_id ";
-			$rs = Database::query($sql);
-			$row = Database::fetch_row($rs);
-			$count_attempts = $row[0];
-		}
-		return $count_attempts;
+            $rs = Database::query($sql);
+            $row = Database::fetch_row($rs);
+            $count_attempts = $row[0];
+        }
+        return $count_attempts;
 
-	}
+    }
 
     /**
      * Returns the average student progress in the learning paths of the given
      * 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 parameter $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
-     * @param	bool		Will return an array of the type: [sum_of_progresses, number] if it is set to true
-     * @return double		Average progress of the user in this 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 parameter $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
+     * @param    bool        Will return an array of the type: [sum_of_progresses, number] if it is set to true
+     * @return double        Average progress of the user in this course
      */
-	public static function get_avg_student_progress($student_id, $course_code, $lp_ids = array(), $session_id = null, $return_array = false) {
+    public static function get_avg_student_progress($student_id, $course_code, $lp_ids = array(), $session_id = null, $return_array = false) {
 
-		// get the informations of the course
-		$a_course = CourseManager :: get_course_information($course_code);
-		if (!empty($a_course['db_name'])) {
-			// table definition
-			$tbl_course_lp_view = Database :: get_course_table(TABLE_LP_VIEW, $a_course['db_name']);
-			$tbl_course_lp = Database :: get_course_table(TABLE_LP_MAIN, $a_course['db_name']);
+        // get the informations of the course
+        $a_course = CourseManager :: get_course_information($course_code);
+        if (!empty($a_course['db_name'])) {
+            // table definition
+            $tbl_course_lp_view = Database :: get_course_table(TABLE_LP_VIEW, $a_course['db_name']);
+            $tbl_course_lp = Database :: get_course_table(TABLE_LP_MAIN, $a_course['db_name']);
 
-			// Compose a filter based on optional learning paths list given
-			$condition_lp = "";
+            // Compose a filter based on optional learning paths list given
+            $condition_lp = "";
             
             if (!empty($lp_ids)) {
-    			if (count($lp_ids) > 0) {
-    				$condition_lp =" WHERE id IN(".implode(',',$lp_ids).") ";                    
-    			}
-            }			
-			$session_id = intval($session_id);
+                if (count($lp_ids) > 0) {
+                    $condition_lp =" WHERE id IN(".implode(',',$lp_ids).") ";                    
+                }
+            }            
+            $session_id = intval($session_id);
             $sql = "SELECT id FROM $tbl_course_lp lp $condition_lp";            
-			$res_count_lp = Database::query($sql);
-			// count the number of learning paths
-			$lp_id = array();
-			while ($row_lp = Database::fetch_array($res_count_lp,'ASSOC')) {                
+            $res_count_lp = Database::query($sql);
+            // count the number of learning paths
+            $lp_id = array();
+            while ($row_lp = Database::fetch_array($res_count_lp,'ASSOC')) {                
                 //$visibility = api_get_item_visibility($a_course, TOOL_LEARNPATH, $row_lp['id'], $session_id);                
               //  if ($visibility == 1) {
-				    $lp_id[] = $row_lp['id'];
+                    $lp_id[] = $row_lp['id'];
                 //}
-			}      
+            }      
             $count_lp = count($lp_id);            
             
-			$avg_progress = 0;
-			//if there is at least one learning path and one student
-			if ($count_lp>0 && !empty($student_id)) {
+            $avg_progress = 0;
+            //if there is at least one learning path and one student
+            if ($count_lp>0 && !empty($student_id)) {
                 $condition_user = "";
                 if (is_array($student_id)) {
                     $$r = array_walk($student_id,'intval');
@@ -478,33 +478,33 @@ class Tracking {
                     return 0; //not necessary to return something else if there is no view
                 }                
                 if (!$return_array) {
-					$avg_progress = round($sum / $number_items, 1);
-					return $avg_progress;
-				} else {
-					return array($sum, $number_items);
-				}
-			}
-		}
-		return null;
-	}
-
-
-	/**
-	 * 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.
+                    $avg_progress = round($sum / $number_items, 1);
+                    return $avg_progress;
+                } else {
+                    return array($sum, $number_items);
+                }
+            }
+        }
+        return null;
+    }
+
+
+    /**
+     * 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
-	 * @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) {
+     * 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
+     * @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 global tables names
         $course_table               = Database :: get_main_table(TABLE_MAIN_COURSE);
@@ -627,7 +627,7 @@ class Tracking {
                                 if ($max_score == 0 || is_null($max_score) || $max_score == '') {                                
                                     //Chamilo style
                                     if ($use_max_score[$lp_id]) {
-                                	   $max_score = 100;
+                                       $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;                                    
@@ -743,2261 +743,2239 @@ class Tracking {
     }
 
 
-	/**
-	 * 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) {
+    /**
+     * 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;
+        $course = CourseManager :: get_course_information($course_code);
+        $student_id = intval($student_id);
+        $total_time = 0;
 
-		if (!empty($course['db_name'])) {
+        if (!empty($course['db_name'])) {
 
-			$lp_table   = Database :: get_course_table(TABLE_LP_MAIN, $course['db_name']);
-			$t_lpv 		= Database :: get_course_table(TABLE_LP_VIEW, $course['db_name']);
-			$t_lpiv 	= Database :: get_course_table(TABLE_LP_ITEM_VIEW, $course['db_name']);
+            $lp_table   = Database :: get_course_table(TABLE_LP_MAIN, $course['db_name']);
+            $t_lpv         = Database :: get_course_table(TABLE_LP_VIEW, $course['db_name']);
+            $t_lpiv     = Database :: get_course_table(TABLE_LP_ITEM_VIEW, $course['db_name']);
 
-			// Compose a filter based on optional learning paths list given
-			$condition_lp = "";
-			if(count($lp_ids) > 0) {
-				$condition_lp =" WHERE id IN(".implode(',',$lp_ids).") ";
-			}
+            // Compose a filter based on optional learning paths list given
+            $condition_lp = "";
+            if(count($lp_ids) > 0) {
+                $condition_lp =" WHERE id IN(".implode(',',$lp_ids).") ";
+            }
 
-			// Compose a filter based on optional session id
-			$condition_session = "";
+            // Compose a filter based on optional session id
+            $condition_session = "";
             $session_id = intval($session_id);
             
-			if (isset($session_id)) {				
-				if (count($lp_ids) > 0) {
-					$condition_session = " AND session_id = $session_id ";
-				} else {
-					$condition_session = " WHERE session_id = $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");
+            if (isset($session_id)) {                
+                if (count($lp_ids) > 0) {
+                    $condition_session = " AND session_id = $session_id ";
+                } else {
+                    $condition_session = " WHERE session_id = $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 $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
-								AND view.lp_id = '.$lp_id.'
-								AND view.user_id = '.$student_id.' AND session_id = '.$session_id;
+            $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
+                                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);
-						}
-				}
-			}
-		}
-		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;
+                        $rs = Database::query($sql);
+                        if (Database :: num_rows($rs) > 0) {
+                            $total_time += Database :: result($rs, 0, 0);
+                        }
+                }
+            }
+        }
+        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);
 
-		if (!empty($course['db_name'])) {
-
-			$lp_table    = Database :: get_course_table(TABLE_LP_MAIN, $course['db_name']);
-			$t_lpv       = Database :: get_course_table(TABLE_LP_VIEW, $course['db_name']);
-			$t_lpiv      = Database :: get_course_table(TABLE_LP_ITEM_VIEW, $course['db_name']);
-
-	        // 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 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
-							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;
-	}
-
-	/**
-	 * 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;
-			}
-		}
-
-		$result = Database::query($sql);
-
-		while ($a_courses = 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'];
-			}
-		}
-
-		// 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);
-
-		while ($row = Database::fetch_array($result)) {
-			$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) {
-
-		$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 = Database :: get_main_table(TABLE_MAIN_SESSION);
-
-		$a_students = array ();
-
-		//////////////////////////////////////////////////////////////
-		// 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';
-
-		$result = Database::query($sql);
-
-		while ($a_courses = Database::fetch_array($result)) {
-			$course_code = $a_courses["course_code"];
-
-			$sql = "SELECT distinct	srcru.id_user
-								FROM $tbl_session_course_user AS srcru
-								WHERE course_code='$course_code' and id_session = '" . $id_session . "'";
-
-			$rs = Database::query($sql);
-
-			while ($row = Database::fetch_array($rs)) {
-				$a_students[$row['id_user']] = $row['id_user'];
-			}
-		}
-
-		//////////////////////////////////////////////////////////////
-		// 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);
-			while ($row = Database::fetch_array($result)) {
-				$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';
-
-		$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'];
-		}
-
-		//////////////////////////////////////////////////////////////
-		// 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)';
-			}
-		}
-
-		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;
-		}
-
-		$result = Database::query($sql);
-
-		while ($row = Database::fetch_array($result)) {
-			$a_courses[$row['course_code']] = $row['course_code'];
-		}
-
-		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);
-
-		while ($row = Database::fetch_array($rs))
-		{
-			$a_sessions[$row["id"]] = $row;
-		}
-
-		// 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;
-			}
-		}
-
-		$rs = Database::query($sql);
-
-		while ($row = Database::fetch_array($rs))
-		{
-			$a_sessions[$row["id"]] = $row;
-		}
-
-		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;
-
-	}
-
-	/**
-	 * 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);
-
-		// table definition
-		$tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
-		$tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
-
-		$sql = 'SELECT DISTINCT course_code
-						FROM ' . $tbl_session_course . '
-						WHERE id_session=' . $session_id;
-
-		$rs = Database::query($sql);
-		$a_courses = array ();
-		while ($row = Database::fetch_array($rs)) {
-			$a_courses[$row['course_code']] = $row;
-		}
-		return $a_courses;
-	}
-
-
-	/**
-	 * 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) {
-		require_once (api_get_path(LIBRARY_PATH) . 'course.lib.php');
-
-		// 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['db_name'])) {
-			// table definition
-			$tbl_item_property 		 = Database :: get_course_table(TABLE_ITEM_PROPERTY, $a_course['db_name']);
-			$tbl_student_publication = Database :: get_course_table(TABLE_STUDENT_PUBLICATION, $a_course['db_name']);
-
-			$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' ";
-			}
-
-			$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.tool='work' $condition_user $condition_session ";
-			$rs = Database::query($sql);
-			$row = Database::fetch_row($rs);
-			return $row[0];
-		}
-		return null;
-	}
-
-
-	/**
-	 * 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) {
-		require_once (api_get_path(LIBRARY_PATH) . 'course.lib.php');
-
-		// 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['db_name']))
-		{
-			// table definition
-			$tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST, $a_course['db_name']);
-			$tbl_forum 		= Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
-
-			$condition_user = "";
-			if (is_array($student_id)) {
-				$condition_user = " WHERE post.poster_id IN (".implode(',',$student_id).") ";
-			} else {
-				$condition_user = " WHERE post.poster_id = '$student_id' ";
-			}
-
-			$condition_session = "";
-			if (isset($session_id)) {
-				$session_id = intval($session_id);
-				$condition_session = " AND forum.session_id = $session_id";
-			}
-
-			$sql = "SELECT 1 FROM $tbl_forum_post post INNER JOIN $tbl_forum forum ON forum.forum_id = post.forum_id $condition_user $condition_session ";
-			$rs = Database::query($sql);
-			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['db_name'])) {
-			$tbl_posts = Database :: get_course_table(TABLE_FORUM_POST, $a_course['db_name']);
-			$tbl_forums = Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
-			$condition_session = '';
-			if (isset($session_id)) {
-				$session_id = intval($session_id);
-				$condition_session = ' WHERE f.session_id = '. $session_id;
-			}
-			$sql = "SELECT count(*) FROM $tbl_posts p INNER JOIN $tbl_forums f ON f.forum_id = p.forum_id $condition_session ";
-			$result = Database::query($sql);
-			$row = Database::fetch_row($result);
-			$count = $row[0];
-			return $count;
-		} else {
-			return null;
-		}
-	}
-
-	/**
-	* 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) {
-		//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['db_name'])) {
-			$tbl_threads = Database :: get_course_table(TABLE_FORUM_THREAD, $a_course['db_name']);
-			$tbl_forums = Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
-			$condition_session = '';
-			if (isset($session_id)) {
-				$session_id = intval($session_id);
-				$condition_session = ' WHERE f.session_id = '. $session_id;
-			}
-			$sql = "SELECT count(*) FROM $tbl_threads t INNER JOIN $tbl_forums f ON f.forum_id = t.forum_id $condition_session ";
-			$result = Database::query($sql);
-			$row = Database::fetch_row($result);
-			$count = $row[0];
-			return $count;
-		} else {
-			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) {
-		//protect data
-		$course_code = addslashes($course_code);
-		// get the informations of the course
-		$a_course = CourseManager :: get_course_information($course_code);
-		$count = 0;
-		if (!empty($a_course['db_name'])) {
-
-			$condition_session = '';
-			if (isset($session_id)) {
-				$session_id = intval($session_id);
-				$condition_session = ' WHERE session_id = '. $session_id;
-			}
-
-			$tbl_forums = Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
-			$sql = "SELECT count(*) FROM $tbl_forums $condition_session";
-			$result = Database::query($sql);
-			$row = Database::fetch_row($result);
-			$count = $row[0];
-			return $count;
-		} else {
-			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) {
-		//protect data
-		$last_days   = intval($last_days);
-		$course_code = Database::escape_string($course_code);
-		$session_id  = intval($session_id);
-		// get the informations of the course
-		$a_course = CourseManager :: get_course_information($course_code);
-		$count = 0;
-		if (!empty($a_course['db_name'])) {
-			$tbl_stats_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS, $a_course['db_name']);
-
-			$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);
-			$row = Database::fetch_row($result);
-			$count = $row[0];
-			return $count;
-		} else {
-			return null;
-		}
-	}
-
-	/**
-	* 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'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) {
-
-		// protect datas
-		$student_id  = intval($student_id);
-		$course_code = Database::escape_string($course_code);
-		$session_id  = intval($session_id);
-
-		// table definition
-		$tbl_stats_links = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
-
-		$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 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.'" ';
-
-		$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 ();
-
-		$tbl_organism = Database :: get_main_table(TABLE_MAIN_ORGANISM);
-		$tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
-
-		$sql = 'SELECT DISTINCT user_id FROM '.$tbl_user.' as user
-				WHERE hr_dept_id='.$hr_dept_id;
-		$rs = Database::query($sql);
-
-		while($user = Database :: fetch_array($rs))
-		{
-			$a_students[$user['user_id']] = $user['user_id'];
-		}
-
-		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 <florespaz@bidsoftperu.com>
-     * @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);
-		$lp_table 		= Database :: get_course_table(TABLE_LP_MAIN,$course_info['dbName']);
-		$lp_view_table	= Database  :: get_course_table(TABLE_LP_VIEW,$course_info['dbName']);
-		$lp_item_view_table = Database  :: get_course_table(TABLE_LP_ITEM_VIEW,$course_info['dbName']);
-		$lp_item_table = Database  :: get_course_table(TABLE_LP_ITEM,$course_info['dbName']);
-		$sql_type='SELECT id, lp_type FROM '.$lp_table;
-		$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 dokeos
-
-					$sql = "SELECT id FROM $lp_view_table  WHERE 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 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 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 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;
-			}
-			$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) {
-
-			//check if LP have a score
-			$sql = "SELECT count(id) as count FROM $lp_item_table
-		        	WHERE 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 ($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_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;
-	}
-
-	/**
-	 * 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();
-
-		$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;
-			}
-		}
-		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);
-		$data = array();
-
-		$TABLETRACK_LINKS       = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
-		$TABLECOURSE_LINKS      = Database::get_course_table(TABLE_LINK, $course_info['dbName']);
-
-		$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 sl.links_link_id = cl.id
-                AND sl.links_cours_id = '$_cid'
-				$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;
-	}
+        if (!empty($course['db_name'])) {
 
-}
+            $lp_table    = Database :: get_course_table(TABLE_LP_MAIN, $course['db_name']);
+            $t_lpv       = Database :: get_course_table(TABLE_LP_VIEW, $course['db_name']);
+            $t_lpiv      = Database :: get_course_table(TABLE_LP_ITEM_VIEW, $course['db_name']);
 
-class TrackingCourseLog {
+            // 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 id = $lp_id ");
+            $count_row_lp = Database::num_rows($res_row_lp);
 
-	function count_item_resources() {
-		global $session_id;
-
-		$table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
-		$table_user = Database :: get_main_table(TABLE_MAIN_USER);
-
-		$sql = "SELECT count(tool) AS total_number_of_items FROM $table_item_property track_resource, $table_user user" .
-				" WHERE track_resource.insert_user_id = user.user_id AND id_session = $session_id ";
-
-		if (isset($_GET['keyword'])) {
-			$keyword = Database::escape_string(trim($_GET['keyword']));
-			$sql .= " AND (user.username LIKE '%".$keyword."%' OR lastedit_type LIKE '%".$keyword."%' OR tool LIKE '%".$keyword."%')";
-		}
-
-		$sql .= " AND tool IN ('document', 'learnpath', 'quiz', 'glossary', 'link', 'course_description', 'announcement', 'thematic', 'thematic_advance', 'thematic_plan')";
-		$res = Database::query($sql);
-		$obj = Database::fetch_object($res);
-		return $obj->total_number_of_items;
-	}
-
-	function get_item_resources_data($from, $number_of_items, $column, $direction) {
-		global $dateTimeFormatLong, $session_id;
-
-		$table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
-		$table_user = Database :: get_main_table(TABLE_MAIN_USER);
-		$table_session = Database :: get_main_table(TABLE_MAIN_SESSION);
-
-		$sql = "SELECT
-				 	tool as col0,
-					lastedit_type as col1,
-					ref as ref,
-					user.username as col3,
-					insert_date as col5,
-					visibility as col6
-				FROM $table_item_property track_resource, $table_user user
-				WHERE track_resource.insert_user_id = user.user_id AND id_session = $session_id ";
-
-		if (isset($_GET['keyword'])) {
-			$keyword = Database::escape_string(trim($_GET['keyword']));
-			$sql .= " AND (user.username LIKE '%".$keyword."%' OR lastedit_type LIKE '%".$keyword."%' OR tool LIKE '%".$keyword."%') ";
-		}
-
-		$sql .= " AND tool IN ('document', 'learnpath', 'quiz', 'glossary', 'link', 'course_description', 'announcement', 'thematic', 'thematic_advance', 'thematic_plan')";
-
-		if ($column == 0) { $column = '0'; }
-		if ($column != '' && $direction != '') {
-			if ($column != 2 && $column != 4) {
-				$sql .=	" ORDER BY col$column $direction";
-			}
-		} else {
-			$sql .=	" ORDER BY col5 DESC ";
-		}
-
-		$sql .=	" LIMIT $from, $number_of_items ";
-
-		$res = Database::query($sql);
-		$resources = array ();
-                $thematic_tools = array('thematic', 'thematic_advance', 'thematic_plan');
-		while ($row = Database::fetch_array($res)) {
-			$ref = $row['ref'];
-			$table_name = TrackingCourseLog::get_tool_name_table($row['col0']);
-			$table_tool = Database :: get_course_table($table_name['table_name']);
+            // 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
+                            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;
+    }
 
-			$id = $table_name['id_tool'];
-                        if ($row['col0'] == 'thematic_plan' || $row['col0'] == 'thematic_advance') {
-                            $tbl_thematic = Database :: get_course_table(TABLE_THEMATIC);
-                            $rs_thematic = Database::query("SELECT thematic_id FROM $table_tool WHERE id=$ref");
-                            $row_thematic = Database::fetch_array($rs_thematic);
-                            $thematic_id = $row_thematic['thematic_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;
+            }
+        }
 
-                            $query = "SELECT session.id, session.name, user.username FROM $tbl_thematic t, $table_session session, $table_user user" .
-						" WHERE t.session_id = session.id AND session.id_coach = user.user_id AND t.id = $thematic_id";
+        $result = Database::query($sql);
 
-                        } else {
-                            $query = "SELECT session.id, session.name, user.username FROM $table_tool tool, $table_session session, $table_user user" .
-						" WHERE tool.session_id = session.id AND session.id_coach = user.user_id AND tool.$id = $ref";
-                        }
+        while ($a_courses = Database::fetch_array($result)) {
 
+            $course_code = $a_courses["course_code"];
+            $id_session = $a_courses["id_session"];
 
-			$recorset = Database::query($query);
+            $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'";
 
-			if (!empty($recorset)) {
-				$obj = Database::fetch_object($recorset);
+            $rs = Database::query($sql);
 
-				$name_session = '';
-				$coach_name = '';
-				if (!empty($obj)) {
-					$name_session = $obj->name;
-					$coach_name = $obj->username;
-				}
+            while ($row = Database::fetch_array($rs)) {
+                $a_students[$row['id_user']] = $row['id_user'];
+            }
+        }
 
-				$url_tool = api_get_path(WEB_CODE_PATH).$table_name['link_tool'];
-				$row[0] = '';
-				if ($row['col6'] != 2) {
-                                        if (in_array($row['col0'], $thematic_tools)) {
+        // 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;
+            }
+        }
 
-                                            $exp_thematic_tool = explode('_', $row['col0']);
-                                            $thematic_tool_title = '';
-                                            if (is_array($exp_thematic_tool)) {
-                                                foreach ($exp_thematic_tool as $exp) {
-                                                    $thematic_tool_title .= api_ucfirst($exp);
-                                                }
-                                            } else {
-                                                $thematic_tool_title = api_ucfirst($row['col0']);
-                                            }
+        $result = Database::query($sql);
 
-                                            $row[0] = '<a href="'.$url_tool.'?'.api_get_cidreq().'&action=thematic_details">'.get_lang($thematic_tool_title).'</a>';
-                                        } else {
-                                            $row[0] = '<a href="'.$url_tool.'?'.api_get_cidreq().'&'.$obj->id.'">'.get_lang('Tool'.api_ucfirst($row['col0'])).'</a>';
-                                        }
-				} else {
-					$row[0] = api_ucfirst($row['col0']);
-				}
-				$row[1] = get_lang($row[1]);
-				$row[5] = api_convert_and_format_date($row['col5'], null, date_default_timezone_get());
-
-				$row[4] = '';
-				switch ($table_name['table_name']) {
-					case 'document' :
-						$query_document = "SELECT tool.title as title FROM $table_tool tool" .
-											" WHERE id = $ref";
-						$rs_document = Database::query($query_document);
-						$obj_document = Database::fetch_object($rs_document);
-						$row[4] = $obj_document->title;
-					break;
-					case 'announcement':
-						$query_document = "SELECT title FROM $table_tool " .
-											" WHERE id = $ref";
-						$rs_document = Database::query($query_document);
-						$obj_document = Database::fetch_object($rs_document);
-						$row[4] = $obj_document->title;
-					break;
-					case 'glossary':
-						$query_document = "SELECT name FROM $table_tool " .
-												" WHERE glossary_id = $ref";
-						$rs_document = Database::query($query_document);
-						$obj_document = Database::fetch_object($rs_document);
-						$row[4] = $obj_document->name;
-					break;
-					case 'lp':
-						$query_document = "SELECT name FROM $table_tool " .
-												" WHERE id = $ref";
-						$rs_document = Database::query($query_document);
-						$obj_document = Database::fetch_object($rs_document);
-						$row[4] = $obj_document->name;
-					break;
-					case 'quiz':
-						$query_document = "SELECT title FROM $table_tool " .
-												" WHERE id = $ref";
-						$rs_document = Database::query($query_document);
-						$obj_document = Database::fetch_object($rs_document);
-						$row[4] = $obj_document->title;
-					break;
-
-					case 'course_description':
-						$query_document = "SELECT title FROM $table_tool " .
-												" WHERE id = $ref";
-						$rs_document = Database::query($query_document);
-						$obj_document = Database::fetch_object($rs_document);
-						$row[4] = $obj_document->title;
-					break;
+        while ($row = Database::fetch_array($result)) {
+            $a_students[$row['id_user']] = $row['id_user'];
+        }
+        return $a_students;
+    }
 
-                                        case 'thematic':
-                                                $rs = Database::query("SELECT title FROM $table_tool WHERE id = $ref");
-                                                if (Database::num_rows($rs) > 0) {
-                                                    $obj = Database::fetch_object($rs);
-                                                    $row[4] = $obj->title;
-                                                }
-                                                break;
-                                        case 'thematic_advance':
-                                                $rs = Database::query("SELECT content FROM $table_tool WHERE id = $ref");
-                                                if (Database::num_rows($rs) > 0) {
-                                                    $obj = Database::fetch_object($rs);
-                                                    $row[4] = $obj->content;
-                                                }
-                                                break;
-                                        case 'thematic_plan':
-                                                $rs = Database::query("SELECT title FROM $table_tool WHERE id = $ref");
-                                                if (Database::num_rows($rs) > 0) {
-                                                    $obj = Database::fetch_object($rs);
-                                                    $row[4] = $obj->title;
-                                                }
-                                                break;
+    /**
+     * 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) {
 
-					default:
-					break;
-				}
-
-				$row2 = $name_session;
-				if (!empty($coach_name)) {
-					$row2 .= '<br />'.get_lang('Coach').': '.$coach_name;
-				}
-				$row[2] = $row2;
-
-				$resources[] = $row;
-			}
-		}
-
-		return $resources;
-	}
-
-	function get_tool_name_table($tool) {
-		switch ($tool) {
-			case 'document':
-				$table_name = TABLE_DOCUMENT;
-				$link_tool = 'document/document.php';
-				$id_tool = 'id';
-				break;
-			case 'learnpath':
-				$table_name = TABLE_LP_MAIN;
-				$link_tool = 'newscorm/lp_controller.php';
-				$id_tool = 'id';
-				break;
-			case 'quiz':
-				$table_name = TABLE_QUIZ_TEST;
-				$link_tool = 'exercice/exercice.php';
-				$id_tool = 'id';
-				break;
-			case 'glossary':
-				$table_name = TABLE_GLOSSARY;
-				$link_tool = 'glossary/index.php';
-				$id_tool = 'glossary_id';
-				break;
-			case 'link':
-				$table_name = TABLE_LINK;
-				$link_tool = 'link/link.php';
-				$id_tool = 'id';
-				break;
-			case 'course_description':
-				$table_name = TABLE_COURSE_DESCRIPTION;
-				$link_tool = 'course_description/';
-				$id_tool = 'id';
-				break;
-			case 'announcement':
-				$table_name = TABLE_ANNOUNCEMENT;
-				$link_tool = 'announcements/announcements.php';
-				$id_tool = 'id';
-				break;
-                        case 'thematic':
-				$table_name = TABLE_THEMATIC;
-				$link_tool = 'course_progress/index.php';
-				$id_tool = 'id';
-				break;
-                        case 'thematic_advance':
-				$table_name = TABLE_THEMATIC_ADVANCE;
-				$link_tool = 'course_progress/index.php';
-				$id_tool = 'id';
-				break;
-                        case 'thematic_plan':
-				$table_name = TABLE_THEMATIC_PLAN;
-				$link_tool = 'course_progress/index.php';
-				$id_tool = 'id';
-				break;
-			default:
-				$table_name = $tool;
-				break;
-		}
-		return array('table_name' => $table_name,'link_tool' => $link_tool,'id_tool' => $id_tool);
-	}
-
-	function display_additional_profile_fields() {
-		// getting all the extra profile fields that are defined by the platform administrator
-		$extra_fields = UserManager :: get_extra_fields(0,50,5,'ASC');
-
-		// creating the form
-		$return = '<form action="courseLog.php" method="get" name="additional_profile_field_form" id="additional_profile_field_form">';
-
-		// the select field with the additional user profile fields (= this is where we select the field of which we want to see
-		// the information the users have entered or selected.
-		$return .= '<select name="additional_profile_field">';
-		$return .= '<option value="-">'.get_lang('SelectFieldToAdd').'</option>';
-
-		foreach ($extra_fields as $key=>$field) {
-			// show only extra fields that are visible, added by J.Montoya
-			if ($field[6]==1) {
-				if ($field[0] == $_GET['additional_profile_field'] ) {
-					$selected = 'selected="selected"';
-				} else {
-					$selected = '';
-				}
-				$return .= '<option value="'.$field[0].'" '.$selected.'>'.$field[3].'</option>';
-			}
-		}
-		$return .= '</select>';
-
-		// the form elements for the $_GET parameters (because the form is passed through GET
-		foreach ($_GET as $key=>$value){
-			if ($key <> 'additional_profile_field')	{
-				$return .= '<input type="hidden" name="'.Security::remove_XSS($key).'" value="'.Security::remove_XSS($value).'" />';
-			}
-		}
-		// the submit button
-		$return .= '<button class="save" type="submit">'.get_lang('AddAdditionalProfileField').'</button>';
-		$return .= '</form>';
-		return $return;
-	}
-
-	/**
-	 * This function gets all the information of a certrain ($field_id) additional profile field.
-	 * It gets the information of all the users so that it can be displayed in the sortable table or in the csv or xls export
-	 *
-	 * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University, Belgium
-	 * @since October 2009
-	 * @version 1.8.7
-	 */
-	function get_addtional_profile_information_of_field($field_id){
-		// Database table definition
-		$table_user 			= Database::get_main_table(TABLE_MAIN_USER);
-		$table_user_field_values 	= Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
-
-		$sql = "SELECT user.user_id, field.field_value FROM $table_user user, $table_user_field_values field
-			WHERE user.user_id = field.user_id
-			AND field.field_id='".intval($field_id)."'";
-		$result = Database::query($sql);
-		while($row = Database::fetch_array($result)) {
-			$return[$row['user_id']][] = $row['field_value'];
-		}
-		return $return;
-	}
-
-	/**
-	 * This function gets all the information of a certrain ($field_id) additional profile field for a specific list of users is more efficent than  get_addtional_profile_information_of_field() function
-	 * It gets the information of all the users so that it can be displayed in the sortable table or in the csv or xls export
-	 *
-	 * @author	Julio Montoya <gugli100@gmail.com>
-	 * @param	int field id
-	 * @param	array list of user ids
-	 * @return	array
-	 * @since	Nov 2009
-	 * @version	1.8.6.2
-	 */
-	function get_addtional_profile_information_of_field_by_user($field_id, $users) {
-		// Database table definition
-		$table_user 				= Database::get_main_table(TABLE_MAIN_USER);
-		$table_user_field_values 	= Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
-		$result_extra_field 		= UserManager::get_extra_field_information($field_id);
-
-		if (!empty($users)) {
-			if ($result_extra_field['field_type'] == USER_FIELD_TYPE_TAG ) {
-				foreach($users as $user_id) {
-					$user_result = UserManager::get_user_tags($user_id, $field_id);
-					$tag_list = array();
-					foreach($user_result as $item) {
-						$tag_list[] = $item['tag'];
-					}
-					$return[$user_id][] = implode(', ',$tag_list);
-				}
-			} else {
-				$new_user_array = array();
-				foreach($users as $user_id) {
-					$new_user_array[]= "'".$user_id."'";
-				}
-				$users = implode(',',$new_user_array);
-				//selecting only the necessary information NOT ALL the user list
-				$sql = "SELECT user.user_id, field.field_value FROM $table_user user INNER JOIN $table_user_field_values field
-						ON (user.user_id = field.user_id)
-						WHERE field.field_id=".intval($field_id)." AND user.user_id IN ($users)";
-
-				$result = Database::query($sql);
-				while($row = Database::fetch_array($result)) {
-					// get option value for field type double select by id
-					if (!empty($row['field_value'])) {
-						if ($result_extra_field['field_type'] == USER_FIELD_TYPE_DOUBLE_SELECT) {
-							$id_double_select = explode(';',$row['field_value']);
-							if (is_array($id_double_select)) {
-								$value1 = $result_extra_field['options'][$id_double_select[0]]['option_value'];
-								$value2 = $result_extra_field['options'][$id_double_select[1]]['option_value'];
-								$row['field_value'] = ($value1.';'.$value2);
-							}
-						}
-					}
-					// get other value from extra field
-					$return[$row['user_id']][] = $row['field_value'];
-				}
-			}
-		}
-		return $return;
-	}
-
-	/**
-	 * count the number of students in this course (used for SortableTable)
-	 * Deprecated
-	 */
-	function count_student_in_course() {
-		global $nbStudents;
-		return $nbStudents;
-	}
-
-	function sort_users($a, $b) {
-		return strcmp(trim(api_strtolower($a[$_SESSION['tracking_column']])), trim(api_strtolower($b[$_SESSION['tracking_column']])));
-	}
-
-	function sort_users_desc($a, $b) {
-		return strcmp( trim(api_strtolower($b[$_SESSION['tracking_column']])), trim(api_strtolower($a[$_SESSION['tracking_column']])));
-	}
-
-	/**
-	 * Get number of users for sortable with pagination
-	 * @return int
-	 */
-	function get_number_of_users() {
-			global $user_ids;
-			return count($user_ids);
-	}
-
-	/**
-	 * Get data for users list in sortable with pagination
-	 * @return array
-	 */
-	function get_user_data($from, $number_of_items, $column, $direction) {
-
-		global $user_ids, $course_code, $additional_user_profile_info, $export_csv, $is_western_name_order, $csv_content, $session_id, $_configuration;
-
-
-		$course_code = Database::escape_string($course_code);
-		$course_info = CourseManager :: get_course_information($course_code);
-		$tbl_user 	 = Database :: get_main_table(TABLE_MAIN_USER);
-		$access_url_id = api_get_current_access_url_id();
-		$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
-
-		// get all users data from a course for sortable with limit
-		$condition_user = "";
-		if (is_array($user_ids)) {
-			$condition_user = " WHERE user.user_id IN (".implode(',',$user_ids).") ";
-		} else {
-			$condition_user = " WHERE user.user_id = '$user_ids' ";
-		}
-
-		if ($_configuration['multiple_access_urls']) {
-			$url_table = ", ".$tbl_url_rel_user."as url_users";
-			$url_condition = " AND user.user_id = url_users.user_id AND access_url_id='$access_url_id'";
-		}
-
-		$sql = "SELECT user.user_id as col0,
-				user.official_code as col1,
-				user.lastname as col2,
-				user.firstname as col3
-				FROM $tbl_user as user $url_table
-				$condition_user $url_condition";
-
-		if (!in_array($direction, array('ASC','DESC'))) {
-	    	$direction = 'ASC';
-	    }
-
-	    $column = intval($column);
-	    $from = intval($from);
-	    $number_of_items = intval($number_of_items);
-		$sql .= " ORDER BY col$column $direction ";
-		$sql .= " LIMIT $from,$number_of_items";
-        
-		$res = Database::query($sql);
-		$users = array ();
-	    $t = time();
-	   	$row = array();
-		while ($user = Database::fetch_row($res)) {
-
-			$row[0] = $user[1];
-			if ($is_western_name_order) {
-				$row[1] = $user[3];
-				$row[2] = $user[2];
-			} else {
-				$row[1] = $user[2];
-				$row[2] = $user[3];
-			}
-			$row[3] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user[0], $course_code, $session_id));
-
-			$avg_student_score = Tracking::get_avg_student_score($user[0], $course_code, array(), $session_id);
-			//echo '<b>student '.$user[0].' $avg_student_score:</b> '.$avg_student_score; echo '<br />';
-			$avg_student_progress = Tracking::get_avg_student_progress($user[0], $course_code, array(), $session_id);
-			if (empty($avg_student_progress)) {$avg_student_progress=0;}
-			$row[4] = $avg_student_progress.'%';
-			//if (empty($avg_student_score)) {$avg_student_score=0;}
-			if(is_numeric($avg_student_score)) {
-				$row[5] = $avg_student_score.'%';
-			} else {
-				$row[5] = $avg_student_score;
-			}
-			$row[6] = Tracking::count_student_assignments($user[0], $course_code, $session_id);
-			$row[7] = Tracking::count_student_messages($user[0], $course_code, $session_id);
-			$row[8] = Tracking::get_first_connection_date_on_the_course($user[0], $course_code, $session_id);
-			$row[9] = Tracking::get_last_connection_date_on_the_course($user[0], $course_code, $session_id);
-
-			// we need to display an additional profile field
-			if (isset($_GET['additional_profile_field']) AND is_numeric($_GET['additional_profile_field'])) {
-				if (is_array($additional_user_profile_info[$user[0]])) {
-					$row[10]=implode(', ', $additional_user_profile_info[$user[0]]);
-				} else {
-					$row[10]='&nbsp;';
-				}
-			}
-			$row[11] = '<center><a href="../mySpace/myStudents.php?student='.$user[0].'&details=true&course='.$course_code.'&origin=tracking_course&id_session='.$session_id.'"><img src="'.api_get_path(WEB_IMG_PATH).'2rightarrow.gif" border="0" /></a></center>';
-			if ($export_csv) {
-				$row[8] = strip_tags($row[8]);
-				$row[9] = strip_tags($row[9]);
-				unset($row[10]);
-				unset($row[11]);
-				$csv_content[] = $row;
-			}
-	        // store columns in array $users
-	        $users[] = array($row[0],$row[1],$row[2],$row[3],$row[4],$row[5],$row[6],$row[7],$row[8],$row[9],$row[10],$row[11]);
-		}
-		return $users;
-	}
-}
+        $coach_id = intval($coach_id);
 
-class TrackingUserLog {
+        $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);
 
-	/**
-	* Displays the number of logins every month for a specific user in a specific course.
-	*/
-	function display_login_tracking_info($view, $user_id, $course_id, $session_id = 0)
-	{
-		$MonthsLong = $GLOBALS['MonthsLong'];
-
-		// protected data
-		$user_id = intval($user_id);
-		$session_id = intval($session_id);
-		$course_id = Database::escape_string($course_id);
-
-		$track_access_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
-		$tempView = $view;
-		if(substr($view,0,1) == '1') {
-			$new_view = substr_replace($view,'0',0,1);
-			echo "
-				<tr>
-					<td valign='top'>
-					<font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font>" .
-					"<b>".get_lang('LoginsAndAccessTools')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".$user_id."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=10000'>".get_lang('ExportAsCSV')."</a>]
-					</td>
-				</tr>
-				";
-			echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('LoginsDetails')."<br>";
-
-			$sql = "SELECT UNIX_TIMESTAMP(access_date), count(access_date)
-						FROM $track_access_table
-						WHERE access_user_id = '$user_id'
-						AND access_cours_code = '$course_id'
-						AND access_session_id = '$session_id'
-						GROUP BY YEAR(access_date),MONTH(access_date)
-						ORDER BY YEAR(access_date),MONTH(access_date) ASC";
-
-			echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
-			//$results = getManyResults2Col($sql);
-			$results = getManyResults3Col($sql);
-
-			echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
-			echo "<tr>
-					<td class='secLine'>
-					".get_lang('LoginsTitleMonthColumn')."
-					</td>
-					<td class='secLine'>
-					".get_lang('LoginsTitleCountColumn')."
-					</td>
-				</tr>";
-			$total = 0;
-			if (is_array($results)) {
-				for($j = 0 ; $j < count($results) ; $j++) {
-					echo "<tr>";
-					echo "<td class='content'><a href='logins_details.php?uInfo=".$user_id."&reqdate=".$results[$j][0]."&view=".Security::remove_XSS($view)."'>".$MonthsLong[date('n', $results[$j][0])-1].' '.date('Y', $results[$j][0])."</a></td>";
-					echo "<td valign='top' align='right' class='content'>".$results[$j][1]."</td>";
-					echo"</tr>";
-					$total = $total + $results[$j][1];
-				}
-				echo "<tr>";
-				echo "<td>".get_lang('Total')."</td>";
-				echo "<td align='right' class='content'>".$total."</td>";
-				echo"</tr>";
-			} else {
-				echo "<tr>";
-				echo "<td colspan='2'><center>".get_lang('NoResult')."</center></td>";
-				echo"</tr>";
-			}
-			echo "</table>";
-			echo "</td></tr>";
-		} else {
-			$new_view = substr_replace($view,'1',0,1);
-			echo "
-				<tr>
-					<td valign='top'>
-					+<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".$user_id."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('LoginsAndAccessTools')."</a>
-					</td>
-				</tr>
-			";
-		}
-	}
-
-	/**
-	* Displays the exercise results for a specific user in a specific course.
-	* @todo remove globals
-	*/
-	function display_exercise_tracking_info($view, $user_id, $course_id)
-	{
-		global $TABLECOURSE_EXERCICES, $TABLETRACK_EXERCICES, $dateTimeFormatLong;
-		if(substr($view,1,1) == '1')
-		{
-			$new_view = substr_replace($view,'0',1,1);
-			echo "<tr>
-					<td valign='top'>
-						<font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('ExercicesResults')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=01000'>".get_lang('ExportAsCSV')."</a>]
-					</td>
-				</tr>";
-			echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('ExercicesDetails')."<br />";
-
-			$sql = "SELECT ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
-				FROM $TABLECOURSE_EXERCICES AS ce , $TABLETRACK_EXERCICES AS te
-				WHERE te.exe_cours_id = '".Database::escape_string($course_id)."'
-					AND te.exe_user_id = '".Database::escape_string($user_id)."'
-					AND te.exe_exo_id = ce.id
-				ORDER BY ce.title ASC, te.exe_date ASC";
-
-			$hpsql = "SELECT te.exe_name, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
-				FROM $TBL_TRACK_HOTPOTATOES AS te
-				WHERE te.exe_user_id = '".Database::escape_string($user_id)."' AND te.exe_cours_id = '".Database::escape_string($course_id)."'
-				ORDER BY te.exe_cours_id ASC, te.exe_date ASC";
-
-			$hpresults = getManyResultsXCol($hpsql, 4);
-
-			$NoTestRes = 0;
-			$NoHPTestRes = 0;
-
-			echo "<tr>\n<td style='padding-left : 40px;padding-right : 40px;'>\n";
-			$results = getManyResultsXCol($sql, 4);
-			echo "<table cellpadding='2' cellspacing='1' border='0' align='center'>\n";
-			echo "
-				<tr bgcolor='#E6E6E6'>
-					<td>
-					".get_lang('ExercicesTitleExerciceColumn')."
-					</td>
-					<td>
-					".get_lang('Date')."
-					</td>
-					<td>
-					".get_lang('ExercicesTitleScoreColumn')."
-					</td>
-				</tr>";
-
-			if (is_array($results)) {
-				for($i = 0; $i < sizeof($results); $i++) {
-					$display_date = api_convert_and_format_date($results[$i][3], null, date_default_timezone_get());
-					echo "<tr>\n";
-					echo "<td class='content'>".$results[$i][0]."</td>\n";
-					echo "<td class='content'>".$display_date."</td>\n";
-					echo "<td valign='top' align='right' class='content'>".$results[$i][1]." / ".$results[$i][2]."</td>\n";
-					echo "</tr>\n";
-				}
-			} else {
-				// istvan begin
-				$NoTestRes = 1;
-			}
-
-			// The Result of Tests
-			if(is_array($hpresults)) {
-				for($i = 0; $i < sizeof($hpresults); $i++) {
-					$title = GetQuizName($hpresults[$i][0],'');
-					if ($title == '')
-						$title = basename($hpresults[$i][0]);
-					$display_date = api_convert_and_format_date($hpresults[$i][3], null, date_default_timezone_get());
-	?>
-					<tr>
-						<td class="content"><?php echo $title; ?></td>
-						<td class="content" align="center"><?php echo $display_date; ?></td>
-						<td class="content" align="center"><?php echo $hpresults[$i][1]; ?> / <?php echo $hpresults[$i][2]; ?></td>
-					</tr>
-	<?php		}
-			} else {
-				$NoHPTestRes = 1;
-			}
-
-			if ($NoTestRes == 1 && $NoHPTestRes == 1) {
-				echo "<tr>\n";
-				echo "<td colspan='3'><center>".get_lang('NoResult')."</center></td>\n";
-				echo "</tr>\n";
-			}
-			echo "</table>";
-			echo "</td>\n</tr>\n";
-		} else {
-			$new_view = substr_replace($view,'1',1,1);
-			echo "
-				<tr>
-					<td valign='top'>
-						+<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=$user_id&view=".$new_view."' class='specialLink'>".get_lang('ExercicesResults')."</a>
-					</td>
-				</tr>";
-		}
-	}
-
-	/**
-	* Displays the student publications for a specific user in a specific course.
-	* @todo remove globals
-	*/
-	function display_student_publications_tracking_info($view, $user_id, $course_id)
-	{
-		global $TABLETRACK_UPLOADS, $TABLECOURSE_WORK, $dateTimeFormatLong, $_course;
-		if(substr($view,2,1) == '1') {
-			$new_view = substr_replace($view,'0',2,1);
-			echo "<tr>
-						<td valign='top'>
-						<font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('WorkUploads')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00100'>".get_lang('ExportAsCSV')."</a>]
-						</td>
-				</tr>";
-			echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('WorksDetails')."<br>";
-			$sql = "SELECT u.upload_date, w.title, w.author,w.url
-								FROM $TABLETRACK_UPLOADS u , $TABLECOURSE_WORK w
-								WHERE u.upload_work_id = w.id
-									AND u.upload_user_id = '".Database::escape_string($user_id)."'
-									AND u.upload_cours_id = '".Database::escape_string($course_id)."'
-								ORDER BY u.upload_date DESC";
-			echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
-			$results = getManyResultsXCol($sql,4);
-			echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
-			echo "<tr>
-					<td class='secLine' width='40%'>
-					".get_lang('WorkTitle')."
-					</td>
-					<td class='secLine' width='30%'>
-					".get_lang('WorkAuthors')."
-					</td>
-					<td class='secLine' width='30%'>
-					".get_lang('Date')."
-					</td>
-				</tr>";
-			if (is_array($results)) {
-				for($j = 0 ; $j < count($results) ; $j++) {
-					$pathToFile = api_get_path(WEB_COURSE_PATH).$_course['path']."/".$results[$j][3];
-					$beautifulDate = api_convert_and_format_date($results[$j][0], null, date_default_timezone_get());
-					echo "<tr>";
-					echo "<td class='content'>"
-							."<a href ='".$pathToFile."'>".$results[$j][1]."</a>"
-							."</td>";
-					echo "<td class='content'>".$results[$j][2]."</td>";
-					echo "<td class='content'>".$beautifulDate."</td>";
-					echo"</tr>";
-				}
-			} else {
-				echo "<tr>";
-				echo "<td colspan='3'><center>".get_lang('NoResult')."</center></td>";
-				echo"</tr>";
-			}
-			echo "</table>";
-			echo "</td></tr>";
-		} else {
-			$new_view = substr_replace($view,'1',2,1);
-			echo "
-				<tr>
-						<td valign='top'>
-						+<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('WorkUploads')."</a>
-						</td>
-				</tr>
-			";
-		}
-	}
-
-	/**
-	* Displays the links followed for a specific user in a specific course.
-	* @todo remove globals
-	*/
-	function display_links_tracking_info($view, $user_id, $course_id)
-	{
-		global $TABLETRACK_LINKS, $TABLECOURSE_LINKS;
-		if(substr($view,3,1) == '1') {
-			$new_view = substr_replace($view,'0',3,1);
-			echo "
-				<tr>
-						<td valign='top'>
-						<font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('LinksAccess')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00010'>".get_lang('ExportAsCSV')."</a>]
-						</td>
-				</tr>
-			";
-			echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('LinksDetails')."<br>";
-			$sql = "SELECT cl.title, cl.url
-						FROM $TABLETRACK_LINKS AS sl, $TABLECOURSE_LINKS AS cl
-						WHERE sl.links_link_id = cl.id
-							AND sl.links_cours_id = '".Database::escape_string($course_id)."'
-							AND sl.links_user_id = '".Database::escape_string($user_id)."'
-						GROUP BY cl.title, cl.url";
-			echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
-			$results = getManyResults2Col($sql);
-			echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
-			echo "<tr>
-					<td class='secLine'>
-					".get_lang('LinksTitleLinkColumn')."
-					</td>
-				</tr>";
-			if (is_array($results)) {
-				for($j = 0 ; $j < count($results) ; $j++) {
-						echo "<tr>";
-						echo "<td class='content'><a href='".$results[$j][1]."'>".$results[$j][0]."</a></td>";
-						echo"</tr>";
-				}
-			} else {
-				echo "<tr>";
-				echo "<td ><center>".get_lang('NoResult')."</center></td>";
-				echo"</tr>";
-			}
-			echo "</table>";
-			echo "</td></tr>";
-		} else {
-			$new_view = substr_replace($view,'1',3,1);
-			echo "
-				<tr>
-						<td valign='top'>
-						+<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('LinksAccess')."</a>
-						</td>
-				</tr>
-			";
-		}
-	}
-
-	/**
-	* Displays the documents downloaded for a specific user in a specific course.
-	* @param 	string	kind of view inside tracking info
-	* @param	int		User id
-	* @param	string	Course code
-	* @param	int		Session id (optional, default = 0)
-	* @return 	void
-	*/
-	function display_document_tracking_info($view, $user_id, $course_id, $session_id = 0)
-	{
-
-		// protect data
-		$user_id 	= intval($user_id);
-		$course_id 	= Database::escape_string($course_id);
-		$session_id = intval($session_id);
-
-		$downloads_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
-		if(substr($view,4,1) == '1')
-		{
-			$new_view = substr_replace($view,'0',4,1);
-			echo "
-				<tr>
-						<td valign='top'>
-						<font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('DocumentsAccess')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00001'>".get_lang('ExportAsCSV')."</a>]
-						</td>
-				</tr>
-			";
-			echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('DocumentsDetails')."<br>";
-
-			$sql = "SELECT down_doc_path
-						FROM $downloads_table
-						WHERE down_cours_id = '".$course_id."'
-							AND down_user_id = '$user_id'
-							AND down_session_id = '$session_id'
-						GROUP BY down_doc_path";
-
-			echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
-			$results = getManyResults1Col($sql);
-			echo "<table cellpadding='2' cellspacing='1' border='0' align='center'>";
-			echo "<tr>
-					<td class='secLine'>
-					".get_lang('DocumentsTitleDocumentColumn')."
-					</td>
-				</tr>";
-			if (is_array($results)) {
-				for($j = 0 ; $j < count($results) ; $j++) {
-						echo "<tr>";
-						echo "<td class='content'>".$results[$j]."</td>";
-						echo"</tr>";
-				}
-			} else {
-				echo "<tr>";
-				echo "<td><center>".get_lang('NoResult')."</center></td>";
-				echo"</tr>";
-			}
-			echo "</table>";
-			echo "</td></tr>";
-		} else {
-			$new_view = substr_replace($view,'1',4,1);
-			echo "
-				<tr>
-						<td valign='top'>
-						+<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('DocumentsAccess')."</a>
-						</td>
-				</tr>
-			";
-		}
-	}
+        $a_students = array ();
 
-}
+        //////////////////////////////////////////////////////////////
+        // 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';
 
-class TrackingUserLogCSV {
+        $result = Database::query($sql);
 
-	/**
-	* Displays the number of logins every month for a specific user in a specific course.
-	*/
-	function display_login_tracking_info($view, $user_id, $course_id, $session_id = 0)
-	{
-		$MonthsLong = $GLOBALS['MonthsLong'];
-		$track_access_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
-
-		// protected data
-		$user_id    = intval($user_id);
-		$session_id = intval($session_id);
-		$course_id  = Database::escape_string($course_id);
-
-		$tempView = $view;
-		if(substr($view,0,1) == '1')
-		{
-			$new_view = substr_replace($view,'0',0,1);
-			$title[1]= get_lang('LoginsAndAccessTools').get_lang('LoginsDetails');
-
-			$sql = "SELECT UNIX_TIMESTAMP(`access_date`), count(`access_date`)
-						FROM $track_access_table
-						WHERE access_user_id = '$user_id'
-						AND access_cours_code = '".$course_id."'
-						AND access_session_id = '$session_id'
-						GROUP BY YEAR(`access_date`),MONTH(`access_date`)
-						ORDER BY YEAR(`access_date`),MONTH(`access_date`) ASC";
-
-			//$results = getManyResults2Col($sql);
-			$results = getManyResults3Col($sql);
-
-			$title_line= get_lang('LoginsTitleMonthColumn').';'.get_lang('LoginsTitleCountColumn')."\n";
-			$line='';
-			$total = 0;
-			if (is_array($results))
-			{
-				for($j = 0 ; $j < count($results) ; $j++)
-				{
-					$line .= $results[$j][0].';'.$results[$j][1]."\n";
-					$total = $total + $results[$j][1];
-				}
-			$line .= get_lang('Total').";".$total."\n";
-			}
-			else
-			{
-				$line= get_lang('NoResult')."</center></td>";
-			}
-		}
-		else
-		{
-			$new_view = substr_replace($view,'1',0,1);
-		}
-		return array($title_line, $line);
-	}
-
-	/**
-	* Displays the exercise results for a specific user in a specific course.
-	* @todo remove globals
-	*/
-	function display_exercise_tracking_info($view, $user_id, $course_id)
-	{
-		global $TABLECOURSE_EXERCICES, $TABLETRACK_EXERCICES, $TABLETRACK_HOTPOTATOES, $dateTimeFormatLong;
-		if(substr($view,1,1) == '1')
-		{
-			$new_view = substr_replace($view,'0',1,1);
-
-			$title[1]= get_lang('ExercicesDetails');
-			$line='';
-
-			$sql = "SELECT `ce`.`title`, `te`.`exe_result` , `te`.`exe_weighting`, UNIX_TIMESTAMP(`te`.`exe_date`)
-				FROM $TABLECOURSE_EXERCICES AS ce , `$TABLETRACK_EXERCICES` AS `te`
-				WHERE `te`.`exe_cours_id` = '$course_id'
-					AND `te`.`exe_user_id` = '$user_id'
-					AND `te`.`exe_exo_id` = `ce`.`id`
-				ORDER BY `ce`.`title` ASC, `te`.`exe_date` ASC";
-
-			$hpsql = "SELECT `te`.`exe_name`, `te`.`exe_result` , `te`.`exe_weighting`, UNIX_TIMESTAMP(`te`.`exe_date`)
-				FROM `$TABLETRACK_HOTPOTATOES` AS te
-				WHERE `te`.`exe_user_id` = '$user_id' AND `te`.`exe_cours_id` = '$course_id'
-				ORDER BY `te`.`exe_cours_id` ASC, `te`.`exe_date` ASC";
-
-			$hpresults = getManyResultsXCol($hpsql, 4);
-
-			$NoTestRes = 0;
-			$NoHPTestRes = 0;
-
-			$results = getManyResultsXCol($sql, 4);
-			$title_line=get_lang('ExercicesTitleExerciceColumn').";".get_lang('Date').';'.get_lang('ExercicesTitleScoreColumn')."\n";
-
-			if (is_array($results))
-			{
-				for($i = 0; $i < sizeof($results); $i++)
-				{
-					$display_date = api_convert_and_format_date($results[$i][3], null, date_default_timezone_get());
-					$line .= $results[$i][0].";".$display_date.";".$results[$i][1]." / ".$results[$i][2]."\n";
-				}
-			}
-			else // istvan begin
-			{
-				$NoTestRes = 1;
-			}
-
-			// The Result of Tests
-			if(is_array($hpresults))
-			{
-				for($i = 0; $i < sizeof($hpresults); $i++)
-				{
-					$title = GetQuizName($hpresults[$i][0],'');
-
-					if ($title == '')
-						$title = basename($hpresults[$i][0]);
-
-					$display_date = api_convert_and_format_date($hpresults[$i][3], null, date_default_timezone_get());
-
-					$line .= $title.';'.$display_date.';'.$hpresults[$i][1].'/'.$hpresults[$i][2]."\n";
-				}
-			}
-			else
-			{
-				$NoHPTestRes = 1;
-			}
-
-			if ($NoTestRes == 1 && $NoHPTestRes == 1)
-			{
-				$line=get_lang('NoResult');
-			}
-		}
-		else
-		{
-			$new_view = substr_replace($view,'1',1,1);
-
-		}
-		return array($title_line, $line);
-	}
-
-	/**
-	* Displays the student publications for a specific user in a specific course.
-	* @todo remove globals
-	*/
-	function display_student_publications_tracking_info($view, $user_id, $course_id)
-	{
-		global $TABLETRACK_UPLOADS, $TABLECOURSE_WORK, $dateTimeFormatLong, $_course;
-		if(substr($view,2,1) == '1')
-		{
-			$new_view = substr_replace($view,'0',2,1);
-			$sql = "SELECT `u`.`upload_date`, `w`.`title`, `w`.`author`,`w`.`url`
-					FROM `$TABLETRACK_UPLOADS` `u` , $TABLECOURSE_WORK `w`
-					WHERE `u`.`upload_work_id` = `w`.`id`
-						AND `u`.`upload_user_id` = '$user_id'
-						AND `u`.`upload_cours_id` = '$course_id'
-					ORDER BY `u`.`upload_date` DESC";
-			$results = getManyResultsXCol($sql,4);
-
-			$title[1]=get_lang('WorksDetails');
-			$line='';
-			$title_line=get_lang('WorkTitle').";".get_lang('WorkAuthors').";".get_lang('Date')."\n";
-
-			if (is_array($results))
-			{
-				for($j = 0 ; $j < count($results) ; $j++)
-				{
-					$pathToFile = api_get_path(WEB_COURSE_PATH).$_course['path']."/".$results[$j][3];
-					$beautifulDate = api_convert_and_format_date($results[$j][0], null, date_default_timezone_get());
-					$line .= $results[$j][1].";".$results[$j][2].";".$beautifulDate."\n";
-				}
-
-			}
-			else
-			{
-				$line= get_lang('NoResult');
-			}
-		}
-		else
-		{
-			$new_view = substr_replace($view,'1',2,1);
-		}
-		return array($title_line, $line);
-	}
-
-	/**
-	* Displays the links followed for a specific user in a specific course.
-	* @todo remove globals
-	*/
-	function display_links_tracking_info($view, $user_id, $course_id)
-	{
-		global $TABLETRACK_LINKS, $TABLECOURSE_LINKS;
-		if(substr($view,3,1) == '1')
-		{
-			$new_view = substr_replace($view,'0',3,1);
-			$title[1]=get_lang('LinksDetails');
-			$sql = "SELECT `cl`.`title`, `cl`.`url`
-						FROM `$TABLETRACK_LINKS` AS sl, $TABLECOURSE_LINKS AS cl
-						WHERE `sl`.`links_link_id` = `cl`.`id`
-							AND `sl`.`links_cours_id` = '$course_id'
-							AND `sl`.`links_user_id` = '$user_id'
-						GROUP BY `cl`.`title`, `cl`.`url`";
-			$results = getManyResults2Col($sql);
-			$title_line= get_lang('LinksTitleLinkColumn')."\n";
-			if (is_array($results))
-			{
-				for($j = 0 ; $j < count($results) ; $j++)
-				{
-						$line .= $results[$j][0]."\n";
-
-				}
-
-			}
-			else
-			{
-				$line=get_lang('NoResult');
-			}
-		}
-		else
-		{
-			$new_view = substr_replace($view,'1',3,1);
-		}
-		return array($title_line, $line);
-	}
-
-	/**
-	* Displays the documents downloaded for a specific user in a specific course.
-	* @param 	string	kind of view inside tracking info
-	* @param	int		User id
-	* @param	string	Course code
-	* @param	int		Session id (optional, default = 0)
-	* @return 	void
-	*/
-	function display_document_tracking_info($view, $user_id, $course_id, $session_id = 0)
-	{
-		// protect data
-		$user_id 	= intval($user_id);
-		$course_id 	= Database::escape_string($course_id);
-		$session_id = intval($session_id);
-
-		$downloads_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
-
-		if (substr($view,4,1) == '1') {
-			$new_view = substr_replace($view,'0',4,1);
-			$title[1]= get_lang('DocumentsDetails');
-
-			$sql = "SELECT down_doc_path
-						FROM $downloads_table
-						WHERE down_cours_id = '$course_id'
-							AND down_user_id = '$user_id'
-							AND down_session_id = '$session_id'
-						GROUP BY down_doc_path";
-
-			$results = getManyResults1Col($sql);
-			$title_line = get_lang('DocumentsTitleDocumentColumn')."\n";
-			if (is_array($results)) {
-				for($j = 0 ; $j < count($results) ; $j++) {
-						$line .= $results[$j]."\n";
-				}
-			} else {
-				$line=get_lang('NoResult');
-			}
-		} else {
-			$new_view = substr_replace($view,'1',4,1);
-		}
-		return array($title_line, $line);
-	}
-}
-?>
+        while ($a_courses = Database::fetch_array($result)) {
+            $course_code = $a_courses["course_code"];
+
+            $sql = "SELECT distinct    srcru.id_user
+                                FROM $tbl_session_course_user AS srcru
+                                WHERE course_code='$course_code' and id_session = '" . $id_session . "'";
+
+            $rs = Database::query($sql);
+
+            while ($row = Database::fetch_array($rs)) {
+                $a_students[$row['id_user']] = $row['id_user'];
+            }
+        }
+
+        //////////////////////////////////////////////////////////////
+        // 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);
+            while ($row = Database::fetch_array($result)) {
+                $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';
+
+        $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'];
+        }
+
+        //////////////////////////////////////////////////////////////
+        // 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)';
+            }
+        }
+
+        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;
+        }
+
+        $result = Database::query($sql);
+
+        while ($row = Database::fetch_array($result)) {
+            $a_courses[$row['course_code']] = $row['course_code'];
+        }
+
+        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);
+
+        while ($row = Database::fetch_array($rs))
+        {
+            $a_sessions[$row["id"]] = $row;
+        }
+
+        // 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;
+            }
+        }
+
+        $rs = Database::query($sql);
+
+        while ($row = Database::fetch_array($rs))
+        {
+            $a_sessions[$row["id"]] = $row;
+        }
+
+        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;
+
+    }
+
+    /**
+     * 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);
+
+        // table definition
+        $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+        $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
+
+        $sql = 'SELECT DISTINCT course_code
+                        FROM ' . $tbl_session_course . '
+                        WHERE id_session=' . $session_id;
+
+        $rs = Database::query($sql);
+        $a_courses = array ();
+        while ($row = Database::fetch_array($rs)) {
+            $a_courses[$row['course_code']] = $row;
+        }
+        return $a_courses;
+    }
+
+
+    /**
+     * 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) {
+        require_once (api_get_path(LIBRARY_PATH) . 'course.lib.php');
+
+        // 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['db_name'])) {
+            // table definition
+            $tbl_item_property          = Database :: get_course_table(TABLE_ITEM_PROPERTY, $a_course['db_name']);
+            $tbl_student_publication = Database :: get_course_table(TABLE_STUDENT_PUBLICATION, $a_course['db_name']);
+
+            $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' ";
+            }
+
+            $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.tool='work' $condition_user $condition_session ";
+            $rs = Database::query($sql);
+            $row = Database::fetch_row($rs);
+            return $row[0];
+        }
+        return null;
+    }
+
+
+    /**
+     * 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) {
+        require_once (api_get_path(LIBRARY_PATH) . 'course.lib.php');
+
+        // 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['db_name']))
+        {
+            // table definition
+            $tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST, $a_course['db_name']);
+            $tbl_forum         = Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
+
+            $condition_user = "";
+            if (is_array($student_id)) {
+                $condition_user = " WHERE post.poster_id IN (".implode(',',$student_id).") ";
+            } else {
+                $condition_user = " WHERE post.poster_id = '$student_id' ";
+            }
+
+            $condition_session = "";
+            if (isset($session_id)) {
+                $session_id = intval($session_id);
+                $condition_session = " AND forum.session_id = $session_id";
+            }
+
+            $sql = "SELECT 1 FROM $tbl_forum_post post INNER JOIN $tbl_forum forum ON forum.forum_id = post.forum_id $condition_user $condition_session ";
+            $rs = Database::query($sql);
+            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['db_name'])) {
+            $tbl_posts = Database :: get_course_table(TABLE_FORUM_POST, $a_course['db_name']);
+            $tbl_forums = Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
+            $condition_session = '';
+            if (isset($session_id)) {
+                $session_id = intval($session_id);
+                $condition_session = ' WHERE f.session_id = '. $session_id;
+            }
+            $sql = "SELECT count(*) FROM $tbl_posts p INNER JOIN $tbl_forums f ON f.forum_id = p.forum_id $condition_session ";
+            $result = Database::query($sql);
+            $row = Database::fetch_row($result);
+            $count = $row[0];
+            return $count;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+    * 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) {
+        //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['db_name'])) {
+            $tbl_threads = Database :: get_course_table(TABLE_FORUM_THREAD, $a_course['db_name']);
+            $tbl_forums = Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
+            $condition_session = '';
+            if (isset($session_id)) {
+                $session_id = intval($session_id);
+                $condition_session = ' WHERE f.session_id = '. $session_id;
+            }
+            $sql = "SELECT count(*) FROM $tbl_threads t INNER JOIN $tbl_forums f ON f.forum_id = t.forum_id $condition_session ";
+            $result = Database::query($sql);
+            $row = Database::fetch_row($result);
+            $count = $row[0];
+            return $count;
+        } else {
+            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) {
+        //protect data
+        $course_code = addslashes($course_code);
+        // get the informations of the course
+        $a_course = CourseManager :: get_course_information($course_code);
+        $count = 0;
+        if (!empty($a_course['db_name'])) {
+
+            $condition_session = '';
+            if (isset($session_id)) {
+                $session_id = intval($session_id);
+                $condition_session = ' WHERE session_id = '. $session_id;
+            }
+
+            $tbl_forums = Database :: get_course_table(TABLE_FORUM, $a_course['db_name']);
+            $sql = "SELECT count(*) FROM $tbl_forums $condition_session";
+            $result = Database::query($sql);
+            $row = Database::fetch_row($result);
+            $count = $row[0];
+            return $count;
+        } else {
+            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) {
+        //protect data
+        $last_days   = intval($last_days);
+        $course_code = Database::escape_string($course_code);
+        $session_id  = intval($session_id);
+        // get the informations of the course
+        $a_course = CourseManager :: get_course_information($course_code);
+        $count = 0;
+        if (!empty($a_course['db_name'])) {
+            $tbl_stats_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS, $a_course['db_name']);
+
+            $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);
+            $row = Database::fetch_row($result);
+            $count = $row[0];
+            return $count;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+    * 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'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) {
+
+        // protect datas
+        $student_id  = intval($student_id);
+        $course_code = Database::escape_string($course_code);
+        $session_id  = intval($session_id);
+
+        // table definition
+        $tbl_stats_links = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
+
+        $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 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.'" ';
+
+        $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 ();
+
+        $tbl_organism = Database :: get_main_table(TABLE_MAIN_ORGANISM);
+        $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
+
+        $sql = 'SELECT DISTINCT user_id FROM '.$tbl_user.' as user
+                WHERE hr_dept_id='.$hr_dept_id;
+        $rs = Database::query($sql);
+
+        while($user = Database :: fetch_array($rs))
+        {
+            $a_students[$user['user_id']] = $user['user_id'];
+        }
+
+        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 <florespaz@bidsoftperu.com>
+     * @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);
+        $lp_table         = Database :: get_course_table(TABLE_LP_MAIN,$course_info['dbName']);
+        $lp_view_table    = Database  :: get_course_table(TABLE_LP_VIEW,$course_info['dbName']);
+        $lp_item_view_table = Database  :: get_course_table(TABLE_LP_ITEM_VIEW,$course_info['dbName']);
+        $lp_item_table = Database  :: get_course_table(TABLE_LP_ITEM,$course_info['dbName']);
+        $sql_type='SELECT id, lp_type FROM '.$lp_table;
+        $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 dokeos
+
+                    $sql = "SELECT id FROM $lp_view_table  WHERE 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 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 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 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;
+            }
+            $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) {
+
+            //check if LP have a score
+            $sql = "SELECT count(id) as count FROM $lp_item_table
+                    WHERE 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 ($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_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;
+    }
+
+    /**
+     * 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();
+
+        $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;
+            }
+        }
+        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);
+        $data = array();
+
+        $TABLETRACK_LINKS       = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS);
+        $TABLECOURSE_LINKS      = Database::get_course_table(TABLE_LINK, $course_info['dbName']);
+
+        $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 sl.links_link_id = cl.id
+                AND sl.links_cours_id = '$_cid'
+                $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;
+    }
+
+}
+
+class TrackingCourseLog {
+
+    function count_item_resources() {
+        global $session_id;
+
+        $table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
+        $table_user = Database :: get_main_table(TABLE_MAIN_USER);
+
+        $sql = "SELECT count(tool) AS total_number_of_items FROM $table_item_property track_resource, $table_user user" .
+                " WHERE track_resource.insert_user_id = user.user_id AND id_session = $session_id ";
+
+        if (isset($_GET['keyword'])) {
+            $keyword = Database::escape_string(trim($_GET['keyword']));
+            $sql .= " AND (user.username LIKE '%".$keyword."%' OR lastedit_type LIKE '%".$keyword."%' OR tool LIKE '%".$keyword."%')";
+        }
+
+        $sql .= " AND tool IN ('document', 'learnpath', 'quiz', 'glossary', 'link', 'course_description', 'announcement', 'thematic', 'thematic_advance', 'thematic_plan')";
+        $res = Database::query($sql);
+        $obj = Database::fetch_object($res);
+        return $obj->total_number_of_items;
+    }
+
+    function get_item_resources_data($from, $number_of_items, $column, $direction) {
+        global $dateTimeFormatLong, $session_id;
+
+        $table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
+        $table_user = Database :: get_main_table(TABLE_MAIN_USER);
+        $table_session = Database :: get_main_table(TABLE_MAIN_SESSION);
+
+        $sql = "SELECT
+                     tool as col0,
+                    lastedit_type as col1,
+                    ref as ref,
+                    user.username as col3,
+                    insert_date as col5,
+                    visibility as col6
+                FROM $table_item_property track_resource, $table_user user
+                WHERE track_resource.insert_user_id = user.user_id AND id_session = $session_id ";
+
+        if (isset($_GET['keyword'])) {
+            $keyword = Database::escape_string(trim($_GET['keyword']));
+            $sql .= " AND (user.username LIKE '%".$keyword."%' OR lastedit_type LIKE '%".$keyword."%' OR tool LIKE '%".$keyword."%') ";
+        }
+
+        $sql .= " AND tool IN ('document', 'learnpath', 'quiz', 'glossary', 'link', 'course_description', 'announcement', 'thematic', 'thematic_advance', 'thematic_plan')";
+
+        if ($column == 0) { $column = '0'; }
+        if ($column != '' && $direction != '') {
+            if ($column != 2 && $column != 4) {
+                $sql .=    " ORDER BY col$column $direction";
+            }
+        } else {
+            $sql .=    " ORDER BY col5 DESC ";
+        }
+
+        $sql .=    " LIMIT $from, $number_of_items ";
+
+        $res = Database::query($sql);
+        $resources = array ();
+                $thematic_tools = array('thematic', 'thematic_advance', 'thematic_plan');
+        while ($row = Database::fetch_array($res)) {
+            $ref = $row['ref'];
+            $table_name = TrackingCourseLog::get_tool_name_table($row['col0']);
+            $table_tool = Database :: get_course_table($table_name['table_name']);
+
+            $id = $table_name['id_tool'];
+                        if ($row['col0'] == 'thematic_plan' || $row['col0'] == 'thematic_advance') {
+                            $tbl_thematic = Database :: get_course_table(TABLE_THEMATIC);
+                            $rs_thematic = Database::query("SELECT thematic_id FROM $table_tool WHERE id=$ref");
+                            $row_thematic = Database::fetch_array($rs_thematic);
+                            $thematic_id = $row_thematic['thematic_id'];
+
+                            $query = "SELECT session.id, session.name, user.username FROM $tbl_thematic t, $table_session session, $table_user user" .
+                        " WHERE t.session_id = session.id AND session.id_coach = user.user_id AND t.id = $thematic_id";
+
+                        } else {
+                            $query = "SELECT session.id, session.name, user.username FROM $table_tool tool, $table_session session, $table_user user" .
+                        " WHERE tool.session_id = session.id AND session.id_coach = user.user_id AND tool.$id = $ref";
+                        }
+
+
+            $recorset = Database::query($query);
+
+            if (!empty($recorset)) {
+                $obj = Database::fetch_object($recorset);
+
+                $name_session = '';
+                $coach_name = '';
+                if (!empty($obj)) {
+                    $name_session = $obj->name;
+                    $coach_name = $obj->username;
+                }
+
+                $url_tool = api_get_path(WEB_CODE_PATH).$table_name['link_tool'];
+                $row[0] = '';
+                if ($row['col6'] != 2) {
+                                        if (in_array($row['col0'], $thematic_tools)) {
+
+                                            $exp_thematic_tool = explode('_', $row['col0']);
+                                            $thematic_tool_title = '';
+                                            if (is_array($exp_thematic_tool)) {
+                                                foreach ($exp_thematic_tool as $exp) {
+                                                    $thematic_tool_title .= api_ucfirst($exp);
+                                                }
+                                            } else {
+                                                $thematic_tool_title = api_ucfirst($row['col0']);
+                                            }
+
+                                            $row[0] = '<a href="'.$url_tool.'?'.api_get_cidreq().'&action=thematic_details">'.get_lang($thematic_tool_title).'</a>';
+                                        } else {
+                                            $row[0] = '<a href="'.$url_tool.'?'.api_get_cidreq().'&'.$obj->id.'">'.get_lang('Tool'.api_ucfirst($row['col0'])).'</a>';
+                                        }
+                } else {
+                    $row[0] = api_ucfirst($row['col0']);
+                }
+                $row[1] = get_lang($row[1]);
+                $row[5] = api_convert_and_format_date($row['col5'], null, date_default_timezone_get());
+
+                $row[4] = '';
+                switch ($table_name['table_name']) {
+                    case 'document' :
+                        $query_document = "SELECT tool.title as title FROM $table_tool tool" .
+                                            " WHERE id = $ref";
+                        $rs_document = Database::query($query_document);
+                        $obj_document = Database::fetch_object($rs_document);
+                        $row[4] = $obj_document->title;
+                    break;
+                    case 'announcement':
+                        $query_document = "SELECT title FROM $table_tool " .
+                                            " WHERE id = $ref";
+                        $rs_document = Database::query($query_document);
+                        $obj_document = Database::fetch_object($rs_document);
+                        $row[4] = $obj_document->title;
+                    break;
+                    case 'glossary':
+                        $query_document = "SELECT name FROM $table_tool " .
+                                                " WHERE glossary_id = $ref";
+                        $rs_document = Database::query($query_document);
+                        $obj_document = Database::fetch_object($rs_document);
+                        $row[4] = $obj_document->name;
+                    break;
+                    case 'lp':
+                        $query_document = "SELECT name FROM $table_tool " .
+                                                " WHERE id = $ref";
+                        $rs_document = Database::query($query_document);
+                        $obj_document = Database::fetch_object($rs_document);
+                        $row[4] = $obj_document->name;
+                    break;
+                    case 'quiz':
+                        $query_document = "SELECT title FROM $table_tool " .
+                                                " WHERE id = $ref";
+                        $rs_document = Database::query($query_document);
+                        $obj_document = Database::fetch_object($rs_document);
+                        $row[4] = $obj_document->title;
+                    break;
+
+                    case 'course_description':
+                        $query_document = "SELECT title FROM $table_tool " .
+                                                " WHERE id = $ref";
+                        $rs_document = Database::query($query_document);
+                        $obj_document = Database::fetch_object($rs_document);
+                        $row[4] = $obj_document->title;
+                    break;
+
+                                        case 'thematic':
+                                                $rs = Database::query("SELECT title FROM $table_tool WHERE id = $ref");
+                                                if (Database::num_rows($rs) > 0) {
+                                                    $obj = Database::fetch_object($rs);
+                                                    $row[4] = $obj->title;
+                                                }
+                                                break;
+                                        case 'thematic_advance':
+                                                $rs = Database::query("SELECT content FROM $table_tool WHERE id = $ref");
+                                                if (Database::num_rows($rs) > 0) {
+                                                    $obj = Database::fetch_object($rs);
+                                                    $row[4] = $obj->content;
+                                                }
+                                                break;
+                                        case 'thematic_plan':
+                                                $rs = Database::query("SELECT title FROM $table_tool WHERE id = $ref");
+                                                if (Database::num_rows($rs) > 0) {
+                                                    $obj = Database::fetch_object($rs);
+                                                    $row[4] = $obj->title;
+                                                }
+                                                break;
+
+                    default:
+                    break;
+                }
+
+                $row2 = $name_session;
+                if (!empty($coach_name)) {
+                    $row2 .= '<br />'.get_lang('Coach').': '.$coach_name;
+                }
+                $row[2] = $row2;
+
+                $resources[] = $row;
+            }
+        }
+
+        return $resources;
+    }
+
+    function get_tool_name_table($tool) {
+        switch ($tool) {
+            case 'document':
+                $table_name = TABLE_DOCUMENT;
+                $link_tool = 'document/document.php';
+                $id_tool = 'id';
+                break;
+            case 'learnpath':
+                $table_name = TABLE_LP_MAIN;
+                $link_tool = 'newscorm/lp_controller.php';
+                $id_tool = 'id';
+                break;
+            case 'quiz':
+                $table_name = TABLE_QUIZ_TEST;
+                $link_tool = 'exercice/exercice.php';
+                $id_tool = 'id';
+                break;
+            case 'glossary':
+                $table_name = TABLE_GLOSSARY;
+                $link_tool = 'glossary/index.php';
+                $id_tool = 'glossary_id';
+                break;
+            case 'link':
+                $table_name = TABLE_LINK;
+                $link_tool = 'link/link.php';
+                $id_tool = 'id';
+                break;
+            case 'course_description':
+                $table_name = TABLE_COURSE_DESCRIPTION;
+                $link_tool = 'course_description/';
+                $id_tool = 'id';
+                break;
+            case 'announcement':
+                $table_name = TABLE_ANNOUNCEMENT;
+                $link_tool = 'announcements/announcements.php';
+                $id_tool = 'id';
+                break;
+                        case 'thematic':
+                $table_name = TABLE_THEMATIC;
+                $link_tool = 'course_progress/index.php';
+                $id_tool = 'id';
+                break;
+                        case 'thematic_advance':
+                $table_name = TABLE_THEMATIC_ADVANCE;
+                $link_tool = 'course_progress/index.php';
+                $id_tool = 'id';
+                break;
+                        case 'thematic_plan':
+                $table_name = TABLE_THEMATIC_PLAN;
+                $link_tool = 'course_progress/index.php';
+                $id_tool = 'id';
+                break;
+            default:
+                $table_name = $tool;
+                break;
+        }
+        return array('table_name' => $table_name,'link_tool' => $link_tool,'id_tool' => $id_tool);
+    }
+
+    function display_additional_profile_fields() {
+        // getting all the extra profile fields that are defined by the platform administrator
+        $extra_fields = UserManager :: get_extra_fields(0,50,5,'ASC');
+
+        // creating the form
+        $return = '<form action="courseLog.php" method="get" name="additional_profile_field_form" id="additional_profile_field_form">';
+
+        // the select field with the additional user profile fields (= this is where we select the field of which we want to see
+        // the information the users have entered or selected.
+        $return .= '<select name="additional_profile_field">';
+        $return .= '<option value="-">'.get_lang('SelectFieldToAdd').'</option>';
+
+        foreach ($extra_fields as $key=>$field) {
+            // show only extra fields that are visible, added by J.Montoya
+            if ($field[6]==1) {
+                if ($field[0] == $_GET['additional_profile_field'] ) {
+                    $selected = 'selected="selected"';
+                } else {
+                    $selected = '';
+                }
+                $return .= '<option value="'.$field[0].'" '.$selected.'>'.$field[3].'</option>';
+            }
+        }
+        $return .= '</select>';
+
+        // the form elements for the $_GET parameters (because the form is passed through GET
+        foreach ($_GET as $key=>$value){
+            if ($key <> 'additional_profile_field')    {
+                $return .= '<input type="hidden" name="'.Security::remove_XSS($key).'" value="'.Security::remove_XSS($value).'" />';
+            }
+        }
+        // the submit button
+        $return .= '<button class="save" type="submit">'.get_lang('AddAdditionalProfileField').'</button>';
+        $return .= '</form>';
+        return $return;
+    }
+
+    /**
+     * This function gets all the information of a certrain ($field_id) additional profile field.
+     * It gets the information of all the users so that it can be displayed in the sortable table or in the csv or xls export
+     *
+     * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University, Belgium
+     * @since October 2009
+     * @version 1.8.7
+     */
+    function get_addtional_profile_information_of_field($field_id){
+        // Database table definition
+        $table_user             = Database::get_main_table(TABLE_MAIN_USER);
+        $table_user_field_values     = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
+
+        $sql = "SELECT user.user_id, field.field_value FROM $table_user user, $table_user_field_values field
+            WHERE user.user_id = field.user_id
+            AND field.field_id='".intval($field_id)."'";
+        $result = Database::query($sql);
+        while($row = Database::fetch_array($result)) {
+            $return[$row['user_id']][] = $row['field_value'];
+        }
+        return $return;
+    }
+
+    /**
+     * This function gets all the information of a certrain ($field_id) additional profile field for a specific list of users is more efficent than  get_addtional_profile_information_of_field() function
+     * It gets the information of all the users so that it can be displayed in the sortable table or in the csv or xls export
+     *
+     * @author    Julio Montoya <gugli100@gmail.com>
+     * @param    int field id
+     * @param    array list of user ids
+     * @return    array
+     * @since    Nov 2009
+     * @version    1.8.6.2
+     */
+    function get_addtional_profile_information_of_field_by_user($field_id, $users) {
+        // Database table definition
+        $table_user                 = Database::get_main_table(TABLE_MAIN_USER);
+        $table_user_field_values     = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
+        $result_extra_field         = UserManager::get_extra_field_information($field_id);
+
+        if (!empty($users)) {
+            if ($result_extra_field['field_type'] == USER_FIELD_TYPE_TAG ) {
+                foreach($users as $user_id) {
+                    $user_result = UserManager::get_user_tags($user_id, $field_id);
+                    $tag_list = array();
+                    foreach($user_result as $item) {
+                        $tag_list[] = $item['tag'];
+                    }
+                    $return[$user_id][] = implode(', ',$tag_list);
+                }
+            } else {
+                $new_user_array = array();
+                foreach($users as $user_id) {
+                    $new_user_array[]= "'".$user_id."'";
+                }
+                $users = implode(',',$new_user_array);
+                //selecting only the necessary information NOT ALL the user list
+                $sql = "SELECT user.user_id, field.field_value FROM $table_user user INNER JOIN $table_user_field_values field
+                        ON (user.user_id = field.user_id)
+                        WHERE field.field_id=".intval($field_id)." AND user.user_id IN ($users)";
+
+                $result = Database::query($sql);
+                while($row = Database::fetch_array($result)) {
+                    // get option value for field type double select by id
+                    if (!empty($row['field_value'])) {
+                        if ($result_extra_field['field_type'] == USER_FIELD_TYPE_DOUBLE_SELECT) {
+                            $id_double_select = explode(';',$row['field_value']);
+                            if (is_array($id_double_select)) {
+                                $value1 = $result_extra_field['options'][$id_double_select[0]]['option_value'];
+                                $value2 = $result_extra_field['options'][$id_double_select[1]]['option_value'];
+                                $row['field_value'] = ($value1.';'.$value2);
+                            }
+                        }
+                    }
+                    // get other value from extra field
+                    $return[$row['user_id']][] = $row['field_value'];
+                }
+            }
+        }
+        return $return;
+    }
+
+    /**
+     * count the number of students in this course (used for SortableTable)
+     * Deprecated
+     */
+    function count_student_in_course() {
+        global $nbStudents;
+        return $nbStudents;
+    }
+
+    function sort_users($a, $b) {
+        return strcmp(trim(api_strtolower($a[$_SESSION['tracking_column']])), trim(api_strtolower($b[$_SESSION['tracking_column']])));
+    }
+
+    function sort_users_desc($a, $b) {
+        return strcmp( trim(api_strtolower($b[$_SESSION['tracking_column']])), trim(api_strtolower($a[$_SESSION['tracking_column']])));
+    }
+
+    /**
+     * Get number of users for sortable with pagination
+     * @return int
+     */
+    function get_number_of_users() {
+            global $user_ids;
+            return count($user_ids);
+    }
+
+    /**
+     * Get data for users list in sortable with pagination
+     * @return array
+     */
+    function get_user_data($from, $number_of_items, $column, $direction) {
+
+        global $user_ids, $course_code, $additional_user_profile_info, $export_csv, $is_western_name_order, $csv_content, $session_id, $_configuration;
+
+
+        $course_code = Database::escape_string($course_code);
+        $course_info = CourseManager :: get_course_information($course_code);
+        $tbl_user      = Database :: get_main_table(TABLE_MAIN_USER);
+        $access_url_id = api_get_current_access_url_id();
+        $tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
+
+        // get all users data from a course for sortable with limit
+        $condition_user = "";
+        if (is_array($user_ids)) {
+            $condition_user = " WHERE user.user_id IN (".implode(',',$user_ids).") ";
+        } else {
+            $condition_user = " WHERE user.user_id = '$user_ids' ";
+        }
+
+        if ($_configuration['multiple_access_urls']) {
+            $url_table = ", ".$tbl_url_rel_user."as url_users";
+            $url_condition = " AND user.user_id = url_users.user_id AND access_url_id='$access_url_id'";
+        }
+
+        $sql = "SELECT user.user_id as col0,
+                user.official_code as col1,
+                user.lastname as col2,
+                user.firstname as col3
+                FROM $tbl_user as user $url_table
+                $condition_user $url_condition";
+
+        if (!in_array($direction, array('ASC','DESC'))) {
+            $direction = 'ASC';
+        }
+
+        $column = intval($column);
+        $from = intval($from);
+        $number_of_items = intval($number_of_items);
+        $sql .= " ORDER BY col$column $direction ";
+        $sql .= " LIMIT $from,$number_of_items";
+        
+        $res = Database::query($sql);
+        $users = array ();
+        $t = time();
+           $row = array();
+        while ($user = Database::fetch_row($res)) {
+
+            $row[0] = $user[1];
+            if ($is_western_name_order) {
+                $row[1] = $user[3];
+                $row[2] = $user[2];
+            } else {
+                $row[1] = $user[2];
+                $row[2] = $user[3];
+            }
+            $row[3] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user[0], $course_code, $session_id));
+
+            $avg_student_score = Tracking::get_avg_student_score($user[0], $course_code, array(), $session_id);
+            //echo '<b>student '.$user[0].' $avg_student_score:</b> '.$avg_student_score; echo '<br />';
+            $avg_student_progress = Tracking::get_avg_student_progress($user[0], $course_code, array(), $session_id);
+            if (empty($avg_student_progress)) {$avg_student_progress=0;}
+            $row[4] = $avg_student_progress.'%';
+            //if (empty($avg_student_score)) {$avg_student_score=0;}
+            if(is_numeric($avg_student_score)) {
+                $row[5] = $avg_student_score.'%';
+            } else {
+                $row[5] = $avg_student_score;
+            }
+            $row[6] = Tracking::count_student_assignments($user[0], $course_code, $session_id);
+            $row[7] = Tracking::count_student_messages($user[0], $course_code, $session_id);
+            $row[8] = Tracking::get_first_connection_date_on_the_course($user[0], $course_code, $session_id);
+            $row[9] = Tracking::get_last_connection_date_on_the_course($user[0], $course_code, $session_id);
+
+            // we need to display an additional profile field
+            if (isset($_GET['additional_profile_field']) AND is_numeric($_GET['additional_profile_field'])) {
+                if (is_array($additional_user_profile_info[$user[0]])) {
+                    $row[10]=implode(', ', $additional_user_profile_info[$user[0]]);
+                } else {
+                    $row[10]='&nbsp;';
+                }
+            }
+            $row[11] = '<center><a href="../mySpace/myStudents.php?student='.$user[0].'&details=true&course='.$course_code.'&origin=tracking_course&id_session='.$session_id.'"><img src="'.api_get_path(WEB_IMG_PATH).'2rightarrow.gif" border="0" /></a></center>';
+            if ($export_csv) {
+                $row[8] = strip_tags($row[8]);
+                $row[9] = strip_tags($row[9]);
+                unset($row[10]);
+                unset($row[11]);
+                $csv_content[] = $row;
+            }
+            // store columns in array $users
+            $users[] = array($row[0],$row[1],$row[2],$row[3],$row[4],$row[5],$row[6],$row[7],$row[8],$row[9],$row[10],$row[11]);
+        }
+        return $users;
+    }
+}
+
+class TrackingUserLog {
+
+    /**
+    * Displays the number of logins every month for a specific user in a specific course.
+    */
+    function display_login_tracking_info($view, $user_id, $course_id, $session_id = 0)
+    {
+        $MonthsLong = $GLOBALS['MonthsLong'];
+
+        // protected data
+        $user_id = intval($user_id);
+        $session_id = intval($session_id);
+        $course_id = Database::escape_string($course_id);
+
+        $track_access_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
+        $tempView = $view;
+        if(substr($view,0,1) == '1') {
+            $new_view = substr_replace($view,'0',0,1);
+            echo "
+                <tr>
+                    <td valign='top'>
+                    <font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font>" .
+                    "<b>".get_lang('LoginsAndAccessTools')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".$user_id."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=10000'>".get_lang('ExportAsCSV')."</a>]
+                    </td>
+                </tr>
+                ";
+            echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('LoginsDetails')."<br>";
+
+            $sql = "SELECT UNIX_TIMESTAMP(access_date), count(access_date)
+                        FROM $track_access_table
+                        WHERE access_user_id = '$user_id'
+                        AND access_cours_code = '$course_id'
+                        AND access_session_id = '$session_id'
+                        GROUP BY YEAR(access_date),MONTH(access_date)
+                        ORDER BY YEAR(access_date),MONTH(access_date) ASC";
+
+            echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
+            //$results = getManyResults2Col($sql);
+            $results = getManyResults3Col($sql);
+
+            echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
+            echo "<tr>
+                    <td class='secLine'>
+                    ".get_lang('LoginsTitleMonthColumn')."
+                    </td>
+                    <td class='secLine'>
+                    ".get_lang('LoginsTitleCountColumn')."
+                    </td>
+                </tr>";
+            $total = 0;
+            if (is_array($results)) {
+                for($j = 0 ; $j < count($results) ; $j++) {
+                    echo "<tr>";
+                    echo "<td class='content'><a href='logins_details.php?uInfo=".$user_id."&reqdate=".$results[$j][0]."&view=".Security::remove_XSS($view)."'>".$MonthsLong[date('n', $results[$j][0])-1].' '.date('Y', $results[$j][0])."</a></td>";
+                    echo "<td valign='top' align='right' class='content'>".$results[$j][1]."</td>";
+                    echo"</tr>";
+                    $total = $total + $results[$j][1];
+                }
+                echo "<tr>";
+                echo "<td>".get_lang('Total')."</td>";
+                echo "<td align='right' class='content'>".$total."</td>";
+                echo"</tr>";
+            } else {
+                echo "<tr>";
+                echo "<td colspan='2'><center>".get_lang('NoResult')."</center></td>";
+                echo"</tr>";
+            }
+            echo "</table>";
+            echo "</td></tr>";
+        } else {
+            $new_view = substr_replace($view,'1',0,1);
+            echo "
+                <tr>
+                    <td valign='top'>
+                    +<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".$user_id."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('LoginsAndAccessTools')."</a>
+                    </td>
+                </tr>
+            ";
+        }
+    }
+
+    /**
+    * Displays the exercise results for a specific user in a specific course.
+    * @todo remove globals
+    */
+    function display_exercise_tracking_info($view, $user_id, $course_id)
+    {
+        global $TABLECOURSE_EXERCICES, $TABLETRACK_EXERCICES, $dateTimeFormatLong;
+        if(substr($view,1,1) == '1')
+        {
+            $new_view = substr_replace($view,'0',1,1);
+            echo "<tr>
+                    <td valign='top'>
+                        <font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('ExercicesResults')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=01000'>".get_lang('ExportAsCSV')."</a>]
+                    </td>
+                </tr>";
+            echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('ExercicesDetails')."<br />";
+
+            $sql = "SELECT ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
+                FROM $TABLECOURSE_EXERCICES AS ce , $TABLETRACK_EXERCICES AS te
+                WHERE te.exe_cours_id = '".Database::escape_string($course_id)."'
+                    AND te.exe_user_id = '".Database::escape_string($user_id)."'
+                    AND te.exe_exo_id = ce.id
+                ORDER BY ce.title ASC, te.exe_date ASC";
+
+            $hpsql = "SELECT te.exe_name, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
+                FROM $TBL_TRACK_HOTPOTATOES AS te
+                WHERE te.exe_user_id = '".Database::escape_string($user_id)."' AND te.exe_cours_id = '".Database::escape_string($course_id)."'
+                ORDER BY te.exe_cours_id ASC, te.exe_date ASC";
+
+            $hpresults = getManyResultsXCol($hpsql, 4);
+
+            $NoTestRes = 0;
+            $NoHPTestRes = 0;
+
+            echo "<tr>\n<td style='padding-left : 40px;padding-right : 40px;'>\n";
+            $results = getManyResultsXCol($sql, 4);
+            echo "<table cellpadding='2' cellspacing='1' border='0' align='center'>\n";
+            echo "
+                <tr bgcolor='#E6E6E6'>
+                    <td>
+                    ".get_lang('ExercicesTitleExerciceColumn')."
+                    </td>
+                    <td>
+                    ".get_lang('Date')."
+                    </td>
+                    <td>
+                    ".get_lang('ExercicesTitleScoreColumn')."
+                    </td>
+                </tr>";
+
+            if (is_array($results)) {
+                for($i = 0; $i < sizeof($results); $i++) {
+                    $display_date = api_convert_and_format_date($results[$i][3], null, date_default_timezone_get());
+                    echo "<tr>\n";
+                    echo "<td class='content'>".$results[$i][0]."</td>\n";
+                    echo "<td class='content'>".$display_date."</td>\n";
+                    echo "<td valign='top' align='right' class='content'>".$results[$i][1]." / ".$results[$i][2]."</td>\n";
+                    echo "</tr>\n";
+                }
+            } else {
+                // istvan begin
+                $NoTestRes = 1;
+            }
+
+            // The Result of Tests
+            if(is_array($hpresults)) {
+                for($i = 0; $i < sizeof($hpresults); $i++) {
+                    $title = GetQuizName($hpresults[$i][0],'');
+                    if ($title == '')
+                        $title = basename($hpresults[$i][0]);
+                    $display_date = api_convert_and_format_date($hpresults[$i][3], null, date_default_timezone_get());
+    ?>
+                    <tr>
+                        <td class="content"><?php echo $title; ?></td>
+                        <td class="content" align="center"><?php echo $display_date; ?></td>
+                        <td class="content" align="center"><?php echo $hpresults[$i][1]; ?> / <?php echo $hpresults[$i][2]; ?></td>
+                    </tr>
+    <?php        }
+            } else {
+                $NoHPTestRes = 1;
+            }
+
+            if ($NoTestRes == 1 && $NoHPTestRes == 1) {
+                echo "<tr>\n";
+                echo "<td colspan='3'><center>".get_lang('NoResult')."</center></td>\n";
+                echo "</tr>\n";
+            }
+            echo "</table>";
+            echo "</td>\n</tr>\n";
+        } else {
+            $new_view = substr_replace($view,'1',1,1);
+            echo "
+                <tr>
+                    <td valign='top'>
+                        +<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=$user_id&view=".$new_view."' class='specialLink'>".get_lang('ExercicesResults')."</a>
+                    </td>
+                </tr>";
+        }
+    }
+
+    /**
+    * Displays the student publications for a specific user in a specific course.
+    * @todo remove globals
+    */
+    function display_student_publications_tracking_info($view, $user_id, $course_id)
+    {
+        global $TABLETRACK_UPLOADS, $TABLECOURSE_WORK, $dateTimeFormatLong, $_course;
+        if(substr($view,2,1) == '1') {
+            $new_view = substr_replace($view,'0',2,1);
+            echo "<tr>
+                        <td valign='top'>
+                        <font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('WorkUploads')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00100'>".get_lang('ExportAsCSV')."</a>]
+                        </td>
+                </tr>";
+            echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('WorksDetails')."<br>";
+            $sql = "SELECT u.upload_date, w.title, w.author,w.url
+                                FROM $TABLETRACK_UPLOADS u , $TABLECOURSE_WORK w
+                                WHERE u.upload_work_id = w.id
+                                    AND u.upload_user_id = '".Database::escape_string($user_id)."'
+                                    AND u.upload_cours_id = '".Database::escape_string($course_id)."'
+                                ORDER BY u.upload_date DESC";
+            echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
+            $results = getManyResultsXCol($sql,4);
+            echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
+            echo "<tr>
+                    <td class='secLine' width='40%'>
+                    ".get_lang('WorkTitle')."
+                    </td>
+                    <td class='secLine' width='30%'>
+                    ".get_lang('WorkAuthors')."
+                    </td>
+                    <td class='secLine' width='30%'>
+                    ".get_lang('Date')."
+                    </td>
+                </tr>";
+            if (is_array($results)) {
+                for($j = 0 ; $j < count($results) ; $j++) {
+                    $pathToFile = api_get_path(WEB_COURSE_PATH).$_course['path']."/".$results[$j][3];
+                    $beautifulDate = api_convert_and_format_date($results[$j][0], null, date_default_timezone_get());
+                    echo "<tr>";
+                    echo "<td class='content'>"
+                            ."<a href ='".$pathToFile."'>".$results[$j][1]."</a>"
+                            ."</td>";
+                    echo "<td class='content'>".$results[$j][2]."</td>";
+                    echo "<td class='content'>".$beautifulDate."</td>";
+                    echo"</tr>";
+                }
+            } else {
+                echo "<tr>";
+                echo "<td colspan='3'><center>".get_lang('NoResult')."</center></td>";
+                echo"</tr>";
+            }
+            echo "</table>";
+            echo "</td></tr>";
+        } else {
+            $new_view = substr_replace($view,'1',2,1);
+            echo "
+                <tr>
+                        <td valign='top'>
+                        +<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('WorkUploads')."</a>
+                        </td>
+                </tr>
+            ";
+        }
+    }
+
+    /**
+    * Displays the links followed for a specific user in a specific course.
+    * @todo remove globals
+    */
+    function display_links_tracking_info($view, $user_id, $course_id)
+    {
+        global $TABLETRACK_LINKS, $TABLECOURSE_LINKS;
+        if(substr($view,3,1) == '1') {
+            $new_view = substr_replace($view,'0',3,1);
+            echo "
+                <tr>
+                        <td valign='top'>
+                        <font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('LinksAccess')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00010'>".get_lang('ExportAsCSV')."</a>]
+                        </td>
+                </tr>
+            ";
+            echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('LinksDetails')."<br>";
+            $sql = "SELECT cl.title, cl.url
+                        FROM $TABLETRACK_LINKS AS sl, $TABLECOURSE_LINKS AS cl
+                        WHERE sl.links_link_id = cl.id
+                            AND sl.links_cours_id = '".Database::escape_string($course_id)."'
+                            AND sl.links_user_id = '".Database::escape_string($user_id)."'
+                        GROUP BY cl.title, cl.url";
+            echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
+            $results = getManyResults2Col($sql);
+            echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
+            echo "<tr>
+                    <td class='secLine'>
+                    ".get_lang('LinksTitleLinkColumn')."
+                    </td>
+                </tr>";
+            if (is_array($results)) {
+                for($j = 0 ; $j < count($results) ; $j++) {
+                        echo "<tr>";
+                        echo "<td class='content'><a href='".$results[$j][1]."'>".$results[$j][0]."</a></td>";
+                        echo"</tr>";
+                }
+            } else {
+                echo "<tr>";
+                echo "<td ><center>".get_lang('NoResult')."</center></td>";
+                echo"</tr>";
+            }
+            echo "</table>";
+            echo "</td></tr>";
+        } else {
+            $new_view = substr_replace($view,'1',3,1);
+            echo "
+                <tr>
+                        <td valign='top'>
+                        +<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('LinksAccess')."</a>
+                        </td>
+                </tr>
+            ";
+        }
+    }
+
+    /**
+    * Displays the documents downloaded for a specific user in a specific course.
+    * @param     string    kind of view inside tracking info
+    * @param    int        User id
+    * @param    string    Course code
+    * @param    int        Session id (optional, default = 0)
+    * @return     void
+    */
+    function display_document_tracking_info($view, $user_id, $course_id, $session_id = 0)
+    {
+
+        // protect data
+        $user_id     = intval($user_id);
+        $course_id     = Database::escape_string($course_id);
+        $session_id = intval($session_id);
+
+        $downloads_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
+        if(substr($view,4,1) == '1')
+        {
+            $new_view = substr_replace($view,'0',4,1);
+            echo "
+                <tr>
+                        <td valign='top'>
+                        <font color='#0000FF'>-&nbsp;&nbsp;&nbsp;</font><b>".get_lang('DocumentsAccess')."</b>&nbsp;&nbsp;&nbsp;[<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>]&nbsp;&nbsp;&nbsp;[<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00001'>".get_lang('ExportAsCSV')."</a>]
+                        </td>
+                </tr>
+            ";
+            echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('DocumentsDetails')."<br>";
+
+            $sql = "SELECT down_doc_path
+                        FROM $downloads_table
+                        WHERE down_cours_id = '".$course_id."'
+                            AND down_user_id = '$user_id'
+                            AND down_session_id = '$session_id'
+                        GROUP BY down_doc_path";
+
+            echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
+            $results = getManyResults1Col($sql);
+            echo "<table cellpadding='2' cellspacing='1' border='0' align='center'>";
+            echo "<tr>
+                    <td class='secLine'>
+                    ".get_lang('DocumentsTitleDocumentColumn')."
+                    </td>
+                </tr>";
+            if (is_array($results)) {
+                for($j = 0 ; $j < count($results) ; $j++) {
+                        echo "<tr>";
+                        echo "<td class='content'>".$results[$j]."</td>";
+                        echo"</tr>";
+                }
+            } else {
+                echo "<tr>";
+                echo "<td><center>".get_lang('NoResult')."</center></td>";
+                echo"</tr>";
+            }
+            echo "</table>";
+            echo "</td></tr>";
+        } else {
+            $new_view = substr_replace($view,'1',4,1);
+            echo "
+                <tr>
+                        <td valign='top'>
+                        +<font color='#0000FF'>&nbsp;&nbsp;</font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('DocumentsAccess')."</a>
+                        </td>
+                </tr>
+            ";
+        }
+    }
+
+}
+
+class TrackingUserLogCSV {
+
+    /**
+    * Displays the number of logins every month for a specific user in a specific course.
+    */
+    function display_login_tracking_info($view, $user_id, $course_id, $session_id = 0)
+    {
+        $MonthsLong = $GLOBALS['MonthsLong'];
+        $track_access_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
+
+        // protected data
+        $user_id    = intval($user_id);
+        $session_id = intval($session_id);
+        $course_id  = Database::escape_string($course_id);
+
+        $tempView = $view;
+        if(substr($view,0,1) == '1')
+        {
+            $new_view = substr_replace($view,'0',0,1);
+            $title[1]= get_lang('LoginsAndAccessTools').get_lang('LoginsDetails');
+
+            $sql = "SELECT UNIX_TIMESTAMP(access_date), count(access_date)
+                        FROM $track_access_table
+                        WHERE access_user_id = '$user_id'
+                        AND access_cours_code = '".$course_id."'
+                        AND access_session_id = '$session_id'
+                        GROUP BY YEAR(access_date),MONTH(access_date)
+                        ORDER BY YEAR(access_date),MONTH(access_date) ASC";
+
+            //$results = getManyResults2Col($sql);
+            $results = getManyResults3Col($sql);
+
+            $title_line= get_lang('LoginsTitleMonthColumn').';'.get_lang('LoginsTitleCountColumn')."\n";
+            $line='';
+            $total = 0;
+            if (is_array($results))
+            {
+                for($j = 0 ; $j < count($results) ; $j++)
+                {
+                    $line .= $results[$j][0].';'.$results[$j][1]."\n";
+                    $total = $total + $results[$j][1];
+                }
+            $line .= get_lang('Total').";".$total."\n";
+            }
+            else
+            {
+                $line= get_lang('NoResult')."</center></td>";
+            }
+        }
+        else
+        {
+            $new_view = substr_replace($view,'1',0,1);
+        }
+        return array($title_line, $line);
+    }
+
+    /**
+    * Displays the exercise results for a specific user in a specific course.
+    * @todo remove globals
+    */
+    function display_exercise_tracking_info($view, $user_id, $course_id) {
+        global $TABLECOURSE_EXERCICES, $TABLETRACK_EXERCICES, $TABLETRACK_HOTPOTATOES, $dateTimeFormatLong;
+        if (substr($view,1,1) == '1') {
+            $new_view = substr_replace($view,'0',1,1);
+
+            $title[1]= get_lang('ExercicesDetails');
+            $line='';
+
+            $sql = "SELECT ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
+                FROM $TABLECOURSE_EXERCICES AS ce , $TABLETRACK_EXERCICES AS te
+                WHERE te.exe_cours_id = '$course_id'
+                    AND te.exe_user_id = '$user_id'
+                    AND te.exe_exo_id = ce.id
+                ORDER BY ce.title ASC, te.exe_date ASC";
+
+            $hpsql = "SELECT te.exe_name, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
+                FROM $TABLETRACK_HOTPOTATOES AS te
+                WHERE te.exe_user_id = '$user_id' AND te.exe_cours_id = '$course_id'
+                ORDER BY te.exe_cours_id ASC, te.exe_date ASC";
+
+            $hpresults = getManyResultsXCol($hpsql, 4);
+
+            $NoTestRes = 0;
+            $NoHPTestRes = 0;
+
+            $results = getManyResultsXCol($sql, 4);
+            $title_line=get_lang('ExercicesTitleExerciceColumn').";".get_lang('Date').';'.get_lang('ExercicesTitleScoreColumn')."\n";
+
+            if (is_array($results))
+            {
+                for($i = 0; $i < sizeof($results); $i++)
+                {
+                    $display_date = api_convert_and_format_date($results[$i][3], null, date_default_timezone_get());
+                    $line .= $results[$i][0].";".$display_date.";".$results[$i][1]." / ".$results[$i][2]."\n";
+                }
+            }
+            else // istvan begin
+            {
+                $NoTestRes = 1;
+            }
+
+            // The Result of Tests
+            if(is_array($hpresults))
+            {
+                for($i = 0; $i < sizeof($hpresults); $i++)
+                {
+                    $title = GetQuizName($hpresults[$i][0],'');
+
+                    if ($title == '')
+                        $title = basename($hpresults[$i][0]);
+
+                    $display_date = api_convert_and_format_date($hpresults[$i][3], null, date_default_timezone_get());
+
+                    $line .= $title.';'.$display_date.';'.$hpresults[$i][1].'/'.$hpresults[$i][2]."\n";
+                }
+            }
+            else
+            {
+                $NoHPTestRes = 1;
+            }
+
+            if ($NoTestRes == 1 && $NoHPTestRes == 1)
+            {
+                $line=get_lang('NoResult');
+            }
+        }
+        else
+        {
+            $new_view = substr_replace($view,'1',1,1);
+
+        }
+        return array($title_line, $line);
+    }
+
+    /**
+    * Displays the student publications for a specific user in a specific course.
+    * @todo remove globals
+    */
+    function display_student_publications_tracking_info($view, $user_id, $course_id) {
+        global $TABLETRACK_UPLOADS, $TABLECOURSE_WORK, $dateTimeFormatLong, $_course;
+        if (substr($view,2,1) == '1') {
+            $new_view = substr_replace($view,'0',2,1);
+            $sql = "SELECT u.upload_date, w.title, w.author, w.url
+                    FROM $TABLETRACK_UPLOADS u , $TABLECOURSE_WORK w
+                    WHERE u.upload_work_id = w.id
+                        AND u.upload_user_id = '$user_id'
+                        AND u.upload_cours_id = '$course_id'
+                    ORDER BY u.upload_date DESC";
+            $results = getManyResultsXCol($sql,4);
+
+            $title[1]=get_lang('WorksDetails');
+            $line='';
+            $title_line=get_lang('WorkTitle').";".get_lang('WorkAuthors').";".get_lang('Date')."\n";
+
+            if (is_array($results)) {
+                for($j = 0 ; $j < count($results) ; $j++) {
+                    $pathToFile = api_get_path(WEB_COURSE_PATH).$_course['path']."/".$results[$j][3];
+                    $beautifulDate = api_convert_and_format_date($results[$j][0], null, date_default_timezone_get());
+                    $line .= $results[$j][1].";".$results[$j][2].";".$beautifulDate."\n";
+                }
+
+            } else {
+                $line= get_lang('NoResult');
+            }
+        } else {
+            $new_view = substr_replace($view,'1',2,1);
+        }
+        return array($title_line, $line);
+    }
+
+    /**
+    * Displays the links followed for a specific user in a specific course.
+    * @todo remove globals
+    */
+    function display_links_tracking_info($view, $user_id, $course_id) {
+        global $TABLETRACK_LINKS, $TABLECOURSE_LINKS;
+        if (substr($view,3,1) == '1') {
+            $new_view = substr_replace($view,'0',3,1);
+            $title[1]=get_lang('LinksDetails');
+            $sql = "SELECT cl.title, cl.url
+                        FROM $TABLETRACK_LINKS AS sl, $TABLECOURSE_LINKS AS cl
+                        WHERE sl.links_link_id = cl.id
+                            AND sl.links_cours_id = '$course_id'
+                            AND sl.links_user_id = '$user_id'
+                        GROUP BY cl.title, cl.url";
+            $results = getManyResults2Col($sql);
+            $title_line= get_lang('LinksTitleLinkColumn')."\n";
+            if (is_array($results)) {
+                for ($j = 0 ; $j < count($results) ; $j++) {
+                        $line .= $results[$j][0]."\n";
+                }
+            } else {
+                $line=get_lang('NoResult');
+            }
+        } else {
+            $new_view = substr_replace($view,'1',3,1);
+        }
+        return array($title_line, $line);
+    }
+
+    /**
+    * Displays the documents downloaded for a specific user in a specific course.
+    * @param     string    kind of view inside tracking info
+    * @param    int        User id
+    * @param    string    Course code
+    * @param    int        Session id (optional, default = 0)
+    * @return     void
+    */
+    function display_document_tracking_info($view, $user_id, $course_id, $session_id = 0) {
+        // protect data
+        $user_id     = intval($user_id);
+        $course_id     = Database::escape_string($course_id);
+        $session_id = intval($session_id);
+
+        $downloads_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
+
+        if (substr($view,4,1) == '1') {
+            $new_view = substr_replace($view,'0',4,1);
+            $title[1]= get_lang('DocumentsDetails');
+
+            $sql = "SELECT down_doc_path
+                        FROM $downloads_table
+                        WHERE down_cours_id = '$course_id'
+                            AND down_user_id = '$user_id'
+                            AND down_session_id = '$session_id'
+                        GROUP BY down_doc_path";
+
+            $results = getManyResults1Col($sql);
+            $title_line = get_lang('DocumentsTitleDocumentColumn')."\n";
+            if (is_array($results)) {
+                for ($j = 0 ; $j < count($results) ; $j++) {
+                        $line .= $results[$j]."\n";
+                }
+            } else {
+                $line = get_lang('NoResult');
+            }
+        } else {
+            $new_view = substr_replace($view,'1',4,1);
+        }
+        return array($title_line, $line);
+    }
+}