Hello guys,
I have set up a external database enrolment plugin.
That's all is going well except as I run sync.php because it doesn´t let me enrol user in the moodle frontpage(idCourse=1).
The message says: Invalid request to add enrol to frontpage
I know where the code is treating with this condition but i am afraid about changing this lines and i wonder if it could be problematic later.
Aparently the only change that i would have to make be taking out the condition wich launchs the coding_exception. Wouldn't it?
...moodle/lib/enrollib.php
/**
* Enrol user into course via enrol instance.
*
* @param stdClass $instance
* @param int $userid
* @param int $roleid optional role id
* @param int $timestart 0 means unknown
* @param int $timeend 0 means forever
* @param int $status default to ENROL_USER_ACTIVE for new enrolments, no change by default in updates
* @return void
*/
public function enrol_user(stdClass $instance, $userid, $roleid = NULL, $timestart = 0, $timeend = 0, $status = NULL) {
global $DB, $USER, $CFG; // CFG necessary!!!
if ($instance->courseid == SITEID) {
throw new coding_exception('invalid attempt to enrol into frontpage course!');
}
$name = $this->get_name();
$courseid = $instance->courseid;
if ($instance->enrol !== $name) {
throw new coding_exception('invalid enrol instance!');
}
$inserted = false;
$updated = false;
if ($ue = $DB->get_record('user_enrolments', array('enrolid'=>$instance->id, 'userid'=>$userid))) {
//only update if timestart or timeend or status are different.
if ($ue->timestart != $timestart or $ue->timeend != $timeend or (!is_null($status) and $ue->status != $status)) {
$ue->timestart = $timestart;
$ue->timeend = $timeend;
if (!is_null($status)) {
$ue->status = $status;
}
$ue->modifierid = $USER->id;
$ue->timemodified = time();
$DB->update_record('user_enrolments', $ue);
$updated = true;
}
} else {
$ue = new stdClass();
$ue->enrolid = $instance->id;
$ue->status = is_null($status) ? ENROL_USER_ACTIVE : $status;
$ue->userid = $userid;
$ue->timestart = $timestart;
$ue->timeend = $timeend;
$ue->modifierid = $USER->id;
$ue->timecreated = time();
$ue->timemodified = $ue->timecreated;
$ue->id = $DB->insert_record('user_enrolments', $ue);
$inserted = true;
}
if ($inserted) {
// add extra info and trigger event
$ue->courseid = $courseid;
$ue->enrol = $name;
events_trigger('user_enrolled', $ue);
} else if ($updated) {
$ue->courseid = $courseid;
$ue->enrol = $name;
events_trigger('user_enrol_modified', $ue);
// resets current enrolment caches
$context->mark_dirty();
}
if ($roleid) {
// this must be done after the enrolment event so that the role_assigned event is triggered afterwards
if ($this->roles_protected()) {
role_assign($roleid, $userid, $context->id, 'enrol_'.$name, $instance->id);
} else {
role_assign($roleid, $userid, $context->id);
}
}
// reset current user enrolment caching
if ($userid == $USER->id) {
if (isset($USER->enrol['enrolled'][$courseid])) {
unset($USER->enrol['enrolled'][$courseid]);
}
if (isset($USER->enrol['tempguest'][$courseid])) {
unset($USER->enrol['tempguest'][$courseid]);
remove_temp_course_roles($context);
}
}
}
Regards,
Raul