Enrolment architecture version 0.5 !
[moodle.git] / enrol / enrol.class.php
1 <?php   /// $Id$
2 ///////////////////////////////////////////////////////////////////////////
3 //                                                                       //
4 // NOTICE OF COPYRIGHT                                                   //
5 //                                                                       //
6 // Moodle - Modular Object-Oriented Dynamic Learning Environment         //
7 //          http://moodle.org                                            //
8 //                                                                       //
9 // Copyright (C) 2004  Martin Dougiamas  http://moodle.com               //
10 //                                                                       //
11 // This program is free software; you can redistribute it and/or modify  //
12 // it under the terms of the GNU General Public License as published by  //
13 // the Free Software Foundation; either version 2 of the License, or     //
14 // (at your option) any later version.                                   //
15 //                                                                       //
16 // This program is distributed in the hope that it will be useful,       //
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of        //
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
19 // GNU General Public License for more details:                          //
20 //                                                                       //
21 //          http://www.gnu.org/copyleft/gpl.html                         //
22 //                                                                       //
23 ///////////////////////////////////////////////////////////////////////////
26 /**
27 * enrolment_base is the base class for enrolment plugins
28 *
29 * This class provides all the functionality for an enrolment plugin
30 * In fact it includes all the code for the default, "internal" method
31 * so that other plugins can override these as necessary.
32 */
34 class enrolment_base {
36 var $errormsg;
40 /**
41 * Returns information about the courses a student has access to
42 *
43 * Set the $user->student course array
44 * Set the $user->timeaccess course array
45 *
46 * @param    user  referenced object, must contain $user->id already set
47 */
48 function get_student_courses(&$user) {
50     if ($students = get_records("user_students", "userid", $user->id)) {
51         $currenttime = time();
52         foreach ($students as $student) {
54         /// Is course visible?
56             if (get_field("course", "visible", "id", $student->course)) {
58             /// Is student enrolled for a specific time period?
60                 if ( ( $student->timestart == 0 or ( $currenttime > $student->timestart )) and 
61                      ( $student->timeend   == 0 or ( $currenttime < $student->timeend )) ) {
62                     $user->student[$student->course] = true;
63                     $user->timeaccess[$student->course] = $student->timeaccess;
64                 }
65             }
66         }
67     }   
68 }
72 /**
73 * Returns information about the courses a student has access to
74 *
75 * Set the $user->teacher course array
76 * Set the $user->teacheredit course array
77 * Set the $user->timeaccess course array
78 *
79 * @param    user  referenced object, must contain $user->id already set
80 */
81 function get_teacher_courses(&$user) {
83     if ($teachers = get_records("user_teachers", "userid", $user->id)) {
84         $currenttime = time();
85         foreach ($teachers as $teacher) {
87         /// Is teacher only teaching this course for a specific time period?
89             if ( ( $teacher->timestart == 0 or ( $currenttime > $teacher->timestart )) and 
90                  ( $teacher->timeend   == 0 or ( $currenttime < $teacher->timeend )) ) {
92                 $user->teacher[$teacher->course] = true;
94                 if ($teacher->editall) {
95                     $user->teacheredit[$teacher->course] = true;
96                 }   
98                 $user->timeaccess[$teacher->course] = $teacher->timeaccess;
99             }
100         }   
101     }
107 /**
108 * Prints the entry form/page for this enrolment
110 * This is only called from course/enrol.php
111 * Most plugins will probably override this to print payment 
112 * forms etc, or even just a notice to say that manual enrolment 
113 * is disabled
115 * @param    course  current course object
116 */
117 function print_entry($course) {
118     global $CFG, $USER, $SESSION;
120     $strloginto = get_string("loginto", "", $course->shortname);
121     $strcourses = get_string("courses");
124 /// Double check just in case they are actually enrolled already 
125 /// This might occur if they were manually enrolled during this session
127     if (record_exists("user_students", "userid", $USER->id, "course", $course->id)) {
128         $USER->student[$course->id] = true;
130         if ($SESSION->wantsurl) {
131             $destination = $SESSION->wantsurl;
132             unset($SESSION->wantsurl);
133         } else {
134             $destination = "$CFG->wwwroot/course/view.php?id=$course->id";
135         }
137         redirect($destination);
138     }
141 /// Automatically enrol into courses without password
143     if ($course->password == "") {   // no password, so enrol
145         if (isguest()) {
146             add_to_log($course->id, "course", "guest", "view.php?id=$course->id", "$USER->id");
148         } else if (empty($_GET['confirm'])) {
150             print_header($strloginto, $course->fullname, "<a href=\".\">$strcourses</a> -> $strloginto");
151             echo "<br />";
152             notice_yesno(get_string("enrolmentconfirmation"), "enrol.php?id=$course->id&confirm=1", $CFG->wwwroot);
153             print_footer();
154             exit;
156         } else {
158             if (! enrol_student($USER->id, $course->id)) {
159                 error("An error occurred while trying to enrol you.");
160             }
161             add_to_log($course->id, "course", "enrol", "view.php?id=$course->id", "$USER->id");
163             $USER->student[$course->id] = true;
165             if ($SESSION->wantsurl) {
166                 $destination = $SESSION->wantsurl;
167                 unset($SESSION->wantsurl);
168             } else {
169                 $destination = "$CFG->wwwroot/course/view.php?id=$course->id";
170             }
172             redirect($destination);
173         }
174     }
176     $teacher = get_teacher($course->id);
177     if (!isset($password)) {
178         $password = "";
179     }
182     print_header($strloginto, $course->fullname, "<A HREF=\".\">$strcourses</A> -> $strloginto", "form.password");
184     print_course($course);
186     include("$CFG->dirroot/enrol/internal/enrol.html");
188     print_footer();
194 /**
195 * The other half to print_entry, this checks the form data
197 * This function checks that the user has completed the task on the 
198 * enrolment entry page and then enrolls them.
200 * @param    form    the form data submitted, as an object
201 * @param    course  the current course, as an object
202 */
203 function check_entry($form, $course) {
204     global $CFG, $USER, $SESSION;
206     if ($form->password == $course->password) {
208         if (isguest()) {
209         
210             add_to_log($course->id, "course", "guest", "view.php?id=$course->id", $_SERVER['REMOTE_ADDR']);
211             
212         } else if (!record_exists("user_students", "userid", $USER->id, "course", $course->id)) {
214             if (! enrol_student($USER->id, $course->id)) {
215                 error("An error occurred while trying to enrol you.");
216             }
217             
218             $subject = get_string("welcometocourse", "", $course->fullname);
219             $a->coursename = $course->fullname;
220             $a->profileurl = "$CFG->wwwroot/user/view.php?id=$USER->id&course=$course->id";
221             $message = get_string("welcometocoursetext", "", $a);
222             
223             if (! $teacher = get_teacher($course->id)) {
224                 $teacher = get_admin();
225             }
226             
227             email_to_user($USER, $teacher, $subject, $message);
228             add_to_log($course->id, "course", "enrol", "view.php?id=$course->id", "$USER->id");
229         }
230         
231         $USER->student[$course->id] = true;
232         
233         if ($SESSION->wantsurl) {
234             $destination = $SESSION->wantsurl;
235             unset($SESSION->wantsurl);
236         } else {
237             $destination = "$CFG->wwwroot/course/view.php?id=$course->id";
238         }
239         
240         redirect($destination);
242     } else {
243         $this->errormsg = get_string("enrolmentkeyhint", "", substr($course->password,0,1));
244     }
245                         
249 /**
250 * Prints a form for configuring the current enrolment plugin
252 * This function is called from admin/enrol.php, and outputs a 
253 * full page with a form for defining the current enrolment plugin.
255 * @param    page  an object containing all the data for this page
256 */
257 function print_config($page) {
261 /**
262 * Processes and stored configuration data for the enrolment plugin
264 * Processes and stored configuration data for the enrolment plugin
266 * @param    config  all the configuration data as entered by the admin
267 */
268 function process_config($config) {
272 /**
273 * This function is run by admin/cron.php every time 
275 * The cron function can perform regular checks for the current 
276 * enrollment plugin.  For example it can check a foreign database,
277 * all look for a file to pull data in from
279 */
280 function cron() {
284 } /// end of class
286 ?>