Repository URL to install this package:
|
Version:
1.0.0 ▾
|
<?php
/**
* Created by PhpStorm.
* User: danilo
* Date: 18/12/15
* Time: 10:58
*/
namespace Modules\Core\Commands\Installers\Scripts;
use Illuminate\Console\Command;
use Illuminate\Contracts\Config\Repository as Config;
use Modules\Core\Commands\Installers\SetupScript;
use Modules\Core\Commands\Installers\Writers\EnvFileWriter;
use PDOException;
class ConfigureDatabase implements SetupScript
{
/**
* @var
*/
protected $config;
/**
* @var EnvFileWriter
*/
protected $env;
/**
* @var Command
*/
protected $command;
/**
* @param Config $config
* @param EnvFileWriter $env
*/
public function __construct(Config $config, EnvFileWriter $env)
{
$this->config = $config;
$this->env = $env;
}
/**
* Fire the install script
* @param Command $command
* @return mixed
*/
public function fire(Command $command)
{
$this->command = $command;
$connected = false;
while (!$connected) {
$environment = $this->askEnvironment();
$host = $this->askDatabaseHost();
$prefix = $this->askDatabasePrefix();
$name = $this->askDatabaseName();
$user = $this->askDatabaseUsername();
$password = $this->askDatabasePassword();
$this->setLaravelConfiguration($prefix, $name, $user, $password, $host);
$connected = $this->databaseConnectionIsValid();
if (!$connected) {
$command->error("Please ensure your database credentials are valid.");
}
}
$this->env->write($environment, $name, $user, $password, $host);
$command->info('Database successfully configured');
}
/**
* @return string
*/
public function askEnvironment()
{
do {
$selectedEnv = $this->command->choice('Select the environment for installation', ['Local', 'Homolog', 'Production'], 0);
if (!$selectedEnv) {
$this->command->error('Environment not valid, try again');
}
} while (!$selectedEnv);
return strtolower($selectedEnv);
}
/**
* @return string
*/
protected function askDatabaseHost()
{
$host = $this->command->ask('Enter your database host', 'localhost');
return $host;
}
/**
* @return string
*/
protected function askDatabasePrefix()
{
$prefix = $this->command->ask('Enter a database prefix', 'wb_');
return $prefix;
}
/**
* @return string
*/
protected function askDatabaseName()
{
do {
$name = $this->command->ask('Enter your database name', config('core.install.database_name', 'homestead'));
if ($name == '') {
$this->command->error('Database name is required');
}
} while (!$name);
return $name;
}
/**
* @param
* @return string
*/
protected function askDatabaseUsername()
{
do {
$user = $this->command->ask('Enter your database username', 'homestead');
if ($user == '') {
$this->command->error('Database username is required');
}
} while (!$user);
return $user;
}
/**
* @param
* @return string
*/
protected function askDatabasePassword()
{
$databasePassword = $this->command->secret('Enter your database password (leave <none> for no password)', 'secret');
return ($databasePassword === '<none>') ? '' : $databasePassword;
}
/**
* @param $name
* @param $user
* @param $password
*/
protected function setLaravelConfiguration($prefix, $name, $user, $password, $host)
{
$this->config['database.connections.mysql.host'] = $host;
$this->config['database.connections.mysql.prefix'] = $prefix;
$this->config['database.connections.mysql.database'] = $name;
$this->config['database.connections.mysql.username'] = $user;
$this->config['database.connections.mysql.password'] = $password;
}
/**
* Is the database connection valid?
* @return bool
*/
protected function databaseConnectionIsValid()
{
try {
app('db')->reconnect();
return true;
} catch (PDOException $e) {
return false;
}
}
}