MDL-17929 enrol_meta: allow to edit instance
This commit is contained in:
+25
-10
@@ -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,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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user