3 // This file is executed right after the install.xml
6 function xmldb_main_install() {
7 global $CFG, $DB, $SITE;
9 /// make sure system context exists
10 $syscontext = get_system_context(false);
11 if ($syscontext->id != 1) {
12 throw new moodle_exception('generalexceptionmessage', 'error', '', 'Unexpected system context id created!');
16 /// create site course
17 $newsite = new object();
18 $newsite->fullname = "";
19 $newsite->shortname = "";
20 $newsite->summary = NULL;
21 $newsite->newsitems = 3;
22 $newsite->numsections = 0;
23 $newsite->category = 0;
24 $newsite->format = 'site'; // Only for this course
25 $newsite->teacher = get_string("defaultcourseteacher");
26 $newsite->teachers = get_string("defaultcourseteachers");
27 $newsite->student = get_string("defaultcoursestudent");
28 $newsite->students = get_string("defaultcoursestudents");
29 $newsite->timemodified = time();
31 $DB->insert_record('course', $newsite);
34 throw new moodle_exception('generalexceptionmessage', 'error', '', 'Unexpected site course id created!');
38 /// make sure site course context exists
39 get_context_instance(CONTEXT_COURSE, $SITE->id);
41 /// create default course category
42 $cat = get_course_category();
45 'rolesactive' => '0', // marks fully set up system
47 'auth_pop3mailbox' => 'INBOX',
48 'enrol_plugins_enabled' => 'manual,guest,self,cohort',
50 'template' => 'default',
51 'theme' => theme_config::DEFAULT_THEME,
52 'filter_multilang_converted' => 1,
53 'siteidentifier' => random_string(32).get_host_from_url($CFG->wwwroot),
54 'backup_version' => 2008111700,
55 'backup_release' => '2.0 dev',
56 'blocks_version' => 2007081300, // might be removed soon
57 'mnet_dispatcher_mode' => 'off',
58 'sessiontimeout' => 7200, // must be present during roles installation
59 'stringfilters' => '', // These two are managed in a strange way by the filters
60 'filterall' => 0, // setting page, so have to be initialised here.
61 'texteditors' => 'tinymce,textarea',
63 foreach($defaults as $key => $value) {
64 set_config($key, $value);
69 $mnethost = new object();
70 $mnethost->wwwroot = $CFG->wwwroot;
73 $mnethost->public_key = '';
75 if (empty($_SERVER['SERVER_ADDR'])) {
76 // SERVER_ADDR is only returned by Apache-like webservers
77 preg_match("@^(?:http[s]?://)?([A-Z0-9\-\.]+).*@i", $CFG->wwwroot, $matches);
78 $my_hostname = $matches[1];
79 $my_ip = gethostbyname($my_hostname); // Returns unmodified hostname on failure. DOH!
80 if ($my_ip == $my_hostname) {
81 $mnethost->ip_address = 'UNKNOWN';
83 $mnethost->ip_address = $my_ip;
86 $mnethost->ip_address = $_SERVER['SERVER_ADDR'];
89 $mnetid = $DB->insert_record('mnet_host', $mnethost);
90 set_config('mnet_localhost_id', $mnetid);
92 // Initial insert of mnet applications info
93 $mnet_app = new object();
94 $mnet_app->name = 'moodle';
95 $mnet_app->display_name = 'Moodle';
96 $mnet_app->xmlrpc_server_url = '/mnet/xmlrpc/server.php';
97 $mnet_app->sso_land_url = '/auth/mnet/land.php';
98 $mnet_app->sso_jump_url = '/auth/mnet/land.php';
99 $moodleapplicationid = $DB->insert_record('mnet_application', $mnet_app);
101 $mnet_app = new object();
102 $mnet_app->name = 'mahara';
103 $mnet_app->display_name = 'Mahara';
104 $mnet_app->xmlrpc_server_url = '/api/xmlrpc/server.php';
105 $mnet_app->sso_land_url = '/auth/xmlrpc/land.php';
106 $mnet_app->sso_jump_url = '/auth/xmlrpc/jump.php';
107 $DB->insert_record('mnet_application', $mnet_app);
109 // Set up the probably-to-be-removed-soon 'All hosts' record
110 $mnetallhosts = new object();
111 $mnetallhosts->wwwroot = '';
112 $mnetallhosts->ip_address = '';
113 $mnetallhosts->public_key = '';
114 $mnetallhosts->public_key_expires = 0;
115 $mnetallhosts->last_connect_time = 0;
116 $mnetallhosts->last_log_id = 0;
117 $mnetallhosts->deleted = 0;
118 $mnetallhosts->name = 'All Hosts';
119 $mnetallhosts->applicationid = $moodleapplicationid;
120 $mnetallhosts->id = $DB->insert_record('mnet_host', $mnetallhosts, true);
121 set_config('mnet_all_hosts_id', $mnetallhosts->id);
123 /// insert log entries - replaces statements section in install.xml
124 update_log_display_entry('user', 'view', 'user', 'CONCAT(firstname,\' \',lastname)');
125 update_log_display_entry('course', 'user report', 'user', 'CONCAT(firstname,\' \',lastname)');
126 update_log_display_entry('course', 'view', 'course', 'fullname');
127 update_log_display_entry('course', 'update', 'course', 'fullname');
128 update_log_display_entry('course', 'enrol', 'user', 'course', 'fullname'); // there should be some way to store user id of the enrolled user!
129 update_log_display_entry('course', 'unenrol', 'user', 'course', 'fullname'); // there should be some way to store user id of the enrolled user!
130 update_log_display_entry('course', 'report log', 'course', 'fullname');
131 update_log_display_entry('course', 'report live', 'course', 'fullname');
132 update_log_display_entry('course', 'report outline', 'course', 'fullname');
133 update_log_display_entry('course', 'report participation', 'course', 'fullname');
134 update_log_display_entry('course', 'report stats', 'course', 'fullname');
135 update_log_display_entry('message', 'write', 'user', 'CONCAT(firstname,\' \',lastname)');
136 update_log_display_entry('message', 'read', 'user', 'CONCAT(firstname,\' \',lastname)');
137 update_log_display_entry('message', 'add contact', 'user', 'CONCAT(firstname,\' \',lastname)');
138 update_log_display_entry('message', 'remove contact', 'user', 'CONCAT(firstname,\' \',lastname)');
139 update_log_display_entry('message', 'block contact', 'user', 'CONCAT(firstname,\' \',lastname)');
140 update_log_display_entry('message', 'unblock contact', 'user', 'CONCAT(firstname,\' \',lastname)');
141 update_log_display_entry('group', 'view', 'groups', 'name');
142 update_log_display_entry('tag', 'update', 'tag', 'name');
145 /// Create guest record - do not assign any role, guest user get's the default guest role automatically on the fly
146 $guest = new object();
147 $guest->auth = 'manual';
148 $guest->username = 'guest';
149 $guest->password = hash_internal_user_password('guest');
150 $guest->firstname = get_string('guestuser');
151 $guest->lastname = ' ';
152 $guest->email = 'root@localhost';
153 $guest->description = get_string('guestuserinfo');
154 $guest->mnethostid = $CFG->mnet_localhost_id;
155 $guest->confirmed = 1;
156 $guest->lang = $CFG->lang;
157 $guest->timemodified= time();
158 $guest->id = $DB->insert_record('user', $guest);
161 /// Now create admin user
162 $admin = new object();
163 $admin->auth = 'manual';
164 $admin->firstname = get_string('admin');
165 $admin->lastname = get_string('user');
166 $admin->username = 'admin';
167 $admin->password = 'adminsetuppending';
169 $admin->confirmed = 1;
170 $admin->mnethostid = $CFG->mnet_localhost_id;
171 $admin->lang = $CFG->lang;
172 $admin->maildisplay = 1;
173 $admin->timemodified = time();
174 $admin->lastip = CLI_SCRIPT ? '0.0.0.0' : getremoteaddr(); // installation hijacking prevention
175 $admin->id = $DB->insert_record('user', $admin);
176 /// Store list of admins
177 set_config('siteadmins', $admin->id);
180 /// Install the roles system.
181 $managerrole = create_role(get_string('manager', 'role'), 'manager', get_string('managerdescription', 'role'), 'manager');
182 $coursecreatorrole = create_role(get_string('coursecreators'), 'coursecreator', get_string('coursecreatorsdescription'), 'coursecreator');
183 $editteacherrole = create_role(get_string('defaultcourseteacher'), 'editingteacher', get_string('defaultcourseteacherdescription'), 'editingteacher');
184 $noneditteacherrole = create_role(get_string('noneditingteacher'), 'teacher', get_string('noneditingteacherdescription'), 'teacher');
185 $studentrole = create_role(get_string('defaultcoursestudent'), 'student', get_string('defaultcoursestudentdescription'), 'student');
186 $guestrole = create_role(get_string('guest'), 'guest', get_string('guestdescription'), 'guest');
187 $userrole = create_role(get_string('authenticateduser'), 'user', get_string('authenticateduserdescription'), 'user');
188 $frontpagerole = create_role(get_string('frontpageuser', 'role'), 'frontpage', get_string('frontpageuserdescription', 'role'), 'frontpage');
190 /// Now is the correct moment to install capabilities - after creation of legacy roles, but before assigning of roles
191 update_capabilities('moodle');
192 external_update_descriptions('moodle');
194 /// Default allow assign
195 $defaultallowassigns = array(
196 array($managerrole, $managerrole),
197 array($managerrole, $coursecreatorrole),
198 array($managerrole, $editteacherrole),
199 array($managerrole, $noneditteacherrole),
200 array($managerrole, $studentrole),
202 array($editteacherrole, $noneditteacherrole),
203 array($editteacherrole, $studentrole),
205 foreach ($defaultallowassigns as $allow) {
206 list($fromroleid, $toroleid) = $allow;
207 allow_assign($fromroleid, $toroleid);
210 /// Default allow override
211 $defaultallowoverrides = array(
212 array($managerrole, $managerrole),
213 array($managerrole, $coursecreatorrole),
214 array($managerrole, $editteacherrole),
215 array($managerrole, $noneditteacherrole),
216 array($managerrole, $studentrole),
217 array($managerrole, $guestrole),
218 array($managerrole, $userrole),
219 array($managerrole, $frontpagerole),
221 array($editteacherrole, $noneditteacherrole),
222 array($editteacherrole, $studentrole),
223 array($editteacherrole, $guestrole),
225 foreach ($defaultallowoverrides as $allow) {
226 list($fromroleid, $toroleid) = $allow;
227 allow_override($fromroleid, $toroleid); // There is a rant about this in MDL-15841.
230 /// Default allow switch.
231 $defaultallowswitch = array(
232 array($managerrole, $editteacherrole),
233 array($managerrole, $noneditteacherrole),
234 array($managerrole, $studentrole),
235 array($managerrole, $guestrole),
237 array($editteacherrole, $noneditteacherrole),
238 array($editteacherrole, $studentrole),
239 array($editteacherrole, $guestrole),
241 array($noneditteacherrole, $studentrole),
242 array($noneditteacherrole, $guestrole),
244 foreach ($defaultallowswitch as $allow) {
245 list($fromroleid, $toroleid) = $allow;
246 allow_switch($fromroleid, $toroleid);
249 /// Set up the context levels where you can assign each role.
250 set_role_contextlevels($managerrole, get_default_contextlevels('manager'));
251 set_role_contextlevels($coursecreatorrole, get_default_contextlevels('coursecreator'));
252 set_role_contextlevels($editteacherrole, get_default_contextlevels('editingteacher'));
253 set_role_contextlevels($noneditteacherrole, get_default_contextlevels('teacher'));
254 set_role_contextlevels($studentrole, get_default_contextlevels('student'));
255 set_role_contextlevels($guestrole, get_default_contextlevels('guest'));
256 set_role_contextlevels($userrole, get_default_contextlevels('user'));
259 set_config('themerev', 1);
262 require_once($CFG->libdir . '/licenselib.php');
263 license_manager::install_licenses();
265 /// Add two lines of data into this new table
266 $mypage = new object();
267 $mypage->userid = NULL;
268 $mypage->name = '__default';
269 $mypage->private = 0;
270 $mypage->sortorder = 0;
271 if (!$DB->record_exists('my_pages', array('userid'=>NULL, 'private'=>0))) {
272 $DB->insert_record('my_pages', $mypage);
274 $mypage->private = 1;
275 if (!$DB->record_exists('my_pages', array('userid'=>NULL, 'private'=>1))) {
276 $DB->insert_record('my_pages', $mypage);