Procházet zdrojové kódy

They have moved the functions of trancking/userLog CourseLog and userlogCVS to classes trancking.lib CT#191

Carlos Vargas před 15 roky
rodič
revize
d2bab4c104

+ 996 - 0
main/inc/lib/tracking.lib.php

@@ -1276,4 +1276,1000 @@ class Tracking {
 	}
 				
 }
+
+class TrackingCourseLog {
+	
+	function count_item_resources() {
+		$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";
+	
+		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')";
+		$res = Database::query($sql, __FILE__, __LINE__);
+		$obj = Database::fetch_object($res);
+		return $obj->total_number_of_items;
+	}
+	
+	function get_item_resources_data($from, $number_of_items, $column, $direction) {
+		global $dateTimeFormatLong;
+		$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 ";
+	
+		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')";
+	
+		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, __FILE__, __LINE__) or die(mysql_error());
+		$resources = array ();
+	
+		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'];
+			$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, __FILE__, __LINE__);
+	
+			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) {
+					$row[0] = '<a href="'.$url_tool.'?'.api_get_cidreq().'&'.$obj->id.'">'.api_ucfirst($row['col0']).'</a>';
+				} else {
+					$row[0] = api_ucfirst($row['col0']);
+				}
+	
+				$row[1] = get_lang($row[1]);
+	
+				$row[5] = api_ucfirst(format_locale_date($dateTimeFormatLong, strtotime($row['col5'])));
+	
+				$row[4] = '';
+				if ($table_name['table_name'] == 'document') {
+					$condition = 'tool.title as title';
+					$query_document = "SELECT $condition FROM $table_tool tool" .
+										" WHERE id = $ref";
+					$rs_document = Database::query($query_document, __FILE__, __LINE__) or die(mysql_error());
+					$obj_document = Database::fetch_object($rs_document);
+					$row[4] = $obj_document->title;
+				}
+	
+				$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;
+			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="'.$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 = api_sql_query($sql,__FILE__,__LINE__);
+		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 = api_sql_query($sql,__FILE__,__LINE__);
+				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;
+		
+		$course_code = Database::escape_string($course_code);
+		$course_info = CourseManager :: get_course_information($course_code);
+		$tbl_track_cours_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+		$tbl_user 				= Database :: get_main_table(TABLE_MAIN_USER);		
+		$tbl_item_property 		= Database :: get_course_table(TABLE_ITEM_PROPERTY, $course_info['db_name']);
+		$tbl_forum_post  		= Database :: get_course_table(TABLE_FORUM_POST, $course_info['db_name']);
+		$tbl_course_lp_view 	= Database :: get_course_table(TABLE_LP_VIEW, $course_info['db_name']);	
+		$tbl_course_lp 			= Database :: get_course_table(TABLE_LP_MAIN, $course_info['db_name']);
+	
+		// 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' ";
+		}			
+		$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
+				$condition_user ";
+	
+		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, __FILE__, __LINE__);	
+		$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));		
+			$avg_student_score = Tracking::get_average_test_scorm_and_lp($user[0], $course_code);
+			$avg_student_progress = Tracking::get_avg_student_progress($user[0], $course_code);			
+			if (empty($avg_student_score)) {$avg_student_score=0;}
+			if (empty($avg_student_progress)) {$avg_student_progress=0;}
+			$row[4] = $avg_student_progress.'%';
+			$row[5] = $avg_student_score.'%';
+			$row[6] = Tracking::count_student_assignments($user[0], $course_code);$user[4];
+			$row[7] = Tracking::count_student_messages($user[0], $course_code);//$user[5];
+			$row[8] = Tracking::get_first_connection_date_on_the_course($user[0], $course_code);
+			$row[9] = Tracking::get_last_connection_date_on_the_course($user[0], $course_code);
+					
+			// 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"><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)
+	{
+		$MonthsLong = $GLOBALS['MonthsLong'];
+		$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=".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=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 = '".Database::escape_string($user_id)."'
+						AND access_cours_code = '".Database::escape_string($course_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]."'>".$langMonthNames['long'][date("n", $results[$j][0])-1]." ".date("Y", $results[$j][0])."</a></td>";
+					echo "<td class='content'><a href='logins_details.php?uInfo=".Security::remove_XSS($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=".Security::remove_XSS($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;
+		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 = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
+					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 = format_locale_date(get_lang('dateTimeFormatLong'), $hpresults[$i][3]);
+	?>
+					<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];
+					$timestamp = strtotime($results[$j][0]);
+					$beautifulDate = format_locale_date($dateTimeFormatLong,$timestamp);
+					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.
+	*/
+	function display_document_tracking_info($view, $user_id, $course_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 = '".Database::escape_string($course_id)."'
+							AND down_user_id = '".Database::escape_string($user_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)
+	{
+		$MonthsLong = $GLOBALS['MonthsLong'];
+		$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);
+			$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."'
+						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;
+		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 = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
+					$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 = format_locale_date(get_lang('dateTimeFormatLong'), $hpresults[$i][3]);
+					$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];
+					$timestamp = strtotime($results[$j][0]);
+					$beautifulDate = format_locale_date($dateTimeFormatLong,$timestamp);
+					$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.
+	*/
+	function display_document_tracking_info($view, $user_id, $course_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'
+						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);
+	}
+}
 ?>

