Enrol script does not die when manual enrol method is not found
[mdk.git] / mdk / scripts / enrol.php
1 <?php
2 /**
3 * Enrol users in all the courses.
4 *
5 * Users with username starting with:
6 * - s become students
7 * - t become teachers
8 * - m become managers
9 *
10 * In every single course on the site.
11 */
12
13 define('CLI_SCRIPT', true);
14 require(__DIR__ . '/config.php');
15 require_once($CFG->libdir . '/accesslib.php');
16 require_once($CFG->dirroot . '/enrol/manual/lib.php');
17
18 function mdk_get_enrol_instance($courseid) {
19 global $DB;
20 static $coursecache = array();
21 if (!isset($coursecache[$courseid])) {
22 $coursecache[$courseid] = $DB->get_record('enrol', array('courseid' => $courseid, 'enrol' => 'manual'));
23 if (!$coursecache[$courseid]) {
24 mtrace("Could not find manual enrolment method for course {$courseid}.");
25 }
26 }
27 return $coursecache[$courseid];
28 }
29
30 function mdk_get_role($username) {
31 static $rolecache = array();
32 $letter = substr($username, 0, 1);
33 switch ($letter) {
34 case 's':
35 $archetype = 'student';
36 break;
37 case 't':
38 $archetype = 'editingteacher';
39 break;
40 case 'm':
41 $archetype = 'manager';
42 break;
43 default:
44 return false;
45 }
46 if (!isset($rolecache[$archetype])) {
47 $role = get_archetype_roles($archetype);
48 $rolecache[$archetype] = reset($role);
49 }
50 return $rolecache[$archetype];
51 }
52
53 $sql = "SELECT id, username
54 FROM {user}
55 WHERE (username LIKE 's%'
56 OR username LIKE 't%'
57 OR username LIKE 'm%')
58 AND deleted = 0
59 AND username NOT LIKE 'tool_generator_%'";
60 $users = $DB->get_recordset_sql($sql, array());
61 $courses = $DB->get_records_select('course', 'id > ?', array(1), '', 'id, startdate');
62 $plugin = new enrol_manual_plugin();
63
64 foreach ($users as $user) {
65 mtrace('Enrolling ' . $user->username);
66 $role = mdk_get_role($user->username);
67 if (!$role) {
68 continue;
69 }
70 foreach ($courses as $course) {
71 $instance = mdk_get_enrol_instance($course->id);
72 if (!$instance) {
73 continue;
74 }
75 // Enrol the day before the course startdate, because if we create a course today its default
76 // startdate is tomorrow, and we would never realise why the enrolments do not work.
77 $plugin->enrol_user($instance, $user->id, $role->id, $course->startdate - 86400, 0);
78 }
79 }
80
81 $users->close();