Browse Source

Merging to co-sprinters HEAD.

Marco Antonio Villegas Vega 14 years ago
parent
commit
d3fca48784

+ 3 - 0
.hgignore

@@ -103,3 +103,6 @@ main/upload/users/*
 #!plugin/index.html
 #!plugin/search
 
+#PHP Storm settings directory
+.idea
+

+ 25 - 8
main/admin/user_fields.php

@@ -146,13 +146,12 @@ if(1)
 
 	// Create a sortable table with user-data
 	$parameters['sec_token'] = Security::get_token();
-	$column_show  = array(1,1,1,1,1,1,1,1,1,0,0);
-	$column_order = array(1,2,3,4,5,6,7,8,9,10,11);
-	$extra_fields = UserManager::get_extra_fields(0,100,5,'ASC');
-
+	//$column_show  = array(1,1,1,1,1,1,1,1,1,0,0);
+	//$column_order = array(1,2,3,4,5,6,7,8,9,10,11);
+	$extra_fields = UserManager::get_extra_fields();
 	$number_of_extra_fields = count($extra_fields);
 
-	$table = new SortableTableFromArrayConfig($extra_fields, 5, 50, '', $column_show, $column_order, 'ASC');
+    $table = new SortableTable('user_field', array('UserManager','get_number_of_extra_fields'), array('UserManager','get_extra_fields'),5);
 	$table->set_additional_parameters($parameters);
 	$table->set_header(0, '', false);
 	$table->set_header(1, get_lang('FieldLabel'), false);
@@ -319,8 +318,10 @@ function move_user_field($direction,$field_id)
 		$sortdirection = 'ASC';
 	}
 
-	$found = false;
+    // first reorder user_fields
+    reorder_user_fields();
 
+	$found = false;
 	$sql = "SELECT id, field_order FROM $table_user_field ORDER BY field_order $sortdirection";
 	$result = Database::query($sql);
 	while($row = Database::fetch_array($result))
@@ -340,14 +341,30 @@ function move_user_field($direction,$field_id)
 		}
 	}
 
-	$sql1 = "UPDATE ".$table_user_field." SET field_order = '".Database::escape_string($next_order)."' WHERE id =  '".Database::escape_string($this_id)."'";
-	$sql2 = "UPDATE ".$table_user_field." SET field_order = '".Database::escape_string($this_order)."' WHERE id =  '".Database::escape_string($next_id)."'";
+	$sql1 = "UPDATE ".$table_user_field." SET field_order = '".intval($next_order)."' WHERE id =  '".intval($this_id)."'";
+	$sql2 = "UPDATE ".$table_user_field." SET field_order = '".intval($this_order)."' WHERE id =  '".intval($next_id)."'";
 	Database::query($sql1);
 	Database::query($sql2);
 
 	return true;
 }
 
+/**
+* Re-order user fields
+*/
+function reorder_user_fields() {
+      // Database table definition
+      $t_user_field = Database::get_main_table(TABLE_MAIN_USER_FIELD);
+      $sql = "SELECT * FROM $t_user_field ORDER by field_order ASC";
+      $res = Database::query($sql);
+      $i = 1;
+      while ($row = Database::fetch_array($res)) {
+              $sql_reorder = "UPDATE $t_user_field SET field_order = $i WHERE id = '".$row['id']."'";
+              Database::query($sql_reorder);
+              $i++;
+      }
+}
+
 /**
  * Delete a user field (and also the options and values entered by the users)
  *

+ 30 - 27
main/auth/lostPassword.php

@@ -45,10 +45,10 @@ if (isset ($_GET['reset']) && isset ($_GET['id'])) {
 } else {
 
 	$form = new FormValidator('lost_password');
-	$form->addElement('text', 'user', get_lang('User'), array('size'=>'40'));
-	$form->addElement('text', 'email', get_lang('Email'), array('size'=>'40'));
+	$form->addElement('text', 'user', get_lang('LoginOrEmailAddress'), array('size'=>'40'));
+	//$form->addElement('text', 'email', get_lang('Email'), array('size'=>'40'));
 
-	$form->applyFilter('email','strtolower');
+	//$form->applyFilter('email','strtolower');
 	$form->addElement('style_submit_button', 'submit', get_lang('Send'),'class="save"');
 
 	// setting the rules
@@ -57,39 +57,42 @@ if (isset ($_GET['reset']) && isset ($_GET['id'])) {
 	if ($form->validate()) {
 		$values = $form->exportValues();
 		
-		$user = $values['user'];
-		$email = $values['email'];
+        if(strpos($values['user'],'@')){
+            $user = strtolower($values['user']);
+            $email = TRUE;
+        } else {
+            $user = strtolower($values['user']);
+            $email = FALSE;
+        }
 
 		$condition = '';
-		if (!empty($email)) {
-			$condition = " AND LOWER(email) = '".Database::escape_string($email)."' ";
-		}
+		if ($email) {
+			$condition = "LOWER(email) = '".Database::escape_string($user)."' ";
+		} else {
+            $condition = "LOWER(username) = '".Database::escape_string($user)."'";
+        }
 
 		$tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
-		$query = " SELECT user_id AS uid, lastname AS lastName, firstname AS firstName,
-					username AS loginName, password, email, status AS status,
-					official_code, phone, picture_uri, creator_id
-					FROM ".$tbl_user."
-					WHERE ( username = '".Database::escape_string($user)."' $condition ) ";
+		$query = "SELECT user_id AS uid, lastname AS lastName, firstname AS firstName, ".
+				 "username AS loginName, password, email, status AS status, ".
+		         "official_code, phone, picture_uri, creator_id ".
+				 "FROM ".$tbl_user." ".
+				 "WHERE ( $condition ) ";
 
 		$result 	= Database::query($query);
 		$num_rows 	= Database::num_rows($result);
 
 		if ($result && $num_rows > 0) {
-			if ($num_rows > 1) {
-				$by_username = false; // more than one user
-				while ($data = Database::fetch_array($result)) {
-					$user[] = $data;
-				}
-			} else {
-				$by_username = true; // single user (valid user + email)
-				$user = Database::fetch_array($result);
-			}
-			if ($userPasswordCrypted != 'none') {
-				Login::handle_encrypted_password($user, $by_username);
-			} else {
-				Login::send_password_to_user($user, $by_username);
-			}
+            $by_username = true;
+//            $user = Database::fetch_array($result);
+            $users = Database::store_result($result);
+            foreach( $users as $user ) {
+                if ($userPasswordCrypted != 'none') {
+                    Login::handle_encrypted_password($user, $by_username);
+                } else {
+                    Login::send_password_to_user($user, $by_username);
+                }
+            }
 		} else {
 			Display::display_error_message(get_lang('NoUserAccountWithThisEmailAddress'));
 		}

+ 1 - 1
main/course_home/course_home.php

@@ -249,7 +249,7 @@ Display::display_introduction_section(TOOL_COURSE_HOMEPAGE, array(
     
 
 if ($show_autolunch_lp_warning) {    
-    Display::display_warning_message(get_lang('TheLPAutoLunchSettingIsONStudentsWillBeRedirectToAnSpecificLP'));
+    Display::display_warning_message(get_lang('TheLPAutoLaunchSettingIsONStudentsWillBeRedirectToAnSpecificLP'));
 }
 if (api_get_setting('homepage_view') == 'activity') {
 	require 'activity.php';

+ 1 - 1
main/css/chamilo/default.css

@@ -724,7 +724,7 @@ may be inherited in some browsers from other 'a' element styles (if any) on the
 	background-repeat:repeat-x;
 	font-size: 12px;
 	color:#ffffff;
-//	height: 10em;	 /* Do not change this value */
+    /*height: 10em;*/	 /* Do not change this value */
 	overflow:hidden;
 	width: 100%;
 	padding-bottom:10px;

+ 1 - 1
main/css/chamilo_electric_blue/default.css

@@ -713,7 +713,7 @@ margin-top:0;
 	background-repeat:repeat-x;
 	font-size: 12px;
 	color:#ffffff;
-//	height: 10em;	 /* Do not change this value */ 
+	/*height: 10em;*/	 /* Do not change this value */
 	overflow:hidden;
 	width: 100%;
 	padding-bottom:10px;

+ 1 - 1
main/css/chamilo_green/default.css

@@ -716,7 +716,7 @@ margin-top:0;
 	background-repeat:repeat-x;
 	font-size: 12px;
 	color:#ffffff;
-	//height: 10em;	 /* Do not change this value */ 
+	/*height: 10em;*/	 /* Do not change this value */
 	overflow:hidden;
 	width: 100%;
 	padding-bottom:10px;

+ 1 - 1
main/css/chamilo_orange/default.css

@@ -716,7 +716,7 @@ margin-top:0;
 	background-repeat:repeat-x;
 	font-size: 12px;
 	color:#ffffff;
