MDL-13114 tool_uploadcourse: Ensure category is properly resolved
authorFrederic Massart <fred@moodle.com>
Mon, 1 Jul 2013 01:51:34 +0000 (09:51 +0800)
committerFrederic Massart <fred@moodle.com>
Mon, 15 Jul 2013 02:02:54 +0000 (10:02 +0800)
admin/tool/uploadcourse/classes/course.php
admin/tool/uploadcourse/classes/helper.php

index fc6bd09..c2720bd 100644 (file)
@@ -430,6 +430,18 @@ class tool_uploadcourse_course {
         $updatemode = $this->updatemode;
         $usedefaults = $this->can_use_defaults();
 
+        // Resolve the category, and fail if not found.
+        $errors = array();
+        $catid = tool_uploadcourse_helper::resolve_category($this->rawdata, $errors);
+        if (empty($errors)) {
+            $coursedata['category'] = $catid;
+        } else {
+            foreach ($errors as $key => $message) {
+                $this->error($key, $message);
+            }
+            return false;
+        }
+
         // If the course does not exist, or will be forced created.
         if (!$exists || $mode === tool_uploadcourse_processor::MODE_CREATE_ALL) {
 
@@ -514,7 +526,7 @@ class tool_uploadcourse_course {
                     array('from' => $original, 'to' => $this->shortname)));
                 if (isset($coursedata['idnumber'])) {
                     $originalidn = $coursedata['idnumber'];
-                    $coursedata['idnumber'] = $this->increment_idnumber($coursedata['idnumber']);
+                    $coursedata['idnumber'] = tool_uploadcourse_helper::increment_idnumber($coursedata['idnumber']);
                     if ($originalidn != $coursedata['idnumber']) {
                         $this->status('courseidnumberincremented', new lang_string('courseidnumberincremented', 'tool_uploadcourse',
                             array('from' => $originalidn, 'to' => $coursedata['idnumber'])));
@@ -555,18 +567,6 @@ class tool_uploadcourse_course {
                 return false;
         }
 
-        // Resolve the category.
-        $errors = array();
-        $catid = tool_uploadcourse_helper::resolve_category($this->rawdata, $errors);
-        if (!empty($catid) && empty($errors)) {
-            $coursedata['category'] = $catid;
-        } else if (!empty($errors)) {
-            foreach ($errors as $key => $message) {
-                $this->error($key, $message);
-            }
-            return false;
-        }
-
         // Get final data.
         if ($exists) {
             $missingonly = ($updatemode === tool_uploadcourse_processor::UPDATE_MISSING_WITH_DATA_OR_DEFAUTLS);
@@ -644,6 +644,7 @@ class tool_uploadcourse_course {
             } else {
                 $this->error('errorwhiledeletingcourse', new lang_string('errorwhiledeletingcourse', 'tool_uploadcourse'));
             }
+            return true;
         } else if ($this->outcome === self::OUTCOME_CREATE) {
             $course = create_course((object) $this->data);
             $this->status('coursecreated', new lang_string('coursecreated', 'tool_uploadcourse'));
index 0e24a33..cb15e96 100644 (file)
@@ -389,7 +389,7 @@ class tool_uploadcourse_helper {
 
         if (!empty($data['category'])) {
             $category = coursecat::get((int) $data['category'], IGNORE_MISSING);
-            if (!empty($category)) {
+            if (!empty($category) && !empty($category->id)) {
                 $catid = $category->id;
             } else {
                 $errors['couldnotresolvecatgorybyid'] =
@@ -399,14 +399,17 @@ class tool_uploadcourse_helper {
 
         if (empty($catid) && !empty($data['category_idnumber'])) {
             $catid = self::resolve_category_by_idnumber($data['category_idnumber']);
-            $errors['couldnotresolvecatgorybyidnumber'] =
-                new lang_string('couldnotresolvecatgorybyidnumber', 'tool_uploadcourse');
+            if (empty($catid)) {
+                $errors['couldnotresolvecatgorybyidnumber'] =
+                    new lang_string('couldnotresolvecatgorybyidnumber', 'tool_uploadcourse');
+            }
         }
-
         if (empty($catid) && !empty($data['category_path'])) {
             $catid = self::resolve_category_by_path(explode(' / ', $data['category_path']));
-            $errors['couldnotresolvecatgorybypath'] =
-                new lang_string('couldnotresolvecatgorybypath', 'tool_uploadcourse');
+            if (empty($catid)) {
+                $errors['couldnotresolvecatgorybypath'] =
+                    new lang_string('couldnotresolvecatgorybypath', 'tool_uploadcourse');
+            }
         }
 
         return $catid;