diff --git a/admin/oacleanup.php b/admin/oacleanup.php
index 5c63495acc7..a27aff9341f 100644
--- a/admin/oacleanup.php
+++ b/admin/oacleanup.php
@@ -59,8 +59,8 @@ function online_assignment_cleanup($output=false) {
if ($output) echo $OUTPUT->heading($fullname);
/// retrieve a list of sections beyond what is currently being shown
- $course = course_get_format($course)->get_course();
- if (!isset($course->numsections)) {
+ $courseformatoptions = course_get_format($course)->get_format_options();
+ if (!isset($courseformatoptions['numsections'])) {
// Course format does not use numsections
if ($output) {
echo 'No extra sections
';
@@ -71,7 +71,7 @@ function online_assignment_cleanup($output=false) {
FROM {course_sections}
WHERE course=? AND section>?
ORDER BY section ASC";
- $params = array($course->id, $course->numsections);
+ $params = array($course->id, $courseformatoptions['numsections']);
if (!($xsections = $DB->get_records_sql($sql, $params))) {
if ($output) echo 'No extra sections
';
continue;
@@ -102,7 +102,7 @@ function online_assignment_cleanup($output=false) {
/// the journal update erroneously stored it in course_sections->section
$newsection = $xsection->section;
/// double check the new section
- if ($newsection > $course->numsections) {
+ if ($newsection > $courseformatoptions['numsections']) {
/// get the record for section 0 for this course
if (!($zerosection = $DB->get_record('course_sections', array('course'=>$course->id, 'section'=>'0')))) {
continue;
diff --git a/blocks/section_links/block_section_links.php b/blocks/section_links/block_section_links.php
index c0b8b335908..2942b477c4a 100644
--- a/blocks/section_links/block_section_links.php
+++ b/blocks/section_links/block_section_links.php
@@ -71,7 +71,8 @@ class block_section_links extends block_base {
return $this->content;
}
- $course = course_get_format($this->page->course)->get_course();
+ $course = $this->page->course;
+ $courseformatoptions = course_get_format($course)->get_format_options();
$context = context_course::instance($course->id);
if ($course->format == 'weeks' or $course->format == 'weekscss') {
@@ -86,18 +87,18 @@ class block_section_links extends block_base {
}
$inc = 1;
- if(!empty($config->numsections1) and ($course->numsections > $config->numsections1)) {
+ if(!empty($config->numsections1) and ($courseformatoptions['numsections'] > $config->numsections1)) {
$inc = $config->incby1;
} else {
- if ($course->numsections > 22) {
+ if ($courseformatoptions['numsections'] > 22) {
$inc = 2;
}
}
- if(!empty($config->numsections2) and ($course->numsections > $config->numsections2)) {
+ if(!empty($config->numsections2) and ($courseformatoptions['numsections'] > $config->numsections2)) {
$inc = $config->incby2;
} else {
- if ($course->numsections > 40) {
+ if ($courseformatoptions['numsections'] > 40) {
$inc = 5;
}
}
@@ -105,12 +106,12 @@ class block_section_links extends block_base {
$sql = "SELECT section, visible
FROM {course_sections}
WHERE course = ? AND
- section < ".($course->numsections+1)."
+ section < ".($courseformatoptions['numsections']+1)."
ORDER BY section";
if ($sections = $DB->get_records_sql($sql, array($course->id))) {
$text = '
';
- for ($i = $inc; $i <= $course->numsections; $i += $inc) {
+ for ($i = $inc; $i <= $courseformatoptions['numsections']; $i += $inc) {
if (!isset($sections[$i])) {
continue;
}
diff --git a/course/changenumsections.php b/course/changenumsections.php
index 7cc4b618963..deed3670e85 100644
--- a/course/changenumsections.php
+++ b/course/changenumsections.php
@@ -30,7 +30,8 @@ require_once($CFG->dirroot.'/course/lib.php');
$courseid = required_param('courseid', PARAM_INT);
$increase = optional_param('increase', true, PARAM_BOOL);
-$course = course_get_format($courseid)->get_course();
+$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
+$courseformatoptions = course_get_format($course)->get_format_options();
$PAGE->set_url('/course/changenumsections.php', array('courseid' => $courseid));
@@ -39,19 +40,20 @@ require_login($course);
require_capability('moodle/course:update', context_course::instance($course->id));
require_sesskey();
-if (isset($course->numsections)) {
+if (isset($courseformatoptions['numsections'])) {
if ($increase) {
// Add an additional section.
- $course->numsections++;
+ $courseformatoptions['numsections']++;
} else {
// Remove a section.
- $course->numsections--;
+ $courseformatoptions['numsections']--;
}
// Don't go less than 0, intentionally redirect silently (for the case of
// double clicks).
- if ($course->numsections >= 0) {
- course_get_format($course)->update_course_format_options(array('numsections' => $course->numsections));
+ if ($courseformatoptions['numsections'] >= 0) {
+ course_get_format($course)->update_course_format_options(
+ array('numsections' => $courseformatoptions['numsections']));
}
}
diff --git a/course/lib.php b/course/lib.php
index 40270a96e63..5f5535b1218 100644
--- a/course/lib.php
+++ b/course/lib.php
@@ -2939,8 +2939,10 @@ function move_section($course, $section, $move) {
$sectiondest = $section + $move;
- $course = course_get_format($course)->get_course();
- if (isset($course->numsections) && $sectiondest > $course->numsections or $sectiondest < 1) {
+ // compartibility with course formats using field 'numsections'
+ $courseformatoptions = course_get_format($course)->get_format_options();
+ if (array_key_exists('numsections', $courseformatoptions) &&
+ $sectiondest > $courseformatoptions['numsections'] or $sectiondest < 1) {
return false;
}
@@ -2966,8 +2968,10 @@ function move_section_to($course, $section, $destination) {
return true;
}
- $course = course_get_format($course)->get_course();
- if ((isset($course->numsections) && ($destination > $course->numsections)) || ($destination < 1)) {
+ // compartibility with course formats using field 'numsections'
+ $courseformatoptions = course_get_format($course)->get_format_options();
+ if ((array_key_exists('numsections', $courseformatoptions) &&
+ ($destination > $courseformatoptions['numsections'])) || ($destination < 1)) {
return false;
}
diff --git a/course/tests/externallib_test.php b/course/tests/externallib_test.php
index 3b0470d0f84..a037d34f7c6 100644
--- a/course/tests/externallib_test.php
+++ b/course/tests/externallib_test.php
@@ -359,64 +359,64 @@ class core_course_external_testcase extends externallib_advanced_testcase {
// Check that the courses were correctly created.
foreach ($createdcourses as $createdcourse) {
- $dbcourse = course_get_format($createdcourse['id'])->get_course();
+ $courseinfo = course_get_format($createdcourse['id'])->get_course();
if ($createdcourse['shortname'] == $course2['shortname']) {
- $this->assertEquals($dbcourse->fullname, $course2['fullname']);
- $this->assertEquals($dbcourse->shortname, $course2['shortname']);
- $this->assertEquals($dbcourse->category, $course2['categoryid']);
- $this->assertEquals($dbcourse->idnumber, $course2['idnumber']);
- $this->assertEquals($dbcourse->summary, $course2['summary']);
- $this->assertEquals($dbcourse->summaryformat, $course2['summaryformat']);
- $this->assertEquals($dbcourse->format, $course2['format']);
- $this->assertEquals($dbcourse->showgrades, $course2['showgrades']);
- $this->assertEquals($dbcourse->newsitems, $course2['newsitems']);
- $this->assertEquals($dbcourse->startdate, $course2['startdate']);
- $this->assertEquals($dbcourse->numsections, $course2['numsections']);
- $this->assertEquals($dbcourse->maxbytes, $course2['maxbytes']);
- $this->assertEquals($dbcourse->showreports, $course2['showreports']);
- $this->assertEquals($dbcourse->visible, $course2['visible']);
- $this->assertEquals($dbcourse->hiddensections, $course2['hiddensections']);
- $this->assertEquals($dbcourse->groupmode, $course2['groupmode']);
- $this->assertEquals($dbcourse->groupmodeforce, $course2['groupmodeforce']);
- $this->assertEquals($dbcourse->defaultgroupingid, $course2['defaultgroupingid']);
- $this->assertEquals($dbcourse->completionnotify, $course2['completionnotify']);
- $this->assertEquals($dbcourse->lang, $course2['lang']);
+ $this->assertEquals($courseinfo->fullname, $course2['fullname']);
+ $this->assertEquals($courseinfo->shortname, $course2['shortname']);
+ $this->assertEquals($courseinfo->category, $course2['categoryid']);
+ $this->assertEquals($courseinfo->idnumber, $course2['idnumber']);
+ $this->assertEquals($courseinfo->summary, $course2['summary']);
+ $this->assertEquals($courseinfo->summaryformat, $course2['summaryformat']);
+ $this->assertEquals($courseinfo->format, $course2['format']);
+ $this->assertEquals($courseinfo->showgrades, $course2['showgrades']);
+ $this->assertEquals($courseinfo->newsitems, $course2['newsitems']);
+ $this->assertEquals($courseinfo->startdate, $course2['startdate']);
+ $this->assertEquals($courseinfo->numsections, $course2['numsections']);
+ $this->assertEquals($courseinfo->maxbytes, $course2['maxbytes']);
+ $this->assertEquals($courseinfo->showreports, $course2['showreports']);
+ $this->assertEquals($courseinfo->visible, $course2['visible']);
+ $this->assertEquals($courseinfo->hiddensections, $course2['hiddensections']);
+ $this->assertEquals($courseinfo->groupmode, $course2['groupmode']);
+ $this->assertEquals($courseinfo->groupmodeforce, $course2['groupmodeforce']);
+ $this->assertEquals($courseinfo->defaultgroupingid, $course2['defaultgroupingid']);
+ $this->assertEquals($courseinfo->completionnotify, $course2['completionnotify']);
+ $this->assertEquals($courseinfo->lang, $course2['lang']);
if (!empty($CFG->allowcoursethemes)) {
- $this->assertEquals($dbcourse->theme, $course2['forcetheme']);
+ $this->assertEquals($courseinfo->theme, $course2['forcetheme']);
}
if (completion_info::is_enabled_for_site()) {
- $this->assertEquals($dbcourse->enablecompletion, $course2['enabledcompletion']);
- $this->assertEquals($dbcourse->completionstartonenrol, $course2['completionstartonenrol']);
+ $this->assertEquals($courseinfo->enablecompletion, $course2['enabledcompletion']);
+ $this->assertEquals($courseinfo->completionstartonenrol, $course2['completionstartonenrol']);
} else {
- $this->assertEquals($dbcourse->enablecompletion, 0);
- $this->assertEquals($dbcourse->completionstartonenrol, 0);
+ $this->assertEquals($courseinfo->enablecompletion, 0);
+ $this->assertEquals($courseinfo->completionstartonenrol, 0);
}
} else if ($createdcourse['shortname'] == $course1['shortname']) {
$courseconfig = get_config('moodlecourse');
- $this->assertEquals($dbcourse->fullname, $course1['fullname']);
- $this->assertEquals($dbcourse->shortname, $course1['shortname']);
- $this->assertEquals($dbcourse->category, $course1['categoryid']);
- $this->assertEquals($dbcourse->summaryformat, FORMAT_HTML);
- $this->assertEquals($dbcourse->format, $courseconfig->format);
- $this->assertEquals($dbcourse->showgrades, $courseconfig->showgrades);
- $this->assertEquals($dbcourse->newsitems, $courseconfig->newsitems);
- $this->assertEquals($dbcourse->maxbytes, $courseconfig->maxbytes);
- $this->assertEquals($dbcourse->showreports, $courseconfig->showreports);
- $this->assertEquals($dbcourse->groupmode, $courseconfig->groupmode);
- $this->assertEquals($dbcourse->groupmodeforce, $courseconfig->groupmodeforce);
- $this->assertEquals($dbcourse->defaultgroupingid, 0);
+ $this->assertEquals($courseinfo->fullname, $course1['fullname']);
+ $this->assertEquals($courseinfo->shortname, $course1['shortname']);
+ $this->assertEquals($courseinfo->category, $course1['categoryid']);
+ $this->assertEquals($courseinfo->summaryformat, FORMAT_HTML);
+ $this->assertEquals($courseinfo->format, $courseconfig->format);
+ $this->assertEquals($courseinfo->showgrades, $courseconfig->showgrades);
+ $this->assertEquals($courseinfo->newsitems, $courseconfig->newsitems);
+ $this->assertEquals($courseinfo->maxbytes, $courseconfig->maxbytes);
+ $this->assertEquals($courseinfo->showreports, $courseconfig->showreports);
+ $this->assertEquals($courseinfo->groupmode, $courseconfig->groupmode);
+ $this->assertEquals($courseinfo->groupmodeforce, $courseconfig->groupmodeforce);
+ $this->assertEquals($courseinfo->defaultgroupingid, 0);
} else if ($createdcourse['shortname'] == $course3['shortname']) {
- $this->assertEquals($dbcourse->fullname, $course3['fullname']);
- $this->assertEquals($dbcourse->shortname, $course3['shortname']);
- $this->assertEquals($dbcourse->category, $course3['categoryid']);
- $this->assertEquals($dbcourse->format, $course3['format']);
- $this->assertEquals($dbcourse->hiddensections, $course3options['hiddensections']);
- $this->assertEquals($dbcourse->numsections, $course3options['numsections']);
- $this->assertEquals($dbcourse->coursedisplay, $course3options['coursedisplay']);
+ $this->assertEquals($courseinfo->fullname, $course3['fullname']);
+ $this->assertEquals($courseinfo->shortname, $course3['shortname']);
+ $this->assertEquals($courseinfo->category, $course3['categoryid']);
+ $this->assertEquals($courseinfo->format, $course3['format']);
+ $this->assertEquals($courseinfo->hiddensections, $course3options['hiddensections']);
+ $this->assertEquals($courseinfo->numsections, $course3options['numsections']);
+ $this->assertEquals($courseinfo->coursedisplay, $course3options['coursedisplay']);
} else {
throw moodle_exception('Unexpected shortname');
}
diff --git a/enrol/database/tests/sync_test.php b/enrol/database/tests/sync_test.php
index 46caefbedc9..8a32b6a39ed 100644
--- a/enrol/database/tests/sync_test.php
+++ b/enrol/database/tests/sync_test.php
@@ -684,8 +684,8 @@ class enrol_database_testcase extends advanced_testcase {
$course8['category'] = $defcat->id;
$record = $DB->get_record('course', $course8);
$this->assertFalse(empty($record));
- $createdcourse = course_get_format($record)->get_course();
- $this->assertEquals($createdcourse->numsections, 666);
+ $courseformatoptions = course_get_format($record)->get_format_options();
+ $this->assertEquals($courseformatoptions['numsections'], 666);
// Test invalid category.
diff --git a/index.php b/index.php
index de9421689c1..35c8eeb5e84 100644
--- a/index.php
+++ b/index.php
@@ -98,7 +98,7 @@
echo $OUTPUT->header();
/// Print Section or custom info
- $site = course_get_format($SITE)->get_course();
+ $siteformatoptions = course_get_format($SITE)->get_format_options();
$modinfo = get_fast_modinfo($SITE);
$modnames = get_module_types_names();
$modnamesplural = get_module_types_names(true);
@@ -108,7 +108,7 @@
if (!empty($CFG->customfrontpageinclude)) {
include($CFG->customfrontpageinclude);
- } else if ($site->numsections > 0) {
+ } else if ($siteformatoptions['numsections'] > 0) {
if ($editing) {
// make sure section with number 1 exists
course_create_sections_if_missing($SITE, 1);
diff --git a/lib/navigationlib.php b/lib/navigationlib.php
index ba6a8287141..3ebac4dda3b 100644
--- a/lib/navigationlib.php
+++ b/lib/navigationlib.php
@@ -1886,12 +1886,15 @@ class global_navigation extends navigation_node {
global $CFG;
require_once($CFG->dirroot.'/course/lib.php');
- $course = course_get_format($course)->get_course(); // retrieve all format options as well
$modinfo = get_fast_modinfo($course);
$sections = $modinfo->get_section_info_all();
- if (isset($course->numsections)) {
- $sections = array_slice($sections, 0, $course->numsections+1, true);
+
+ // For course formats using 'numsections' trim the sections list
+ $courseformatoptions = course_get_format($course)->get_format_options();
+ if (isset($courseformatoptions['numsections'])) {
+ $sections = array_slice($sections, 0, $courseformatoptions['numsections']+1, true);
}
+
$activities = array();
foreach ($sections as $key => $section) {
diff --git a/lib/weblib.php b/lib/weblib.php
index 957a8704923..6be03c9b2dd 100644
--- a/lib/weblib.php
+++ b/lib/weblib.php
@@ -2187,7 +2187,7 @@ function navmenulist($course, $sections, $modinfo, $strsection, $strjumpto, $wid
$menu = array();
$doneheading = false;
- $course = course_get_format($course)->get_course();
+ $courseformatoptions = course_get_format($course)->get_format_options();
$coursecontext = context_course::instance($course->id);
$menu[] = '