From c4a2d87d70f39faf27c22ff91009d53671a891af Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Mon, 2 May 2022 10:00:59 +0200 Subject: [PATCH] use PhpHelper::parseArrayToPhpFile in new MysqlServer API command; show asterisk for mandatory fields in formfields; add ssl-flag for ssl-enabled ip in installation Signed-off-by: Michael Kaufmann --- customer_email.php | 2 +- lib/Froxlor/Api/Commands/MysqlServer.php | 74 +++++++++------------ lib/Froxlor/Install/Install/Core.php | 9 ++- lib/Froxlor/PhpHelper.php | 2 - lng/de.lng.php | 1 + lng/en.lng.php | 1 + templates/Froxlor/form/form.html.twig | 1 + templates/Froxlor/form/formfields.html.twig | 4 +- 8 files changed, 44 insertions(+), 50 deletions(-) diff --git a/customer_email.php b/customer_email.php index b01355d9..863bf412 100644 --- a/customer_email.php +++ b/customer_email.php @@ -159,7 +159,7 @@ if ($page == 'overview' || $page == 'emails') { 'formdata' => $email_add_data['emails_add'] ]); } else { - Response::standardError('noemaildomainaddedyet'); + Response::standardError('emails.noemaildomainaddedyet'); } } } else { diff --git a/lib/Froxlor/Api/Commands/MysqlServer.php b/lib/Froxlor/Api/Commands/MysqlServer.php index 60885e48..41732039 100644 --- a/lib/Froxlor/Api/Commands/MysqlServer.php +++ b/lib/Froxlor/Api/Commands/MysqlServer.php @@ -29,6 +29,7 @@ use Exception; use PDO; use PDOException; use Froxlor\Froxlor; +use Froxlor\PhpHelper; use Froxlor\Api\ApiCommand; use Froxlor\Api\ResourceEntity; use Froxlor\Database\Database; @@ -171,8 +172,6 @@ class MysqlServer extends ApiCommand implements ResourceEntity throw new Exception('Cannot delete first/default mysql-server'); } - // @todo check whether the server is in use by any customer - // get all data from lib/userdata require Froxlor::getInstallDir() . "/lib/userdata.inc.php"; @@ -180,6 +179,12 @@ class MysqlServer extends ApiCommand implements ResourceEntity throw new Exception('Mysql server not found', 404); } + // check whether the server is in use by any customer + $result_ms = $this->databasesOnServer(true, $dbserver); + if ($result_ms > 0) { + Response::standardError('mysqlserverstillhasdbs', '', true); + } + unset($sql_root[$dbserver]); $this->generateNewUserData($sql, $sql_root); @@ -288,51 +293,36 @@ class MysqlServer extends ApiCommand implements ResourceEntity * @access admin, customer * @return string json-encoded array count */ - public function databasesOnServer() + public function databasesOnServer(bool $internal_all = false, int $dbserver = 0) { - $dbserver = $this->getParam('mysql_server'); - $customer_ids = $this->getAllowedCustomerIds(); - - $result_stmt = Database::prepare(" - SELECT COUNT(*) num_dbs FROM `" . TABLE_PANEL_DATABASES . "` - WHERE `customerid` IN (" . implode(", ", $customer_ids) . ") AND `dbserver` = :dbserver"); - $result = Database::pexecute_first($result_stmt, ['dbserver' => $dbserver], true, true); - return $this->response(['count' => $result['num_dbs']]); + if ($internal_all) { + $result_stmt = Database::prepare(" + SELECT COUNT(*) num_dbs FROM `" . TABLE_PANEL_DATABASES . "` + WHERE `dbserver` = :dbserver + "); + $result = Database::pexecute_first($result_stmt, ['dbserver' => $dbserver], true, true); + return (int) $result['num_dbs']; + } else { + $dbserver = $this->getParam('mysql_server'); + $customer_ids = $this->getAllowedCustomerIds(); + $result_stmt = Database::prepare(" + SELECT COUNT(*) num_dbs FROM `" . TABLE_PANEL_DATABASES . "` + WHERE `customerid` IN (" . implode(", ", $customer_ids) . ") AND `dbserver` = :dbserver + "); + $result = Database::pexecute_first($result_stmt, ['dbserver' => $dbserver], true, true); + return $this->response(['count' => $result['num_dbs']]); + } } + /** + * write new userdata.inc.php file + */ private function generateNewUserData(array $sql, array $sql_root) { - $content = ' $sqlroot_data) { - $content .= '// database server #' . ($index + 1) . PHP_EOL; - foreach ($sqlroot_data as $field => $value) { - // ssl-fields - if (is_array($value)) { - foreach ($value as $vfield => $vvalue) { - if ($vfield == 'verifyServerCertificate') { - $content .= '$sql_root[' . (int)$index . '][\'' . $field . '\'][\'' . $vfield . '\'] = ' . ($vvalue ? 'true' : 'false') . ';' . PHP_EOL; - } else { - $content .= '$sql_root[' . (int)$index . '][\'' . $field . '\'][\'' . $vfield . '\'] = \'' . $vvalue . '\';' . PHP_EOL; - } - } - } else { - if ($field == 'password') { - $content .= '$sql_root[' . (int)$index . '][\'' . $field . '\'] = << $sql, 'sql_root' => $sql_root], + 'automatically generated userdata.inc.php for froxlor' + ); file_put_contents(Froxlor::getInstallDir() . "/lib/userdata.inc.php", $content); } } diff --git a/lib/Froxlor/Install/Install/Core.php b/lib/Froxlor/Install/Install/Core.php index 636d2722..446f0c0d 100644 --- a/lib/Froxlor/Install/Install/Core.php +++ b/lib/Froxlor/Install/Install/Core.php @@ -462,13 +462,15 @@ class Core `port` = :serverport, `namevirtualhost_statement` = :nvh, `vhostcontainer` = '1', - `vhostcontainer_servername_statement` = '1' + `vhostcontainer_servername_statement` = '1', + `ssl` = :ssl "); $nvh = $this->validatedData['webserver'] == 'apache2' ? '1' : '0'; $stmt->execute([ 'nvh' => $nvh, 'serverip' => $this->validatedData['serverip'], - 'serverport' => 80 + 'serverport' => 80, + 'ssl' => 0 ]); $defaultip = $db_user->lastInsertId(); @@ -477,7 +479,8 @@ class Core $stmt->execute([ 'nvh' => $this->validatedData['webserver'] == 'apache2' ? '1' : '0', 'serverip' => $this->validatedData['serverip'], - 'serverport' => 443 + 'serverport' => 443, + 'ssl' => 1 ]); $defaultsslip = $db_user->lastInsertId(); } diff --git a/lib/Froxlor/PhpHelper.php b/lib/Froxlor/PhpHelper.php index 489c1777..87d98a6f 100644 --- a/lib/Froxlor/PhpHelper.php +++ b/lib/Froxlor/PhpHelper.php @@ -210,8 +210,6 @@ class PhpHelper public static function loadConfigArrayDir() { - global $lng, $theme; - // we now use dynamic function parameters // so we can read from more than one directory // and still be valid for old calls diff --git a/lng/de.lng.php b/lng/de.lng.php index 76838204..e6859dfc 100644 --- a/lng/de.lng.php +++ b/lng/de.lng.php @@ -1158,6 +1158,7 @@ Vielen Dank, Ihr Administrator', 'title' => 'Tabellenspalten verwalten', 'description' => 'Hier können die angezeigten Tabellenspalten angepasst werden', ], + 'mandatoryfield' => 'Pflichtfeld', ], 'phpfpm' => [ 'vhost_httpuser' => 'Lokaler Benutzer für PHP-FPM (Froxlor-Vhost)', diff --git a/lng/en.lng.php b/lng/en.lng.php index c19e3cee..25afa999 100644 --- a/lng/en.lng.php +++ b/lng/en.lng.php @@ -1498,6 +1498,7 @@ Yours sincerely, your administrator', 'title' => 'Manage table columns', 'description' => 'Here you can customize the visible columns', ], + 'mandatoryfield' => 'Field is mandatory', ], 'phpfpm' => [ 'vhost_httpuser' => 'Local user to use for PHP-FPM (Froxlor vHost)', diff --git a/templates/Froxlor/form/form.html.twig b/templates/Froxlor/form/form.html.twig index 629daff0..71e51069 100644 --- a/templates/Froxlor/form/form.html.twig +++ b/templates/Froxlor/form/form.html.twig @@ -43,5 +43,6 @@ {% endif %} + * {{ lng('panel.mandatoryfield') }} {% endmacro %} diff --git a/templates/Froxlor/form/formfields.html.twig b/templates/Froxlor/form/formfields.html.twig index c77d24ed..20142785 100644 --- a/templates/Froxlor/form/formfields.html.twig +++ b/templates/Froxlor/form/formfields.html.twig @@ -7,7 +7,7 @@ {% if em %} {% endif %} - {{ field.label.title|raw }} + {{ field.label.title|raw }}{% if field.mandatory is defined and field.mandatory %}*{% endif %} {% if em %} {% endif %} @@ -19,7 +19,7 @@ {% if em %} {% endif %} - {{ field.label|raw }} + {{ field.label|raw }}{% if field.mandatory is defined and field.mandatory %}*{% endif %} {% if em %} {% endif %}