+ 6 - 397
main/tracking/courseLog.php

@@ -22,7 +22,7 @@ $language_file[] = 'tracking';
 $language_file[] = 'scorm';
 //$cidReset = true; //TODO: delete this line bug 457
 // including the global Dokeos file
-require '../inc/global.inc.php';
+require_once '../inc/global.inc.php';
 
 // the section (for the tabs)
 //$this_section = "session_my_space";
@@ -131,161 +131,12 @@ if (isset($_GET['additional_profile_field']) && is_numeric($_GET['additional_pro
 		$user_array[] = $key;
 	}
 	//fetching only the user that are loaded NOT ALL user in the portal
-	$additional_user_profile_info = get_addtional_profile_information_of_field_by_user($_GET['additional_profile_field'],$user_array);
+	$additional_user_profile_info = TrackingCourseLog::get_addtional_profile_information_of_field_by_user($_GET['additional_profile_field'],$user_array);
 }
 
 
 
-function count_item_resources() {
-	$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";
 
-	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')";
-	$res = Database::query($sql, __FILE__, __LINE__);
-	$obj = Database::fetch_object($res);
-	return $obj->total_number_of_items;
-}
-
-function get_item_resources_data($from, $number_of_items, $column, $direction) {
-	global $dateTimeFormatLong;
-	$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 ";
-
-	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')";
-
-	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, __FILE__, __LINE__) or die(mysql_error());
-	$resources = array ();
-
-	while ($row = Database::fetch_array($res)) {
-		$ref = $row['ref'];
-		$table_name = get_tool_name_table($row['col0']);
-		$table_tool = Database :: get_course_table($table_name['table_name']);
-		$id = $table_name['id_tool'];
-		$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, __FILE__, __LINE__);
-
-		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) {
-				$row[0] = '<a href="'.$url_tool.'?'.api_get_cidreq().'&'.$obj->id.'">'.api_ucfirst($row['col0']).'</a>';
-			} else {
-				$row[0] = api_ucfirst($row['col0']);
-			}
-
-			$row[1] = get_lang($row[1]);
-
-			$row[5] = api_ucfirst(format_locale_date($dateTimeFormatLong, strtotime($row['col5'])));
-
-			$row[4] = '';
-			if ($table_name['table_name'] == 'document') {
-				$condition = 'tool.title as title';
-				$query_document = "SELECT $condition FROM $table_tool tool" .
-									" WHERE id = $ref";
-				$rs_document = Database::query($query_document, __FILE__, __LINE__) or die(mysql_error());
-				$obj_document = Database::fetch_object($rs_document);
-				$row[4] = $obj_document->title;
-			}
-
-			$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;
-		default:
-			$table_name = $tool;
-			break;
-	}
-	return array('table_name' => $table_name,
-				 'link_tool' => $link_tool,
-				 'id_tool' => $id_tool);
-}
 
 	
 
@@ -315,7 +166,7 @@ if($_GET['studentlist'] == 'false') {
 	echo '<a href="'.api_get_self().'?'.api_get_cidreq().'&id_session='.api_get_session_id().'&export=csv&'.$addional_param.'">'.Display::return_icon('csv.gif',get_lang('ExportAsCSV')).get_lang('ExportAsCSV').'</a>';
 }
 if($_GET['studentlist'] == 'true' || empty($_GET['studentlist'])) {
-	echo display_additional_profile_fields();
+	echo TrackingCourseLog::display_additional_profile_fields();
 }
 echo '</div>';
 
