* $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 Session primary key
* @param string $name
* @param string $startDate
* @param string $endDate
* @param string $displayStartDate
* @param string $displayEndDate
* @param string $coachStartDate
* @param string $coachEndDate
* @param integer $coachId
* @param integer $sessionCategoryId
* @param int $visibility
* @param string $description
* @param bool $showDescription
* @param int $duration
* @param array $extraFields
* @param int $sessionAdminId
* @param boolean $sendSubscritionNotification Optional.
* Whether send a mail notification to users being subscribed
* @return mixed
*/
public static function edit_session(
$id,
$name,
$startDate,
$endDate,
$displayStartDate,
$displayEndDate,
$coachStartDate,
$coachEndDate,
$coachId,
$sessionCategoryId,
$visibility,
$description = null,
$showDescription = 0,
$duration = null,
$extraFields = array(),
$sessionAdminId = 0,
$sendSubscritionNotification = false
) {
$name = trim(stripslashes($name));
$coachId = intval($coachId);
$sessionCategoryId = intval($sessionCategoryId);
$visibility = intval($visibility);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
if (empty($name)) {
$msg = get_lang('SessionNameIsRequired');
return $msg;
} elseif (empty($coachId)) {
$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' => $coachId,
'description'=> $description,
'show_description' => intval($showDescription),
'visibility' => $visibility,
'send_subscription_notification' => $sendSubscritionNotification
];
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($sessionCategoryId)) {
$values['session_category_id'] = $sessionCategoryId;
}
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
* @return bool
*/
public static function suscribe_users_to_session(
$id_session,
$user_list,
$session_visibility = SESSION_VISIBLE_READ_ONLY,
$empty_users = true
) {
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);
$entityManager = Database::getManager();
$session = $entityManager->find('ChamiloCoreBundle:Session', $id_session);
// from function parameter
if (empty($session_visibility)) {
$session_visibility = $session->getVisibility();
//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 (
$session->getSendSubscriptionNotification() &&
is_array($user_list)
) {
// Sending emails only
foreach ($user_list as $user_id) {
if (in_array($user_id, $existingUsers)) {
continue;
}
$tplSubject = new Template(null, false, false, false, false, false);
$layoutSubject = $tplSubject->get_template(
'mail/subject_subscription_to_session_confirmation.tpl'
);
$subject = $tplSubject->fetch($layoutSubject);
$user_info = api_get_user_info($user_id);
$tplContent = new Template(null, false, false, false, false, false);
// Variables for default template
$tplContent->assign(
'complete_name',
stripslashes($user_info['complete_name'])
);
$tplContent->assign('session_name', $session->getName());
$tplContent->assign(
'session_coach',
$session->getGeneralCoach()->getCompleteName()
);
$layoutContent = $tplContent->get_template(
'mail/content_subscription_to_session_confirmation.tpl'
);
$content = $tplContent->fetch($layoutContent);
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, registered_at)
VALUES (0, $id_session, $enreg_user, '" . api_get_utc_datetime() . "')";
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, registered_at)
VALUES ($session_id, $enreg_user, '" . api_get_utc_datetime() . "')";
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 $removeExistingCoursesWithUsers Whether to unsubscribe
* existing courses and users (true, default) or not (false)
* @param $copyEvaluation from base course to session course
* @return void Nothing, or false on error
* */
public static function add_courses_to_session(
$sessionId,
$courseList,
$removeExistingCoursesWithUsers = true,
$copyEvaluation = false
) {
$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)) {
$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) {
$courseInfo = api_get_course_info_by_id($courseId);
// If course doesn't exists continue!
if (empty($courseInfo)) {
continue;
}
$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) {
// Copy gradebook categories and links (from base course)
// to the new course session
if ($copyEvaluation) {
$cats = Category::load(null, null, $courseInfo['code']);
if (!empty($cats)) {
$categoryIdList = [];
/** @var Category $cat */
foreach ($cats as $cat) {
$categoryIdList[$cat->get_id()] = $cat->get_id();
}
$newCategoryIdList = [];
foreach ($cats as $cat) {
$links = $cat->get_links(null, false, $courseInfo['code'], 0);
$cat->set_session_id($sessionId);
$oldCategoryId= $cat->get_id();
$newId = $cat->add();
$newCategoryIdList[$oldCategoryId] = $newId;
$parentId = $cat->get_parent_id();
if (!empty($parentId)) {
$newParentId = $newCategoryIdList[$parentId];
$cat->set_parent_id($newParentId);
$cat->save();
}
/** @var AbstractLink $link */
foreach ($links as $link) {
$newCategoryId = $newCategoryIdList[$link->get_category_id()];
$link->set_category_id($newCategoryId);
$link->add();
}
}
// Create
DocumentManager::generateDefaultCertificate($courseInfo, true, $sessionId);
}
}
// 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