diff --git a/composer.json b/composer.json index 67ab5f70..aac3c0fd 100644 --- a/composer.json +++ b/composer.json @@ -45,6 +45,7 @@ "ext-openssl": "*", "ext-fileinfo": "*", "ext-gmp": "*", + "ext-gd": "*", "phpmailer/phpmailer": "~6.0", "monolog/monolog": "^1.24", "robthree/twofactorauth": "^1.6", diff --git a/composer.lock b/composer.lock index acef38dd..7c846c33 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "41e7a3bc0e13b47c4f245334b113c3be", + "content-hash": "2de39e6b85579ce1f0c2f7a16d57ede3", "packages": [ { "name": "erusev/parsedown", @@ -251,16 +251,16 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.7.1", + "version": "v6.8.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "49cd7ea3d2563f028d7811f06864a53b1f15ff55" + "reference": "df16b615e371d81fb79e506277faea67a1be18f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/49cd7ea3d2563f028d7811f06864a53b1f15ff55", - "reference": "49cd7ea3d2563f028d7811f06864a53b1f15ff55", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1", + "reference": "df16b615e371d81fb79e506277faea67a1be18f1", "shasum": "" }, "require": { @@ -319,7 +319,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.7.1" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0" }, "funding": [ { @@ -327,7 +327,7 @@ "type": "github" } ], - "time": "2022-12-08T13:30:06+00:00" + "time": "2023-03-06T14:43:22+00:00" }, { "name": "psr/container", @@ -499,16 +499,16 @@ }, { "name": "symfony/console", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740" + "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740", + "url": "https://api.github.com/repos/symfony/console/zipball/c77433ddc6cdc689caf48065d9ea22ca0853fbd9", + "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9", "shasum": "" }, "require": { @@ -578,7 +578,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.19" + "source": "https://github.com/symfony/console/tree/v5.4.21" }, "funding": [ { @@ -594,7 +594,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-25T16:59:41+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1399,16 +1399,16 @@ }, { "name": "symfony/string", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb" + "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0a01071610fd861cc160dfb7e2682ceec66064cb", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb", + "url": "https://api.github.com/repos/symfony/string/zipball/edac10d167b78b1d90f46a80320d632de0bd9f2f", + "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f", "shasum": "" }, "require": { @@ -1465,7 +1465,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.19" + "source": "https://github.com/symfony/string/tree/v5.4.21" }, "funding": [ { @@ -1481,7 +1481,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-02-22T08:00:55+00:00" }, { "name": "twig/twig", @@ -2089,16 +2089,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.3", + "version": "v4.15.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -2139,22 +2139,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2023-03-05T19:49:14+00:00" }, { "name": "pdepend/pdepend", - "version": "2.12.1", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/pdepend/pdepend.git", - "reference": "7a892d56ceafd804b4a2ecc85184640937ce9e84" + "reference": "31be7cd4f305f3f7b52af99c1cb13fc938d1cfad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/7a892d56ceafd804b4a2ecc85184640937ce9e84", - "reference": "7a892d56ceafd804b4a2ecc85184640937ce9e84", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/31be7cd4f305f3f7b52af99c1cb13fc938d1cfad", + "reference": "31be7cd4f305f3f7b52af99c1cb13fc938d1cfad", "shasum": "" }, "require": { @@ -2190,7 +2190,7 @@ "description": "Official version of pdepend to be handled with Composer", "support": { "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.12.1" + "source": "https://github.com/pdepend/pdepend/tree/2.13.0" }, "funding": [ { @@ -2198,7 +2198,7 @@ "type": "tidelift" } ], - "time": "2022-09-08T19:30:37+00:00" + "time": "2023-02-28T20:56:15+00:00" }, { "name": "phar-io/manifest", @@ -2520,16 +2520,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.3", + "version": "1.10.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "5419375b5891add97dc74be71e6c1c34baaddf64" + "reference": "8d39218664b45a4a42d5be66d2b63dcf8c149982" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5419375b5891add97dc74be71e6c1c34baaddf64", - "reference": "5419375b5891add97dc74be71e6c1c34baaddf64", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8d39218664b45a4a42d5be66d2b63dcf8c149982", + "reference": "8d39218664b45a4a42d5be66d2b63dcf8c149982", "shasum": "" }, "require": { @@ -2559,7 +2559,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.10.3" + "source": "https://github.com/phpstan/phpstan/tree/1.10.4" }, "funding": [ { @@ -2575,20 +2575,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T14:47:13+00:00" + "time": "2023-03-06T13:39:20+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.25", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0e2b40518197a8c0d4b08bc34dfff1c99c508954", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { @@ -2610,8 +2610,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -2644,7 +2644,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.25" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -2652,7 +2652,7 @@ "type": "github" } ], - "time": "2023-02-25T05:32:00+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2897,16 +2897,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.3", + "version": "9.6.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", "shasum": "" }, "require": { @@ -2979,7 +2979,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" }, "funding": [ { @@ -2995,7 +2995,7 @@ "type": "tidelift" } ], - "time": "2023-02-04T13:37:15+00:00" + "time": "2023-02-27T13:06:37+00:00" }, { "name": "sebastian/cli-parser", @@ -4082,16 +4082,16 @@ }, { "name": "symfony/config", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "9bd60843443cda9638efdca7c41eb82ed0026179" + "reference": "2a6b1111d038adfa15d52c0871e540f3b352d1e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/9bd60843443cda9638efdca7c41eb82ed0026179", - "reference": "9bd60843443cda9638efdca7c41eb82ed0026179", + "url": "https://api.github.com/repos/symfony/config/zipball/2a6b1111d038adfa15d52c0871e540f3b352d1e4", + "reference": "2a6b1111d038adfa15d52c0871e540f3b352d1e4", "shasum": "" }, "require": { @@ -4141,7 +4141,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.19" + "source": "https://github.com/symfony/config/tree/v5.4.21" }, "funding": [ { @@ -4157,20 +4157,20 @@ "type": "tidelift" } ], - "time": "2023-01-08T13:23:55+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.20", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "8185ed0df129005a26715902f1a53bad0fe67102" + "reference": "5bc403d96622cf0091abd92c939eadecd4d07f94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8185ed0df129005a26715902f1a53bad0fe67102", - "reference": "8185ed0df129005a26715902f1a53bad0fe67102", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5bc403d96622cf0091abd92c939eadecd4d07f94", + "reference": "5bc403d96622cf0091abd92c939eadecd4d07f94", "shasum": "" }, "require": { @@ -4230,7 +4230,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.20" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.21" }, "funding": [ { @@ -4246,20 +4246,20 @@ "type": "tidelift" } ], - "time": "2023-01-27T11:08:11+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.19", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8" + "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/648bfaca6a494f3e22378123bcee2894045dc9d8", - "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", + "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", "shasum": "" }, "require": { @@ -4294,7 +4294,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.19" + "source": "https://github.com/symfony/filesystem/tree/v5.4.21" }, "funding": [ { @@ -4310,7 +4310,7 @@ "type": "tidelift" } ], - "time": "2023-01-14T19:14:44+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/polyfill-php81", @@ -4462,7 +4462,8 @@ "ext-json": "*", "ext-openssl": "*", "ext-fileinfo": "*", - "ext-gmp": "*" + "ext-gmp": "*", + "ext-gd": "*" }, "platform-dev": { "ext-pcntl": "*" diff --git a/lib/Froxlor/Cron/Http/ApacheFcgi.php b/lib/Froxlor/Cron/Http/ApacheFcgi.php index 0ef64d3e..1ebc612b 100644 --- a/lib/Froxlor/Cron/Http/ApacheFcgi.php +++ b/lib/Froxlor/Cron/Http/ApacheFcgi.php @@ -196,6 +196,9 @@ class ApacheFcgi extends Apache } } else { $php_options_text .= ' FcgidIdleTimeout ' . Settings::Get('system.mod_fcgid_idle_timeout') . "\n"; + if ($phpconfig['pass_authorizationheader'] == '1') { + $php_options_text .= ' FcgidPassHeader Authorization' . "\n"; + } if ((int)Settings::Get('system.mod_fcgid_wrapper') == 0) { $php_options_text .= ' SuexecUserGroup "' . $domain['loginname'] . '" "' . $domain['loginname'] . '"' . "\n"; $php_options_text .= ' ScriptAlias /php/ ' . $php->getInterface()->getConfigDir() . "\n"; diff --git a/lib/Froxlor/Dns/Dns.php b/lib/Froxlor/Dns/Dns.php index 9bd13988..dc7a134b 100644 --- a/lib/Froxlor/Dns/Dns.php +++ b/lib/Froxlor/Dns/Dns.php @@ -279,8 +279,7 @@ class Dns } } } - $zonerecords[] = new DnsEntry($entry['record'], $entry['type'], $entry['content'], $entry['prio'], - $entry['ttl']); + $zonerecords[] = new DnsEntry($entry['record'], $entry['type'], $entry['content'], $entry['prio'] ?? 0, $entry['ttl']); } // add missing required entries diff --git a/lib/Froxlor/Install/Install.php b/lib/Froxlor/Install/Install.php index 401124a7..ebf322cb 100644 --- a/lib/Froxlor/Install/Install.php +++ b/lib/Froxlor/Install/Install.php @@ -42,7 +42,7 @@ class Install public $phpVersion; public $formfield; public string $requiredVersion = '7.4.0'; - public array $requiredExtensions = ['session', 'ctype', 'xml', 'filter', 'posix', 'mbstring', 'curl', 'gmp', 'json']; + public array $requiredExtensions = ['session', 'ctype', 'xml', 'filter', 'posix', 'mbstring', 'curl', 'gmp', 'json', 'gd']; public array $suggestedExtensions = ['bcmath', 'zip']; public array $suggestions = []; public array $criticals = []; diff --git a/lib/Froxlor/UI/Panel/UI.php b/lib/Froxlor/UI/Panel/UI.php index 238baa93..6a2c100e 100644 --- a/lib/Froxlor/UI/Panel/UI.php +++ b/lib/Froxlor/UI/Panel/UI.php @@ -92,21 +92,11 @@ class UI */ public static function sendHeaders() { - if (empty($_SERVER['HTTP_HOST'])) { - if (!self::$install_mode) { - // fallback to set hostname in settings - $_SERVER['HTTP_HOST'] = Settings::Get('system.hostname'); - } else { - // bad request - http_response_code(400); - exit(); - } - } - + $cookie_host = empty($_SERVER['HTTP_HOST']) ? null : explode (':', $_SERVER['HTTP_HOST'])[0]; session_set_cookie_params([ 'lifetime' => self::$install_mode ? 7200 : 600, // will be renewed based on settings in lib/init.php 'path' => '/', - 'domain' => explode(':', $_SERVER['HTTP_HOST'])[0], + 'domain' => $cookie_host, 'secure' => self::requestIsHttps(), 'httponly' => true, 'samesite' => 'Strict' diff --git a/lib/formfields/admin/phpconfig/formfield.phpconfig_add.php b/lib/formfields/admin/phpconfig/formfield.phpconfig_add.php index f21a66b9..1decbbd7 100644 --- a/lib/formfields/admin/phpconfig/formfield.phpconfig_add.php +++ b/lib/formfields/admin/phpconfig/formfield.phpconfig_add.php @@ -102,7 +102,7 @@ return [ 'value' => '5s' ], 'phpfpm_pass_authorizationheader' => [ - 'visible' => Settings::Get('phpfpm.enabled') == 1 && Settings::Get('system.webserver') == "apache2", + 'visible' => Settings::Get('system.webserver') == "apache2", 'label' => lng('admin.phpsettings.pass_authorizationheader'), 'type' => 'checkbox', 'value' => '1', diff --git a/lib/formfields/admin/phpconfig/formfield.phpconfig_edit.php b/lib/formfields/admin/phpconfig/formfield.phpconfig_edit.php index c3860cda..11d59401 100644 --- a/lib/formfields/admin/phpconfig/formfield.phpconfig_edit.php +++ b/lib/formfields/admin/phpconfig/formfield.phpconfig_edit.php @@ -105,7 +105,7 @@ return [ 'value' => $result['fpm_reqslow'] ], 'phpfpm_pass_authorizationheader' => [ - 'visible' => Settings::Get('phpfpm.enabled') == 1 && Settings::Get('system.webserver') == "apache2", + 'visible' => Settings::Get('system.webserver') == "apache2", 'label' => lng('admin.phpsettings.pass_authorizationheader'), 'type' => 'checkbox', 'value' => '1', diff --git a/lib/init.php b/lib/init.php index cf683be6..78e67f6c 100644 --- a/lib/init.php +++ b/lib/init.php @@ -329,10 +329,11 @@ if (CurrentUser::hasSession()) { } } // update cookie lifetime + $cookie_host = empty($_SERVER['HTTP_HOST']) ? null : explode (':', $_SERVER['HTTP_HOST'])[0]; $cookie_params = [ 'expires' => time() + Settings::Get('session.sessiontimeout'), 'path' => '/', - 'domain' => explode(':', $_SERVER['HTTP_HOST'])[0], + 'domain' => $cookie_host, 'secure' => UI::requestIsHttps(), 'httponly' => true, 'samesite' => 'Strict' diff --git a/lng/de.lng.php b/lng/de.lng.php index 2f452782..6e60c0bc 100644 --- a/lng/de.lng.php +++ b/lng/de.lng.php @@ -297,7 +297,7 @@ return [ 'request_terminate_timeout' => 'request_terminate_timeout', 'request_slowlog_timeout' => 'request_slowlog_timeout', 'activephpconfigs' => 'In Verwendung für PHP-Konfiguration(en)', - 'pass_authorizationheader' => 'Füge "-pass-header Authorization" / "CGIPassAuth On" in Vhosts ein', + 'pass_authorizationheader' => 'Übergeben von HTTP AUTH BASIC/DIGEST-Headern von Apache an PHP', ], 'misc' => 'Sonstiges', 'fpmsettings' => [ @@ -924,6 +924,7 @@ return [ 'mysqlserverstillhasdbs' => 'Datenbank-Server kann für den Kunden nicht entfernt werden, da sich dort noch Datenbanken befinden.', 'domaincannotbeedited' => 'Keine Berechtigung, um die Domain %s zu bearbeiten', 'invalidcronjobintervalvalue' => 'Cronjob Intervall muss einer der folgenden Werte sein: %s', + 'phpgdextensionnotavailable' => 'Die PHP GD Extension ist nicht verfügbar. Bild-Daten können nicht validiert werden.', ], 'extras' => [ 'description' => 'Hier können Sie zusätzliche Extras einrichten, wie zum Beispiel einen Verzeichnisschutz.
Die Änderungen sind erst nach einer kurzen Zeit wirksam.', diff --git a/lng/en.lng.php b/lng/en.lng.php index 4d599ecc..d7b2c515 100644 --- a/lng/en.lng.php +++ b/lng/en.lng.php @@ -302,7 +302,7 @@ return [ 'request_terminate_timeout' => 'Request terminate-timeout', 'request_slowlog_timeout' => 'Request slowlog-timeout', 'activephpconfigs' => 'In use for php-config(s)', - 'pass_authorizationheader' => 'Add "-pass-header Authorization" / "CGIPassAuth On" to vhosts', + 'pass_authorizationheader' => 'Passing HTTP AUTH BASIC/DIGEST headers from Apache to PHP', ], 'misc' => 'Miscellaneous', 'fpmsettings' => [ @@ -993,6 +993,7 @@ return [ 'mysqlserverstillhasdbs' => 'Cannot remove database server from customers allow-list as there are still databases on it.', 'domaincannotbeedited' => 'You are not permitted to edit the domain %s', 'invalidcronjobintervalvalue' => 'Cronjob interval must be one of: %s', + 'phpgdextensionnotavailable' => 'The PHP GD extension is not available. Unable to validate image-data', ], 'extras' => [ 'description' => 'Here you can add some extras, for example directory protection.
The system will need some time to apply the new settings after every change.',