moodle/course/edit.php
moodler 88af238ccb $CFG->defaultcourseroleid defines a site default for the role given to
people who enrol in the course.

$course->defaultrole defines the value for each course for what role
should be used in the same case.   Naturally it defaults to the site config
(when it is zero).

This role is retained even when the person editing the course settings
doesn't actually have that role in their list of assignable rights (however
they are prevented from actually switching to any such role themselves).

Note that enrol plugins are free to ignore these values and use whatever
roles they like.  Generally, though, they should respect these settings.
2006-09-17 09:22:33 +00:00

331 lines
12 KiB
PHP

<?php // $Id$
// Edit course settings
require_once("../config.php");
require_once("lib.php");
require_once("$CFG->libdir/blocklib.php");
require_once("$CFG->dirroot/enrol/enrol.class.php");
$id = optional_param('id', 0, PARAM_INT); // course id
$category = optional_param('category', 0, PARAM_INT); // possible default category
require_login();
$disable_meta = false;
$focus = "";
if ($id) {
if (! $course = get_record('course', 'id', $id)) {
error('Course ID was incorrect');
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
if (!has_capability('moodle/course:update', $context)) {
error("You do not currently have editing privileges!");
}
if (course_in_meta($course)) {
$disable_meta = get_string('metaalreadyinmeta');
}
else if ($course->metacourse) {
if (count_records("course_meta","parent_course",$course->id) > 0) {
$disable_meta = get_string('metaalreadyhascourses');
}
}
else {
if (count_records("user_students","course",$course->id) > 0) {
$disable_meta = get_string('metaalreadyhasenrolments');
}
}
} else { // Admin is creating a new course
$context = get_context_instance(CONTEXT_SYSTEM, SITEID);
if (!has_capability('moodle/course:create',$context)) {
error("You do not currently have course creation privileges!");
}
$course = NULL;
}
if (! $site = get_site()) {
redirect("$CFG->wwwroot/$CFG->admin/index.php");
}
/// If data submitted, then process and store.
if ($form = data_submitted() and confirm_sesskey()) {
$form->startdate = make_timestamp($form->startyear, $form->startmonth, $form->startday);
$form->category = clean_param($form->category, PARAM_INT);
if (empty($form->enrolstartdisabled)) {
$form->enrolstartdate = make_timestamp($form->enrolstartyear, $form->enrolstartmonth, $form->enrolstartday);
} else {
$form->enrolstartdate = 0;
}
if (empty($form->enrolenddisabled)) {
$form->enrolenddate = make_timestamp($form->enrolendyear, $form->enrolendmonth, $form->enrolendday);
} else {
$form->enrolenddate = 0;
}
$form->format = optional_param('format', 'social', PARAM_ALPHA);
$form->defaultrole = optional_param('defaultrole', 0, PARAM_INT);
if ($form->defaultrole == -1) { // Just leave it however it is
unset($form->defaultrole);
}
validate_form($course, $form, $err);
if (count($err) == 0) {
$allowedmods = array();
if (!empty($form->allowedmods)) {
$allowedmods = $form->allowedmods;
unset($form->allowedmods);
}
$form->timemodified = time();
if (!empty($course)) {
// Test for and remove blocks which aren't appropriate anymore
$page = page_create_object(PAGE_COURSE_VIEW, $course->id);
blocks_remove_inappropriate($page);
// Update with the new data
if (update_record('course', $form)) {
add_to_log($course->id, "course", "update", "edit.php?id=$id", "");
if (isadmin()) {
$course->restrictmodules = $form->restrictmodules;
update_restricted_mods($course,$allowedmods);
}
fix_course_sortorder();
redirect($page->url_get_full(), get_string('changessaved'));
} else {
error("Serious Error! Could not update the course record! (id = $form->id)");
}
} else {
$form->timecreated = time();
// place at beginning of category
fix_course_sortorder();
$form->sortorder = get_field_sql("SELECT min(sortorder)-1 FROM {$CFG->prefix}course WHERE category=$form->category");
if (empty($form->sortorder)) {
$form->sortorder = 100;
}
if ($newcourseid = insert_record('course', $form)) { // Set up new course
// Setup the blocks
$page = page_create_object(PAGE_COURSE_VIEW, $newcourseid);
blocks_repopulate_page($page); // Return value not checked because you can always edit later
if (isadmin()) {
$course = get_record("course","id",$newcourseid);
update_restricted_mods($course,$allowedmods);
}
$section = NULL;
$section->course = $newcourseid; // Create a default section.
$section->section = 0;
$section->id = insert_record("course_sections", $section);
fix_course_sortorder();
add_to_log(SITEID, "course", "new", "view.php?id=$newcourseid", "$form->fullname (ID $newcourseid)") ;
$context = get_context_instance(CONTEXT_COURSE, $newcourseid);
if (has_capability('moodle/role:assign', $context)) { // Redirect users with assign capability to assign users to different roles
redirect($CFG->wwwroot."/admin/roles/assign.php?contextid=$context->id", get_string("changessaved"));
} else { // Add current teacher and send to course
$newteacher = NULL;
$newteacher->userid = $USER->id;
$newteacher->course = $newcourseid;
$newteacher->authority = 1; // First teacher is the main teacher
$newteacher->editall = 1; // Course creator can edit their own course
$newteacher->enrol = 'manual';// enrol the teacher too - bug #6120
if (!$newteacher->id = insert_record("user_teachers", $newteacher)) {
error("Could not add you to this new course!");
}
$USER->teacher[$newcourseid] = true;
$USER->teacheredit[$newcourseid] = true;
fix_course_sortorder();
redirect("view.php?id=$newcourseid", get_string("changessaved"));
}
} else {
error("Serious Error! Could not create the new course!");
}
}
die;
} else {
foreach ($err as $key => $value) {
$focus = "form.$key";
}
}
}
/// Otherwise fill and print the form.
if (empty($form)) {
if (!empty($course)) {
$form = $course;
} else {
$form->startdate = time() + 3600 * 24;
$form->fullname = get_string("defaultcoursefullname");
$form->shortname = get_string("defaultcourseshortname");
$form->summary = get_string("defaultcoursesummary");
$form->format = "weeks";
$form->password = "";
$form->guest = 0;
$form->numsections = 10;
$form->idnumber = '';
$form->cost = '';
$form->currency = empty($CFG->enrol_currency) ? 'USD' : $CFG->enrol_currency;
$form->newsitems = 5;
$form->showgrades = 1;
$form->groupmode = 0;
$form->groupmodeforce = 0;
$form->category = $category;
$form->id = "";
$form->visible = 1;
if (current_language() == $CFG->lang) {
$form->teacher = $site->teacher;
$form->teachers = $site->teachers;
$form->student = $site->student;
$form->students = $site->students;
} else {
$form->teacher = get_string("defaultcourseteacher");
$form->teachers = get_string("defaultcourseteachers");
$form->student = get_string("defaultcoursestudent");
$form->students = get_string("defaultcoursestudents");
}
}
} else {
$form = stripslashes_safe($form);
}
// !! no db access using data from $form beyond this point !!
$form->categories = get_records_select_menu("course_categories", "", "name", "id,name");
$courseformats = get_list_of_plugins("course/format");
$form->courseformats = array();
foreach ($courseformats as $courseformat) {
$form->courseformats["$courseformat"] = get_string("format$courseformat");
}
if (empty($allowedmods)) {
$allowedmods = array();
if (!empty($course)) {
if ($am = get_records("course_allowed_modules","course",$course->id)) {
foreach ($am as $m) {
$allowedmods[] = $m->module;
}
} else {
if (empty($course->restrictmodules)) {
$allowedmods = explode(',',$CFG->defaultallowedmodules);
} // it'll be greyed out but we want these by default anyway.
}
} else {
if ($CFG->restrictmodulesfor == 'all') {
$allowedmods = explode(',',$CFG->defaultallowedmodules);
if (!empty($CFG->restrictbydefault)) {
$form->restrictmodules = 1;
}
}
}
}
$usehtmleditor = can_use_html_editor();
$streditcoursesettings = get_string("editcoursesettings");
$straddnewcourse = get_string("addnewcourse");
$stradministration = get_string("administration");
$strcategories = get_string("categories");
if (!empty($course)) {
print_header($streditcoursesettings, "$course->fullname",
"<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a>
-> $streditcoursesettings", $focus);
} else {
print_header("$site->shortname: $straddnewcourse", "$site->fullname",
"<a href=\"../$CFG->admin/index.php\">$stradministration</a> -> ".
"<a href=\"index.php\">$strcategories</a> -> $straddnewcourse", $focus);
}
$form->sesskey = !empty($USER->id) ? $USER->sesskey : '';
print_heading($streditcoursesettings);
print_simple_box_start("center");
include("edit.html");
print_simple_box_end();
if ($usehtmleditor) {
use_html_editor("summary");
}
print_footer($course);
exit;
/// Functions /////////////////////////////////////////////////////////////////
function validate_form($course, &$form, &$err) {
if (empty($form->enrolenddisabled) && $form->enrolenddate <= $form->enrolstartdate) {
$err["enroldate"] = get_string("enrolenddaterror");
}
if (empty($form->fullname))
$err["fullname"] = get_string("missingfullname");
if (empty($form->shortname))
$err["shortname"] = get_string("missingshortname");
if ($foundcourses = get_records("course", "shortname", $form->shortname)) {
if (!empty($course->id)) {
unset($foundcourses[$course->id]);
}
if (!empty($foundcourses)) {
foreach ($foundcourses as $foundcourse) {
$foundcoursenames[] = $foundcourse->fullname;
}
$foundcoursenamestring = addslashes(implode(',', $foundcoursenames));
$err["shortname"] = get_string("shortnametaken", "", $foundcoursenamestring);
}
}
if (empty($form->summary))
$err["summary"] = get_string("missingsummary");
if (empty($form->teacher))
$err["teacher"] = get_string("missingteacher");
if (empty($form->student))
$err["student"] = get_string("missingstudent");
if (! $form->category)
$err["category"] = get_string("missingcategory");
return;
}
?>