Browse Source

Read "max_subscribed_students" course extra field to block subscription

See BT#15114
Julio Montoya 6 years ago
parent
commit
02f1ba7b40

+ 1 - 1
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,

+ 53 - 22
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 = [

+ 1 - 1
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();

+ 33 - 9
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));
                     }
                 }
             }