diff --git a/install/install.php b/install/install.php index 0a58398e..b0bded86 100644 --- a/install/install.php +++ b/install/install.php @@ -26,6 +26,8 @@ use Froxlor\UI\Panel\UI; use Froxlor\Install\Install; +require dirname(__DIR__) . '/lib/functions.php'; + // define default theme for configurehint, etc. $_deftheme = 'Froxlor'; @@ -62,7 +64,5 @@ require dirname(__DIR__) . '/lib/tables.inc.php'; UI::initTwig(true); UI::sendHeaders(); -require dirname(__DIR__) . '/lib/functions.php'; - $installer = new Install(); $installer->handle(); diff --git a/lib/Froxlor/Install/Install.php b/lib/Froxlor/Install/Install.php index 588434f3..d9c4fc52 100644 --- a/lib/Froxlor/Install/Install.php +++ b/lib/Froxlor/Install/Install.php @@ -35,6 +35,7 @@ use Froxlor\Validate\Validate; class Install { public $currentStep; + public $extendedView; public $maxSteps; public $phpVersion; public $formfield; @@ -76,6 +77,7 @@ class Install // set actual step $this->currentStep = Request::get('step', 0); + $this->extendedView = Request::get('extended', 0); $this->maxSteps = count($this->formfield['install']['sections']); // set actual php version and extensions @@ -112,13 +114,14 @@ class Install 'setup' => [ 'step' => $this->currentStep, ], - 'preflight' => $this->checkExtensions(), + 'preflight' => $this->checkRequirements(), 'page' => [ 'title' => 'Database', 'description' => 'Test', ], 'section' => $this->formfield['install']['sections']['step' . $this->currentStep] ?? [], 'error' => $error ?? null, + 'extended' => $this->extendedView, ]); // output view @@ -171,8 +174,18 @@ class Install /** * @return array */ - private function checkExtensions(): array + private function checkRequirements(): array { + // check whether we can read the userdata file + if (!@touch(dirname(__DIR__, 2).'/.~writecheck' )) { + // get possible owner + $posixusername = posix_getpwuid(posix_getuid())['name']; + $posixgroup = posix_getgrgid(posix_getgid())['name']; + $this->criticals['wrong_ownership'] = ['user' => $posixusername, 'group' => $posixgroup]; + } else { + @unlink(dirname(__DIR__, 2).'/.~writecheck'); + } + // check for required extensions foreach ($this->requiredExtensions as $requiredExtension) { if (in_array($requiredExtension, $this->loadedExtensions)) { diff --git a/lib/formfields/install/formfield.install.php b/lib/formfields/install/formfield.install.php index ee2fdc76..5e650aa0 100644 --- a/lib/formfields/install/formfield.install.php +++ b/lib/formfields/install/formfield.install.php @@ -149,12 +149,18 @@ return [ 'select_var' => $this->supportedOS, 'selected' => $guessedDistribution ], - 'serverip' => [ - 'label' => lng('serversettings.ipaddress.title'), - 'placeholder' => lng('serversettings.ipaddress.title'), + 'serveripv4' => [ + 'label' => lng('install.system.ipv4'), + 'placeholder' => lng('install.system.ipv4'), 'type' => 'text', - 'mandatory' => true, - 'value' => old('serverip', $_SERVER['SERVER_ADDR'] ?? null, 'installation'), + 'value' => old('serveripv4', filter_var($_SERVER['SERVER_ADDR'] ?? "", FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? ($_SERVER['SERVER_ADDR'] ?? "") : "", 'installation'), + + ], + 'serveripv6' => [ + 'label' => lng('install.system.ipv6'), + 'placeholder' => lng('install.system.ipv6'), + 'type' => 'text', + 'value' => old('serveripv6', filter_var($_SERVER['SERVER_ADDR'] ?? "", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? ($_SERVER['SERVER_ADDR'] ?? "") : "", 'installation'), ], 'servername' => [ 'label' => lng('install.system.servername'), @@ -189,6 +195,7 @@ return [ 'type' => 'text', 'mandatory' => true, 'value' => old('httpuser', posix_getpwuid(posix_getuid())['name'] ?? '', 'installation'), + 'advanced' => true, ], 'httpgroup' => [ 'label' => lng('admin.webserver_group'), @@ -196,6 +203,7 @@ return [ 'type' => 'text', 'mandatory' => true, 'value' => old('httpgroup', posix_getgrgid(posix_getgid())['name'] ?? '', 'installation'), + 'advanced' => true, ], 'activate_newsfeed' => [ 'label' => lng('install.system.activate_newsfeed'), diff --git a/lng/en.lng.php b/lng/en.lng.php index 9c738ddb..24443e84 100644 --- a/lng/en.lng.php +++ b/lng/en.lng.php @@ -2489,6 +2489,8 @@ Yours sincerely, your administrator', 'top' => 'System setup', 'title' => 'Details about your server', 'description' => 'Set your environment as well as server relevant data and options here to let froxlor know about your system. These values are crucial for the system configuration and operating.', + 'ipv4' => 'Primary IPv4 address (if applicable)', + 'ipv6' => 'Primary IPv6 address (if applicable)', 'servername' => 'Server name (FQDN, no ip-address)', 'phpbackend' => 'PHP backend', 'activate_newsfeed' => 'Enable the official newsfeed
(https://inside.froxlor.org/news/)', diff --git a/templates/Froxlor/form/formfields.html.twig b/templates/Froxlor/form/formfields.html.twig index 8aba63b2..198d7b93 100644 --- a/templates/Froxlor/form/formfields.html.twig +++ b/templates/Froxlor/form/formfields.html.twig @@ -63,17 +63,19 @@ {# installation specific format #} {% macro field(id, field, norow = true, nohide = false, em = false) %} - {% if field.type != 'checkbox' %} -
- {{ _self.fieldrow(id, field, norow, nohide, em) }} - -
- {% else %} + {% if field.type == 'checkbox' %}
+ {% elseif field.type == 'hidden' %} + {{ _self.fieldrow(id, field, norow, nohide, em) }} + {% else %} +
+ {{ _self.fieldrow(id, field, norow, nohide, em) }} + +
{% endif %} {% endmacro %} diff --git a/templates/Froxlor/install/index.html.twig b/templates/Froxlor/install/index.html.twig index d7ae1d24..9831746b 100644 --- a/templates/Froxlor/install/index.html.twig +++ b/templates/Froxlor/install/index.html.twig @@ -42,6 +42,10 @@ {% import "Froxlor/form/formfields.html.twig" as formfields %} {% for id, field in section.fields %} + {% if field.advanced is defined and field.advanced == true and extended == false %} + {# hide advanced fields #} + {% set field = field|merge({'type': 'hidden'}) %} + {% endif %} {{ formfields.field(id, field) }} {% endfor %}