Browse Source

Factorize fillCourse() static method to reduce create_course() complexity as suggested by #scrutinizer

Yannick Warnier 8 years ago
parent
commit
8697dc2c03
1 changed files with 57 additions and 46 deletions
  1. 57 46
      main/inc/lib/course.lib.php

+ 57 - 46
main/inc/lib/course.lib.php

@@ -45,35 +45,17 @@ class CourseManager
             $access_url_id = api_get_current_access_url_id();
         }
 
-        if (isset($_configuration[$access_url_id]) &&
-            is_array($_configuration[$access_url_id])
-        ) {
-            if (isset($_configuration[$access_url_id]['hosting_limit_courses']) &&
-                $_configuration[$access_url_id]['hosting_limit_courses'] > 0
-            ) {
-                $num = self::count_courses($access_url_id);
-                if ($num >= $_configuration[$access_url_id]['hosting_limit_courses']) {
-                    api_warn_hosting_contact('hosting_limit_courses');
-
-                    return api_set_failure(get_lang('PortalCoursesLimitReached'));
-                }
+        if (isset($_configuration[$access_url_id]) && is_array($_configuration[$access_url_id])) {
+            $return = self::checkCreateCourseAccessUrlParam($_configuration, $access_url_id, 'hosting_limit_courses', 'PortalCoursesLimitReached');
+            if ($return != false) {
+                return $return;
             }
-
-            if (isset($_configuration[$access_url_id]['hosting_limit_active_courses']) &&
-                $_configuration[$access_url_id]['hosting_limit_active_courses'] > 0
-            ) {
-                $num = self::countActiveCourses($access_url_id);
-                if ($num >= $_configuration[$access_url_id]['hosting_limit_active_courses']) {
-                    api_warn_hosting_contact('hosting_limit_active_courses');
-
-                    return api_set_failure(
-                        get_lang('PortalActiveCoursesLimitReached')
-                    );
-                }
+            $return = self::checkCreateCourseAccessUrlParam($_configuration, $access_url_id, 'hosting_limit_active_courses', 'PortalActiveCoursesLimitReached');
+            if ($return != false) {
+                return $return;
             }
         }
 
-
         if (empty($params['title'])) {
             return false;
         }
@@ -107,27 +89,7 @@ class CourseManager
                 $course_info = api_get_course_info_by_id($course_id);
 
                 if (!empty($course_info)) {
-                    AddCourse::prepare_course_repository($course_info['directory'], $course_info['code']);
-                    AddCourse::fill_db_course(
-                        $course_id,
-                        $course_info['directory'],
-                        $course_info['course_language'],
-                        $params['exemplary_content']
-                    );
-
-                    if (isset($params['gradebook_model_id'])) {
-                        CourseManager::createDefaultGradebook($params['gradebook_model_id'], $course_info['code']);
-                    }
-                    // If parameter defined, copy the contents from a specific
-                    // template course into this new course
-                    if (isset($params['course_template'])) {
-                        CourseManager::useTemplateAsBasisIfRequired($course_info['id'], $params['course_template']);
-                    }
-                    $params['course_code'] = $course_info['code'];
-                    $params['item_id'] = $course_info['real_id'];
-
-                    $courseFieldValue = new ExtraFieldValue('course');
-                    $courseFieldValue->saveFieldValues($params);
+                    self::fillCourse($course_info, $params);
 
                     return $course_info;
                 }
@@ -5988,4 +5950,53 @@ class CourseManager
 
         return $registered_users_with_extra_field;
     }
+
+    /**
+     * Check if a specific access-url-related setting is a problem or not
+     * @param array $_configuration The $_configuration array
+     * @param int $accessUrlId The access URL ID
+     * @param string $param
+     * @param string $msgLabel
+     * @return bool|string
+     */
+    private static function checkCreateCourseAccessUrlParam($_configuration, $accessUrlId, $param, $msgLabel) {
+        if (isset($_configuration[$accessUrlId][$param]) && $_configuration[$accessUrlId][$param] > 0) {
+            $num = self::count_courses($accessUrlId);
+            if ($num >= $_configuration[$accessUrlId][$param]) {
+                api_warn_hosting_contact($param);
+
+                return api_set_failure(get_lang($msgLabel));
+            }
+        }
+        return false;
+    }
+    /**
+     * Fill course with all necessary items
+     * @param array $courseInfo Course info array
+     * @param array $params Parameters from the course creation form
+     * @return void
+     */
+    private static function fillCourse($courseInfo, $params) {
+        AddCourse::prepare_course_repository($courseInfo['directory'], $courseInfo['code']);
+        AddCourse::fill_db_course(
+            $courseInfo['real_id'],
+            $courseInfo['directory'],
+            $courseInfo['course_language'],
+            $params['exemplary_content']
+        );
+
+        if (isset($params['gradebook_model_id'])) {
+            CourseManager::createDefaultGradebook($params['gradebook_model_id'], $courseInfo['code']);
+        }
+        // If parameter defined, copy the contents from a specific
+        // template course into this new course
+        if (isset($params['course_template'])) {
+            CourseManager::useTemplateAsBasisIfRequired($courseInfo['id'], $params['course_template']);
+        }
+        $params['course_code'] = $courseInfo['code'];
+        $params['item_id'] = $courseInfo['real_id'];
+
+        $courseFieldValue = new ExtraFieldValue('course');
+        $courseFieldValue->saveFieldValues($params);
+    }
 }