Browse Source

Fix sql errors see BT#9433

Julio Montoya 10 years ago
parent
commit
1ae6b8bbc5
1 changed files with 33 additions and 15 deletions
  1. 33 15
      main/inc/lib/course.lib.php

+ 33 - 15
main/inc/lib/course.lib.php

@@ -1349,11 +1349,19 @@ class CourseManager
             $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER) . '  au ON (au.user_id = user.user_id) ';
         }
 
+        $extraFieldWasAdded = false;
         if ($return_count && $resumed_report) {
             foreach ($extra_field as $extraField) {
                 $extraFieldInfo = UserManager::get_extra_field_information_by_name($extraField);
-                $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES) . ' as ufv
-                          ON (user.user_id = ufv.user_id AND (field_id = ' . $extraFieldInfo['id'] . ' OR field_id IS NULL ) )';
+                if (!empty($extraFieldInfo)) {
+                    $fieldValuesTable = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
+                    $sql .= ' LEFT JOIN '.$fieldValuesTable.' as ufv
+                            ON (
+                                user.user_id = ufv.user_id AND
+                                (field_id = '.$extraFieldInfo['id'].' OR field_id IS NULL)
+                            )';
+                    $extraFieldWasAdded = true;
+                }
             }
         }
 
@@ -1364,7 +1372,7 @@ class CourseManager
             $sql .= " AND (access_url_id =  $current_access_url_id ) ";
         }
 
-        if ($return_count && $resumed_report) {
+        if ($return_count && $resumed_report && $extraFieldWasAdded) {
             $sql .= ' AND field_id IS NOT NULL GROUP BY field_value ';
         }
 
@@ -1427,29 +1435,38 @@ class CourseManager
                 $course_code = isset($user['code']) ? $user['code'] : null;
 
                 if ($add_reports) {
-
                     if ($resumed_report) {
-                        foreach ($extra_fields as $extra) {
-                            if (in_array($extra['1'], $extra_field)) {
-                                $user_data = UserManager::get_extra_user_data_by_field($user['user_id'], $extra['1']);
-                                break;
+                        $extra = array();
+
+                        if (!empty($extra_fields)) {
+                            foreach ($extra_fields as $extra) {
+                                if (in_array($extra['1'], $extra_field)) {
+                                    $user_data = UserManager::get_extra_user_data_by_field(
+                                        $user['user_id'],
+                                        $extra['1']
+                                    );
+                                    break;
+                                }
                             }
                         }
 
-                        if (empty($user_data[$extra['1']])) {
-                            $row_key = '-1';
-                            $name = '-';
-                        } else {
-                            $row_key = $user_data[$extra['1']];
-                            $name = $user_data[$extra['1']];
+                        $row_key = '-1';
+                        $name = '-';
+
+                        if (!empty($extra)) {
+                            if (!empty($user_data[$extra['1']])) {
+                                $row_key = $user_data[$extra['1']];
+                                $name = $user_data[$extra['1']];
+                                $users[$row_key]['extra_'.$extra['1']] = $name;
+                            }
                         }
 
-                        $users[$row_key]['extra_' . $extra['1']] = $name;
                         $users[$row_key]['training_hours'] += Tracking::get_time_spent_on_the_course(
                             $user['user_id'],
                             $courseId,
                             $sessionId
                         );
+
                         $users[$row_key]['count_users'] += $counter;
 
                         $registered_users_with_extra_field = 0;
@@ -1518,6 +1535,7 @@ class CourseManager
                             null,
                             $sessionId
                         );
+
                         $report_info['certificate'] = Display::label(get_lang('No'));
                         if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) {
                             $report_info['certificate'] = Display::label(get_lang('Yes'), 'success');