diff --git a/admin/cli/install.php b/admin/cli/install.php index 738cb1bd96f..9692c2a6b2a 100644 --- a/admin/cli/install.php +++ b/admin/cli/install.php @@ -60,21 +60,27 @@ Options: required in non-interactive mode. --non-interactive No interactive questions, installation fails if any problem encountered. ---agreelicense Indicates agreement with software license, +--agree-license Indicates agreement with software license, required in non-interactive mode. -h, --help Print out this help Example: \$sudo -u wwwrun /usr/bin/php admin/cli/install.php --lang=cs -"; //TODO: localize, mark as needed in install +"; //TODO: localize, mark as needed in install - to be translated later when everything is finished // Nothing to do if config.php exists $configfile = dirname(dirname(dirname(__FILE__))).'/config.php'; if (file_exists($configfile)) { require($configfile); - echo("Moodle already installed, please use admin/cli/upgrade.php if you want to upgrade your site.\n\n"); // TODO: localize - echo $help; - die(1); + require_once($CFG->libdir.'/clilib.php'); + list($options, $unrecognized) = cli_get_params(array('help'=>false), array('h'=>'help')); + + if ($options['help']) { + echo $help; + echo "\n\n"; + } + + cli_error(get_string('clialreadyinstalled', 'install')); } $olddir = getcwd(); @@ -108,7 +114,7 @@ $CFG->httpsthemewww = $CFG->wwwroot; $CFG->dataroot = str_replace('\\', '/', dirname(dirname(dirname(__FILE__))).'/moodledata'); $CFG->docroot = 'http://docs.moodle.org'; $CFG->directorypermissions = 00777; -$CFG->running_installer = true; +//$CFG->running_installer = true; $parts = explode('/', str_replace('\\', '/', dirname(dirname(__FILE__)))); $CFG->admin = array_pop($parts); @@ -146,16 +152,16 @@ foreach ($databases as $type=>$database) { } } if (empty($databases)) { - cli_error('No db drivers available!'); // TODO: localize + $defaultdb = ''; +} else { + reset($databases); + $defaultdb = key($databases); } -reset($databases); -$defaultdb = key($databases); - // now get cli options list($options, $unrecognized) = cli_get_params(array('lang'=>$CFG->lang, 'wwwroot'=>'', 'dataroot'=>$CFG->dataroot, 'dbtype'=>$defaultdb, 'dbhost'=>'localhost', 'dbname'=>'moodle', 'dbuser'=>'root', 'dbpass'=>'', 'dbsocket'=>false, 'prefix'=>'mdl_', 'admin-password'=>'', - 'non-interactive'=>false, 'agreelicense'=>false, 'help'=>false), + 'non-interactive'=>false, 'agree-license'=>false, 'help'=>false), array('h'=>'help')); $interactive = empty($options['non-interactive']); @@ -171,8 +177,8 @@ if (file_exists($CFG->dirroot.'/install/lang/'.$lang)) { } if ($unrecognized) { - $error = implode("\n ", $unrecognized); - cli_error("Unrecognized options:\n $error \n. Please use --help option."); // TODO: localize, mark as needed in install + $unrecognized = implode("\n ", $unrecognized); + cli_error('cliunknowoption', 'admin', $unrecognized); } if ($options['help']) { @@ -180,16 +186,14 @@ if ($options['help']) { die; } -$separator = str_repeat('=', 79)."\n"; - //Print header -echo "Moodle $CFG->target_release command line installation program.\n"; // TODO: localize, mark as needed in install +echo get_string('cliinstallheader', 'install', $CFG->target_release)."\n"; //Fist select language if ($interactive) { - echo $separator; + cli_separator(); $languages = install_get_list_of_languages(); - // fomrat the langs nicely - 4 per line + // format the langs nicely - 3 per line $c = 0; $langlist = ''; foreach ($languages as $key=>$lang) { @@ -202,7 +206,9 @@ if ($interactive) { } } $default = str_replace('_utf8', '', $CFG->lang); - $prompt = "Available languages:\n$langlist\nType language code or press Enter to use default value ($default)"; // TODO: localize, mark as needed in install + cli_heading(get_string('availablelangs', 'install')); + echo $langlist."\n"; + $prompt = get_string('clitypevaluedefault', 'admin', $default); $error = ''; do { echo $error; @@ -210,14 +216,14 @@ if ($interactive) { $input = clean_param($input, PARAM_SAFEDIR); if (!file_exists($CFG->dirroot.'/install/lang/'.$input.'_utf8')) { - $error = "Incorrect value, please retry.\n"; // TODO: localize, mark as needed in install + $error = get_string('cliincorrectvalueretry', 'admin')."\n"; } else { $error = ''; } } while ($error !== ''); $CFG->lang = $input.'_utf8'; } else { - // already verified + // already selected and verified } @@ -225,11 +231,13 @@ if ($interactive) { $wwwroot = clean_param($options['wwwroot'], PARAM_URL); $wwwroot = trim($wwwroot, '/'); if ($interactive) { - echo $separator; + cli_separator(); + cli_heading(get_string('wwwroot', 'install')); if (strpos($wwwroot, 'http') === 0) { - $prompt = "Type URL of your site \nor press Enter to use default value ($wwwroot)"; // TODO: localize, mark as needed in install + $prompt = get_string('clitypevaluedefault', 'admin', $wwwroot); } else { - $prompt = "Type URL of your site"; // TODO: localize, mark as needed in install + $wwwroot = null; + $prompt = get_string('clitypevalue', 'admin'); } $error = ''; do { @@ -238,7 +246,7 @@ if ($interactive) { $input = clean_param($input, PARAM_URL); $input = trim($input, '/'); if (strpos($input, 'http') !== 0) { - $error = "Incorrect value, please retry.\n"; // TODO: localize, mark as needed in install + $error = get_string('cliincorrectvalueretry', 'admin')."\n"; } else { $error = ''; } @@ -247,7 +255,8 @@ if ($interactive) { } else { if (strpos($wwwroot, 'http') !== 0) { - cli_error("Error:\n wwwroot parametr value \"$wwwroot\" in not correct. Please use different value."); // TODO: localize, mark as needed in install + $a = (object)array('option'=>'wwwroot', 'value'=>$wwwroot); + cli_error(get_string('cliincorrectvalueerror', 'admin', $a)); } } $CFG->wwwroot = $wwwroot; @@ -257,7 +266,7 @@ $CFG->httpsthemewww = $CFG->wwwroot; //We need dataroot before lang download if ($interactive) { - echo $separator; + cli_separator(); $i=0; while(is_dataroot_insecure()) { $parrent = dirname($CFG->dataroot); @@ -268,25 +277,27 @@ if ($interactive) { } $CFG->dataroot = dirname($parrent).'/moodledata'; } + cli_heading(get_string('dataroot', 'install')); $error = ''; do { if ($CFG->dataroot !== '') { - $prompt = "Type Moodle data directory \nor press Enter to use default value ($CFG->dataroot)"; // TODO: localize, mark as needed in install + $prompt = get_string('clitypevaluedefault', 'admin', $CFG->dataroot); } else { - $prompt = "Type Moodle data directory"; // TODO: localize, mark as needed in install + $prompt = get_string('clitypevalue', 'admin'); } echo $error; $CFG->dataroot = cli_input($prompt, $CFG->dataroot); if ($CFG->dataroot === '') { - $error = "Incorrect value, please retry.\n"; // TODO: localize, mark as needed in install + $error = get_string('cliincorrectvalueretry', 'admin')."\n"; } else if (is_dataroot_insecure()) { $CFG->dataroot = ''; - $error = "Directory may not be secure, please retry.\n"; // TODO: localize, mark as needed in install + //TODO: use unsecure warning instead + $error = get_string('cliincorrectvalueretry', 'admin')."\n"; } else { if (make_upload_directory('lang', false)) { $error = ''; } else { - $error = "Can not create dataroot directory, verify permissions or create directory manually.\n"; // TODO: localize, mark as needed in install + $error = get_string('pathserrcreatedataroot', 'install', $CFG->dataroot)."\n"; } } @@ -294,16 +305,17 @@ if ($interactive) { } else { if (is_dataroot_insecure()) { - cli_error("Error:\n directory $CFG->dataroot may be directly accessible via web. Please use different directory."); // TODO: localize, mark as needed in install + $a = (object)array('option'=>'dataroot', 'value'=>$CFG->dataroot); + //TODO: use unsecure warning instead + cli_error(get_string('cliincorrectvalueerror', 'admin', $a)); + } + if (!make_upload_directory('lang', false)) { + cli_error(get_string('pathserrcreatedataroot', 'install', $CFG->dataroot)); } } //download lang pack with optional notification if ($CFG->lang != 'en_utf8') { - if ($interactive) { - echo $separator; - echo "Downloading latest language package from moodle.org...\n"; // TODO: localize, mark as needed in install - } if ($cd = new component_installer('http://download.moodle.org', 'lang16', $CFG->lang.'.zip', 'languages.md5', 'lang')) { if ($cd->install() == COMPONENT_ERROR) { if ($cd->get_error() == 'remotedownloaderror') { @@ -323,9 +335,6 @@ if ($CFG->lang != 'en_utf8') { } } } - if ($interactive) { - echo "...finished lang download.\n"; // TODO: localize - } } unset($CFG->running_installer); // we use full lang packs from now on @@ -333,23 +342,22 @@ unset($CFG->running_installer); // we use full lang packs from now on // ask for db type - show only drivers available if ($interactive) { $options['dbtype'] = strtolower($options['dbtype']); - echo $separator; - echo "Available database drivers\n"; + cli_separator(); + cli_heading(get_string('databasetypehead', 'install')); foreach ($databases as $type=>$database) { - echo " $type:".$database->get_name()."\n"; + echo " $type \n"; } - echo "\n"; if (!empty($databases[$options['dbtype']])) { - $prompt = "Type driver short name\nor press Enter to use default value (".$options['dbtype'].")"; // TODO: localize + $prompt = get_string('clitypevaluedefault', 'admin', $options['dbtype']); } else { - $prompt = "Type driver short name"; // TODO: localize + $prompt = get_string('clitypevalue', 'admin'); } - $CFG->dbtype = cli_input($prompt, $options['dbtype'], array_keys($databases)); } else { if (empty($databases[$options['dbtype']])) { - cli_error("Error:\n dbtype parametr value \"".$options['dbtype']."\" in not correct. Please use different value."); // TODO: localize + $a = (object)array('option'=>'dbtype', 'value'=>$options['dbtype']); + cli_error(get_string('cliincorrectvalueerror', 'admin', $a)); } $CFG->dbtype = $options['dbtype']; } @@ -358,13 +366,13 @@ $database = $databases[$CFG->dbtype]; // ask for db host if ($interactive) { - echo $separator; + cli_separator(); + cli_heading(get_string('databasehost', 'install')); if ($options['dbhost'] !== '') { - $prompt = "Type database host\nor press Enter to use default value (".$options['dbhost'].")"; // TODO: localize + $prompt = get_string('clitypevaluedefault', 'admin', $options['dbhost']); } else { - $prompt = "Type database host"; // TODO: localize + $prompt = get_string('clitypevalue', 'admin'); } - $CFG->dbhost = cli_input($prompt, $options['dbhost']); } else { @@ -373,13 +381,13 @@ if ($interactive) { // ask for db name if ($interactive) { - echo $separator; + cli_separator(); + cli_heading(get_string('databasename', 'install')); if ($options['dbname'] !== '') { - $prompt = "Type database name\nor press Enter to use default value (".$options['dbname'].")"; // TODO: localize + $prompt = get_string('clitypevaluedefault', 'admin', $options['dbname']); } else { - $prompt = "Type database name"; // TODO: localize + $prompt = get_string('clitypevalue', 'admin'); } - $CFG->dbname = cli_input($prompt, $options['dbname']); } else { @@ -388,14 +396,14 @@ if ($interactive) { // ask for db prefix if ($interactive) { - echo $separator; + cli_separator(); + cli_heading(get_string('dbprefix', 'install')); //TODO: solve somehow the prefix trouble for oci if ($options['prefix'] !== '') { - $prompt = "Type table prefix\nor press Enter to use default value (".$options['prefix'].")"; // TODO: localize + $prompt = get_string('clitypevaluedefault', 'admin', $options['prefix']); } else { - $prompt = "Type table prefix"; // TODO: localize + $prompt = get_string('clitypevalue', 'admin'); } - $CFG->prefix = cli_input($prompt, $options['prefix']); } else { @@ -404,13 +412,13 @@ if ($interactive) { // ask for db user if ($interactive) { - echo $separator; + cli_separator(); + cli_heading(get_string('databaseuser', 'install')); if ($options['dbuser'] !== '') { - $prompt = "Type database user name\nor press Enter to use default value (".$options['dbuser'].")"; // TODO: localize + $prompt = get_string('clitypevaluedefault', 'admin', $options['dbuser']); } else { - $prompt = "Type database user name"; // TODO: localize + $prompt = get_string('clitypevalue', 'admin'); } - $CFG->dbuser = cli_input($prompt, $options['dbuser']); } else { @@ -419,12 +427,13 @@ if ($interactive) { // ask for db password if ($interactive) { - echo $separator; + cli_separator(); + cli_heading(get_string('databasepass', 'install')); do { if ($options['dbpass'] !== '') { - $prompt = "Type database user password\nor press Enter to use default value (".$options['dbpass'].")"; // TODO: localize + $prompt = get_string('clitypevaluedefault', 'admin', $options['dbpass']); } else { - $prompt = "Type database user password"; // TODO: localize + $prompt = get_string('clitypevalue', 'admin'); } $CFG->dbpass = cli_input($prompt, $options['dbpass']); @@ -435,32 +444,34 @@ if ($interactive) { $CFG->dbpass = $options['dbpass']; $hint_database = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersit'=>0, 'dbsocket'=>$options['dbsocket'])); if ($hint_database !== '') { - cli_error('Can not open connection to database!'); + cli_error(get_string('dbconnectionerror', 'install')); } } // ask for admin user password if ($interactive) { - echo $separator; - $prompt = "Type requested password for user 'admin'"; // TODO: localize + cli_separator(); + cli_heading(get_string('cliadminpassword', 'install')); + $prompt = get_string('clitypevalue', 'admin'); do { $options['admin-password'] = cli_input($prompt); } while (empty($options['admin-password']) or $options['admin-password'] === 'admin'); } else { if (empty($options['admin-password']) or $options['admin-password'] === 'admin') { - cli_error('Requested administrator password must not be empty or easy to guess..'); //TODO: localize + $a = (object)array('option'=>'admin-password', 'value'=>$options['admin-password']); + cli_error(get_string('cliincorrectvalueerror', 'admin', $a)); } } if ($interactive) { - echo $separator; - if (!$options['agreelicense']) { + cli_separator(); + if (!$options['agree-license']) { echo "Do you agree to Moodle license blah blah blah?\n"; //TODO: localize and use real license $input = cli_input('Type yes or y if you agree, ctrl+c if not', '', array('yes', 'y')); // TODO: localize including yes/y } } else { - if (!$options['agreelicense']) { - cli_error('You must aggree to license by specifying --agreelicense'); //TODO: localize + if (!$options['agree-license']) { + cli_error('You must aggree to license by specifying --agree-license'); //TODO: localize } } @@ -475,7 +486,7 @@ if (($fh = fopen($configfile, 'w')) !== false) { if (!file_exists($configfile)) { cli_error('Can not create config file.'); } else if ($interactive) { - echo $separator; + cli_separator(); echo "config.php created\n"; } @@ -508,7 +519,7 @@ if (!$DB->setup_is_unicodedb()) { } if ($interactive) { - echo $separator; + cli_separator(); echo get_string('databasesetup')."\n"; } diff --git a/install/stringnames.txt b/install/stringnames.txt index 32488c8e49c..8f1ecf4f0a0 100644 --- a/install/stringnames.txt +++ b/install/stringnames.txt @@ -1,4 +1,5 @@ admindir +availablelangs cannotcreatelangdir cannotdownloadcomponents cannotdownloadzipfile @@ -8,11 +9,17 @@ cannotsavezipfile cannotunzipfile chooselanguagehead chooselanguagesub +cliincorrectvalueerror +cliincorrectvalueretry +cliinstallheader +clitypevalue +clitypevaluedefault +cliunknowoption +dataroot +dirroot environment errorsinenvironment environmentsub2 -dataroot -dirroot environmentrequireinstall environmentrequireversion installation diff --git a/lang/en_utf8/admin.php b/lang/en_utf8/admin.php index fdb18f76732..5e0965a432e 100644 --- a/lang/en_utf8/admin.php +++ b/lang/en_utf8/admin.php @@ -58,6 +58,11 @@ $string['checkboxno'] = 'No'; $string['choosefiletoedit'] = 'Choose file to edit'; $string['clamfailureonupload'] = 'On clam AV failure'; $string['cleanup'] = 'Cleanup'; +$string['cliincorrectvalueerror'] = 'Error, incorrect value \"$a->value\" for \"$a->option\"'; +$string['cliincorrectvalueretry'] = 'Incorrect value, please retry'; +$string['clitypevalue'] = 'type value'; +$string['clitypevaluedefault'] = 'type value, press Enter to use default value ($a)'; +$string['cliunknowoption'] = "Unrecognized options:\n \$a\n. Please use --help option."; $string['commonfiltersettings'] = 'Common filter settings'; $string['commonsettings'] = 'Common settings'; $string['componentinstalled'] = 'Component Installed'; diff --git a/lang/en_utf8/install.php b/lang/en_utf8/install.php index 806507bd89c..c86daca80a2 100644 --- a/lang/en_utf8/install.php +++ b/lang/en_utf8/install.php @@ -21,6 +21,9 @@ $string['caution'] = 'Caution'; $string['chooselanguage'] = 'Choose a language'; $string['chooselanguagehead'] = 'Choose a language'; $string['chooselanguagesub'] = 'Please choose a language for the installation. This language will also be used as the default language for the site, though it may be changed later.'; +$string['cliadminpassword'] = 'New admin user password'; +$string['clialreadyinstalled'] = 'File config.php already exists, please use admin/cli/upgrade.php if you want to upgrade your site.'; +$string['cliinstallheader'] = 'Moodle $a command line installation program'; $string['compatibilitysettings'] = 'Checking your PHP settings ...'; $string['compatibilitysettingshead'] = 'Checking your PHP settings ...'; $string['compatibilitysettingssub'] = 'Your server should pass all these tests to make Moodle run properly'; diff --git a/lib/clilib.php b/lib/clilib.php index af015556a65..928af4cbc07 100644 --- a/lib/clilib.php +++ b/lib/clilib.php @@ -123,6 +123,35 @@ function cli_get_params(array $longoptions, array $shortmapping=null) { return array($options, $unrecognized); } +/** + * Print or return section separator string + * @param bool $return false means print, true return as string + * @return mixed void or string + */ +function cli_separator($return=false) { + $separator = str_repeat('-', 79)."\n"; + if ($return) { + return $separator; + } else { + echo $separator; + } +} + +/** + * Print or return section heading string + * @param string $string text + * @param bool $return false means print, true return as string + * @return mixed void or string + */ +function cli_heading($string, $return=false) { + $string = "== $string ==\n"; + if ($return) { + return $string; + } else { + echo $string; + } +} + /** * Write error notification * @param $text