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 <d00p@froxlor.org>
This commit is contained in:
@@ -159,7 +159,7 @@ if ($page == 'overview' || $page == 'emails') {
|
||||
'formdata' => $email_add_data['emails_add']
|
||||
]);
|
||||
} else {
|
||||
Response::standardError('noemaildomainaddedyet');
|
||||
Response::standardError('emails.noemaildomainaddedyet');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -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 = '<?php' . PHP_EOL;
|
||||
$content .= '//automatically generated userdata.inc.php for Froxlor' . PHP_EOL;
|
||||
$content .= '$sql[\'host\']=\'' . $sql['host'] . '\';' . PHP_EOL;
|
||||
$content .= '$sql[\'user\']=\'' . $sql['user'] . '\';' . PHP_EOL;
|
||||
$content .= '$sql[\'password\']=\'' . $sql['password'] . '\';' . PHP_EOL;
|
||||
$content .= '$sql[\'db\']=\'' . $sql['db'] . '\';' . PHP_EOL;
|
||||
foreach ($sql_root as $index => $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 . '\'] = <<<EOP
|
||||
' . $value . '
|
||||
EOP;' . PHP_EOL;
|
||||
} else {
|
||||
$content .= '$sql_root[' . (int)$index . '][\'' . $field . '\'] = \'' . $value . '\';' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$content .= '$sql[\'debug\']=' . ($sql['debug'] ? 'true' : 'false') . ';' . PHP_EOL;
|
||||
$content .= '?>' . PHP_EOL;
|
||||
$content = PhpHelper::parseArrayToPhpFile(
|
||||
['sql' => $sql, 'sql_root' => $sql_root],
|
||||
'automatically generated userdata.inc.php for froxlor'
|
||||
);
|
||||
file_put_contents(Froxlor::getInstallDir() . "/lib/userdata.inc.php", $content);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)',
|
||||
|
||||
@@ -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)',
|
||||
|
||||
@@ -43,5 +43,6 @@
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<span class="text-danger">*</span> {{ lng('panel.mandatoryfield') }}
|
||||
</form>
|
||||
{% endmacro %}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
{% if em %}
|
||||
<mark>
|
||||
{% endif %}
|
||||
{{ field.label.title|raw }}
|
||||
{{ field.label.title|raw }}{% if field.mandatory is defined and field.mandatory %}<span class="text-danger">*</span>{% endif %}
|
||||
{% if em %}
|
||||
</mark>
|
||||
{% endif %}
|
||||
@@ -19,7 +19,7 @@
|
||||
{% if em %}
|
||||
<mark>
|
||||
{% endif %}
|
||||
{{ field.label|raw }}
|
||||
{{ field.label|raw }}{% if field.mandatory is defined and field.mandatory %}<span class="text-danger">*</span>{% endif %}
|
||||
{% if em %}
|
||||
</mark>
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user