mirror of
https://github.com/friendica/friendica
synced 2025-04-29 21:04:24 +02:00
Refactoring Installation
- centralized installation - renamed Core\Install to Core\Installer - avoid using $a->data[] for states - removed unnecessary code
This commit is contained in:
parent
64149c41b4
commit
f0382ab919
8 changed files with 185 additions and 205 deletions
|
@ -5,7 +5,7 @@ namespace Friendica\Core\Console;
|
|||
use Asika\SimpleConsole\Console;
|
||||
use Friendica\BaseObject;
|
||||
use Friendica\Core\Config;
|
||||
use Friendica\Core\Install;
|
||||
use Friendica\Core\Installer;
|
||||
use Friendica\Core\Theme;
|
||||
use Friendica\Database\DBA;
|
||||
use Friendica\Database\DBStructure;
|
||||
|
@ -76,7 +76,7 @@ HELP;
|
|||
|
||||
$a = BaseObject::getApp();
|
||||
|
||||
$install = new Install();
|
||||
$installer = new Installer();
|
||||
|
||||
// if a config file is set,
|
||||
$config_file = $this->getOption(['f', 'file']);
|
||||
|
@ -111,7 +111,7 @@ HELP;
|
|||
$tz = $this->getOption(['T', 'tz'], (!empty('FRIENDICA_TZ')) ? getenv('FRIENDICA_TZ') : '');
|
||||
$lang = $this->getOption(['L', 'lang'], (!empty('FRIENDICA_LANG')) ? getenv('FRIENDICA_LANG') : '');
|
||||
|
||||
$install->createConfig(
|
||||
$installer->createConfig(
|
||||
$php_path,
|
||||
$url_path,
|
||||
((!empty($db_port)) ? $db_host . ':' . $db_port : $db_host),
|
||||
|
@ -130,14 +130,10 @@ HELP;
|
|||
// Check basic setup
|
||||
$this->out("Checking basic setup...\n");
|
||||
|
||||
$checkResults = [];
|
||||
$installer->resetChecks();
|
||||
|
||||
$this->runBasicChecks($install);
|
||||
|
||||
$checkResults['basic'] = $install->getChecks();
|
||||
$errorMessage = $this->extractErrors($checkResults['basic']);
|
||||
|
||||
if ($errorMessage !== '') {
|
||||
if (!$this->runBasicChecks($installer)) {
|
||||
$errorMessage = $this->extractErrors($installer->getChecks());
|
||||
throw new RuntimeException($errorMessage);
|
||||
}
|
||||
|
||||
|
@ -146,11 +142,10 @@ HELP;
|
|||
// Check database connection
|
||||
$this->out("Checking database...\n");
|
||||
|
||||
$checkResults['db'] = array();
|
||||
$checkResults['db'][] = $this->runDatabaseCheck($db_host, $db_user, $db_pass, $db_data);
|
||||
$errorMessage = $this->extractErrors($checkResults['db']);
|
||||
$installer->resetChecks();
|
||||
|
||||
if ($errorMessage !== '') {
|
||||
if (!$installer->checkDB($db_host, $db_user, $db_pass, $db_data)) {
|
||||
$errorMessage = $this->extractErrors($installer->getChecks());
|
||||
throw new RuntimeException($errorMessage);
|
||||
}
|
||||
|
||||
|
@ -159,10 +154,11 @@ HELP;
|
|||
// Install database
|
||||
$this->out("Inserting data into database...\n");
|
||||
|
||||
$checkResults['data'] = DBStructure::update(false, true, true);
|
||||
$installer->resetChecks();
|
||||
|
||||
if ($checkResults['data'] !== '') {
|
||||
throw new RuntimeException("ERROR: DB Database creation error. Is the DB empty?\n");
|
||||
if (!$installer->installDatabase()) {
|
||||
$errorMessage = $this->extractErrors($installer->getChecks());
|
||||
throw new RuntimeException($errorMessage);
|
||||
}
|
||||
|
||||
$this->out(" Complete!\n\n");
|
||||
|
@ -182,16 +178,30 @@ HELP;
|
|||
}
|
||||
|
||||
/**
|
||||
* @param Install $install the Installer instance
|
||||
* @param Installer $install the Installer instance
|
||||
*
|
||||
* @return bool true if checks were successfully, otherwise false
|
||||
*/
|
||||
private function runBasicChecks(Install $install)
|
||||
private function runBasicChecks(Installer $install)
|
||||
{
|
||||
$checked = true;
|
||||
|
||||
$install->resetChecks();
|
||||
$install->checkFunctions();
|
||||
$install->checkImagick();
|
||||
$install->checkLocalIni();
|
||||
$install->checkSmarty3();
|
||||
$install->checkKeys();
|
||||
if (!$install->checkFunctions()) {
|
||||
$checked = false;
|
||||
}
|
||||
if (!$install->checkImagick()) {
|
||||
$checked = false;
|
||||
}
|
||||
if (!$install->checkLocalIni()) {
|
||||
$checked = false;
|
||||
}
|
||||
if (!$install->checkSmarty3()) {
|
||||
$checked = false;
|
||||
}
|
||||
if ($install->checkKeys()) {
|
||||
$checked = false;
|
||||
}
|
||||
|
||||
if (!empty(Config::get('config', 'php_path'))) {
|
||||
if (!$install->checkPHP(Config::get('config', 'php_path'), true)) {
|
||||
|
@ -202,32 +212,8 @@ HELP;
|
|||
}
|
||||
|
||||
$this->out(" NOTICE: Not checking .htaccess/URL-Rewrite during CLI installation.\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $db_host
|
||||
* @param $db_user
|
||||
* @param $db_pass
|
||||
* @param $db_data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function runDatabaseCheck($db_host, $db_user, $db_pass, $db_data)
|
||||
{
|
||||
$result = array(
|
||||
'title' => 'MySQL Connection',
|
||||
'required' => true,
|
||||
'status' => true,
|
||||
'help' => '',
|
||||
);
|
||||
|
||||
|
||||
if (!DBA::connect($db_host, $db_user, $db_pass, $db_data)) {
|
||||
$result['status'] = false;
|
||||
$result['help'] = 'Failed, please check your MySQL settings and credentials.';
|
||||
}
|
||||
|
||||
return $result;
|
||||
return $checked;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,14 +6,21 @@ namespace Friendica\Core;
|
|||
|
||||
use DOMDocument;
|
||||
use Exception;
|
||||
use Friendica\Database\DBA;
|
||||
use Friendica\Database\DBStructure;
|
||||
use Friendica\Object\Image;
|
||||
use Friendica\Util\Network;
|
||||
|
||||
/**
|
||||
* Contains methods for installation purpose of Friendica
|
||||
*/
|
||||
class Install
|
||||
class Installer
|
||||
{
|
||||
// Default values for the install page
|
||||
const DEFAULT_LANG = 'en';
|
||||
const DEFAULT_TZ = 'America/Los_Angeles';
|
||||
const DEFAULT_HOST = 'localhost';
|
||||
|
||||
/**
|
||||
* @var array the check outcomes
|
||||
*/
|
||||
|
@ -54,7 +61,7 @@ class Install
|
|||
*
|
||||
* @return bool if the check succeed
|
||||
*/
|
||||
public function checkAll($baseurl, $phpath = null)
|
||||
public function checkEnvironment($baseurl, $phpath = null)
|
||||
{
|
||||
$returnVal = true;
|
||||
|
||||
|
@ -107,12 +114,12 @@ class Install
|
|||
* @param string $adminmail Mail-Adress of the administrator
|
||||
* @param string $basepath The basepath of Friendica
|
||||
*
|
||||
* @return bool|string true if the config was created, the text if something went wrong
|
||||
* @return bool true if the config was created, otherwise false
|
||||
*/
|
||||
public function createConfig($phppath, $urlpath, $dbhost, $dbuser, $dbpass, $dbdata, $timezone, $language, $adminmail, $basepath)
|
||||
{
|
||||
$tpl = get_markup_template('local.ini.tpl');
|
||||
$txt = replace_macros($tpl,[
|
||||
$txt = replace_macros($tpl, [
|
||||
'$phpath' => $phppath,
|
||||
'$dbhost' => $dbhost,
|
||||
'$dbuser' => $dbuser,
|
||||
|
@ -127,10 +134,31 @@ class Install
|
|||
$result = file_put_contents($basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.ini.php', $txt);
|
||||
|
||||
if (!$result) {
|
||||
return $txt;
|
||||
} else {
|
||||
return true;
|
||||
$this->addCheck(L10n::t('The database configuration file "config/local.ini.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.'), false, false, htmlentities($txt, ENT_COMPAT, 'UTF-8'));
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/***
|
||||
* Installs the DB-Scheme for Friendica
|
||||
*
|
||||
* @return bool true if the installation was successful, otherwise false
|
||||
*/
|
||||
public function installDatabase()
|
||||
{
|
||||
$result = DBStructure::update(false, true, true);
|
||||
|
||||
if ($result) {
|
||||
$txt = L10n::t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL;
|
||||
$txt .= L10n::t('Please see the file "INSTALL.txt".');
|
||||
|
||||
$this->addCheck($txt, false, true, htmlentities($result, ENT_COMPAT, 'UTF-8'));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -508,4 +536,34 @@ class Install
|
|||
// Imagick is not required
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checking the Database connection and if it is available for the current installation
|
||||
*
|
||||
* @param string $dbhost Hostname/IP of the Friendica Database
|
||||
* @param string $dbuser Username of the Database connection credentials
|
||||
* @param string $dbpass Password of the Database connection credentials
|
||||
* @param string $dbdata Name of the Database
|
||||
*
|
||||
* @return bool true if the check was successful, otherwise false
|
||||
*/
|
||||
public function checkDB($dbhost, $dbuser, $dbpass, $dbdata)
|
||||
{
|
||||
require_once 'include/dba.php';
|
||||
if (!DBA::connect($dbhost, $dbuser, $dbpass, $dbdata)) {
|
||||
$this->addCheck(L10n::t('Could not connect to database.'), false, true, '');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DBA::connected()) {
|
||||
if (DBA::count('user') > 0) {
|
||||
$this->addCheck(L10n::t('Database already in use.'), false, true, '');
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue