Skip to content

Commit

Permalink
Adds $sessionId = -1 condition see BT#9433
Browse files Browse the repository at this point in the history
  • Loading branch information
jmontoyaa committed Mar 27, 2015
1 parent 8f25b37 commit 93308d0
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 41 deletions.
51 changes: 44 additions & 7 deletions main/inc/ajax/model.ajax.php
Expand Up @@ -146,6 +146,9 @@ function getWhereClause($col, $oper, $val)
if (!(api_is_platform_admin(false, true))) {
//exit;
}

$sessionId = isset($_GET['session_id']) ? intval($_GET['session_id']) : 0;

$courseCodeList = array();
$userIdList = array();
if (api_is_drh()) {
Expand Down Expand Up @@ -186,12 +189,27 @@ function getWhereClause($col, $oper, $val)
}
} elseif (api_is_student_boss()) {
$users = UserManager::getUsersFollowedByStudentBoss($userId);

$userIdList = array_keys($users);
}

$groups = GroupPortalManager::get_groups_by_user(api_get_user_id(), GROUP_USER_PERMISSION_ADMIN);
$sessionIdList = [];
if ($sessionId == -1) {
$userIdList = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus(
'admin',
null
);
$userIdList = array_column($userIdList, 'user_id');
$sessionList = SessionManager::get_sessions_list();
$sessionIdList = array_column($sessionList, 'id');

$courseCodeList = array();
foreach ($sessionList as $session) {
$courses = SessionManager::get_course_list_by_session_id($session['id']);
$courseCodeList = array_merge($courseCodeList, array_column($courses, 'code'));
}
}

$groups = GroupPortalManager::get_groups_by_user(api_get_user_id(), GROUP_USER_PERMISSION_ADMIN);
$groupsId = array_keys($groups);

if (is_array($groupsId)) {
Expand All @@ -217,13 +235,20 @@ function getWhereClause($col, $oper, $val)
}

if ($action == 'get_user_course_report') {
$count = CourseManager::get_count_user_list_from_course_code(false, null, $courseCodeList, $userIdList);
$count = CourseManager::get_count_user_list_from_course_code(
false,
null,
$courseCodeList,
$userIdList,
$sessionIdList
);
} else {
$count = CourseManager::get_count_user_list_from_course_code(
true,
array('ruc'),
$courseCodeList,
$userIdList
$userIdList,
$sessionIdList
);
}
break;
Expand Down Expand Up @@ -460,7 +485,14 @@ function getWhereClause($col, $oper, $val)
switch ($action) {
case 'get_course_exercise_medias':
$columns = array('question');
$result = Question::get_course_medias($course_id, $start, $limit, $sidx, $sord, $whereCondition);
$result = Question::get_course_medias(
$course_id,
$start,
$limit,
$sidx,
$sord,
$whereCondition
);
break;
case 'get_user_course_report_resumed':
$columns = array(
Expand Down Expand Up @@ -508,7 +540,9 @@ function getWhereClause($col, $oper, $val)
true,
array('ruc'),
$courseCodeList,
$userIdList
$userIdList,
null,
$sessionIdList
);

$new_result = array();
Expand Down Expand Up @@ -542,6 +576,7 @@ function getWhereClause($col, $oper, $val)
if (!in_array($sidx, array('title'))) {
$sidx = 'title';
}

$result = CourseManager::get_user_list_from_course_code(
null,
null,
Expand All @@ -553,7 +588,9 @@ function getWhereClause($col, $oper, $val)
false,
null,
$courseCodeList,
$userIdList
$userIdList,
null,
$sessionIdList
);

break;
Expand Down
126 changes: 98 additions & 28 deletions main/inc/lib/course.lib.php
Expand Up @@ -1209,6 +1209,7 @@ public static function is_user_subscribed_in_real_or_linked_course($user_id, $co
* @param array $courseCodeList
* @param array $userIdList
* @param string $filterByActive
* @param array $sessionIdList
* @return array|int
*/
public static function get_user_list_from_course_code(
Expand All @@ -1223,16 +1224,21 @@ public static function get_user_list_from_course_code(
$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()) {
Expand All @@ -1251,17 +1257,41 @@ public static function get_user_list_from_course_code(

$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
Expand Down Expand Up @@ -1304,8 +1334,7 @@ public static function get_user_list_from_course_code(
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 ';

Expand Down Expand Up @@ -1342,7 +1371,9 @@ public static function get_user_list_from_course_code(
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)) {
Expand Down Expand Up @@ -1392,8 +1423,11 @@ public static function get_user_list_from_course_code(
$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)) {
Expand All @@ -1411,15 +1445,20 @@ public static function get_user_list_from_course_code(
}

$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);
Expand All @@ -1430,10 +1469,19 @@ public static function get_user_list_from_course_code(
$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']++;
}
Expand All @@ -1450,23 +1498,40 @@ public static function get_user_list_from_course_code(
}
}
}

} 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) {
Expand All @@ -1480,6 +1545,7 @@ public static function get_user_list_from_course_code(
}
}
}

return $users;
}

Expand All @@ -1488,13 +1554,15 @@ public static function get_user_list_from_course_code(
* @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,
Expand All @@ -1507,7 +1575,9 @@ static function get_count_user_list_from_course_code(
$resumed_report,
$extra_field,
$courseCodeList,
$userIdList
$userIdList,
null,
$sessionIdList
);
}

Expand Down
3 changes: 2 additions & 1 deletion main/mySpace/company_reports.php
Expand Up @@ -22,9 +22,10 @@
$this_section = SECTION_TRACKING;

$htmlHeadXtra[] = api_get_jqgrid_js();
$sessionId = isset($_GET['session_id']) ? intval($_GET['session_id']) : 0;

//jqgrid will use this URL to do the selects
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_user_course_report';
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_user_course_report&session_id='.$sessionId;

$extra_fields = UserManager::get_extra_fields(0, 100, null, null, true, true);

Expand Down
9 changes: 4 additions & 5 deletions main/mySpace/company_reports_resumed.php
Expand Up @@ -4,9 +4,7 @@
* Special report for corporate users
* @package chamilo.reporting
*/
/**
* Code
*/

$cidReset = true;

require_once '../inc/global.inc.php';
Expand All @@ -22,9 +20,10 @@
$tool_name = get_lang('Report');
$this_section = SECTION_TRACKING;
$htmlHeadXtra[] = api_get_jqgrid_js();
$sessionId = isset($_GET['session_id']) ? intval($_GET['session_id']) : 0;

// jqgrid will use this URL to do the selects
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_user_course_report_resumed';
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_user_course_report_resumed&session_id='.$sessionId;

$extra_fields = UserManager::get_extra_fields(0, 100, null, null, true, true);

Expand Down Expand Up @@ -117,7 +116,7 @@
'class' => 'btn btn-info'
)
);
$content .= '</div>';
$content .= '</div>';
}

$content .= '</div>';
Expand Down

0 comments on commit 93308d0

Please sign in to comment.