diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php index 7759c2e00e..28ea98c96c 100755 --- a/main/inc/lib/tracking.lib.php +++ b/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] = ''.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); + } + 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 = '
'; + + // 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 .= ''; + + // 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 .= ''; + } + } + // the submit button + $return .= ''; + $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) + * 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 " + + + "; + $total = 0; + if (is_array($results)) { + for($j = 0 ; $j < count($results) ; $j++) { + echo ""; + //echo ""; + echo ""; + echo ""; + echo""; + $total = $total + $results[$j][1]; + } + echo ""; + echo ""; + echo ""; + echo""; + } else { + echo ""; + echo ""; + echo""; + } + echo "
+ ".get_lang('LoginsTitleMonthColumn')." + + ".get_lang('LoginsTitleCountColumn')." +
".$langMonthNames['long'][date("n", $results[$j][0])-1]." ".date("Y", $results[$j][0])."".$MonthsLong[date('n', $results[$j][0])-1].' '.date('Y', $results[$j][0])."".$results[$j][1]."
".get_lang('Total')."".$total."
".get_lang('NoResult')."
"; + 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 " + + + + + "; + + 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 "\n"; + echo "\n"; + echo "\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 "\n"; + echo "\n"; + } + echo "
+ ".get_lang('ExercicesTitleExerciceColumn')." + + ".get_lang('Date')." + + ".get_lang('ExercicesTitleScoreColumn')." +
".$results[$i][0]."".$display_date."".$results[$i][1]." / ".$results[$i][2]."
/
".get_lang('NoResult')."
"; + 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 " + + + + "; + 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 ""; + echo ""; + echo ""; + echo""; + } + } else { + echo ""; + echo ""; + echo""; + } + echo "
+ ".get_lang('WorkTitle')." + + ".get_lang('WorkAuthors')." + + ".get_lang('Date')." +
" + ."".$results[$j][1]."" + ."".$results[$j][2]."".$beautifulDate."
".get_lang('NoResult')."
"; + 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 " + + "; + if (is_array($results)) { + for($j = 0 ; $j < count($results) ; $j++) { + echo ""; + echo ""; + echo""; + } + } else { + echo ""; + echo ""; + echo""; + } + echo "
+ ".get_lang('LinksTitleLinkColumn')." +
".$results[$j][0]."
".get_lang('NoResult')."
"; + 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 " + + "; + if (is_array($results)) { + for($j = 0 ; $j < count($results) ; $j++) { + echo ""; + echo ""; + echo""; + } + } else { + echo ""; + echo ""; + echo""; + } + echo "
+ ".get_lang('DocumentsTitleDocumentColumn')." +
".$results[$j]."
".get_lang('NoResult')."
"; + 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 = '
'; - - // 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 .= ''; - - // 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 .= ''; - } - } - // the submit button - $return .= ''; - $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 " - - - "; - $total = 0; - if (is_array($results)) { - for($j = 0 ; $j < count($results) ; $j++) { - echo ""; - //echo ""; - echo ""; - echo ""; - echo""; - $total = $total + $results[$j][1]; - } - echo ""; - echo ""; - echo ""; - echo""; - } else { - echo ""; - echo ""; - echo""; - } - echo "
- ".get_lang('LoginsTitleMonthColumn')." - - ".get_lang('LoginsTitleCountColumn')." -
".$langMonthNames['long'][date("n", $results[$j][0])-1]." ".date("Y", $results[$j][0])."".$MonthsLong[date('n', $results[$j][0])-1].' '.date('Y', $results[$j][0])."".$results[$j][1]."
".get_lang('Total')."".$total."
".get_lang('NoResult')."
"; - 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 " - - - - - "; - - 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 "\n"; - echo "\n"; - echo "\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 "\n"; - echo "\n"; - } - echo "
- ".get_lang('ExercicesTitleExerciceColumn')." - - ".get_lang('Date')." - - ".get_lang('ExercicesTitleScoreColumn')." -
".$results[$i][0]."".$display_date."".$results[$i][1]." / ".$results[$i][2]."
/
".get_lang('NoResult')."
"; - 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 " - - - - "; - 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 ""; - echo ""; - echo ""; - echo""; - } - } else { - echo ""; - echo ""; - echo""; - } - echo "
- ".get_lang('WorkTitle')." - - ".get_lang('WorkAuthors')." - - ".get_lang('Date')." -
" - ."".$results[$j][1]."" - ."".$results[$j][2]."".$beautifulDate."
".get_lang('NoResult')."
"; - 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 " - - "; - if (is_array($results)) { - for($j = 0 ; $j < count($results) ; $j++) { - echo ""; - echo ""; - echo""; - } - } else { - echo ""; - echo ""; - echo""; - } - echo "
- ".get_lang('LinksTitleLinkColumn')." -
".$results[$j][0]."
".get_lang('NoResult')."
"; - 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 " - - "; - if (is_array($results)) { - for($j = 0 ; $j < count($results) ; $j++) { - echo ""; - echo ""; - echo""; - } - } else { - echo ""; - echo ""; - echo""; - } - echo "
- ".get_lang('DocumentsTitleDocumentColumn')." -
".$results[$j]."
".get_lang('NoResult')."
"; - 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;