-	//height: 10em;	 /* Do not change this value */ 
+	/*height: 10em;*/	 /* Do not change this value */
 	overflow:hidden;
 	width: 100%;
 	padding-bottom:10px;

+ 1 - 1
main/css/chamilo_red/default.css

@@ -717,7 +717,7 @@ margin-top:0;
 	background-repeat:repeat-x;
 	font-size: 12px;
 	color:#ffffff;
-	//height: 10em;	 /* Do not change this value */ 
+	/*height: 10em;*/	 /* Do not change this value */
 	overflow:hidden;
 	width: 100%;
 	padding-bottom:10px;

+ 11 - 4
main/document/showinframes.php

@@ -142,9 +142,15 @@ $htmlHeadXtra[] = '<script type="text/javascript">
 		document.getElementById("mainFrame").style.height = ((docHeight-(parseInt(HeaderHeight)+parseInt(FooterHeight)))+60)+"px";
 	};
 
+    function insertIt() {
+        var _y = document.getElementById("framediv");
+        var _x = window.frames[0].document.body.innerHTML;
+        _y.innerHTML = _x
+    }
+
 	// Fixes the content height of the frame
 	window.onload = function() {
-		updateContentHeight();
+		//updateContentHeight();
 		'.$js_glossary_in_documents.'
 	}
 -->
@@ -168,12 +174,13 @@ echo "<div align=\"center\">";
 $file_url_web = api_get_path(WEB_COURSE_PATH).$_course['path'].'/document'.$header_file.'?'.api_get_cidreq();
 echo '<a href="'.$file_url_web.'" target="_blank">'.get_lang('_cut_paste_link').'</a></div>';
 //echo '<div>';
-
+echo '<div id="framediv">';
 if (file_exists($file_url_sys)) {
-	echo '<iframe border="0" frameborder="0" scrolling="auto"  style="width:100%;"  id="mainFrame" name="mainFrame" src="'.$file_url_web.'&rand='.mt_rand(1, 10000).'"></iframe>';
+	echo '<iframe border="0" onload="insertIt();"  frameborder="0" scrolling="auto"  style="width:100%;"  id="mainFrame" name="mainFrame" src="'.$file_url_web.'&rand='.mt_rand(1, 10000).'"></iframe>';
 } else {
-	echo '<frame name="mainFrame" id="mainFrame" src=showinframes.php?nopages=1 />';
+	echo '<frame name="mainFrame" onload="insertIt();" id="mainFrame" src=showinframes.php?nopages=1 />';
 }
+echo '</div>';
 
 //echo '</div>';
 

+ 1 - 1
main/exercice/exercice.php

@@ -885,7 +885,7 @@ if ($show == 'test') {
                     if ($time_limits) {
                         if ($my_result_disabled == 0) {                     
                             if ($num > 0) {
-                                echo sprintf(get_lang('ExerciseWillBeActivatedFromXToY'), api_get_local_time($row['start_time']), api_get_local_time($row['end_time']));
+                                echo sprintf(get_lang('ExerciseWillBeActivatedFromXToY'), api_convert_and_format_date($row['start_time']), api_convert_and_format_date($row['end_time']));
                             } else {
                                 echo get_lang('NotAttempted');
                             }                           

+ 1 - 1
main/exercice/exercise.lib.php

@@ -1205,4 +1205,4 @@ function get_exercise_result_ranking($my_score, $my_exe_id, $exercise_id, $cours
             }        
         return $position;    
     }
-}
+}

+ 1 - 1
main/exercice/exercise_show.php

