Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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 installs Moodle into empty database, config.php must already exist.
20
 *
21
 * This script is intended for advanced usage such as in Debian packages.
22
 * - sudo to www-data (apache account) before
23
 * - not compatible with Windows platform
24
 *
25
 * @package    core
26
 * @subpackage cli
27
 * @copyright  2010 Petr Skoda (http://skodak.org)
28
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
29
 */
30
 
31
define('CLI_SCRIPT', true);
32
define('CACHE_DISABLE_ALL', true);
33
 
34
// extra execution prevention - we can not just require config.php here
35
if (isset($_SERVER['REMOTE_ADDR'])) {
36
    exit(1);
37
}
38
 
39
// Force OPcache reset if used, we do not want any stale caches
40
// when preparing test environment.
41
if (function_exists('opcache_reset')) {
42
    opcache_reset();
43
}
44
 
45
$help =
46
"Advanced command line Moodle database installer.
47
Please note you must execute this script with the same uid as apache.
48
 
49
Site defaults may be changed via local/defaults.php.
50
 
51
Options:
52
--lang=CODE           Installation and default site language. Default is en.
53
--adminuser=USERNAME  Username for the moodle admin account. Default is admin.
54
--adminpass=PASSWORD  Password for the moodle admin account.
55
--adminemail=STRING   Email address for the moodle admin account.
56
--agree-license       Indicates agreement with software license.
57
--fullname=STRING     Name of the site
58
--shortname=STRING    Name of the site
59
--summary=STRING      The summary to be displayed on the front page
60
--supportemail=STRING Email address for support and help.
61
-h, --help            Print out this help
62
 
63
Example:
64
\$sudo -u www-data /usr/bin/php admin/cli/install_database.php --lang=cs --adminpass=soMePass123 --agree-license
65
";
66
 
67
// Check that PHP is of a sufficient version as soon as possible.
68
require_once(__DIR__.'/../../lib/phpminimumversionlib.php');
69
moodle_require_minimum_php_version();
70
 
71
// Nothing to do if config.php does not exist
72
$configfile = __DIR__.'/../../config.php';
73
if (!file_exists($configfile)) {
74
    fwrite(STDERR, 'config.php does not exist, can not continue'); // do not localize
75
    fwrite(STDERR, "\n");
76
    exit(1);
77
}
78
 
79
// Include necessary libs
80
require($configfile);
81
 
82
require_once($CFG->libdir.'/clilib.php');
83
require_once($CFG->libdir.'/installlib.php');
84
require_once($CFG->libdir.'/adminlib.php');
85
require_once($CFG->libdir.'/componentlib.class.php');
86
 
87
$CFG->early_install_lang = true;
88
get_string_manager(true);
89
 
90
raise_memory_limit(MEMORY_EXTRA);
91
 
92
// now get cli options
93
list($options, $unrecognized) = cli_get_params(
94
    array(
95
        'lang'              => 'en',
96
        'adminuser'         => 'admin',
97
        'adminpass'         => '',
98
        'adminemail'        => '',
99
        'fullname'          => '',
100
        'shortname'         => '',
101
        'summary'           => '',
102
        'supportemail'      => '',
103
        'agree-license'     => false,
104
        'help'              => false
105
    ),
106
    array(
107
        'h' => 'help'
108
    )
109
);
110
 
111
if ($unrecognized) {
112
    $unrecognized = implode("\n  ", $unrecognized);
113
    cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
114
}
115
 
116
// We show help text even if tables are installed.
117
if ($options['help']) {
118
    echo $help;
119
    die;
120
}
121
 
122
// Make sure no tables are installed yet.
123
if ($DB->get_tables() ) {
124
    cli_error(get_string('clitablesexist', 'install'));
125
}
126
 
127
if (!$options['agree-license']) {
128
    cli_error('You have to agree to the license. --help prints out the help'); // TODO: localize
129
}
130
 
131
if ($options['adminpass'] === true or $options['adminpass'] === '') {
132
    cli_error('You have to specify admin password. --help prints out the help'); // TODO: localize
133
}
134
 
135
// Validate that the address provided was an e-mail address.
136
if (!empty($options['adminemail']) && !validate_email($options['adminemail'])) {
137
    $a = (object) array('option' => 'adminemail', 'value' => $options['adminemail']);
138
    cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
139
}
140
 
141
// Validate that the supportemail provided was an e-mail address.
142
if (!empty($options['supportemail']) && !validate_email($options['supportemail'])) {
143
    $a = (object) [
144
        'option' => 'supportemail',
145
        'value' => $options['supportemail']
146
    ];
147
    cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
148
}
149
 
150
$options['lang'] = clean_param($options['lang'], PARAM_SAFEDIR);
151
if (!file_exists($CFG->dirroot.'/install/lang/'.$options['lang'])) {
152
    $options['lang'] = 'en';
153
}
154
$CFG->lang = $options['lang'];
155
 
156
// download required lang packs
157
if ($CFG->lang !== 'en') {
158
    make_upload_directory('lang');
159
    $installer = new lang_installer($CFG->lang);
160
    $results = $installer->run();
161
    foreach ($results as $langcode => $langstatus) {
162
        if ($langstatus === lang_installer::RESULT_DOWNLOADERROR) {
163
            $a       = new stdClass();
164
            $a->url  = $installer->lang_pack_url($langcode);
165
            $a->dest = $CFG->dataroot.'/lang';
166
            cli_problem(get_string('remotedownloaderror', 'error', $a));
167
        }
168
    }
169
}
170
 
171
// switch the string_manager instance to stop using install/lang/
172
$CFG->early_install_lang = false;
173
get_string_manager(true);
174
 
175
require("$CFG->dirroot/version.php");
176
 
177
// Test environment first.
178
require_once($CFG->libdir . '/environmentlib.php');
179
list($envstatus, $environment_results) = check_moodle_environment(normalize_version($release), ENV_SELECT_RELEASE);
180
if (!$envstatus) {
181
    $errors = environment_get_errors($environment_results);
182
    cli_heading(get_string('environment', 'admin'));
183
    foreach ($errors as $error) {
184
        list($info, $report) = $error;
185
        echo "!! $info !!\n$report\n\n";
186
    }
187
    exit(1);
188
}
189
 
190
// Test plugin dependencies.
191
$failed = array();
192
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
193
    cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
194
    cli_error(get_string('pluginschecktodo', 'admin'));
195
}
196
 
197
install_cli_database($options, true);
198
 
199
// This needs to happen at the end to ensure it occurs after all caches
200
// have been purged for the last time.
201
// This will build a cached version of the current theme for the user
202
// to immediately start browsing the site.
203
require_once($CFG->libdir.'/upgradelib.php');
204
upgrade_themes();
205
 
206
echo get_string('cliinstallfinished', 'install')."\n";
207
exit(0); // 0 means success