diff --git a/main/admin/user_information.php b/main/admin/user_information.php
index 7f5f859755..89ffb3a1df 100755
--- a/main/admin/user_information.php
+++ b/main/admin/user_information.php
@@ -328,7 +328,7 @@ if (count($sessions) > 0) {
$csvContent[] = array_map('strip_tags', $row);
$data[] = $row;
- $result = TrackingUserLogCSV::getToolInformation(
+ $result = Tracking::getToolInformation(
$userId,
$courseInfo,
$id_session
@@ -435,7 +435,7 @@ if (Database::num_rows($res) > 0) {
$csvContent[] = array_map('strip_tags', $row);
$data[] = $row;
- $result = TrackingUserLogCSV::getToolInformation(
+ $result = Tracking::getToolInformation(
$userId,
$courseInfo,
0
diff --git a/main/inc/lib/exercise.lib.php b/main/inc/lib/exercise.lib.php
index 2946fd0fa5..33c034bb5d 100644
--- a/main/inc/lib/exercise.lib.php
+++ b/main/inc/lib/exercise.lib.php
@@ -2141,7 +2141,7 @@ HOTSPOT;
//Admin can always delete the attempt
if (($locked == false || api_is_platform_admin()) && !api_is_student_boss()) {
- $ip = TrackingUserLog::get_ip_from_user_event(
+ $ip = Tracking::get_ip_from_user_event(
$results[$i]['exe_user_id'],
api_get_utc_datetime(),
false
diff --git a/main/inc/lib/myspace.lib.php b/main/inc/lib/myspace.lib.php
index 815f721d62..87f49d8c55 100644
--- a/main/inc/lib/myspace.lib.php
+++ b/main/inc/lib/myspace.lib.php
@@ -2689,8 +2689,12 @@ class MySpace
* @param $orderDirection
* @return array
*/
- public static function getUserDataAccessTrackingOverview($from, $numberItems, $column, $orderDirection)
- {
+ public static function getUserDataAccessTrackingOverview(
+ $from,
+ $numberItems,
+ $column,
+ $orderDirection
+ ) {
$user = Database::get_main_table(TABLE_MAIN_USER);
$course = Database::get_main_table(TABLE_MAIN_COURSE);
$track_e_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
@@ -2733,7 +2737,6 @@ class MySpace
$sql .= " LIMIT $from,$numberItems";
$result = Database::query($sql);
- //$clicks = Tracking::get_total_clicks_by_session();
$data = array();
while ($user = Database::fetch_assoc($result)) {
$data[] = $user;
diff --git a/main/inc/lib/statistics.lib.php b/main/inc/lib/statistics.lib.php
index ad890bf8b2..db41fe86dc 100644
--- a/main/inc/lib/statistics.lib.php
+++ b/main/inc/lib/statistics.lib.php
@@ -333,7 +333,11 @@ class Statistics
array('title' => get_lang('UserInfo'))
);
- $row[6] = TrackingUserLog::get_ip_from_user_event($row[6], $row[7], true);
+ $row[6] = Tracking::get_ip_from_user_event(
+ $row[6],
+ $row[7],
+ true
+ );
if (empty($row[6])) {
$row[6] = get_lang('Unknown');
}
diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php
index c94175d0a8..a2ba0f7148 100755
--- a/main/inc/lib/tracking.lib.php
+++ b/main/inc/lib/tracking.lib.php
@@ -1595,8 +1595,11 @@ class Tracking
*
* @return int Time in seconds
*/
- public static function get_time_spent_on_the_course($user_id, $courseId, $session_id = 0)
- {
+ public static function get_time_spent_on_the_course(
+ $user_id,
+ $courseId,
+ $session_id = 0
+ ) {
$courseId = intval($courseId);
$session_id = intval($session_id);
$tbl_track_course = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
@@ -2638,7 +2641,9 @@ class Tracking
if (empty($session_id)) {
$sql = "SELECT DISTINCT(id), use_max_score
FROM $lp_table
- WHERE c_id = $course_id AND (session_id = 0 OR session_id IS NULL ) $condition_lp ";
+ WHERE
+ c_id = $course_id AND
+ (session_id = 0 OR session_id IS NULL) $condition_lp ";
} else {
$sql = "SELECT DISTINCT(id), use_max_score
FROM $lp_table
@@ -2726,16 +2731,20 @@ class Tracking
}
// Getting the most recent attempt
- $sql = "SELECT lp_iv.id as lp_item_view_id,
- lp_iv.score as score,
- lp_i.max_score,
- lp_iv.max_score as max_score_item_view,
- lp_i.path,
- lp_i.item_type,
- lp_i.id as iid
+ $sql = "SELECT
+ lp_iv.id as lp_item_view_id,
+ lp_iv.score as score,
+ lp_i.max_score,
+ lp_iv.max_score as max_score_item_view,
+ lp_i.path,
+ lp_i.item_type,
+ lp_i.id as iid
FROM $lp_item_view_table as lp_iv
INNER JOIN $lp_item_table as lp_i
- ON (lp_i.id = lp_iv.lp_item_id AND lp_iv.c_id = lp_i.c_id)
+ ON (
+ lp_i.id = lp_iv.lp_item_id AND
+ lp_iv.c_id = lp_i.c_id
+ )
WHERE
lp_iv.c_id = $course_id AND
lp_i.c_id = $course_id AND
@@ -2771,16 +2780,12 @@ class Tracking
lp_view_id = $lp_view_id AND
(lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."')
";
- if ($debug) var_dump($sql);
$res_max_score = Database::query($sql);
-
while ($row_max_score = Database::fetch_array($res_max_score, 'ASSOC')) {
$list[] = $row_max_score;
}
}
- if ($debug) var_dump($list);
-
// Go through each scorable element of this view
$score_of_scorm_calculate = 0;
foreach ($list as $row_max_score) {
@@ -2789,7 +2794,6 @@ class Tracking
// Came from the lp_item_view
$max_score_item_view = $row_max_score['max_score_item_view'];
$score = $row_max_score['score'];
-
if ($debug) echo '
Item Type: '.$row_max_score['item_type'].'
';
if ($row_max_score['item_type'] == 'sco') {
@@ -2830,12 +2834,12 @@ class Tracking
$sql = "SELECT exe_id, exe_result
FROM $tbl_stats_exercices
WHERE
- exe_exo_id = '$item_path' AND
- exe_user_id = $user_id AND
- orig_lp_item_id = $item_id AND
+ exe_exo_id = '$item_path' AND
+ exe_user_id = $user_id AND
+ orig_lp_item_id = $item_id AND
orig_lp_item_view_id = $lp_item_view_id AND
- c_id = $course_id AND
- session_id = $session_id AND
+ c_id = $course_id AND
+ session_id = $session_id AND
status = ''
ORDER BY $order
LIMIT 1";
@@ -3170,14 +3174,12 @@ class Tracking
public static function get_student_followed_by_coach($coach_id)
{
$coach_id = intval($coach_id);
-
$tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$students = [];
-
// At first, courses where $coach_id is coach of the course //
$sql = 'SELECT session_id, c_id
FROM ' . $tbl_session_course_user.'
@@ -3407,11 +3409,11 @@ class Tracking
// Then, courses where $coach_id is coach of the session
$sql = 'SELECT DISTINCT course.code
- FROM ' . $tbl_session_course.' as session_course
- INNER JOIN ' . $tbl_session.' as session
+ FROM '.$tbl_session_course.' as session_course
+ INNER JOIN '.$tbl_session.' as session
ON session.id = session_course.session_id
- AND session.id_coach = ' . $coach_id.'
- INNER JOIN ' . $tbl_course.' as course
+ AND session.id_coach = '.$coach_id.'
+ INNER JOIN '.$tbl_course.' as course
ON course.id = session_course.c_id';
if (api_is_multiple_url_enabled()) {
@@ -3419,13 +3421,13 @@ class Tracking
$access_url_id = api_get_current_access_url_id();
if ($access_url_id != -1) {
$sql = 'SELECT DISTINCT c.code
- FROM ' . $tbl_session_course.' as session_course
+ FROM '.$tbl_session_course.' as session_course
INNER JOIN '.$tbl_course.' c
ON (c.id = session_course.c_id)
- INNER JOIN ' . $tbl_session.' as session
+ INNER JOIN '.$tbl_session.' as session
ON session.id = session_course.session_id
- AND session.id_coach = ' . $coach_id.'
- INNER JOIN ' . $tbl_course.' as course
+ AND session.id_coach = '.$coach_id.'
+ INNER JOIN '.$tbl_course.' as course
ON course.id = session_course.c_id
INNER JOIN '.$tbl_course_rel_access_url.' course_rel_url
ON (course_rel_url.c_id = c.id)';
@@ -3612,8 +3614,11 @@ class Tracking
* return count of assignments including sessions, 0 = session is not filtered
* @return int Number of documents
*/
- public static function count_student_uploaded_documents($student_id, $course_code, $session_id = null)
- {
+ public static function count_student_uploaded_documents(
+ $student_id,
+ $course_code,
+ $session_id = null
+ ) {
// get the information of the course
$a_course = api_get_course_info($course_code);
if (!empty($a_course)) {
@@ -3664,8 +3669,11 @@ class Tracking
* if param $session_id is null(default) return count of assignments
* including sessions, 0 = session is not filtered
*/
- public static function count_student_assignments($student_id, $course_code = null, $session_id = null)
- {
+ public static function count_student_assignments(
+ $student_id,
+ $course_code = null,
+ $session_id = null
+ ) {
if (empty($student_id)) {
return 0;
}
@@ -4242,8 +4250,6 @@ class Tracking
return $a_students;
}
-
-
/**
* get count clicks about tools most used by course
* @param int $courseId
@@ -4284,132 +4290,6 @@ class Tracking
return $data;
}
- /**
- * Get total clicks
- * THIS FUNCTION IS NOT BEEN USED, IT WAS MEANT TO BE USE WITH track_e_course_access.date_from and track_e_course_access.date_to,
- * BUT NO ROW MATCH THE CONDITION, IT SHOULD BE FINE TO USE IT WHEN YOU USE USER DEFINED DATES AND NO CHAMILO DATES
- * @param int User Id
- * @param int Course Id
- * @param int Session Id (optional), if param $session_id is 0 (default) it'll return results including sessions, 0 = session is not filtered
- * @param string Date from
- * @param string Date to
- * @return array Data
- * @author César Perales cesar.perales@beeznest.com 2014-01-16
- */
- public static function get_total_clicks($userId, $courseId, $sessionId = 0, $date_from = '', $date_to = '')
- {
- $course = api_get_course_info_by_id($courseId);
- $tables = array(
- TABLE_STATISTIC_TRACK_E_LASTACCESS => array(
- 'course' => 'c_id',
- 'session' => 'access_session_id',
- 'user' => 'access_user_id',
- 'start_date'=> 'access_date',
- ),
- TABLE_STATISTIC_TRACK_E_ACCESS => array(
- 'course' => 'c_id',
- 'session' => 'access_session_id',
- 'user' => 'access_user_id',
- 'start_date'=> 'access_date',
- ),
- #TABLE_STATISTIC_TRACK_E_LOGIN, array(,, 'login_date', 'logout_date');
- TABLE_STATISTIC_TRACK_E_DOWNLOADS => array(
- 'course' => 'c_id',
- 'session' => 'down_session_id',
- 'user' => 'down_user_id',
- 'start_date'=> 'down_date',
- ),
- TABLE_STATISTIC_TRACK_E_LINKS => array(
- 'course' => 'c_id',
- 'session' => 'links_session_id',
- 'user' => 'links_user_id',
- 'start_date'=> 'links_date',
- ),
- TABLE_STATISTIC_TRACK_E_ONLINE => array(
- 'course' => 'c_id',
- 'session' => 'session_id',
- 'user' => 'login_user_id',
- 'start_date'=> 'login_date',
- ),
- #TABLE_STATISTIC_TRACK_E_HOTPOTATOES,
- /*TABLE_STATISTIC_TRACK_E_COURSE_ACCESS => array(
- 'course' => 'c_id',
- 'session' => 'session_id',
- 'user' => 'user_id',
- 'start_date'=> 'login_course_date',
- 'end_date' => 'logout_course_date',
- ),*/
- TABLE_STATISTIC_TRACK_E_EXERCISES => array(
- 'course' => 'c_id',
- 'session' => 'session_id',
- 'user' => 'exe_user_id',
- 'start_date'=> 'exe_date',
- ),
- TABLE_STATISTIC_TRACK_E_ATTEMPT => array(
- 'course' => 'c_id',
- 'session' => 'session_id',
- 'user' => 'user_id',
- 'start_date'=> 'tms',
- ),
- #TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING,
- #TABLE_STATISTIC_TRACK_E_DEFAULT,
- TABLE_STATISTIC_TRACK_E_UPLOADS => array(
- 'course' => 'c_id',
- 'session' => 'upload_session_id',
- 'user' => 'upload_user_id',
- 'start_date'=> 'upload_date',
- ),
- );
-
- foreach ($tables as $tableName => $fields) {
- //If session is defined, add it to query
- $where = '';
- if (isset($sessionId) && !empty($sessionId)) {
- $sessionField = $fields['session'];
- $where .= " AND $sessionField = $sessionId";
- }
-
- //filter by date
- if (!empty($date_from) && !empty($date_to)) {
- $fieldStartDate = $fields['start_date'];
- if (!isset($fields['end_date'])) {
- $where .= sprintf(" AND ($fieldStartDate BETWEEN '%s' AND '%s' )", $date_from, $date_to);
- } else {
- $fieldEndDate = $fields['end_date'];
- $where .= sprintf(" AND fieldStartDate >= '%s'
- AND $fieldEndDate <= '%s'", $date_from, $date_to);
- }
- }
-
- //query
- $sql = "SELECT %s as user, count(*) as total
- FROM %s
- WHERE %s = '%s'
- AND %s = %s
- $where
- GROUP BY %s";
- $sql = sprintf($sql,
- $fields['user'], //user field
- $tableName, //FROM
- $fields['course'], //course condition
- $course['real_id'], //course condition
- $fields['user'], //user condition
- $userId, //user condition
- $fields['user'] //GROUP BY
- );
- $rs = Database::query($sql);
-
- //iterate query
- if (Database::num_rows($rs) > 0) {
- while ($row = Database::fetch_array($rs)) {
- $data[$row['user']] = (isset($data[$row['user']])) ? $data[$row['user']] + $row[total] : $row['total'];
- }
- }
- }
-
- return $data;
- }
-
/**
* get documents most downloaded by course
* @param string Course code
@@ -4419,9 +4299,11 @@ class Tracking
* @param int Limit (optional, default = 0, 0 = without limit)
* @return array documents downloaded
*/
- public static function get_documents_most_downloaded_by_course($course_code, $session_id = 0, $limit = 0)
- {
- //protect data
+ public static function get_documents_most_downloaded_by_course(
+ $course_code,
+ $session_id = 0,
+ $limit = 0
+ ) {
$courseId = api_get_course_int_id($course_code);
$data = array();
@@ -4648,7 +4530,6 @@ class Tracking
}
$html = '';
-
// Course list
if ($show_courses) {
if (!empty($courses)) {
@@ -4751,8 +4632,7 @@ class Tracking
// Session list
if (!empty($course_in_session)) {
$main_session_graph = '';
- //Load graphics only when calling to an specific session
- $session_graph = array();
+ // Load graphics only when calling to an specific session
$all_exercise_graph_name_list = array();
$my_results = array();
$all_exercise_graph_list = array();
@@ -6514,6 +6394,139 @@ class Tracking
return $html;
}
+
+ /**
+ * Gets the IP of a given user, using the last login before the given date
+ * @param int User ID
+ * @param string Datetime
+ * @param bool Whether to return the IP as a link or just as an IP
+ * @param string If defined and return_as_link if true, will be used as the text to be shown as the link
+ * @return string IP address (or false on error)
+ * @assert (0,0) === false
+ */
+ public static function get_ip_from_user_event(
+ $user_id,
+ $event_date,
+ $return_as_link = false,
+ $body_replace = null
+ ) {
+ if (empty($user_id) || empty($event_date)) {
+ return false;
+ }
+ $user_id = intval($user_id);
+ $event_date = Database::escape_string($event_date);
+ $table_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
+ $sql_ip = "SELECT login_date, user_ip
+ FROM $table_login
+ WHERE login_user_id = $user_id AND login_date < '$event_date'
+ ORDER BY login_date DESC LIMIT 1";
+ $ip = '';
+ $res_ip = Database::query($sql_ip);
+ if ($res_ip !== false && Database::num_rows($res_ip) > 0) {
+ $row_ip = Database::fetch_row($res_ip);
+ if ($return_as_link) {
+ $ip = Display::url(
+ (empty($body_replace) ? $row_ip[1] : $body_replace), 'http://www.whatsmyip.org/ip-geo-location/?ip='.$row_ip[1],
+ array('title' => get_lang('TraceIP'), 'target' => '_blank')
+ );
+ } else {
+ $ip = $row_ip[1];
+ }
+ }
+
+ return $ip;
+ }
+
+ /**
+ * @param int $userId
+ * @param array $courseInfo
+ * @param int $sessionId
+ * @return array
+ */
+ public static function getToolInformation(
+ $userId,
+ $courseInfo,
+ $sessionId = 0
+ ) {
+ $csvContent = array();
+ $courseToolInformation = '';
+ $headerTool = array(
+ array(get_lang('Title')),
+ array(get_lang('CreatedAt')),
+ array(get_lang('UpdatedAt')),
+ );
+
+ $headerListForCSV = array();
+ foreach ($headerTool as $item) {
+ $headerListForCSV[] = $item[0];
+ }
+
+ $courseForumInformationArray = getForumCreatedByUser(
+ $userId,
+ $courseInfo['real_id'],
+ $sessionId
+ );
+
+ if (!empty($courseForumInformationArray)) {
+ $csvContent[] = array();
+ $csvContent[] = [get_lang('Forums')];
+ $csvContent[] = $headerListForCSV;
+ foreach ($courseForumInformationArray as $row) {
+ $csvContent[] = $row;
+ }
+
+ $courseToolInformation .= Display::page_subheader2(
+ get_lang('Forums')
+ );
+ $courseToolInformation .= Display::return_sortable_table(
+ $headerTool,
+ $courseForumInformationArray
+ );
+ }
+
+ $courseWorkInformationArray = getWorkCreatedByUser(
+ $userId,
+ $courseInfo['real_id'],
+ $sessionId
+ );
+
+ if (!empty($courseWorkInformationArray)) {
+ $csvContent[] = null;
+ $csvContent[] = [get_lang('Works')];
+ $csvContent[] = $headerListForCSV;
+
+ foreach ($courseWorkInformationArray as $row) {
+ $csvContent[] = $row;
+ }
+ $csvContent[] = null;
+
+ $courseToolInformation .= Display::page_subheader2(
+ get_lang('Works')
+ );
+ $courseToolInformation .= Display::return_sortable_table(
+ $headerTool,
+ $courseWorkInformationArray
+ );
+ }
+
+ $courseToolInformationTotal = null;
+ if (!empty($courseToolInformation)) {
+ $sessionTitle = null;
+ if (!empty($sessionId)) {
+ $sessionTitle = ' ('.api_get_session_name($sessionId).')';
+ }
+
+ $courseToolInformationTotal .= Display::page_subheader(
+ $courseInfo['title'].$sessionTitle
+ );
+ $courseToolInformationTotal .= $courseToolInformation;
+ }
+
+ return array(
+ 'array' => $csvContent,
+ 'html' => $courseToolInformationTotal
+ );
+ }
}
/**
@@ -6808,7 +6821,11 @@ class TrackingCourseLog
);
$row[3] = $row['col3'];
- $ip = TrackingUserLog::get_ip_from_user_event($row['user_id'], $row['col5'], true);
+ $ip = Tracking::get_ip_from_user_event(
+ $row['user_id'],
+ $row['col5'],
+ true
+ );
if (empty($ip)) {
$ip = get_lang('Unknown');
}
@@ -6952,7 +6969,7 @@ class TrackingCourseLog
* @since Nov 2009
* @version 1.8.6.2
*/
- public static function get_addtional_profile_information_of_field_by_user($field_id, $users)
+ public static function getAdditionalProfileInformationOfFieldByUser($field_id, $users)
{
// Database table definition
$table_user = Database::get_main_table(TABLE_MAIN_USER);
@@ -7024,12 +7041,18 @@ class TrackingCourseLog
public function sort_users($a, $b)
{
- return strcmp(trim(api_strtolower($a[$_SESSION['tracking_column']])), trim(api_strtolower($b[$_SESSION['tracking_column']])));
+ return strcmp(
+ trim(api_strtolower($a[$_SESSION['tracking_column']])),
+ trim(api_strtolower($b[$_SESSION['tracking_column']]))
+ );
}
public function sort_users_desc($a, $b)
{
- return strcmp(trim(api_strtolower($b[$_SESSION['tracking_column']])), trim(api_strtolower($a[$_SESSION['tracking_column']])));
+ return strcmp(
+ trim(api_strtolower($b[$_SESSION['tracking_column']])),
+ trim(api_strtolower($a[$_SESSION['tracking_column']]))
+ );
}
/**
@@ -7051,8 +7074,13 @@ class TrackingCourseLog
* @param $includeInvitedUsers boolean Whether include the invited users
* @return array
*/
- public static function get_user_data($from, $number_of_items, $column, $direction, $includeInvitedUsers = false)
- {
+ public static function get_user_data(
+ $from,
+ $number_of_items,
+ $column,
+ $direction,
+ $includeInvitedUsers = false
+ ) {
global $user_ids, $course_code, $export_csv, $is_western_name_order, $csv_content, $session_id;
$course_code = Database::escape_string($course_code);
@@ -7088,7 +7116,6 @@ class TrackingCourseLog
}
$invitedUsersCondition = '';
-
if (!$includeInvitedUsers) {
$invitedUsersCondition = " AND user.status != ".INVITEE;
}
@@ -7308,383 +7335,3 @@ class TrackingCourseLog
return $users;
}
}
-
-/**
- * @package chamilo.tracking
- */
-class TrackingUserLog
-{
- /**
- * Gets the IP of a given user, using the last login before the given date
- * @param int User ID
- * @param string Datetime
- * @param bool Whether to return the IP as a link or just as an IP
- * @param string If defined and return_as_link if true, will be used as the text to be shown as the link
- * @return string IP address (or false on error)
- * @assert (0,0) === false
- */
- public static function get_ip_from_user_event(
- $user_id,
- $event_date,
- $return_as_link = false,
- $body_replace = null
- ) {
- if (empty($user_id) || empty($event_date)) {
- return false;
- }
- $user_id = intval($user_id);
- $event_date = Database::escape_string($event_date);
- $table_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
- $sql_ip = "SELECT login_date, user_ip
- FROM $table_login
- WHERE login_user_id = $user_id AND login_date < '$event_date'
- ORDER BY login_date DESC LIMIT 1";
- $ip = '';
- $res_ip = Database::query($sql_ip);
- if ($res_ip !== false && Database::num_rows($res_ip) > 0) {
- $row_ip = Database::fetch_row($res_ip);
- if ($return_as_link) {
- $ip = Display::url(
- (empty($body_replace) ? $row_ip[1] : $body_replace), 'http://www.whatsmyip.org/ip-geo-location/?ip='.$row_ip[1],
- array('title' => get_lang('TraceIP'), 'target' => '_blank')
- );
- } else {
- $ip = $row_ip[1];
- }
- }
-
- return $ip;
- }
-}
-
-/**
- * @package chamilo.tracking
- */
-class TrackingUserLogCSV
-{
- /**
- * Displays the number of logins every month for a specific user in a specific course.
- * @param $view
- * @param int $user_id
- * @param int $course_id
- * @param int $session_id
- * @return array
- */
- public function display_login_tracking_info($view, $user_id, $course_id, $session_id = 0)
- {
- $MonthsLong = $GLOBALS['MonthsLong'];
- $track_access_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ACCESS);
-
- // protected data
- $user_id = intval($user_id);
- $session_id = intval($session_id);
- $course_id = intval($course_id);
-
- $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 c_id = $course_id
- AND access_session_id = $session_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.
- * @param string $view
- * @param int $user_id User ID
- * @param string $courseCode Course code
- * @return array
- * @todo remove globals
- */
- public function display_exercise_tracking_info($view, $userId, $courseCode)
- {
- global $TABLECOURSE_EXERCICES, $TABLETRACK_EXERCICES, $TABLETRACK_HOTPOTATOES, $dateTimeFormatLong;
- $courseId = api_get_course_int_id($courseCode);
- $userId = intval($userId);
- 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.c_id = $courseId
- AND te.exe_user_id = $userId
- 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 = '$userId' AND te.c_id = $courseId
- ORDER BY te.c_id ASC, te.exe_date ASC";
-
- $hpresults = StatsUtils::getManyResultsXCol($hpsql, 4);
- $NoTestRes = 0;
- $NoHPTestRes = 0;
- $results = StatsUtils::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 = api_convert_and_format_date($results[$i][3], null, date_default_timezone_get());
- $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 = api_convert_and_format_date($hpresults[$i][3], null, date_default_timezone_get());
- $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
- */
- public function display_student_publications_tracking_info($view, $user_id, $course_id)
- {
- global $TABLETRACK_UPLOADS, $TABLECOURSE_WORK;
- $_course = api_get_course_info();
- $user_id = intval($user_id);
- $course_id = intval($course_id);
-
- if (substr($view, 2, 1) == '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.c_id = '$course_id'
- ORDER BY u.upload_date DESC";
- $results = StatsUtils::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];
- $beautifulDate = api_convert_and_format_date($results[$j][0], null, date_default_timezone_get());
- $line .= $results[$j][1].";".$results[$j][2].";".$beautifulDate."\n";
- }
-
- } else {
- $line = get_lang('NoResult');
- }
- }
-
- return array($title_line, $line);
- }
-
- /**
- * Displays the links followed for a specific user in a specific course.
- * @todo remove globals
- */
- public function display_links_tracking_info($view, $userId, $courseCode)
- {
- global $TABLETRACK_LINKS, $TABLECOURSE_LINKS;
- $courseId = api_get_course_int_id($courseCode);
- $userId = intval($userId);
- $line = null;
- 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.c_id = $courseId
- AND sl.links_user_id = $userId
- GROUP BY cl.title, cl.url";
- $results = StatsUtils::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.
- * @param string kind of view inside tracking info
- * @param int User id
- * @param string Course code
- * @param int Session id (optional, default = 0)
- * @return void
- */
- public function display_document_tracking_info($view, $user_id, $courseCode, $session_id = 0)
- {
- // protect data
- $user_id = intval($user_id);
- $courseId = api_get_course_int_id($courseCode);
- $session_id = intval($session_id);
-
- $downloads_table = Database::get_main_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 c_id = $courseId
- AND down_user_id = $user_id
- AND down_session_id = $session_id
- GROUP BY down_doc_path";
-
- $results = StatsUtils::getManyResults1Col($sql);
- $title_line = get_lang('DocumentsTitleDocumentColumn')."\n";
- $line = null;
- 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);
- }
-
- /**
- * @param int $userId
- * @param array $courseInfo
- * @param int $sessionId
- * @return array
- */
- public static function getToolInformation(
- $userId,
- $courseInfo,
- $sessionId = 0
- ) {
- $csvContent = array();
- $courseToolInformation = '';
- $headerTool = array(
- array(get_lang('Title')),
- array(get_lang('CreatedAt')),
- array(get_lang('UpdatedAt')),
- );
-
- $headerListForCSV = array();
- foreach ($headerTool as $item) {
- $headerListForCSV[] = $item[0];
- }
-
- $courseForumInformationArray = getForumCreatedByUser(
- $userId,
- $courseInfo['real_id'],
- $sessionId
- );
-
- if (!empty($courseForumInformationArray)) {
- $csvContent[] = array();
- $csvContent[] = [get_lang('Forums')];
- $csvContent[] = $headerListForCSV;
- foreach ($courseForumInformationArray as $row) {
- $csvContent[] = $row;
- }
-
- $courseToolInformation .= Display::page_subheader2(
- get_lang('Forums')
- );
- $courseToolInformation .= Display::return_sortable_table(
- $headerTool,
- $courseForumInformationArray
- );
- }
-
- $courseWorkInformationArray = getWorkCreatedByUser(
- $userId,
- $courseInfo['real_id'],
- $sessionId
- );
-
- if (!empty($courseWorkInformationArray)) {
- $csvContent[] = null;
- $csvContent[] = [get_lang('Works')];
- $csvContent[] = $headerListForCSV;
-
- foreach ($courseWorkInformationArray as $row) {
- $csvContent[] = $row;
- }
- $csvContent[] = null;
-
- $courseToolInformation .= Display::page_subheader2(
- get_lang('Works')
- );
- $courseToolInformation .= Display::return_sortable_table(
- $headerTool,
- $courseWorkInformationArray
- );
- }
-
- $courseToolInformationTotal = null;
- if (!empty($courseToolInformation)) {
- $sessionTitle = null;
- if (!empty($sessionId)) {
- $sessionTitle = ' ('.api_get_session_name($sessionId).')';
- }
-
- $courseToolInformationTotal .= Display::page_subheader(
- $courseInfo['title'].$sessionTitle
- );
- $courseToolInformationTotal .= $courseToolInformation;
- }
-
- return array(
- 'array' => $csvContent,
- 'html' => $courseToolInformationTotal
- );
- }
-}
diff --git a/main/mySpace/myStudents.php b/main/mySpace/myStudents.php
index 5914161e1f..dea419a1b9 100755
--- a/main/mySpace/myStudents.php
+++ b/main/mySpace/myStudents.php
@@ -469,7 +469,7 @@ $avg_student_progress = round($avg_student_progress, 2);
$time_spent_on_the_course = 0;
if (!empty($courseInfo)) {
$time_spent_on_the_course = api_time_to_hms(
- Tracking:: get_time_spent_on_the_course(
+ Tracking::get_time_spent_on_the_course(
$user_info['user_id'],
$courseInfo['real_id'],
$sessionId
@@ -478,12 +478,15 @@ if (!empty($courseInfo)) {
}
// get information about connections on the platform by student
-$first_connection_date = Tracking :: get_first_connection_date($user_info['user_id']);
+$first_connection_date = Tracking::get_first_connection_date($user_info['user_id']);
if ($first_connection_date == '') {
$first_connection_date = get_lang('NoConnexion');
}
-$last_connection_date = Tracking :: get_last_connection_date($user_info['user_id'], true);
+$last_connection_date = Tracking::get_last_connection_date(
+ $user_info['user_id'],
+ true
+);
if ($last_connection_date == '') {
$last_connection_date = get_lang('NoConnexion');
}
diff --git a/main/tracking/courseLog.php b/main/tracking/courseLog.php
index abf4bce232..8dfb2faf07 100755
--- a/main/tracking/courseLog.php
+++ b/main/tracking/courseLog.php
@@ -194,7 +194,7 @@ if (isset($_GET['additional_profile_field'])) {
foreach ($_GET['additional_profile_field'] as $fieldId) {
// Fetching only the user that are loaded NOT ALL user in the portal.
- $userProfileInfo[$fieldId] = TrackingCourseLog::get_addtional_profile_information_of_field_by_user(
+ $userProfileInfo[$fieldId] = TrackingCourseLog::getAdditionalProfileInformationOfFieldByUser(
$fieldId,
$user_array
);
diff --git a/main/tracking/userlogCSV.php b/main/tracking/userlogCSV.php
deleted file mode 100755
index de9f02888f..0000000000
--- a/main/tracking/userlogCSV.php
+++ /dev/null
@@ -1,338 +0,0 @@
-"../group/group.php", "name"=> get_lang('BredCrumpGroups'));
-$interbreadcrumb[]= array ("url"=>"../group/group_space.php?gidReq=$_gid", "name"=> get_lang('BredCrumpGroupSpace'));
-*/
-
-if ($uInfo) {
- $interbreadcrumb[] = array(
- "url" => "../user/userInfo.php?uInfo=$uInfo",
- "name" => get_lang('BredCrumpUsers')
- );
-}
-
-$nameTools = get_lang('ToolName');
-
-/* Constants and variables */
-
-$is_allowedToTrack = $is_courseAdmin;
-$is_course_member = CourseManager::is_user_subscribed_in_real_or_linked_course(
- $user_id,
- $courseId
-);
-
-// Database Table Definitions
-$TABLECOURSUSER = Database::get_main_table(TABLE_MAIN_COURSE_USER);
-$TABLEUSER = Database::get_main_table(TABLE_MAIN_USER);
-$tbl_session_course_user = Database::get_main_table(
- TABLE_MAIN_SESSION_COURSE_USER
-);
-$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
-
-$TABLECOURSE_GROUPSUSER = Database::get_course_table(TABLE_GROUP_USER);
-$now = api_get_utc_datetime();
-
-$sql = "SELECT 1
- FROM $tbl_session_course_user AS session_course_user
- INNER JOIN $tbl_session AS session
- ON session_course_user.session_id = session.id
- AND ((access_start_date <= '$now'
- AND access_end_date >= '$now')
- OR (access_start_date IS NULL AND access_end_date IS NULL))
- WHERE session_id='".api_get_session_id()."' AND c_id = $courseId";
-//echo $sql;
-$result = Database::query($sql);
-if (!Database::num_rows($result)) {
- $disabled = true;
-}
-
-
-$tbl_learnpath_main = Database::get_course_table(TABLE_LP_MAIN);
-$tbl_learnpath_item = Database::get_course_table(TABLE_LP_ITEM);
-$tbl_learnpath_view = Database::get_course_table(TABLE_LP_VIEW);
-$tbl_learnpath_item_view = Database::get_course_table(TABLE_LP_ITEM_VIEW);
-
-$documentPath = api_get_path(SYS_COURSE_PATH).$_course['path'].'/document';
-
-// The variables for the days and the months
-$DaysShort = api_get_week_days_short();
-$DaysLong = api_get_week_days_long();
-$MonthsLong = api_get_months_long();
-$MonthsShort = api_get_months_short();
-
-//$is_allowedToTrack = $is_groupTutor; // allowed to track only user of one group
-//$is_allowedToTrackEverybodyInCourse = $is_allowed[EDIT_RIGHT]; // allowed to track all students in course
-//YW hack security to fix RolesRights bug
-$is_allowedToTrack = true; // allowed to track only user of one group
-$is_allowedToTrackEverybodyInCourse = $is_allowedToTrack; // allowed to track all students in course
-
-/* MAIN SECTION */
-
-$title[0] = '';
-$title[1] = '';
-$line = '';
-$title_line = '';
-
-// check if uid is tutor of this group
-if (($is_allowedToTrack || $is_allowedToTrackEverybodyInCourse)) {
- if (!$uInfo && !isset($uInfo)) {
- /*
- * Display list of user of this group
- */
-
- if ($is_allowedToTrackEverybodyInCourse) {
- // if user can track everybody : list user of course
- $sql = "SELECT count(user_id)
- FROM $TABLECOURSUSER
- WHERE c_id = '$courseId' AND relation_type<>".COURSE_RELATION_TYPE_RRHH."";
-
- } else {
- // if user can only track one group : list users of this group
- $sql = "SELECT count(user)
- FROM $TABLECOURSE_GROUPSUSER
- WHERE group_id = '$_gid'";
- }
- $userGroupNb = StatsUtils::getOneResult($sql);
- $step = 25; // number of student per page
- if ($userGroupNb > $step) {
- if (!isset($offset)) {
- $offset = 0;
- }
-
- $next = $offset + $step;
- $previous = $offset - $step;
-
- $navLink = "";
-
- if ($previous >= 0) {
- }
- if ($next < $userGroupNb) {
- }
-
- } else {
- $offset = 0;
- }
-
- echo $navLink;
-
- if (!settype($offset, 'integer') || !settype($step, 'integer')) {
- die('Offset or step variables are not integers.');
- } //sanity check of integer vars
- if ($is_allowedToTrackEverybodyInCourse) {
- // list of users in this course
- $sql = "SELECT u.user_id, u.firstname,u.lastname
- FROM $TABLECOURSUSER cu , $TABLEUSER u
- WHERE cu.user_id = u.user_id AND cu.relation_type<>".COURSE_RELATION_TYPE_RRHH."
- AND cu.c_id = '$courseId'
- LIMIT $offset,$step";
- } else {
- // list of users of this group
- $sql = "SELECT u.user_id, u.firstname,u.lastname
- FROM $TABLECOURSE_GROUPSUSER gu , $TABLEUSER u
- WHERE gu.user_id = u.user_id
- AND gu.group_id = '$_gid'
- LIMIT $offset,$step";
- }
- $list_users = getManyResults3Col($sql);
- for ($i = 0; $i < sizeof($list_users); $i++) {
- // just sum $i up
- }
-
- } else { // if uInfo is set
- /*
- * Informations about student uInfo
- */
- // these checks exists for security reasons, neither a prof nor a tutor can see statistics of a user from
- // another course, or group
- if ($is_allowedToTrackEverybodyInCourse) {
- // check if user is in this course
- $tracking_is_accepted = $is_course_member;
- $tracked_user_info = api_get_user_info($uInfo);
- $title[0] = $tracked_user_info[1].'_'.$tracked_user_info[2];
- } else {
- // check if user is in the group of this tutor
- $sql = "SELECT u.firstname,u.lastname, u.email
- FROM $TABLECOURSE_GROUPSUSER gu , $TABLEUSER u
- WHERE gu.user_id = u.user_id
- AND gu.group_id = '$_gid'
- AND u.user_id = '$uInfo'";
- $query = Database::query($sql);
- $tracked_user_info = @Database::fetch_assoc($query);
- if (is_array($tracked_user_info)) {
- $tracking_is_accepted = true;
- }
-
- $title[0] = $tracked_user_info['firstname'].'_'.$tracked_user_info['lastname'];
- }
-
- if ($tracking_is_accepted) {
- $tracked_user_info['email'] == '' ? $mail_link = get_lang(
- 'NoEmail'
- ) : $mail_link = Display::encrypted_mailto_link(
- $tracked_user_info['email']
- );
-
- if (!isset($view)) {
- $view = '0000000';
- }
- //Logins
- list($title_line1, $line1) = TrackingUserLogCSV::display_login_tracking_info(
- $view,
- $uInfo,
- $courseId
- );
-
- //Exercise results
- list($title_line2, $line2) = TrackingUserLogCSV::display_exercise_tracking_info(
- $view,
- $uInfo,
- $_cid
- );
-
- //Student publications uploaded
- list($title_line3, $line3) = TrackingUserLogCSV::display_student_publications_tracking_info(
- $view,
- $uInfo,
- $courseId
- );
-
- //Links usage
- list($title_line4, $line4) = TrackingUserLogCSV::display_links_tracking_info(
- $view,
- $uInfo,
- $_cid
- );
-
- //Documents downloaded
- 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;
- } else {
- echo get_lang('ErrorUserNotInGroup');
- }
-
-
- /*
- * Scorm contents and Learning Path
- */
- //TODO: scorm tools is in work and the logs will change in few days...
- /*if(substr($view,5,1) == '1')
- {
- $new_view = substr_replace($view,'0',5,1);
- $title[1]=get_lang('ScormContentColumn');
- $line ='';
- $sql = "SELECT id, name FROM $tbl_learnpath_main";
- $result=Database::query($sql);
- $ar=Database::fetch_array($result);
-
- if (is_array($ar))
- {
- while ($ar['id'] != '') {
- $lp_title = stripslashes($ar['name']);
- echo "";
- echo "$lp_title";
- echo " |
";
- if ($ar['id']==$scormcontopen) { //have to list the students here
- $contentId=$ar['id'];
- $sql3 = "SELECT iv.status, iv.score, i.title, iv.total_time " .
- "FROM $tbl_learnpath_item i " .
- "INNER JOIN $tbl_learnpath_item_view iv ON i.id=iv.lp_item_id " .
- "INNER JOIN $tbl_learnpath_view v ON iv.lp_view_id=v.id " .
- "WHERE (v.user_id=$uInfo and v.lp_id=$contentId) ORDER BY v.id, i.id";
- $result3=Database::query($sql3);
- $ar3=Database::fetch_array($result3);
- if (is_array($ar3)) {
- $title_line=get_lang('ScormTitleColumn').";".get_lang('ScormStatusColumn').";".get_lang('ScormScoreColumn').";".get_lang('ScormTimeColumn')."\n";
-
- while ($ar3['status'] != '') {
- require_once('../lp/learnpathItem.class.php');
- $time = learnpathItem::get_scorm_time('php',$ar3['total_time']);
- $line .= $title.';'.$ar3['status'].';'.$ar3['score'].';'.$time."\n";
- $ar3=Database::fetch_array($result3);
- }
- } else {
- $line .= get_lang('ScormNeverOpened');
- }
- }
- $ar=Database::fetch_array($result);
- }
- } else {
- $noscorm=true;
- }
-
- if ($noscorm) {
- $line=get_lang('NoResult');
- }
- } else {
- $new_view = substr_replace($view,'1',5,1);
- }*/
-
- }
- /*
- * Export to a CSV file
- * force the browser to save the file instead of opening it
- */
-
- $len = strlen($title_line.$line);
- header('Content-type: application/octet-stream');
- //header('Content-Type: application/force-download');
- header('Content-length: '.$len);
- $filename = html_entity_decode(
- str_replace(
- ":",
- "",
- str_replace(" ", "_", $title[0].'_'.$title[1].'.csv')
- )
- );
- $filename = api_replace_dangerous_char($filename);
- if (preg_match("/MSIE 5.5/", $_SERVER['HTTP_USER_AGENT'])) {
- header('Content-Disposition: filename= '.$filename);
- } else {
- header('Content-Disposition: attachment; filename= '.$filename);
- }
- if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE')) {
- header('Pragma: ');
- header('Cache-Control: ');
- header(
- 'Cache-Control: public'
- ); // IE cannot download from sessions without a cache
- }
- header('Content-Description: '.$filename);
- header('Content-transfer-encoding: binary');
-
- echo api_html_entity_decode($title_line, ENT_QUOTES, $charset);
- echo api_html_entity_decode($line, ENT_QUOTES, $charset);
- exit;
-} else { // not allowed
- api_not_allowed();
-}