@@ -660,7 +511,7 @@ if ($_GET['studentlist'] == 'false') {
 	    $course_code = $_course['id'];
 		
 		$user_ids = array_keys($a_students);
-		$table = new SortableTable('users_tracking', 'get_number_of_users', 'get_user_data', (api_is_western_name_order() xor api_sort_by_first_name()) ? 3 : 2);
+		$table = new SortableTable('users_tracking', array('TrackingCourseLog','get_number_of_users'), array('TrackingCourseLog','get_user_data'), (api_is_western_name_order() xor api_sort_by_first_name()) ? 3 : 2);
 		
 		$parameters['cidReq'] 		= Security::remove_XSS($_GET['cidReq']);
 		$parameters['studentlist'] 	= Security::remove_XSS($_GET['studentlist']);
@@ -747,7 +598,7 @@ if ($_GET['studentlist'] == 'false') {
 		$form->display();
 	echo '</div>';
 
-	$table = new SortableTable('resources', 'count_item_resources', 'get_item_resources_data', 5, 20, 'DESC');
+	$table = new SortableTable('resources', array('TrackingCourseLog','count_item_resources'), array('TrackingCourseLog','get_item_resources_data'), 5, 20, 'DESC');
 	$parameters = array();
 
 	if (isset($_GET['keyword'])) {
@@ -769,246 +620,4 @@ if ($_GET['studentlist'] == 'false') {
 ?>
 </table>
 <?php
-Display::display_footer();
-
-
-/**
- * Display all the additionally defined user profile fields
- * This function will only display the fields, not the values of the field because it does not act as a filter 
- * but it adds an additional column instead. 
- *
- * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University, Belgium
- * @since October 2009
- * @version 1.8.7
- */
-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="'.$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 = api_sql_query($sql,__FILE__,__LINE__);
-	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 = api_sql_query($sql,__FILE__,__LINE__);
-			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)
- */
-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;
-	
-	$course_code = Database::escape_string($course_code);
-	$course_info = CourseManager :: get_course_information($course_code);
-	$tbl_track_cours_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
-	$tbl_user 				= Database :: get_main_table(TABLE_MAIN_USER);		
-	$tbl_item_property 		= Database :: get_course_table(TABLE_ITEM_PROPERTY, $course_info['db_name']);
-	$tbl_forum_post  		= Database :: get_course_table(TABLE_FORUM_POST, $course_info['db_name']);
-	$tbl_course_lp_view 	= Database :: get_course_table(TABLE_LP_VIEW, $course_info['db_name']);	
-	$tbl_course_lp 			= Database :: get_course_table(TABLE_LP_MAIN, $course_info['db_name']);
-
-	// 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' ";
-	}			
-	$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
-			$condition_user ";
-
-	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, __FILE__, __LINE__);	
-	$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));		
-		$avg_student_score = Tracking::get_average_test_scorm_and_lp($user[0], $course_code);
-		$avg_student_progress = Tracking::get_avg_student_progress($user[0], $course_code);			
-		if (empty($avg_student_score)) {$avg_student_score=0;}
-		if (empty($avg_student_progress)) {$avg_student_progress=0;}
-		$row[4] = $avg_student_progress.'%';
-		$row[5] = $avg_student_score.'%';
-		$row[6] = Tracking::count_student_assignments($user[0], $course_code);$user[4];
-		$row[7] = Tracking::count_student_messages($user[0], $course_code);//$user[5];
-		$row[8] = Tracking::get_first_connection_date_on_the_course($user[0], $course_code);
-		$row[9] = Tracking::get_last_connection_date_on_the_course($user[0], $course_code);
-				
-		// 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"><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;
-}
+Display::display_footer();

+ 6 - 366
main/tracking/userLog.php

@@ -44,7 +44,7 @@ $view  = $_REQUEST['view'];
 $language_file = 'tracking';
 
 // including the global Dokeos file
-include('../inc/global.inc.php');
+//include('../inc/global.inc.php');
 
 // the section (for the tabs)
 $this_section = "session_my_space";
@@ -172,366 +172,6 @@ $MonthsShort = api_get_months_short();
 $is_allowedToTrack = true; // allowed to track only user of one group
 $is_allowedToTrackEverybodyInCourse = $is_allowedToTrack; // allowed to track all students in course
 
