Commit | Line | Data |
---|---|---|
3b596dbf | 1 | <?php |
2 | ||
3 | // This file is part of Moodle - http://moodle.org/ | |
4 | // | |
5 | // Moodle is free software: you can redistribute it and/or modify | |
6 | // it under the terms of the GNU General Public License as published by | |
7 | // the Free Software Foundation, either version 3 of the License, or | |
8 | // (at your option) any later version. | |
9 | // | |
10 | // Moodle is distributed in the hope that it will be useful, | |
11 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | // GNU General Public License for more details. | |
14 | // | |
15 | // You should have received a copy of the GNU General Public License | |
16 | // along with Moodle. If not, see <http://www.gnu.org/licenses/>. | |
17 | ||
18 | /** | |
19 | * This script creates config.php file and prepares database. | |
20 | * | |
21 | * This script is not intended for beginners! | |
22 | * Potential problems: | |
3b596dbf | 23 | * - su to apache account or sudo before execution |
24 | * - not compatible with Windows platform | |
25 | * | |
30f58159 | 26 | * @package core |
3b596dbf | 27 | * @subpackage cli |
28 | * @copyright 2009 Petr Skoda (http://skodak.org) | |
29 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
30 | */ | |
31 | ||
c05a5099 PS |
32 | // Force OPcache reset if used, we do not want any stale caches |
33 | // when detecting if upgrade necessary or when running upgrade. | |
34 | if (function_exists('opcache_reset') and !isset($_SERVER['REMOTE_ADDR'])) { | |
35 | opcache_reset(); | |
36 | } | |
37 | ||
28bd3d9a | 38 | define('CLI_SCRIPT', true); |
e2e35e71 | 39 | define('CACHE_DISABLE_ALL', true); |
3b596dbf | 40 | |
28bd3d9a | 41 | require(dirname(dirname(dirname(__FILE__))).'/config.php'); |
16ae0853 | 42 | require_once($CFG->libdir.'/adminlib.php'); // various admin-only functions |
43 | require_once($CFG->libdir.'/upgradelib.php'); // general upgrade/install related functions | |
44 | require_once($CFG->libdir.'/clilib.php'); // cli only functions | |
45 | require_once($CFG->libdir.'/environmentlib.php'); | |
3b596dbf | 46 | |
47 | // now get cli options | |
3d673fc4 DM |
48 | list($options, $unrecognized) = cli_get_params( |
49 | array( | |
50 | 'non-interactive' => false, | |
51 | 'allow-unstable' => false, | |
52 | 'help' => false | |
53 | ), | |
54 | array( | |
55 | 'h' => 'help' | |
56 | ) | |
57 | ); | |
3b596dbf | 58 | |
59 | $interactive = empty($options['non-interactive']); | |
60 | ||
61 | if ($unrecognized) { | |
6b997b07 | 62 | $unrecognized = implode("\n ", $unrecognized); |
1494616f | 63 | cli_error(get_string('cliunknowoption', 'admin', $unrecognized)); |
3b596dbf | 64 | } |
65 | ||
66 | if ($options['help']) { | |
28bd3d9a | 67 | $help = |
3b596dbf | 68 | "Command line Moodle upgrade. |
69 | Please note you must execute this script with the same uid as apache! | |
70 | ||
71 | Site defaults may be changed via local/defaults.php. | |
72 | ||
73 | Options: | |
74 | --non-interactive No interactive questions or confirmations | |
3d673fc4 DM |
75 | --allow-unstable Upgrade even if the version is not marked as stable yet, |
76 | required in non-interactive mode. | |
3b596dbf | 77 | -h, --help Print out this help |
78 | ||
28bd3d9a PS |
79 | Example: |
80 | \$sudo -u www-data /usr/bin/php admin/cli/upgrade.php | |
71d54993 | 81 | "; //TODO: localize - to be translated later when everything is finished |
3b596dbf | 82 | |
83 | echo $help; | |
84 | die; | |
85 | } | |
86 | ||
87 | if (empty($CFG->version)) { | |
6b997b07 | 88 | cli_error(get_string('missingconfigversion', 'debug')); |
3b596dbf | 89 | } |
90 | ||
ed01233a | 91 | require("$CFG->dirroot/version.php"); // defines $version, $release, $branch and $maturity |
3b596dbf | 92 | $CFG->target_release = $release; // used during installation and upgrades |
93 | ||
94 | if ($version < $CFG->version) { | |
80380bd7 | 95 | cli_error(get_string('downgradedcore', 'error')); |
3b596dbf | 96 | } |
97 | ||
1a4d6a5b | 98 | $oldversion = "$CFG->release ($CFG->version)"; |
6b997b07 | 99 | $newversion = "$release ($version)"; |
100 | ||
91c038f9 | 101 | if (!moodle_needs_upgrading()) { |
daf714ef | 102 | cli_error(get_string('cliupgradenoneed', 'core_admin', $newversion), 0); |
91c038f9 DM |
103 | } |
104 | ||
faadd326 | 105 | // Test environment first. |
cc359566 TH |
106 | list($envstatus, $environment_results) = check_moodle_environment(normalize_version($release), ENV_SELECT_RELEASE); |
107 | if (!$envstatus) { | |
16ae0853 | 108 | $errors = environment_get_errors($environment_results); |
109 | cli_heading(get_string('environment', 'admin')); | |
110 | foreach ($errors as $error) { | |
111 | list($info, $report) = $error; | |
112 | echo "!! $info !!\n$report\n\n"; | |
113 | } | |
114 | exit(1); | |
115 | } | |
116 | ||
777781d1 | 117 | // Test plugin dependencies. |
f1753a5b | 118 | $failed = array(); |
e87214bd | 119 | if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) { |
f1753a5b | 120 | cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed))))); |
faadd326 TH |
121 | cli_error(get_string('pluginschecktodo', 'admin')); |
122 | } | |
123 | ||
1a4d6a5b DM |
124 | if ($interactive) { |
125 | $a = new stdClass(); | |
126 | $a->oldversion = $oldversion; | |
127 | $a->newversion = $newversion; | |
128 | echo cli_heading(get_string('databasechecking', '', $a)) . PHP_EOL; | |
129 | } | |
130 | ||
3d673fc4 DM |
131 | // make sure we are upgrading to a stable release or display a warning |
132 | if (isset($maturity)) { | |
133 | if (($maturity < MATURITY_STABLE) and !$options['allow-unstable']) { | |
134 | $maturitylevel = get_string('maturity'.$maturity, 'admin'); | |
135 | ||
136 | if ($interactive) { | |
137 | cli_separator(); | |
138 | cli_heading(get_string('notice')); | |
139 | echo get_string('maturitycorewarning', 'admin', $maturitylevel) . PHP_EOL; | |
dc41abd8 | 140 | echo get_string('morehelp') . ': ' . get_docs_url('admin/versions') . PHP_EOL; |
3d673fc4 DM |
141 | cli_separator(); |
142 | } else { | |
2da7fbc0 DM |
143 | cli_problem(get_string('maturitycorewarning', 'admin', $maturitylevel)); |
144 | cli_error(get_string('maturityallowunstable', 'admin')); | |
3d673fc4 DM |
145 | } |
146 | } | |
147 | } | |
148 | ||
3b596dbf | 149 | if ($interactive) { |
6b997b07 | 150 | echo html_to_text(get_string('upgradesure', 'admin', $newversion))."\n"; |
151 | $prompt = get_string('cliyesnoprompt', 'admin'); | |
152 | $input = cli_input($prompt, '', array(get_string('clianswerno', 'admin'), get_string('cliansweryes', 'admin'))); | |
153 | if ($input == get_string('clianswerno', 'admin')) { | |
154 | exit(1); | |
155 | } | |
3b596dbf | 156 | } |
157 | ||
158 | if ($version > $CFG->version) { | |
b0dd08dd SH |
159 | // We purge all of MUC's caches here. |
160 | // Caches are disabled for upgrade by CACHE_DISABLE_ALL so we must set the first arg to true. | |
161 | // This ensures a real config object is loaded and the stores will be purged. | |
162 | // This is the only way we can purge custom caches such as memcache or APC. | |
163 | // Note: all other calls to caches will still used the disabled API. | |
164 | cache_helper::purge_all(true); | |
3b596dbf | 165 | upgrade_core($version, true); |
166 | } | |
167 | set_config('release', $release); | |
ed01233a | 168 | set_config('branch', $branch); |
3b596dbf | 169 | |
deba811a | 170 | // unconditionally upgrade |
3b596dbf | 171 | upgrade_noncore(true); |
172 | ||
173 | // log in as admin - we need doanything permission when applying defaults | |
d79d5ac2 | 174 | \core\session\manager::set_user(get_admin()); |
3b596dbf | 175 | |
176 | // apply all default settings, just in case do it twice to fill all defaults | |
054d3924 EL |
177 | admin_apply_default_settings(NULL, false); |
178 | admin_apply_default_settings(NULL, false); | |
3b596dbf | 179 | |
6b997b07 | 180 | echo get_string('cliupgradefinished', 'admin')."\n"; |
181 | exit(0); // 0 means success |