* $wanted_code = 'curse' if there are in the DB codes like curse1 curse2 the function will return: course3
* if the course code doest not exist in the DB the same course code will be returned
*
* @return string wanted unused code
*/
public static function generateNextSessionName($session_name)
{
$session_name_ok = !self::session_name_exists($session_name);
if (!$session_name_ok) {
$table = Database::get_main_table(TABLE_MAIN_SESSION);
$session_name = Database::escape_string($session_name);
$sql = "SELECT count(*) as count FROM $table
WHERE name LIKE '$session_name%'";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result);
$count = $row['count'] + 1;
$session_name = $session_name . '_' . $count;
$result = self::session_name_exists($session_name);
if (!$result) {
return $session_name;
}
}
return false;
}
return $session_name;
}
/**
* Edit a session
* @author Carlos Vargas from existing code
* @param integer id
* @param string name
* @param integer year_start
* @param integer month_start
* @param integer day_start
* @param integer year_end
* @param integer month_end
* @param integer day_end
* @param integer nb_days_acess_before
* @param integer nb_days_acess_after
* @param integer nolimit
* @param integer id_coach
* @param integer id_session_category
* @param int $id_visibility
* @param bool
* @param bool
* @param string $description
* @param int $showDescription
* @return $id;
* The parameter id is a primary key
* */
public static function edit_session(
$id,
$name,
$startDate,
$endDate,
$displayStartDate,
$displayEndDate,
$coachStartDate,
$coachEndDate,
$id_coach,
$id_session_category,
$id_visibility,
$description = null,
$showDescription = 0,
$duration = null,
$extraFields = array(),
$sessionAdminId = 0
) {
$name = trim(stripslashes($name));
$id_coach = intval($id_coach);
$id_session_category = intval($id_session_category);
$id_visibility = intval($id_visibility);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
if (empty($name)) {
$msg = get_lang('SessionNameIsRequired');
return $msg;
} elseif (empty($id_coach)) {
$msg = get_lang('CoachIsRequired');
return $msg;
} elseif (!empty($startDate) && !api_is_valid_date($startDate, 'Y-m-d H:i')) {
$msg = get_lang('InvalidStartDate');
return $msg;
} elseif (!empty($endDate) && !api_is_valid_date($endDate, 'Y-m-d H:i')) {
$msg = get_lang('InvalidEndDate');
return $msg;
} elseif (!empty($startDate) && !empty($endDate) && $startDate >= $endDate) {
$msg = get_lang('StartDateShouldBeBeforeEndDate');
return $msg;
} else {
$sql = "SELECT id FROM $tbl_session WHERE name='" . Database::escape_string($name) . "'";
$rs = Database::query($sql);
$exists = false;
while ($row = Database::fetch_array($rs)) {
if ($row['id'] != $id) {
$exists = true;
}
}
if ($exists) {
$msg = get_lang('SessionNameAlreadyExists');
return $msg;
} else {
$values = [
'name' => $name,
'duration' => $duration,
'id_coach' => $id_coach,
'description'=> $description,
'show_description' => intval($showDescription),
'visibility' => $id_visibility
];
if (!empty($sessionAdminId)) {
$values['session_admin_id'] = $sessionAdminId;
}
if (!empty($startDate)) {
$values['access_start_date'] = $startDate;
}
if (!empty($endDate)) {
$values['access_end_date'] = $endDate;
}
if (!empty($displayStartDate)) {
$values['display_start_date'] = $displayStartDate;
}
if (!empty($displayEndDate)) {
$values['display_end_date'] = $displayEndDate;
}
if (!empty($coachStartDate)) {
$values['coach_access_start_date'] = $coachStartDate;
}
if (!empty($coachEndDate)) {
$values['coach_access_end_date'] = $coachEndDate;
}
if (!empty($id_session_category)) {
$values['session_category_id'] = $id_session_category;
}
Database::update($tbl_session, $values, array(
'id = ?' => $id
), true);
if (!empty($extraFields)) {
$extraFields['item_id'] = $id;
$sessionFieldValue = new ExtraFieldValue('session');
$sessionFieldValue->saveFieldValues($extraFields);
}
return $id;
}
}
}
/**
* Delete session
* @author Carlos Vargas from existing code
* @param array id_checked an array to delete sessions
* @param boolean optional, true if the function is called by a webservice, false otherwise.
* @return void Nothing, or false on error
* */
public static function delete($id_checked, $from_ws = false)
{
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_url_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$userId = api_get_user_id();
if (is_array($id_checked)) {
foreach ($id_checked as $sessionId) {
self::delete($sessionId);
}
} else {
$id_checked = intval($id_checked);
}
if (SessionManager::allowed($id_checked) && !$from_ws) {
$sql = 'SELECT session_admin_id FROM ' . $tbl_session. '
WHERE id IN (' . $id_checked.')';
$rs = Database::query($sql);
if (Database::result($rs, 0, 0) != $userId) {
api_not_allowed(true);
}
}
Database::query("DELETE FROM $tbl_session_rel_course WHERE session_id IN($id_checked)");
Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE session_id IN($id_checked)");
Database::query("DELETE FROM $tbl_session_rel_user WHERE session_id IN($id_checked)");
Database::query("DELETE FROM $tbl_url_session WHERE session_id IN($id_checked)");
Database::query("DELETE FROM $tbl_session WHERE id IN ($id_checked)");
$extraFieldValue = new ExtraFieldValue('session');
$extraFieldValue->deleteValuesByItem($id_checked);
/** @var \Chamilo\CoreBundle\Entity\Repository\SequenceRepository $repo */
$repo = Database::getManager()->getRepository('ChamiloCoreBundle:SequenceResource');
$repo->deleteResource(
$id_checked,
\Chamilo\CoreBundle\Entity\SequenceResource::SESSION_TYPE
);
// Add event to system log
Event::addEvent(
LOG_SESSION_DELETE,
LOG_SESSION_ID,
$id_checked,
api_get_utc_datetime(),
$userId
);
}
/**
* @param int $id_promotion
* @return bool
*/
public static function clear_session_ref_promotion($id_promotion)
{
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$id_promotion = intval($id_promotion);
$sql = "UPDATE $tbl_session SET promotion_id=0
WHERE promotion_id = $id_promotion";
if (Database::query($sql)) {
return true;
} else {
return false;
}
}
/**
* Subscribes students to the given session and optionally (default) unsubscribes previous users
*
* @author Carlos Vargas from existing code
* @author Julio Montoya. Cleaning code.
* @param int $id_session
* @param array $user_list
* @param int $session_visibility
* @param bool $empty_users
* @param bool $send_email
* @return bool
*/
public static function suscribe_users_to_session(
$id_session,
$user_list,
$session_visibility = SESSION_VISIBLE_READ_ONLY,
$empty_users = true,
$send_email = false
) {
if ($id_session != strval(intval($id_session))) {
return false;
}
foreach ($user_list as $intUser) {
if ($intUser != strval(intval($intUser))) {
return false;
}
}
$tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$session_info = api_get_session_info($id_session);
$session_name = $session_info['name'];
// from function parameter
if (empty($session_visibility)) {
$session_visibility = $session_info['visibility']; //loaded from DB
//default status loaded if empty
if (empty($session_visibility))
$session_visibility = SESSION_VISIBLE_READ_ONLY; // by default readonly 1
} else {
if (!in_array($session_visibility, array(SESSION_VISIBLE_READ_ONLY, SESSION_VISIBLE, SESSION_INVISIBLE))) {
$session_visibility = SESSION_VISIBLE_READ_ONLY;
}
}
$sql = "SELECT user_id FROM $tbl_session_rel_course_rel_user
WHERE session_id = $id_session AND status = 0";
$result = Database::query($sql);
$existingUsers = array();
while ($row = Database::fetch_array($result)) {
$existingUsers[] = $row['user_id'];
}
$sql = "SELECT c_id FROM $tbl_session_rel_course
WHERE session_id = $id_session";
$result = Database::query($sql);
$course_list = array();
while ($row = Database::fetch_array($result)) {
$course_list[] = $row['c_id'];
}
if ($send_email) {
// Sending emails only
if (is_array($user_list) && count($user_list) > 0) {
foreach ($user_list as $user_id) {
if (!in_array($user_id, $existingUsers)) {
$subject = '[' . api_get_setting('siteName') . '] ' . get_lang('YourReg') . ' ' . api_get_setting('siteName');
$user_info = api_get_user_info($user_id);
$content = get_lang('Dear') . " " . stripslashes($user_info['complete_name']) . ",\n\n" . sprintf(get_lang('YouAreRegisterToSessionX'), $session_name) . " \n\n" . get_lang('Address') . " " . get_setting('siteName') . " " . get_lang('Is') . " : " . api_get_path(WEB_PATH) . "\n\n" . get_lang('Problem') . "\n\n" . get_lang('SignatureFormula') . ",\n\n" . get_setting('administratorName') . " " . get_setting('administratorSurname') . "\n" . get_lang('Manager') . " " . get_setting('siteName') . "\nT. " . get_setting('administratorTelephone') . "\n" . get_lang('Email') . " : " . get_setting('emailAdministrator');
MessageManager::send_message(
$user_id,
$subject,
$content,
array(),
array(),
null,
null,
null,
null,
null
);
}
}
}
}
foreach ($course_list as $courseId) {
// for each course in the session
$nbr_users = 0;
$courseId = intval($courseId);
$sql = "SELECT DISTINCT user_id
FROM $tbl_session_rel_course_rel_user
WHERE
session_id = $id_session AND
c_id = $courseId AND
status = 0
";
$result = Database::query($sql);
$existingUsers = array();
while ($row = Database::fetch_array($result)) {
$existingUsers[] = $row['user_id'];
}
// Delete existing users
if ($empty_users) {
foreach ($existingUsers as $existing_user) {
if (!in_array($existing_user, $user_list)) {
$sql = "DELETE FROM $tbl_session_rel_course_rel_user
WHERE
session_id = $id_session AND
c_id = $courseId AND
user_id = $existing_user AND
status = 0 ";
$result = Database::query($sql);
Event::addEvent(
LOG_SESSION_DELETE_USER_COURSE,
LOG_USER_ID,
$existing_user,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$id_session
);
if (Database::affected_rows($result)) {
$nbr_users--;
}
}
}
}
// Replace with this new function
// insert new users into session_rel_course_rel_user and ignore if they already exist
foreach ($user_list as $enreg_user) {
if (!in_array($enreg_user, $existingUsers)) {
$enreg_user = Database::escape_string($enreg_user);
$sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user (session_id, c_id, user_id, visibility, status)
VALUES($id_session, $courseId, $enreg_user, $session_visibility, 0)";
$result = Database::query($sql);
Event::addEvent(
LOG_SESSION_ADD_USER_COURSE,
LOG_USER_ID,
$enreg_user,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$id_session
);
if (Database::affected_rows($result)) {
$nbr_users++;
}
}
}
// Count users in this session-course relation
$sql = "SELECT COUNT(user_id) as nbUsers
FROM $tbl_session_rel_course_rel_user
WHERE session_id = $id_session AND c_id = $courseId AND status<>2";
$rs = Database::query($sql);
list($nbr_users) = Database::fetch_array($rs);
// update the session-course relation to add the users total
$sql = "UPDATE $tbl_session_rel_course SET nbr_users = $nbr_users
WHERE session_id = $id_session AND c_id = $courseId";
Database::query($sql);
}
// Delete users from the session
if ($empty_users === true) {
$sql = "DELETE FROM $tbl_session_rel_user
WHERE session_id = $id_session AND relation_type<>" . SESSION_RELATION_TYPE_RRHH . "";
Database::query($sql);
}
// Insert missing users into session
$nbr_users = 0;
foreach ($user_list as $enreg_user) {
$enreg_user = Database::escape_string($enreg_user);
$nbr_users++;
$sql = "INSERT IGNORE INTO $tbl_session_rel_user (relation_type, session_id, user_id)
VALUES (0, $id_session, $enreg_user)";
Database::query($sql);
}
// update number of users in the session
$nbr_users = count($user_list);
if ($empty_users) {
// update number of users in the session
$sql = "UPDATE $tbl_session SET nbr_users= $nbr_users
WHERE id = $id_session ";
Database::query($sql);
} else {
$sql = "UPDATE $tbl_session SET nbr_users = nbr_users + $nbr_users
WHERE id = $id_session";
Database::query($sql);
}
}
/**
* Returns user list of the current users subscribed in the course-session
* @param int $sessionId
* @param array $courseInfo
* @param int $status
*
* @return array
*/
public static function getUsersByCourseSession(
$sessionId,
$courseInfo,
$status = null
) {
$sessionId = intval($sessionId);
$courseCode = $courseInfo['code'];
$courseId = $courseInfo['real_id'];
if (empty($sessionId) || empty($courseCode)) {
return array();
}
$statusCondition = null;
if (isset($status) && !is_null($status)) {
$status = intval($status);
$statusCondition = " AND status = $status";
}
$table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sql = "SELECT DISTINCT user_id
FROM $table
WHERE
session_id = $sessionId AND
c_id = $courseId
$statusCondition
";
$result = Database::query($sql);
$existingUsers = array();
while ($row = Database::fetch_array($result)) {
$existingUsers[] = $row['user_id'];
}
return $existingUsers;
}
/**
* Remove a list of users from a course-session
* @param array $userList
* @param int $sessionId
* @param array $courseInfo
* @param int $status
* @param bool $updateTotal
* @return bool
*/
public static function removeUsersFromCourseSession(
$userList,
$sessionId,
$courseInfo,
$status = null,
$updateTotal = true
) {
$table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tableSessionCourse = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$sessionId = intval($sessionId);
if (empty($sessionId) || empty($userList) || empty($courseInfo)) {
return false;
}
$courseCode = Database::escape_string($courseInfo['code']);
$courseId = $courseInfo['real_id'];
$statusCondition = null;
if (isset($status) && !is_null($status)) {
$status = intval($status);
$statusCondition = " AND status = $status";
}
foreach ($userList as $userId) {
$userId = intval($userId);
$sql = "DELETE FROM $table
WHERE
session_id = $sessionId AND
c_id = $courseId AND
user_id = $userId
$statusCondition
";
Database::query($sql);
}
if ($updateTotal) {
// Count users in this session-course relation
$sql = "SELECT COUNT(user_id) as nbUsers
FROM $table
WHERE
session_id = $sessionId AND
c_id = $courseId AND
status <> 2";
$result = Database::query($sql);
list($userCount) = Database::fetch_array($result);
// update the session-course relation to add the users total
$sql = "UPDATE $tableSessionCourse
SET nbr_users = $userCount
WHERE
session_id = $sessionId AND
c_id = $courseId";
Database::query($sql);
}
}
/**
* Subscribe a user to an specific course inside a session.
*
* @param array $user_list
* @param int $session_id
* @param string $course_code
* @param int $session_visibility
* @param bool $removeUsersNotInList
* @return bool
*/
public static function subscribe_users_to_session_course(
$user_list,
$session_id,
$course_code,
$session_visibility = SESSION_VISIBLE_READ_ONLY,
$removeUsersNotInList = false
) {
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
if (empty($session_id) || empty($course_code)) {
return false;
}
$session_id = intval($session_id);
$course_code = Database::escape_string($course_code);
$courseInfo = api_get_course_info($course_code);
$courseId = $courseInfo['real_id'];
$session_visibility = intval($session_visibility);
if ($removeUsersNotInList) {
$currentUsers = self::getUsersByCourseSession($session_id, $courseInfo, 0);
if (!empty($user_list)) {
$userToDelete = array_diff($currentUsers, $user_list);
} else {
$userToDelete = $currentUsers;
}
if (!empty($userToDelete)) {
self::removeUsersFromCourseSession(
$userToDelete,
$session_id,
$courseInfo,
0,
true
);
}
}
$nbr_users = 0;
foreach ($user_list as $enreg_user) {
$enreg_user = intval($enreg_user);
// Checking if user exists in session - course - user table.
$sql = "SELECT count(user_id) as count
FROM $tbl_session_rel_course_rel_user
WHERE
session_id = $session_id AND
c_id = $courseId and
user_id = $enreg_user ";
$result = Database::query($sql);
$count = 0;
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result, 'ASSOC');
$count = $row['count'];
}
if ($count == 0) {
$sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user (session_id, c_id, user_id, visibility)
VALUES ($session_id, $courseId, $enreg_user, $session_visibility)";
$result = Database::query($sql);
if (Database::affected_rows($result)) {
$nbr_users++;
}
}
// Checking if user exists in session - user table.
$sql = "SELECT count(user_id) as count
FROM $tbl_session_rel_user
WHERE session_id = $session_id AND user_id = $enreg_user ";
$result = Database::query($sql);
$count = 0;
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result, 'ASSOC');
$count = $row['count'];
}
if (empty($count)) {
// If user is not registered to a session then add it.
$sql = "INSERT IGNORE INTO $tbl_session_rel_user (session_id, user_id)
VALUES ($session_id, $enreg_user)";
Database::query($sql);
$sql = "UPDATE $tbl_session SET nbr_users = nbr_users + 1
WHERE id = $session_id ";
Database::query($sql);
}
}
// count users in this session-course relation
$sql = "SELECT COUNT(user_id) as nbUsers
FROM $tbl_session_rel_course_rel_user
WHERE session_id = $session_id AND c_id = $courseId AND status <> 2";
$rs = Database::query($sql);
list($nbr_users) = Database::fetch_array($rs);
// update the session-course relation to add the users total
$sql = "UPDATE $tbl_session_rel_course
SET nbr_users = $nbr_users
WHERE session_id = $session_id AND c_id = $courseId";
Database::query($sql);
}
/**
* Unsubscribe user from session
*
* @param int Session id
* @param int User id
* @return bool True in case of success, false in case of error
*/
public static function unsubscribe_user_from_session($session_id, $user_id)
{
$session_id = (int) $session_id;
$user_id = (int) $user_id;
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$delete_sql = "DELETE FROM $tbl_session_rel_user
WHERE
session_id = $session_id AND
user_id = $user_id AND
relation_type <> " . SESSION_RELATION_TYPE_RRHH . "";
$result = Database::query($delete_sql);
$return = Database::affected_rows($result);
// Update number of users
$sql = "UPDATE $tbl_session
SET nbr_users = nbr_users - $return
WHERE id = $session_id ";
Database::query($sql);
// Get the list of courses related to this session
$course_list = SessionManager::get_course_list_by_session_id($session_id);
if (!empty($course_list)) {
foreach ($course_list as $course) {
$courseId = $course['id'];
// Delete user from course
$sql = "DELETE FROM $tbl_session_rel_course_rel_user
WHERE session_id = $session_id AND c_id = $courseId AND user_id = $user_id";
$result = Database::query($sql);
Event::addEvent(
LOG_SESSION_DELETE_USER_COURSE,
LOG_USER_ID,
$user_id,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$session_id
);
if (Database::affected_rows($result)) {
// Update number of users in this relation
$sql = "UPDATE $tbl_session_rel_course SET nbr_users = nbr_users - 1
WHERE session_id = $session_id AND c_id = $courseId";
Database::query($sql);
}
}
}
return true;
}
/**
* Subscribes courses to the given session and optionally (default)
* unsubscribes previous users
* @author Carlos Vargas from existing code
* @param int $sessionId
* @param array $courseList List of courses int ids
* @param bool $removeExistingCoursesUsers Whether to unsubscribe
* existing courses and users (true, default) or not (false)
* @return void Nothing, or false on error
* */
public static function add_courses_to_session(
$sessionId,
$courseList,
$removeExistingCoursesWithUsers = true
) {
$sessionId = intval($sessionId);
if (empty($sessionId) || empty($courseList)) {
return false;
}
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
// Get list of courses subscribed to this session
$sql = "SELECT c_id
FROM $tbl_session_rel_course
WHERE session_id = $sessionId";
$rs = Database::query($sql );
$existingCourses = Database::store_result($rs);
$nbr_courses = count($existingCourses);
// get list of users subscribed to this session
$sql = "SELECT user_id
FROM $tbl_session_rel_user
WHERE
session_id = $sessionId AND
relation_type<>" . SESSION_RELATION_TYPE_RRHH . "";
$result = Database::query($sql);
$user_list = Database::store_result($result);
// Remove existing courses from the session.
if ($removeExistingCoursesWithUsers === true && !empty($existingCourses)) {
foreach ($existingCourses as $existingCourse) {
if (!in_array($existingCourse['c_id'], $courseList)) {
$courseInfo = api_get_course_info_by_id($existingCourse['c_id']);
$sql = "DELETE FROM $tbl_session_rel_course
WHERE c_id = " . $existingCourse['c_id'] . " AND session_id = $sessionId";
Database::query($sql);
$sql = "DELETE FROM $tbl_session_rel_course_rel_user
WHERE c_id = " . $existingCourse['c_id'] . " AND session_id = $sessionId";
Database::query($sql);
Event::addEvent(
LOG_SESSION_DELETE_COURSE,
LOG_COURSE_ID,
$existingCourse['c_id'],
api_get_utc_datetime(),
api_get_user_id(),
$existingCourse['c_id'],
$sessionId
);
CourseManager::remove_course_ranking(
$existingCourse['c_id'],
$sessionId
);
$nbr_courses--;
}
}
}
// Pass through the courses list we want to add to the session
foreach ($courseList as $courseId) {
$exists = false;
// check if the course we want to add is already subscribed
foreach ($existingCourses as $existingCourse) {
if ($courseId == $existingCourse['c_id']) {
$exists = true;
}
}
if (!$exists) {
//if the course isn't subscribed yet
$sql = "INSERT INTO $tbl_session_rel_course (session_id, c_id)
VALUES ($sessionId, $courseId)";
Database::query($sql);
Event::addEvent(
LOG_SESSION_ADD_COURSE,
LOG_COURSE_ID,
$courseId,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$sessionId
);
// We add the current course in the existing courses array,
// to avoid adding another time the current course
$existingCourses[] = array('c_id' => $courseId);
$nbr_courses++;
// subscribe all the users from the session to this course inside the session
$nbr_users = 0;
foreach ($user_list as $enreg_user) {
$enreg_user_id = intval($enreg_user['user_id']);
$sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user (session_id, c_id, user_id)
VALUES ($sessionId, $courseId, $enreg_user_id)";
$result = Database::query($sql);
Event::addEvent(
LOG_SESSION_ADD_USER_COURSE,
LOG_USER_ID,
$enreg_user_id,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$sessionId
);
if (Database::affected_rows($result)) {
$nbr_users++;
}
}
$sql = "UPDATE $tbl_session_rel_course
SET nbr_users = $nbr_users
WHERE session_id = $sessionId AND c_id = $courseId";
Database::query($sql);
}
}
$sql = "UPDATE $tbl_session
SET nbr_courses = $nbr_courses
WHERE id = $sessionId";
Database::query($sql);
}
/**
* Unsubscribe course from a session
*
* @param int Session id
* @param int Course id
* @return bool True in case of success, false otherwise
*/
public static function unsubscribe_course_from_session($session_id, $course_id)
{
$session_id = (int) $session_id;
$course_id = (int) $course_id;
$tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
// Get course code
$course_code = CourseManager::get_course_code_from_course_id($course_id);
$course_id = intval($course_id);
if (empty($course_code)) {
return false;
}
// Unsubscribe course
$sql = "DELETE FROM $tbl_session_rel_course
WHERE c_id = $course_id AND session_id = $session_id";
$result = Database::query($sql);
$nb_affected = Database::affected_rows($result);
$sql = "DELETE FROM $tbl_session_rel_course_rel_user
WHERE c_id = $course_id AND session_id = $session_id";
Database::query($sql);
Event::addEvent(
LOG_SESSION_DELETE_COURSE,
LOG_COURSE_ID,
$course_id,
api_get_utc_datetime(),
api_get_user_id(),
$course_id,
$session_id
);
if ($nb_affected > 0) {
// Update number of courses in the session
$sql = "UPDATE $tbl_session SET nbr_courses= nbr_courses - $nb_affected
WHERE id = $session_id";
Database::query($sql);
return true;
} else {
return false;
}
}
/**
* Creates a new extra field for a given session
* @param string $variable Field's internal variable name
* @param int $fieldType Field's type
* @param string $displayText Field's language var name
* @return int new extra field id
*/
public static function create_session_extra_field($variable, $fieldType, $displayText)
{
$extraField = new ExtraField('session');
$params = [
'variable' => $variable,
'field_type' => $fieldType,
'display_text' => $displayText,
];
return $extraField->save($params);
}
/**
* Update an extra field value for a given session
* @param integer Course ID
* @param string Field variable name
* @param string Field value
* @return boolean true if field updated, false otherwise
*/
public static function update_session_extra_field_value($sessionId, $variable, $value = '')
{
$extraFieldValue = new ExtraFieldValue('session');
$params = [
'item_id' => $sessionId,
'variable' => $variable,
'value' => $value
];
$extraFieldValue->save($params);
}
/**
* Checks the relationship between a session and a course.
* @param int $session_id
* @param int $courseId
* @return bool Returns TRUE if the session and the course are related, FALSE otherwise.
* */
public static function relation_session_course_exist($session_id, $courseId)
{
$tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$return_value = false;
$sql = "SELECT c_id FROM $tbl_session_course
WHERE
session_id = " . intval($session_id) . " AND
c_id = " . intval($courseId) . "";
$result = Database::query($sql);
$num = Database::num_rows($result);
if ($num > 0) {
$return_value = true;
}
return $return_value;
}
/**
* Get the session information by name
* @param string session name
* @return mixed false if the session does not exist, array if the session exist
* */
public static function get_session_by_name($session_name)
{
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$session_name = trim($session_name);
if (empty($session_name)) {
return false;
}
$sql = 'SELECT *
FROM ' . $tbl_session . '
WHERE name = "' . Database::escape_string($session_name) . '"';
$result = Database::query($sql);
$num = Database::num_rows($result);
if ($num > 0) {
return Database::fetch_array($result);
} else {
return false;
}
}
/**
* Create a session category
* @author Jhon Hinojosa