} else {
// If not found and not allowed to create, stick with default
$this->log_line('Category '.$group->category.' not found in Moodle database, so using default category instead.');
- $course->category = 1;
+ $course->category = $this->get_default_category_id();
}
} else {
- $course->category = 1;
+ $course->category = $this->get_default_category_id();
}
$course->timecreated = time();
$course->startdate = time();
}
+ /**
+ * Get the default category id (often known as 'Miscellaneous'),
+ * statically cached to avoid multiple DB lookups on big imports.
+ *
+ * @return int id of default category.
+ */
+ private function get_default_category_id() {
+ global $CFG;
+ require_once($CFG->libdir.'/coursecatlib.php');
+
+ static $defaultcategoryid = null;
+
+ if ($defaultcategoryid === null) {
+ $category = coursecat::get_default();
+ $defaultcategoryid = $category->id;
+ }
+
+ return $defaultcategoryid;
+ }
+
+
} // end of class
$this->assertEquals(($prevncourses + 2), $DB->count_records('course'));
}
+ /**
+ * Add new course without a category.
+ */
+ public function test_course_add_default_category() {
+ global $DB, $CFG;
+ require_once($CFG->libdir.'/coursecatlib.php');
+
+ $this->imsplugin->set_config('createnewcategories', false);
+
+ // Delete the default category, to ensure the plugin handles this gracefully.
+ $defaultcat = coursecat::get_default();
+ $defaultcat->delete_full(false);
+
+ // Create an course with the IMS plugin without a category.
+ $course1 = new stdClass();
+ $course1->idnumber = 'id1';
+ $course1->imsshort = 'id1';
+ $course1->category = '';
+ $this->set_xml_file(false, array($course1));
+ $this->imsplugin->cron();
+
+ // Check the course has been created.
+ $dbcourse = $DB->get_record('course', array('idnumber' => $course1->idnumber), '*', MUST_EXIST);
+ // Check that it belongs to a category which exists.
+ $this->assertTrue($DB->record_exists('course_categories', array('id' => $dbcourse->category)));
+ }
/**
* Course attributes mapping to IMS enterprise group description tags