Ver Fonte

Adding course extra_fields and settings in order to avoid calls to the DB

Julio Montoya há 11 anos atrás
pai
commit
de8a0f597d
4 ficheiros alterados com 48 adições e 15 exclusões
  1. 18 1
      main/inc/lib/course.lib.php
  2. 27 10
      main/inc/lib/main_api.lib.php
  3. 1 2
      main/inc/local.inc.php
  4. 2 2
      main/inc/routes.php

+ 18 - 1
main/inc/lib/course.lib.php

@@ -4883,6 +4883,23 @@ class CourseManager
         return $info ? $info['course_code'] : false;
     }
 
-
+    /**
+     * @param $courseId
+     * @return array
+     */
+    public static function getCourseSettings($courseId)
+    {
+        $settingTable = Database::get_course_table(TABLE_COURSE_SETTING);
+        $courseId = intval($courseId);
+        $sql = "SELECT * FROM $settingTable WHERE c_id = $courseId";
+        $result = Database::query($sql);
+        $settings = array();
+        if (Database::num_rows($result)) {
+            while ($row = Database::fetch_array($result, 'ASSOC')) {
+                $settings[$row['variable']] = $row;
+            }
+        }
+        return $settings;
+    }
 
 } //end class CourseManager

+ 27 - 10
main/inc/lib/main_api.lib.php

@@ -1423,14 +1423,20 @@ function api_get_course_path($course_code = null) {
  */
 function api_get_course_setting($setting_name, $course_code = null) {
     $course_info = api_get_course_info($course_code);
-	$table 		 = Database::get_course_table(TABLE_COURSE_SETTING);
-    $setting_name = Database::escape_string($setting_name);
-    if (!empty($course_info['real_id']) && !empty($setting_name)) {
-        $sql = "SELECT value FROM $table WHERE c_id = {$course_info['real_id']} AND variable = '$setting_name'";
-        $res = Database::query($sql);
-        if (Database::num_rows($res) > 0) {
-            $row = Database::fetch_array($res);
-            return $row['value'];
+
+    if (isset($course_info['settings']) && isset($course_info['settings'][$setting_name])) {
+        return $course_info['settings'][$setting_name]['value'];
+    } else {
+        //var_dump($course_info);
+        $table 		 = Database::get_course_table(TABLE_COURSE_SETTING);
+        $setting_name = Database::escape_string($setting_name);
+        if (!empty($course_info['real_id']) && !empty($setting_name)) {
+            $sql = "SELECT value FROM $table WHERE c_id = {$course_info['real_id']} AND variable = '$setting_name'";
+            $res = Database::query($sql);
+            if (Database::num_rows($res) > 0) {
+                $row = Database::fetch_array($res);
+                return $row['value'];
+            }
         }
     }
     return -1;
@@ -1501,7 +1507,7 @@ function api_get_cidreq($add_session_id = true, $add_group_id = true) {
  * particular course, not specially the current one.
  * @todo    Same behaviour as api_get_user_info so that api_get_course_id becomes absolete too.
  */
-function api_get_course_info($course_code = null, $add_extra_values = false) {
+function api_get_course_info($course_code = null, $add_extra_values = false, $addCourseSettings = false) {
     if (!empty($course_code)) {
         $course_code        = Database::escape_string($course_code);
         $course_table       = Database::get_main_table(TABLE_MAIN_COURSE);
@@ -1520,6 +1526,11 @@ function api_get_course_info($course_code = null, $add_extra_values = false) {
                 $extra_field_values = new ExtraField('course');
                 $course_data['extra_fields'] = $extra_field_values->get_handler_extra_data($course_code);
             }
+
+            if ($addCourseSettings) {
+                $course_data['settings'] = CourseManager::getCourseSettings($course_data['id']);
+            }
+
             $_course = api_format_course_array($course_data);
         }
         return $_course;
@@ -1564,6 +1575,11 @@ function api_get_course_info_by_id($id = null, $add_extra_values = false) {
     return $_course;
 }
 
+/**
+ * Sets the course array
+ * @param array  $course_data course info
+ * @return array
+ */
 function api_format_course_array($course_data) {
 
     if (empty($course_data)) {
@@ -1624,9 +1640,10 @@ function api_format_course_array($course_data) {
         $url_image = api_get_path(WEB_IMG_PATH).'without_picture.png';
     }
     $_course['course_image'] = $url_image;
+    $_course['extra_fields'] = isset($course_data['extra_fields']) ? $course_data['extra_fields'] : array();
+    $_course['settings'] = isset($course_data['settings']) ? $course_data['settings'] : array();
 
     return $_course;
-
 }
 
 /* STRING MANAGEMENT */

+ 1 - 2
main/inc/local.inc.php

@@ -158,7 +158,6 @@ if (!empty($_SESSION['_user']['user_id']) && !$login) {
                 if (($password == $uData['password'] or $cas_login) and (trim($login) == $uData['username'])) {
 
                     $uData = api_get_user_info($uData['user_id'], false, false, true);
-                    var_dump($uData);
                     $extraFields = $uData['extra_fields'];
                     // $update_type = UserManager::get_extra_user_data_by_field($uData['user_id'], 'update_type');
                     $update_type = isset($extraFields['extra_update_type']) ? $extraFields['extra_update_type'] : null;
@@ -471,7 +470,7 @@ if (isset($uidReset) && $uidReset) {   // session data refresh requested
     $is_allowedCreateCourse = false;
 
     if (isset($_user['user_id']) && $_user['user_id'] && !api_is_anonymous()) {
-    // a uid is given (log in succeeded)
+        // a uid is given (log in succeeded)
         $user_table     = Database::get_main_table(TABLE_MAIN_USER);
         $admin_table    = Database::get_main_table(TABLE_MAIN_ADMIN);
         $track_e_login  = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);

+ 2 - 2
main/inc/routes.php

@@ -54,7 +54,7 @@ $settingCourseConditions = function (Request $request) use ($cidReset, $app) {
 
     if ($courseReset) {
         if (!empty($cidReq) && $cidReq != -1) {
-            $courseInfo = api_get_course_info($cidReq);
+            $courseInfo = api_get_course_info($cidReq, true, true);
 
             if (!empty($courseInfo)) {
                 $courseCode = $courseInfo['code'];
@@ -173,7 +173,7 @@ $userPermissionsInsideACourse = function (Request $request) use ($app) {
 
             //Check if user is subscribed in a course
             $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
-            $sql               = "SELECT * FROM $course_user_table WHERE   user_id  = '".$userId."' AND
+            $sql               = "SELECT * FROM $course_user_table WHERE user_id  = '".$userId."' AND
                                   relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND c_id = ".api_get_course_int_id();
 
             $result = Database::query($sql);