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; } $this->line('Setting locale ' . $this->locale); Session::put(self::OPT_LOCALE, $this->locale); $this->prompt(); // Create the .env file Installer::createDefaultEnvFile(); $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 admin'); Installer::createUser($this->adminEmail, $this->adminPassword, $this->locale); $this->line('Applying the final touches'); Installer::finalTouches(); return self::CMD_SUCCESS; } /** * Check that all options are presents. otherwise returns an array of the missing options */ private function checkOptions() { $missingOptions = array(); $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->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->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->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->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; } return $missingOptions; } /** * 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->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->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->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->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?'); } } 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); 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.'); return false; } return true; } }