|
@@ -1276,4 +1276,1000 @@ class Tracking {
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+class TrackingCourseLog {
|
|
|
+
|
|
|
+ function count_item_resources() {
|
|
|
+ $table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
|
|
|
+ $table_user = Database :: get_main_table(TABLE_MAIN_USER);
|
|
|
+ $sql = "SELECT count(tool) AS total_number_of_items FROM $table_item_property track_resource, $table_user user" .
|
|
|
+ " WHERE track_resource.insert_user_id = user.user_id";
|
|
|
+
|
|
|
+ if (isset($_GET['keyword'])) {
|
|
|
+ $keyword = Database::escape_string(trim($_GET['keyword']));
|
|
|
+ $sql .= " AND (user.username LIKE '%".$keyword."%' OR lastedit_type LIKE '%".$keyword."%' OR tool LIKE '%".$keyword."%')";
|
|
|
+ }
|
|
|
+
|
|
|
+ $sql .= " AND tool IN ('document', 'learnpath', 'quiz', 'glossary', 'link', 'course_description')";
|
|
|
+ $res = Database::query($sql, __FILE__, __LINE__);
|
|
|
+ $obj = Database::fetch_object($res);
|
|
|
+ return $obj->total_number_of_items;
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_item_resources_data($from, $number_of_items, $column, $direction) {
|
|
|
+ global $dateTimeFormatLong;
|
|
|
+ $table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
|
|
|
+ $table_user = Database :: get_main_table(TABLE_MAIN_USER);
|
|
|
+ $table_session = Database :: get_main_table(TABLE_MAIN_SESSION);
|
|
|
+ $sql = "SELECT
|
|
|
+ tool as col0,
|
|
|
+ lastedit_type as col1,
|
|
|
+ ref as ref,
|
|
|
+ user.username as col3,
|
|
|
+ insert_date as col5,
|
|
|
+ visibility as col6
|
|
|
+ FROM $table_item_property track_resource, $table_user user
|
|
|
+ WHERE track_resource.insert_user_id = user.user_id ";
|
|
|
+
|
|
|
+ if (isset($_GET['keyword'])) {
|
|
|
+ $keyword = Database::escape_string(trim($_GET['keyword']));
|
|
|
+ $sql .= " AND (user.username LIKE '%".$keyword."%' OR lastedit_type LIKE '%".$keyword."%' OR tool LIKE '%".$keyword."%') ";
|
|
|
+ }
|
|
|
+
|
|
|
+ $sql .= " AND tool IN ('document', 'learnpath', 'quiz', 'glossary', 'link', 'course_description')";
|
|
|
+
|
|
|
+ if ($column == 0) { $column = '0'; }
|
|
|
+ if ($column != '' && $direction != '') {
|
|
|
+ if ($column != 2 && $column != 4) {
|
|
|
+ $sql .= " ORDER BY col$column $direction";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $sql .= " ORDER BY col5 DESC ";
|
|
|
+ }
|
|
|
+
|
|
|
+ $sql .= " LIMIT $from, $number_of_items ";
|
|
|
+
|
|
|
+ $res = Database::query($sql, __FILE__, __LINE__) or die(mysql_error());
|
|
|
+ $resources = array ();
|
|
|
+
|
|
|
+ while ($row = Database::fetch_array($res)) {
|
|
|
+ $ref = $row['ref'];
|
|
|
+ $table_name = TrackingCourseLog::get_tool_name_table($row['col0']);
|
|
|
+ $table_tool = Database :: get_course_table($table_name['table_name']);
|
|
|
+ $id = $table_name['id_tool'];
|
|
|
+ $query = "SELECT session.id, session.name, user.username FROM $table_tool tool, $table_session session, $table_user user" .
|
|
|
+ " WHERE tool.session_id = session.id AND session.id_coach = user.user_id AND tool.$id = $ref";
|
|
|
+ $recorset = Database::query($query, __FILE__, __LINE__);
|
|
|
+
|
|
|
+ if (!empty($recorset)) {
|
|
|
+
|
|
|
+ $obj = Database::fetch_object($recorset);
|
|
|
+
|
|
|
+ $name_session = '';
|
|
|
+ $coach_name = '';
|
|
|
+ if (!empty($obj)) {
|
|
|
+ $name_session = $obj->name;
|
|
|
+ $coach_name = $obj->username;
|
|
|
+ }
|
|
|
+
|
|
|
+ $url_tool = api_get_path(WEB_CODE_PATH).$table_name['link_tool'];
|
|
|
+
|
|
|
+ $row[0] = '';
|
|
|
+ if ($row['col6'] != 2) {
|
|
|
+ $row[0] = '<a href="'.$url_tool.'?'.api_get_cidreq().'&'.$obj->id.'">'.api_ucfirst($row['col0']).'</a>';
|
|
|
+ } else {
|
|
|
+ $row[0] = api_ucfirst($row['col0']);
|
|
|
+ }
|
|
|
+
|
|
|
+ $row[1] = get_lang($row[1]);
|
|
|
+
|
|
|
+ $row[5] = api_ucfirst(format_locale_date($dateTimeFormatLong, strtotime($row['col5'])));
|
|
|
+
|
|
|
+ $row[4] = '';
|
|
|
+ if ($table_name['table_name'] == 'document') {
|
|
|
+ $condition = 'tool.title as title';
|
|
|
+ $query_document = "SELECT $condition FROM $table_tool tool" .
|
|
|
+ " WHERE id = $ref";
|
|
|
+ $rs_document = Database::query($query_document, __FILE__, __LINE__) or die(mysql_error());
|
|
|
+ $obj_document = Database::fetch_object($rs_document);
|
|
|
+ $row[4] = $obj_document->title;
|
|
|
+ }
|
|
|
+
|
|
|
+ $row2 = $name_session;
|
|
|
+ if (!empty($coach_name)) {
|
|
|
+ $row2 .= '<br />'.get_lang('Coach').': '.$coach_name;
|
|
|
+ }
|
|
|
+ $row[2] = $row2;
|
|
|
+
|
|
|
+ $resources[] = $row;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return $resources;
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_tool_name_table($tool) {
|
|
|
+ switch ($tool) {
|
|
|
+ case 'document':
|
|
|
+ $table_name = TABLE_DOCUMENT;
|
|
|
+ $link_tool = 'document/document.php';
|
|
|
+ $id_tool = 'id';
|
|
|
+ break;
|
|
|
+ case 'learnpath':
|
|
|
+ $table_name = TABLE_LP_MAIN;
|
|
|
+ $link_tool = 'newscorm/lp_controller.php';
|
|
|
+ $id_tool = 'id';
|
|
|
+ break;
|
|
|
+ case 'quiz':
|
|
|
+ $table_name = TABLE_QUIZ_TEST;
|
|
|
+ $link_tool = 'exercice/exercice.php';
|
|
|
+ $id_tool = 'id';
|
|
|
+ break;
|
|
|
+ case 'glossary':
|
|
|
+ $table_name = TABLE_GLOSSARY;
|
|
|
+ $link_tool = 'glossary/index.php';
|
|
|
+ $id_tool = 'glossary_id';
|
|
|
+ break;
|
|
|
+ case 'link':
|
|
|
+ $table_name = TABLE_LINK;
|
|
|
+ $link_tool = 'link/link.php';
|
|
|
+ $id_tool = 'id';
|
|
|
+ break;
|
|
|
+ case 'course_description':
|
|
|
+ $table_name = TABLE_COURSE_DESCRIPTION;
|
|
|
+ $link_tool = 'course_description/';
|
|
|
+ $id_tool = 'id';
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ $table_name = $tool;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return array('table_name' => $table_name,
|
|
|
+ 'link_tool' => $link_tool,
|
|
|
+ 'id_tool' => $id_tool);
|
|
|
+ }
|
|
|
+ function display_additional_profile_fields() {
|
|
|
+ // getting all the extra profile fields that are defined by the platform administrator
|
|
|
+ $extra_fields = UserManager :: get_extra_fields(0,50,5,'ASC');
|
|
|
+
|
|
|
+ // creating the form
|
|
|
+ $return = '<form action="courseLog.php" method="get" name="additional_profile_field_form" id="additional_profile_field_form">';
|
|
|
+
|
|
|
+ // the select field with the additional user profile fields (= this is where we select the field of which we want to see
|
|
|
+ // the information the users have entered or selected.
|
|
|
+ $return .= '<select name="additional_profile_field">';
|
|
|
+ $return .= '<option value="-">'.get_lang('SelectFieldToAdd').'</option>';
|
|
|
+
|
|
|
+ foreach ($extra_fields as $key=>$field) {
|
|
|
+ // show only extra fields that are visible, added by J.Montoya
|
|
|
+ if ($field[6]==1) {
|
|
|
+ if ($field[0] == $_GET['additional_profile_field'] ) {
|
|
|
+ $selected = 'selected="selected"';
|
|
|
+ } else {
|
|
|
+ $selected = '';
|
|
|
+ }
|
|
|
+ $return .= '<option value="'.$field[0].'" '.$selected.'>'.$field[3].'</option>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $return .= '</select>';
|
|
|
+
|
|
|
+ // the form elements for the $_GET parameters (because the form is passed through GET
|
|
|
+ foreach ($_GET as $key=>$value){
|
|
|
+ if ($key <> 'additional_profile_field') {
|
|
|
+ $return .= '<input type="hidden" name="'.$key.'" value="'.Security::Remove_XSS($value).'" />';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // the submit button
|
|
|
+ $return .= '<button class="save" type="submit">'.get_lang('AddAdditionalProfileField').'</button>';
|
|
|
+ $return .= '</form>';
|
|
|
+ return $return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * This function gets all the information of a certrain ($field_id) additional profile field.
|
|
|
+ * It gets the information of all the users so that it can be displayed in the sortable table or in the csv or xls export
|
|
|
+ *
|
|
|
+ * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University, Belgium
|
|
|
+ * @since October 2009
|
|
|
+ * @version 1.8.7
|
|
|
+ */
|
|
|
+ function get_addtional_profile_information_of_field($field_id){
|
|
|
+ // Database table definition
|
|
|
+ $table_user = Database::get_main_table(TABLE_MAIN_USER);
|
|
|
+ $table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
|
|
|
+
|
|
|
+ $sql = "SELECT user.user_id, field.field_value FROM $table_user user, $table_user_field_values field
|
|
|
+ WHERE user.user_id = field.user_id
|
|
|
+ AND field.field_id='".intval($field_id)."'";
|
|
|
+ $result = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
+ while($row = Database::fetch_array($result))
|
|
|
+ {
|
|
|
+ $return[$row['user_id']][] = $row['field_value'];
|
|
|
+ }
|
|
|
+ return $return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * This function gets all the information of a certrain ($field_id) additional profile field for a specific list of users is more efficent than get_addtional_profile_information_of_field() function
|
|
|
+ * It gets the information of all the users so that it can be displayed in the sortable table or in the csv or xls export
|
|
|
+ *
|
|
|
+ * @author Julio Montoya <gugli100@gmail.com>
|
|
|
+ * @param int field id
|
|
|
+ * @param array list of user ids
|
|
|
+ * @return array
|
|
|
+ * @since Nov 2009
|
|
|
+ * @version 1.8.6.2
|
|
|
+ */
|
|
|
+ function get_addtional_profile_information_of_field_by_user($field_id, $users) {
|
|
|
+ // Database table definition
|
|
|
+ $table_user = Database::get_main_table(TABLE_MAIN_USER);
|
|
|
+ $table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
|
|
|
+ $result_extra_field = UserManager::get_extra_field_information($field_id);
|
|
|
+
|
|
|
+ if (!empty($users)) {
|
|
|
+ if ($result_extra_field['field_type'] == USER_FIELD_TYPE_TAG ) {
|
|
|
+ foreach($users as $user_id) {
|
|
|
+ $user_result = UserManager::get_user_tags($user_id, $field_id);
|
|
|
+ $tag_list = array();
|
|
|
+ foreach($user_result as $item) {
|
|
|
+ $tag_list[] = $item['tag'];
|
|
|
+ }
|
|
|
+ $return[$user_id][] = implode(', ',$tag_list);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $new_user_array = array();
|
|
|
+ foreach($users as $user_id) {
|
|
|
+ $new_user_array[]= "'".$user_id."'";
|
|
|
+ }
|
|
|
+ $users = implode(',',$new_user_array);
|
|
|
+ //selecting only the necessary information NOT ALL the user list
|
|
|
+ $sql = "SELECT user.user_id, field.field_value FROM $table_user user INNER JOIN $table_user_field_values field
|
|
|
+ ON (user.user_id = field.user_id)
|
|
|
+ WHERE field.field_id=".intval($field_id)." AND user.user_id IN ($users)";
|
|
|
+
|
|
|
+ $result = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
+ while($row = Database::fetch_array($result)) {
|
|
|
+ // get option value for field type double select by id
|
|
|
+ if (!empty($row['field_value'])) {
|
|
|
+ if ($result_extra_field['field_type'] == USER_FIELD_TYPE_DOUBLE_SELECT) {
|
|
|
+ $id_double_select = explode(';',$row['field_value']);
|
|
|
+ if (is_array($id_double_select)) {
|
|
|
+ $value1 = $result_extra_field['options'][$id_double_select[0]]['option_value'];
|
|
|
+ $value2 = $result_extra_field['options'][$id_double_select[1]]['option_value'];
|
|
|
+ $row['field_value'] = ($value1.';'.$value2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // get other value from extra field
|
|
|
+ $return[$row['user_id']][] = $row['field_value'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * count the number of students in this course (used for SortableTable)
|
|
|
+ * Deprecated
|
|
|
+ */
|
|
|
+ function count_student_in_course() {
|
|
|
+ global $nbStudents;
|
|
|
+ return $nbStudents;
|
|
|
+ }
|
|
|
+
|
|
|
+ function sort_users($a, $b) {
|
|
|
+ return strcmp(trim(api_strtolower($a[$_SESSION['tracking_column']])), trim(api_strtolower($b[$_SESSION['tracking_column']])));
|
|
|
+ }
|
|
|
+
|
|
|
+ function sort_users_desc($a, $b) {
|
|
|
+ return strcmp( trim(api_strtolower($b[$_SESSION['tracking_column']])), trim(api_strtolower($a[$_SESSION['tracking_column']])));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get number of users for sortable with pagination
|
|
|
+ * @return int
|
|
|
+ */
|
|
|
+ function get_number_of_users() {
|
|
|
+ global $user_ids;
|
|
|
+ return count($user_ids);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * Get data for users list in sortable with pagination
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ function get_user_data($from, $number_of_items, $column, $direction) {
|
|
|
+
|
|
|
+ global $user_ids, $course_code, $additional_user_profile_info, $export_csv, $is_western_name_order, $csv_content;
|
|
|
+
|
|
|
+ $course_code = Database::escape_string($course_code);
|
|
|
+ $course_info = CourseManager :: get_course_information($course_code);
|
|
|
+ $tbl_track_cours_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
|
|
|
+ $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
|
|
|
+ $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY, $course_info['db_name']);
|
|
|
+ $tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST, $course_info['db_name']);
|
|
|
+ $tbl_course_lp_view = Database :: get_course_table(TABLE_LP_VIEW, $course_info['db_name']);
|
|
|
+ $tbl_course_lp = Database :: get_course_table(TABLE_LP_MAIN, $course_info['db_name']);
|
|
|
+
|
|
|
+ // get all users data from a course for sortable with limit
|
|
|
+ $condition_user = "";
|
|
|
+ if (is_array($user_ids)) {
|
|
|
+ $condition_user = " WHERE user.user_id IN (".implode(',',$user_ids).") ";
|
|
|
+ } else {
|
|
|
+ $condition_user = " WHERE user.user_id = '$user_ids' ";
|
|
|
+ }
|
|
|
+ $sql = "SELECT user.user_id as col0,
|
|
|
+ user.official_code as col1,
|
|
|
+ user.lastname as col2,
|
|
|
+ user.firstname as col3
|
|
|
+ FROM $tbl_user as user
|
|
|
+ $condition_user ";
|
|
|
+
|
|
|
+ if (!in_array($direction, array('ASC','DESC'))) {
|
|
|
+ $direction = 'ASC';
|
|
|
+ }
|
|
|
+
|
|
|
+ $column = intval($column);
|
|
|
+ $from = intval($from);
|
|
|
+ $number_of_items = intval($number_of_items);
|
|
|
+ $sql .= " ORDER BY col$column $direction ";
|
|
|
+ $sql .= " LIMIT $from,$number_of_items";
|
|
|
+ $res = Database::query($sql, __FILE__, __LINE__);
|
|
|
+ $users = array ();
|
|
|
+ $t = time();
|
|
|
+ $row = array();
|
|
|
+ while ($user = Database::fetch_row($res)) {
|
|
|
+
|
|
|
+ $row[0] = $user[1];
|
|
|
+ if ($is_western_name_order) {
|
|
|
+ $row[1] = $user[3];
|
|
|
+ $row[2] = $user[2];
|
|
|
+ } else {
|
|
|
+ $row[1] = $user[2];
|
|
|
+ $row[2] = $user[3];
|
|
|
+ }
|
|
|
+ $row[3] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user[0], $course_code));
|
|
|
+ $avg_student_score = Tracking::get_average_test_scorm_and_lp($user[0], $course_code);
|
|
|
+ $avg_student_progress = Tracking::get_avg_student_progress($user[0], $course_code);
|
|
|
+ if (empty($avg_student_score)) {$avg_student_score=0;}
|
|
|
+ if (empty($avg_student_progress)) {$avg_student_progress=0;}
|
|
|
+ $row[4] = $avg_student_progress.'%';
|
|
|
+ $row[5] = $avg_student_score.'%';
|
|
|
+ $row[6] = Tracking::count_student_assignments($user[0], $course_code);$user[4];
|
|
|
+ $row[7] = Tracking::count_student_messages($user[0], $course_code);//$user[5];
|
|
|
+ $row[8] = Tracking::get_first_connection_date_on_the_course($user[0], $course_code);
|
|
|
+ $row[9] = Tracking::get_last_connection_date_on_the_course($user[0], $course_code);
|
|
|
+
|
|
|
+ // we need to display an additional profile field
|
|
|
+ if (isset($_GET['additional_profile_field']) AND is_numeric($_GET['additional_profile_field'])) {
|
|
|
+ if (is_array($additional_user_profile_info[$user[0]])) {
|
|
|
+ $row[10]=implode(', ', $additional_user_profile_info[$user[0]]);
|
|
|
+ } else {
|
|
|
+ $row[10]=' ';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $row[11] = '<center><a href="../mySpace/myStudents.php?student='.$user[0].'&details=true&course='.$course_code.'&origin=tracking_course"><img src="'.api_get_path(WEB_IMG_PATH).'2rightarrow.gif" border="0" /></a></center>';
|
|
|
+ if ($export_csv) {
|
|
|
+ $row[8] = strip_tags($row[8]);
|
|
|
+ $row[9] = strip_tags($row[9]);
|
|
|
+ unset($row[10]);
|
|
|
+ unset($row[11]);
|
|
|
+ $csv_content[] = $row;
|
|
|
+ }
|
|
|
+ // store columns in array $users
|
|
|
+ $users[] = array($row[0],$row[1],$row[2],$row[3],$row[4],$row[5],$row[6],$row[7],$row[8],$row[9],$row[10],$row[11]);
|
|
|
+ }
|
|
|
+ return $users;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class TrackingUserLog {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the number of logins every month for a specific user in a specific course.
|
|
|
+ */
|
|
|
+ function display_login_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ $MonthsLong = $GLOBALS['MonthsLong'];
|
|
|
+ $track_access_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
|
|
|
+ $tempView = $view;
|
|
|
+ if(substr($view,0,1) == '1') {
|
|
|
+ $new_view = substr_replace($view,'0',0,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ <font color='#0000FF'>- </font>" .
|
|
|
+ "<b>".get_lang('LoginsAndAccessTools')."</b> [<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>] [<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=10000'>".get_lang('ExportAsCSV')."</a>]
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ ";
|
|
|
+ echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('LoginsDetails')."<br>";
|
|
|
+
|
|
|
+ $sql = "SELECT UNIX_TIMESTAMP(access_date), count(access_date)
|
|
|
+ FROM $track_access_table
|
|
|
+ WHERE access_user_id = '".Database::escape_string($user_id)."'
|
|
|
+ AND access_cours_code = '".Database::escape_string($course_id)."'
|
|
|
+ GROUP BY YEAR(access_date),MONTH(access_date)
|
|
|
+ ORDER BY YEAR(access_date),MONTH(access_date) ASC";
|
|
|
+
|
|
|
+ echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
|
|
|
+ //$results = getManyResults2Col($sql);
|
|
|
+ $results = getManyResults3Col($sql);
|
|
|
+
|
|
|
+ echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
|
|
|
+ echo "<tr>
|
|
|
+ <td class='secLine'>
|
|
|
+ ".get_lang('LoginsTitleMonthColumn')."
|
|
|
+ </td>
|
|
|
+ <td class='secLine'>
|
|
|
+ ".get_lang('LoginsTitleCountColumn')."
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+ $total = 0;
|
|
|
+ if (is_array($results)) {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++) {
|
|
|
+ echo "<tr>";
|
|
|
+ //echo "<td class='content'><a href='logins_details.php?uInfo=$user_id&reqdate=".$results[$j][0]."'>".$langMonthNames['long'][date("n", $results[$j][0])-1]." ".date("Y", $results[$j][0])."</a></td>";
|
|
|
+ echo "<td class='content'><a href='logins_details.php?uInfo=".Security::remove_XSS($user_id)."&reqdate=".$results[$j][0]."&view=".Security::remove_XSS($view)."'>".$MonthsLong[date('n', $results[$j][0])-1].' '.date('Y', $results[$j][0])."</a></td>";
|
|
|
+ echo "<td valign='top' align='right' class='content'>".$results[$j][1]."</td>";
|
|
|
+ echo"</tr>";
|
|
|
+ $total = $total + $results[$j][1];
|
|
|
+ }
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td>".get_lang('Total')."</td>";
|
|
|
+ echo "<td align='right' class='content'>".$total."</td>";
|
|
|
+ echo"</tr>";
|
|
|
+ } else {
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td colspan='2'><center>".get_lang('NoResult')."</center></td>";
|
|
|
+ echo"</tr>";
|
|
|
+ }
|
|
|
+ echo "</table>";
|
|
|
+ echo "</td></tr>";
|
|
|
+ } else {
|
|
|
+ $new_view = substr_replace($view,'1',0,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ +<font color='#0000FF'> </font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('LoginsAndAccessTools')."</a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the exercise results for a specific user in a specific course.
|
|
|
+ * @todo remove globals
|
|
|
+ */
|
|
|
+ function display_exercise_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ global $TABLECOURSE_EXERCICES, $TABLETRACK_EXERCICES;
|
|
|
+ if(substr($view,1,1) == '1')
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'0',1,1);
|
|
|
+ echo "<tr>
|
|
|
+ <td valign='top'>
|
|
|
+ <font color='#0000FF'>- </font><b>".get_lang('ExercicesResults')."</b> [<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>] [<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=01000'>".get_lang('ExportAsCSV')."</a>]
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+ echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('ExercicesDetails')."<br />";
|
|
|
+
|
|
|
+ $sql = "SELECT ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
|
|
|
+ FROM $TABLECOURSE_EXERCICES AS ce , $TABLETRACK_EXERCICES AS te
|
|
|
+ WHERE te.exe_cours_id = '".Database::escape_string($course_id)."'
|
|
|
+ AND te.exe_user_id = '".Database::escape_string($user_id)."'
|
|
|
+ AND te.exe_exo_id = ce.id
|
|
|
+ ORDER BY ce.title ASC, te.exe_date ASC";
|
|
|
+
|
|
|
+ $hpsql = "SELECT te.exe_name, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date)
|
|
|
+ FROM $TBL_TRACK_HOTPOTATOES AS te
|
|
|
+ WHERE te.exe_user_id = '".Database::escape_string($user_id)."' AND te.exe_cours_id = '".Database::escape_string($course_id)."'
|
|
|
+ ORDER BY te.exe_cours_id ASC, te.exe_date ASC";
|
|
|
+
|
|
|
+ $hpresults = getManyResultsXCol($hpsql, 4);
|
|
|
+
|
|
|
+ $NoTestRes = 0;
|
|
|
+ $NoHPTestRes = 0;
|
|
|
+
|
|
|
+ echo "<tr>\n<td style='padding-left : 40px;padding-right : 40px;'>\n";
|
|
|
+ $results = getManyResultsXCol($sql, 4);
|
|
|
+ echo "<table cellpadding='2' cellspacing='1' border='0' align='center'>\n";
|
|
|
+ echo "
|
|
|
+ <tr bgcolor='#E6E6E6'>
|
|
|
+ <td>
|
|
|
+ ".get_lang('ExercicesTitleExerciceColumn')."
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ ".get_lang('Date')."
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ ".get_lang('ExercicesTitleScoreColumn')."
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+
|
|
|
+ if (is_array($results)) {
|
|
|
+ for($i = 0; $i < sizeof($results); $i++) {
|
|
|
+ $display_date = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
|
|
|
+ echo "<tr>\n";
|
|
|
+ echo "<td class='content'>".$results[$i][0]."</td>\n";
|
|
|
+ echo "<td class='content'>".$display_date."</td>\n";
|
|
|
+ echo "<td valign='top' align='right' class='content'>".$results[$i][1]." / ".$results[$i][2]."</td>\n";
|
|
|
+ echo "</tr>\n";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // istvan begin
|
|
|
+ $NoTestRes = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // The Result of Tests
|
|
|
+ if(is_array($hpresults)) {
|
|
|
+ for($i = 0; $i < sizeof($hpresults); $i++) {
|
|
|
+ $title = GetQuizName($hpresults[$i][0],'');
|
|
|
+ if ($title == '')
|
|
|
+ $title = basename($hpresults[$i][0]);
|
|
|
+ $display_date = format_locale_date(get_lang('dateTimeFormatLong'), $hpresults[$i][3]);
|
|
|
+ ?>
|
|
|
+ <tr>
|
|
|
+ <td class="content"><?php echo $title; ?></td>
|
|
|
+ <td class="content" align="center"><?php echo $display_date; ?></td>
|
|
|
+ <td class="content" align="center"><?php echo $hpresults[$i][1]; ?> / <?php echo $hpresults[$i][2]; ?></td>
|
|
|
+ </tr>
|
|
|
+ <?php }
|
|
|
+ } else {
|
|
|
+ $NoHPTestRes = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($NoTestRes == 1 && $NoHPTestRes == 1) {
|
|
|
+ echo "<tr>\n";
|
|
|
+ echo "<td colspan='3'><center>".get_lang('NoResult')."</center></td>\n";
|
|
|
+ echo "</tr>\n";
|
|
|
+ }
|
|
|
+ echo "</table>";
|
|
|
+ echo "</td>\n</tr>\n";
|
|
|
+ } else {
|
|
|
+ $new_view = substr_replace($view,'1',1,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ +<font color='#0000FF'> </font><a href='".api_get_self()."?uInfo=$user_id&view=".$new_view."' class='specialLink'>".get_lang('ExercicesResults')."</a>
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the student publications for a specific user in a specific course.
|
|
|
+ * @todo remove globals
|
|
|
+ */
|
|
|
+ function display_student_publications_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ global $TABLETRACK_UPLOADS, $TABLECOURSE_WORK, $dateTimeFormatLong, $_course;
|
|
|
+ if(substr($view,2,1) == '1') {
|
|
|
+ $new_view = substr_replace($view,'0',2,1);
|
|
|
+ echo "<tr>
|
|
|
+ <td valign='top'>
|
|
|
+ <font color='#0000FF'>- </font><b>".get_lang('WorkUploads')."</b> [<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>] [<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00100'>".get_lang('ExportAsCSV')."</a>]
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+ echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('WorksDetails')."<br>";
|
|
|
+ $sql = "SELECT u.upload_date, w.title, w.author,w.url
|
|
|
+ FROM $TABLETRACK_UPLOADS u , $TABLECOURSE_WORK w
|
|
|
+ WHERE u.upload_work_id = w.id
|
|
|
+ AND u.upload_user_id = '".Database::escape_string($user_id)."'
|
|
|
+ AND u.upload_cours_id = '".Database::escape_string($course_id)."'
|
|
|
+ ORDER BY u.upload_date DESC";
|
|
|
+ echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
|
|
|
+ $results = getManyResultsXCol($sql,4);
|
|
|
+ echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
|
|
|
+ echo "<tr>
|
|
|
+ <td class='secLine' width='40%'>
|
|
|
+ ".get_lang('WorkTitle')."
|
|
|
+ </td>
|
|
|
+ <td class='secLine' width='30%'>
|
|
|
+ ".get_lang('WorkAuthors')."
|
|
|
+ </td>
|
|
|
+ <td class='secLine' width='30%'>
|
|
|
+ ".get_lang('Date')."
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+ if (is_array($results)) {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++) {
|
|
|
+ $pathToFile = api_get_path(WEB_COURSE_PATH).$_course['path']."/".$results[$j][3];
|
|
|
+ $timestamp = strtotime($results[$j][0]);
|
|
|
+ $beautifulDate = format_locale_date($dateTimeFormatLong,$timestamp);
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td class='content'>"
|
|
|
+ ."<a href ='".$pathToFile."'>".$results[$j][1]."</a>"
|
|
|
+ ."</td>";
|
|
|
+ echo "<td class='content'>".$results[$j][2]."</td>";
|
|
|
+ echo "<td class='content'>".$beautifulDate."</td>";
|
|
|
+ echo"</tr>";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td colspan='3'><center>".get_lang('NoResult')."</center></td>";
|
|
|
+ echo"</tr>";
|
|
|
+ }
|
|
|
+ echo "</table>";
|
|
|
+ echo "</td></tr>";
|
|
|
+ } else {
|
|
|
+ $new_view = substr_replace($view,'1',2,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ +<font color='#0000FF'> </font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('WorkUploads')."</a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the links followed for a specific user in a specific course.
|
|
|
+ * @todo remove globals
|
|
|
+ */
|
|
|
+ function display_links_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ global $TABLETRACK_LINKS, $TABLECOURSE_LINKS;
|
|
|
+ if(substr($view,3,1) == '1') {
|
|
|
+ $new_view = substr_replace($view,'0',3,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ <font color='#0000FF'>- </font><b>".get_lang('LinksAccess')."</b> [<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>] [<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00010'>".get_lang('ExportAsCSV')."</a>]
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ ";
|
|
|
+ echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('LinksDetails')."<br>";
|
|
|
+ $sql = "SELECT cl.title, cl.url
|
|
|
+ FROM $TABLETRACK_LINKS AS sl, $TABLECOURSE_LINKS AS cl
|
|
|
+ WHERE sl.links_link_id = cl.id
|
|
|
+ AND sl.links_cours_id = '".Database::escape_string($course_id)."'
|
|
|
+ AND sl.links_user_id = '".Database::escape_string($user_id)."'
|
|
|
+ GROUP BY cl.title, cl.url";
|
|
|
+ echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
|
|
|
+ $results = getManyResults2Col($sql);
|
|
|
+ echo "<table cellpadding='2' cellspacing='1' border='0' align=center>";
|
|
|
+ echo "<tr>
|
|
|
+ <td class='secLine'>
|
|
|
+ ".get_lang('LinksTitleLinkColumn')."
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+ if (is_array($results)) {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++) {
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td class='content'><a href='".$results[$j][1]."'>".$results[$j][0]."</a></td>";
|
|
|
+ echo"</tr>";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td ><center>".get_lang('NoResult')."</center></td>";
|
|
|
+ echo"</tr>";
|
|
|
+ }
|
|
|
+ echo "</table>";
|
|
|
+ echo "</td></tr>";
|
|
|
+ } else {
|
|
|
+ $new_view = substr_replace($view,'1',3,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ +<font color='#0000FF'> </font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('LinksAccess')."</a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the documents downloaded for a specific user in a specific course.
|
|
|
+ */
|
|
|
+ function display_document_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ $downloads_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
|
|
|
+ if(substr($view,4,1) == '1')
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'0',4,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ <font color='#0000FF'>- </font><b>".get_lang('DocumentsAccess')."</b> [<a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."'>".get_lang('Close')."</a>] [<a href='userLogCSV.php?".api_get_cidreq()."&uInfo=".Security::remove_XSS($_GET['uInfo'])."&view=00001'>".get_lang('ExportAsCSV')."</a>]
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ ";
|
|
|
+ echo "<tr><td style='padding-left : 40px;' valign='top'>".get_lang('DocumentsDetails')."<br>";
|
|
|
+
|
|
|
+ $sql = "SELECT down_doc_path
|
|
|
+ FROM $downloads_table
|
|
|
+ WHERE down_cours_id = '".Database::escape_string($course_id)."'
|
|
|
+ AND down_user_id = '".Database::escape_string($user_id)."'
|
|
|
+ GROUP BY down_doc_path";
|
|
|
+
|
|
|
+ echo "<tr><td style='padding-left : 40px;padding-right : 40px;'>";
|
|
|
+ $results = getManyResults1Col($sql);
|
|
|
+ echo "<table cellpadding='2' cellspacing='1' border='0' align='center'>";
|
|
|
+ echo "<tr>
|
|
|
+ <td class='secLine'>
|
|
|
+ ".get_lang('DocumentsTitleDocumentColumn')."
|
|
|
+ </td>
|
|
|
+ </tr>";
|
|
|
+ if (is_array($results)) {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++) {
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td class='content'>".$results[$j]."</td>";
|
|
|
+ echo"</tr>";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ echo "<tr>";
|
|
|
+ echo "<td><center>".get_lang('NoResult')."</center></td>";
|
|
|
+ echo"</tr>";
|
|
|
+ }
|
|
|
+ echo "</table>";
|
|
|
+ echo "</td></tr>";
|
|
|
+ } else {
|
|
|
+ $new_view = substr_replace($view,'1',4,1);
|
|
|
+ echo "
|
|
|
+ <tr>
|
|
|
+ <td valign='top'>
|
|
|
+ +<font color='#0000FF'> </font><a href='".api_get_self()."?uInfo=".Security::remove_XSS($user_id)."&view=".Security::remove_XSS($new_view)."' class='specialLink'>".get_lang('DocumentsAccess')."</a>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+class TrackingUserLogCSV {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the number of logins every month for a specific user in a specific course.
|
|
|
+ */
|
|
|
+ function display_login_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ $MonthsLong = $GLOBALS['MonthsLong'];
|
|
|
+ $track_access_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS);
|
|
|
+ $tempView = $view;
|
|
|
+ if(substr($view,0,1) == '1')
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'0',0,1);
|
|
|
+ $title[1]= get_lang('LoginsAndAccessTools').get_lang('LoginsDetails');
|
|
|
+
|
|
|
+ $sql = "SELECT UNIX_TIMESTAMP(`access_date`), count(`access_date`)
|
|
|
+ FROM $track_access_table
|
|
|
+ WHERE `access_user_id` = '$user_id'
|
|
|
+ AND `access_cours_code` = '".$course_id."'
|
|
|
+ GROUP BY YEAR(`access_date`),MONTH(`access_date`)
|
|
|
+ ORDER BY YEAR(`access_date`),MONTH(`access_date`) ASC";
|
|
|
+
|
|
|
+ //$results = getManyResults2Col($sql);
|
|
|
+ $results = getManyResults3Col($sql);
|
|
|
+
|
|
|
+ $title_line= get_lang('LoginsTitleMonthColumn').';'.get_lang('LoginsTitleCountColumn')."\n";
|
|
|
+ $line='';
|
|
|
+ $total = 0;
|
|
|
+ if (is_array($results))
|
|
|
+ {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++)
|
|
|
+ {
|
|
|
+ $line .= $results[$j][0].';'.$results[$j][1]."\n";
|
|
|
+ $total = $total + $results[$j][1];
|
|
|
+ }
|
|
|
+ $line .= get_lang('Total').";".$total."\n";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $line= get_lang('NoResult')."</center></td>";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'1',0,1);
|
|
|
+ }
|
|
|
+ return array($title_line, $line);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the exercise results for a specific user in a specific course.
|
|
|
+ * @todo remove globals
|
|
|
+ */
|
|
|
+ function display_exercise_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ global $TABLECOURSE_EXERCICES, $TABLETRACK_EXERCICES, $TABLETRACK_HOTPOTATOES;
|
|
|
+ if(substr($view,1,1) == '1')
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'0',1,1);
|
|
|
+
|
|
|
+ $title[1]= get_lang('ExercicesDetails');
|
|
|
+ $line='';
|
|
|
+
|
|
|
+ $sql = "SELECT `ce`.`title`, `te`.`exe_result` , `te`.`exe_weighting`, UNIX_TIMESTAMP(`te`.`exe_date`)
|
|
|
+ FROM $TABLECOURSE_EXERCICES AS ce , `$TABLETRACK_EXERCICES` AS `te`
|
|
|
+ WHERE `te`.`exe_cours_id` = '$course_id'
|
|
|
+ AND `te`.`exe_user_id` = '$user_id'
|
|
|
+ AND `te`.`exe_exo_id` = `ce`.`id`
|
|
|
+ ORDER BY `ce`.`title` ASC, `te`.`exe_date` ASC";
|
|
|
+
|
|
|
+ $hpsql = "SELECT `te`.`exe_name`, `te`.`exe_result` , `te`.`exe_weighting`, UNIX_TIMESTAMP(`te`.`exe_date`)
|
|
|
+ FROM `$TABLETRACK_HOTPOTATOES` AS te
|
|
|
+ WHERE `te`.`exe_user_id` = '$user_id' AND `te`.`exe_cours_id` = '$course_id'
|
|
|
+ ORDER BY `te`.`exe_cours_id` ASC, `te`.`exe_date` ASC";
|
|
|
+
|
|
|
+ $hpresults = getManyResultsXCol($hpsql, 4);
|
|
|
+
|
|
|
+ $NoTestRes = 0;
|
|
|
+ $NoHPTestRes = 0;
|
|
|
+
|
|
|
+ $results = getManyResultsXCol($sql, 4);
|
|
|
+ $title_line=get_lang('ExercicesTitleExerciceColumn').";".get_lang('Date').';'.get_lang('ExercicesTitleScoreColumn')."\n";
|
|
|
+
|
|
|
+ if (is_array($results))
|
|
|
+ {
|
|
|
+ for($i = 0; $i < sizeof($results); $i++)
|
|
|
+ {
|
|
|
+ $display_date = format_locale_date(get_lang('dateTimeFormatLong'), $results[$i][3]);
|
|
|
+ $line .= $results[$i][0].";".$display_date.";".$results[$i][1]." / ".$results[$i][2]."\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else // istvan begin
|
|
|
+ {
|
|
|
+ $NoTestRes = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // The Result of Tests
|
|
|
+ if(is_array($hpresults))
|
|
|
+ {
|
|
|
+ for($i = 0; $i < sizeof($hpresults); $i++)
|
|
|
+ {
|
|
|
+ $title = GetQuizName($hpresults[$i][0],'');
|
|
|
+
|
|
|
+ if ($title == '')
|
|
|
+ $title = basename($hpresults[$i][0]);
|
|
|
+
|
|
|
+ $display_date = format_locale_date(get_lang('dateTimeFormatLong'), $hpresults[$i][3]);
|
|
|
+ $line .= $title.';'.$display_date.';'.$hpresults[$i][1].'/'.$hpresults[$i][2]."\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $NoHPTestRes = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($NoTestRes == 1 && $NoHPTestRes == 1)
|
|
|
+ {
|
|
|
+ $line=get_lang('NoResult');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'1',1,1);
|
|
|
+
|
|
|
+ }
|
|
|
+ return array($title_line, $line);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the student publications for a specific user in a specific course.
|
|
|
+ * @todo remove globals
|
|
|
+ */
|
|
|
+ function display_student_publications_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ global $TABLETRACK_UPLOADS, $TABLECOURSE_WORK, $dateTimeFormatLong;
|
|
|
+ if(substr($view,2,1) == '1')
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'0',2,1);
|
|
|
+ $sql = "SELECT `u`.`upload_date`, `w`.`title`, `w`.`author`,`w`.`url`
|
|
|
+ FROM `$TABLETRACK_UPLOADS` `u` , $TABLECOURSE_WORK `w`
|
|
|
+ WHERE `u`.`upload_work_id` = `w`.`id`
|
|
|
+ AND `u`.`upload_user_id` = '$user_id'
|
|
|
+ AND `u`.`upload_cours_id` = '$course_id'
|
|
|
+ ORDER BY `u`.`upload_date` DESC";
|
|
|
+ $results = getManyResultsXCol($sql,4);
|
|
|
+
|
|
|
+ $title[1]=get_lang('WorksDetails');
|
|
|
+ $line='';
|
|
|
+ $title_line=get_lang('WorkTitle').";".get_lang('WorkAuthors').";".get_lang('Date')."\n";
|
|
|
+
|
|
|
+ if (is_array($results))
|
|
|
+ {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++)
|
|
|
+ {
|
|
|
+ $pathToFile = api_get_path(WEB_COURSE_PATH).$_course['path']."/".$results[$j][3];
|
|
|
+ $timestamp = strtotime($results[$j][0]);
|
|
|
+ $beautifulDate = format_locale_date($dateTimeFormatLong,$timestamp);
|
|
|
+ $line .= $results[$j][1].";".$results[$j][2].";".$beautifulDate."\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $line= get_lang('NoResult');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'1',2,1);
|
|
|
+ }
|
|
|
+ return array($title_line, $line);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the links followed for a specific user in a specific course.
|
|
|
+ * @todo remove globals
|
|
|
+ */
|
|
|
+ function display_links_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ global $TABLETRACK_LINKS, $TABLECOURSE_LINKS;
|
|
|
+ if(substr($view,3,1) == '1')
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'0',3,1);
|
|
|
+ $title[1]=get_lang('LinksDetails');
|
|
|
+ $sql = "SELECT `cl`.`title`, `cl`.`url`
|
|
|
+ FROM `$TABLETRACK_LINKS` AS sl, $TABLECOURSE_LINKS AS cl
|
|
|
+ WHERE `sl`.`links_link_id` = `cl`.`id`
|
|
|
+ AND `sl`.`links_cours_id` = '$course_id'
|
|
|
+ AND `sl`.`links_user_id` = '$user_id'
|
|
|
+ GROUP BY `cl`.`title`, `cl`.`url`";
|
|
|
+ $results = getManyResults2Col($sql);
|
|
|
+ $title_line= get_lang('LinksTitleLinkColumn')."\n";
|
|
|
+ if (is_array($results))
|
|
|
+ {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++)
|
|
|
+ {
|
|
|
+ $line .= $results[$j][0]."\n";
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $line=get_lang('NoResult');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'1',3,1);
|
|
|
+ }
|
|
|
+ return array($title_line, $line);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Displays the documents downloaded for a specific user in a specific course.
|
|
|
+ */
|
|
|
+ function display_document_tracking_info($view, $user_id, $course_id)
|
|
|
+ {
|
|
|
+ $downloads_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS);
|
|
|
+ if(substr($view,4,1) == '1')
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'0',4,1);
|
|
|
+ $title[1]= get_lang('DocumentsDetails');
|
|
|
+
|
|
|
+ $sql = "SELECT `down_doc_path`
|
|
|
+ FROM $downloads_table
|
|
|
+ WHERE `down_cours_id` = '$course_id'
|
|
|
+ AND `down_user_id` = '$user_id'
|
|
|
+ GROUP BY `down_doc_path`";
|
|
|
+
|
|
|
+ $results = getManyResults1Col($sql);
|
|
|
+ $title_line = get_lang('DocumentsTitleDocumentColumn')."\n";
|
|
|
+ if (is_array($results))
|
|
|
+ {
|
|
|
+ for($j = 0 ; $j < count($results) ; $j++)
|
|
|
+ {
|
|
|
+ $line .= $results[$j]."\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $line=get_lang('NoResult');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $new_view = substr_replace($view,'1',4,1);
|
|
|
+ }
|
|
|
+ return array($title_line, $line);
|
|
|
+ }
|
|
|
+}
|
|
|
?>
|