@@ -260,7 +260,7 @@ if ($show_results) {
             <td style="font-weight:bold" width="80px"><?php echo '&nbsp;'.get_lang('Date')?> : </td>
             <td>
             <?php
-            echo api_get_local_time($exercise_date);    
+            echo api_convert_and_format_date($exercise_date);    
             ?>            
             </td>
 		</tr>

+ 0 - 3
main/garbage/Serializer/README

@@ -1,3 +0,0 @@
-This is a dummy file to prevent Git from ignoring this empty directory.
-
-    vim: et sw=4 sts=4

+ 0 - 6
main/garbage/Serializer/index.html

@@ -1,6 +0,0 @@
-<html>
-<head>
-</head>
-<body>
-</body>
-</html>

+ 0 - 6
main/garbage/index.html

@@ -1,6 +0,0 @@
-<html>
-<head>
-</head>
-<body>
-</body>
-</html>

+ 571 - 1
main/inc/lib/course.lib.php

@@ -450,7 +450,7 @@ class CourseManager {
         $table_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
         $sql_course = "SELECT course_code FROM $table_field cf INNER JOIN $t_cfv cfv ON cfv.field_id=cf.id WHERE field_variable='$original_course_id_name' AND field_value='$original_course_id_value'";
         $res = Database::query($sql_course);
-        $row = Database::fetch_object($res_course);
+        $row = Database::fetch_object($res);
         if ($row) {
             return $row->course_code;
         } else {
@@ -2491,4 +2491,574 @@ class CourseManager {
         return self::course_code_exists($wanted_course_code);
     }
 
+    /**
+     * Display special courses (and only these) as several HTML divs of class userportal-course-item
+     *
+     * Special courses are courses that stick on top of the list and are "auto-registerable"
+     * in the sense that any user clicking them is registered as a student
+     * @param int       User id
+     * @return void
+     */
+    function display_special_courses ($user_id) {
+
+        $user_id = intval($user_id);
+        $user_info = api_get_user_info($user_id);
+        $special_course_list = array();
+
+        $tbl_course                 = Database::get_main_table(TABLE_MAIN_COURSE);
+        $tbl_course_user            = Database::get_main_table(TABLE_MAIN_COURSE_USER);
+        $tbl_course_field           = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
+        $tbl_course_field_value     = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
+        $tbl_user_course_category   = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY);
+
+        // get course list auto-register
+        $sql = "SELECT course_code FROM $tbl_course_field_value tcfv INNER JOIN $tbl_course_field tcf ON " .
+                " tcfv.field_id =  tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 ";
+
+        $special_course_result = Database::query($sql);
+        if (Database::num_rows($special_course_result) > 0) {
+            $special_course_list = array();
+            while ($result_row = Database::fetch_array($special_course_result)) {
+                $special_course_list[] = '"'.$result_row['course_code'].'"';
+            }
+        }
+        $with_special_courses = $without_special_courses = '';
+        if (!empty($special_course_list)) {
+            $with_special_courses = ' course.code IN ('.implode(',',$special_course_list).')';
+        }
+
+        if (!empty($with_special_courses)) {
+            $sql = "SELECT course.code, course.visual_code, course.subscribe subscr, course.unsubscribe unsubscr,
+                                course.title title, course.tutor_name tutor, course.db_name, course.directory, course_rel_user.status status,
+                                course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course_rel_user.user_id, course.visibility
+                                FROM $TABLECOURS course
+                                LEFT JOIN $TABLECOURSUSER course_rel_user ON course.code = course_rel_user.course_code AND course_rel_user.user_id = '$user_id'
+                                WHERE $with_special_courses group by course.code";
+
+            $rs_special_course = Database::query($sql);
+            $number_of_courses = Database::num_rows($rs_special_course);
+            $key = 0;
+            $status_icon = '';
+            if ($number_of_courses > 0) {
+                while ($course = Database::fetch_array($rs_special_course)) {
+
+                    // Get notifications.
+                    $my_course = array();
+                    $my_course['db']         = $course['db_name'];
+                    $my_course['k']          = $course['code'];
+                    $my_course['id_session'] = null;
+                    $my_course['s']          = $course['status'];
+                    $show_notification = show_notification($my_course);
+
+                    if (empty($course['user_id'])) {
+                        $course['status'] = $user_info['status'];
+                    }
+
+                    $status_icon = Display::return_icon('blackboard.png', get_lang('Course'), array('width'=>'48px'));
+                    /*
+                    if ($course['status'] == 1) {
+                        $status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style' => 'width: 11px; height: 11px;'));
+                    }
+                    if (($course['status'] == 5 && !api_is_coach()) || empty($course['status'])) {
+                        $status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('students.gif', get_lang('Status').': '.get_lang('Student'), array('style' => 'width: 11px; height: 11px;'));
+                    }*/
+
+                    echo '<div class="userportal-course-item">';
+
+                    if (api_is_platform_admin()) {
+                        echo '<div style="float: right;"><a href="'.api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course['code'].'">'.Display::return_icon('edit.gif', get_lang('Edit'), array('align' => 'absmiddle')).'</a>';
+                        if ($course['status'] == COURSEMANAGER) {
+                            //echo Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'),array('style'=>'width:11px; height:11px;'));
+                        }
+                        echo '</div>';
+                    }
+                    $course_visibility = $course['visibility'];
+                    if ($course_visibility != COURSE_VISIBILITY_CLOSED || $course['status'] == COURSEMANAGER) {
+                        $course_title = '<a href="'.api_get_path(WEB_COURSE_PATH).$course['directory'].'/?id_session=0&amp;autoreg=1">'.$course['title'].'</a>';
+                    } else {
+                        $course_title = $course['title']." ".get_lang('CourseClosed');
+                    }
+
+                    echo '<div style="float: left; margin-right: 10px;">'.$status_icon.'</div><span class="userportal-course-item-title">'.$course_title.'</span><br />';
+                    if (api_get_setting('display_coursecode_in_courselist') == 'true') {
+                        echo $course['visual_code'];
+                    }
+                    if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') {
+                        echo ' - ';
+                    }
+
+                    if (api_get_setting('display_teacher_in_courselist') == 'true') {
+                        echo $course['tutor'];
+                    }
+                    echo '&nbsp;';
+                    echo Display::return_icon('klipper.png', get_lang('CourseAutoRegister'));
+
+                    // Show notifications.
+                    echo $show_notification;
+                    echo '</div>';
+                    $key++;
+                }
+            }
+        }
+    }
+    /**
+     * Display courses (without special courses) as several HTML divs
+     * of course categories, as class userportal-catalog-item.
+     * @uses display_courses_in_category() to display the courses themselves
+     * @param int        user id
+     * @return void
+     */
+    function display_courses($user_id) {
+    
+        global $_user, $_configuration;
+    
+        // Building an array that contains all the id's of the user defined course categories.
+        // Initially this was inside the display_courses_in_category function but when we do it here we have fewer
+        // sql executions = performance increase.
+        $all_user_categories = self :: get_user_course_categories();
+    
+        // Step 0: We display the course without a user category.
+        self :: display_courses_in_category(0, 'true');
+    
+        // Step 1: We get all the categories of the user.
+        $tucc = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY);
+        $sql = "SELECT id, title FROM $tucc WHERE user_id='".$_user['user_id']."' ORDER BY sort ASC";
+        $result = Database::query($sql);
+        while ($row = Database::fetch_array($result)) {
+            // We simply display the title of the category.
+            echo '<div class="userportal-catalog-item">';
+                echo '<ul class="catalog_box">';
+                    echo '<li>';
+                        echo Display::return_icon('folder_yellow.png', '', array('width' => '48px', 'align' => 'absmiddle'));
+                        echo '<span>';
+                        echo '<a name="category'.$row['id'].'"></a>'; // Display an internal anchor.
+                        echo $row['title'];
+                        echo '</span>';
+                    echo '</li>';
+                    self :: display_courses_in_category($row['id']);
+            echo '</ul>';
+            echo '</div>';
+        }
+    }    
+    /**
+     *  Display courses inside a category (without special courses) as HTML dics of
+     *  class userportal-course-item.
+     *  @param int      User category id
+     *  @return void
+     */
+    function display_courses_in_category($user_category_id) {
+    
+        global $_user, $_configuration;
+        // Table definitions
+        $TABLECOURS                  = Database :: get_main_table(TABLE_MAIN_COURSE);
+        $TABLECOURSUSER              = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
+        $TABLE_COURSE_FIELD          = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD);
+        $TABLE_COURSE_FIELD_VALUE    = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
+        $TABLE_ACCESS_URL_REL_COURSE = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
+        $TABLE_USER_COURSE_CATEGORY  = Database :: get_user_personal_table(TABLE_USER_COURSE_CATEGORY);
+        $current_url_id = api_get_current_access_url_id();
+    
+        // Get course list auto-register
+        $sql = "SELECT course_code FROM $TABLE_COURSE_FIELD_VALUE tcfv INNER JOIN $TABLE_COURSE_FIELD tcf ON " .
+                " tcfv.field_id =  tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 ";
+    
+        $special_course_result = Database::query($sql);
+        if (Database::num_rows($special_course_result) > 0) {
+            $special_course_list = array();
+            while ($result_row = Database::fetch_array($special_course_result)) {
+                $special_course_list[] = '"'.$result_row['course_code'].'"';
+            }
+        }
+        $without_special_courses = '';
+        if (!empty($special_course_list)) {
+            $without_special_courses = ' AND course.code NOT IN ('.implode(',',$special_course_list).')';
+        }
+    
+        $sql_select_courses = "SELECT course.code, course.visual_code, course.subscribe subscr, course.unsubscribe unsubscr,
+                                        course.title title, course.tutor_name tutor, course.db_name, course.directory, course_rel_user.status status,
+                                        course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course.visibility
+                                        FROM    $TABLECOURS       course,
+                                                $TABLECOURSUSER  course_rel_user, ".$TABLE_ACCESS_URL_REL_COURSE." url
+                                        WHERE course.code = course_rel_user.course_code AND url.course_code = course.code
+                                        AND   course_rel_user.user_id = '".$_user['user_id']."'
+                                        AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH."
+                                        AND course_rel_user.user_course_cat='".$user_category_id."' $without_special_courses ";
+        // If multiple URL access mode is enabled, only fetch courses
+        // corresponding to the current URL.
+        if ($_configuration['multiple_access_urls'] && $current_url_id != -1){
+            $sql_select_courses .= " AND url.course_code=course.code AND access_url_id='".$current_url_id."'";
+        }
+        // Use user's classification for courses (if any).
+        $sql_select_courses .= " ORDER BY course_rel_user.user_course_cat, course_rel_user.sort ASC";
+        $result = Database::query($sql_select_courses);
+        $number_of_courses = Database::num_rows($result);
+        $key = 0;
+        $status_icon = '';
+    
+        // Browse through all courses.
+        while ($course = Database::fetch_array($result)) {
+            // Get notifications.
+            $my_course = array();
+            $my_course['db']         = $course['db_name'];
+            $my_course['k']          = $course['code'];
+            $my_course['id_session'] = null;
+            $my_course['s']          = $course['status'];
+            // For each course, get if there is any notification icon to show
+            // (something that would have changed since the user's last visit).
+            $show_notification = Display :: show_notification($my_course);
+            // New code displaying the user's status in respect to this course.
+            $status_icon = Display::return_icon('blackboard.png', get_lang('Course'), array('width' => '48px'));
+    
+            echo '<div class="userportal-course-item">';
+    
+            if (api_is_platform_admin()) {
+                echo   '<div style="float:right;"><a href="'.api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course['code'].'">'.Display::return_icon('edit.gif', get_lang('Edit'), array('align' => 'absmiddle')).'</a>';
+                if ($course['status'] == COURSEMANAGER) {
+                    //echo Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style'=>'width: 11px; height: 11px;'));
+                }
+                echo '</div>';
+            }
+    
+            // Function logic - act on the data (check if the course is virtual, if yes change the link).
+            $is_virtual_course = CourseManager :: is_virtual_course_from_system_code($course['code']);
+            if ($is_virtual_course) {
+                // If the current user is also subscribed in the real course to which this
+                // virtual course is linked, we don't need to display the virtual course entry in
+                // the course list - it is combined with the real course entry.
+                $target_course_code = CourseManager :: get_target_of_linked_course($course['code']);
+                $is_subscribed_in_target_course = CourseManager :: is_user_subscribed_in_course(api_get_user_id(), $target_course_code);
+                if ($is_subscribed_in_target_course) {
+                    return; // Do not display this course entry.
+                }
+            }
+            // Check if the course has virtual courses attached. If yes change the course title and display code.
+            $has_virtual_courses = CourseManager :: has_virtual_courses_from_code($course['code'], api_get_user_id());
+            if ($has_virtual_courses) {
+                $course_info = api_get_course_info($course['code']);
+                $return_result = CourseManager :: determine_course_title_from_course_info(api_get_user_id(), $course_info);
+                $course_title = $return_result['title'];
+                $course_display_code = $return_result['code'];
+            } else {
+                $course_title = $course['title'];
+                $course_display_code = $course['visual_code'];
+            }
+    
+            // Show a hyperlink to the course, unless the course is closed and user is not course admin.
+            $course_visibility = $course['visibility'];
+            if ($course_visibility != COURSE_VISIBILITY_CLOSED || $course['status'] == COURSEMANAGER) {
+                $course_title = '<a href="'.api_get_path(WEB_COURSE_PATH).$course['directory'].'/?id_session=0">'.$course['title'].'</a>';
+            } else {
+                $course_title = $course['title']." ".get_lang('CourseClosed');
+            }
+            // Start displaying the course block itself.
+            echo '<div style="float: left; margin-right: 10px;">'.$status_icon.'</div><span class="userportal-course-item-title">'.$course_title.'</span><br />';
+            if (api_get_setting('display_coursecode_in_courselist') == 'true') {
+                echo $course_display_code;
+            }
+            if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') {
+                echo ' - ';
+            }
+            if (api_get_setting('display_teacher_in_courselist') == 'true') {
+                if (!empty($course['tutor']))
+                    echo $course['tutor'];
+            }
+            // Show notifications.
+            echo $show_notification;
+            echo '</div>';
+            $key++;
+        }
+    }
+    /**
+     * Retrieves the user defined course categories
+     * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
+     * @return array containing all the titles of the user defined courses with the id as key of the array
+     */
+    function get_user_course_categories() {
+        global $_user;
+        $output = array();
+        $table_category = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY);
+        $sql = "SELECT * FROM ".$table_category." WHERE user_id='".Database::escape_string($_user['user_id'])."'";
+        $result = Database::query($sql);
+        while ($row = Database::fetch_array($result)) {
+            $output[$row['id']] = $row['title'];
+        }
+        return $output;
+    }
+
+    /**
+	 * Get the course id based on the original id and field name in the extra fields. Returns 0 if course was not found
+	 *
+	 * @param string Original course id
+	 * @param string Original field name
+	 * @return int Course id
+	 */
+	public static function get_course_id_from_original_id($original_course_id_value, $original_course_id_name) {
+		$t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
+		$table_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
+		$sql_course = "SELECT id FROM $table_field cf INNER JOIN $t_cfv cfv ON cfv.field_id=cf.id WHERE field_variable='$original_course_id_name' AND field_value='$original_course_id_value'";
+		$res = Database::query($sql_course);
+		$row = Database::fetch_object($res_course);
+		if($row != false) {
+			return $row->id;
+		} else {
+			return 0;
+		}
+	}
+
+    /**
+     * Display code for one specific course a logged in user is subscribed to.
+     * Shows a link to the course, what's new icons...
+     *
+     * $my_course['d'] - course directory
+     * $my_course['i'] - course title
+     * $my_course['c'] - visual course code
+     * $my_course['k']  - system course code
+     * $my_course['db'] - course database
+     *
+     * @version 1.0.3
+     * @todo refactor into different functions for database calls | logic | display
+     * @todo replace single-character $my_course['d'] indices
+     * @todo move code for what's new icons to a separate function to clear things up
+     * @todo add a parameter user_id so that it is possible to show the courselist of other users (=generalisation). This will prevent having to write a new function for this.
+     */
+    function get_logged_user_course_html($course, $session_id = 0, $class = 'courses') {
+        global $nosession, $nbDigestEntries, $digest, $thisCourseSysCode, $orderKey;
+        $charset = api_get_system_encoding();
+    
+        $current_uid = api_get_user_id();
+        $info = api_get_course_info($course['code']);
+        $status_course = CourseManager::get_user_in_course_status($current_uid, $course['code']);
+    
+        if (!is_array($course['code'])) {
+            $my_course = api_get_course_info($course['code']);
+            $my_course['k'] = $my_course['id'];
+            $my_course['db'] = $my_course['dbName'];
+            $my_course['c'] = $my_course['official_code'];
+            $my_course['i'] = $my_course['name'];
+            $my_course['d'] = $my_course['path'];
+            $my_course['t'] = $my_course['titular'];
+            $my_course['id_session'] = $session_id;
+            $my_course['status'] = empty($session_id) ? $status_course : 5;
+        }
+    
+        if (api_get_setting('use_session_mode') == 'true' && !$nosession) {
+            global $now, $date_start, $date_end;
+        }
+    
+        // Initialise.
+        $result = '';
+    
+        // Table definitions
+        //$statistic_database = Database::get_statistic_database();
+        $main_user_table            = Database :: get_main_table(TABLE_MAIN_USER);
+        $tbl_session                = Database :: get_main_table(TABLE_MAIN_SESSION);
+        $tbl_session_category       = Database :: get_main_table(TABLE_MAIN_SESSION_CATEGORY);
+        $course_database            = $my_course['db'];
+        $course_tool_table          = Database :: get_course_table(TABLE_TOOL_LIST, $course_database);
+        $tool_edit_table            = Database :: get_course_table(TABLE_ITEM_PROPERTY, $course_database);
+        $course_group_user_table    = Database :: get_course_table(TOOL_USER, $course_database);
+    
+        $user_id                = api_get_user_id();
+        $course_system_code     = $my_course['k'];
+        $course_visual_code     = $my_course['c'];
+        $course_title           = $my_course['i'];
+        $course_directory       = $my_course['d'];
+        $course_teacher         = $my_course['t'];
+        $course_teacher_email   = isset($my_course['email']) ? $my_course['email'] : '';
+        $course_info = Database :: get_course_info($course_system_code);
+        $course_access_settings = CourseManager :: get_access_settings($course_system_code);
+        $course_id = isset($course_info['course_id']) ? $course_info['course_id'] : null;
+        $course_visibility = $course_access_settings['visibility'];
+    
+        $user_in_course_status = CourseManager :: get_user_in_course_status(api_get_user_id(), $course_system_code);
+    
+        // Function logic - act on the data.
+        $is_virtual_course = CourseManager :: is_virtual_course_from_system_code($my_course['k']);
+        if ($is_virtual_course) {
+            // If the current user is also subscribed in the real course to which this
+            // virtual course is linked, we don't need to display the virtual course entry in
+            // the course list - it is combined with the real course entry.
+            $target_course_code = CourseManager :: get_target_of_linked_course($course_system_code);
+            $is_subscribed_in_target_course = CourseManager :: is_user_subscribed_in_course(api_get_user_id(), $target_course_code);
+            if ($is_subscribed_in_target_course) {
+                return; //do not display this course entry
+            }
+        }
+        $has_virtual_courses = CourseManager :: has_virtual_courses_from_code($course_system_code, api_get_user_id());
+        if ($has_virtual_courses) {
+            $return_result = CourseManager :: determine_course_title_from_course_info(api_get_user_id(), $course_info);
+            $course_display_title = $return_result['title'];
+            $course_display_code = $return_result['code'];
+        } else {
+            $course_display_title = $course_title;
+            $course_display_code = $course_visual_code;
+        }
+    
+        $s_course_status = $my_course['status'];
+        $is_coach = api_is_coach($my_course['id_session'],$course['code']);
+    
+        $s_htlm_status_icon = '';
+    
+        $s_htlm_status_icon =Display::return_icon('blackboard_blue.png', get_lang('Course'), array('width' => '48px'));
+        /*
+        if ($s_course_status == 1) {
+            $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style' => 'width: 11px; height: 11px;'));
+        }
+        if ($s_course_status == 2 || ($is_coach && $s_course_status != 1)) {
+            $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('coachs.gif', get_lang('Status').': '.get_lang('GeneralCoach'), array('style' => 'width: 11px; height: 11px;'));
+        }
+        if (($s_course_status == 5 && !$is_coach) || empty($s_course_status)) {
+            $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('students.gif', get_lang('Status').': '.get_lang('Student'), array('style' => 'width: 11px; height: 11px;'));
+        }
+        */
+        // Display course entry.
+        $result.="\n\t";
+        $result .= '<li class="'.$class.'"><div class="coursestatusicons">'.$s_htlm_status_icon.'</div>';
+        // Show a hyperlink to the course, unless the course is closed and user is not course admin.
+        if ($course_visibility != COURSE_VISIBILITY_CLOSED || $user_in_course_status == COURSEMANAGER) {
+            if (api_get_setting('use_session_mode') == 'true' && !$nosession) {
+                if (empty($my_course['id_session'])) {
+                    $my_course['id_session'] = 0;
+                }
+                if ($user_in_course_status == COURSEMANAGER || ($date_start <= $now && $date_end >= $now) || $date_start == '0000-00-00') {
+                    $result .= '<a href="'.api_get_path(WEB_COURSE_PATH).$course_directory.'/?id_session='.$my_course['id_session'].'">'.$course_display_title.'</a>';
+                }
+            } else {
+                $result .= '<a href="'.api_get_path(WEB_COURSE_PATH).$course_directory.'/">'.$course_display_title.'</a>';
+            }
+        } else {
+            $result .= $course_display_title.'  '.get_lang('CourseClosed');
+        }
+    
+        // Show the course_code and teacher if chosen to display this.
+        if (api_get_setting('display_coursecode_in_courselist') == 'true' || api_get_setting('display_teacher_in_courselist') == 'true') {
+            $result .= '<br />';
+        }
+    
+        if (api_get_setting('display_coursecode_in_courselist') == 'true') {
+            $result .= $course_display_code;
+        }
+    
+        if (api_get_setting('display_teacher_in_courselist') == 'true') {
+            if (api_get_setting('use_session_mode')=='true' && !$nosession) {
+                $coachs_course = api_get_coachs_from_course($my_course['id_session'], $course['code']);
+                $course_coachs = array();
+                if (is_array($coachs_course)) {
+                    foreach ($coachs_course as $coach_course) {
+                        $course_coachs[] = api_get_person_name($coach_course['firstname'], $coach_course['lastname']);
+                    }
+                }
+    
+                if ($s_course_status == 1 || ($s_course_status == 5 && empty($my_course['id_session'])) || empty($s_course_status)) {
+                    $result .= $course_teacher;
+                }
+    
+                if (($s_course_status == 5 && !empty($my_course['id_session'])) || ($is_coach && $s_course_status != 1)) {
+                    if (is_array($course_coachs) && count($course_coachs)> 0 ) {
+                        if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') {
+                            $result .= ' &ndash; ';
+                        }
+                        $result .= get_lang('Coachs').': '.implode(', ',$course_coachs);
+                    }
+                }
+    
+            } else {
+                $result .= $course_teacher;
+            }
+    
+            if(!empty($course_teacher_email)) {
+                $result .= ' ('.$course_teacher_email.')';
+            }
+        }
+    
+        $result .= isset($course['special_course']) ? ' '.Display::return_icon('klipper.png', get_lang('CourseAutoRegister')) : '';
+    
+        $current_course_settings = CourseManager :: get_access_settings($my_course['k']);
+    
+        // Display the "what's new" icons.
+        $result .= Display :: show_notification($my_course);
+    
+        if ((CONFVAL_showExtractInfo == SCRIPTVAL_InCourseList || CONFVAL_showExtractInfo == SCRIPTVAL_Both) && $nbDigestEntries > 0) {
+    
+            reset($digest);
+            $result .= '
+                        <ul>';
+            while (list($key2) = each($digest[$thisCourseSysCode])) {
+                $result .= '<li>';
+                if ($orderKey[1] == 'keyTools') {
+                    $result .= "<a href=\"$toolsList[$key2] [\"path\"] $thisCourseSysCode \">";
+                    $result .= "$toolsList[$key2][\"name\"]</a>";
+                } else {
+                    $result .= api_convert_and_format_date($key2, DATE_FORMAT_LONG, date_default_timezone_get());
+                }
+                $result .= '</li>';
+                $result .= '<ul>';
+                reset ($digest[$thisCourseSysCode][$key2]);
+                while (list ($key3, $dataFromCourse) = each($digest[$thisCourseSysCode][$key2])) {
+                    $result .= '<li>';
+                    if ($orderKey[2] == 'keyTools') {
+                        $result .= "<a href=\"$toolsList[$key3] [\"path\"] $thisCourseSysCode \">";
+                        $result .= "$toolsList[$key3][\"name\"]</a>";
+                    } else {
+                        $result .= api_convert_and_format_date($key3, DATE_FORMAT_LONG, date_default_timezone_get());
+                    }
+                    $result .= '<ul compact="compact">';
+                    reset($digest[$thisCourseSysCode][$key2][$key3]);
+                    while (list ($key4, $dataFromCourse) = each($digest[$thisCourseSysCode][$key2][$key3])) {
+                        $result .= '<li>';
+                        $result .= @htmlspecialchars(api_substr(strip_tags($dataFromCourse), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset);
+                        $result .= '</li>';
+                    }
+                    $result .= '</ul>';
+                    $result .= '</li>';
+                }
+                $result .= '</ul>';
+                $result .= '</li>';
+            }
+            $result .= '</ul>';
+        }
+        $result .= '</li>';
+    
+        if (api_get_setting('use_session_mode') == 'true' && !$nosession) {
+            $session = '';
+            $active = false;
+            if (!empty($my_course['session_name'])) {
+    
+                // Request for the name of the general coach
+                $sql = 'SELECT lastname, firstname,sc.name
+                FROM '.$tbl_session.' ts
+                LEFT JOIN '.$main_user_table .' tu
+                ON ts.id_coach = tu.user_id
+                INNER JOIN '.$tbl_session_category.' sc ON ts.session_category_id = sc.id
+                WHERE ts.id='.(int) $my_course['id_session']. ' LIMIT 1';
+    
+                $rs = Database::query($sql);
+                $sessioncoach = Database::store_result($rs);
+                $sessioncoach = $sessioncoach[0];
+    
+                $session = array();
+                $session['title'] = $my_course['session_name'];
+                $session_category_id = CourseManager::get_session_category_id_by_session_id($my_course['id_session']);
+                $session['category'] = $sessioncoach['name'];
+                if ($my_course['date_start'] == '0000-00-00') {
+                    $session['dates'] = get_lang('WithoutTimeLimits');
+                    if (api_get_setting('show_session_coach') === 'true') {
+                        $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($sessioncoach['firstname'], $sessioncoach['lastname']);
+                    }
+                    $active = true;
+                } else {
+                    $session ['dates'] = ' - '.get_lang('From').' '.$my_course['date_start'].' '.get_lang('To').' '.$my_course['date_end'];
+                    if (api_get_setting('show_session_coach') === 'true') {
+                        $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($sessioncoach['firstname'], $sessioncoach['lastname']);
+                    }
+                    $active = ($date_start <= $now && $date_end >= $now);
+                }
+            }
+            $output = array ($my_course['user_course_cat'], $result, $my_course['id_session'], $session, 'active' => $active, 'session_category_id' => $session_category_id);
+        } else {
+            $output = array ($my_course['user_course_cat'], $result);
+        }
+    
+        return $output;
+    }    
 } //end class CourseManager

