diff --git a/admin/oacleanup.php b/admin/oacleanup.php new file mode 100644 index 00000000000..4c89b8b1804 --- /dev/null +++ b/admin/oacleanup.php @@ -0,0 +1,148 @@ +'; + } + + // get the module id for assignments from db + $arecord = get_record('modules', 'name', 'assignment'); + $aid = $arecord->id; + + + /// get a list of all courses on this site + $courses = get_courses(); + + /// cycle through each course + foreach ($courses as $course) { + + $fullname = empty($course->fullname) ? 'Course: '.$course->id : $course->fullname; + if ($output) print_heading($fullname); + + /// retrieve a list of sections beyond what is currently being shown + $sql = 'SELECT * FROM '.$CFG->prefix.'course_sections WHERE `course`='.$course->id.' AND `section`>'.$course->numsections.' ORDER BY `section` ASC'; + if (!($xsections = get_records_sql($sql))) { + if ($output) echo 'No extra sections
'; + continue; + } + + /// cycle through each of the xtra sections + foreach ($xsections as $xsection) { + + if ($output) echo 'Checking Section: '.$xsection->section.'
'; + + /// grab any module instances from the sequence field + if (!empty($xsection->sequence)) { + $instances = explode(',', $xsection->sequence); + + /// cycle through the instances + foreach ($instances as $instance) { + /// is this an instance of an online assignment + $sql = "SELECT a.id + FROM {$CFG->prefix}course_modules cm, + {$CFG->prefix}assignment a + WHERE cm.id = '$instance' AND + cm.module = '$aid' AND + cm.instance = a.id AND + a.assignmenttype = 'online'"; + + + /// if record exists then we need to move instance to it's correct section + if (record_exists_sql($sql)) { + + /// check the new section id + /// the journal update erroneously stored it in course_sections->section + $newsection = $xsection->section; + /// double check the new section + if ($newsection > $course->numsections) { + /// get the record for section 0 for this course + if (!($zerosection = get_record('course_sections', 'course', $course->id, 'section', '0'))) { + continue; + } + $newsection = $zerosection->id; + } + + /// grab the section record + if (!($section = get_record('course_sections', 'id', $newsection))) { + if ($output) echo 'Serious error: Cannot retrieve section: '.$newsection.' for course: '.$course->fullname.'
'; + continue; + } + + /// explode the sequence + if (($sequence = explode(',', $section->sequence)) === false) { + $sequence = array(); + } + + /// add instance to correct section + array_push($sequence, $instance); + + /// implode the sequence + $section->sequence = implode(',', $sequence); + + set_field('course_sections', 'sequence', $section->sequence, 'id', $section->id); + + /// now we need to remove the instance from the old sequence + + /// grab the old section record + if (!($section = get_record('course_sections', 'id', $xsection->id))) { + if ($output) echo 'Serious error: Cannot retrieve old section: '.$xsection->id.' for course: '.$course->fullname.'
'; + continue; + } + + /// explode the sequence + if (($sequence = explode(',', $section->sequence)) === false) { + $sequence = array(); + } + + /// remove the old value from the array + $key = array_search($instance, $sequence); + unset($sequence[$key]); + + /// implode the sequence + $section->sequence = implode(',', $sequence); + + set_field('course_sections', 'sequence', $section->sequence, 'id', $section->id); + + + if ($output) echo 'Online Assignment (instance '.$instance.') moved from section '.$section->id.': to section '.$newsection.'
'; + + } + } + } + + /// if the summary and sequence are empty then remove this section + if (empty($xsection->summary) and empty($xsection->sequence)) { + delete_records('course_sections', 'id', $xsection->id); + if ($output) echo 'Deleting empty section '.$xsection->section.'
'; + } + } + } + + echo ''; +} + +?>