|
|
|
@ -1209,6 +1209,7 @@ class CourseManager |
|
|
|
|
* @param array $courseCodeList |
|
|
|
|
* @param array $userIdList |
|
|
|
|
* @param string $filterByActive |
|
|
|
|
* @param array $sessionIdList |
|
|
|
|
* @return array|int |
|
|
|
|
*/ |
|
|
|
|
public static function get_user_list_from_course_code( |
|
|
|
@ -1223,16 +1224,21 @@ class CourseManager |
|
|
|
|
$extra_field = array(), |
|
|
|
|
$courseCodeList = array(), |
|
|
|
|
$userIdList = array(), |
|
|
|
|
$filterByActive = null |
|
|
|
|
$filterByActive = null, |
|
|
|
|
$sessionIdList = array() |
|
|
|
|
) { |
|
|
|
|
// variable initialisation |
|
|
|
|
$course_table = Database::get_main_table(TABLE_MAIN_COURSE); |
|
|
|
|
$sessionTable = Database::get_main_table(TABLE_MAIN_SESSION); |
|
|
|
|
|
|
|
|
|
$session_id = intval($session_id); |
|
|
|
|
$course_code = Database::escape_string($course_code); |
|
|
|
|
$courseInfo = api_get_course_info($course_code); |
|
|
|
|
$courseId = $courseInfo['real_id']; |
|
|
|
|
$courseId = 0; |
|
|
|
|
if (!empty($courseInfo)) { |
|
|
|
|
$courseId = $courseInfo['real_id']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$where = array(); |
|
|
|
|
|
|
|
|
|
if (empty($order_by)) { |
|
|
|
|
$order_by = 'user.lastname, user.firstname'; |
|
|
|
|
if (api_is_western_name_order()) { |
|
|
|
@ -1251,17 +1257,41 @@ class CourseManager |
|
|
|
|
|
|
|
|
|
$filter_by_status_condition = null; |
|
|
|
|
|
|
|
|
|
if (!empty($session_id)) { |
|
|
|
|
$sql = 'SELECT DISTINCT user.user_id, session_course_user.status as status_session, user.* '; |
|
|
|
|
if (!empty($session_id) || !empty($sessionIdList)) { |
|
|
|
|
$sql = 'SELECT DISTINCT |
|
|
|
|
user.user_id, |
|
|
|
|
session_course_user.status as status_session, |
|
|
|
|
id_session, |
|
|
|
|
user.*, |
|
|
|
|
course.*, |
|
|
|
|
session.name as session_name |
|
|
|
|
'; |
|
|
|
|
if ($return_count) { |
|
|
|
|
$sql = " SELECT COUNT(user.user_id) as count"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sessionCondition = " session_course_user.id_session = $session_id"; |
|
|
|
|
if (!empty($sessionIdList)) { |
|
|
|
|
$sessionIdListTostring = implode("','", array_map('intval', $sessionIdList)); |
|
|
|
|
$sessionCondition = " session_course_user.id_session IN ('$sessionIdListTostring') "; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$courseCondition = " session_course_user.course_code = '".$course_code."' AND "; |
|
|
|
|
if (!empty($courseCodeList)) { |
|
|
|
|
$courseCodeListForSession = array_map(array('Database', 'escape_string'), $courseCodeList); |
|
|
|
|
$courseCodeListForSession = implode('","', $courseCodeListForSession); |
|
|
|
|
$courseCondition = ' session_course_user.course_code IN ("' . $courseCodeListForSession . '") AND '; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sql .= ' FROM ' . Database::get_main_table(TABLE_MAIN_USER) . ' as user '; |
|
|
|
|
$sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER) . ' as session_course_user |
|
|
|
|
$sql .= " LEFT JOIN ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER) . " as session_course_user |
|
|
|
|
ON |
|
|
|
|
user.user_id = session_course_user.id_user AND |
|
|
|
|
session_course_user.course_code="' . $course_code . '" AND |
|
|
|
|
session_course_user.id_session = ' . $session_id; |
|
|
|
|
$courseCondition |
|
|
|
|
$sessionCondition |
|
|
|
|
INNER JOIN $course_table course ON session_course_user.course_code = course.code |
|
|
|
|
INNER JOIN $sessionTable session ON session_course_user.id_session = session.id |
|
|
|
|
"; |
|
|
|
|
$where[] = ' session_course_user.course_code IS NOT NULL '; |
|
|
|
|
|
|
|
|
|
// 2 = coach |
|
|
|
@ -1304,8 +1334,7 @@ class CourseManager |
|
|
|
|
if (!empty($course_code)) { |
|
|
|
|
$sql .= ' AND course_rel_user.course_code="' . $course_code . '"'; |
|
|
|
|
} else { |
|
|
|
|
$course_table = Database::get_main_table(TABLE_MAIN_COURSE); |
|
|
|
|
$sql .= " INNER JOIN $course_table course ON course_rel_user.course_code = course.code "; |
|
|
|
|
$sql .= " INNER JOIN $course_table course ON course_rel_user.course_code = course.code "; |
|
|
|
|
} |
|
|
|
|
$where[] = ' course_rel_user.course_code IS NOT NULL '; |
|
|
|
|
|
|
|
|
@ -1342,7 +1371,9 @@ class CourseManager |
|
|
|
|
if (!empty($courseCodeList)) { |
|
|
|
|
$courseCodeList = array_map(array('Database', 'escape_string'), $courseCodeList); |
|
|
|
|
$courseCodeList = implode('","', $courseCodeList); |
|
|
|
|
$sql .= ' AND course.code IN ("' . $courseCodeList . '")'; |
|
|
|
|
if (empty($sessionIdList)) { |
|
|
|
|
$sql .= ' AND course.code IN ("'.$courseCodeList.'")'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!empty($userIdList)) { |
|
|
|
@ -1392,8 +1423,11 @@ class CourseManager |
|
|
|
|
$user_info['status_session'] = $user['status_session']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sessionId = isset($user['id_session']) ? $user['id_session'] : 0; |
|
|
|
|
$course_code = isset($user['code']) ? $user['code'] : null; |
|
|
|
|
|
|
|
|
|
if ($add_reports) { |
|
|
|
|
$course_code = $user['code']; |
|
|
|
|
|
|
|
|
|
if ($resumed_report) { |
|
|
|
|
foreach ($extra_fields as $extra) { |
|
|
|
|
if (in_array($extra['1'], $extra_field)) { |
|
|
|
@ -1411,15 +1445,20 @@ class CourseManager |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$users[$row_key]['extra_' . $extra['1']] = $name; |
|
|
|
|
$users[$row_key]['training_hours'] += Tracking::get_time_spent_on_the_course($user['user_id'], |
|
|
|
|
$courseId, 0); |
|
|
|
|
$users[$row_key]['training_hours'] += Tracking::get_time_spent_on_the_course( |
|
|
|
|
$user['user_id'], |
|
|
|
|
$courseId, |
|
|
|
|
$sessionId |
|
|
|
|
); |
|
|
|
|
$users[$row_key]['count_users'] += $counter; |
|
|
|
|
|
|
|
|
|
$registered_users_with_extra_field = 0; |
|
|
|
|
|
|
|
|
|
if (!empty($name) && $name != '-') { |
|
|
|
|
$name = Database::escape_string($name); |
|
|
|
|
$sql = "SELECT count(user_id) as count FROM $table_user_field_value WHERE field_value = '$name'"; |
|
|
|
|
$sql = "SELECT count(user_id) as count |
|
|
|
|
FROM $table_user_field_value |
|
|
|
|
WHERE field_value = '$name'"; |
|
|
|
|
$result_count = Database::query($sql); |
|
|
|
|
if (Database::num_rows($result_count)) { |
|
|
|
|
$row_count = Database::fetch_array($result_count); |
|
|
|
@ -1430,10 +1469,19 @@ class CourseManager |
|
|
|
|
$users[$row_key]['count_users_registered'] = $registered_users_with_extra_field; |
|
|
|
|
$users[$row_key]['average_hours_per_user'] = $users[$row_key]['training_hours'] / $users[$row_key]['count_users']; |
|
|
|
|
|
|
|
|
|
$category = Category:: load(null, null, $course_code); |
|
|
|
|
$category = Category:: load( |
|
|
|
|
null, |
|
|
|
|
null, |
|
|
|
|
$course_code, |
|
|
|
|
null, |
|
|
|
|
null, |
|
|
|
|
$sessionId |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (!isset($users[$row_key]['count_certificates'])) { |
|
|
|
|
$users[$row_key]['count_certificates'] = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) { |
|
|
|
|
$users[$row_key]['count_certificates']++; |
|
|
|
|
} |
|
|
|
@ -1450,23 +1498,40 @@ class CourseManager |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
$report_info['course'] = $user['title']; |
|
|
|
|
$sessionName = isset($sessionId) ? ' - '.$user['session_name'] : ''; |
|
|
|
|
$report_info['course'] = $user['title'].$sessionName; |
|
|
|
|
$report_info['user'] = api_get_person_name($user['firstname'], $user['lastname']); |
|
|
|
|
$report_info['time'] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], |
|
|
|
|
$courseId, 0)); |
|
|
|
|
$report_info['time'] = api_time_to_hms( |
|
|
|
|
Tracking::get_time_spent_on_the_course( |
|
|
|
|
$user['user_id'], |
|
|
|
|
$courseId, |
|
|
|
|
$sessionId |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$category = Category:: load(null, null, $course_code); |
|
|
|
|
$category = Category:: load( |
|
|
|
|
null, |
|
|
|
|
null, |
|
|
|
|
$course_code, |
|
|
|
|
null, |
|
|
|
|
null, |
|
|
|
|
$sessionId |
|
|
|
|
); |
|
|
|
|
$report_info['certificate'] = Display::label(get_lang('No')); |
|
|
|
|
if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) { |
|
|
|
|
$report_info['certificate'] = Display::label(get_lang('Yes'), 'success'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$progress = intval(Tracking::get_avg_student_progress($user['user_id'], $course_code, array(), |
|
|
|
|
0)); |
|
|
|
|
$report_info['progress_100'] = $progress == 100 ? Display::label(get_lang('Yes'), |
|
|
|
|
'success') : Display::label(get_lang('No')); |
|
|
|
|
$progress = intval( |
|
|
|
|
Tracking::get_avg_student_progress( |
|
|
|
|
$user['user_id'], |
|
|
|
|
$course_code, |
|
|
|
|
array(), |
|
|
|
|
$sessionId |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
$report_info['progress_100'] = $progress == 100 ? Display::label(get_lang('Yes'), 'success') : Display::label(get_lang('No')); |
|
|
|
|
$report_info['progress'] = $progress . "%"; |
|
|
|
|
|
|
|
|
|
foreach ($extra_fields as $extra) { |
|
|
|
@ -1480,6 +1545,7 @@ class CourseManager |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $users; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1488,13 +1554,15 @@ class CourseManager |
|
|
|
|
* @param array $extra_field |
|
|
|
|
* @param array $courseCodeList |
|
|
|
|
* @param array $userIdList |
|
|
|
|
* @param array $sessionIdList |
|
|
|
|
* @return array|int |
|
|
|
|
*/ |
|
|
|
|
static function get_count_user_list_from_course_code( |
|
|
|
|
$resumed_report = false, |
|
|
|
|
$extra_field = array(), |
|
|
|
|
$courseCodeList = array(), |
|
|
|
|
$userIdList = array() |
|
|
|
|
$userIdList = array(), |
|
|
|
|
$sessionIdList = array() |
|
|
|
|
) { |
|
|
|
|
return self::get_user_list_from_course_code( |
|
|
|
|
null, |
|
|
|
@ -1507,7 +1575,9 @@ class CourseManager |
|
|
|
|
$resumed_report, |
|
|
|
|
$extra_field, |
|
|
|
|
$courseCodeList, |
|
|
|
|
$userIdList |
|
|
|
|
$userIdList, |
|
|
|
|
null, |
|
|
|
|
$sessionIdList |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|