summaryrefslogtreecommitdiff
path: root/app/Http/Controllers/SetupController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Http/Controllers/SetupController.php')
-rw-r--r--app/Http/Controllers/SetupController.php798
1 files changed, 412 insertions, 386 deletions
diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php
index 25efcceb97..00304dc5be 100644
--- a/app/Http/Controllers/SetupController.php
+++ b/app/Http/Controllers/SetupController.php
@@ -33,441 +33,467 @@ use Symfony\Component\HttpFoundation\Response;
/**
* Controller for the installation wizard
*/
-class SetupController extends AbstractBaseController {
- const WT_CONFIG_FILE = 'config.ini.php';
+class SetupController extends AbstractBaseController
+{
+ const WT_CONFIG_FILE = 'config.ini.php';
- /**
- * Installation wizard - check user input and proceed to the next step.
- *
- * @param Request $request
- *
- * @return Response
- */
- public function setup(Request $request): Response {
- // Config file exists? Our work is done.
- if (file_exists(WT_DATA_DIR . self::WT_CONFIG_FILE)) {
- return new RedirectResponse(Html::url('index.php', []));
- }
+ /**
+ * Installation wizard - check user input and proceed to the next step.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function setup(Request $request): Response
+ {
+ // Config file exists? Our work is done.
+ if (file_exists(WT_DATA_DIR . self::WT_CONFIG_FILE)) {
+ return new RedirectResponse(Html::url('index.php', []));
+ }
- $step = (int) $request->get('step', '1');
- $errors = $this->serverErrors();
- $warnings = $this->serverWarnings();
- $data = $this->extractParameters($request);
+ $step = (int)$request->get('step', '1');
+ $errors = $this->serverErrors();
+ $warnings = $this->serverWarnings();
+ $data = $this->extractParameters($request);
- if ($data['lang'] === '') {
- $data['lang'] = Locale::httpAcceptLanguage($_SERVER, I18N::installedLocales(), new LocaleEnUs)->languageTag();
- }
+ if ($data['lang'] === '') {
+ $data['lang'] = Locale::httpAcceptLanguage($_SERVER, I18N::installedLocales(), new LocaleEnUs)->languageTag();
+ }
- if ($data['dbuser'] !== '') {
- $db_conn_error = $this->checkDatabaseConnection($data['dbhost'], $data['dbport'], $data['dbuser'], $data['dbpass']);
- } else {
- $db_conn_error = '';
- }
+ if ($data['dbuser'] !== '') {
+ $db_conn_error = $this->checkDatabaseConnection($data['dbhost'], $data['dbport'], $data['dbuser'], $data['dbpass']);
+ } else {
+ $db_conn_error = '';
+ }
- if ($data['dbname'] !== '') {
- $db_name_error = $this->checkDatabaseName($data['dbhost'], $data['dbport'], $data['dbuser'], $data['dbpass'], $data['dbname'], $data['tblpfx']);
- } else {
- $db_name_error = '';
- }
+ if ($data['dbname'] !== '') {
+ $db_name_error = $this->checkDatabaseName($data['dbhost'], $data['dbport'], $data['dbuser'], $data['dbpass'], $data['dbname'], $data['tblpfx']);
+ } else {
+ $db_name_error = '';
+ }
- if ($data['wtname'] !== '') {
- $wt_user_error = $this->checkAdminUser($data['wtname'], $data['wtuser'], $data['wtpass'], $data['wtemail']);
- } else {
- $wt_user_error = '';
- }
+ if ($data['wtname'] !== '') {
+ $wt_user_error = $this->checkAdminUser($data['wtname'], $data['wtuser'], $data['wtpass'], $data['wtemail']);
+ } else {
+ $wt_user_error = '';
+ }
- $data['cpu_limit'] = $this->maxExecutionTime();
- $data['db_conn_error'] = $db_conn_error;
- $data['db_name_error'] = $db_name_error;
- $data['errors'] = $errors;
- $data['locales'] = I18N::installedLocales();
- $data['memory_limit'] = $this->memoryLimit();
- $data['warnings'] = $warnings;
- $data['wt_user_error'] = $wt_user_error;
+ $data['cpu_limit'] = $this->maxExecutionTime();
+ $data['db_conn_error'] = $db_conn_error;
+ $data['db_name_error'] = $db_name_error;
+ $data['errors'] = $errors;
+ $data['locales'] = I18N::installedLocales();
+ $data['memory_limit'] = $this->memoryLimit();
+ $data['warnings'] = $warnings;
+ $data['wt_user_error'] = $wt_user_error;
- if ($wt_user_error && $step > 5) {
- $step = 5;
- }
- if ($db_name_error && $step > 4) {
- $step = 4;
- }
- if ($db_conn_error && $step > 3) {
- $step = 3;
- }
- if (!empty($errors) && $step > 2) {
- $step = 2;
- }
- if ($this->checkLanguage($request) === false && $step > 1) {
- $step = 1;
- }
+ if ($wt_user_error && $step > 5) {
+ $step = 5;
+ }
+ if ($db_name_error && $step > 4) {
+ $step = 4;
+ }
+ if ($db_conn_error && $step > 3) {
+ $step = 3;
+ }
+ if (!empty($errors) && $step > 2) {
+ $step = 2;
+ }
+ if ($this->checkLanguage($request) === false && $step > 1) {
+ $step = 1;
+ }
- switch ($step) {
- default:
- case 1:
- return $this->viewResponse('setup/step-1-language', $data);
- case 2:
- return $this->viewResponse('setup/step-2-server-checks', $data);
- case 3:
- return $this->viewResponse('setup/step-3-database-connection', $data);
- case 4:
- return $this->viewResponse('setup/step-4-database-name', $data);
- case 5:
- return $this->viewResponse('setup/step-5-administrator', $data);
- case 6:
- $error = $this->createConfigFile($data['dbhost'], $data['dbport'], $data['dbuser'], $data['dbpass'], $data['dbname'], $data['tblpfx'], $data['wtname'], $data['wtuser'], $data['wtpass'], $data['wtemail']);
+ switch ($step) {
+ default:
+ case 1:
+ return $this->viewResponse('setup/step-1-language', $data);
+ case 2:
+ return $this->viewResponse('setup/step-2-server-checks', $data);
+ case 3:
+ return $this->viewResponse('setup/step-3-database-connection', $data);
+ case 4:
+ return $this->viewResponse('setup/step-4-database-name', $data);
+ case 5:
+ return $this->viewResponse('setup/step-5-administrator', $data);
+ case 6:
+ $error = $this->createConfigFile($data['dbhost'], $data['dbport'], $data['dbuser'], $data['dbpass'], $data['dbname'], $data['tblpfx'], $data['wtname'], $data['wtuser'], $data['wtpass'], $data['wtemail']);
- if ($error === '') {
- return new RedirectResponse(Html::url('index.php', []));
- } else {
- return $this->viewResponse('setup/step-6-failed', ['error' => $error]);
- }
- }
- }
+ if ($error === '') {
+ return new RedirectResponse(Html::url('index.php', []));
+ } else {
+ return $this->viewResponse('setup/step-6-failed', ['error' => $error]);
+ }
+ }
+ }
- /**
- * @param string $wtname
- * @param string $wtuser
- * @param string $wtpass
- * @param string $wtemail
- *
- * @return string
- */
- private function checkAdminUser($wtname, $wtuser, $wtpass, $wtemail): string {
- if ($wtname === '' || $wtuser === '' || $wtpass === '' || $wtemail === '') {
- return I18N::translate('You must enter all the administrator account fields.');
- }
+ /**
+ * @param string $wtname
+ * @param string $wtuser
+ * @param string $wtpass
+ * @param string $wtemail
+ *
+ * @return string
+ */
+ private function checkAdminUser($wtname, $wtuser, $wtpass, $wtemail): string
+ {
+ if ($wtname === '' || $wtuser === '' || $wtpass === '' || $wtemail === '') {
+ return I18N::translate('You must enter all the administrator account fields.');
+ }
- if (mb_strlen($wtpass) < 6) {
- return I18N::translate('The password needs to be at least six characters long.');
- }
+ if (mb_strlen($wtpass) < 6) {
+ return I18N::translate('The password needs to be at least six characters long.');
+ }
- return '';
- }
+ return '';
+ }
- /**
- * Check we can write to the data folder.
- *
- * @param string $dbhost
- * @param string $dbport
- * @param string $buser
- * @param string $dbpass
- *
- * @return string
- *
- */
- private function checkDatabaseConnection($dbhost, $dbport, $buser, $dbpass): string {
- try {
- Database::createInstance([
- 'dbhost' => $dbhost,
- 'dbport' => $dbport,
- 'dbname' => '',
- 'dbuser' => $buser,
- 'dbpass' => $dbpass,
- 'tblpfx' => '',
- ]);
- Database::disconnect();
- } catch (PDOException $ex) {
- DebugBar::addThrowable($ex);
+ /**
+ * Check we can write to the data folder.
+ *
+ * @param string $dbhost
+ * @param string $dbport
+ * @param string $buser
+ * @param string $dbpass
+ *
+ * @return string
+ *
+ */
+ private function checkDatabaseConnection($dbhost, $dbport, $buser, $dbpass): string
+ {
+ try {
+ Database::createInstance([
+ 'dbhost' => $dbhost,
+ 'dbport' => $dbport,
+ 'dbname' => '',
+ 'dbuser' => $buser,
+ 'dbpass' => $dbpass,
+ 'tblpfx' => '',
+ ]);
+ Database::disconnect();
+ } catch (PDOException $ex) {
+ DebugBar::addThrowable($ex);
- return I18N::translate('Unable to connect using this username and password. Your server gave the following error.') . '<br><br>' . e($ex->getMessage()) . '<br><br>' . I18N::translate('Check the settings and try again.');
- }
+ return I18N::translate('Unable to connect using this username and password. Your server gave the following error.') . '<br><br>' . e($ex->getMessage()) . '<br><br>' . I18N::translate('Check the settings and try again.');
+ }
- return '';
- }
+ return '';
+ }
- /**
- * Check we can write to the data folder.
- *
- * @param string $dbhost
- * @param string $dbport
- * @param string $dbuser
- * @param string $dbpass
- * @param string $dbname
- * @param string $tblpfx
- *
- * @return string
- *
- */
- private function checkDatabaseName($dbhost, $dbport, $dbuser, $dbpass, $dbname, $tblpfx): string {
- // The character ` is not valid in database or table names (even if escaped).
- // The form should prevent the user from entering them.
- if ($dbname === '' || strpos($dbname, '`') !== false) {
- return 'Invalid database name';
- }
+ /**
+ * Check we can write to the data folder.
+ *
+ * @param string $dbhost
+ * @param string $dbport
+ * @param string $dbuser
+ * @param string $dbpass
+ * @param string $dbname
+ * @param string $tblpfx
+ *
+ * @return string
+ *
+ */
+ private function checkDatabaseName($dbhost, $dbport, $dbuser, $dbpass, $dbname, $tblpfx): string
+ {
+ // The character ` is not valid in database or table names (even if escaped).
+ // The form should prevent the user from entering them.
+ if ($dbname === '' || strpos($dbname, '`') !== false) {
+ return 'Invalid database name';
+ }
- if (strpos($tblpfx, '`') !== false) {
- return 'Invalid table prefix';
- }
+ if (strpos($tblpfx, '`') !== false) {
+ return 'Invalid table prefix';
+ }
- try {
- define('WT_TBLPREFIX', $tblpfx);
- Database::createInstance([
- 'dbhost' => $dbhost,
- 'dbport' => $dbport,
- 'dbname' => '',
- 'dbuser' => $dbuser,
- 'dbpass' => $dbpass,
- 'tblpfx' => '',
- ]);
- Database::exec("CREATE DATABASE IF NOT EXISTS `{$dbname}` COLLATE utf8_unicode_ci");
- Database::exec("USE `{$dbname}`");
- Database::disconnect();
- } catch (PDOException $ex) {
- DebugBar::addThrowable($ex);
+ try {
+ define('WT_TBLPREFIX', $tblpfx);
+ Database::createInstance([
+ 'dbhost' => $dbhost,
+ 'dbport' => $dbport,
+ 'dbname' => '',
+ 'dbuser' => $dbuser,
+ 'dbpass' => $dbpass,
+ 'tblpfx' => '',
+ ]);
+ Database::exec("CREATE DATABASE IF NOT EXISTS `{$dbname}` COLLATE utf8_unicode_ci");
+ Database::exec("USE `{$dbname}`");
+ Database::disconnect();
+ } catch (PDOException $ex) {
+ DebugBar::addThrowable($ex);
- return I18N::translate('Unable to connect using this username and password. Your server gave the following error.') . '<br><br>' . e($ex->getMessage()) . '<br><br>' . I18N::translate('Check the settings and try again.');
- }
+ return I18N::translate('Unable to connect using this username and password. Your server gave the following error.') . '<br><br>' . e($ex->getMessage()) . '<br><br>' . I18N::translate('Check the settings and try again.');
+ }
- return '';
- }
+ return '';
+ }
- /**
- * Check we can write to the data folder.
- *
- * @param string $data_dir
- *
- * @return bool
- */
- private function checkFolderIsWritable(string $data_dir): bool {
- $text1 = uniqid();
- try {
- file_put_contents($data_dir . 'test.txt', $text1);
- $text2 = file_get_contents(WT_DATA_DIR . 'test.txt');
- unlink(WT_DATA_DIR . 'test.txt');
- } catch (Exception $ex) {
- DebugBar::addThrowable($ex);
+ /**
+ * Check we can write to the data folder.
+ *
+ * @param string $data_dir
+ *
+ * @return bool
+ */
+ private function checkFolderIsWritable(string $data_dir): bool
+ {
+ $text1 = uniqid();
+ try {
+ file_put_contents($data_dir . 'test.txt', $text1);
+ $text2 = file_get_contents(WT_DATA_DIR . 'test.txt');
+ unlink(WT_DATA_DIR . 'test.txt');
+ } catch (Exception $ex) {
+ DebugBar::addThrowable($ex);
- return false;
- }
+ return false;
+ }
- return $text1 === $text2;
- }
+ return $text1 === $text2;
+ }
- /**
- * Check the language parameters are OK.
- *
- * @param Request $request
- *
- * @return bool
- */
- private function checkLanguage(Request $request): bool {
- try {
- I18N::init($request->get('lang'));
- } catch (Exception $ex) {
- DebugBar::addThrowable($ex);
+ /**
+ * Check the language parameters are OK.
+ *
+ * @param Request $request
+ *
+ * @return bool
+ */
+ private function checkLanguage(Request $request): bool
+ {
+ try {
+ I18N::init($request->get('lang'));
+ } catch (Exception $ex) {
+ DebugBar::addThrowable($ex);
- return false;
- }
+ return false;
+ }
- return true;
- }
+ return true;
+ }
- /**
- * @param string $dbhost
- * @param string $dbport
- * @param string $dbuser
- * @param string $dbpass
- * @param string $dbname
- * @param string $tblpfx
- * @param string $wtname
- * @param string $wtuser
- * @param string $wtpass
- * @param string $wtemail
- *
- * @return string
- */
- private function createConfigFile($dbhost, $dbport, $dbuser, $dbpass, $dbname, $tblpfx, $wtname, $wtuser, $wtpass, $wtemail): string {
+ /**
+ * @param string $dbhost
+ * @param string $dbport
+ * @param string $dbuser
+ * @param string $dbpass
+ * @param string $dbname
+ * @param string $tblpfx
+ * @param string $wtname
+ * @param string $wtuser
+ * @param string $wtpass
+ * @param string $wtemail
+ *
+ * @return string
+ */
+ private function createConfigFile($dbhost, $dbport, $dbuser, $dbpass, $dbname, $tblpfx, $wtname, $wtuser, $wtpass, $wtemail): string
+ {
- try {
- // Create/update the database tables.
- Database::createInstance([
- 'dbhost' => $dbhost,
- 'dbport' => $dbport,
- 'dbname' => $dbname,
- 'dbuser' => $dbuser,
- 'dbpass' => $dbpass,
- 'tblpfx' => $tblpfx,
- ]);
- Database::updateSchema('\Fisharebest\Webtrees\Schema', 'WT_SCHEMA_VERSION', 30);
+ try {
+ // Create/update the database tables.
+ Database::createInstance([
+ 'dbhost' => $dbhost,
+ 'dbport' => $dbport,
+ 'dbname' => $dbname,
+ 'dbuser' => $dbuser,
+ 'dbpass' => $dbpass,
+ 'tblpfx' => $tblpfx,
+ ]);
+ Database::updateSchema('\Fisharebest\Webtrees\Schema', 'WT_SCHEMA_VERSION', 30);
- // If we are re-installing, then this user may already exist.
- $admin = User::findByIdentifier($wtemail);
- if ($admin === null) {
- $admin = User::findByIdentifier($wtuser);
- }
- // Create the user
- if ($admin === null) {
- $admin = User::create($wtuser, $wtname, $wtemail, $wtpass)
- ->setPreference('language', WT_LOCALE)
- ->setPreference('visibleonline', '1');
- } else {
- $admin->setPassword($_POST['wtpass']);
- }
- // Make the user an administrator
- $admin
- ->setPreference('canadmin', '1')
- ->setPreference('verified', '1')
- ->setPreference('verified_by_admin', '1');
+ // If we are re-installing, then this user may already exist.
+ $admin = User::findByIdentifier($wtemail);
+ if ($admin === null) {
+ $admin = User::findByIdentifier($wtuser);
+ }
+ // Create the user
+ if ($admin === null) {
+ $admin = User::create($wtuser, $wtname, $wtemail, $wtpass)
+ ->setPreference('language', WT_LOCALE)
+ ->setPreference('visibleonline', '1');
+ } else {
+ $admin->setPassword($_POST['wtpass']);
+ }
+ // Make the user an administrator
+ $admin
+ ->setPreference('canadmin', '1')
+ ->setPreference('verified', '1')
+ ->setPreference('verified_by_admin', '1');
- // Write the config file. We already checked that this would work.
- $config_ini_php =
- '; <' . '?php exit; ?' . '> DO NOT DELETE THIS LINE' . PHP_EOL .
- 'dbhost="' . addcslashes($dbhost, '"') . '"' . PHP_EOL .
- 'dbport="' . addcslashes($dbport, '"') . '"' . PHP_EOL .
- 'dbuser="' . addcslashes($dbuser, '"') . '"' . PHP_EOL .
- 'dbpass="' . addcslashes($dbpass, '"') . '"' . PHP_EOL .
- 'dbname="' . addcslashes($dbname, '"') . '"' . PHP_EOL .
- 'tblpfx="' . addcslashes($tblpfx, '"') . '"' . PHP_EOL;
+ // Write the config file. We already checked that this would work.
+ $config_ini_php =
+ '; <' . '?php exit; ?' . '> DO NOT DELETE THIS LINE' . PHP_EOL .
+ 'dbhost="' . addcslashes($dbhost, '"') . '"' . PHP_EOL .
+ 'dbport="' . addcslashes($dbport, '"') . '"' . PHP_EOL .
+ 'dbuser="' . addcslashes($dbuser, '"') . '"' . PHP_EOL .
+ 'dbpass="' . addcslashes($dbpass, '"') . '"' . PHP_EOL .
+ 'dbname="' . addcslashes($dbname, '"') . '"' . PHP_EOL .
+ 'tblpfx="' . addcslashes($tblpfx, '"') . '"' . PHP_EOL;
- file_put_contents(WT_DATA_DIR . 'config.ini.php', $config_ini_php);
+ file_put_contents(WT_DATA_DIR . 'config.ini.php', $config_ini_php);
- // Done - start using webtrees!
- return '';
- } catch (PDOException $ex) {
- DebugBar::addThrowable($ex);
+ // Done - start using webtrees!
+ return '';
+ } catch (PDOException $ex) {
+ DebugBar::addThrowable($ex);
- return $ex->getMessage();
- }
- }
+ return $ex->getMessage();
+ }
+ }
- /**
- * @param Request $request
- *
- * @return string[]
- */
- private function extractParameters(Request $request): array {
- return [
- 'lang' => $request->get('lang', ''),
- 'dbhost' => $request->get('dbhost', 'localhost'),
- 'dbport' => $request->get('dbport', '3306'),
- 'dbuser' => $request->get('dbuser', ''),
- 'dbpass' => $request->get('dbpass', ''),
- 'dbname' => $request->get('dbname', ''),
- 'tblpfx' => $request->get('tblpfx', 'wt_'),
- 'wtname' => $request->get('wtname', ''),
- 'wtuser' => $request->get('wtuser', ''),
- 'wtpass' => $request->get('wtpass', ''),
- 'wtemail' => $request->get('wtemail', ''),
- ];
- }
+ /**
+ * @param Request $request
+ *
+ * @return string[]
+ */
+ private function extractParameters(Request $request): array
+ {
+ return [
+ 'lang' => $request->get('lang', ''),
+ 'dbhost' => $request->get('dbhost', 'localhost'),
+ 'dbport' => $request->get('dbport', '3306'),
+ 'dbuser' => $request->get('dbuser', ''),
+ 'dbpass' => $request->get('dbpass', ''),
+ 'dbname' => $request->get('dbname', ''),
+ 'tblpfx' => $request->get('tblpfx', 'wt_'),
+ 'wtname' => $request->get('wtname', ''),
+ 'wtuser' => $request->get('wtuser', ''),
+ 'wtpass' => $request->get('wtpass', ''),
+ 'wtemail' => $request->get('wtemail', ''),
+ ];
+ }
- /**
- * The server's memory limit
- *
- * @return int
- */
- private function maxExecutionTime(): int {
- return (int) ini_get('max_execution_time');
- }
+ /**
+ * The server's memory limit
+ *
+ * @return int
+ */
+ private function maxExecutionTime(): int
+ {
+ return (int)ini_get('max_execution_time');
+ }
- /**
- * The server's memory limit (in MB).
- *
- * @return int
- */
- private function memoryLimit(): int {
- $memory_limit = ini_get('memory_limit');
+ /**
+ * The server's memory limit (in MB).
+ *
+ * @return int
+ */
+ private function memoryLimit(): int
+ {
+ $memory_limit = ini_get('memory_limit');
- switch (substr($memory_limit, -1)) {
- case 'k':
- case 'K':
- $memory_limit = substr($memory_limit, 0, -1) / 1024;
- break;
- case 'm':
- case 'M':
- $memory_limit = substr($memory_limit, 0, -1);
- break;
- case 'g':
- case 'G':
- $memory_limit = substr($memory_limit, 0, -1) * 1024;
- break;
- case 't':
- case 'T':
- $memory_limit = substr($memory_limit, 0, -1) * 1024 * 1024;
- break;
- default:
- $memory_limit = $memory_limit / 1024 / 1024;
- }
+ switch (substr($memory_limit, -1)) {
+ case 'k':
+ case 'K':
+ $memory_limit = substr($memory_limit, 0, -1) / 1024;
+ break;
+ case 'm':
+ case 'M':
+ $memory_limit = substr($memory_limit, 0, -1);
+ break;
+ case 'g':
+ case 'G':
+ $memory_limit = substr($memory_limit, 0, -1) * 1024;
+ break;
+ case 't':
+ case 'T':
+ $memory_limit = substr($memory_limit, 0, -1) * 1024 * 1024;
+ break;
+ default:
+ $memory_limit = $memory_limit / 1024 / 1024;
+ }
- return (int) $memory_limit;
- }
+ return (int)$memory_limit;
+ }
- /**
- * A list of major server issues.
- *
- * @return array
- */
- private function serverErrors(): array {
- $extensions = ['mbstring', 'iconv', 'pcre', 'pdo', 'pdo_mysql', 'session'];
- $functions = ['parse_ini_file'];
- $errors = [];
+ /**
+ * A list of major server issues.
+ *
+ * @return array
+ */
+ private function serverErrors(): array
+ {
+ $extensions = [
+ 'mbstring',
+ 'iconv',
+ 'pcre',
+ 'pdo',
+ 'pdo_mysql',
+ 'session',
+ ];
+ $functions = ['parse_ini_file'];
+ $errors = [];
- if (!$this->checkFolderIsWritable(WT_DATA_DIR)) {
- $errors[] = '<code>' . e(realpath(WT_DATA_DIR)) . '</code><br>' . I18N::translate('Oops! webtrees was unable to create files in this folder.') . '<br>' . I18N::translate('This usually means that you need to change the folder permissions to 777.') . '<br>' . I18N::translate('You must change this before you can continue.');
- }
+ if (!$this->checkFolderIsWritable(WT_DATA_DIR)) {
+ $errors[] = '<code>' . e(realpath(WT_DATA_DIR)) . '</code><br>' . I18N::translate('Oops! webtrees was unable to create files in this folder.') . '<br>' . I18N::translate('This usually means that you need to change the folder permissions to 777.') . '<br>' . I18N::translate('You must change this before you can continue.');
+ }
- foreach ($extensions as $extension) {
- if (!extension_loaded($extension)) {
- $errors[] = I18N::translate('PHP extension “%s” is disabled. You cannot install webtrees until this is enabled. Please ask your server’s administrator to enable it.', $extension);
- }
- }
+ foreach ($extensions as $extension) {
+ if (!extension_loaded($extension)) {
+ $errors[] = I18N::translate('PHP extension “%s” is disabled. You cannot install webtrees until this is enabled. Please ask your server’s administrator to enable it.', $extension);
+ }
+ }
- $disable_functions = preg_split('/ *, */', ini_get('disable_functions'));
- foreach ($functions as $function) {
- if (in_array($function, $disable_functions)) {
- $errors[] = /* I18N: %s is a PHP function/module/setting */ I18N::translate('%s is disabled on this server. You cannot install webtrees until it is enabled. Please ask your server’s administrator to enable it.', $function . '()');
- }
- }
+ $disable_functions = preg_split('/ *, */', ini_get('disable_functions'));
+ foreach ($functions as $function) {
+ if (in_array($function, $disable_functions)) {
+ $errors[] = /* I18N: %s is a PHP function/module/setting */
+ I18N::translate('%s is disabled on this server. You cannot install webtrees until it is enabled. Please ask your server’s administrator to enable it.', $function . '()');
+ }
+ }
- return $errors;
- }
+ return $errors;
+ }
- /**
- * A list of minor server issues.
- *
- * @return array
- */
- private function serverWarnings(): array {
- $extensions = [
- 'gd' => /* I18N: a program feature */ I18N::translate('creating thumbnails of images'),
- 'xml' => /* I18N: a program feature */ I18N::translate('reporting'),
- 'simplexml' => /* I18N: a program feature */ I18N::translate('reporting'),
- ];
- $settings = [
- 'file_uploads' => /* I18N: a program feature */ I18N::translate('file upload capability')
- ];
- $warnings = [];
+ /**
+ * A list of minor server issues.
+ *
+ * @return array
+ */
+ private function serverWarnings(): array
+ {
+ $extensions = [
+ 'gd' => /* I18N: a program feature */
+ I18N::translate('creating thumbnails of images'),
+ 'xml' => /* I18N: a program feature */
+ I18N::translate('reporting'),
+ 'simplexml' => /* I18N: a program feature */
+ I18N::translate('reporting'),
+ ];
+ $settings = [
+ 'file_uploads' => /* I18N: a program feature */
+ I18N::translate('file upload capability'),
+ ];
+ $warnings = [];
- foreach ($extensions as $extension => $features) {
- if (!extension_loaded($extension)) {
- $warnings[] = I18N::translate('PHP extension “%1$s” is disabled. Without it, the following features will not work: %2$s. Please ask your server’s administrator to enable it.', $extension, $features);
- }
- }
+ foreach ($extensions as $extension => $features) {
+ if (!extension_loaded($extension)) {
+ $warnings[] = I18N::translate('PHP extension “%1$s” is disabled. Without it, the following features will not work: %2$s. Please ask your server’s administrator to enable it.', $extension, $features);
+ }
+ }
- foreach ($settings as $setting => $features) {
- if (!ini_get($setting)) {
- $warnings[] = I18N::translate('PHP setting “%1$s” is disabled. Without it, the following features will not work: %2$s. Please ask your server’s administrator to enable it.', $setting, $features);
- }
- }
+ foreach ($settings as $setting => $features) {
+ if (!ini_get($setting)) {
+ $warnings[] = I18N::translate('PHP setting “%1$s” is disabled. Without it, the following features will not work: %2$s. Please ask your server’s administrator to enable it.', $setting, $features);
+ }
+ }
- return $warnings;
- }
+ return $warnings;
+ }
- /**
- * Create a response object from a view.
- *
- * @param string $name
- * @param mixed[] $data
- * @param int $status
- *
- * @return Response
- */
- protected function viewResponse($name, $data, $status = Response::HTTP_OK): Response {
- $html = view('layouts/setup', [
- 'content' => view($name, $data),
- ]);
+ /**
+ * Create a response object from a view.
+ *
+ * @param string $name
+ * @param mixed[] $data
+ * @param int $status
+ *
+ * @return Response
+ */
+ protected function viewResponse($name, $data, $status = Response::HTTP_OK): Response
+ {
+ $html = view('layouts/setup', [
+ 'content' => view($name, $data),
+ ]);
- return new Response($html, $status);
- }
+ return new Response($html, $status);
+ }
}