-/*
-==============================================================================
-		FUNCTIONS
-==============================================================================
-*/
-
-/**
-* 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)
-{
-	$MonthsLong = $GLOBALS['MonthsLong'];
-	$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=".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=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 = '".Database::escape_string($user_id)."'
-					AND access_cours_code = '".Database::escape_string($course_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]."'>".$langMonthNames['long'][date("n", $results[$j][0])-1]." ".date("Y", $results[$j][0])."</a></td>";
-				echo "<td class='content'><a href='logins_details.php?uInfo=".Security::remove_XSS($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=".Security::remove_XSS($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;
-	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 = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
-				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 = format_locale_date(get_lang('dateTimeFormatLong'), $hpresults[$i][3]);
-?>
-				<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];
-				$timestamp = strtotime($results[$j][0]);
-				$beautifulDate = format_locale_date($dateTimeFormatLong,$timestamp);
-				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.
-*/
-function display_document_tracking_info($view, $user_id, $course_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 = '".Database::escape_string($course_id)."'
-						AND down_user_id = '".Database::escape_string($user_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>
-		";
-	}
-}
-
-
 /*
 ==============================================================================
 		MAIN SECTION
@@ -694,19 +334,19 @@ if( ( $is_allowedToTrack || $is_allowedToTrackEverybodyInCourse ) && $_configura
 				$view ='0000000';
 			}
 			//Logins
-			display_login_tracking_info($view, $uInfo, $_cid);
+			TrackingUserLog::display_login_tracking_info($view, $uInfo, $_cid);
 
 			//Exercise results
-			display_exercise_tracking_info($view, $uInfo, $_cid);
+			TrackingUserLog::display_exercise_tracking_info($view, $uInfo, $_cid);
 
 			//Student publications uploaded
-			display_student_publications_tracking_info($view, $uInfo, $_cid);
+			TrackingUserLog::display_student_publications_tracking_info($view, $uInfo, $_cid);
 
 			//Links usage
-			display_links_tracking_info($view, $uInfo, $_cid);
+			TrackingUserLog::display_links_tracking_info($view, $uInfo, $_cid);
 
 			//Documents downloaded
-			display_document_tracking_info($view, $uInfo, $_cid);
+			TrackingUserLog::display_document_tracking_info($view, $uInfo, $_cid);
 		} else {
 			echo get_lang('ErrorUserNotInGroup');
 		}

+ 5 - 262
main/tracking/userlogCSV.php

@@ -163,263 +163,6 @@ $MonthsShort = api_get_months_short();
 $is_allowedToTrack = true; // allowed to track only user of one group
 $is_allowedToTrackEverybodyInCourse = $is_allowedToTrack; // allowed to track all students in course
 
-/*
-==============================================================================
-		FUNCTIONS
-==============================================================================
-*/
-
-/**
-* 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)
-{
-	$MonthsLong = $GLOBALS['MonthsLong'];
-	$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);
-		$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."'
-					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;
-	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 = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
-				$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 = format_locale_date(get_lang('dateTimeFormatLong'), $hpresults[$i][3]);
-				$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];
-				$timestamp = strtotime($results[$j][0]);
-				$beautifulDate = format_locale_date($dateTimeFormatLong,$timestamp);
-				$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.
-*/
-function display_document_tracking_info($view, $user_id, $course_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'
-					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);
-}
-
-
 /*
 ==============================================================================
 		MAIN SECTION
@@ -558,19 +301,19 @@ if( ( $is_allowedToTrack || $is_allowedToTrackEverybodyInCourse ) && $_configura
 				$view ='0000000';
 			}
 			//Logins
-			list($title_line1, $line1) = display_login_tracking_info($view, $uInfo, $_cid);
+			list($title_line1, $line1) = TrackingUserLogCSV::display_login_tracking_info($view, $uInfo, $_cid);
 
 			//Exercise results
-			list($title_line2, $line2) = display_exercise_tracking_info($view, $uInfo, $_cid);
+			list($title_line2, $line2) = TrackingUserLogCSV::display_exercise_tracking_info($view, $uInfo, $_cid);
 
 			//Student publications uploaded
-			list($title_line3, $line3) = display_student_publications_tracking_info($view, $uInfo, $_cid);
+			list($title_line3, $line3) = TrackingUserLogCSV::display_student_publications_tracking_info($view, $uInfo, $_cid);
 
 			//Links usage
-			list($title_line4, $line4) = display_links_tracking_info($view, $uInfo, $_cid);
+			list($title_line4, $line4) = TrackingUserLogCSV::display_links_tracking_info($view, $uInfo, $_cid);
 
 			//Documents downloaded
-			list($title_line5, $line5) = display_document_tracking_info($view, $uInfo, $_cid);
+			list($title_line5, $line5) = TrackingUserLogCSV::display_document_tracking_info($view, $uInfo, $_cid);
 
 			$title_line = $title_line1.$title_line2.$title_line3.$title_line4.$title_line5;
 			$line= $line1.$line2.$line3.$line4.$line5;