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

skala
Carlos Vargas 16 years ago
parent 998278728b
commit d2bab4c104
  1. 996
      main/inc/lib/tracking.lib.php
  2. 403
      main/tracking/courseLog.php
  3. 372
      main/tracking/userLog.php
  4. 267
      main/tracking/userlogCSV.php

File diff suppressed because it is too large Load Diff

@ -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();

@ -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');
}

@ -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;

Loading…
Cancel
Save