/** * Update a course. * * Please note this functions does not verify any access control, * the calling code is responsible for all validation (usually it is the form definition). * * @param object $data - all the data needed for an entry in the 'course' table * @param array $editoroptions course description editor options * @return void */ function update_course($data, $editoroptions = NULL) { global $CFG, $DB; $data->timemodified = time(); $oldcourse = $DB->get_record('course', array('id' => $data->id), '*', MUST_EXIST); $context = get_context_instance(CONTEXT_COURSE, $oldcourse->id); if ($editoroptions) { $data = file_postupdate_standard_editor($data, 'summary', $editoroptions, $context, 'course', 'summary', 0); } if (!isset($data->category) or empty($data->category)) { // prevent nulls and 0 in category field unset($data->category); } $movecat = (isset($data->category) and $oldcourse->category != $data->category); if (!isset($data->visible)) { // data not from form, add missing visibility info $data->visible = $oldcourse->visible; } if ($data->visible != $oldcourse->visible) { // reset the visibleold flag when manually hiding/unhiding course $data->visibleold = $data->visible; } else { if ($movecat) { $newcategory = $DB->get_record('course_categories', array('id' => $data->category)); if (empty($newcategory->visible)) { // make sure when moving into hidden category the course is hidden automatically $data->visible = 0; } } } // Update with the new data $DB->update_record('course', $data); $course = $DB->get_record('course', array('id' => $data->id)); if ($movecat) { $newparent = get_context_instance(CONTEXT_COURSECAT, $course->category); context_moved($context, $newparent); } fix_course_sortorder(); // Test for and remove blocks which aren't appropriate anymore blocks_remove_inappropriate($course); // Save any custom role names. save_local_role_names($course->id, $data); // update enrol settings enrol_course_updated(false, $course, $data); add_to_log($course->id, "course", "update", "edit.php?id={$course->id}", $course->id); // Trigger events events_trigger('course_updated', $course); }
/** * Update a course. * * Please note this functions does not verify any access control, * the calling code is responsible for all validation (usually it is the form definition). * * @param object $data - all the data needed for an entry in the 'course' table * @param array $editoroptions course description editor options * @return void */ function update_course($data, $editoroptions = NULL) { global $DB; $data->timemodified = time(); $oldcourse = course_get_format($data->id)->get_course(); $context = context_course::instance($oldcourse->id); if ($editoroptions) { $data = file_postupdate_standard_editor($data, 'summary', $editoroptions, $context, 'course', 'summary', 0); } if ($overviewfilesoptions = course_overviewfiles_options($data->id)) { $data = file_postupdate_standard_filemanager($data, 'overviewfiles', $overviewfilesoptions, $context, 'course', 'overviewfiles', 0); } // Check we don't have a duplicate shortname. if (!empty($data->shortname) && $oldcourse->shortname != $data->shortname) { if ($DB->record_exists_sql('SELECT id from {course} WHERE shortname = ? AND id <> ?', array($data->shortname, $data->id))) { throw new moodle_exception('shortnametaken', '', '', $data->shortname); } } // Check we don't have a duplicate idnumber. if (!empty($data->idnumber) && $oldcourse->idnumber != $data->idnumber) { if ($DB->record_exists_sql('SELECT id from {course} WHERE idnumber = ? AND id <> ?', array($data->idnumber, $data->id))) { throw new moodle_exception('courseidnumbertaken', '', '', $data->idnumber); } } if (!isset($data->category) or empty($data->category)) { // prevent nulls and 0 in category field unset($data->category); } $changesincoursecat = $movecat = (isset($data->category) and $oldcourse->category != $data->category); if (!isset($data->visible)) { // data not from form, add missing visibility info $data->visible = $oldcourse->visible; } if ($data->visible != $oldcourse->visible) { // reset the visibleold flag when manually hiding/unhiding course $data->visibleold = $data->visible; $changesincoursecat = true; } else { if ($movecat) { $newcategory = $DB->get_record('course_categories', array('id' => $data->category)); if (empty($newcategory->visible)) { // make sure when moving into hidden category the course is hidden automatically $data->visible = 0; } } } // Update with the new data $DB->update_record('course', $data); // make sure the modinfo cache is reset rebuild_course_cache($data->id); // update course format options with full course data course_get_format($data->id)->update_course_format_options($data, $oldcourse); $course = $DB->get_record('course', array('id' => $data->id)); if ($movecat) { $newparent = context_coursecat::instance($course->category); $context->update_moved($newparent); } $fixcoursesortorder = $movecat || isset($data->sortorder) && $oldcourse->sortorder != $data->sortorder; if ($fixcoursesortorder) { fix_course_sortorder(); } // purge appropriate caches in case fix_course_sortorder() did not change anything cache_helper::purge_by_event('changesincourse'); if ($changesincoursecat) { cache_helper::purge_by_event('changesincoursecat'); } // Test for and remove blocks which aren't appropriate anymore blocks_remove_inappropriate($course); // Save any custom role names. save_local_role_names($course->id, $data); // update enrol settings enrol_course_updated(false, $course, $data); // Trigger a course updated event. $event = \core\event\course_updated::create(array('objectid' => $course->id, 'context' => context_course::instance($course->id), 'other' => array('shortname' => $course->shortname, 'fullname' => $course->fullname))); $event->set_legacy_logdata(array($course->id, 'course', 'update', 'edit.php?id=' . $course->id, $course->id)); $event->trigger(); if ($oldcourse->format !== $course->format) { // Remove all options stored for the previous format // We assume that new course format migrated everything it needed watching trigger // 'course_updated' and in method format_XXX::update_course_format_options() $DB->delete_records('course_format_options', array('courseid' => $course->id, 'format' => $oldcourse->format)); } }
/** * Update a course. * * Please note this functions does not verify any access control, * the calling code is responsible for all validation (usually it is the form definition). * * @param object $data - all the data needed for an entry in the 'course' table * @param array $editoroptions course description editor options * @return void */ function update_course($data, $editoroptions = NULL) { global $CFG, $DB; $data->timemodified = time(); $oldcourse = course_get_format($data->id)->get_course(); $context = context_course::instance($oldcourse->id); if ($editoroptions) { $data = file_postupdate_standard_editor($data, 'summary', $editoroptions, $context, 'course', 'summary', 0); } if ($overviewfilesoptions = course_overviewfiles_options($data->id)) { $data = file_postupdate_standard_filemanager($data, 'overviewfiles', $overviewfilesoptions, $context, 'course', 'overviewfiles', 0); } if (!isset($data->category) or empty($data->category)) { // prevent nulls and 0 in category field unset($data->category); } $changesincoursecat = $movecat = (isset($data->category) and $oldcourse->category != $data->category); if (!isset($data->visible)) { // data not from form, add missing visibility info $data->visible = $oldcourse->visible; } if ($data->visible != $oldcourse->visible) { // reset the visibleold flag when manually hiding/unhiding course $data->visibleold = $data->visible; $changesincoursecat = true; } else { if ($movecat) { $newcategory = $DB->get_record('course_categories', array('id' => $data->category)); if (empty($newcategory->visible)) { // make sure when moving into hidden category the course is hidden automatically $data->visible = 0; } } } // Update with the new data $DB->update_record('course', $data); // make sure the modinfo cache is reset rebuild_course_cache($data->id); // update course format options with full course data course_get_format($data->id)->update_course_format_options($data, $oldcourse); $course = $DB->get_record('course', array('id' => $data->id)); if ($movecat) { $newparent = context_coursecat::instance($course->category); context_moved($context, $newparent); } fix_course_sortorder(); // purge appropriate caches in case fix_course_sortorder() did not change anything cache_helper::purge_by_event('changesincourse'); if ($changesincoursecat) { cache_helper::purge_by_event('changesincoursecat'); } // Test for and remove blocks which aren't appropriate anymore blocks_remove_inappropriate($course); // Save any custom role names. save_local_role_names($course->id, $data); // update enrol settings enrol_course_updated(false, $course, $data); add_to_log($course->id, "course", "update", "edit.php?id={$course->id}", $course->id); // Trigger events events_trigger('course_updated', $course); if ($oldcourse->format !== $course->format) { // Remove all options stored for the previous format // We assume that new course format migrated everything it needed watching trigger // 'course_updated' and in method format_XXX::update_course_format_options() $DB->delete_records('course_format_options', array('courseid' => $course->id, 'format' => $oldcourse->format)); } }
/** * Update a course and return true or false * * @param object $data - all the data needed for an entry in the 'course' table */ function update_course($data) { global $USER, $CFG; // Preprocess allowed mods $allowedmods = empty($data->allowedmods) ? array() : $data->allowedmods; unset($data->allowedmods); // Normal teachers can't change setting if (!has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { unset($data->restrictmodules); } $movecat = false; $oldcourse = get_record('course', 'id', $data->id); // should not fail, already tested above if (!has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $oldcourse->category)) or !has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $data->category))) { // can not move to new category, keep the old one unset($data->category); } elseif ($oldcourse->category != $data->category) { $movecat = true; } // Update with the new data if (update_record('course', $data)) { $course = get_record('course', 'id', $data->id); add_to_log($course->id, "course", "update", "edit.php?id={$course->id}", $course->id); // "Admins" can change allowed mods for a course if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { update_restricted_mods($course, $allowedmods); } if ($movecat) { $context = get_context_instance(CONTEXT_COURSE, $course->id); $newparent = get_context_instance(CONTEXT_COURSECAT, $course->category); context_moved($context, $newparent); } fix_course_sortorder(); // Test for and remove blocks which aren't appropriate anymore $page = page_create_object(PAGE_COURSE_VIEW, $course->id); blocks_remove_inappropriate($page); // Save any custom role names. save_local_role_names($course->id, $data); // Trigger events events_trigger('course_updated', $course); return true; } return false; }
/** * Update a course and return true or false * * @param object $data - all the data needed for an entry in the 'course' table */ function update_course($data) { global $USER, $CFG; // Preprocess allowed mods $allowedmods = empty($data->allowedmods) ? array() : $data->allowedmods; unset($data->allowedmods); // Normal teachers can't change setting if (!has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { unset($data->restrictmodules); } $movecat = false; $oldcourse = get_record('course', 'id', $data->id); // should not fail, already tested above if (!has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $oldcourse->category)) or !has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $data->category))) { // can not move to new category, keep the old one unset($data->category); } elseif ($oldcourse->category != $data->category) { $movecat = true; } // Update with the new data if (update_record('course', $data)) { $course = get_record('course', 'id', $data->id); add_to_log($course->id, "course", "update", "edit.php?id={$course->id}", $course->id); // "Admins" can change allowed mods for a course if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { update_restricted_mods($course, $allowedmods); } if ($movecat) { $context = get_context_instance(CONTEXT_COURSE, $course->id); $newparent = get_context_instance(CONTEXT_COURSECAT, $course->category); context_moved($context, $newparent); } fix_course_sortorder(); // Test for and remove blocks which aren't appropriate anymore $page = page_create_object(PAGE_COURSE_VIEW, $course->id); blocks_remove_inappropriate($page); // put custom role names into db $context = get_context_instance(CONTEXT_COURSE, $course->id); foreach ($data as $dname => $dvalue) { // is this the right param? $dvalue = clean_param($dvalue, PARAM_NOTAGS); if (!strstr($dname, 'role_')) { continue; } $dt = explode('_', $dname); $roleid = $dt[1]; // make up our mind whether we want to delete, update or insert if (empty($dvalue)) { delete_records('role_names', 'contextid', $context->id, 'roleid', $roleid); } else { if ($t = get_record('role_names', 'contextid', $context->id, 'roleid', $roleid)) { $t->name = $dvalue; update_record('role_names', $t); } else { $t->contextid = $context->id; $t->roleid = $roleid; $t->name = $dvalue; insert_record('role_names', $t); } } } //trigger events events_trigger('course_updated', $course); return true; } return false; }
function update_course($data) { global $USER, $CFG; // preprocess allowed mods $allowedmods = empty($data->allowedmods) ? array() : $data->allowedmods; unset($data->allowedmods); if (!has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { unset($data->restrictmodules); } $oldcourse = get_record('course', 'id', $data->id); // should not fail, already tested above if (!has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $oldcourse->category)) or !has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $data->category))) { // can not move to new category, keep the old one unset($data->category); } // Update with the new data if (update_record('course', $data)) { $course = get_record('course', 'id', $data->id); add_to_log($course->id, "course", "update", "edit.php?id={$course->id}", $course->id); if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { update_restricted_mods($course, $allowedmods); } fix_course_sortorder(); // Test for and remove blocks which aren't appropriate anymore $page = page_create_object(PAGE_COURSE_VIEW, $course->id); blocks_remove_inappropriate($page); return true; } return false; }