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; | ||||
| 	} | ||||
| } | ||||
|  | @ -29,16 +29,16 @@ class Install extends BaseModule | |||
| 	 */ | ||||
| 	const FINISHED = 4; | ||||
| 
 | ||||
| 	// Default values for the install page
 | ||||
| 	const DEFAULT_LANG = 'en'; | ||||
| 	const DEFAULT_TZ   = 'America/Los_Angeles'; | ||||
| 	const DEFAULT_HOST = 'localhost'; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var int The current step of the wizard | ||||
| 	 */ | ||||
| 	private static $currentWizardStep; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var Core\Installer The installer | ||||
| 	 */ | ||||
| 	private static $installer; | ||||
| 
 | ||||
| 	public static function init() | ||||
| 	{ | ||||
| 		$a = self::getApp(); | ||||
|  | @ -52,9 +52,9 @@ class Install extends BaseModule | |||
| 
 | ||||
| 		// We overwrite current theme css, because during install we may not have a working mod_rewrite
 | ||||
| 		// so we may not have a css at all. Here we set a static css file for the install procedure pages
 | ||||
| 		$a->setConfigValue('system', 'value', '../install'); | ||||
| 		$a->theme['stylesheet'] = $a->getBaseURL() . '/view/install/style.css'; | ||||
| 
 | ||||
| 		self::$installer = new Core\Installer(); | ||||
| 		self::$currentWizardStep = defaults($_POST, 'pass', self::SYSTEM_CHECK); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -66,56 +66,44 @@ class Install extends BaseModule | |||
| 			case self::SYSTEM_CHECK: | ||||
| 			case self::DATABASE_CONFIG: | ||||
| 				// Nothing to do in these steps
 | ||||
| 				return; | ||||
| 				break; | ||||
| 
 | ||||
| 			case self::SITE_SETTINGS: | ||||
| 				$dbhost  = notags(trim(defaults($_POST, 'dbhost', self::DEFAULT_HOST))); | ||||
| 				$dbhost  = notags(trim(defaults($_POST, 'dbhost', Core\Installer::DEFAULT_HOST))); | ||||
| 				$dbuser  = notags(trim(defaults($_POST, 'dbuser', ''))); | ||||
| 				$dbpass  = notags(trim(defaults($_POST, 'dbpass', ''))); | ||||
| 				$dbdata  = notags(trim(defaults($_POST, 'dbdata', ''))); | ||||
| 
 | ||||
| 				require_once 'include/dba.php'; | ||||
| 				if (!DBA::connect($dbhost, $dbuser, $dbpass, $dbdata)) { | ||||
| 					$a->data['db_conn_failed'] = true; | ||||
| 				// If we cannot connect to the database, return to the previous step
 | ||||
| 				if (!self::$installer->checkDB($dbhost, $dbuser, $dbpass, $dbdata)) { | ||||
| 					self::$currentWizardStep = self::DATABASE_CONFIG; | ||||
| 				} | ||||
| 
 | ||||
| 				return; | ||||
| 				break; | ||||
| 
 | ||||
| 			case self::FINISHED: | ||||
| 				$urlpath   = $a->getURLPath(); | ||||
| 				$dbhost    = notags(trim(defaults($_POST, 'dbhost', self::DEFAULT_HOST))); | ||||
| 				$dbhost    = notags(trim(defaults($_POST, 'dbhost', Core\Installer::DEFAULT_HOST))); | ||||
| 				$dbuser    = notags(trim(defaults($_POST, 'dbuser', ''))); | ||||
| 				$dbpass    = notags(trim(defaults($_POST, 'dbpass', ''))); | ||||
| 				$dbdata    = notags(trim(defaults($_POST, 'dbdata', ''))); | ||||
| 				$phpath    = notags(trim(defaults($_POST, 'phpath', ''))); | ||||
| 				$timezone  = notags(trim(defaults($_POST, 'timezone', self::DEFAULT_TZ))); | ||||
| 				$language  = notags(trim(defaults($_POST, 'language', self::DEFAULT_LANG))); | ||||
| 				$timezone  = notags(trim(defaults($_POST, 'timezone', Core\Installer::DEFAULT_TZ))); | ||||
| 				$language  = notags(trim(defaults($_POST, 'language', Core\Installer::DEFAULT_LANG))); | ||||
| 				$adminmail = notags(trim(defaults($_POST, 'adminmail', ''))); | ||||
| 
 | ||||
| 				// connect to db
 | ||||
| 				DBA::connect($dbhost, $dbuser, $dbpass, $dbdata); | ||||
| 				// If we cannot connect to the database, return to the Database config wizard
 | ||||
| 				if (!self::$installer->checkDB($dbhost, $dbuser, $dbpass, $dbdata)) { | ||||
| 					self::$currentWizardStep = self::DATABASE_CONFIG; | ||||
| 				} | ||||
| 
 | ||||
| 				$install = new Core\Install(); | ||||
| 
 | ||||
| 				$errors = $install->createConfig($phpath, $urlpath, $dbhost, $dbuser, $dbpass, $dbdata, $timezone, $language, $adminmail, $a->getBasePath()); | ||||
| 
 | ||||
| 				if ($errors !== true) { | ||||
| 					$a->data['txt'] = $errors; | ||||
| 				if (!self::$installer->createConfig($phpath, $urlpath, $dbhost, $dbuser, $dbpass, $dbdata, $timezone, $language, $adminmail, $a->getBasePath())) { | ||||
| 					return; | ||||
| 				} | ||||
| 
 | ||||
| 				$errors = DBStructure::update(false, true, true); | ||||
| 				self::$installer->installDatabase(); | ||||
| 
 | ||||
| 				if ($errors) { | ||||
| 					$a->data['db_failed'] = $errors; | ||||
| 				} else { | ||||
| 					$a->data['db_installed'] = true; | ||||
| 				} | ||||
| 
 | ||||
| 				return; | ||||
| 
 | ||||
| 			default: | ||||
| 				return; | ||||
| 				break; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | @ -126,20 +114,18 @@ class Install extends BaseModule | |||
| 		$output = ''; | ||||
| 
 | ||||
| 		$install_title = L10n::t('Friendica Communctions Server - Setup'); | ||||
| 		$wizard_status = self::checkWizardStatus($a); | ||||
| 
 | ||||
| 		switch (self::$currentWizardStep) { | ||||
| 			case self::SYSTEM_CHECK: | ||||
| 				$phppath = defaults($_POST, 'phpath', null); | ||||
| 
 | ||||
| 				$install = new Core\Install(); | ||||
| 				$status = $install->checkAll($a->getBaseURL(), $phppath); | ||||
| 				$status = self::$installer->checkEnvironment($a->getBaseURL(), $phppath); | ||||
| 
 | ||||
| 				$tpl = get_markup_template('install_checks.tpl'); | ||||
| 				$output .= replace_macros($tpl, [ | ||||
| 					'$title'		=> $install_title, | ||||
| 					'$pass'			=> L10n::t('System check'), | ||||
| 					'$checks'		=> $install->getChecks(), | ||||
| 					'$checks'		=> self::$installer->getChecks(), | ||||
| 					'$passed'		=> $status, | ||||
| 					'$see_install'	=> L10n::t('Please see the file "Install.txt".'), | ||||
| 					'$next' 		=> L10n::t('Next'), | ||||
|  | @ -150,12 +136,12 @@ class Install extends BaseModule | |||
| 				break; | ||||
| 
 | ||||
| 			case self::DATABASE_CONFIG: | ||||
| 				$dbhost    = notags(trim(defaults($_POST, 'dbhost'   , self::DEFAULT_HOST))); | ||||
| 				$dbuser    = notags(trim(defaults($_POST, 'dbuser'   , ''))); | ||||
| 				$dbpass    = notags(trim(defaults($_POST, 'dbpass'   , ''))); | ||||
| 				$dbdata    = notags(trim(defaults($_POST, 'dbdata'   , ''))); | ||||
| 				$phpath    = notags(trim(defaults($_POST, 'phpath'   , ''))); | ||||
| 				$adminmail = notags(trim(defaults($_POST, 'adminmail', ''))); | ||||
| 				$dbhost    = notags(trim(defaults($_POST, 'dbhost'   , Core\Installer::DEFAULT_HOST))); | ||||
| 				$dbuser    = notags(trim(defaults($_POST, 'dbuser'   , ''                          ))); | ||||
| 				$dbpass    = notags(trim(defaults($_POST, 'dbpass'   , ''                          ))); | ||||
| 				$dbdata    = notags(trim(defaults($_POST, 'dbdata'   , ''                          ))); | ||||
| 				$phpath    = notags(trim(defaults($_POST, 'phpath'   , ''                          ))); | ||||
| 				$adminmail = notags(trim(defaults($_POST, 'adminmail', ''                          ))); | ||||
| 
 | ||||
| 				$tpl = get_markup_template('install_db.tpl'); | ||||
| 				$output .= replace_macros($tpl, [ | ||||
|  | @ -164,7 +150,7 @@ class Install extends BaseModule | |||
| 					'$info_01' 	=> L10n::t('In order to install Friendica we need to know how to connect to your database.'), | ||||
| 					'$info_02' 	=> L10n::t('Please contact your hosting provider or site administrator if you have questions about these settings.'), | ||||
| 					'$info_03' 	=> L10n::t('The database you specify below should already exist. If it does not, please create it before continuing.'), | ||||
| 					'$status' 	=> $wizard_status, | ||||
| 					'checks' 	=> self::$installer->getChecks(), | ||||
| 					'$dbhost' 	=> ['dbhost', | ||||
| 									L10n::t('Database Server Name'), | ||||
| 									$dbhost, | ||||
|  | @ -199,24 +185,25 @@ class Install extends BaseModule | |||
| 					'$submit' 	=> L10n::t('Submit') | ||||
| 				]); | ||||
| 				break; | ||||
| 
 | ||||
| 			case self::SITE_SETTINGS: | ||||
| 				$dbhost = notags(trim(defaults($_POST, 'dbhost', self::DEFAULT_HOST))); | ||||
| 				$dbuser = notags(trim(defaults($_POST, 'dbuser', ''                ))); | ||||
| 				$dbpass = notags(trim(defaults($_POST, 'dbpass', ''                ))); | ||||
| 				$dbdata = notags(trim(defaults($_POST, 'dbdata', ''                ))); | ||||
| 				$phpath = notags(trim(defaults($_POST, 'phpath', ''                ))); | ||||
| 				$dbhost = notags(trim(defaults($_POST, 'dbhost', Core\Installer::DEFAULT_HOST))); | ||||
| 				$dbuser = notags(trim(defaults($_POST, 'dbuser', ''                          ))); | ||||
| 				$dbpass = notags(trim(defaults($_POST, 'dbpass', ''                          ))); | ||||
| 				$dbdata = notags(trim(defaults($_POST, 'dbdata', ''                          ))); | ||||
| 				$phpath = notags(trim(defaults($_POST, 'phpath', ''                          ))); | ||||
| 
 | ||||
| 				$adminmail = notags(trim(defaults($_POST, 'adminmail', ''))); | ||||
| 
 | ||||
| 				$timezone = defaults($_POST, 'timezone', self::DEFAULT_TZ); | ||||
| 				$timezone = defaults($_POST, 'timezone', Core\Installer::DEFAULT_TZ); | ||||
| 				/* Installed langs */ | ||||
| 				$lang_choices = L10n::getAvailableLanguages(); | ||||
| 
 | ||||
| 				$tpl = get_markup_template('install_settings.tpl'); | ||||
| 				$output .= replace_macros($tpl, [ | ||||
| 					'$title' 		=> $install_title, | ||||
| 					'$checks' 		=> self::$installer->getChecks(), | ||||
| 					'$pass' 		=> L10n::t('Site settings'), | ||||
| 					'$status' 		=> $wizard_status, | ||||
| 					'$dbhost' 		=> $dbhost, | ||||
| 					'$dbuser' 		=> $dbuser, | ||||
| 					'$dbpass' 		=> $dbpass, | ||||
|  | @ -225,8 +212,8 @@ class Install extends BaseModule | |||
| 					'$adminmail'	=> ['adminmail', L10n::t('Site administrator email address'), $adminmail, L10n::t('Your account email address must match this in order to use the web admin panel.'), 'required', 'autofocus', 'email'], | ||||
| 					'$timezone' 	=> Temporal::getTimezoneField('timezone', L10n::t('Please select a default timezone for your website'), $timezone, ''), | ||||
| 					'$language' 	=> ['language', | ||||
| 										L10n::t('System Language:'), #
 | ||||
| 										self::DEFAULT_LANG, | ||||
| 										L10n::t('System Language:'), | ||||
| 										Core\Installer::DEFAULT_LANG, | ||||
| 										L10n::t('Set the default language for your Friendica installation interface and to send emails.'), | ||||
| 										$lang_choices], | ||||
| 					'$baseurl' 		=> $a->getBaseURL(), | ||||
|  | @ -237,28 +224,18 @@ class Install extends BaseModule | |||
| 			case self::FINISHED: | ||||
| 				$db_return_text = ""; | ||||
| 
 | ||||
| 				if (defaults($a->data, 'db_installed', false)) { | ||||
| 				if (count(self::$installer->getChecks()) == 0) { | ||||
| 					$txt = '<p style="font-size: 130%;">'; | ||||
| 					$txt .= L10n::t('Your Friendica site database has been installed.') . EOL; | ||||
| 					$db_return_text .= $txt; | ||||
| 				} | ||||
| 
 | ||||
| 				if (defaults($a->data, 'db_failed', false)) { | ||||
| 					$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".') . EOL ."<hr>"; | ||||
| 					$txt .= "<pre>".$a->data['db_failed'] . "</pre>". EOL; | ||||
| 					$db_return_text .= $txt; | ||||
| 				} | ||||
| 
 | ||||
| 				if (isset($a->data['txt']) && strlen($a->data['txt'])) { | ||||
| 					$db_return_text .= self::manualConfig($a); | ||||
| 				} | ||||
| 
 | ||||
| 				$tpl = get_markup_template('install.tpl'); | ||||
| 				$tpl = get_markup_template('install_finished.tpl'); | ||||
| 				$output .= replace_macros($tpl, [ | ||||
| 					'$title' => $install_title, | ||||
| 					'$pass' => "", | ||||
| 					'$text' => $db_return_text . self::whatNext($a), | ||||
| 					'$title'  => $install_title, | ||||
| 					'$checks' => self::$installer->getChecks(), | ||||
| 					'$pass'   => L10n::t('Installation finished'), | ||||
| 					'$text'   => $db_return_text . self::whatNext($a), | ||||
| 				]); | ||||
| 
 | ||||
| 				break; | ||||
|  | @ -267,50 +244,6 @@ class Install extends BaseModule | |||
| 		return $output; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @param App $a The global Friendica App | ||||
| 	 * | ||||
| 	 * @return string The status of Wizard steps | ||||
| 	 */ | ||||
| 	private static function checkWizardStatus($a) | ||||
| 	{ | ||||
| 		$wizardStatus = ""; | ||||
| 
 | ||||
| 		if (defaults($a->data, 'db_conn_failed', false)) { | ||||
| 			self::$currentWizardStep = 2; | ||||
| 			$wizardStatus = L10n::t('Could not connect to database.'); | ||||
| 		} | ||||
| 
 | ||||
| 		if (defaults($a->data, 'db_create_failed', false)) { | ||||
| 			self::$currentWizardStep = 2; | ||||
| 			$wizardStatus = L10n::t('Could not create table.'); | ||||
| 		} | ||||
| 
 | ||||
| 		if (DBA::connected()) { | ||||
| 			if (DBA::count('user')) { | ||||
| 				self::$currentWizardStep = 2; | ||||
| 				$wizardStatus = L10n::t('Database already in use.'); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return $wizardStatus; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Creates the text for manual config | ||||
| 	 * | ||||
| 	 * @param App $a The global App | ||||
| 	 * | ||||
| 	 * @return string The manual config text | ||||
| 	 */ | ||||
| 	private static function manualConfig($a) | ||||
| 	{ | ||||
| 		$data = htmlentities($a->data['txt'], ENT_COMPAT,  'UTF-8'); | ||||
| 		$output = 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.'); | ||||
| 		$output .= "<textarea rows=\"24\" cols=\"80\" >$data</textarea>"; | ||||
| 		return $output; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Creates the text for the next steps | ||||
| 	 * | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ use PHPUnit\Framework\TestCase; | |||
|  * @runTestsInSeparateProcesses | ||||
|  * @preserveGlobalState disabled | ||||
|  */ | ||||
| class InstallTest extends TestCase | ||||
| class InstallerTest extends TestCase | ||||
| { | ||||
| 	use VFSTrait; | ||||
| 
 | ||||
|  | @ -74,11 +74,11 @@ class InstallTest extends TestCase | |||
| 	public function testCheckKeys() | ||||
| 	{ | ||||
| 		$this->setFunctions(['openssl_pkey_new' => false]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertFalse($install->checkKeys()); | ||||
| 
 | ||||
| 		$this->setFunctions(['openssl_pkey_new' => true]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertTrue($install->checkKeys()); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -88,7 +88,7 @@ class InstallTest extends TestCase | |||
| 	public function testCheckFunctions() | ||||
| 	{ | ||||
| 		$this->setFunctions(['curl_init' => false]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertFalse($install->checkFunctions()); | ||||
| 		$this->assertCheckExist(3, | ||||
| 			L10n::t('libCurl PHP module'), | ||||
|  | @ -98,7 +98,7 @@ class InstallTest extends TestCase | |||
| 			$install->getChecks()); | ||||
| 
 | ||||
| 		$this->setFunctions(['imagecreatefromjpeg' => false]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertFalse($install->checkFunctions()); | ||||
| 		$this->assertCheckExist(4, | ||||
| 			L10n::t('GD graphics PHP module'), | ||||
|  | @ -108,7 +108,7 @@ class InstallTest extends TestCase | |||
| 			$install->getChecks()); | ||||
| 
 | ||||
| 		$this->setFunctions(['openssl_public_encrypt' => false]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertFalse($install->checkFunctions()); | ||||
| 		$this->assertCheckExist(5, | ||||
| 			L10n::t('OpenSSL PHP module'), | ||||
|  | @ -118,7 +118,7 @@ class InstallTest extends TestCase | |||
| 			$install->getChecks()); | ||||
| 
 | ||||
| 		$this->setFunctions(['mb_strlen' => false]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertFalse($install->checkFunctions()); | ||||
| 		$this->assertCheckExist(6, | ||||
| 			L10n::t('mb_string PHP module'), | ||||
|  | @ -128,7 +128,7 @@ class InstallTest extends TestCase | |||
| 			$install->getChecks()); | ||||
| 
 | ||||
| 		$this->setFunctions(['iconv_strlen' => false]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertFalse($install->checkFunctions()); | ||||
| 		$this->assertCheckExist(7, | ||||
| 			L10n::t('iconv PHP module'), | ||||
|  | @ -138,7 +138,7 @@ class InstallTest extends TestCase | |||
| 			$install->getChecks()); | ||||
| 
 | ||||
| 		$this->setFunctions(['posix_kill' => false]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertFalse($install->checkFunctions()); | ||||
| 		$this->assertCheckExist(8, | ||||
| 			L10n::t('POSIX PHP module'), | ||||
|  | @ -155,7 +155,7 @@ class InstallTest extends TestCase | |||
| 			'iconv_strlen' => true, | ||||
| 			'posix_kill' => true | ||||
| 		]); | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertTrue($install->checkFunctions()); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -166,14 +166,14 @@ class InstallTest extends TestCase | |||
| 	{ | ||||
| 		$this->assertTrue($this->root->hasChild('config/local.ini.php')); | ||||
| 
 | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertTrue($install->checkLocalIni()); | ||||
| 
 | ||||
| 		$this->delConfigFile('local.ini.php'); | ||||
| 
 | ||||
| 		$this->assertFalse($this->root->hasChild('config/local.ini.php')); | ||||
| 
 | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 		$this->assertTrue($install->checkLocalIni()); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -211,7 +211,7 @@ class InstallTest extends TestCase | |||
| 		// needed because of "normalise_link"
 | ||||
| 		require_once __DIR__ . '/../../../include/text.php'; | ||||
| 
 | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 
 | ||||
| 		$this->assertFalse($install->checkHtAccess('https://test')); | ||||
| 		$this->assertSame('test Error', $install->getChecks()[0]['error_msg']['msg']); | ||||
|  | @ -251,7 +251,7 @@ class InstallTest extends TestCase | |||
| 		// needed because of "normalise_link"
 | ||||
| 		require_once __DIR__ . '/../../../include/text.php'; | ||||
| 
 | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 
 | ||||
| 		$this->assertTrue($install->checkHtAccess('https://test')); | ||||
| 	} | ||||
|  | @ -268,7 +268,7 @@ class InstallTest extends TestCase | |||
| 
 | ||||
| 		$this->setClasses(['Imagick' => true]); | ||||
| 
 | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 
 | ||||
| 		// even there is no supported type, Imagick should return true (because it is not required)
 | ||||
| 		$this->assertTrue($install->checkImagick()); | ||||
|  | @ -293,7 +293,7 @@ class InstallTest extends TestCase | |||
| 
 | ||||
| 		$this->setClasses(['Imagick' => true]); | ||||
| 
 | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 
 | ||||
| 		// even there is no supported type, Imagick should return true (because it is not required)
 | ||||
| 		$this->assertTrue($install->checkImagick()); | ||||
|  | @ -309,7 +309,7 @@ class InstallTest extends TestCase | |||
| 	{ | ||||
| 		$this->setClasses(['Imagick' => false]); | ||||
| 
 | ||||
| 		$install = new Install(); | ||||
| 		$install = new Installer(); | ||||
| 
 | ||||
| 		// even there is no supported type, Imagick should return true (because it is not required)
 | ||||
| 		$this->assertTrue($install->checkImagick()); | ||||
|  | @ -1,11 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| <h1><img src="{{$baseurl}}/images/friendica-32.png"> {{$title}}</h1> | ||||
| <h2>{{$pass}}</h2> | ||||
| 
 | ||||
| 
 | ||||
| {{if $status}} | ||||
| <h3 class="error-message">{{$status}}</h3> | ||||
| {{/if}} | ||||
| 
 | ||||
| {{$text}} | ||||
|  | @ -10,9 +10,14 @@ | |||
| {{$info_03}} | ||||
| </p> | ||||
| 
 | ||||
| {{if $status}} | ||||
| <h3 class="error-message">{{$status}}</h3> | ||||
| {{/if}} | ||||
| <table> | ||||
| 	{{foreach $checks as $check}} | ||||
| 	<tr><td>{{$check.title}} </td><td> | ||||
| 			{{if ! $check.status}} | ||||
| 			<img src="{{$baseurl}}/view/install/red.png" alt="Requirement not satisfied"> | ||||
| 			{{/if}} | ||||
| 	{{/foreach}} | ||||
| </table> | ||||
| 
 | ||||
| <form id="install-form" action="{{$baseurl}}/install" method="post"> | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										13
									
								
								view/templates/install_finished.tpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								view/templates/install_finished.tpl
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| 
 | ||||
| 
 | ||||
| <h1><img src="{{$baseurl}}/images/friendica-32.png"> {{$title}}</h1> | ||||
| <h2>{{$pass}}</h2> | ||||
| 
 | ||||
| 
 | ||||
| {{foreach $checks as $check}} | ||||
| <img src="{{$baseurl}}/view/install/red.png" alt="Requirement not satisfied"> | ||||
| {{$check.title}} | ||||
| <textarea rows="24" cols="80">{{$check.help}}</textarea> | ||||
| {{/foreach}} | ||||
| 
 | ||||
| {{$text}} | ||||
|  | @ -4,10 +4,6 @@ | |||
| <h2>{{$pass}}</h2> | ||||
| 
 | ||||
| 
 | ||||
| {{if $status}} | ||||
| <h3 class="error-message">{{$status}}</h3> | ||||
| {{/if}} | ||||
| 
 | ||||
| <form id="install-form" action="{{$baseurl}}/install" method="post"> | ||||
| 
 | ||||
| <input type="hidden" name="phpath" value="{{$phpath|escape:'html'}}" /> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue