+ * @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]=' ';
+ }
+ }
+ $row[11] = '
';
+ 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 "
+
+ |
+ - " .
+ "".get_lang('LoginsAndAccessTools')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
+ |
+
+ ";
+ echo "".get_lang('LoginsDetails')." ";
+
+ $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 " |
| ";
+ //$results = getManyResults2Col($sql);
+ $results = getManyResults3Col($sql);
+
+ echo "";
+ echo " |
";
+ } else {
+ $new_view = substr_replace($view,'1',0,1);
+ echo "
+
+ |
+ + ".get_lang('LoginsAndAccessTools')."
+ |
+
+ ";
+ }
+ }
+
+ /**
+ * 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 "
+ |
+ - ".get_lang('ExercicesResults')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
+ |
+
";
+ echo "".get_lang('ExercicesDetails')." ";
+
+ $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 " |
\n\n";
+ $results = getManyResultsXCol($sql, 4);
+ echo "\n";
+ echo "
+
+ |
+ ".get_lang('ExercicesTitleExerciceColumn')."
+ |
+
+ ".get_lang('Date')."
+ |
+
+ ".get_lang('ExercicesTitleScoreColumn')."
+ |
+ ";
+
+ if (is_array($results)) {
+ for($i = 0; $i < sizeof($results); $i++) {
+ $display_date = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
+ echo "\n";
+ echo "| ".$results[$i][0]." | \n";
+ echo "".$display_date." | \n";
+ echo "".$results[$i][1]." / ".$results[$i][2]." | \n";
+ echo " \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]);
+ ?>
+
+ |
+ |
+ / |
+
+ \n";
+ echo "".get_lang('NoResult')." | \n";
+ echo "\n";
+ }
+ echo " ";
+ echo " | \n
\n";
+ } else {
+ $new_view = substr_replace($view,'1',1,1);
+ echo "
+
+ |
+ + ".get_lang('ExercicesResults')."
+ |
+
";
+ }
+ }
+
+ /**
+ * 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 "
+ |
+ - ".get_lang('WorkUploads')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
+ |
+
";
+ echo "".get_lang('WorksDetails')." ";
+ $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 " |
";
+ $results = getManyResultsXCol($sql,4);
+ echo "";
+ echo "
+ |
+ ".get_lang('WorkTitle')."
+ |
+
+ ".get_lang('WorkAuthors')."
+ |
+
+ ".get_lang('Date')."
+ |
+ ";
+ 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 "";
+ echo "| "
+ ."".$results[$j][1].""
+ ." | ";
+ echo "".$results[$j][2]." | ";
+ echo "".$beautifulDate." | ";
+ echo" ";
+ }
+ } else {
+ echo "";
+ echo "| ".get_lang('NoResult')." | ";
+ echo" ";
+ }
+ echo " ";
+ echo " |
";
+ } else {
+ $new_view = substr_replace($view,'1',2,1);
+ echo "
+
+ |
+ + ".get_lang('WorkUploads')."
+ |
+
+ ";
+ }
+ }
+
+ /**
+ * 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 "
+
+ |
+ - ".get_lang('LinksAccess')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
+ |
+
+ ";
+ echo "".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 = '".Database::escape_string($course_id)."'
+ AND sl.links_user_id = '".Database::escape_string($user_id)."'
+ GROUP BY cl.title, cl.url";
+ echo " |
";
+ $results = getManyResults2Col($sql);
+ echo "";
+ echo "
+ |
+ ".get_lang('LinksTitleLinkColumn')."
+ |
+ ";
+ if (is_array($results)) {
+ for($j = 0 ; $j < count($results) ; $j++) {
+ echo "";
+ echo "| ".$results[$j][0]." | ";
+ echo" ";
+ }
+ } else {
+ echo "";
+ echo "| ".get_lang('NoResult')." | ";
+ echo" ";
+ }
+ echo " ";
+ echo " |
";
+ } else {
+ $new_view = substr_replace($view,'1',3,1);
+ echo "
+
+ |
+ + ".get_lang('LinksAccess')."
+ |
+
+ ";
+ }
+ }
+
+ /**
+ * 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 "
+
+ |
+ - ".get_lang('DocumentsAccess')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
+ |
+
+ ";
+ echo "".get_lang('DocumentsDetails')." ";
+
+ $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 " |
";
+ $results = getManyResults1Col($sql);
+ echo "";
+ echo "
+ |
+ ".get_lang('DocumentsTitleDocumentColumn')."
+ |
+ ";
+ if (is_array($results)) {
+ for($j = 0 ; $j < count($results) ; $j++) {
+ echo "";
+ echo "| ".$results[$j]." | ";
+ echo" ";
+ }
+ } else {
+ echo "";
+ echo "| ".get_lang('NoResult')." | ";
+ echo" ";
+ }
+ echo " ";
+ echo " |
";
+ } else {
+ $new_view = substr_replace($view,'1',4,1);
+ echo "
+
+ |
+ + ".get_lang('DocumentsAccess')."
+ |
+
+ ";
+ }
+ }
+
+}
+
+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')."";
+ }
+ }
+ 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);
+ }
+}
?>
\ No newline at end of file
diff --git a/main/tracking/courseLog.php b/main/tracking/courseLog.php
index 1991e765e3..ced33e36e3 100755
--- a/main/tracking/courseLog.php
+++ b/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] = ''.api_ucfirst($row['col0']).'';
- } 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 .= '
'.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 ''.Display::return_icon('csv.gif',get_lang('ExportAsCSV')).get_lang('ExportAsCSV').'';
}
if($_GET['studentlist'] == 'true' || empty($_GET['studentlist'])) {
- echo display_additional_profile_fields();
+ echo TrackingCourseLog::display_additional_profile_fields();
}
echo '';
@@ -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 '';
- $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') {
?>
, 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 = '';
- 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 , 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
- * @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]=' ';
- }
- }
- $row[11] = '
';
- 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;
-}
\ No newline at end of file
+Display::display_footer();
\ No newline at end of file
diff --git a/main/tracking/userLog.php b/main/tracking/userLog.php
index 1c248a2227..cb5fed1e02 100755
--- a/main/tracking/userLog.php
+++ b/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 "
-
- |
- - " .
- "".get_lang('LoginsAndAccessTools')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
- |
-
- ";
- echo "".get_lang('LoginsDetails')." ";
-
- $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 " |
| ";
- //$results = getManyResults2Col($sql);
- $results = getManyResults3Col($sql);
-
- echo "";
- echo " |
";
- } else {
- $new_view = substr_replace($view,'1',0,1);
- echo "
-
- |
- + ".get_lang('LoginsAndAccessTools')."
- |
-
- ";
- }
-}
-
-/**
-* 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 "
- |
- - ".get_lang('ExercicesResults')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
- |
-
";
- echo "".get_lang('ExercicesDetails')." ";
-
- $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 " |
\n\n";
- $results = getManyResultsXCol($sql, 4);
- echo "\n";
- echo "
-
- |
- ".get_lang('ExercicesTitleExerciceColumn')."
- |
-
- ".get_lang('Date')."
- |
-
- ".get_lang('ExercicesTitleScoreColumn')."
- |
- ";
-
- if (is_array($results)) {
- for($i = 0; $i < sizeof($results); $i++) {
- $display_date = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
- echo "\n";
- echo "| ".$results[$i][0]." | \n";
- echo "".$display_date." | \n";
- echo "".$results[$i][1]." / ".$results[$i][2]." | \n";
- echo " \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]);
-?>
-
- |
- |
- / |
-
-\n";
- echo "".get_lang('NoResult')." | \n";
- echo "\n";
- }
- echo " ";
- echo " | \n
\n";
- } else {
- $new_view = substr_replace($view,'1',1,1);
- echo "
-
- |
- + ".get_lang('ExercicesResults')."
- |
-
";
- }
-}
-
-/**
-* 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 "
- |
- - ".get_lang('WorkUploads')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
- |
-
";
- echo "".get_lang('WorksDetails')." ";
- $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 " |
";
- $results = getManyResultsXCol($sql,4);
- echo "";
- echo "
- |
- ".get_lang('WorkTitle')."
- |
-
- ".get_lang('WorkAuthors')."
- |
-
- ".get_lang('Date')."
- |
- ";
- 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 "";
- echo "| "
- ."".$results[$j][1].""
- ." | ";
- echo "".$results[$j][2]." | ";
- echo "".$beautifulDate." | ";
- echo" ";
- }
- } else {
- echo "";
- echo "| ".get_lang('NoResult')." | ";
- echo" ";
- }
- echo " ";
- echo " |
";
- } else {
- $new_view = substr_replace($view,'1',2,1);
- echo "
-
- |
- + ".get_lang('WorkUploads')."
- |
-
- ";
- }
-}
-
-/**
-* 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 "
-
- |
- - ".get_lang('LinksAccess')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
- |
-
- ";
- echo "".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 = '".Database::escape_string($course_id)."'
- AND sl.links_user_id = '".Database::escape_string($user_id)."'
- GROUP BY cl.title, cl.url";
- echo " |
";
- $results = getManyResults2Col($sql);
- echo "";
- echo "
- |
- ".get_lang('LinksTitleLinkColumn')."
- |
- ";
- if (is_array($results)) {
- for($j = 0 ; $j < count($results) ; $j++) {
- echo "";
- echo "| ".$results[$j][0]." | ";
- echo" ";
- }
- } else {
- echo "";
- echo "| ".get_lang('NoResult')." | ";
- echo" ";
- }
- echo " ";
- echo " |
";
- } else {
- $new_view = substr_replace($view,'1',3,1);
- echo "
-
- |
- + ".get_lang('LinksAccess')."
- |
-
- ";
- }
-}
-
-/**
-* 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 "
-
- |
- - ".get_lang('DocumentsAccess')." [".get_lang('Close')."] [".get_lang('ExportAsCSV')."]
- |
-
- ";
- echo "".get_lang('DocumentsDetails')." ";
-
- $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 " |
";
- $results = getManyResults1Col($sql);
- echo "";
- echo "
- |
- ".get_lang('DocumentsTitleDocumentColumn')."
- |
- ";
- if (is_array($results)) {
- for($j = 0 ; $j < count($results) ; $j++) {
- echo "";
- echo "| ".$results[$j]." | ";
- echo" ";
- }
- } else {
- echo "";
- echo "| ".get_lang('NoResult')." | ";
- echo" ";
- }
- echo " ";
- echo " |
";
- } else {
- $new_view = substr_replace($view,'1',4,1);
- echo "
-
- |
- + ".get_lang('DocumentsAccess')."
- |
-
- ";
- }
-}
-
-
/*
==============================================================================
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');
}
diff --git a/main/tracking/userlogCSV.php b/main/tracking/userlogCSV.php
index ef330d89b7..2cd17ecdb0 100755
--- a/main/tracking/userlogCSV.php
+++ b/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')."";
- }
- }
- 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;