From: skodak Date: Fri, 13 Oct 2006 09:58:53 +0000 (+0000) Subject: refactored course/edit2.php and edit_form MDL-6914 ; set $CFG->use_new_forms=1; in... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=a81bf9c3cea48450086b25dd7e8da73fe9e95b47;p=moodle.git refactored course/edit2.php and edit_form MDL-6914 ; set $CFG->use_new_forms=1; in config.php if you want to test it ;-) --- diff --git a/course/edit.php b/course/edit.php index 19ee7036c7..f4e9419100 100644 --- a/course/edit.php +++ b/course/edit.php @@ -9,6 +9,11 @@ $id = optional_param('id', 0, PARAM_INT); // course id $category = optional_param('category', 0, PARAM_INT); // possible default category + // redirect to new form if testing as developer + if (!empty($CFG->use_new_forms)) { + redirect('edit2.php?id='.$id.'&category='.$category); + } + require_login(); $disable_meta = false; diff --git a/course/edit2.php b/course/edit2.php index 0ece023719..d48046217b 100644 --- a/course/edit2.php +++ b/course/edit2.php @@ -1,181 +1,93 @@ libdir/blocklib.php"); - require_once("$CFG->dirroot/enrol/enrol.class.php"); + require_once('../config.php'); + require_once($CFG->dirroot.'/enrol/enrol.class.php'); + require_once($CFG->libdir.'/blocklib.php'); + require_once($CFG->libdir.'/formslib.php'); + require_once('lib.php'); + require_once('edit_form.php'); - include_once $CFG->libdir.'/formslib.php'; - - print_header(); - notice('This file is disabled due to recent changes in formslib.php, edit3.php will be here soon ;-).'); - die; + $id = optional_param('id', 0, PARAM_INT); // course id + $categoryid = optional_param('category', 0, PARAM_INT); // course category - can be changed in edit form require_login(); - $mform =& new moodleform('edit_course', 'post', 'edit2.php'); - - $mform->acceptGet('id', 'category'); - - $id = $mform->optional_param('id', 0, PARAM_INT); // course id - $category = $mform->optional_param('category', 0, PARAM_INT); // possible default category - - - $disable_meta = false; - $focus = ""; - - if ($id) { - if (! $course = get_record("course", "id", $id)) { - error("Course ID was incorrect"); +/// basic access control checks + if ($id) { // editing course + if (!$course = get_record('course', 'id', $id)) { + error('Course ID was incorrect'); } + $category = get_record('course_categories', 'id', $course->category); + require_capability('moodle/course:update', get_context_instance(CONTEXT_COURSE, $course->id)); - $context = get_context_instance(CONTEXT_COURSE, $course->id); - - if (!has_capability('moodle/course:update', $context)) { - error("You do not currently have editing privileges!"); + } else if ($categoryid) { // creating new course in this category + $course = null; + if (!$category = get_record('course_categories', 'id', $categoryid)) { + error('Category ID was incorrect'); } - - 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'); + require_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $category->id)); + + } else { + error('Either course id or category must be specified'); + } + +/// prepare course +if (!empty($course)) { + $allowedmods = array(); + if (!empty($course)) { + if ($am = get_records('course_allowed_modules','course',$course->id)) { + foreach ($am as $m) { + $allowedmods[] = $m->module; } } else { - $managers = count(get_users_by_capability($context, 'moodle/course:managemetacourse')); - $participants = count(get_users_by_capability($context, 'moodle/course:view')); - if ($participants > $managers) { - $disable_meta = get_string('metaalreadyhasenrolments'); - } + if (empty($course->restrictmodules)) { + $allowedmods = explode(',',$CFG->defaultallowedmodules); + } // it'll be greyed out but we want these by default anyway. } - } else { // Admin is creating a new course + $course->allowedmods = $allowedmods; - $context = get_context_instance(CONTEXT_SYSTEM, SITEID); - if (!has_capability('moodle/course:create',$context)) { - error("You do not currently have course creation privileges!"); + if ($course->enrolstartdate){ + $course->enrolstartdisabled = 0; } - $course = NULL; - } - - if (! $site = get_site()) { - redirect("$CFG->wwwroot/$CFG->admin/index.php"); + if ($course->enrolenddate) { + $course->enrolenddisabled = 0; + } } +} - include("edit_form.php"); - - +/// first create the form + $editform = new course_edit_form('edit2.php', compact('course', 'category')); -/// If data submitted, then process and store. -// data_submitted tries to validate form data and returns false if -// the user inputted data is invalid and the form should be redisplayed with -// feedback. - if ($fromform=$mform->data_submitted()) { +/// process data if submitted + if ($data = $editform->data_submitted()) { - - if (!empty($fromform->enrolstartdisabled)){ - $fromform->enrolstartdate = 0; + //preprocess data + if ($data->enrolstartdisabled){ + $data->enrolstartdate = 0; } - if (!empty($fromform->enrolenddisabled)) { - $fromform->enrolenddate = 0; + if ($data->enrolenddisabled) { + $data->enrolenddate = 0; } - $allowedmods = array(); - if (!empty($fromform->allowedmods)) { - $allowedmods = $fromform->allowedmods; - unset($fromform->allowedmods); - } - - $fromform->timemodified = time(); - - if ($fromform->defaultrole == -1) { // Just leave it however it is - unset($fromform->defaultrole); - } - 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', $fromform)) { - add_to_log($course->id, "course", "update", "edit.php?id=$id", ""); - if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID))) { - $course->restrictmodules = $fromform->restrictmodules; - update_restricted_mods($course,$allowedmods); - } - fix_course_sortorder(); - // everything ok, no need to display any message in redirect - redirect("view.php?id=$course->id"); - } else { - error("Serious Error! Could not update the course record! (id = $fromform->id)"); - } - } else { - $fromform->timecreated = time(); - // place at beginning of category - fix_course_sortorder(); - $fromform->sortorder = get_field_sql("SELECT min(sortorder)-1 FROM {$CFG->prefix}course WHERE category=$fromform->category"); - if (empty($fromform->sortorder)) { - $fromform->sortorder = 100; - } - // fill in default teacher and student names to keep backwards compatibility - $fromform->teacher = addslashes(get_string('defaultcourseteacher')); - $fromform->teachers = addslashes(get_string('defaultcourseteachers')); - $fromform->student = addslashes(get_string('defaultcoursestudent')); - $fromform->students = addslashes(get_string('defaultcoursestudents')); - - if ($newcourseid = insert_record('course', $fromform)) { // 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 (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID))) { - $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", "$fromform->fullname (ID $newcourseid)") ; - $context = get_context_instance(CONTEXT_COURSE, $newcourseid); - - if ($fromform->metacourse and has_capability('moodle/course:managemetacourse', $context)) { // Redirect users with metacourse capability to student import - redirect($CFG->wwwroot."/course/importstudents.php?id=$newcourseid"); - - } else if (has_capability('moodle/role:assign', $context)) { // Redirect users with assign capability to assign users to different roles - redirect($CFG->wwwroot."/$CFG->admin/roles/assign.php?contextid=$context->id"); - - } else { // Add current teacher and send to course - - // find a role with legacy:edittingteacher - if ($teacherroles = get_roles_with_capability('moodle/legacy:editingteacher', CAP_ALLOW, $context)) { - // assign the role to this user - $teachereditrole = array_shift($teacherroles); - role_assign($teachereditrole->id, $USER->id, 0, $context->id); - } - - redirect("view.php?id=$newcourseid"); - } - - - } else { - error("Serious Error! Could not create the new course!"); - } + $data->timemodified = time(); + + if (empty($course)) { + create_course($data); + } else { + update_course($data); } - die; } -//print the form +///print the form + + $site = get_site(); $streditcoursesettings = get_string("editcoursesettings"); $straddnewcourse = get_string("addnewcourse"); @@ -185,18 +97,127 @@ if (!empty($course)) { print_header($streditcoursesettings, "$course->fullname", "wwwroot/course/view.php?id=$course->id\">$course->shortname - -> $streditcoursesettings", $focus); + -> $streditcoursesettings"); } else { print_header("$site->shortname: $straddnewcourse", "$site->fullname", - "admin/index.php\">$stradministration -> ". - "$strcategories -> $straddnewcourse", $focus); + "wwwroot/$CFG->admin/index.php\">$stradministration -> ". + "$strcategories -> $straddnewcourse"); } - print_heading($streditcoursesettings); - - $mform->display(); - + $editform->display(); print_footer($course); + die; + + +/// internal functions + +function create_course($data) { + global $CFG, $USER; + + // preprocess allowed mods + $allowedmods = empty($data->allowedmods) ? array() : $data->allowedmods; + unset($data->allowedmods); + if (!has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { + if ($CFG->restrictmodulesfor == 'all') { + $data->restrictmodules = 1; + } else { + $data->restrictmodules = 0; + } + } + + + $data->timecreated = time(); + + // place at beginning of category + fix_course_sortorder(); + $data->sortorder = get_field_sql("SELECT min(sortorder)-1 FROM {$CFG->prefix}course WHERE category=$data->category"); + if (empty($data->sortorder)) { + $data->sortorder = 100; + } + + if ($newcourseid = insert_record('course', $data)) { // Set up new course + + $course = get_record('course', 'id', $newcourseid); + + // Setup the blocks + $page = page_create_object(PAGE_COURSE_VIEW, $course->id); + blocks_repopulate_page($page); // Return value not checked because you can always edit later + + if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { + update_restricted_mods($course, $allowedmods); + } + + $section = new object(); + $section->course = $course->id; // 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=$course->id", "$data->fullname (ID $course->id)") ; + $context = get_context_instance(CONTEXT_COURSE, $course->id); + + if ($data->metacourse and has_capability('moodle/course:managemetacourse', $context)) { // Redirect users with metacourse capability to student import + redirect($CFG->wwwroot."/course/importstudents.php?id=$course->id"); + + } else if (has_capability('moodle/role:assign', $context)) { // Redirect users with assign capability to assign users to different roles + redirect($CFG->wwwroot."/$CFG->admin/roles/assign.php?contextid=$context->id"); + + } else { // Add current teacher and send to course + // find a role with legacy:edittingteacher + if ($teacherroles = get_roles_with_capability('moodle/legacy:editingteacher', CAP_ALLOW, $context)) { + // assign the role to this user + $teachereditrole = array_shift($teacherroles); + role_assign($teachereditrole->id, $USER->id, 0, $context->id); + } + redirect($CFG->wwwroot."/course/view.php?id=$course->id"); + } + + } else { + error("Serious Error! Could not create the new course!"); + } + die; +} + +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", ""); + 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); + + redirect($CFG->wwwroot."/course/view.php?id=$course->id"); + + } else { + error("Serious Error! Could not update the course record! (id = $form->id)"); + } + die; +} + ?> diff --git a/course/edit_form.php b/course/edit_form.php index f1975e7196..e3bf67d30c 100644 --- a/course/edit_form.php +++ b/course/edit_form.php @@ -1,392 +1,400 @@ -allowedmods = array(); - if ($am = get_records("course_allowed_modules","course",$course->id)) { - foreach ($am as $m) { - $toform->allowedmods[] = $m->module; +_form; + $renderer =& $mform->defaultRenderer(); + + $course = $this->_customdata['course']; + $category = $this->_customdata['category']; + + $systemcontext = get_context_instance(CONTEXT_SYSTEM); + $categorycontext = get_context_instance(CONTEXT_COURSECAT, $category->id); + + $disable_meta = false; // basic meta course state protection; server-side security checks not needed + + if (!empty($course)) { + $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); + $context = $coursecontext; + + if (course_in_meta($course)) { + $disable_meta = get_string('metaalreadyinmeta'); + + } else if ($course->metacourse) { + if (count_records('course_meta', 'parent_course', $coursecourse->id) > 0) { + $disable_meta = get_string('metaalreadyhascourses'); + } + + } else { + $managers = count(get_users_by_capability($coursecontext, 'moodle/course:managemetacourse')); + $participants = count(get_users_by_capability($coursecontext, 'moodle/course:view')); + if ($participants > $managers) { + $disable_meta = get_string('metaalreadyhasenrolments'); + } } } else { - if (empty($course->restrictmodules)) { - $toform->allowedmods = explode(',',$CFG->defaultallowedmodules); - } // it'll be greyed out but we want these by default anyway. - } - } else { - //this is a brand new course! - $toform->startdate = time() + 3600 * 24; - $toform->fullname = get_string("defaultcoursefullname"); - $toform->shortname = get_string("defaultcourseshortname"); - $toform->summary = get_string("defaultcoursesummary"); - $toform->format = "weeks"; - $toform->password = ""; - $toform->guest = 0; - $toform->numsections = 10; - $toform->idnumber = ''; - $toform->cost = ''; - $toform->currency = empty($CFG->enrol_currency) ? 'USD' : $CFG->enrol_currency; - $toform->newsitems = 5; - $toform->showgrades = 1; - $toform->groupmode = 0; - $toform->groupmodeforce = 0; - $toform->category = $category; - $toform->id = ""; - $toform->visible = 1; - $toform->allowedmods = array(); - if ($CFG->restrictmodulesfor == 'all') { - $toform->allowedmods = explode(',',$CFG->defaultallowedmodules); - if (!empty($CFG->restrictbydefault)) { - $toform->restrictmodules = 1; + $coursecontext = null; + $context = $categorycontext; + } + +/// form definition with new course defaults +//-------------------------------------------------------------------------------- + $mform->addElement('header','general', get_string('general')); + + //must have create course capability in both categories in order to move course + if (has_capability('moodle/course:create', $categorycontext)) { + $displaylist = array(); + $parentlist = array(); + make_categories_list($displaylist, $parentlist); + foreach ($displaylist as $key=>$val) { + if (!has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $key))) { + unset($displaylist[$key]); + } } + $mform->addElement('select', 'category', get_string('category'), $displaylist); + } else { + $mform->addElement('hidden', 'category', null); } + $mform->setHelpButton('category', array('coursecategory', get_string('category'))); + $mform->setDefault('category', $category->id); + $mform->setType('category', PARAM_INT); + $mform->addElement('text','fullname', get_string('fullname'),'maxlength="254" size="50"'); + $mform->setHelpButton('fullname', array('coursefullname', get_string('fullname')), true); + $mform->setDefault('fullname', get_string('defaultcoursefullname')); + $mform->addRule('fullname', get_string('missingfullname'), 'required', null, 'client'); + $mform->setType('fullname', PARAM_MULTILANG); - } + $mform->addElement('text','shortname', get_string('shortname'),'maxlength="15" size="10"'); + $mform->setHelpButton('shortname', array('courseshortname', get_string('shortname')), true); + $mform->setDefault('shortname', get_string('defaultcourseshortname')); + $mform->addRule('shortname', get_string('missingshortname'), 'required', null, 'client'); + $mform->setType('shortname', PARAM_MULTILANG); - $mform->addElement('header','general', get_string("general")); - if (has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $toform->category))) { - $displaylist = array(); - $parentlist = array(); - make_categories_list($displaylist, $parentlist); - $mform->addElement('select', "category", get_string("category"), $displaylist ); - } - $mform->setDefault('fullname', $toform->fullname); - $mform->addElement('text','fullname', get_string("fullname"),'maxlength="254" size="50"'); - $mform->setDefault('shortname', $toform->shortname); - $mform->addElement('text','shortname', get_string("shortname"),'maxlength="15" size="10"'); - $mform->setDefault('idnumber', $toform->idnumber); - $mform->addElement('text','idnumber', get_string("idnumbercourse"),'maxlength="100" size="10"'); - $mform->setDefault('summary', $toform->summary); - $mform->addElement('htmleditor','summary', get_string("summary"), array('rows'=>'10', 'cols'=>'65')); - - $mform->setDefault('format', $toform->format); - $courseformats = get_list_of_plugins("course/format"); - $formcourseformats = array(); - - foreach ($courseformats as $courseformat) { - $formcourseformats["$courseformat"] = get_string("format$courseformat"); - } + $mform->addElement('text','idnumber', get_string('idnumbercourse'),'maxlength="100" size="10"'); + $mform->setHelpButton('idnumber', array('courseidnumber', get_string('idnumbercourse')), true); + $mform->setType('idnumber', PARAM_RAW); - $mform->addElement('select', 'format', get_string("format"), $formcourseformats ); - - $mform->setDefault('numsections', $toform->numsections); - for ($i=1; $i<=52; $i++) { - $sectionmenu[$i] = "$i"; - } - $mform->addElement('select', 'numsections', get_string("numberweeks"), $sectionmenu); - $mform->setDefault('startdate', $toform->startdate); - $mform->addElement('date_selector', 'startdate', get_string('startdate')); - - $mform->setDefault('hiddensections',(isset($toform->hiddensections))?$toform->hiddensections:0); - unset($choices); - $choices["0"] = get_string("hiddensectionscollapsed"); - $choices["1"] = get_string("hiddensectionsinvisible"); - $mform->addElement('select', 'hiddensections', get_string("hiddensections"), $choices); - - $mform->setDefault('newsitems', $toform->newsitems); - $newsitem = get_string("newsitem"); - $newsitems = get_string("newsitems"); - $options = array("0" => "0 $newsitems", - "1" => "1 $newsitem", - "2" => "2 $newsitems", - "3" => "3 $newsitems", - "4" => "4 $newsitems", - "5" => "5 $newsitems", - "6" => "6 $newsitems", - "7" => "7 $newsitems", - "8" => "8 $newsitems", - "9" => "9 $newsitems", - "10" => "10 $newsitems"); - $mform->addElement('select', 'newsitems', get_string("newsitemsnumber"), $options); - - $mform->setDefault('showgrades', $toform->showgrades); - unset($choices); - $choices["0"] = get_string("no"); - $choices["1"] = get_string("yes"); - $mform->addElement('select', 'showgrades', get_string("showgrades"), $choices); - unset($choices); - $mform->setDefault('showreports',(isset($toform->showreports))?$toform->showreports:0); - $choices["0"] = get_string("no"); - $choices["1"] = get_string("yes"); - $mform->addElement('select', 'showreports', get_string("showreports"), $choices); - $mform->setDefault('maxbytes',(isset($toform->maxbytes))?$toform->maxbytes:0); - $choices = get_max_upload_sizes($CFG->maxbytes); - $mform->addElement('select', 'maxbytes', get_string("maximumupload"), $choices); - if (!empty($CFG->allowcoursethemes)) { - $mform->setDefault('theme',(isset($toform->theme))?$toform->theme:''); - - $themes=array(); - $themes[''] = get_string("forceno"); - $themes += get_list_of_themes(); - $mform->addElement('select', 'theme', get_string("forcetheme"), $themes); - } - unset($choices); - $mform->setDefault('metacourse',(isset($toform->metacourse))?$toform->metacourse:0); + $mform->addElement('htmleditor','summary', get_string('summary'), array('rows'=> '10', 'cols'=>'65')); + $mform->setHelpButton('summary', array('text', get_string('helptext')), true); + $mform->setDefault('summary', get_string('defaultcoursesummary')); + $mform->addRule('summary', get_string('missingsummary'), 'required', null, 'client'); + $mform->setType('summary', PARAM_RAW); + + $courseformats = get_list_of_plugins('course/format'); + $formcourseformats = array(); + foreach ($courseformats as $courseformat) { + $formcourseformats["$courseformat"] = get_string("format$courseformat"); + } + $mform->addElement('select', 'format', get_string('format'), $formcourseformats); + $mform->setHelpButton('format', array('courseformats', get_string('courseformats')), true); + $mform->setDefault('format', 'weeks'); + + for ($i=1; $i<=52; $i++) { + $sectionmenu[$i] = "$i"; + } + $mform->addElement('select', 'numsections', get_string('numberweeks'), $sectionmenu); + $mform->setDefault('numsections', 10); + + $mform->addElement('date_selector', 'startdate', get_string('startdate')); + $mform->setHelpButton('startdate', array('coursestartdate', get_string('startdate')), true); + $mform->setDefault('startdate', time() + 3600 * 24); + + $choices = array(); + $choices['0'] = get_string('hiddensectionscollapsed'); + $choices['1'] = get_string('hiddensectionsinvisible'); + $mform->addElement('select', 'hiddensections', get_string('hiddensections'), $choices); + $mform->setHelpButton('hiddensections', array('coursehiddensections', get_string('hiddensections')), true); + $mform->setDefault('hiddensections', 0); + + $newsitem = get_string('newsitem'); + $newsitems = get_string('newsitems'); + $options = array('0' => "0 $newsitems", + '1' => "1 $newsitem", + '2' => "2 $newsitems", + '3' => "3 $newsitems", + '4' => "4 $newsitems", + '5' => "5 $newsitems", + '6' => "6 $newsitems", + '7' => "7 $newsitems", + '8' => "8 $newsitems", + '9' => "9 $newsitems", + '10' => "10 $newsitems"); + $mform->addElement('select', 'newsitems', get_string('newsitemsnumber'), $options); + $mform->setHelpButton('newsitems', array('coursenewsitems', get_string('newsitemsnumber')), true); + $mform->setDefault('newsitems', 5); + + $choices = array(); + $choices['0'] = get_string('no'); + $choices['1'] = get_string('yes'); + $mform->addElement('select', 'showgrades', get_string('showgrades'), $choices); + $mform->setHelpButton('showgrades', array('coursegrades', get_string('grades')), true); + $mform->setDefault('showgrades', 1); + + $choices = array(); + $choices['0'] = get_string('no'); + $choices['1'] = get_string('yes'); + $mform->addElement('select', 'showreports', get_string('showreports'), $choices); + $mform->setHelpButton('showreports', array('coursereports', get_string('activityreport')), true); + $mform->setDefault('showreports', 0); + + $choices = get_max_upload_sizes($CFG->maxbytes); + $mform->addElement('select', 'maxbytes', get_string('maximumupload'), $choices); + $mform->setHelpButton('maxbytes', array('courseuploadsize', get_string('maximumupload')), true); + + if (!empty($CFG->allowcoursethemes)) { + $themes=array(); + $themes[''] = get_string('forceno'); + $themes += get_list_of_themes(); + $mform->addElement('select', 'theme', get_string('forcetheme'), $themes); + } - if (empty($disable_meta)) { $meta=array(); $meta[0] = get_string('no'); $meta[1] = get_string('yes'); - $mform->addElement('select', 'metacourse', get_string("managemeta"), $meta); - }else{ - $mform->addElement('static', 'metacourse', get_string("managemeta"), - ((empty($toform->metacourse)) ? get_string("no") : get_string("yes")) - . " - $disable_meta "); - - } - - $mform->setDefault('defaultrole',(isset($toform->defaultrole))?$toform->defaultrole:0); - $roles = get_assignable_roles($context); - asort($roles); - $choices = array(); - - if ($sitedefaultrole = get_record('role', 'id', $CFG->defaultcourseroleid)) { - $choices[0] = get_string('sitedefault').' ('.$sitedefaultrole->name.')'; - } else { - $choices[0] = get_string('sitedefault'); - } + if ($disable_meta === false) { + $mform->addElement('select', 'metacourse', get_string('managemeta'), $meta); + } else { + $mform->addElement('static', 'metacourse', get_string('managemeta'), + ((empty($course->metacourse)) ? $meta[0] : $meta[1]) . " - $disable_meta "); + } + $mform->setHelpButton('metacourse', array('metacourse', get_string('metacourse')), true); + $mform->setDefault('metacourse', 0); - $choices = $choices + $roles; - $defaultroleelement=$mform->addElement('select', 'defaultrole', get_string('defaultrole', 'role'), $choices ); - if ($mform->exportValue('defaultrole') && !isset($roles[$mform->exportValue('defaultrole')])) { // Existing setting is one we can't choose - if ($coursedefaultrole = get_record('role', 'id', $mform->exportValue('defaultrole'))) { - - $defaultroleelement->addOption(get_string('currentrole', 'role').' ('.$coursedefaultrole->name.')',-1); + $roles = get_assignable_roles($context); + if (!empty($course)) { + // add current default role, so that it is selectable even when user can not assign it + if ($current_role = get_record('role', 'id', $course->defaultrole)) { + $roles[$current_role->id] = strip_tags(format_string($current_role->name, true)); + } + } + $choices = array(); + if ($sitedefaultrole = get_record('role', 'id', $CFG->defaultcourseroleid)) { + $choices[0] = get_string('sitedefault').' ('.$sitedefaultrole->name.')'; } else { - $defaultroleelement->addOption(get_string('currentrole', 'role'),-1); + $choices[0] = get_string('sitedefault'); } - } - - - $mform->addElement('header','enrolhdr', get_string("enrolment")); - $mform->setDefault('enrol',(isset($toform->enrol))?$toform->enrol:''); - - $modules = explode(',', $CFG->enrol_plugins_enabled); - foreach ($modules as $module) { - $name = get_string("enrolname", "enrol_$module"); - $plugin = enrolment_factory::factory($module); - if (method_exists($plugin, 'print_entry')) { - $choices[$name] = $module; + $choices = $choices + $roles; + $mform->addElement('select', 'defaultrole', get_string('defaultrole', 'role'), $choices); + $mform->setDefault('defaultrole', 0); + +//-------------------------------------------------------------------------------- + $mform->addElement('header','enrolhdr', get_string('enrolments')); + + $modules = explode(',', $CFG->enrol_plugins_enabled); + foreach ($modules as $module) { + $name = get_string('enrolname', "enrol_$module"); + $plugin = enrolment_factory::factory($module); + if (method_exists($plugin, 'print_entry')) { + $choices[$name] = $module; + } } - } - asort($choices); - $choices = array_flip($choices); - $choices = array_merge(array('' => get_string('sitedefault').' ('.get_string("enrolname", "enrol_$CFG->enrol").')'), $choices); - $mform->addElement('select', 'enrol', get_string("enrolmentplugins"), $choices ); - - $mform->setDefault('enrollable',(isset($toform->enrollable))?$toform->enrollable:1); - $radio = array(); - $radio[] = &moodleform::createElement('radio', 'enrollable', null, get_string("no"), 0); - $radio[] = &moodleform::createElement('radio', 'enrollable', null, get_string("yes"), 1); - $radio[] = &moodleform::createElement('radio', 'enrollable', null, get_string("enroldate"), 2); - $mform->addGroup($radio, 'enrollable', get_string("enrollable"), ' ', false); - - $mform->setDefault('enrolstartdate',(isset($toform->enrolstartdate))?$toform->enrolstartdate:0); - $mform->setDefault('enrolstartdisabled', - (!isset($toform->enrolstartdate)|| - (isset($toform->enrolstartdate)&&!$toform->enrolstartdate) - ?1:0)); - $enroldatestartgrp = array(); - $enroldatestartgrp[] = &moodleform::createElement('date_selector', 'enrolstartdate'); - $enroldatestartgrp[] = &moodleform::createElement('checkbox', 'enrolstartdisabled', null, get_string('disable')); - $mform->addGroup($enroldatestartgrp, '', get_string('enrolstartdate'), ' ', false); - - $mform->setDefault('enrolenddate',(isset($toform->enrolenddate))?$toform->enrolenddate:0); - $mform->setDefault('enrolenddisabled', - (!isset($toform->enrolenddate)|| - (isset($toform->enrolenddate)&&!$toform->enrolenddate) - ?1:0)); - $enroldateendgrp = array(); - $enroldateendgrp[] = &moodleform::createElement('date_selector', 'enrolenddate'); - $enroldateendgrp[] = &moodleform::createElement('checkbox', 'enrolenddisabled', null, get_string('disable')); - $mform->addGroup($enroldateendgrp, 'enroldateendgrp', get_string('enrolenddate'), ' ', false); - - $mform->setDefault('enrolperiod',(isset($toform->enrolperiod))?$toform->enrolperiod:0); - $periodmenu=array(); - $periodmenu[0] = get_string('unlimited'); - for ($i=1; $i<=365; $i++) { - $seconds = $i * 86400; - $periodmenu[$seconds] = get_string('numdays', '', $i); - } - $mform->addElement('select', 'enrolperiod', get_string("enrolperiod"), $periodmenu); - - - $mform->addElement('header','expirynotifyhdr', get_string("expirynotify")); - - $mform->setDefault('expirynotify',(isset($toform->expirynotify))?$toform->expirynotify:0); - unset($choices); - $choices["0"] = get_string("no"); - $choices["1"] = get_string("yes"); - $mform->addElement('select', 'expirynotify', get_string("expirynotify"), $choices); - $mform->setDefault('notifystudents',(isset($toform->notifystudents))?$toform->notifystudents:0); - $mform->addElement('select', 'notifystudents', get_string("expirynotifystudents"), $choices); - $mform->setDefault('expirythreshold',(isset($toform->expirythreshold))?$toform->expirythreshold:10 * 86400); - $thresholdmenu=array(); - for ($i=1; $i<=30; $i++) { - $seconds = $i * 86400; - $thresholdmenu[$seconds] = get_string('numdays', '', $i); - } - $mform->addElement('select', 'expirythreshold', get_string("expirythreshold"), $thresholdmenu); - - - $mform->addElement('header','', get_string("groupmode")); - - $mform->setDefault('groupmode', $toform->groupmode); - unset($choices); - $choices[NOGROUPS] = get_string("groupsnone"); - $choices[SEPARATEGROUPS] = get_string("groupsseparate"); - $choices[VISIBLEGROUPS] = get_string("groupsvisible"); - $mform->addElement('select', 'groupmode', get_string("groupmode"), $choices); - $mform->setDefault('groupmodeforce', $toform->groupmodeforce); - unset($choices); - $choices["0"] = get_string("no"); - $choices["1"] = get_string("yes"); - $mform->addElement('select', 'groupmodeforce', get_string("force"), $choices); - - $mform->addElement('header','', get_string("availability")); - - $mform->setDefault('visible', $toform->visible); - unset($choices); - $choices["0"] = get_string("courseavailablenot"); - $choices["1"] = get_string("courseavailable"); - $mform->addElement('select', 'visible', get_string("availability"), $choices); - $mform->setDefault('password', $toform->password); - $mform->addElement('text', 'password', get_string("enrolmentkey"), 'size="25"'); - $mform->setDefault('guest', $toform->guest); - unset($choices); - $choices["0"] = get_string("guestsno"); - $choices["1"] = get_string("guestsyes"); - $choices["2"] = get_string("guestskey"); - $mform->addElement('select', 'guest', get_string("opentoguests"), $choices); - if (isset($course) && method_exists(enrolment_factory::factory($course->enrol), 'print_entry') && $course->enrol != 'manual') { - $mform->setDefault('cost', $toform->cost); - $mform->setDefault('currency', $toform->currency); - $costgroup=array(); - $currencies = get_list_of_currencies(); - $costgroup[]= &moodleform::createElement('text','cost', '', 'maxlength="6" size="6"'); - $costgroup[]= &moodleform::createElement('select', 'currency', '', $currencies); - $mform->addGroup($costgroup, 'costgrp', get_string("cost"), ' ', false); - } + asort($choices); + $choices = array_flip($choices); + $choices = array_merge(array('' => get_string('sitedefault').' ('.get_string('enrolname', "enrol_$CFG->enrol").')'), $choices); + $mform->addElement('select', 'enrol', get_string('enrolmentplugins'), $choices); + $mform->setHelpButton('enrol', array('courseenrolmentplugins', get_string('enrolmentplugins')), true); - $mform->addElement('header','', get_string("language")); - $mform->setDefault('lang',(isset($toform->lang))?$toform->lang:''); - $languages=array(); - $languages[''] = get_string("forceno"); - $languages += get_list_of_languages(); - $mform->addElement('select', 'lang', get_string("forcelanguage"), $languages); + $radio = array(); + $radio[] = &MoodleQuickForm::createElement('radio', 'enrollable', null, get_string('no'), 0); + $radio[] = &MoodleQuickForm::createElement('radio', 'enrollable', null, get_string('yes'), 1); + $radio[] = &MoodleQuickForm::createElement('radio', 'enrollable', null, get_string('enroldate'), 2); + $mform->addGroup($radio, 'enrollable', get_string('enrollable'), ' ', false); + $mform->setHelpButton('enrollable', array('courseenrollable', get_string('enrollable')), true); + $mform->setDefault('enrollable', 1); + + $enroldatestartgrp = array(); + $enroldatestartgrp[] = &MoodleQuickForm::createElement('date_selector', 'enrolstartdate'); + $enroldatestartgrp[] = &MoodleQuickForm::createElement('checkbox', 'enrolstartdisabled', null, get_string('disable')); + $mform->addGroup($enroldatestartgrp, '', get_string('enrolstartdate'), ' ', false); + $mform->setDefault('enrolstartdate', 0); + $mform->setDefault('enrolstartdisabled', 1); + + $enroldateendgrp = array(); + $enroldateendgrp[] = &MoodleQuickForm::createElement('date_selector', 'enrolenddate'); + $enroldateendgrp[] = &MoodleQuickForm::createElement('checkbox', 'enrolenddisabled', null, get_string('disable')); + $mform->addGroup($enroldateendgrp, 'enroldateendgrp', get_string('enrolenddate'), ' ', false); + $mform->setDefault('enrolenddate', 0); + $mform->setDefault('enrolenddisabled', 1); + + $periodmenu=array(); + $periodmenu[0] = get_string('unlimited'); + for ($i=1; $i<=365; $i++) { + $seconds = $i * 86400; + $periodmenu[$seconds] = get_string('numdays', '', $i); + } + $mform->addElement('select', 'enrolperiod', get_string('enrolperiod'), $periodmenu); + $mform->setDefault('enrolperiod', 0); + +//-------------------------------------------------------------------------------- + $mform->addElement('header','expirynotifyhdr', get_string('expirynotify')); + + $choices = array(); + $choices['0'] = get_string('no'); + $choices['1'] = get_string('yes'); + $mform->addElement('select', 'expirynotify', get_string('expirynotify'), $choices); + $mform->setHelpButton('expirynotify', array('expirynotify', get_string('expirynotify')), true); + $mform->setDefault('expirynotify', 0); + + $mform->addElement('select', 'notifystudents', get_string('expirynotifystudents'), $choices); + $mform->setHelpButton('notifystudents', array('expirynotifystudents', get_string('expirynotifystudents')), true); + $mform->setDefault('notifystudents', 0); + + $thresholdmenu=array(); + for ($i=1; $i<=30; $i++) { + $seconds = $i * 86400; + $thresholdmenu[$seconds] = get_string('numdays', '', $i); + } + $mform->addElement('select', 'expirythreshold', get_string('expirythreshold'), $thresholdmenu); + $mform->setHelpButton('expirythreshold', array('expirythreshold', get_string('expirythreshold')), true); + $mform->setDefault('expirythreshold', 10 * 86400); + +//-------------------------------------------------------------------------------- + $mform->addElement('header','', get_string('groupmode')); + + $choices = array(); + $choices[NOGROUPS] = get_string('groupsnone'); + $choices[SEPARATEGROUPS] = get_string('groupsseparate'); + $choices[VISIBLEGROUPS] = get_string('groupsvisible'); + $mform->addElement('select', 'groupmode', get_string('groupmode'), $choices); + $mform->setHelpButton('groupmode', array('groupmode', get_string('groupmode')), true); + $mform->setDefault('groupmode', 0); + + $choices = array(); + $choices['0'] = get_string('no'); + $choices['1'] = get_string('yes'); + $mform->addElement('select', 'groupmodeforce', get_string('force'), $choices); + $mform->setHelpButton('groupmodeforce', array('groupmodeforce', get_string('groupmodeforce')), true); + $mform->setDefault('groupmodeforce', 0); + +//-------------------------------------------------------------------------------- + $mform->addElement('header','', get_string('availability')); + + $choices = array(); + $choices['0'] = get_string('courseavailablenot'); + $choices['1'] = get_string('courseavailable'); + $mform->addElement('select', 'visible', get_string('availability'), $choices); + $mform->setHelpButton('visible', array('courseavailability', get_string('availability')), true); + $mform->setDefault('visible', 1); + + $mform->addElement('text', 'password', get_string('enrolmentkey'), 'size="25"'); + $mform->setHelpButton('password', array('enrolmentkey', get_string('enrolmentkey')), true); + $mform->setDefault('password', ''); + $mform->setType('password', PARAM_RAW); + + $choices = array(); + $choices['0'] = get_string('guestsno'); + $choices['1'] = get_string('guestsyes'); + $choices['2'] = get_string('guestskey'); + $mform->addElement('select', 'guest', get_string('opentoguests'), $choices); + $mform->setHelpButton('guest', array('guestaccess', get_string('opentoguests')), true); + $mform->setDefault('guest', 0); + + if (!empty($course) && method_exists(enrolment_factory::factory($course->enrol), 'print_entry') && $course->enrol != 'manual') { + $costgroup=array(); + $currencies = get_list_of_currencies(); + $costgroup[]= &MoodleQuickForm::createElement('text','cost', '', 'maxlength="6" size="6"'); + $costgroup[]= &MoodleQuickForm::createElement('select', 'currency', '', $currencies); + $mform->addGroup($costgroup, 'costgrp', get_string('cost'), ' ', false); + $mform->setHelpButton('costgrp', array('cost', get_string('cost')), true); + $mform->setDefault('cost', ''); + $mform->setDefault('currency', empty($CFG->enrol_currency) ? 'USD' : $CFG->enrol_currency); + // TODO: fix rule usage and add proper error message + //$mform->addRule('cost', get_string('error'), 'numeric', null, 'client'); + } + +//-------------------------------------------------------------------------------- + $mform->addElement('header','', get_string('language')); + + $languages=array(); + $languages[''] = get_string('forceno'); + $languages += get_list_of_languages(); + $mform->addElement('select', 'lang', get_string('forcelanguage'), $languages); + +//-------------------------------------------------------------------------------- + if (has_capability('moodle/site:config', $systemcontext) && ((!empty($course->requested) && $CFG->restrictmodulesfor == 'requested') || $CFG->restrictmodulesfor == 'all')) { + $mform->addElement('header', '', get_string('restrictmodules')); + + $options = array(); + $options['0'] = get_string('no'); + $options['1'] = get_string('yes'); + $mform->addElement('select', 'restrictmodules', get_string('restrictmodules'), $options, + array('onChange'=>"document.getElementById('id_allowedmods').disabled=". + "((this.selectedIndex==0)?true:false);")); + $mods = array(0=>get_string('allownone')); + $mods += get_records_menu('modules', '','','','id, name'); + $disabled=($mform->exportValue('restrictmodules')==1) ? array() :array('disabled' => 'disabled') ; + + + $mform->addElement('select', 'allowedmods', get_string('to'),$mods, + array('multiple'=>'multiple', 'size'=>'10', 'id'=>'allowedmods') + +$disabled); + }else { + $mform->addElement('hidden', 'restrictmodules', null); + } + if ($CFG->restrictmodulesfor == 'all') { + $mform->setDefault('allowedmods', explode(',',$CFG->defaultallowedmodules)); + if (!empty($CFG->restrictbydefault)) { + $mform->setDefault('restrictmodules', 1); + } + } + $mform->setType('restrictmodules', PARAM_INT); + +//-------------------------------------------------------------------------------- + $mform->addElement('submit', 'submit', get_string('savechanges')); + +//-------------------------------------------------------------------------------- + $mform->addElement('hidden', 'id', null); + $mform->setType('id', PARAM_INT); + + // fill in default teacher and student names to keep backwards compatibility for a while + $mform->addElement('hidden', 'teacher', get_string('defaultcourseteacher')); + $mform->addElement('hidden', 'teachers', get_string('defaultcourseteachers')); + $mform->addElement('hidden', 'student', get_string('defaultcoursestudent')); + $mform->addElement('hidden', 'students', get_string('defaultcoursestudents')); + + +//-------------------------------------------------------------------------------- + $renderer->addStopFieldsetElements('submit'); + + +// now override defaults if course already exists + if (!empty($course)) { + $this->set_defaults($course); + } - if(!has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $toform->category))) { - $mform->addElement('hidden', 'category', null); - } - $mform->addElement('hidden', 'id', null); - - $mform->setDefault('restrictmodules',(isset($toform->restrictmodules))?$toform->restrictmodules:0); - if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID)) && ((!empty($course->requested) && $CFG->restrictmodulesfor == 'requested') || $CFG->restrictmodulesfor == 'all')) { - unset($options); - $options[0] = get_string("no"); - $options[1] = get_string("yes"); - $mform->addElement('header', '', get_string("restrictmodules")); - $mform->addElement('select', 'restrictmodules', get_string("restrictmodules"), $options, - array('onChange'=>"document.getElementById('id_allowedmods').disabled=". - "((this.selectedIndex==0)?true:false);")); - $mods = array(0=>get_string('allownone')); - $mods += get_records_menu("modules", '','','','id, name'); - $disabled=($mform->exportValue('restrictmodules')==1) ? array() :array('disabled' => 'disabled') ; - - - $mform->setDefault('allowedmods', $toform->allowedmods); - $mform->addElement('select', 'allowedmods', get_string("to"),$mods, - array('multiple'=>"multiple", 'size'=>"10", 'id'=>"allowedmods") - +$disabled); - }else { - $mform->addElement('hidden', 'restrictmodules', $toform->restrictmodules); } - $mform->setHelpButtons(array('category'=>array("coursecategory", get_string("category")), - 'fullname'=>array("coursefullname", get_string("fullname")), - 'shortname'=>array("courseshortname", get_string("shortname")), - 'idnumber'=>array("courseidnumber", get_string("idnumbercourse")), - 'summary'=>array("text", get_string("helptext")), - 'format'=>array("courseformats", get_string("courseformats")), - 'summary'=>array("coursestartdate", get_string("startdate")), - 'enrol'=>array("courseenrolmentplugins", get_string("enrolmentplugins")), - 'enrollable'=>array("courseenrollable", get_string("enrollable")), - 'expirynotify'=>array("expirynotify", get_string("expirynotify")), - 'notifystudents'=>array("expirynotifystudents", get_string("expirynotifystudents")), - 'expirythreshold'=>array("expirythreshold", get_string("expirythreshold")), - 'groupmode'=>array("groupmode", get_string("groupmode")), - 'groupmodeforce'=>array("groupmodeforce", get_string("groupmodeforce")), - 'visible'=>array("courseavailability", get_string("availability")), - 'password'=>array("enrolmentkey", get_string("enrolmentkey")), - 'guest'=>array("guestaccess", get_string("opentoguests")), - 'costgrp'=>array("cost", get_string("cost")), - 'hiddensections'=>array("coursehiddensections", get_string("hiddensections")), - 'newsitems'=>array("coursenewsitems", get_string("newsitemsnumber")), - 'showgrades'=>array("coursegrades", get_string("grades")), - 'showreports'=>array("coursereports", get_string("activityreport")), - 'maxbytes'=>array("courseuploadsize", get_string("maximumupload")), - 'metacourse'=>array("metacourse", get_string("metacourse")), - 'defaultrole'=>array("coursedefaultrole", get_string("defaultrole", 'role'))), - true); - $mform->addElement('submit', 'submit', get_string("savechanges")); - - $mform->addRule('fullname', get_string("missingfullname"), 'required', null, 'client'); - $mform->addRule('shortname', get_string("missingshortname"), 'required', null, 'client'); - $mform->addRule('summary', get_string("missingsummary"), 'required', null, 'client'); - $mform->addRule('category', get_string("missingcategory"), 'required', null, 'client'); - - /** - * a Form rule check - if we need to create rules which involve the contents of more than one - * field this is the way to do it. We can do it all at once in one function or create several - * form rules. - * - * @param array $fields values from form without slashes - * @return mixed array of errors or true if passed check - */ - function form_check($fields){ - global $course; + +/// perform some extra moodle validation + function validation($data){ $errors= array(); - if ($foundcourses = get_records("course", "shortname", addslashes($fields['shortname']))) { - if (!empty($course->id)) { - unset($foundcourses[$course->id]); + if ($foundcourses = get_records('course', 'shortname', $data['shortname'])) { + if (!empty($data['id'])) { + unset($foundcourses[$data['id']]); } if (!empty($foundcourses)) { foreach ($foundcourses as $foundcourse) { $foundcoursenames[] = $foundcourse->fullname; } - $foundcoursenamestring = addslashes(implode(',', $foundcoursenames)); - - $errors['shortname']= get_string("shortnametaken", "", $foundcoursenamestring); - + $foundcoursenamestring = implode(',', $foundcoursenames); + $errors['shortname']= get_string('shortnametaken', '', $foundcoursenamestring); } - - } - if (empty($fields['enrolenddisabled'])){ - $enrolenddate=make_timestamp($fields['enrolenddate']['year'], - $fields['enrolenddate']['month'], - $fields['enrolenddate']['day']); - $enrolstartdate=make_timestamp($fields['enrolstartdate']['year'], - $fields['enrolstartdate']['month'], - $fields['enrolstartdate']['day']); - if ($enrolenddate <= $enrolstartdate){ - $errors['enroldateendgrp']=get_string("enrolenddaterror"); + + if (empty($data['enrolenddisabled'])){ + if ($data['enrolenddate'] <= $data['enrolstartdate']){ + $errors['enroldateendgrp'] = get_string('enrolenddaterror'); } } - if (0==count($errors)){ + + if (0 == count($errors)){ return true; - }else { + } else { return $errors; } } - $mform->addFormRule('form_check'); - - $renderer =& $mform->defaultRenderer(); - $renderer->addStopFieldsetElements('submit'); -?> +} +?> \ No newline at end of file