diff --git a/main/course_info/infocours.php b/main/course_info/infocours.php index 8021f32db6..c0b5ff8e86 100755 --- a/main/course_info/infocours.php +++ b/main/course_info/infocours.php @@ -129,7 +129,7 @@ $form->applyFilter('department_url', 'html_filter'); $extra_field = new ExtraField('course'); $extraFieldAdminPermissions = false; -$showOnlyTheseFields = ['tags', 'video_url', 'course_hours_duration']; +$showOnlyTheseFields = ['tags', 'video_url', 'course_hours_duration', 'max_subscribed_students']; $extra = $extra_field->addElements( $form, $courseId, diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index c23e4099ef..d0e7d7712c 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -598,7 +598,7 @@ class CourseManager $status = ($status == STUDENT || $status == COURSEMANAGER) ? $status : STUDENT; - // A preliminary check whether the user has bben already registered on the platform. + // A preliminary check whether the user has been already registered on the platform. $sql = "SELECT status FROM ".Database::get_main_table(TABLE_MAIN_USER)." WHERE user_id = $user_id"; if (Database::num_rows(Database::query($sql)) == 0) { @@ -646,36 +646,42 @@ class CourseManager $courseId, $session_id ); + + return true; } else { - self::add_user_to_course( + $userAdded = self::add_user_to_course( $user_id, $courseCode, $status, $userCourseCategoryId ); - // Add event to the system log - Event::addEvent( - LOG_SUBSCRIBE_USER_TO_COURSE, - LOG_COURSE_CODE, - $courseCode, - api_get_utc_datetime(), - api_get_user_id(), - $courseId - ); + if ($userAdded) { + // Add event to the system log + Event::addEvent( + LOG_SUBSCRIBE_USER_TO_COURSE, + LOG_COURSE_CODE, + $courseCode, + api_get_utc_datetime(), + api_get_user_id(), + $courseId + ); - $userInfo = api_get_user_info($user_id); - Event::addEvent( - LOG_SUBSCRIBE_USER_TO_COURSE, - LOG_USER_OBJECT, - $userInfo, - api_get_utc_datetime(), - api_get_user_id(), - $courseId - ); - } + $userInfo = api_get_user_info($user_id); + Event::addEvent( + LOG_SUBSCRIBE_USER_TO_COURSE, + LOG_USER_OBJECT, + $userInfo, + api_get_utc_datetime(), + api_get_user_id(), + $courseId + ); - return true; + return true; + } + + return false; + } } /** @@ -812,6 +818,31 @@ class CourseManager } } + if ($status === STUDENT) { + // Check if max students per course extra field is set + $extraFieldValue = new ExtraFieldValue('course'); + $value = $extraFieldValue->get_values_by_handler_and_field_variable($courseId, 'max_subscribed_students'); + if (!empty($value) && isset($value['value'])) { + $maxStudents = $value['value']; + if ($maxStudents !== '') { + $maxStudents = (int) $maxStudents; + $count = self::get_user_list_from_course_code( + $courseCode, + 0, + null, + null, + null, + true, + false + ); + + if ($count >= $maxStudents) { + return false; + } + } + } + } + // Ok, subscribe the user. $max_sort = api_max_sort_value('0', $user_id); $params = [ diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 6e266d238d..ccc5dac21c 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -3404,7 +3404,7 @@ class SessionManager $noCoach = false ) { // Definition of variables - $userId = intval($userId); + $userId = (int) $userId; $sessionId = !empty($sessionId) ? intval($sessionId) : api_get_session_id(); $courseId = !empty($courseId) ? intval($courseId) : api_get_course_id(); diff --git a/main/user/subscribe_user.php b/main/user/subscribe_user.php index 5d753a70a4..f047031638 100755 --- a/main/user/subscribe_user.php +++ b/main/user/subscribe_user.php @@ -71,19 +71,25 @@ if (isset($_REQUEST['register'])) { ); Display::addFlash(Display::return_message($message)); } else { - CourseManager::subscribe_user( + $result = CourseManager::subscribe_user( $_REQUEST['user_id'], $courseInfo['code'], COURSEMANAGER ); - Display::addFlash(Display::return_message($message)); + if ($result) { + Display::addFlash(Display::return_message($message)); + } } } else { - CourseManager::subscribe_user( + $result = CourseManager::subscribe_user( $_REQUEST['user_id'], $courseInfo['code'] ); - Display::addFlash(Display::return_message($message)); + if ($result) { + Display::addFlash(Display::return_message($message)); + } else { + Display::addFlash(Display::return_message(get_lang('ErrorContactPlatformAdmin'), 'warning')); + } } } header('Location:'.api_get_path(WEB_CODE_PATH).'user/user.php?'.api_get_cidreq().'&type='.$type); @@ -94,31 +100,49 @@ if (isset($_POST['action'])) { switch ($_POST['action']) { case 'subscribe': if (is_array($_POST['user'])) { + $isSuscribe = []; foreach ($_POST['user'] as $index => $user_id) { $userInfo = api_get_user_info($user_id); if ($userInfo) { + $message = $userInfo['complete_name_with_username'].' '.get_lang('AddedToCourse'); if ($type === COURSEMANAGER) { if (!empty($sessionId)) { - $is_suscribe[] = SessionManager::set_coach_to_course_session( + $result = SessionManager::set_coach_to_course_session( $user_id, $sessionId, $courseInfo['real_id'] ); + if ($result) { + $isSuscribe[] = $message; + } } else { - $is_suscribe[] = CourseManager::subscribe_user( + $result = CourseManager::subscribe_user( $user_id, $courseInfo['code'], COURSEMANAGER ); + + if ($result) { + $isSuscribe[] = $message; + } } } else { - $is_suscribe[] = CourseManager::subscribe_user( + $result = CourseManager::subscribe_user( $user_id, $courseInfo['code'] ); + if ($result) { + $isSuscribe[] = $message; + } else { + $isSuscribe[] = get_lang('ErrorContactPlatformAdmin').' '.$userInfo['complete_name_with_username']; + } } - $message = $userInfo['complete_name_with_username'].' '.get_lang('AddedToCourse'); - Display::addFlash(Display::return_message($message)); + } + } + + if (!empty($isSuscribe)) { + foreach ($isSuscribe as $info) { + Display::addFlash(Display::return_message($info)); } } }