MDL-17929 enrol_meta: allow to edit instance

This commit is contained in:
Marina Glancy
2015-04-22 14:36:38 +08:00
parent e284e1792c
commit bacb7b1f6e
3 changed files with 83 additions and 17 deletions
+25 -10
View File
@@ -28,6 +28,7 @@ require_once("$CFG->dirroot/enrol/meta/locallib.php");
$id = required_param('id', PARAM_INT); // course id
$message = optional_param('message', null, PARAM_TEXT);
$instanceid = optional_param('enrolid', 0, PARAM_INT);
$course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
$context = context_course::instance($course->id, MUST_EXIST);
@@ -41,11 +42,19 @@ require_login($course);
require_capability('moodle/course:enrolconfig', $context);
$enrol = enrol_get_plugin('meta');
if (!$enrol->get_newinstance_link($course->id)) {
redirect(new moodle_url('/enrol/instances.php', array('id'=>$course->id)));
if ($instanceid) {
require_capability('enrol/meta:config', $context);
$instance = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'meta',
'id' => $instanceid), '*', MUST_EXIST);
} else {
if (!$enrol->get_newinstance_link($course->id)) {
redirect(new moodle_url('/enrol/instances.php', array('id' => $course->id)));
}
$instance = null;
}
$mform = new enrol_meta_addinstance_form(NULL, $course);
$mform = new enrol_meta_addinstance_form(null, array('course' => $course, 'instance' => $instance));
if ($mform->is_cancelled()) {
redirect(new moodle_url('/enrol/instances.php', array('id'=>$course->id)));
@@ -54,15 +63,21 @@ if ($mform->is_cancelled()) {
if (!empty($data->customint2) && $data->customint2 == ENROL_META_CREATE_GROUP) {
$data->customint2 = enrol_meta_create_new_group($course->id, $data->link);
}
$eid = $enrol->add_instance($course, array('customint1' => $data->link,
'customint2' => $data->customint2));
enrol_meta_sync($course->id);
if (!empty($data->submitbuttonnext)) {
redirect(new moodle_url('/enrol/meta/addinstance.php',
array('id' => $course->id, 'message' => 'added')));
if ($instance) {
if ($data->customint2 != $instance->customint2) {
$DB->update_record('enrol', array('id' => $instance->id, 'customint2' => $data->customint2));
enrol_meta_sync($course->id);
}
} else {
redirect(new moodle_url('/enrol/instances.php', array('id' => $course->id)));
$eid = $enrol->add_instance($course, array('customint1' => $data->link,
'customint2' => $data->customint2));
enrol_meta_sync($course->id);
if (!empty($data->submitbuttonnext)) {
redirect(new moodle_url('/enrol/meta/addinstance.php',
array('id' => $course->id, 'message' => 'added')));
}
}
redirect(new moodle_url('/enrol/instances.php', array('id' => $course->id)));
}
$PAGE->set_heading($course->fullname);
+33 -7
View File
@@ -33,10 +33,19 @@ class enrol_meta_addinstance_form extends moodleform {
global $CFG, $DB;
$mform = $this->_form;
$course = $this->_customdata;
$course = $this->_customdata['course'];
$instance = $this->_customdata['instance'];
$this->course = $course;
$existing = $DB->get_records('enrol', array('enrol'=>'meta', 'courseid'=>$course->id), '', 'customint1, id');
if ($instance) {
$where = 'WHERE c.id = :courseid';
$params = array('courseid' => $instance->customint1);
$existing = array();
} else {
$where = '';
$params = array();
$existing = $DB->get_records('enrol', array('enrol' => 'meta', 'courseid' => $course->id), '', 'customint1, id');
}
// TODO: this has to be done via ajax or else it will fail very badly on large sites!
$courses = array('' => get_string('choosedots'));
@@ -46,8 +55,8 @@ class enrol_meta_addinstance_form extends moodleform {
$plugin = enrol_get_plugin('meta');
$sortorder = 'c.' . $plugin->get_config('coursesort', 'sortorder') . ' ASC';
$sql = "SELECT c.id, c.fullname, c.shortname, c.visible $select FROM {course} c $join ORDER BY " . $sortorder;
$rs = $DB->get_recordset_sql($sql, array('contextlevel' => CONTEXT_COURSE));
$sql = "SELECT c.id, c.fullname, c.shortname, c.visible $select FROM {course} c $join $where ORDER BY $sortorder";
$rs = $DB->get_recordset_sql($sql, array('contextlevel' => CONTEXT_COURSE) + $params);
foreach ($rs as $c) {
if ($c->id == SITEID or $c->id == $course->id or isset($existing[$c->id])) {
continue;
@@ -82,9 +91,20 @@ class enrol_meta_addinstance_form extends moodleform {
$mform->addElement('hidden', 'id', null);
$mform->setType('id', PARAM_INT);
$this->add_add_buttons();
$mform->addElement('hidden', 'enrolid');
$mform->setType('enrolid', PARAM_INT);
$this->set_data(array('id'=>$course->id));
$data = array('id' => $course->id);
if ($instance) {
$data['link'] = $instance->customint1;
$data['enrolid'] = $instance->id;
$data['customint2'] = $instance->customint2;
$mform->freeze('link');
$this->add_action_buttons();
} else {
$this->add_add_buttons();
}
$this->set_data($data);
}
/**
@@ -103,9 +123,15 @@ class enrol_meta_addinstance_form extends moodleform {
function validation($data, $files) {
global $DB, $CFG;
$errors = parent::validation($data, $files);
if ($this->_customdata['instance']) {
// Nothing to validate in case of editing.
return $errors;
}
// TODO: this is duplicated here because it may be necessary once we implement ajax course selection element
$errors = parent::validation($data, $files);
if (!$c = $DB->get_record('course', array('id'=>$data['link']))) {
$errors['link'] = get_string('required');
} else {
+25
View File
@@ -253,4 +253,29 @@ class enrol_meta_plugin extends enrol_plugin {
// Nothing to do here, the group members are added in $this->restore_group_restored().
return;
}
/**
* Returns edit icons for the page with list of instances.
* @param stdClass $instance
* @return array
*/
public function get_action_icons(stdClass $instance) {
global $OUTPUT;
if ($instance->enrol !== 'meta') {
throw new coding_exception('invalid enrol instance!');
}
$context = context_course::instance($instance->courseid);
$icons = array();
if (has_capability('enrol/meta:config', $context)) {
$editlink = new moodle_url("/enrol/meta/addinstance.php",
array('id' => $instance->courseid, 'enrolid' => $instance->id));
$icons[] = $OUTPUT->action_icon($editlink, new pix_icon('t/edit', get_string('edit'), 'core',
array('class' => 'iconsmall')));
}
return $icons;
}
}