1
<?php // $Id: enrol.php,v 1.3.2.3 2004/09/25 15:31:37 moodler Exp $
3
require_once("$CFG->dirroot/enrol/enrol.class.php");
5
class enrolment_plugin extends enrolment_base {
9
/// Leave get_teacher_courses() function unchanged for the time being
12
/// Leave cron() function unchanged
16
/// Overide the base get_student_courses() function
17
function get_student_courses(&$user) {
20
parent::get_student_courses($user); /// Start with the list of known enrolments
21
/// If the database fails we can at least use this
23
// This is a hack to workaround what seems to be a bug in ADOdb with accessing
24
// two databases of the same kind ... it seems to get confused when trying to access
25
// the first database again, after having accessed the second.
26
// The following hack will make the database explicit which keeps it happy
28
if (strpos($CFG->prefix, $CFG->dbname) === false) {
29
$oldprefix = $CFG->prefix;
30
$CFG->prefix = "$CFG->dbname.$CFG->prefix";
33
// Try to connect to the external database
35
$enroldb = &ADONewConnection($CFG->enrol_dbtype);
37
if ($enroldb->PConnect($CFG->enrol_dbhost,$CFG->enrol_dbuser,$CFG->enrol_dbpass,$CFG->enrol_dbname)) {
39
$courselist = array(); /// Initialise new array
40
$newstudent = array();
42
/// Get the authoritative list of enrolments from the database
44
$useridnumber = $user->{$CFG->enrol_localuserfield};
47
if ($rs = $enroldb->Execute("SELECT $CFG->enrol_remotecoursefield
48
FROM $CFG->enrol_dbtable
49
WHERE $CFG->enrol_remoteuserfield = '$useridnumber' ")) {
51
if ($rs->RecordCount() > 0) {
53
$courselist[] = $rs->fields[0];
57
foreach ($courselist as $coursefield) {
58
if ($course = get_record('course', $CFG->enrol_localcoursefield, $coursefield)) {
59
$newstudent[$course->id] = true; /// Add it to new list
60
if (isset($user->student[$course->id])) { /// We have it already
61
unset($user->student[$course->id]); /// Remove from old list
63
enrol_student($user->id, $course->id); /// Enrol the student
69
if (!empty($user->student)) { /// We have some courses left that we need to unenrol from
70
foreach ($user->student as $courseid => $value) {
71
unenrol_student($user->id, $courseid); /// Unenrol the student
72
unset($user->student[$course->id]); /// Remove from old list
76
$user->student = $newstudent; /// Overwrite the array with the new one
82
if (!empty($oldprefix)) {
83
$CFG->prefix = $oldprefix; // Restore it just in case
88
/// Override the base print_entry() function
89
function print_entry($course) {
92
if (! empty($CFG->enrol_allowinternal) ) {
93
parent::print_entry($course);
96
notice(get_string("enrolmentnointernal"), $CFG->wwwroot);
101
/// Override the base check_entry() function
102
function check_entry($form, $course) {
105
if (! empty($CFG->enrol_allowinternal) ) {
106
parent::check_entry($form, $course);
111
/// Overide the get_access_icons() function
112
function get_access_icons($course) {
116
/// Overide the base config_form() function
117
function config_form($frm) {
119
include("$CFG->dirroot/enrol/database/config.html");
122
/// Override the base process_config() function
123
function process_config($config) {
125
if (!isset($config->enrol_dbtype)) {
126
$config->enrol_dbtype = 'mysql';
128
set_config('enrol_dbtype', $config->enrol_dbtype);
130
if (!isset($config->enrol_dbhost)) {
131
$config->enrol_dbhost = '';
133
set_config('enrol_dbhost', $config->enrol_dbhost);
135
if (!isset($config->enrol_dbuser)) {
136
$config->enrol_dbuser = '';
138
set_config('enrol_dbuser', $config->enrol_dbuser);
140
if (!isset($config->enrol_dbpass)) {
141
$config->enrol_dbpass = '';
143
set_config('enrol_dbpass', $config->enrol_dbpass);
145
if (!isset($config->enrol_dbname)) {
146
$config->enrol_dbname = '';
148
set_config('enrol_dbname', $config->enrol_dbname);
150
if (!isset($config->enrol_dbtable)) {
151
$config->enrol_dbtable = '';
153
set_config('enrol_dbtable', $config->enrol_dbtable);
155
if (!isset($config->enrol_localcoursefield)) {
156
$config->enrol_localcoursefield = '';
158
set_config('enrol_localcoursefield', $config->enrol_localcoursefield);
160
if (!isset($config->enrol_localuserfield)) {
161
$config->enrol_localuserfield = '';
163
set_config('enrol_localuserfield', $config->enrol_localuserfield);
165
if (!isset($config->enrol_remotecoursefield)) {
166
$config->enrol_remotecoursefield = '';
168
set_config('enrol_remotecoursefield', $config->enrol_remotecoursefield);
170
if (!isset($config->enrol_remoteuserfield)) {
171
$config->enrol_remoteuserfield = '';
173
set_config('enrol_remoteuserfield', $config->enrol_remoteuserfield);
175
if (!isset($config->enrol_allowinternal)) {
176
$config->enrol_allowinternal = '';
178
set_config('enrol_allowinternal', $config->enrol_allowinternal);