+ 276 - 0
main/inc/lib/display.lib.php

@@ -935,5 +935,281 @@ class Display {
             } 
         });  */    	
     }
+    /**
+     * Display create course link
+     *
+     */
+    function display_create_course_link() {
+        echo '<li><a href="main/create_course/add_course.php">'.(api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang('CourseCreate')).'</a></li>';
+    }
+    
+    
+    /**
+     * Display dashboard link
+     *
+     */
+    function display_dashboard_link() {
+        echo '<li><a href="main/dashboard/index.php">'.get_lang('Dashboard').'</a></li>';
+    }
+    
+    /**
+     * Display edit course list links
+     *
+     */
+    function display_edit_course_list_links() {
+        echo '<li><a href="main/auth/courses.php">'.get_lang('CourseManagement').'</a></li>';
+    }
+    
+    /**
+     * Show history sessions
+     *
+     */
+    function display_history_course_session() {
+        if (api_get_setting('use_session_mode') == 'true') {
+            if (isset($_GET['history']) && intval($_GET['history']) == 1) {
+                echo '<li><a href="user_portal.php">'.get_lang('DisplayTrainingList').'</a></li>';
+            } else {
+                echo '<li><a href="user_portal.php?history=1">'.get_lang('HistoryTrainingSessions').'</a></li>';
+            }
+        }
+    }
+    /**
+     * Returns the "what's new" icon notifications
+     *
+     * The general logic of this function is to track the last time the user
+     * entered the course and compare to what has changed inside this course
+     * since then, based on the item_property table inside this course. Note that,
+     * if the user never entered the course before, he will not see notification
+     * icons. This function takes session ID into account (if any) and only shows
+     * the corresponding notifications.
+     * @param array     Course information array, containing at least elements 'db' and 'k'
+     * @return string   The HTML link to be shown next to the course
+     */
+    function show_notification($my_course) {    
+        $statistic_database = Database :: get_statistic_database();
+        $user_id = api_get_user_id();
+        $course_database = $my_course['db'];
+        $course_tool_table = Database::get_course_table(TABLE_TOOL_LIST, $course_database);
+        $tool_edit_table = Database::get_course_table(TABLE_ITEM_PROPERTY, $course_database);
+        $course_group_user_table = Database :: get_course_table(TABLE_GROUP_USER, $course_database);
+        $t_track_e_access = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
+        $my_course['k'] = Database::escape_string($my_course['k']);
+        $my_course['id_session'] = intval($my_course['id_session']);
+        // Get the user's last access dates to all tools of this course
+        $sqlLastTrackInCourse = "SELECT * FROM $t_track_e_access ".
+                                         " USE INDEX (access_cours_code, access_user_id) ".
+                                         "WHERE access_cours_code = '".$my_course['k']."' ".
+                                         "AND access_user_id = '$user_id' AND access_session_id ='".$my_course['id_session']."'";
+        $resLastTrackInCourse = Database::query($sqlLastTrackInCourse);
+    
+        $oldestTrackDate = $oldestTrackDateOrig = '3000-01-01 00:00:00';
+        while ($lastTrackInCourse = Database::fetch_array($resLastTrackInCourse)) {
+            $lastTrackInCourseDate[$lastTrackInCourse['access_tool']] = $lastTrackInCourse['access_date'];
+            if ($oldestTrackDate > $lastTrackInCourse['access_date']) {
+                $oldestTrackDate = $lastTrackInCourse['access_date'];
+            }
+        }
+        if ($oldestTrackDate == $oldestTrackDateOrig) {
+            //if there was no connexion to the course ever, then take the
+            // course creation date as a reference
+            $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
+        	$sql = "SELECT course.creation_date ".
+                 "FROM $course_table course ".
+                 "WHERE course.code = '".$my_course['k']."'";
+            $res = Database::query($sql);
+            if ($res && Database::num_rows($res)>0) {
+                $row = Database::fetch_array($res);
+            }
+            $oldestTrackDate = $row['creation_date'];
+        }
+
+        // Get the last edits of all tools of this course.
+        $sql = "SELECT tet.*, tet.lastedit_date last_date, tet.tool tool, tet.ref ref, ".
+                            " tet.lastedit_type type, tet.to_group_id group_id, ".
+                            " ctt.image image, ctt.link link ".
+                        " FROM $tool_edit_table tet, $course_tool_table ctt ".
+                        " WHERE tet.lastedit_date > '$oldestTrackDate' ".
+                        " AND ctt.name = tet.tool ".
+                        " AND ctt.visibility = '1' ".
+                        " AND tet.lastedit_user_id != $user_id AND tet.id_session = '".$my_course['id_session']."' ".
+                        " ORDER BY tet.lastedit_date";
+        $res = Database::query($sql);
+        // Get the group_id's with user membership.
+        $group_ids = GroupManager :: get_group_ids($course_database, $user_id);
+        $group_ids[] = 0; //add group 'everyone'
+        $notifications = array();
+        error_log($sql);
+        // Filter all last edits of all tools of the course
+        while ($res && ($item_property = Database::fetch_array($res))) {
+            // First thing to check is if the user never entered the tool
+            // or if his last visit was earlier than the last modification.
+            if ((!isset ($lastTrackInCourseDate[$item_property['tool']]) 
+                 || $lastTrackInCourseDate[$item_property['tool']] < $item_property['lastedit_date'])
+                // Drop the tool elements that are part of a group that the
+                // user is not part of.
+                && ((in_array($item_property['to_group_id'], $group_ids)
+                // Drop the dropbox, notebook and chat tools (we don't care)
+                && ($item_property['tool'] != TOOL_DROPBOX 
+                      && $item_property['tool'] != TOOL_NOTEBOOK 
+                      && $item_property['tool'] != TOOL_CHAT)
+                   )
+                  )
+                // Take only what's visible or invisible but where the user is a teacher or where the visibility is unset.
+                && ($item_property['visibility'] == '1' 
+                    || ($my_course['s'] == '1' && $item_property['visibility'] == '0') 
+                    || !isset($item_property['visibility']))) 
+            {
+error_log(print_r($item_property,1));
+                // Also drop announcements and events that are not for the user or his group.
+                if (($item_property['tool'] == TOOL_ANNOUNCEMENT 
+                         || $item_property['tool'] == TOOL_CALENDAR_EVENT) 
+                   && (($item_property['to_user_id'] != $user_id ) 
+                         && (!isset($item_property['to_group_id']) 
+                             || !in_array($item_property['to_group_id'], $group_ids)))) {
+                   continue;
+                }
+                // If it's a survey, make sure the user's invited. Otherwise drop it.
+                if ($item_property['tool'] == TOOL_SURVEY) {
+                    $survey_info = survey_manager::get_survey($item_property['ref'], 0, $my_course['k']);
+                    $invited_users = SurveyUtil::get_invited_users($survey_info['code'], $course_database);
+                    if (!in_array($user_id, $invited_users['course_users'])) continue;
+                }
+                $notifications[$item_property['tool']] = $item_property;
+            }
+        }
+        // Show all tool icons where there is something new.
+        $retvalue = '&nbsp;';
+        while (list($key, $notification) = each($notifications)) {
+            $lastDate = date('d/m/Y H:i', convert_mysql_date($notification['lastedit_date']));
+            $type = $notification['lastedit_type'];
+            if (empty($my_course['id_session'])) {
+                $my_course['id_session'] = 0;
+            }
+            $retvalue .= '<a href="'.api_get_path(WEB_CODE_PATH).$notification['link'].'?cidReq='.$my_course['k'].'&amp;ref='.$notification['ref'].'&amp;gidReq='.$notification['to_group_id'].'&amp;id_session='.$my_course['id_session'].'">'.'<img title="-- '.get_lang(ucfirst($notification['tool'])).' -- '.get_lang('_title_notification').": ".get_lang($type)." ($lastDate).\"".' src="'.api_get_path(WEB_CODE_PATH).'img/'.$notification['image'].'" border="0" align="absbottom" /></a>&nbsp;';
+        }
+        return $retvalue;
+    }
+    /**
+     * Displays a digest e.g. short summary of new agenda and announcements items.
+     * This used to be displayed in the right hand menu, but is now
+     * disabled by default (see config settings in this file) because most people like
+     * the what's new icons better.
+     *
+     * @version 1.0
+     */
+    function display_digest($toolsList, $digest, $orderKey, $courses) {
+        if (is_array($digest) && (CONFVAL_showExtractInfo == SCRIPTVAL_UnderCourseList || CONFVAL_showExtractInfo == SCRIPTVAL_Both)) {
+            // // // LEVEL 1 // // //
+            reset($digest);
+            echo "<br /><br />\n";
+            while (list($key1) = each($digest)) {
+                if (is_array($digest[$key1])) {
+                    // // // Title of LEVEL 1 // // //
+                    echo "<strong>\n";
+                    if ($orderKey[0] == 'keyTools') {
+                        $tools = $key1;
+                        echo $toolsList[$key1]['name'];
+                    } elseif ($orderKey[0] == 'keyCourse') {
+                        $courseSysCode = $key1;
+                        echo "<a href=\"", api_get_path(WEB_COURSE_PATH), $courses[$key1]['coursePath'], "\">", $courses[$key1]['courseCode'], "</a>\n";
+                    } elseif ($orderKey[0] == 'keyTime') {
+                        echo api_convert_and_format_date($digest[$key1], DATE_FORMAT_LONG, date_default_timezone_get());
+                    }
+                    echo "</strong>\n";
+                    // // // End Of Title of LEVEL 1 // // //
+                    // // // LEVEL 2 // // //
+                    reset($digest[$key1]);
+                    while (list ($key2) = each($digest[$key1])) {
+                        // // // Title of LEVEL 2 // // //
+                        echo "<p>\n", "\n";
+                        if ($orderKey[1] == 'keyTools') {
+                            $tools = $key2;
+                            echo $toolsList[$key2][name];
+                        } elseif ($orderKey[1] == 'keyCourse') {
+                            $courseSysCode = $key2;
+                            echo "<a href=\"", api_get_path(WEB_COURSE_PATH), $courses[$key2]['coursePath'], "\">", $courses[$key2]['courseCode'], "</a>\n";
+                        } elseif ($orderKey[1] == 'keyTime') {
+                            echo api_convert_and_format_date($key2, DATE_FORMAT_LONG, date_default_timezone_get());
+                        }
+                        echo "\n";
+                        echo "</p>";
+                        // // // End Of Title of LEVEL 2 // // //
+                        // // // LEVEL 3 // // //
+                        reset($digest[$key1][$key2]);
+                        while (list ($key3, $dataFromCourse) = each($digest[$key1][$key2])) {
+                            // // // Title of LEVEL 3 // // //
+                            if ($orderKey[2] == 'keyTools') {
+                                $level3title = "<a href=\"".$toolsList[$key3]["path"].$courseSysCode."\">".$toolsList[$key3]['name']."</a>";
+                            } elseif ($orderKey[2] == 'keyCourse') {
+                                $level3title = "&#8226; <a href=\"".$toolsList[$tools]["path"].$key3."\">".$courses[$key3]['courseCode']."</a>\n";
+                            } elseif ($orderKey[2] == 'keyTime') {
+                                $level3title = "&#8226; <a href=\"".$toolsList[$tools]["path"].$courseSysCode."\">".api_convert_and_format_date($key3, DATE_FORMAT_LONG, date_default_timezone_get())."</a>";
+                            }
+                            // // // End Of Title of LEVEL 3 // // //
+                            // // // LEVEL 4 (data) // // //
+                            reset($digest[$key1][$key2][$key3]);
+                            while (list ($key4, $dataFromCourse) = each($digest[$key1][$key2][$key3])) {
+                                echo $level3title, ' &ndash; ', api_substr(strip_tags($dataFromCourse), 0, CONFVAL_NB_CHAR_FROM_CONTENT);
+                                //adding ... (three dots) if the texts are too large and they are shortened
+                                if (api_strlen($dataFromCourse) >= CONFVAL_NB_CHAR_FROM_CONTENT) {
+                                    echo '...';
+                                }
+                            }
+                            echo "<br />\n";
+                        }
+                    }
+                }
+            }
+        }
+    } // End function display_digest
+    /**
+     * Get the session box details as an array
+     * @param int       Session ID
+     * @return array    Empty array or session array ['title'=>'...','category'=>'','dates'=>'...','coach'=>'...','active'=>true/false,'session_category_id'=>int]
+     */
+    function get_session_title_box($session_id) {
+        global $nosession;
+    
+        if (api_get_setting('use_session_mode') == 'true' && !$nosession) {
+            global $now, $date_start, $date_end;
+        }
     
+        $output = array();
+        if (api_get_setting('use_session_mode') == 'true' && !$nosession) {
+            $main_user_table        = Database :: get_main_table(TABLE_MAIN_USER);
+            $tbl_session            = Database :: get_main_table(TABLE_MAIN_SESSION);
+            $tbl_session_category   = Database :: get_main_table(TABLE_MAIN_SESSION_CATEGORY);
+            $active = false;
+            // Request for the name of the general coach
+            $sql ='SELECT tu.lastname, tu.firstname, ts.name, ts.date_start, ts.date_end, ts.session_category_id
+                    FROM '.$tbl_session.' ts
+                    LEFT JOIN '.$main_user_table .' tu
+                    ON ts.id_coach = tu.user_id
+                    WHERE ts.id='.intval($session_id);
+            $rs = Database::query($sql);
+            $session_info = Database::store_result($rs);
+            $session_info = $session_info[0];
+            $session = array();
+            $session['title'] = $session_info[2];
+            $session['coach'] = '';
+    
+            if ($session_info[3] == '0000-00-00') {
+                $session['dates'] = get_lang('WithoutTimeLimits');
+                if (api_get_setting('show_session_coach') === 'true') {
+                    $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info[1], $session_info[0]);
+                }
+                $active = true;
+            } else {
+                $session ['dates'] = get_lang('From').' '.$session_info[3].' '.get_lang('Until').' '.$session_info[4];
+                if ( api_get_setting('show_session_coach') === 'true' ) {
+                    $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info[1], $session_info[0]);
+                }
+                $active = ($date_start <= $now && $date_end >= $now);
+            }
+            $session['active'] = $active;
+            $session['session_category_id'] = $session_info[5];
+            $output = $session;
+        }
+        return $output;
+    }
 } //end class Display

