/**
     * 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 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 course_code
                FROM $tbl_session_rel_course
                WHERE id_session=$sessionId";
        $rs = Database::query($sql );
        $existingCourses = Database::store_result($rs);
        $nbr_courses = count($existingCourses);

        // get list of users subscribed to this session
        $sql = "SELECT id_user
                FROM $tbl_session_rel_user
                WHERE
                    id_session = $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) {
            foreach ($existingCourses as $existingCourse) {
                if (!in_array($existingCourse['course_code'], $courseList)) {
                    $courseInfo = api_get_course_info($existingCourse['course_code']);

                    $sql = "DELETE FROM $tbl_session_rel_course
                            WHERE course_code='" . $existingCourse['course_code'] . "' AND id_session=$sessionId";
                    Database::query($sql);

                    $sql = "DELETE FROM $tbl_session_rel_course_rel_user
                            WHERE course_code='" . $existingCourse['course_code'] . "' AND id_session=$sessionId";
                    Database::query($sql);

                    CourseManager::remove_course_ranking(
                        $courseInfo['real_id'],
                        $sessionId
                    );

                    $nbr_courses--;
                }
            }
        }

        // Pass through the courses list we want to add to the session
        foreach ($courseList as $enreg_course) {
            $enreg_course = Database::escape_string($enreg_course);
            $exists = false;
            // check if the course we want to add is already subscribed
            foreach ($existingCourses as $existingCourse) {
                if ($enreg_course == $existingCourse['course_code']) {
                    $exists = true;
                }
            }

            if (!$exists) {
                //if the course isn't subscribed yet
                $sql = "INSERT INTO $tbl_session_rel_course (id_session, course_code)
                        VALUES ('$sessionId','$enreg_course')";
                Database::query($sql);

                //We add the current course in the existing courses array, to avoid adding another time the current course
                $existingCourses[] = array('course_code' => $enreg_course);
                $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['id_user']);
                    $sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user (id_session, course_code, id_user)
                            VALUES ($sessionId,'$enreg_course',$enreg_user_id)";
                    Database::query($sql);
                    if (Database::affected_rows()) {
                        $nbr_users++;
                    }
                }
                $sql = "UPDATE $tbl_session_rel_course
                        SET nbr_users=$nbr_users
                        WHERE id_session='$sessionId' AND course_code='$enreg_course'";
                Database::query($sql);
            }
        }

        $sql = "UPDATE $tbl_session
                SET nbr_courses = $nbr_courses
                WHERE id = '$sessionId'";
        Database::query($sql);
    }
 /**
  * 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\n                FROM {$tbl_session_rel_course}\n                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\n                FROM {$tbl_session_rel_user}\n                WHERE\n                    session_id = {$sessionId} AND\n                    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}\n                            WHERE\n                                c_id = " . $existingCourse['c_id'] . " AND\n                                session_id = {$sessionId}";
                 Database::query($sql);
                 $sql = "DELETE FROM {$tbl_session_rel_course_rel_user}\n                            WHERE\n                                c_id = " . $existingCourse['c_id'] . " AND\n                                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)\n                        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)\n                            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}\n                        SET nbr_users = {$nbr_users}\n                        WHERE session_id = {$sessionId} AND c_id = {$courseId}";
             Database::query($sql);
         }
     }
     $sql = "UPDATE {$tbl_session}\n                SET nbr_courses = {$nbr_courses}\n                WHERE id = {$sessionId}";
     Database::query($sql);
 }
            foreach ($UserList as $enreg_user) {
                $enreg_user = Database::escape_string($enreg_user['id_user']);
                $sql_insert = "INSERT IGNORE INTO {$tbl_session_rel_course_rel_user}(id_session,course_code,id_user)\n                               VALUES('{$id_session}','{$enreg_course}','{$enreg_user}')";
                Database::query($sql_insert);
                if (Database::affected_rows()) {
                    $nbr_users++;
                }
            }
            SessionManager::installCourse($id_session, $course_info['real_id']);
            Database::query("UPDATE {$tbl_session_rel_course} SET nbr_users={$nbr_users} WHERE id_session='{$id_session}' AND course_code='{$enreg_course}'");
        }
    }
    foreach ($existingCourses as $existingCourse) {
        if (!in_array($existingCourse['course_code'], $CourseList)) {
            $course_info = api_get_course_info($existingCourse['course_code']);
            CourseManager::remove_course_ranking($course_info['real_id'], $id_session);
            Database::query("DELETE FROM {$tbl_session_rel_course} WHERE course_code='" . $existingCourse['course_code'] . "' AND id_session={$id_session}");
            Database::query("DELETE FROM {$tbl_session_rel_course_rel_user} WHERE course_code='" . $existingCourse['course_code'] . "' AND id_session={$id_session}");
            SessionManager::unInstallCourse($id_session, $course_info['real_id']);
        }
    }
    $nbr_courses = count($CourseList);
    Database::query("UPDATE {$tbl_session} SET nbr_courses={$nbr_courses} WHERE id='{$id_session}'");
    if (isset($add)) {
        header('Location: add_users_to_session.php?id_session=' . $id_session . '&add=true');
    } else {
        header('Location: resume_session.php?id_session=' . $id_session);
    }
    exit;
}
// display the header