Internal: Fix course list, session list

pull/3451/head
Julio Montoya 5 years ago
parent 22d16dd5a6
commit 59decff895
  1. 82
      public/main/admin/course_list.php
  2. 17
      public/main/admin/course_list_admin.php
  3. 132
      public/main/inc/lib/sessionmanager.lib.php
  4. 7
      public/main/session/session_edit.php

@ -21,64 +21,7 @@ $sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : null;
*/
function get_number_of_courses()
{
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$sql = "SELECT COUNT(c.id) AS total_number_of_items FROM $course_table c";
if ((api_is_platform_admin() || api_is_session_admin()) &&
api_is_multiple_url_enabled() && -1 != api_get_current_access_url_id()
) {
$access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql .= " INNER JOIN $access_url_rel_course_table url_rel_course
ON (c.id = url_rel_course.c_id)";
}
$sql .= " LEFT JOIN $tblCourseCategory ON c.category_id = course_category.id ";
if (isset($_GET['keyword'])) {
$keyword = Database::escape_string('%'.$_GET['keyword'].'%');
$sql .= " WHERE (
c.title LIKE '".$keyword."' OR
c.code LIKE '".$keyword."' OR
c.visual_code LIKE '".$keyword."'
)
";
} elseif (isset($_GET['keyword_code'])) {
$keyword_code = Database::escape_string('%'.$_GET['keyword_code'].'%');
$keyword_title = Database::escape_string('%'.$_GET['keyword_title'].'%');
$keyword_category = isset($_GET['keyword_category'])
? Database::escape_string('%'.$_GET['keyword_category'].'%')
: null;
$keyword_language = Database::escape_string('%'.$_GET['keyword_language'].'%');
$keyword_visibility = Database::escape_string('%'.$_GET['keyword_visibility'].'%');
$keyword_subscribe = Database::escape_string($_GET['keyword_subscribe']);
$keyword_unsubscribe = Database::escape_string($_GET['keyword_unsubscribe']);
$sql .= " WHERE
(c.code LIKE '".$keyword_code."' OR c.visual_code LIKE '".$keyword_code."') AND
c.title LIKE '".$keyword_title."' AND
c.course_language LIKE '".$keyword_language."' AND
c.visibility LIKE '".$keyword_visibility."' AND
c.subscribe LIKE '".$keyword_subscribe."' AND
c.unsubscribe LIKE '".$keyword_unsubscribe."'
";
if (!empty($keyword_category)) {
$sql .= " AND course_category.code LIKE '".$keyword_category."' ";
}
}
// adding the filter to see the user's only of the current access_url
if ((api_is_platform_admin() || api_is_session_admin()) &&
api_is_multiple_url_enabled() && -1 != api_get_current_access_url_id()
) {
$sql .= ' AND url_rel_course.access_url_id = '.api_get_current_access_url_id();
}
$res = Database::query($sql);
$obj = Database::fetch_object($res);
return $obj->total_number_of_items;
return get_course_data(0, 0, 0, 0, null, true);
}
/**
@ -93,12 +36,12 @@ function get_number_of_courses()
*
* @return array
*/
function get_course_data($from, $number_of_items, $column, $direction)
function get_course_data($from, $number_of_items, $column, $direction, $dataFunctions = [], $getCount = false)
{
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$tblCourseCategory = Database::get_main_table(TABLE_MAIN_CATEGORY);
$sql = "SELECT
$select = "SELECT
course.code AS col0,
title AS col1,
course.code AS col2,
@ -111,8 +54,13 @@ function get_course_data($from, $number_of_items, $column, $direction)
directory as col9,
visual_code,
directory,
course.id
FROM $course_table course
course.id";
if ($getCount) {
$select = 'SELECT COUNT(DISTINCT(course.id)) as count ';
}
$sql = "$select FROM $course_table course
LEFT JOIN $tblCourseCategory category ON course.category_id = category.id ";
if ((api_is_platform_admin() || api_is_session_admin()) &&
@ -162,6 +110,16 @@ function get_course_data($from, $number_of_items, $column, $direction)
$sql .= ' AND url_rel_course.access_url_id='.api_get_current_access_url_id();
}
if ($getCount) {
$res = Database::query($sql);
$row = Database::fetch_array($res);
if ($row) {
return (int) $row['count'];
}
return 0;
}
$sql .= " ORDER BY col$column $direction ";
$sql .= " LIMIT $from, $number_of_items";

@ -62,10 +62,7 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
}
$sql = "$select FROM $table course";
if ((api_is_platform_admin() || api_is_session_admin()) &&
api_is_multiple_url_enabled() && api_get_current_access_url_id() != -1
) {
if (api_is_multiple_url_enabled()) {
$access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql .= " INNER JOIN $access_url_rel_course_table url_rel_course
ON (course.id = url_rel_course.c_id)";
@ -77,9 +74,10 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
ON (course.id = cu.c_id AND cu.status = ".COURSEMANAGER.")
";
$sql .= ' WHERE 1=1 ';
if (isset($_GET['keyword'])) {
$keyword = Database::escape_string("%".trim($_GET['keyword'])."%");
$sql .= " WHERE (
$sql .= " AND (
title LIKE '".$keyword."' OR
code LIKE '".$keyword."' OR
visual_code LIKE '".$keyword."'
@ -96,9 +94,9 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
$keyword_subscribe = Database::escape_string($_GET['keyword_subscribe']);
$keyword_unsubscribe = Database::escape_string($_GET['keyword_unsubscribe']);
$sql .= " WHERE
(code LIKE '".$keyword_code."' OR visual_code LIKE '".$keyword_code."') AND
$sql .= " AND
title LIKE '".$keyword_title."' AND
(code LIKE '".$keyword_code."' OR visual_code LIKE '".$keyword_code."') AND
course_language LIKE '".$keyword_language."' AND
visibility LIKE '".$keyword_visibility."' AND
subscribe LIKE '".$keyword_subscribe."' AND
@ -110,9 +108,7 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
}
// Adding the filter to see the user's only of the current access_url.
if ((api_is_platform_admin() || api_is_session_admin()) &&
api_is_multiple_url_enabled() && api_get_current_access_url_id() != -1
) {
if (api_is_multiple_url_enabled()) {
$sql .= " AND url_rel_course.access_url_id = ".api_get_current_access_url_id();
}
@ -144,7 +140,6 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
return 0;
}
$sql .= " ORDER BY col$column $direction ";
$sql .= " LIMIT $from, $number_of_items";

@ -1102,18 +1102,18 @@ class SessionManager
$where .= ' AND session_id = %s';
$queryVariables[] = $sessionId;
$sql = "SELECT
u.user_id, u.lastname, u.firstname, u.username,
u.id as user_id, u.lastname, u.firstname, u.username,
u.email, s.c_id, s.session_id
FROM $session_course_user s
INNER JOIN $user u
ON u.user_id = s.user_id
ON u.id = s.user_id
$where $order $limit";
} else {
$sql = "SELECT
u.user_id, u.lastname, u.firstname, u.username,
u.email, s.c_id, s.session_id
FROM $session_course_user s
INNER JOIN $user u ON u.user_id = s.user_id
INNER JOIN $user u ON u.id = s.user_id
$where $order $limit";
}
@ -1444,7 +1444,7 @@ class SessionManager
$where .= sprintf(" AND c.id = %d", $courseId);
}
if (isset($studentId) && !empty($studentId)) {
$where .= sprintf(" AND u.user_id = %d", $studentId);
$where .= sprintf(" AND u.id = %d", $studentId);
}
if (isset($profile) && !empty($profile)) {
$where .= sprintf(" AND u.status = %d", $profile);
@ -1487,10 +1487,10 @@ class SessionManager
a.counter,
c.title,
c.code,
u.user_id,
u.id as user_id,
a.session_id
FROM $track_e_course_access a
INNER JOIN $user u ON a.user_id = u.user_id
INNER JOIN $user u ON a.user_id = u.id
INNER JOIN $course c ON a.c_id = c.id
$where $order $limit";
$result = Database::query(sprintf($sql, $sessionId, $courseId));
@ -3288,7 +3288,7 @@ class SessionManager
sc.name as category_name,
s.promotion_id
FROM $session_table s
INNER JOIN $user_table u ON s.id_coach = u.user_id
INNER JOIN $user_table u ON s.id_coach = u.id
INNER JOIN $table_access_url_rel_session ar ON ar.session_id = s.id
LEFT JOIN $session_category_table sc ON s.session_category_id = sc.id
LEFT JOIN $session_course_table sco ON (sco.session_id = s.id)
@ -3867,7 +3867,6 @@ class SessionManager
$sessionConditions = null;
$sessionQuery = '';
$courseSessionQuery = null;
switch ($status) {
case DRH:
$sessionQuery = "SELECT sru.session_id
@ -3885,6 +3884,10 @@ class SessionManager
$whereConditions = " OR (s.id_coach = $userId) ";
break;
case SESSIONADMIN:
$sessionQuery = '';
$sqlInjectJoins .= " AND s.session_admin_id = $userId ";
break;
default:
$sessionQuery = "SELECT sru.session_id
FROM
@ -3908,16 +3911,18 @@ class SessionManager
$whereConditions .= $keywordCondition;
$subQuery = $sessionQuery.$courseSessionQuery;
if (!empty($subQuery)) {
$subQuery = " AND s.id IN ($subQuery)";
}
$sql = " $select
FROM $tbl_session s
INNER JOIN $tbl_session_rel_access_url a
ON (s.id = a.session_id)
$sqlInjectJoins
WHERE
access_url_id = ".api_get_current_access_url_id()." AND
s.id IN (
$subQuery
)
access_url_id = ".api_get_current_access_url_id()."
$subQuery
$whereConditions
$extraFieldsConditions
$sqlInjectWhere
@ -3931,8 +3936,11 @@ class SessionManager
if ($getCount) {
$row = Database::fetch_array($result);
if ($row) {
return (int) $row['count'];
}
return $row['count'];
return 0;
}
$sessions = [];
@ -4278,7 +4286,7 @@ class SessionManager
$table_access_url_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$selectedField = '
u.user_id, u.lastname, u.firstname, u.username, su.relation_type, au.access_url_id,
u.id as user_id, u.lastname, u.firstname, u.username, su.relation_type, au.access_url_id,
su.moved_to, su.moved_status, su.moved_at, su.registered_at
';
@ -4289,10 +4297,10 @@ class SessionManager
$sql = "SELECT $selectedField
FROM $tbl_user u
INNER JOIN $tbl_session_rel_user su
ON u.user_id = su.user_id AND
ON u.id = su.user_id AND
su.session_id = $id
LEFT OUTER JOIN $table_access_url_user au
ON (au.user_id = u.user_id)
ON (au.user_id = u.id)
";
if (is_numeric($status)) {
@ -4308,8 +4316,11 @@ class SessionManager
$result = Database::query($sql);
if ($getCount) {
$count = Database::fetch_assoc($result);
if ($count) {
return (int) $count['count'];
}
return $count['count'];
return 0;
}
$return = [];
@ -4395,11 +4406,11 @@ class SessionManager
$sql = "SELECT session_rcru.status
FROM $table session_rcru
INNER JOIN $tbl_user user
ON (session_rcru.user_id = user.user_id)
ON (session_rcru.user_id = user.id)
WHERE
session_rcru.session_id = '".intval($session_id)."' AND
session_rcru.c_id ='".intval($courseId)."' AND
user.user_id = ".intval($user_id);
user.id = ".intval($user_id);
$result = Database::query($sql);
$status = false;
@ -6114,7 +6125,7 @@ class SessionManager
$studentListSql = "'".implode("','", $studentIdList)."'";
}
if (!empty($studentListSql)) {
$userConditionsFromDrh = " AND u.user_id IN ($studentListSql) ";
$userConditionsFromDrh = " AND u.id IN ($studentListSql) ";
}
switch ($status) {
@ -6155,7 +6166,7 @@ class SessionManager
$masterSelect = 'SELECT DISTINCT user_id FROM ';
if ($getCount) {
$select = 'SELECT DISTINCT u.user_id ';
$select = 'SELECT DISTINCT u.id as user_id ';
$masterSelect = 'SELECT COUNT(DISTINCT(user_id)) as count FROM ';
}
@ -6201,7 +6212,7 @@ class SessionManager
FROM $tbl_session s
INNER JOIN $tbl_session_rel_access_url url ON (url.session_id = s.id)
INNER JOIN $tbl_session_rel_course_rel_user su ON (s.id = su.session_id)
INNER JOIN $tbl_user u ON (u.user_id = su.user_id)
INNER JOIN $tbl_user u ON (u.id = su.user_id)
$where
$sessionConditions
$userConditionsFromDrh
@ -6210,7 +6221,7 @@ class SessionManager
FROM $tbl_course c
INNER JOIN $tbl_course_rel_access_url url ON (url.c_id = c.id)
INNER JOIN $tbl_course_user cu ON (cu.c_id = c.id)
INNER JOIN $tbl_user u ON (u.user_id = cu.user_id)
INNER JOIN $tbl_user u ON (u.id = cu.user_id)
$where
$courseConditions
$userConditionsFromDrh
@ -6554,7 +6565,7 @@ class SessionManager
$select = "SELECT DISTINCT u.* ";
if ($getCount) {
$select = "SELECT count(DISTINCT(u.user_id)) as count";
$select = "SELECT count(DISTINCT(u.id)) as count";
}
$sql = "$select FROM $tableUser u";
@ -6565,7 +6576,7 @@ class SessionManager
}
$active = intval($active);
$teacherListId = implode("','", $teacherListId);
$where = " WHERE u.active = $active AND u.user_id IN ('$teacherListId') ";
$where = " WHERE u.active = $active AND u.id IN ('$teacherListId') ";
if (!empty($lastConnectionDate)) {
$lastConnectionDate = Database::escape_string($lastConnectionDate);
@ -7467,7 +7478,7 @@ class SessionManager
u.lastname AS coach_lastname
FROM $courseTable c
INNER JOIN $sessionCourseUserTable scu ON c.id = scu.c_id
INNER JOIN $userTable u ON scu.user_id = u.user_id
INNER JOIN $userTable u ON scu.user_id = u.id
WHERE scu.status = 2 AND scu.session_id IN $sessionIdsString
ORDER BY scu.session_id ASC ";
$res = Database::query($sql);
@ -7851,7 +7862,7 @@ class SessionManager
$orderClause = 'ORDER BY ';
$orderClause .= api_sort_by_first_name() ? 'firstname, lastname, username' : 'lastname, firstname, username';
$sql = "SELECT user_id, lastname, firstname, username
$sql = "SELECT id as user_id, lastname, firstname, username
FROM $tbl_user
WHERE status = '1' ".
$orderClause;
@ -7862,10 +7873,10 @@ class SessionManager
);
$accessUrlId = api_get_current_access_url_id();
if (-1 != $accessUrlId) {
$sql = "SELECT user.user_id, username, lastname, firstname
$sql = "SELECT user.id as user_id, username, lastname, firstname
FROM $tbl_user user
INNER JOIN $userRelAccessUrlTable url_user
ON (url_user.user_id = user.user_id)
ON (url_user.user_id = user.id)
WHERE
access_url_id = $accessUrlId AND
status = 1 "
@ -9178,10 +9189,12 @@ class SessionManager
$catId = $sessionInfo['session_category_id'];
if (!isset($listCat[$catId])) {
$listCatInfo = self::get_session_category($catId);
$listCat[$catId] = [];
$listCat[$catId]['catSessionId'] = $catId;
$listCat[$catId]['catSessionName'] = $listCatInfo['name'];
$listCat[$catId]['sessionList'] = [];
if ($listCatInfo) {
$listCat[$catId] = [];
$listCat[$catId]['catSessionId'] = $catId;
$listCat[$catId]['catSessionName'] = $listCatInfo['name'];
$listCat[$catId]['sessionList'] = [];
}
}
$listSessionInfo = self::fetch($sessionId);
$listSessionIdName = [
@ -9531,6 +9544,59 @@ class SessionManager
return Display::tabsOnlyLink($tabs, $default);
}
/**
* Check if a session is followed by human resources manager.
*
* @param int $sessionId
* @param int $userId
*
* @return bool
*/
public static function isSessionFollowedByDrh($sessionId, $userId)
{
$userId = (int) $userId;
$sessionId = (int) $sessionId;
$tblSession = Database::get_main_table(TABLE_MAIN_SESSION);
$tblSessionRelUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
if (api_is_multiple_url_enabled()) {
$tblSessionRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$sql = "SELECT s.id FROM $tblSession s
INNER JOIN $tblSessionRelUser sru ON (sru.session_id = s.id)
LEFT JOIN $tblSessionRelAccessUrl a ON (s.id = a.session_id)
WHERE
sru.user_id = '$userId' AND
sru.session_id = '$sessionId' AND
sru.relation_type = '".SESSION_RELATION_TYPE_RRHH."' AND
access_url_id = ".api_get_current_access_url_id();
} else {
$sql = "SELECT s.id FROM $tblSession s
INNER JOIN $tblSessionRelUser sru ON sru.session_id = s.id
WHERE
sru.user_id = '$userId' AND
sru.session_id = '$sessionId' AND
sru.relation_type = '".SESSION_RELATION_TYPE_RRHH."'";
}
$result = Database::query($sql);
return Database::num_rows($result) > 0;
}
/**
* Add a warning message when session is read-only mode.
*/
public static function addFlashSessionReadOnly()
{
if (api_get_session_id() && !api_is_allowed_to_session_edit()) {
Display::addFlash(
Display::return_message(get_lang('SessionIsReadOnly'), 'warning')
);
}
}
/**
* @param int $id
*

@ -61,7 +61,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
$order_clause = 'ORDER BY ';
$order_clause .= api_sort_by_first_name() ? 'firstname, lastname, username' : 'lastname, firstname, username';
$sql = "SELECT user_id,lastname,firstname,username
$sql = "SELECT id as user_id,lastname,firstname,username
FROM $tbl_user
WHERE status='1'".$order_clause;
@ -167,6 +167,8 @@ if ($form->validate()) {
$extraFields['extra_image']['crop_parameters'] = $params['picture_crop_result'];
}
$status = isset($params['status']) ? $params['status'] : 0;
$return = SessionManager::edit_session(
$id,
$name,
@ -184,7 +186,8 @@ if ($form->validate()) {
$duration,
$extraFields,
null,
$sendSubscriptionNotification
$sendSubscriptionNotification,
$status
);
if ($return) {

Loading…
Cancel
Save