diff --git a/app/Console/Commands/Install.php b/app/Console/Commands/Install.php index 206018ab7..9f7de98d8 100644 --- a/app/Console/Commands/Install.php +++ b/app/Console/Commands/Install.php @@ -8,21 +8,21 @@ use Illuminate\Console\Command; class Install extends Command { - const CMD_SUCCESS = 0; - const CMD_ERROR = 1; - const OPT_DB_HOST = 'db-host'; - const OPT_DB_PORT = 'db-port'; - const OPT_DB_NAME = 'db-name'; - const OPT_DB_USERNAME = 'db-username'; - const OPT_DB_PASSWORD = 'db-password'; - const OPT_COMPANY_NAME = 'company-name'; - const OPT_COMPANY_EMAIL = 'company-email'; - const OPT_ADMIN_EMAIL = 'admin-email'; - const OPT_ADMIN_PASSWORD = 'admin-password'; - const OPT_LOCALE = 'locale'; - const OPT_NO_INTERACTION = 'no-interaction'; + const CMD_SUCCESS = 0; + const CMD_ERROR = 1; + const OPT_DB_HOST = 'db-host'; + const OPT_DB_PORT = 'db-port'; + const OPT_DB_NAME = 'db-name'; + const OPT_DB_USERNAME = 'db-username'; + const OPT_DB_PASSWORD = 'db-password'; + const OPT_COMPANY_NAME = 'company-name'; + const OPT_COMPANY_EMAIL = 'company-email'; + const OPT_ADMIN_EMAIL = 'admin-email'; + const OPT_ADMIN_PASSWORD = 'admin-password'; + const OPT_LOCALE = 'locale'; + const OPT_NO_INTERACTION = 'no-interaction'; - public $dbHost; + public $dbHost; public $dbPort; public $dbName; public $dbUsername; @@ -36,12 +36,12 @@ class Install extends Command public $locale; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'install + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'install {--db-host= : Database host} {--db-port=3306 : Port of the database host} {--db-name= : Name of the database} @@ -54,179 +54,179 @@ class Install extends Command {--locale=en-GB : Language used in the app} '; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Allows to install Akaunting directly through CLI'; + /** + * The console command description. + * + * @var string + */ + protected $description = 'Allows to install Akaunting directly through CLI'; - /** - * Create a new command instance. - */ - public function __construct() + /** + * Create a new command instance. + */ + public function __construct() { - parent::__construct(); - } + parent::__construct(); + } - /** - * Execute the console command. - * - * @return mixed - */ - public function handle() + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() { - $missingOptions = $this->checkOptions(); - if (!empty($missingOptions) && $this->option(self::OPT_NO_INTERACTION)) { - $this->line('❌ Some options are missing and --no-interaction is present. Please run the following command for more informations :'); - $this->line('❌ php artisan help install'); - $this->line('❌ Missing options are : ' . join(', ', $missingOptions)); + $missingOptions = $this->checkOptions(); + if (!empty($missingOptions) && $this->option(self::OPT_NO_INTERACTION)) { + $this->line('❌ Some options are missing and --no-interaction is present. Please run the following command for more informations :'); + $this->line('❌ php artisan help install'); + $this->line('❌ Missing options are : ' . join(', ', $missingOptions)); - return self::CMD_ERROR; - } + return self::CMD_ERROR; + } - $this->line('Setting locale ' . $this->locale); - Session::put(self::OPT_LOCALE, $this->locale); + $this->line('Setting locale ' . $this->locale); + Session::put(self::OPT_LOCALE, $this->locale); - $this->prompt(); + $this->prompt(); // Create the .env file Installer::createDefaultEnvFile(); - $this->line('Creating database tables'); - if (!$this->createDatabaseTables()) { - return self::CMD_ERROR; - } + $this->line('Creating database tables'); + if (!$this->createDatabaseTables()) { + return self::CMD_ERROR; + } - $this->line('Creating company'); - Installer::createCompany($this->companyName, $this->companyEmail, $this->locale); + $this->line('Creating company'); + Installer::createCompany($this->companyName, $this->companyEmail, $this->locale); - $this->line('Creating admin'); - Installer::createUser($this->adminEmail, $this->adminPassword, $this->locale); + $this->line('Creating admin'); + Installer::createUser($this->adminEmail, $this->adminPassword, $this->locale); - $this->line('Applying the final touches'); - Installer::finalTouches(); + $this->line('Applying the final touches'); + Installer::finalTouches(); - return self::CMD_SUCCESS; - } + return self::CMD_SUCCESS; + } - /** - * Check that all options are presents. otherwise returns an array of the missing options - */ - private function checkOptions() + /** + * Check that all options are presents. otherwise returns an array of the missing options + */ + private function checkOptions() { - $missingOptions = array(); + $missingOptions = array(); - $this->locale = $this->option(self::OPT_LOCALE); - if (empty($this->locale)) { - $missingOptions[] = self::OPT_LOCALE; - } + $this->locale = $this->option(self::OPT_LOCALE); + if (empty($this->locale)) { + $missingOptions[] = self::OPT_LOCALE; + } - $this->dbHost = $this->option(self::OPT_DB_HOST); - if (empty($this->dbHost)) { - $missingOptions[] = self::OPT_DB_HOST; - } + $this->dbHost = $this->option(self::OPT_DB_HOST); + if (empty($this->dbHost)) { + $missingOptions[] = self::OPT_DB_HOST; + } - $this->dbPort = $this->option(self::OPT_DB_PORT); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_DB_PORT; - } + $this->dbPort = $this->option(self::OPT_DB_PORT); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_DB_PORT; + } - $this->dbName = $this->option(self::OPT_DB_NAME); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_DB_NAME; - } + $this->dbName = $this->option(self::OPT_DB_NAME); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_DB_NAME; + } - $this->dbUsername = $this->option(self::OPT_DB_USERNAME); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_DB_USERNAME; - } + $this->dbUsername = $this->option(self::OPT_DB_USERNAME); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_DB_USERNAME; + } - $this->dbPassword = $this->option(self::OPT_DB_PASSWORD); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_DB_PASSWORD; - } + $this->dbPassword = $this->option(self::OPT_DB_PASSWORD); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_DB_PASSWORD; + } - $this->companyName = $this->option(self::OPT_COMPANY_NAME); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_COMPANY_NAME; - } + $this->companyName = $this->option(self::OPT_COMPANY_NAME); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_COMPANY_NAME; + } - $this->companyEmail = $this->option(self::OPT_COMPANY_EMAIL); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_COMPANY_EMAIL; - } + $this->companyEmail = $this->option(self::OPT_COMPANY_EMAIL); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_COMPANY_EMAIL; + } - $this->adminEmail = $this->option(self::OPT_ADMIN_EMAIL); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_ADMIN_EMAIL; - } + $this->adminEmail = $this->option(self::OPT_ADMIN_EMAIL); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_ADMIN_EMAIL; + } - $this->adminPassword = $this->option(self::OPT_ADMIN_PASSWORD); - if (empty($this->dbPort)) { - $missingOptions[] = self::OPT_ADMIN_PASSWORD; - } + $this->adminPassword = $this->option(self::OPT_ADMIN_PASSWORD); + if (empty($this->dbPort)) { + $missingOptions[] = self::OPT_ADMIN_PASSWORD; + } - return $missingOptions; - } + return $missingOptions; + } - /** - * Ask the user for data if some options are missing. - */ - private function prompt() + /** + * Ask the user for data if some options are missing. + */ + private function prompt() { - if (empty($this->dbHost)) { - $this->dbHost = $this->ask('What is the database host?', 'localhost'); - } + if (empty($this->dbHost)) { + $this->dbHost = $this->ask('What is the database host?', 'localhost'); + } - if (empty($this->dbPort)) { - $this->dbPort = $this->ask('What is the database port?', '3606'); - } + if (empty($this->dbPort)) { + $this->dbPort = $this->ask('What is the database port?', '3606'); + } - if (empty($this->dbName)) { - $this->dbName = $this->ask('What is the database name?'); - } + if (empty($this->dbName)) { + $this->dbName = $this->ask('What is the database name?'); + } - if (empty($this->dbUsername)) { - $this->dbUsername = $this->ask('What is the database username?'); - } + if (empty($this->dbUsername)) { + $this->dbUsername = $this->ask('What is the database username?'); + } - if (empty($this->dbPassword)) { - $this->dbPassword = $this->secret('What is the database password?'); - } + if (empty($this->dbPassword)) { + $this->dbPassword = $this->secret('What is the database password?'); + } - if (empty($this->companyName)) { - $this->companyName = $this->ask('What is the company name?'); - } + if (empty($this->companyName)) { + $this->companyName = $this->ask('What is the company name?'); + } - if (empty($this->companyEmail)) { - $this->companyEmail = $this->ask('What is the company contact email?'); - } + if (empty($this->companyEmail)) { + $this->companyEmail = $this->ask('What is the company contact email?'); + } - if (empty($this->adminEmail)) { - $this->adminEmail = $this->ask('What is the admin email?', $this->companyEmail); - } + if (empty($this->adminEmail)) { + $this->adminEmail = $this->ask('What is the admin email?', $this->companyEmail); + } - if (empty($this->adminPassword)) { - $this->adminPassword = $this->secret('What is the admin password?'); - } - } + if (empty($this->adminPassword)) { + $this->adminPassword = $this->secret('What is the admin password?'); + } + } - private function createDatabaseTables() { - $this->dbHost = $this->option(self::OPT_DB_HOST); - $this->dbPort = $this->option(self::OPT_DB_PORT); - $this->dbName = $this->option(self::OPT_DB_NAME); - $this->dbUsername = $this->option(self::OPT_DB_USERNAME); - $this->dbPassword = $this->option(self::OPT_DB_PASSWORD); + private function createDatabaseTables() { + $this->dbHost = $this->option(self::OPT_DB_HOST); + $this->dbPort = $this->option(self::OPT_DB_PORT); + $this->dbName = $this->option(self::OPT_DB_NAME); + $this->dbUsername = $this->option(self::OPT_DB_USERNAME); + $this->dbPassword = $this->option(self::OPT_DB_PASSWORD); - $this->line('Connecting to database ' . $this->dbName . '@' . $this->dbHost . ':' . $this->dbPort); + $this->line('Connecting to database ' . $this->dbName . '@' . $this->dbHost . ':' . $this->dbPort); if (!Installer::createDbTables($this->dbHost, $this->dbPort, $this->dbName, $this->dbUsername, $this->dbPassword)) { - $this->error('Error: Could not connect to the database! Please, make sure the details are correct.'); + $this->error('Error: Could not connect to the database! Please, make sure the details are correct.'); - return false; - } + return false; + } - return true; - } + return true; + } } diff --git a/app/Http/Controllers/Install/Database.php b/app/Http/Controllers/Install/Database.php index 40afcae21..96e5324f4 100644 --- a/app/Http/Controllers/Install/Database.php +++ b/app/Http/Controllers/Install/Database.php @@ -9,40 +9,40 @@ use Illuminate\Routing\Controller; class Database extends Controller { - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() + /** + * Show the form for creating a new resource. + * + * @return Response + */ + public function create() { - return view( 'install.database.create' ); - } + return view( 'install.database.create' ); + } - /** - * Store a newly created resource in storage. - * - * @param Request $request - * - * @return Response - */ - public function store(Request $request) + /** + * Store a newly created resource in storage. + * + * @param Request $request + * + * @return Response + */ + public function store(Request $request) { - $host = $request['hostname']; - $port = env( 'DB_PORT', '3306' ); - $database = $request['database']; - $username = $request['username']; - $password = $request['password']; + $host = $request['hostname']; + $port = env( 'DB_PORT', '3306' ); + $database = $request['database']; + $username = $request['username']; + $password = $request['password']; - // Check database connection - if (!Installer::createDbTables($host, $port, $database, $username, $password)) { - $message = trans('install.error.connection'); + // Check database connection + if (!Installer::createDbTables($host, $port, $database, $username, $password)) { + $message = trans('install.error.connection'); - flash( $message )->error()->important(); + flash( $message )->error()->important(); - return redirect( 'install/database' )->withInput(); - } + return redirect( 'install/database' )->withInput(); + } - return redirect('install/settings' ); - } + return redirect('install/settings' ); + } } diff --git a/app/Utilities/Installer.php b/app/Utilities/Installer.php index 7428c93db..908f5f04a 100644 --- a/app/Utilities/Installer.php +++ b/app/Utilities/Installer.php @@ -86,26 +86,26 @@ class Installer return $requirements; } - /** - * Create a default .env file. - * - * @return void - */ + /** + * Create a default .env file. + * + * @return void + */ public static function createDefaultEnvFile() { - // Rename file + // Rename file if (is_file(base_path('.env.example'))) { File::move(base_path('.env.example'), base_path('.env')); } // Update .env file static::updateEnv([ - 'APP_KEY' => 'base64:'.base64_encode(random_bytes(32)), - 'APP_URL' => url('/'), + 'APP_KEY' => 'base64:'.base64_encode(random_bytes(32)), + 'APP_URL' => url('/'), ]); } - public static function createDbTables($host, $port, $database, $username, $password) + public static function createDbTables($host, $port, $database, $username, $password) { if (!static::isDbValid($host, $port, $database, $username, $password)) { return false; @@ -126,46 +126,46 @@ class Installer return true; } - /** - * Check if the database exists and is accessible. - * - * @param $host - * @param $port - * @param $database - * @param $host - * @param $database - * @param $username - * @param $password - * - * @return bool - */ - public static function isDbValid($host, $port, $database, $username, $password) + /** + * Check if the database exists and is accessible. + * + * @param $host + * @param $port + * @param $database + * @param $host + * @param $database + * @param $username + * @param $password + * + * @return bool + */ + public static function isDbValid($host, $port, $database, $username, $password) { - Config::set('database.connections.install_test', [ - 'host' => $host, - 'port' => $port, - 'database' => $database, - 'username' => $username, - 'password' => $password, - 'driver' => env('DB_CONNECTION', 'mysql'), - 'charset' => env('DB_CHARSET', 'utf8mb4'), - ]); + Config::set('database.connections.install_test', [ + 'host' => $host, + 'port' => $port, + 'database' => $database, + 'username' => $username, + 'password' => $password, + 'driver' => env('DB_CONNECTION', 'mysql'), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + ]); - try { - DB::connection('install_test')->getPdo(); - } catch (\Exception $e) {; - return false; - } + try { + DB::connection('install_test')->getPdo(); + } catch (\Exception $e) {; + return false; + } - // Purge test connection - DB::purge('install_test'); + // Purge test connection + DB::purge('install_test'); - return true; - } + return true; + } - public static function saveDbVariables($host, $port, $database, $username, $password) - { - $prefix = strtolower(str_random(3) . '_'); + public static function saveDbVariables($host, $port, $database, $username, $password) + { + $prefix = strtolower(str_random(3) . '_'); // Update .env file static::updateEnv([ @@ -177,74 +177,74 @@ class Installer 'DB_PREFIX' => $prefix, ]); - $con = env('DB_CONNECTION', 'mysql'); + $con = env('DB_CONNECTION', 'mysql'); - // Change current connection - $db = Config::get('database.connections.' . $con); + // Change current connection + $db = Config::get('database.connections.' . $con); - $db['host'] = $host; - $db['database'] = $database; - $db['username'] = $username; - $db['password'] = $password; - $db['prefix'] = $prefix; + $db['host'] = $host; + $db['database'] = $database; + $db['username'] = $username; + $db['password'] = $password; + $db['prefix'] = $prefix; - Config::set('database.connections.' . $con, $db); + Config::set('database.connections.' . $con, $db); - DB::purge($con); - DB::reconnect($con); - } + DB::purge($con); + DB::reconnect($con); + } - public static function createCompany($name, $email, $locale) - { - // Create company - $company = Company::create([ - 'domain' => '', - ]); + public static function createCompany($name, $email, $locale) + { + // Create company + $company = Company::create([ + 'domain' => '', + ]); - // Set settings - setting()->set([ - 'general.company_name' => $name, - 'general.company_email' => $email, - 'general.default_currency' => 'USD', - 'general.default_locale' => $locale, - ]); + // Set settings + setting()->set([ + 'general.company_name' => $name, + 'general.company_email' => $email, + 'general.default_currency' => 'USD', + 'general.default_locale' => $locale, + ]); setting()->setExtraColumns(['company_id' => $company->id]); setting()->save(); - } + } - public static function createUser($email, $password, $locale) - { - // Create the user - $user = User::create([ - 'name' => '', - 'email' => $email, - 'password' => $password, - 'locale' => $locale, - ]); + public static function createUser($email, $password, $locale) + { + // Create the user + $user = User::create([ + 'name' => '', + 'email' => $email, + 'password' => $password, + 'locale' => $locale, + ]); - // Attach admin role - $user->roles()->attach('1'); + // Attach admin role + $user->roles()->attach('1'); - // Attach company - $user->companies()->attach('1'); - } + // Attach company + $user->companies()->attach('1'); + } - public static function finalTouches() - { - // Update .env file + public static function finalTouches() + { + // Update .env file static::updateEnv([ 'APP_LOCALE' => session('locale'), 'APP_INSTALLED' => 'true', 'APP_DEBUG' => 'false', ]); - // Rename the robots.txt file - try { - File::move(base_path('robots.txt.dist'), base_path('robots.txt')); - } catch (\Exception $e) { - // nothing to do - } - } + // Rename the robots.txt file + try { + File::move(base_path('robots.txt.dist'), base_path('robots.txt')); + } catch (\Exception $e) { + // nothing to do + } + } public static function updateEnv($data) { @@ -275,4 +275,4 @@ class Installer return true; } -} \ No newline at end of file +}