comment typo
[moodle.git] / lib / db / install.php
1 <?php
3 // This file is executed right after the install.xml
4 //
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!');
13     }
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);
32     $SITE = get_site();
33     if ($SITE->id != 1) {
34         throw new moodle_exception('generalexceptionmessage', 'error', '', 'Unexpected site course id created!');
35     }
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();
44     $defaults = array(
45         'rolesactive'           => '0', // marks fully set up system
46         'auth'                  => 'email',
47         'auth_pop3mailbox'      => 'INBOX',
48         'enrol_plugins_enabled' => 'manual,guest,self,cohort',
49         'style'                 => 'default',
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',
62     );
63     foreach($defaults as $key => $value) {
64         set_config($key, $value);
65     }
68     /// bootstrap mnet
69     $mnethost = new object();
70     $mnethost->wwwroot    = $CFG->wwwroot;
71     $mnethost->name       = '';
72     $mnethost->name       = '';
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';
82         } else {
83             $mnethost->ip_address = $my_ip;
84         }
85     } else {
86         $mnethost->ip_address = $_SERVER['SERVER_ADDR'];
87     }
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';
168     $admin->email        = '';
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),
204     );
205     foreach ($defaultallowassigns as $allow) {
206         list($fromroleid, $toroleid) = $allow;
207         allow_assign($fromroleid, $toroleid);
208     }
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),
224     );
225     foreach ($defaultallowoverrides as $allow) {
226         list($fromroleid, $toroleid) = $allow;
227         allow_override($fromroleid, $toroleid); // There is a rant about this in MDL-15841.
228     }
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),
243     );
244     foreach ($defaultallowswitch as $allow) {
245         list($fromroleid, $toroleid) = $allow;
246         allow_switch($fromroleid, $toroleid);
247     }
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'));
258     // Init themes
259     set_config('themerev', 1);
261     // Install licenses
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);
273     }
274     $mypage->private = 1;
275     if (!$DB->record_exists('my_pages', array('userid'=>NULL, 'private'=>1))) {
276         $DB->insert_record('my_pages', $mypage);
277     }