MDL-16263 A way for students to flag/bookmark, particular questions during a quiz...
[moodle.git] / lib / db / upgrade.php
1 <?PHP  //$Id$
3 // This file keeps track of upgrades to Moodle.
4 //
5 // Sometimes, changes between versions involve
6 // alterations to database structures and other
7 // major things that may break installations.
8 //
9 // The upgrade function in this file will attempt
10 // to perform all the necessary actions to upgrade
11 // your older installtion to the current version.
12 //
13 // If there's something it cannot do itself, it
14 // will tell you what you need to do.
15 //
16 // The commands in here will all be database-neutral,
17 // using the methods of database_manager class
18 //
19 // Please do not forget to use upgrade_set_timeout()
20 // before any action that may take longer time to finish.
22 function xmldb_main_upgrade($oldversion) {
23     global $CFG, $THEME, $USER, $DB;
25     $result = true;
27     $dbman = $DB->get_manager(); // loads ddl manager and xmldb classes
29     ////////////////////////////////////////
30     ///upgrade supported only from 1.9.x ///
31     ////////////////////////////////////////
33     if ($result && $oldversion < 2008030700) {
34         upgrade_set_timeout(60*20); // this may take a while
36     /// Define index contextid-lowerboundary (not unique) to be dropped form grade_letters
37         $table = new xmldb_table('grade_letters');
38         $index = new xmldb_index('contextid-lowerboundary', XMLDB_INDEX_NOTUNIQUE, array('contextid', 'lowerboundary'));
40     /// Launch drop index contextid-lowerboundary
41         $dbman->drop_index($table, $index);
43     /// Define index contextid-lowerboundary-letter (unique) to be added to grade_letters
44         $table = new xmldb_table('grade_letters');
45         $index = new xmldb_index('contextid-lowerboundary-letter', XMLDB_INDEX_UNIQUE, array('contextid', 'lowerboundary', 'letter'));
47     /// Launch add index contextid-lowerboundary-letter
48         $dbman->add_index($table, $index);
50     /// Main savepoint reached
51         upgrade_main_savepoint($result, 2008030700);
52     }
54     if ($result && $oldversion < 2008050100) {
55         // Update courses that used weekscss to weeks
56         $result = $DB->set_field('course', 'format', 'weeks', array('format' => 'weekscss'));
57         upgrade_main_savepoint($result, 2008050100);
58     }
60     if ($result && $oldversion < 2008050200) {
61         // remove unused config options
62         unset_config('statsrolesupgraded');
63         upgrade_main_savepoint($result, 2008050200);
64     }
66     if ($result && $oldversion < 2008050700) {
67         upgrade_set_timeout(60*20); // this may take a while
69     /// Fix minor problem caused by MDL-5482.
70         require_once($CFG->dirroot . '/question/upgrade.php');
71         $result = $result && question_fix_random_question_parents();
72         upgrade_main_savepoint($result, 2008050700);
73     }
75     if ($result && $oldversion < 2008051200) {
76         // if guest role used as default user role unset it and force admin to choose new setting
77         if (!empty($CFG->defaultuserroleid)) {
78             if ($role = $DB->get_record('role', array('id'=>$CFG->defaultuserroleid))) {
79                 if ($guestroles = get_roles_with_capability('moodle/legacy:guest', CAP_ALLOW)) {
80                     if (isset($guestroles[$role->id])) {
81                         set_config('defaultuserroleid', null);
82                         notify('Guest role removed from "Default role for all users" setting, please select another role.', 'notifysuccess');
83                     }
84                 }
85             } else {
86                 set_config('defaultuserroleid', null);
87             }
88         }
89     }
91     if ($result && $oldversion < 2008051201) {
92         notify('Increasing size of user idnumber field, this may take a while...', 'notifysuccess');
93         upgrade_set_timeout(60*20); // this may take a while
95     /// Under MySQL and Postgres... detect old NULL contents and change them by correct empty string. MDL-14859
96         if ($CFG->dbfamily == 'mysql' || $CFG->dbfamily == 'postgres') {
97             $DB->execute("UPDATE {user} SET idnumber = '' WHERE idnumber IS NULL");
98         }
100     /// Define index idnumber (not unique) to be dropped form user
101         $table = new xmldb_table('user');
102         $index = new xmldb_index('idnumber', XMLDB_INDEX_NOTUNIQUE, array('idnumber'));
104     /// Launch drop index idnumber
105         if ($dbman->index_exists($table, $index)) {
106             $dbman->drop_index($table, $index);
107         }
109     /// Changing precision of field idnumber on table user to (255)
110         $table = new xmldb_table('user');
111         $field = new xmldb_field('idnumber', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null, 'password');
113     /// Launch change of precision for field idnumber
114         $dbman->change_field_precision($table, $field);
116     /// Launch add index idnumber again
117         $index = new xmldb_index('idnumber', XMLDB_INDEX_NOTUNIQUE, array('idnumber'));
118         $dbman->add_index($table, $index);
120     /// Main savepoint reached
121         upgrade_main_savepoint($result, 2008051201);
122     }
124     if ($result && $oldversion < 2008051202) {
125         $log_action = new object();
126         $log_action->module = 'course';
127         $log_action->action = 'unenrol';
128         $log_action->mtable = 'course';
129         $log_action->field  = 'fullname';
130         if (!$DB->record_exists('log_display', array('action'=>'unenrol', 'module'=>'course'))) {
131             $result = $result && $DB->insert_record('log_display', $log_action);
132         }
133         upgrade_main_savepoint($result, 2008051202);
134     }
136     if ($result && $oldversion < 2008051203) {
137         $table = new xmldb_table('mnet_enrol_course');
138         $field = new xmldb_field('sortorder', XMLDB_TYPE_INTEGER, '10', true, true, null, false, false, 0);
139         $dbman->change_field_precision($table, $field);
140         upgrade_main_savepoint($result, 2008051203);
141     }
143     if ($result && $oldversion < 2008063001) {
144         upgrade_set_timeout(60*20); // this may take a while
146         // table to be modified
147         $table = new xmldb_table('tag_instance');
148         // add field
149         $field = new xmldb_field('tiuserid');
150         if (!$dbman->field_exists($table, $field)) {
151             $field->set_attributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, 0, 'itemid');
152             $dbman->add_field($table, $field);
153         }
154         // modify index
155         $index = new xmldb_index('itemtype-itemid-tagid');
156         $index->set_attributes(XMLDB_INDEX_UNIQUE, array('itemtype', 'itemid', 'tagid'));
157         $dbman->drop_index($table, $index);
158         $index = new xmldb_index('itemtype-itemid-tagid-tiuserid');
159         $index->set_attributes(XMLDB_INDEX_UNIQUE, array('itemtype', 'itemid', 'tagid', 'tiuserid'));
160         $dbman->add_index($table, $index);
162         /// Main savepoint reached
163         upgrade_main_savepoint($result, 2008063001);
164     }
166     if ($result && $oldversion < 2008070300) {
167         $result = $DB->delete_records_select('role_names', $DB->sql_isempty('role_names', 'name', false, false));
168         upgrade_main_savepoint($result, 2008070300);
169     }
171     if ($result && $oldversion < 2008070700) {
172         if (isset($CFG->defaultuserroleid) and isset($CFG->guestroleid) and $CFG->defaultuserroleid == $CFG->guestroleid) {
173             // guest can not be selected in defaultuserroleid!
174             unset_config('defaultuserroleid');
175         }
176         upgrade_main_savepoint($result, 2008070700);
177     }
179     if ($result && $oldversion < 2008070701) {
181     /// Define table portfolio_instance to be created
182         $table = new xmldb_table('portfolio_instance');
184     /// Adding fields to table portfolio_instance
185         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
186         $table->add_field('plugin', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null, null, null);
187         $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
188         $table->add_field('visible', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '1');
190     /// Adding keys to table portfolio_instance
191         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
193     /// Conditionally launch create table for portfolio_instance
194         if (!$dbman->table_exists($table)) {
195             $dbman->create_table($table);
196         }
197   /// Define table portfolio_instance_config to be created
198         $table = new xmldb_table('portfolio_instance_config');
200     /// Adding fields to table portfolio_instance_config
201         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
202         $table->add_field('instance', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
203         $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
204         $table->add_field('value', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
206     /// Adding keys to table portfolio_instance_config
207         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
208         $table->add_key('instance', XMLDB_KEY_FOREIGN, array('instance'), 'portfolio_instance', array('id'));
210     /// Adding indexes to table portfolio_instance_config
211         $table->add_index('name', XMLDB_INDEX_NOTUNIQUE, array('name'));
213     /// Conditionally launch create table for portfolio_instance_config
214         if (!$dbman->table_exists($table)) {
215             $dbman->create_table($table);
216         }
218    /// Define table portfolio_instance_user to be created
219         $table = new xmldb_table('portfolio_instance_user');
221     /// Adding fields to table portfolio_instance_user
222         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
223         $table->add_field('instance', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
224         $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
225         $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
226         $table->add_field('value', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
228     /// Adding keys to table portfolio_instance_user
229         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
230         $table->add_key('instancefk', XMLDB_KEY_FOREIGN, array('instance'), 'portfolio_instance', array('id'));
231         $table->add_key('userfk', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
233     /// Conditionally launch create table for portfolio_instance_user
234         if (!$dbman->table_exists($table)) {
235             $dbman->create_table($table);
236         }
238     /// Main savepoint reached
239         upgrade_main_savepoint($result, 2008070701);
240     }
242     if ($result && $oldversion < 2008072400) {
243     /// Create the database tables for message_processors
244         $table = new xmldb_table('message_processors');
245         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
246         $table->add_field('name', XMLDB_TYPE_CHAR, '166', null, XMLDB_NOTNULL, null, null, null, null);
247         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
248         $dbman->create_table($table);
250     /// delete old and create new fields
251         $table = new xmldb_table('message');
252         $field = new xmldb_field('messagetype');
253         $dbman->drop_field($table, $field);
255     /// fields to rename
256         $field = new xmldb_field('message');
257         $field->set_attributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, null);
258         $dbman->rename_field($table, $field, 'fullmessage');
259         $field = new xmldb_field('format');
260         $field->set_attributes(XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, null, null, null, null, '0', null);
261         $dbman->rename_field($table, $field, 'fullmessageformat');
263     /// new message fields
264         $field = new xmldb_field('subject');
265         $field->set_attributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, null);
266         $dbman->add_field($table, $field);
267         $field = new xmldb_field('fullmessagehtml');
268         $field->set_attributes(XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null, null);
269         $dbman->add_field($table, $field);
270         $field = new xmldb_field('smallmessage');
271         $field->set_attributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, null);
272         $dbman->add_field($table, $field);
275         $table = new xmldb_table('message_read');
276         $field = new xmldb_field('messagetype');
277         $dbman->drop_field($table, $field);
278         $field = new xmldb_field('mailed');
279         $dbman->drop_field($table, $field);
281     /// fields to rename
282         $field = new xmldb_field('message');
283         $field->set_attributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, null);
284         $dbman->rename_field($table, $field, 'fullmessage');
285         $field = new xmldb_field('format');
286         $field->set_attributes(XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, null, null, null, null, '0', null);
287         $dbman->rename_field($table, $field, 'fullmessageformat');
290     /// new message fields
291         $field = new xmldb_field('subject');
292         $field->set_attributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, null);
293         $dbman->add_field($table, $field);
294         $field = new xmldb_field('fullmessagehtml');
295         $field->set_attributes(XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null, null);
296         $dbman->add_field($table, $field);
297         $field = new xmldb_field('smallmessage');
298         $field->set_attributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null, null);
299         $dbman->add_field($table, $field);
301     /// new table
302         $table = new xmldb_table('message_working');
303         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
304         $table->add_field('unreadmessageid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
305         $table->add_field('processorid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
306         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
307         $dbman->create_table($table);
310         upgrade_main_savepoint($result, 2008072400);
311     }
313     if ($result && $oldversion < 2008072800) {
315     /// Define field enablecompletion to be added to course
316         $table = new xmldb_table('course');
317         $field = new xmldb_field('enablecompletion');
318         $field->set_attributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'defaultrole');
320     /// Launch add field enablecompletion
321         if (!$dbman->field_exists($table,$field)) {
322             $dbman->add_field($table, $field);
323         }
325     /// Define field completion to be added to course_modules
326         $table = new xmldb_table('course_modules');
327         $field = new xmldb_field('completion');
328         $field->set_attributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'groupmembersonly');
330     /// Launch add field completion
331         if (!$dbman->field_exists($table,$field)) {
332             $dbman->add_field($table, $field);
333         }
335     /// Define field completiongradeitemnumber to be added to course_modules
336         $field = new xmldb_field('completiongradeitemnumber');
337         $field->set_attributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null, 'completion');
339     /// Launch add field completiongradeitemnumber
340         if (!$dbman->field_exists($table,$field)) {
341             $dbman->add_field($table, $field);
342         }
344     /// Define field completionview to be added to course_modules
345         $field = new xmldb_field('completionview');
346         $field->set_attributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'completiongradeitemnumber');
348     /// Launch add field completionview
349         if (!$dbman->field_exists($table,$field)) {
350             $dbman->add_field($table, $field);
351         }
353     /// Define field completionexpected to be added to course_modules
354         $field = new xmldb_field('completionexpected');
355         $field->set_attributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'completionview');
357     /// Launch add field completionexpected
358         if (!$dbman->field_exists($table,$field)) {
359             $dbman->add_field($table, $field);
360         }
362    /// Define table course_modules_completion to be created
363         $table = new xmldb_table('course_modules_completion');
364         if (!$dbman->table_exists($table)) {
366         /// Adding fields to table course_modules_completion
367             $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
368             $table->add_field('coursemoduleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
369             $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
370             $table->add_field('completionstate', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
371             $table->add_field('viewed', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, null, null, null);
372             $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
374         /// Adding keys to table course_modules_completion
375             $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
377         /// Adding indexes to table course_modules_completion
378             $table->add_index('coursemoduleid', XMLDB_INDEX_NOTUNIQUE, array('coursemoduleid'));
379             $table->add_index('userid', XMLDB_INDEX_NOTUNIQUE, array('userid'));
381         /// Launch create table for course_modules_completion
382             $dbman->create_table($table);
383         }
385         /// Main savepoint reached
386         upgrade_main_savepoint($result, 2008072800);
387     }
389     if ($result && $oldversion < 2008073000) {
391     /// Define table portfolio_log to be created
392         $table = new xmldb_table('portfolio_log');
394     /// Adding fields to table portfolio_log
395         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
396         $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
397         $table->add_field('time', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
398         $table->add_field('portfolio', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
399         $table->add_field('caller_class', XMLDB_TYPE_CHAR, '150', null, XMLDB_NOTNULL, null, null, null, null);
400         $table->add_field('caller_file', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
401         $table->add_field('caller_sha1', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
403     /// Adding keys to table portfolio_log
404         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
405         $table->add_key('userfk', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
406         $table->add_key('portfoliofk', XMLDB_KEY_FOREIGN, array('portfolio'), 'portfolio_instance', array('id'));
408     /// Conditionally launch create table for portfolio_log
409         if (!$dbman->table_exists($table)) {
410             $dbman->create_table($table);
411         }
413     /// Main savepoint reached
414         upgrade_main_savepoint($result, 2008073000);
415     }
417     if ($result && $oldversion < 2008073104) {
418     /// Drop old table that might exist for some people
419         $table = new xmldb_table('message_providers');
420         if ($dbman->table_exists($table)) {
421             $dbman->drop_table($table);
422         }
424     /// Define table message_providers to be created
425         $table = new xmldb_table('message_providers');
427     /// Adding fields to table message_providers
428         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
429         $table->add_field('name', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null, null, null);
430         $table->add_field('component', XMLDB_TYPE_CHAR, '200', null, XMLDB_NOTNULL, null, null, null, null);
431         $table->add_field('capability', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
433     /// Adding keys to table message_providers
434         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
436     /// Adding indexes to table message_providers
437         $table->add_index('componentname', XMLDB_INDEX_UNIQUE, array('component', 'name'));
439     /// Create table for message_providers
440         $dbman->create_table($table);
442         upgrade_main_savepoint($result, 2008073104);
443     }
445     if ($result && $oldversion < 2008073111) {
446     /// Define table files to be created
447         $table = new xmldb_table('files');
449     /// Adding fields to table files
450         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
451         $table->add_field('contenthash', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null, null, null);
452         $table->add_field('pathnamehash', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null, null, null);
453         $table->add_field('contextid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
454         $table->add_field('filearea', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null, null, null);
455         $table->add_field('itemid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
456         $table->add_field('filepath', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
457         $table->add_field('filename', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
458         $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
459         $table->add_field('filesize', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
460         $table->add_field('mimetype', XMLDB_TYPE_CHAR, '100', null, null, null, null, null, null);
461         $table->add_field('status', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
462         $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
463         $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
465     /// Adding keys to table files
466         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
467         $table->add_key('contextid', XMLDB_KEY_FOREIGN, array('contextid'), 'context', array('id'));
468         $table->add_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
470     /// Adding indexes to table files
471         $table->add_index('filearea-contextid-itemid', XMLDB_INDEX_NOTUNIQUE, array('filearea', 'contextid', 'itemid'));
472         $table->add_index('contenthash', XMLDB_INDEX_NOTUNIQUE, array('contenthash'));
473         $table->add_index('pathnamehash', XMLDB_INDEX_UNIQUE, array('pathnamehash'));
475     /// Conditionally launch create table for files
476         $dbman->create_table($table);
478     /// Main savepoint reached
479         upgrade_main_savepoint($result, 2008073111);
480     }
482     if ($result && $oldversion < 2008073112) {
483     /// Define table files_cleanup to be created
484         $table = new xmldb_table('files_cleanup');
486     /// Adding fields to table files_cleanup
487         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
488         $table->add_field('contenthash', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null, null, null);
490     /// Adding keys to table files_cleanup
491         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
493     /// Adding indexes to table files_cleanup
494         $table->add_index('contenthash', XMLDB_INDEX_UNIQUE, array('contenthash'));
496     /// Conditionally launch create table for files_cleanup
497         $dbman->create_table($table);
499     /// Main savepoint reached
500         upgrade_main_savepoint($result, 2008073112);
501     }
503     if ($result && $oldversion < 2008073113) {
504     /// move all course, backup and other files to new filepool based storage
505         upgrade_migrate_files_courses();
506     /// Main savepoint reached
507         upgrade_main_savepoint($result, 2008073113);
508     }
510     if ($result && $oldversion < 2008073114) {
511     /// move all course, backup and other files to new filepool based storage
512         upgrade_migrate_files_blog();
513     /// Main savepoint reached
514         upgrade_main_savepoint($result, 2008073114);
515     }
517     if ($result && $oldversion < 2008080400) {
518         // Add field ssl_jump_url to mnet application, and populate existing default applications
519         $table = new xmldb_table('mnet_application');
520         $field = new xmldb_field('sso_jump_url');
521         if (!$dbman->field_exists($table, $field)) {
522             $field->set_attributes(XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
523             $dbman->add_field($table, $field);
524             $result = $DB->set_field('mnet_application', 'sso_jump_url', '/auth/mnet/jump.php', array('name' => 'moodle'));
525             $result = $result && $DB->set_field('mnet_application', 'sso_jump_url', '/auth/xmlrpc/jump.php', array('name' => 'mahara'));
526         }
528         /// Main savepoint reached
529         upgrade_main_savepoint($result, 2008080400);
530     }
532     if ($result && $oldversion < 2008080500) {
534    /// Define table portfolio_tempdata to be created
535         $table = new xmldb_table('portfolio_tempdata');
537     /// Adding fields to table portfolio_tempdata
538         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
539         $table->add_field('data', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
541     /// Adding keys to table portfolio_tempdata
542         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
544     /// Conditionally launch create table for portfolio_tempdata
545         if (!$dbman->table_exists($table)) {
546             $dbman->create_table($table);
547         }
549     /// Main savepoint reached
550         upgrade_main_savepoint($result, 2008080500);
551     }
553     if ($result && $oldversion < 2008080600) {
555         $DB->delete_records('portfolio_tempdata'); // there shouldnt' be any, and it will cause problems with this upgrade.
556     /// Define field expirytime to be added to portfolio_tempdata
557         $table = new xmldb_table('portfolio_tempdata');
558         $field = new xmldb_field('expirytime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null, 'data');
560     /// Conditionally launch add field expirytime
561         if (!$dbman->field_exists($table, $field)) {
562             $dbman->add_field($table, $field);
563         }
565     /// Main savepoint reached
566         upgrade_main_savepoint($result, 2008080600);
567     }
569 /// Changing the type of all the columns that the question bank uses to store grades to be NUMBER(12, 7).
570     if ($result && $oldversion < 2008081500) {
571         $table = new xmldb_table('question');
572         $field = new xmldb_field('defaultgrade', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, null, null, 'generalfeedback');
573         $dbman->change_field_type($table, $field);
574         upgrade_main_savepoint($result, 2008081500);
575     }
577     if ($result && $oldversion < 2008081501) {
578         $table = new xmldb_table('question');
579         $field = new xmldb_field('penalty', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, null, null, 'defaultgrade');
580         $dbman->change_field_type($table, $field);
581         upgrade_main_savepoint($result, 2008081501);
582     }
584     if ($result && $oldversion < 2008081502) {
585         $table = new xmldb_table('question_answers');
586         $field = new xmldb_field('fraction', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, null, null, 'answer');
587         $dbman->change_field_type($table, $field);
588         upgrade_main_savepoint($result, 2008081502);
589     }
591     if ($result && $oldversion < 2008081503) {
592         $table = new xmldb_table('question_sessions');
593         $field = new xmldb_field('sumpenalty', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, null, null, 'newgraded');
594         $dbman->change_field_type($table, $field);
595         upgrade_main_savepoint($result, 2008081503);
596     }
598     if ($result && $oldversion < 2008081504) {
599         $table = new xmldb_table('question_states');
600         $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, null, null, 'event');
601         $dbman->change_field_type($table, $field);
602         upgrade_main_savepoint($result, 2008081504);
603     }
605     if ($result && $oldversion < 2008081505) {
606         $table = new xmldb_table('question_states');
607         $field = new xmldb_field('raw_grade', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, null, null, 'grade');
608         $dbman->change_field_type($table, $field);
609         upgrade_main_savepoint($result, 2008081505);
610     }
612     if ($result && $oldversion < 2008081506) {
613         $table = new xmldb_table('question_states');
614         $field = new xmldb_field('penalty', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, null, null, 'raw_grade');
615         $dbman->change_field_type($table, $field);
616         upgrade_main_savepoint($result, 2008081506);
617     }
619     if ($result && $oldversion < 2008081600) {
621     /// all 1.9 sites and fresh installs must already be unicode, not needed anymore
622         unset_config('unicodedb');
624     /// Main savepoint reached
625         upgrade_main_savepoint($result, 2008081600);
626     }
628     if ($result && $oldversion < 2008081900) {
629     /// Define field userid to be added to portfolio_tempdata
630         $table = new xmldb_table('portfolio_tempdata');
631         $field = new xmldb_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null, 'expirytime');
633     /// Conditionally launch add field userid
634         if (!$dbman->field_exists($table, $field)) {
635             $dbman->add_field($table, $field);
636         }
637         $DB->set_field('portfolio_tempdata', 'userid', 0);
638     /// now change it to be notnull
640     /// Changing nullability of field userid on table portfolio_tempdata to not null
641         $field = new xmldb_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null, 'expirytime');
643     /// Launch change of nullability for field userid
644         $dbman->change_field_notnull($table, $field);
646     /// Define key userfk (foreign) to be added to portfolio_tempdata
647         $table = new xmldb_table('portfolio_tempdata');
648         $key = new xmldb_key('userfk', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
650     /// Launch add key userfk
651         $dbman->add_key($table, $key);
653         upgrade_main_savepoint($result, 2008081900);
654     }
655     if ($result && $oldversion < 2008082602) {
657     /// Define table repository to be dropped
658         $table = new xmldb_table('repository');
660     /// Conditionally launch drop table for repository
661         if ($dbman->table_exists($table)) {
662             $dbman->drop_table($table);
663         }
665     /// Define table repository to be created
666         $table = new xmldb_table('repository');
668     /// Adding fields to table repository
669         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
670         $table->add_field('type', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
671         $table->add_field('visible', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, null, null, '1');
672         $table->add_field('sortorder', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
674     /// Adding keys to table repository
675         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
677     /// Conditionally launch create table for repository
678         if (!$dbman->table_exists($table)) {
679             $dbman->create_table($table);
680         }
681     /// Define table repository_instances to be created
682         $table = new xmldb_table('repository_instances');
684     /// Adding fields to table repository_instances
685         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
686         $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
687         $table->add_field('typeid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
688         $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
689         $table->add_field('contextid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
690         $table->add_field('username', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
691         $table->add_field('password', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
692         $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
693         $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
695     /// Adding keys to table repository_instances
696         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
698     /// Conditionally launch create table for repository_instances
699         if (!$dbman->table_exists($table)) {
700             $dbman->create_table($table);
701         }
703     /// Define table repository_instance_config to be created
704         $table = new xmldb_table('repository_instance_config');
706     /// Adding fields to table repository_instance_config
707         $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
708         $table->add_field('instanceid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
709         $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
710         $table->add_field('value', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null);
712     /// Adding keys to table repository_instance_config
713         $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
715     /// Conditionally launch create table for repository_instance_config
716         if (!$dbman->table_exists($table)) {
717             $dbman->create_table($table);
718         }
720     /// Main savepoint reached
721         upgrade_main_savepoint($result, 2008082602);
722     }
724     if ($result && $oldversion < 2008082700) {
725     /// Add a new column to the question sessions table to record whether a
726     /// question has been flagged.
728     /// Define field flagged to be added to question_sessions
729         $table = new xmldb_table('question_sessions');
730         $field = new xmldb_field('flagged', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, null, null, '0', 'manualcomment');
732     /// Conditionally launch add field flagged
733         if (!$dbman->field_exists($table, $field)) {
734             $dbman->add_field($table, $field);
735         }
737     /// Main savepoint reached
738         upgrade_main_savepoint($result, 2008082700);
739     }
741     return $result;
745 ?>