See Release Notes
Long Term Support Release
Differences Between: [Versions 310 and 401] [Versions 311 and 401] [Versions 39 and 401] [Versions 400 and 401] [Versions 401 and 402] [Versions 401 and 403]
1 <?php 2 3 // This file is part of Moodle - http://moodle.org/ 4 // 5 // Moodle is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Moodle is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 17 18 /** 19 * Moves, adds, updates, duplicates or deletes modules in a course 20 * 21 * @copyright 1999 Martin Dougiamas http://dougiamas.com 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 * @package course 24 */ 25 26 require("../config.php"); 27 require_once ("lib.php"); 28 29 $sectionreturn = optional_param('sr', null, PARAM_INT); 30 $add = optional_param('add', '', PARAM_ALPHANUM); 31 $type = optional_param('type', '', PARAM_ALPHA); 32 $indent = optional_param('indent', 0, PARAM_INT); 33 $update = optional_param('update', 0, PARAM_INT); 34 $duplicate = optional_param('duplicate', 0, PARAM_INT); 35 $hide = optional_param('hide', 0, PARAM_INT); 36 $stealth = optional_param('stealth', 0, PARAM_INT); 37 $show = optional_param('show', 0, PARAM_INT); 38 $copy = optional_param('copy', 0, PARAM_INT); 39 $moveto = optional_param('moveto', 0, PARAM_INT); 40 $movetosection = optional_param('movetosection', 0, PARAM_INT); 41 $delete = optional_param('delete', 0, PARAM_INT); 42 $course = optional_param('course', 0, PARAM_INT); 43 $groupmode = optional_param('groupmode', -1, PARAM_INT); 44 $cancelcopy = optional_param('cancelcopy', 0, PARAM_BOOL); 45 $confirm = optional_param('confirm', 0, PARAM_BOOL); 46 47 // This page should always redirect 48 $url = new moodle_url('/course/mod.php'); 49 foreach (compact('indent','update','hide','show','copy','moveto','movetosection','delete','course','cancelcopy','confirm') as $key=>$value) { 50 if ($value !== 0) { 51 $url->param($key, $value); 52 } 53 } 54 $url->param('sr', $sectionreturn); 55 if ($add !== '') { 56 $url->param('add', $add); 57 } 58 if ($type !== '') { 59 $url->param('type', $type); 60 } 61 if ($groupmode !== '') { 62 $url->param('groupmode', $groupmode); 63 } 64 $PAGE->set_url($url); 65 66 require_login(); 67 68 //check if we are adding / editing a module that has new forms using formslib 69 if (!empty($add)) { 70 $id = required_param('id', PARAM_INT); 71 $section = required_param('section', PARAM_INT); 72 $type = optional_param('type', '', PARAM_ALPHA); 73 $returntomod = optional_param('return', 0, PARAM_BOOL); 74 75 redirect("$CFG->wwwroot/course/modedit.php?add=$add&type=$type&course=$id§ion=$section&return=$returntomod&sr=$sectionreturn"); 76 77 } else if (!empty($update)) { 78 $cm = get_coursemodule_from_id('', $update, 0, true, MUST_EXIST); 79 $returntomod = optional_param('return', 0, PARAM_BOOL); 80 redirect("$CFG->wwwroot/course/modedit.php?update=$update&return=$returntomod&sr=$sectionreturn"); 81 82 } else if (!empty($duplicate) and confirm_sesskey()) { 83 $cm = get_coursemodule_from_id('', $duplicate, 0, true, MUST_EXIST); 84 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 85 86 require_login($course, false, $cm); 87 $modcontext = context_module::instance($cm->id); 88 require_capability('moodle/course:manageactivities', $modcontext); 89 90 // Duplicate the module. 91 $newcm = duplicate_module($course, $cm); 92 redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); 93 94 } else if (!empty($delete)) { 95 $cm = get_coursemodule_from_id('', $delete, 0, true, MUST_EXIST); 96 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 97 98 require_login($course, false, $cm); 99 $modcontext = context_module::instance($cm->id); 100 require_capability('moodle/course:manageactivities', $modcontext); 101 102 $return = course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn)); 103 104 if (!$confirm or !confirm_sesskey()) { 105 $fullmodulename = get_string('modulename', $cm->modname); 106 107 $optionsyes = array('confirm'=>1, 'delete'=>$cm->id, 'sesskey'=>sesskey(), 'sr' => $sectionreturn); 108 109 $strdeletecheck = get_string('deletecheck', '', $fullmodulename); 110 $strparams = (object)array('type' => $fullmodulename, 'name' => $cm->name); 111 $strdeletechecktypename = get_string('deletechecktypename', '', $strparams); 112 113 $PAGE->set_pagetype('mod-' . $cm->modname . '-delete'); 114 $PAGE->set_title($strdeletecheck); 115 $PAGE->set_heading($course->fullname); 116 $PAGE->navbar->add($strdeletecheck); 117 118 echo $OUTPUT->header(); 119 echo $OUTPUT->box_start('noticebox'); 120 $formcontinue = new single_button(new moodle_url("$CFG->wwwroot/course/mod.php", $optionsyes), get_string('yes')); 121 $formcancel = new single_button($return, get_string('no'), 'get'); 122 echo $OUTPUT->confirm($strdeletechecktypename, $formcontinue, $formcancel); 123 echo $OUTPUT->box_end(); 124 echo $OUTPUT->footer(); 125 126 exit; 127 } 128 129 // Delete the module. 130 course_delete_module($cm->id); 131 132 redirect($return); 133 } 134 135 136 if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) { 137 $cm = get_coursemodule_from_id('', $USER->activitycopy, 0, true, MUST_EXIST); 138 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 139 140 require_login($course, false, $cm); 141 $coursecontext = context_course::instance($course->id); 142 $modcontext = context_module::instance($cm->id); 143 require_capability('moodle/course:manageactivities', $modcontext); 144 145 if (!empty($movetosection)) { 146 if (!$section = $DB->get_record('course_sections', array('id'=>$movetosection, 'course'=>$cm->course))) { 147 throw new \moodle_exception('sectionnotexist'); 148 } 149 $beforecm = NULL; 150 151 } else { // normal moveto 152 if (!$beforecm = get_coursemodule_from_id('', $moveto, $cm->course, true)) { 153 throw new \moodle_exception('invalidcoursemodule'); 154 } 155 if (!$section = $DB->get_record('course_sections', array('id'=>$beforecm->section, 'course'=>$cm->course))) { 156 throw new \moodle_exception('sectionnotexist'); 157 } 158 } 159 160 if (!ismoving($section->course)) { 161 throw new \moodle_exception('needcopy', '', "view.php?id=$section->course"); 162 } 163 164 moveto_module($cm, $section, $beforecm); 165 166 $sectionreturn = $USER->activitycopysectionreturn; 167 unset($USER->activitycopy); 168 unset($USER->activitycopycourse); 169 unset($USER->activitycopyname); 170 unset($USER->activitycopysectionreturn); 171 172 redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn))); 173 174 } else if (!empty($indent) and confirm_sesskey()) { 175 $id = required_param('id', PARAM_INT); 176 177 $cm = get_coursemodule_from_id('', $id, 0, true, MUST_EXIST); 178 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 179 180 require_login($course, false, $cm); 181 $coursecontext = context_course::instance($course->id); 182 $modcontext = context_module::instance($cm->id); 183 require_capability('moodle/course:manageactivities', $modcontext); 184 185 $cm->indent += $indent; 186 187 if ($cm->indent < 0) { 188 $cm->indent = 0; 189 } 190 191 $DB->set_field('course_modules', 'indent', $cm->indent, array('id'=>$cm->id)); 192 193 \course_modinfo::purge_course_module_cache($cm->course, $cm->id); 194 // Rebuild invalidated module cache. 195 rebuild_course_cache($cm->course, false, true); 196 197 redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); 198 199 } else if (!empty($hide) and confirm_sesskey()) { 200 $cm = get_coursemodule_from_id('', $hide, 0, true, MUST_EXIST); 201 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 202 203 require_login($course, false, $cm); 204 $coursecontext = context_course::instance($course->id); 205 $modcontext = context_module::instance($cm->id); 206 require_capability('moodle/course:activityvisibility', $modcontext); 207 208 if (set_coursemodule_visible($cm->id, 0)) { 209 \core\event\course_module_updated::create_from_cm($cm, $modcontext)->trigger(); 210 } 211 redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); 212 213 } else if (!empty($stealth) and confirm_sesskey()) { 214 list($course, $cm) = get_course_and_cm_from_cmid($stealth); 215 require_login($course, false, $cm); 216 require_capability('moodle/course:activityvisibility', $cm->context); 217 218 if (set_coursemodule_visible($cm->id, 1, 0)) { 219 \core\event\course_module_updated::create_from_cm($cm)->trigger(); 220 } 221 redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); 222 223 } else if (!empty($show) and confirm_sesskey()) { 224 list($course, $cm) = get_course_and_cm_from_cmid($show); 225 require_login($course, false, $cm); 226 require_capability('moodle/course:activityvisibility', $cm->context); 227 $section = $cm->get_section_info(); 228 229 if (set_coursemodule_visible($cm->id, 1)) { 230 \core\event\course_module_updated::create_from_cm($cm)->trigger(); 231 } 232 redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn))); 233 234 } else if ($groupmode > -1 and confirm_sesskey()) { 235 $id = required_param('id', PARAM_INT); 236 237 $cm = get_coursemodule_from_id('', $id, 0, true, MUST_EXIST); 238 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 239 240 require_login($course, false, $cm); 241 $coursecontext = context_course::instance($course->id); 242 $modcontext = context_module::instance($cm->id); 243 require_capability('moodle/course:manageactivities', $modcontext); 244 245 set_coursemodule_groupmode($cm->id, $groupmode); 246 \core\event\course_module_updated::create_from_cm($cm, $modcontext)->trigger(); 247 redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); 248 249 } else if (!empty($copy) and confirm_sesskey()) { // value = course module 250 $cm = get_coursemodule_from_id('', $copy, 0, true, MUST_EXIST); 251 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 252 253 require_login($course, false, $cm); 254 $coursecontext = context_course::instance($course->id); 255 $modcontext = context_module::instance($cm->id); 256 require_capability('moodle/course:manageactivities', $modcontext); 257 258 $section = $DB->get_record('course_sections', array('id'=>$cm->section), '*', MUST_EXIST); 259 260 $USER->activitycopy = $copy; 261 $USER->activitycopycourse = $cm->course; 262 $USER->activitycopyname = $cm->name; 263 $USER->activitycopysectionreturn = $sectionreturn; 264 265 redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn))); 266 267 } else if (!empty($cancelcopy) and confirm_sesskey()) { // value = course module 268 269 $courseid = $USER->activitycopycourse; 270 $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST); 271 272 $cm = get_coursemodule_from_id('', $USER->activitycopy, 0, true, IGNORE_MISSING); 273 $sectionreturn = $USER->activitycopysectionreturn; 274 unset($USER->activitycopy); 275 unset($USER->activitycopycourse); 276 unset($USER->activitycopyname); 277 unset($USER->activitycopysectionreturn); 278 redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); 279 } else { 280 throw new \moodle_exception('unknowaction'); 281 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body