+ 1 - 1
main/inc/lib/main_api.lib.php

@@ -2908,7 +2908,7 @@ function api_plugin($location) {
     global $_plugins;
     if (isset($_plugins[$location]) && is_array($_plugins[$location])) {
         foreach ($_plugins[$location] as $this_plugin) {
-            require_once api_get_path(SYS_PLUGIN_PATH)."$this_plugin/index.php";
+            include api_get_path(SYS_PLUGIN_PATH)."$this_plugin/index.php";
         }
     }
 }

+ 1 - 35
main/inc/lib/social.lib.php

@@ -367,7 +367,7 @@ class SocialManager extends UserManager {
 	 * Helper functions definition
 	 */
 	public static function get_logged_user_course_html($my_course, $count) {
-		global $nosession;
+		global $nosession, $nbDigestEntries, $orderKey, $digest, $thisCourseSysCode;
 		if (api_get_setting('use_session_mode')=='true' && !$nosession) {
 			global $now, $date_start, $date_end;
 		}
@@ -431,51 +431,17 @@ class SocialManager extends UserManager {
 
 		//display course entry
 		$result .= '<div id="div_'.$count.'">';
-		//$result .= '<a id="btn_'.$count.'" href="#" onclick="toogle_course(this,\''.$course_database.'\')">';
 		$result .= '<h2><img src="../img/nolines_plus.gif" id="btn_'.$count.'" onclick="toogle_course(this,\''.$course_database.'\' )">';
 		$result .= $s_htlm_status_icon;
 
 		//show a hyperlink to the course, unless the course is closed and user is not course admin
 		if ($course_visibility != COURSE_VISIBILITY_CLOSED || $user_in_course_status == COURSEMANAGER) {
 			$result .= '<a href="javascript:void(0)" id="ln_'.$count.'"  onclick=toogle_course(this,\''.$course_database.'\');>&nbsp;'.$course_title.'</a></h2>';
-			/*
-			if(api_get_setting('use_session_mode')=='true' && !$nosession) {
-				if(empty($my_course['id_session'])) {
-					$my_course['id_session'] = 0;
-				}
-				if($user_in_course_status == COURSEMANAGER || ($date_start <= $now && $date_end >= $now) || $date_start=='0000-00-00') {
-					//$result .= '<a href="'.api_get_path(WEB_COURSE_PATH).$course_directory.'/?id_session='.$my_course['id_session'].'">'.$course_display_title.'</a>';
-					$result .= '<a href="#">'.$course_display_title.'</a>';
-				}
-			} else {
-				//$result .= '<a href="'.api_get_path(WEB_COURSE_PATH).$course_directory.'/">'.$course_display_title.'</a>';
-				$result .= '<a href="'.api_get_path(WEB_COURSE_PATH).$course_directory.'/">'.$course_display_title.'</a>';
-			}*/
 		} else {
 			$result .= $course_display_title." "." ".get_lang('CourseClosed')."";
 		}
-		// show the course_code and teacher if chosen to display this
-		// we dont need this!
-		/*
-				if (api_get_setting('display_coursecode_in_courselist') == 'true' OR api_get_setting('display_teacher_in_courselist') == 'true') {
-					$result .= '<br />';
-				}
-				if (api_get_setting('display_coursecode_in_courselist') == 'true') {
-					$result .= $course_display_code;
-				}
-				if (api_get_setting('display_coursecode_in_courselist') == 'true' AND api_get_setting('display_teacher_in_courselist') == 'true') {
-					$result .= ' &ndash; ';
-				}
-				if (api_get_setting('display_teacher_in_courselist') == 'true') {
-					$result .= $course_teacher;
-					if(!empty($course_teacher_email)) {
-						$result .= ' ('.$course_teacher_email.')';
-					}
-				}
-		*/
 		$current_course_settings = CourseManager :: get_access_settings($my_course['k']);
 		// display the what's new icons
-		//	$result .= show_notification($my_course);
 		if ((CONFVAL_showExtractInfo == SCRIPTVAL_InCourseList || CONFVAL_showExtractInfo == SCRIPTVAL_Both) && $nbDigestEntries > 0) {
 			reset($digest);
 			$result .= '<ul>';

+ 1 - 1
main/inc/lib/thematic.lib.php

@@ -598,7 +598,7 @@ class Thematic
 	 * @return	int		Affected rows
 	 */
 	public function thematic_plan_destroy($thematic_id, $description_type) {
-
+        global $_course;
 		// definition database table
 		$tbl_thematic_plan = Database::get_course_table(TABLE_THEMATIC_PLAN);
 

+ 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;
-		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);
+    }
+}

+ 1 - 0
main/lang/bulgarian/registration.inc.php

@@ -181,4 +181,5 @@ $YourAccountOnXHasJustBeenApprovedByOneOfOurAdministrators = "Вашият ак
 $HaveFun = "Приятна работа.";
 $YouCanNowLoginAtXUsingTheLoginAndThePasswordYouHaveProvided = "Можете да влезете в %s използвайки Вашите потребителско име и парола.";
 $AreYouSureToEditTheUserStatus = "Сигурни ли сте, че искате да промените статуса на потребителя?";
+$LoginOrEmailAddress = "Потребителско име или e-mail адрес";
 ?>

+ 1 - 0
main/lang/english/registration.inc.php

@@ -183,4 +183,5 @@ $YouCanNowLoginAtXUsingTheLoginAndThePasswordYouHaveProvided = "You can now logi
 $AreYouSureToEditTheUserStatus = "Are you sure to edit the user status?";
 $TheTutorOnlyCanKeepTrackOfStudentsRegisteredInTheCourse = "The tutor can only keep track of all progress of users registered to the course.";
 $TheTeacherCanQualifyEvaluateAndKeepTrackOfAllStudentsEnrolledInTheCourse = "The teacher can qualify, evaluate and keep track of all students enrolled in the course.";
+$LoginOrEmailAddress = "User name or e-mail address";
 ?>

+ 37 - 41
main/survey/survey.lib.php

@@ -3966,15 +3966,15 @@ class SurveyUtil {
 		$table->set_header(2, get_lang('SurveyCode'));
 		$table->set_header(3, get_lang('NumberOfQuestions'));
 		$table->set_header(4, get_lang('Author'));
-		$table->set_header(5, get_lang('Language'));
+		//$table->set_header(5, get_lang('Language'));
 		//$table->set_header(6, get_lang('Shared'));
-		$table->set_header(6, get_lang('AvailableFrom'));
-		$table->set_header(7, get_lang('AvailableUntil'));
-		$table->set_header(8, get_lang('Invite'));
-		$table->set_header(9, get_lang('Anonymous'));
-		$table->set_header(10, get_lang('Modify'), false, 'width="150"');
-		$table->set_column_filter(9, 'anonymous_filter');
-		$table->set_column_filter(10, 'modify_filter');
+		$table->set_header(5, get_lang('AvailableFrom'));
+		$table->set_header(6, get_lang('AvailableUntil'));
+		$table->set_header(7, get_lang('Invite'));
+		$table->set_header(8, get_lang('Anonymous'));
+		$table->set_header(9, get_lang('Modify'), false, 'width="150"');
+		$table->set_column_filter(8, 'anonymous_filter');
+		$table->set_column_filter(9, 'modify_filter');
 		$table->set_form_actions(array('delete' => get_lang('DeleteSurvey')));
 		$table->display();
 	}
@@ -3996,15 +3996,15 @@ class SurveyUtil {
 		$table->set_header(2, get_lang('SurveyCode'));
 		$table->set_header(3, get_lang('NumberOfQuestions'));
 		$table->set_header(4, get_lang('Author'));
-		$table->set_header(5, get_lang('Language'));
+		//$table->set_header(5, get_lang('Language'));
 		//$table->set_header(6, get_lang('Shared'));
-		$table->set_header(6, get_lang('AvailableFrom'));
-		$table->set_header(7, get_lang('AvailableUntil'));
-		$table->set_header(8, get_lang('Invite'));
-		$table->set_header(9, get_lang('Anonymous'));
-		$table->set_header(10, get_lang('Modify'), false, 'width="130"');
-		$table->set_column_filter(9, 'anonymous_filter');
-		$table->set_column_filter(10, 'modify_filter_for_coach');
+		$table->set_header(5, get_lang('AvailableFrom'));
+		$table->set_header(6, get_lang('AvailableUntil'));
+		$table->set_header(7, get_lang('Invite'));
+		$table->set_header(8, get_lang('Anonymous'));
+		$table->set_header(9, get_lang('Modify'), false, 'width="130"');
+		$table->set_column_filter(8, 'anonymous_filter');
+		$table->set_column_filter(9, 'modify_filter_for_coach');
 		$table->display();
 	}
 
@@ -4162,12 +4162,11 @@ class SurveyUtil {
 					survey.code									AS col2,
 					count(survey_question.question_id)			AS col3,
 					".(api_is_western_name_order() ? "CONCAT(user.firstname, ' ', user.lastname)" : "CONCAT(user.lastname, ' ', user.firstname)")."	AS col4,
-					survey.lang									AS col5,
-					survey.avail_from							AS col6,
-					survey.avail_till							AS col7,
-					CONCAT('<a href=\"survey_invitation.php?view=answered&amp;survey_id=',survey.survey_id,'\">',survey.answered,'</a> / <a href=\"survey_invitation.php?view=invited&amp;survey_id=',survey.survey_id,'\">',survey.invited, '</a>')	AS col8,
-					survey.anonymous							AS col9,
-					survey.survey_id							AS col10,
+					survey.avail_from							AS col5,
+					survey.avail_till							AS col6,
+					CONCAT('<a href=\"survey_invitation.php?view=answered&amp;survey_id=',survey.survey_id,'\">',survey.answered,'</a> / <a href=\"survey_invitation.php?view=invited&amp;survey_id=',survey.survey_id,'\">',survey.invited, '</a>')	AS col7,
+					survey.anonymous							AS col8,
+					survey.survey_id							AS col9,
 					survey.session_id							AS session_id
 				 FROM $table_survey survey
 				 LEFT JOIN $table_survey_question survey_question ON survey.survey_id = survey_question.survey_id
@@ -4197,7 +4196,7 @@ class SurveyUtil {
 			$array[7] = $survey[7];
 			$array[8] = $survey[8];
 			$array[9] = $survey[9];
-			$array[10] = $survey[10];
+			//$array[10] = $survey[10];
 
 			$surveys[] = $array;
 		}
@@ -4229,24 +4228,21 @@ class SurveyUtil {
 		//print_r($survey_tree->surveylist);
 
 		//IF(is_shared<>0,'V','-')	 					AS col6,
-		$sql = "SELECT
-					survey.survey_id							AS col0,
-					survey.title	AS col1,
-					survey.code									AS col2,
-					count(survey_question.question_id)			AS col3,
-					".(api_is_western_name_order() ? "CONCAT(user.firstname, ' ', user.lastname)" : "CONCAT(user.lastname, ' ', user.firstname)")."	AS col4,
-					survey.lang									AS col5,
-					survey.avail_from							AS col6,
-					survey.avail_till							AS col7,
-					CONCAT('<a href=\"survey_invitation.php?view=answered&amp;survey_id=',survey.survey_id,'\">',survey.answered,'</a> / <a href=\"survey_invitation.php?view=invited&amp;survey_id=',survey.survey_id,'\">',survey.invited, '</a>')	AS col8,
-					survey.anonymous							AS col9,
-					survey.survey_id							AS col10
-				 FROM $table_survey survey
-				 LEFT JOIN $table_survey_question survey_question ON survey.survey_id = survey_question.survey_id
-				 , $table_user user
-				 WHERE survey.author = user.user_id $list_condition
-				 $search_restriction
-				 ";
+		$sql = "SELECT ".
+					   "survey.survey_id							AS col0, ".
+					   "survey.title	                            AS col1, ".
+					   "survey.code									AS col2, ".
+					   "count(survey_question.question_id)			AS col3, ".
+					   (api_is_western_name_order() ? "CONCAT(user.firstname, ' ', user.lastname)" : "CONCAT(user.lastname, ' ', user.firstname)")."	AS col4, ".
+					   "survey.avail_from							AS col5, ".
+					   "survey.avail_till							AS col6, ".
+					   "CONCAT('<a href=\"survey_invitation.php?view=answered&amp;survey_id=',survey.survey_id,'\">',survey.answered,'</a> / <a href=\"survey_invitation.php?view=invited&amp;survey_id=',survey.survey_id,'\">',survey.invited, '</a>')	AS col7, ".
+					   "survey.anonymous							AS col8, ".
+					   "survey.survey_id							AS col9  ".
+				       "FROM $table_survey survey ".
+				       "LEFT JOIN $table_survey_question survey_question ON survey.survey_id = survey_question.survey_id ".
+				       ", $table_user user ".
+				       ",WHERE survey.author = user.user_id $list_condition ";
 		$sql .= " GROUP BY survey.survey_id";
 		$sql .= " ORDER BY col$column $direction ";
 		$sql .= " LIMIT $from,$number_of_items";

+ 3 - 3
main/webservices/registration.soap.php

@@ -3403,7 +3403,7 @@ function WSDeleteSession($params) {
 
 
 
-/** WSSubscribeUsersToCourse **/
+/** WSSubscribeUserToCourse **/
 // Register the data structures used by the service
 
 $server->wsdl->addComplexType(
@@ -3457,8 +3457,8 @@ $server->register('WSSubscribeUserToCourse',					// method name
     'This service subscribes a user to a course' 					// documentation
 );
 
-// define the method WSSubscribeUsersToCourse
-function WSSubscribeUsersToCourse($params) {
+// define the method WSSubscribeUserToCourse
+function WSSubscribeUserToCourse($params) {
 
     if(!WSHelperVerifyKey($params)) {
         return -1;

+ 2 - 2
main/work/work.php

@@ -1086,7 +1086,7 @@ if (!empty($_POST['submitWork']) && !empty($succeed) && !$id) {
 			$emailbody = get_lang('SendMailBody')."\n".get_lang('CourseName')." : ".$_course['name']."\n";
 			$emailbody .= get_lang('WorkName')." : ".substr($my_cur_dir_path, 0, -1)."\n";
 			$emailbody .= get_lang('UserName')." : ".$currentUserFirstName .' '.$currentUserLastName ."\n";
-			$emailbody .= get_lang('DateSent')." : ".api_get_local_time()."\n";
+			$emailbody .= get_lang('DateSent')." : ".api_format_date(api_get_local_time())."\n";
 			$emailbody .= get_lang('FileName')." : ".$title."\n\n".get_lang('DownloadLink')."\n";
 			$emailbody .= api_get_path(WEB_CODE_PATH)."work/work.php?".api_get_cidreq()."&amp;curdirpath=".$my_cur_dir_path."\n\n" . api_get_setting('administratorName') . " " . api_get_setting('administratorSurname') . "\n" . get_lang('Manager') . " " . api_get_setting('siteName') . "\n" . get_lang('Email') . " : " . api_get_setting('emailAdministrator');
 			// Here we are forming one large header line
@@ -1096,7 +1096,7 @@ if (!empty($_POST['submitWork']) && !empty($succeed) && !$id) {
 			$emailbody_user = get_lang('Dear')." ".$currentUserFirstName .' '.$currentUserLastName ."\n";
 			$emailbody_user .= get_lang('MessageConfirmSendingOfTask')."\n".get_lang('CourseName')." : ".$_course['name']."\n";
 			$emailbody_user .= get_lang('WorkName')." : ".substr($my_cur_dir_path, 0, -1)."\n";
-			$emailbody_user .= get_lang('DateSent')." : ".api_get_local_time()."\n";
+			$emailbody_user .= get_lang('DateSent')." : ".api_format_date(api_get_local_time())."\n";
 			$emailbody_user .= get_lang('FileName')." : ".$title."\n\n".api_get_setting('administratorName')." ".api_get_setting('administratorSurname') . "\n" . get_lang('Manager') . " " . api_get_setting('siteName') . "\n" . get_lang('Email') . " : " . api_get_setting('emailAdministrator');;
 
 			//Mail to user

File diff suppressed because it is too large
+ 1 - 987
user_portal.php


Some files were not shown because too many files changed in this diff