760ce4c2a8f71b3ea70d0bdbfbc7e6478593af2c
[moodle.git] / mod / quiz / db / upgrade.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Upgrade script for the quiz module.
19  *
20  * @package    mod
21  * @subpackage quiz
22  * @copyright  2006 Eloy Lafuente (stronk7)
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
27 defined('MOODLE_INTERNAL') || die();
30 /**
31  * Quiz module upgrade function.
32  * @param string $oldversion the version we are upgrading from.
33  */
34 function xmldb_quiz_upgrade($oldversion) {
35     global $CFG, $DB;
37     $dbman = $DB->get_manager();
39     // Moodle v2.2.0 release upgrade line.
40     // Put any upgrade step following this.
42     if ($oldversion < 2011120700) {
44         // Define field lastcron to be dropped from quiz_reports.
45         $table = new xmldb_table('quiz_reports');
46         $field = new xmldb_field('lastcron');
48         // Conditionally launch drop field lastcron.
49         if ($dbman->field_exists($table, $field)) {
50             $dbman->drop_field($table, $field);
51         }
53         // Quiz savepoint reached.
54         upgrade_mod_savepoint(true, 2011120700, 'quiz');
55     }
57     if ($oldversion < 2011120701) {
59         // Define field cron to be dropped from quiz_reports.
60         $table = new xmldb_table('quiz_reports');
61         $field = new xmldb_field('cron');
63         // Conditionally launch drop field cron.
64         if ($dbman->field_exists($table, $field)) {
65             $dbman->drop_field($table, $field);
66         }
68         // Quiz savepoint reached.
69         upgrade_mod_savepoint(true, 2011120701, 'quiz');
70     }
72     if ($oldversion < 2011120703) {
73         // Track page of quiz attempts.
74         $table = new xmldb_table('quiz_attempts');
76         $field = new xmldb_field('currentpage', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, 0);
78         if (!$dbman->field_exists($table, $field)) {
79             $dbman->add_field($table, $field);
80         }
81         upgrade_mod_savepoint(true, 2011120703, 'quiz');
82     }
84     if ($oldversion < 2012030901) {
85         // Configuration option for navigation method.
86         $table = new xmldb_table('quiz');
88         $field = new xmldb_field('navmethod', XMLDB_TYPE_CHAR, '16', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, 'free');
90         if (!$dbman->field_exists($table, $field)) {
91             $dbman->add_field($table, $field);
92         }
93         upgrade_mod_savepoint(true, 2012030901, 'quiz');
94     }
96     if ($oldversion < 2012040200) {
97         // Define index quiz-userid-attempt (unique) to be dropped form quiz_attempts.
98         $table = new xmldb_table('quiz_attempts');
99         $index = new xmldb_index('userid', XMLDB_INDEX_NOTUNIQUE, array('userid'));
101         // Conditionally launch drop index quiz-userid-attempt.
102         if ($dbman->index_exists($table, $index)) {
103             $dbman->drop_index($table, $index);
104         }
106         // Quiz savepoint reached.
107         upgrade_mod_savepoint(true, 2012040200, 'quiz');
108     }
110     if ($oldversion < 2012040201) {
112         // Define key userid (foreign) to be added to quiz_attempts.
113         $table = new xmldb_table('quiz_attempts');
114         $key = new xmldb_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
116         // Launch add key userid.
117         $dbman->add_key($table, $key);
119         // Quiz savepoint reached.
120         upgrade_mod_savepoint(true, 2012040201, 'quiz');
121     }
123     if ($oldversion < 2012040202) {
125         // Define index quiz-userid-attempt (unique) to be added to quiz_attempts.
126         $table = new xmldb_table('quiz_attempts');
127         $index = new xmldb_index('quiz-userid-attempt', XMLDB_INDEX_UNIQUE, array('quiz', 'userid', 'attempt'));
129         // Conditionally launch add index quiz-userid-attempt.
130         if (!$dbman->index_exists($table, $index)) {
131             $dbman->add_index($table, $index);
132         }
134         // Quiz savepoint reached.
135         upgrade_mod_savepoint(true, 2012040202, 'quiz');
136     }
138     if ($oldversion < 2012040203) {
140         // Define field state to be added to quiz_attempts.
141         $table = new xmldb_table('quiz_attempts');
142         $field = new xmldb_field('state', XMLDB_TYPE_CHAR, '16', null, XMLDB_NOTNULL, null, 'inprogress', 'preview');
144         // Conditionally launch add field state.
145         if (!$dbman->field_exists($table, $field)) {
146             $dbman->add_field($table, $field);
147         }
149         // Quiz savepoint reached.
150         upgrade_mod_savepoint(true, 2012040203, 'quiz');
151     }
153     if ($oldversion < 2012040204) {
155         // Update quiz_attempts.state for finished attempts.
156         $DB->set_field_select('quiz_attempts', 'state', 'finished', 'timefinish > 0');
158         // Other, more complex transitions (basically abandoned attempts), will
159         // be handled by cron later.
161         // Quiz savepoint reached.
162         upgrade_mod_savepoint(true, 2012040204, 'quiz');
163     }
165     if ($oldversion < 2012040205) {
167         // Define field overduehandling to be added to quiz.
168         $table = new xmldb_table('quiz');
169         $field = new xmldb_field('overduehandling', XMLDB_TYPE_CHAR, '16', null, XMLDB_NOTNULL, null, 'autoabandon', 'timelimit');
171         // Conditionally launch add field overduehandling.
172         if (!$dbman->field_exists($table, $field)) {
173             $dbman->add_field($table, $field);
174         }
176         // Quiz savepoint reached.
177         upgrade_mod_savepoint(true, 2012040205, 'quiz');
178     }
180     if ($oldversion < 2012040206) {
182         // Define field graceperiod to be added to quiz.
183         $table = new xmldb_table('quiz');
184         $field = new xmldb_field('graceperiod', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'overduehandling');
186         // Conditionally launch add field graceperiod.
187         if (!$dbman->field_exists($table, $field)) {
188             $dbman->add_field($table, $field);
189         }
191         // Quiz savepoint reached.
192         upgrade_mod_savepoint(true, 2012040206, 'quiz');
193     }
195     return true;