Installer and Updater
This commit is contained in:
parent
bfca6bc27a
commit
6e469b01ec
|
@ -15,6 +15,7 @@ use PDO;
|
|||
use b8\Config;
|
||||
use b8\Database;
|
||||
use b8\Store\Factory;
|
||||
use PHPCI\Helper\Lang;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
|
@ -39,16 +40,16 @@ class InstallCommand extends Command
|
|||
|
||||
$this
|
||||
->setName('phpci:install')
|
||||
->addOption('url', null, InputOption::VALUE_OPTIONAL, 'PHPCI Installation URL')
|
||||
->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'Database hostname')
|
||||
->addOption('db-name', null, InputOption::VALUE_OPTIONAL, 'Database name')
|
||||
->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'Database username')
|
||||
->addOption('db-pass', null, InputOption::VALUE_OPTIONAL, 'Database password')
|
||||
->addOption('admin-name', null, InputOption::VALUE_OPTIONAL, 'Admin username')
|
||||
->addOption('admin-pass', null, InputOption::VALUE_OPTIONAL, 'Admin password')
|
||||
->addOption('admin-mail', null, InputOption::VALUE_OPTIONAL, 'Admin e-mail')
|
||||
->addOption('config-path', null, InputOption::VALUE_OPTIONAL, 'Config file path', $defaultPath)
|
||||
->setDescription('Install PHPCI.');
|
||||
->addOption('url', null, InputOption::VALUE_OPTIONAL, Lang::get('installation_url'))
|
||||
->addOption('db-host', null, InputOption::VALUE_OPTIONAL, Lang::get('db_host'))
|
||||
->addOption('db-name', null, InputOption::VALUE_OPTIONAL, Lang::get('db_name'))
|
||||
->addOption('db-user', null, InputOption::VALUE_OPTIONAL, Lang::get('db_user'))
|
||||
->addOption('db-pass', null, InputOption::VALUE_OPTIONAL, Lang::get('db_pass'))
|
||||
->addOption('admin-name', null, InputOption::VALUE_OPTIONAL, Lang::get('admin_name'))
|
||||
->addOption('admin-pass', null, InputOption::VALUE_OPTIONAL, Lang::get('admin_pass'))
|
||||
->addOption('admin-mail', null, InputOption::VALUE_OPTIONAL, Lang::get('admin_email'))
|
||||
->addOption('config-path', null, InputOption::VALUE_OPTIONAL, Lang::get('config_path'), $defaultPath)
|
||||
->setDescription(Lang::get('install_phpci'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -62,13 +63,13 @@ class InstallCommand extends Command
|
|||
|
||||
$output->writeln('');
|
||||
$output->writeln('<info>******************</info>');
|
||||
$output->writeln('<info> Welcome to PHPCI</info>');
|
||||
$output->writeln('<info> '.Lang::get('welcome_to_phpci').'</info>');
|
||||
$output->writeln('<info>******************</info>');
|
||||
$output->writeln('');
|
||||
|
||||
$this->checkRequirements($output);
|
||||
|
||||
$output->writeln('Please answer the following questions:');
|
||||
$output->writeln(Lang::get('please_answer'));
|
||||
$output->writeln('-------------------------------------');
|
||||
$output->writeln('');
|
||||
|
||||
|
@ -111,9 +112,9 @@ class InstallCommand extends Command
|
|||
$errors = false;
|
||||
|
||||
// Check PHP version:
|
||||
if (!(version_compare(PHP_VERSION, '5.3.3') >= 0)) {
|
||||
if (!(version_compare(PHP_VERSION, '5.3.8') >= 0)) {
|
||||
$output->writeln('');
|
||||
$output->writeln('<error>PHPCI requires at least PHP 5.3.3 to function.</error>');
|
||||
$output->writeln('<error>'.Lang::get('phpci_php_req').'</error>');
|
||||
$errors = true;
|
||||
}
|
||||
|
||||
|
@ -123,7 +124,7 @@ class InstallCommand extends Command
|
|||
foreach ($requiredExtensions as $extension) {
|
||||
if (!extension_loaded($extension)) {
|
||||
$output->writeln('');
|
||||
$output->writeln('<error>'.$extension.' extension must be installed.</error>');
|
||||
$output->writeln('<error>'.Lang::get('extension_required', $extension).'</error>');
|
||||
$errors = true;
|
||||
}
|
||||
}
|
||||
|
@ -134,22 +135,22 @@ class InstallCommand extends Command
|
|||
foreach ($requiredFunctions as $function) {
|
||||
if (!function_exists($function)) {
|
||||
$output->writeln('');
|
||||
$output->writeln('<error>PHPCI needs to be able to call the '.$function.'() function. Is it disabled in php.ini?</error>');
|
||||
$output->writeln('<error>'.Lang::get('function_required', $function).'</error>');
|
||||
$errors = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('password_hash')) {
|
||||
$output->writeln('');
|
||||
$output->writeln('<error>PHPCI requires the password_hash() function available in PHP 5.4, or the password_compat library by ircmaxell.</error>');
|
||||
$output->writeln('<error>'.Lang::get('function_required', $function).'</error>');
|
||||
$errors = true;
|
||||
}
|
||||
|
||||
if ($errors) {
|
||||
throw new Exception('PHPCI cannot be installed, as not all requirements are met. Please review the errors above before continuing.');
|
||||
throw new Exception(Lang::get('requirements_not_met'));
|
||||
}
|
||||
|
||||
$output->writeln(' <info>OK</info>');
|
||||
$output->writeln(' <info>'.Lang::get('ok').'</info>');
|
||||
$output->writeln('');
|
||||
}
|
||||
|
||||
|
@ -170,9 +171,9 @@ class InstallCommand extends Command
|
|||
$dialog = $this->getHelperSet()->get('dialog');
|
||||
|
||||
// Function to validate mail address.
|
||||
$mailValidator =function ($answer) {
|
||||
$mailValidator = function ($answer) {
|
||||
if (!filter_var($answer, FILTER_VALIDATE_EMAIL)) {
|
||||
throw new Exception('Must be a valid email address.');
|
||||
throw new Exception(Lang::get('must_be_valid_email'));
|
||||
}
|
||||
|
||||
return $answer;
|
||||
|
@ -181,13 +182,13 @@ class InstallCommand extends Command
|
|||
if ($adminEmail = $input->getOption('admin-mail')) {
|
||||
$adminEmail = $mailValidator($adminEmail);
|
||||
} else {
|
||||
$adminEmail = $dialog->askAndValidate($output, 'Your email address: ', $mailValidator, false);
|
||||
$adminEmail = $dialog->askAndValidate($output, Lang::get('enter_email'), $mailValidator, false);
|
||||
}
|
||||
if (!$adminName = $input->getOption('admin-name')) {
|
||||
$adminName = $dialog->ask($output, 'Enter your name: ');
|
||||
$adminName = $dialog->ask($output, Lang::get('enter_name'));
|
||||
}
|
||||
if (!$adminPass = $input->getOption('admin-pass')) {
|
||||
$adminPass = $dialog->askHiddenResponse($output, 'Enter your desired admin password: ');
|
||||
$adminPass = $dialog->askHiddenResponse($output, Lang::get('enter_password'));
|
||||
}
|
||||
|
||||
$admin['mail'] = $adminEmail;
|
||||
|
@ -216,7 +217,7 @@ class InstallCommand extends Command
|
|||
// FUnction do validate URL.
|
||||
$urlValidator = function ($answer) {
|
||||
if (!filter_var($answer, FILTER_VALIDATE_URL)) {
|
||||
throw new Exception('Must be a valid URL');
|
||||
throw new Exception(Lang::get('must_be_valid_url'));
|
||||
}
|
||||
|
||||
return rtrim($answer, '/');
|
||||
|
@ -225,7 +226,7 @@ class InstallCommand extends Command
|
|||
if ($url = $input->getOption('url')) {
|
||||
$url = $urlValidator($url);
|
||||
} else {
|
||||
$url = $dialog->askAndValidate($output, 'Your PHPCI URL ("http://phpci.local" for example): ', $urlValidator, false);
|
||||
$url = $dialog->askAndValidate($output, Lang::get('enter_phpci_url'), $urlValidator, false);
|
||||
}
|
||||
|
||||
$phpci['url'] = $url;
|
||||
|
@ -250,19 +251,19 @@ class InstallCommand extends Command
|
|||
$dialog = $this->getHelperSet()->get('dialog');
|
||||
|
||||
if (!$dbHost = $input->getOption('db-host')) {
|
||||
$dbHost = $dialog->ask($output, 'Please enter your MySQL host [localhost]: ', 'localhost');
|
||||
$dbHost = $dialog->ask($output, Lang::get('enter_db_host'), 'localhost');
|
||||
}
|
||||
|
||||
if (!$dbName = $input->getOption('db-name')) {
|
||||
$dbName = $dialog->ask($output, 'Please enter your database name [phpci]: ', 'phpci');
|
||||
$dbName = $dialog->ask($output, Lang::get('enter_db_name'), 'phpci');
|
||||
}
|
||||
|
||||
if (!$dbUser = $input->getOption('db-user')) {
|
||||
$dbUser = $dialog->ask($output, 'Please enter your database username [phpci]: ', 'phpci');
|
||||
$dbUser = $dialog->ask($output, Lang::get('enter_db_user'), 'phpci');
|
||||
}
|
||||
|
||||
if (!$dbPass = $input->getOption('db-pass')) {
|
||||
$dbPass = $dialog->askHiddenResponse($output, 'Please enter your database password: ');
|
||||
$dbPass = $dialog->askHiddenResponse($output, Lang::get('enter_db_pass'));
|
||||
}
|
||||
|
||||
$db['servers']['read'] = $dbHost;
|
||||
|
@ -298,7 +299,7 @@ class InstallCommand extends Command
|
|||
return true;
|
||||
|
||||
} catch (Exception $ex) {
|
||||
$output->writeln('<error>PHPCI could not connect to MySQL with the details provided. Please try again.</error>');
|
||||
$output->writeln('<error>'.Lang::get('could_not_connect').'</error>');
|
||||
$output->writeln('<error>' . $ex->getMessage() . '</error>');
|
||||
}
|
||||
|
||||
|
@ -319,11 +320,11 @@ class InstallCommand extends Command
|
|||
|
||||
protected function setupDatabase(OutputInterface $output)
|
||||
{
|
||||
$output->write('Setting up your database... ');
|
||||
$output->write(Lang::get('setting_up_db'));
|
||||
|
||||
shell_exec(PHPCI_DIR . 'vendor/bin/phinx migrate -c "' . PHPCI_DIR . 'phinx.php"');
|
||||
|
||||
$output->writeln('<info>OK</info>');
|
||||
$output->writeln('<info>'.Lang::get('ok').'</info>');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -341,9 +342,9 @@ class InstallCommand extends Command
|
|||
$userService = new UserService($userStore);
|
||||
$userService->createUser($admin['name'], $admin['mail'], $admin['pass'], 1);
|
||||
|
||||
$output->writeln('<info>User account created!</info>');
|
||||
$output->writeln('<info>'.Lang::get('user_created').'</info>');
|
||||
} catch (\Exception $ex) {
|
||||
$output->writeln('<error>PHPCI failed to create your admin account.</error>');
|
||||
$output->writeln('<error>'.Lang::get('failed_to_create').'</error>');
|
||||
$output->writeln('<error>' . $ex->getMessage() . '</error>');
|
||||
die;
|
||||
}
|
||||
|
@ -367,8 +368,8 @@ class InstallCommand extends Command
|
|||
$content = file_get_contents($this->configFilePath);
|
||||
|
||||
if (!empty($content)) {
|
||||
$output->writeln('<error>The PHPCI config file exists and is not empty.</error>');
|
||||
$output->writeln('<error>If you were trying to update PHPCI, please use phpci:update instead.</error>');
|
||||
$output->writeln('<error>'.Lang::get('config_exists').'</error>');
|
||||
$output->writeln('<error>'.Lang::get('update_instead').'</error>');
|
||||
die;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
namespace PHPCI\Command;
|
||||
|
||||
use Monolog\Logger;
|
||||
use PHPCI\Helper\Lang;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
|
@ -40,7 +41,7 @@ class UpdateCommand extends Command
|
|||
{
|
||||
$this
|
||||
->setName('phpci:update')
|
||||
->setDescription('Update the database to reflect modified models.');
|
||||
->setDescription(Lang::get('update_phpci'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -50,25 +51,25 @@ class UpdateCommand extends Command
|
|||
{
|
||||
$this->verifyInstalled($output);
|
||||
|
||||
$output->write('Updating PHPCI database: ');
|
||||
$output->write(Lang::get('updating_phpci'));
|
||||
|
||||
shell_exec(PHPCI_DIR . 'vendor/bin/phinx migrate -c "' . PHPCI_DIR . 'phinx.php"');
|
||||
|
||||
$output->writeln('<info>Done!</info>');
|
||||
$output->writeln('<info>'.Lang::get('ok').'</info>');
|
||||
}
|
||||
|
||||
protected function verifyInstalled(OutputInterface $output)
|
||||
{
|
||||
if (!file_exists(PHPCI_DIR . 'PHPCI/config.yml')) {
|
||||
$output->writeln('<error>PHPCI does not appear to be installed.</error>');
|
||||
$output->writeln('<error>Please install PHPCI via phpci:install instead.</error>');
|
||||
$output->writeln('<error>'.Lang::get('not_installed').'</error>');
|
||||
$output->writeln('<error>'.Lang::get('install_instead').'</error>');
|
||||
die;
|
||||
}
|
||||
|
||||
$content = file_get_contents(PHPCI_DIR . 'PHPCI/config.yml');
|
||||
if (empty($content)) {
|
||||
$output->writeln('<error>PHPCI does not appear to be installed.</error>');
|
||||
$output->writeln('<error>Please install PHPCI via phpci:install instead.</error>');
|
||||
$output->writeln('<error>'.Lang::get('not_installed').'</error>');
|
||||
$output->writeln('<error>'.Lang::get('install_instead').'</error>');
|
||||
die;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -273,4 +273,46 @@ PHPCI',
|
|||
'remove' => 'Remove »',
|
||||
'search_packagist_for_more' => 'Search Packagist for more packages',
|
||||
'search' => 'Search »',
|
||||
|
||||
// Installer
|
||||
'installation_url' => 'PHPCI Installation URL',
|
||||
'db_host' => 'Database Host',
|
||||
'db_name' => 'Database Name',
|
||||
'db_user' => 'Database Username',
|
||||
'db_pass' => 'Database Password',
|
||||
'admin_name' => 'Admin Name',
|
||||
'admin_pass' => 'Admin Password',
|
||||
'admin_email' => 'Admin Email Address',
|
||||
'config_path' => 'Config File Path',
|
||||
'install_phpci' => 'Install PHPCI',
|
||||
'welcome_to_phpci' => 'Welcome to PHPCI',
|
||||
'please_answer' => 'Please answer the following questions:',
|
||||
'phpci_php_req' => 'PHPCI requires at least PHP 5.3.8 to function.',
|
||||
'extension_required' => 'Extension required: %s',
|
||||
'function_required' => 'PHPCI needs to be able to call the %s() function. Is it disabled in php.ini?',
|
||||
'requirements_not_met' => 'PHPCI cannot be installed, as not all requirements are met.
|
||||
Please review the errors above before continuing.',
|
||||
'must_be_valid_email' => 'Must be a valid email address.',
|
||||
'must_be_valid_url' => 'Must be a valid URL.',
|
||||
'enter_name' => 'Admin Name:',
|
||||
'enter_email' => 'Admin Email:',
|
||||
'enter_password' => 'Admin Password:',
|
||||
'enter_phpci_url' => 'Your PHPCI URL ("http://phpci.local" for example): ',
|
||||
|
||||
'enter_db_host' => 'Please enter your MySQL host [localhost]: ',
|
||||
'enter_db_name' => 'Please enter your MySQL name [phpci]: ',
|
||||
'enter_db_user' => 'Please enter your MySQL username [phpci]: ',
|
||||
'enter_db_pass' => 'Please enter your MySQL password: ',
|
||||
'could_not_connect' => 'PHPCI could not connect to MySQL with the details provided. Please try again.',
|
||||
'setting_up_db' => 'Setting up your database... ',
|
||||
'user_created' => 'User account created!',
|
||||
'failed_to_create' => 'PHPCI failed to create your admin account.',
|
||||
'config_exists' => 'The PHPCI config file exists and is not empty.',
|
||||
'update_instead' => 'If you were trying to update PHPCI, please use phpci:update instead.',
|
||||
|
||||
// Update
|
||||
'update_phpci' => 'Update the database to reflect modified models.',
|
||||
'updating_phpci' => 'Updating PHPCI database: ',
|
||||
'not_installed' => 'PHPCI does not appear to be installed.',
|
||||
'install_instead' => 'Please install PHPCI via phpci:install instead.',
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue