diff --git a/customer_email.php b/customer_email.php
index dc55aed0..b3f6c251 100644
--- a/customer_email.php
+++ b/customer_email.php
@@ -247,11 +247,7 @@ if ($page == 'email_domain') {
if (isset($result['email']) && $result['email'] != '') {
if (Request::post('send') == 'send') {
try {
- Emails::getLocal($userinfo, [
- 'id' => $id,
- 'spam_tag_level' => Request::post('spam_tag_level', Rspamd::DEFAULT_MARK_LVL),
- 'spam_kill_level' => Request::post('spam_kill_level', Rspamd::DEFAULT_REJECT_LVL)
- ])->update();
+ Emails::getLocal($userinfo, Request::postAll())->update();
} catch (Exception $e) {
Response::dynamicError($e->getMessage());
}
@@ -291,88 +287,12 @@ if ($page == 'email_domain') {
$email_edit_data = include_once dirname(__FILE__) . '/lib/formfields/customer/email/formfield.emails_edit.php';
- if (Settings::Get('catchall.catchall_enabled') != '1') {
- unset($email_edit_data['emails_edit']['sections']['section_a']['fields']['mail_catchall']);
- }
-
UI::view('user/form.html.twig', [
'formaction' => $linker->getLink(['section' => 'email']),
'formdata' => $email_edit_data['emails_edit'],
'editid' => $id
]);
}
- } elseif ($action == 'togglebypass' && $id != 0) {
- try {
- $json_result = Emails::getLocal($userinfo, [
- 'id' => $id
- ])->get();
- } catch (Exception $e) {
- Response::dynamicError($e->getMessage());
- }
- $result = json_decode($json_result, true)['data'];
-
- try {
- Emails::getLocal($userinfo, [
- 'id' => $id,
- 'bypass_spam' => ($result['bypass_spam'] == '1' ? 0 : 1)
- ])->update();
- } catch (Exception $e) {
- Response::dynamicError($e->getMessage());
- }
- Response::redirectTo($filename, [
- 'page' => $page,
- 'domainid' => $email_domainid,
- 'action' => 'edit',
- 'id' => $id,
- ]);
- } elseif ($action == 'togglegreylist' && $id != 0) {
- try {
- $json_result = Emails::getLocal($userinfo, [
- 'id' => $id
- ])->get();
- } catch (Exception $e) {
- Response::dynamicError($e->getMessage());
- }
- $result = json_decode($json_result, true)['data'];
-
- try {
- Emails::getLocal($userinfo, [
- 'id' => $id,
- 'policy_greylist' => ($result['policy_greylist'] == '1' ? 0 : 1)
- ])->update();
- } catch (Exception $e) {
- Response::dynamicError($e->getMessage());
- }
- Response::redirectTo($filename, [
- 'page' => $page,
- 'domainid' => $email_domainid,
- 'action' => 'edit',
- 'id' => $id,
- ]);
- } elseif ($action == 'togglecatchall' && $id != 0) {
- try {
- $json_result = Emails::getLocal($userinfo, [
- 'id' => $id
- ])->get();
- } catch (Exception $e) {
- Response::dynamicError($e->getMessage());
- }
- $result = json_decode($json_result, true)['data'];
-
- try {
- Emails::getLocal($userinfo, [
- 'id' => $id,
- 'iscatchall' => ($result['iscatchall'] == '1' ? 0 : 1)
- ])->update();
- } catch (Exception $e) {
- Response::dynamicError($e->getMessage());
- }
- Response::redirectTo($filename, [
- 'page' => $page,
- 'domainid' => $email_domainid,
- 'action' => 'edit',
- 'id' => $id,
- ]);
}
} elseif ($page == 'accounts') {
$email_domainid = Request::any('domainid', 0);
diff --git a/lib/Froxlor/Api/Commands/Customers.php b/lib/Froxlor/Api/Commands/Customers.php
index ccbef644..f0492ed2 100644
--- a/lib/Froxlor/Api/Commands/Customers.php
+++ b/lib/Froxlor/Api/Commands/Customers.php
@@ -738,11 +738,12 @@ class Customers extends ApiCommand implements ResourceEntity
'adminid' => $this->getUserDetail('adminid'),
'docroot' => $documentroot,
'phpenabled' => $phpenabled,
- 'openbasedir' => '1'
+ 'openbasedir' => '1',
+ 'is_stdsubdomain' => 1
];
$domainid = -1;
try {
- $std_domain = $this->apiCall('Domains.add', $ins_data);
+ $std_domain = $this->apiCall('Domains.add', $ins_data, true);
$domainid = $std_domain['id'];
} catch (Exception $e) {
$this->logger()->logAction(FroxlorLogger::ADM_ACTION, LOG_ERR, "[API] Unable to add standard-subdomain: " . $e->getMessage());
diff --git a/lib/Froxlor/Api/Commands/Domains.php b/lib/Froxlor/Api/Commands/Domains.php
index 2dfbfb94..0ed0fbc9 100644
--- a/lib/Froxlor/Api/Commands/Domains.php
+++ b/lib/Froxlor/Api/Commands/Domains.php
@@ -274,7 +274,8 @@ class Domains extends ApiCommand implements ResourceEntity
* $override_tls is true
* @param string $description
* optional custom description (currently not used/shown in the frontend), default empty
- *
+ * @param bool $is_stdsubdomain (internally)
+ * optional whether this is a standard subdomain for a customer which is being added so no usage is decreased
* @access admin
* @return string json-encoded array
* @throws Exception
@@ -282,7 +283,8 @@ class Domains extends ApiCommand implements ResourceEntity
public function add()
{
if ($this->isAdmin()) {
- if ($this->getUserDetail('domains_used') < $this->getUserDetail('domains') || $this->getUserDetail('domains') == '-1') {
+ $is_stdsubdomain = $this->isInternal() ? $this->getBoolParam('is_stdsubdomain', true, 0) : false;
+ if ($is_stdsubdomain || $this->getUserDetail('domains_used') < $this->getUserDetail('domains') || $this->getUserDetail('domains') == '-1') {
// parameters
$p_domain = $this->getParam('domain');
@@ -795,12 +797,15 @@ class Domains extends ApiCommand implements ResourceEntity
$ins_data['id'] = $domainid;
unset($ins_data);
- $upd_stmt = Database::prepare("
- UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` + 1
- WHERE `adminid` = :adminid");
- Database::pexecute($upd_stmt, [
- 'adminid' => $adminid
- ], true, true);
+ if (!$is_stdsubdomain) {
+ $upd_stmt = Database::prepare("
+ UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` + 1
+ WHERE `adminid` = :adminid
+ ");
+ Database::pexecute($upd_stmt, [
+ 'adminid' => $adminid
+ ], true, true);
+ }
$ins_stmt = Database::prepare("
INSERT INTO `" . TABLE_DOMAINTOIP . "` SET
diff --git a/lib/formfields/customer/email/formfield.emails_edit.php b/lib/formfields/customer/email/formfield.emails_edit.php
index 30680543..a56f14a1 100644
--- a/lib/formfields/customer/email/formfield.emails_edit.php
+++ b/lib/formfields/customer/email/formfield.emails_edit.php
@@ -90,17 +90,11 @@ return [
]
],
'mail_catchall' => [
+ 'visible' => Settings::Get('catchall.catchall_enabled') == '1',
'label' => lng('emails.catchall'),
- 'type' => 'label',
- 'value' => ((int)$result['iscatchall'] == 0 ? lng('panel.no') : lng('panel.yes')),
- 'next_to' => [
- 'add_link' => [
- 'type' => 'link',
- 'href' => $filename . '?page=' . $page . '&domainid=' . $result['domainid'] . '&action=togglecatchall&id=' . $result['id'],
- 'label' => ' ' . lng('panel.toggle'),
- 'classes' => 'btn btn-sm btn-secondary'
- ]
- ]
+ 'type' => 'checkbox',
+ 'value' => '1',
+ 'checked' => (int)$result['iscatchall'],
],
'spam_tag_level' => [
'visible' => Settings::Get('antispam.activated') == '1',
@@ -119,30 +113,16 @@ return [
'bypass_spam' => [
'visible' => Settings::Get('antispam.activated') == '1',
'label' => lng('antispam.bypass_spam'),
- 'type' => 'label',
- 'value' => ((int)$result['bypass_spam'] == 0 ? lng('panel.no') : lng('panel.yes')),
- 'next_to' => [
- 'add_link' => [
- 'type' => 'link',
- 'href' => $filename . '?page=' . $page . '&domainid=' . $result['domainid'] . '&action=togglebypass&id=' . $result['id'],
- 'label' => ' ' . lng('panel.toggle'),
- 'classes' => 'btn btn-sm btn-secondary'
- ]
- ]
+ 'type' => 'checkbox',
+ 'value' => '1',
+ 'checked' => (int)$result['bypass_spam'],
],
'policy_greylist' => [
'visible' => Settings::Get('antispam.activated') == '1',
'label' => lng('antispam.policy_greylist'),
- 'type' => 'label',
- 'value' => ((int)$result['policy_greylist'] == 0 ? lng('panel.no') : lng('panel.yes')),
- 'next_to' => [
- 'add_link' => [
- 'type' => 'link',
- 'href' => $filename . '?page=' . $page . '&domainid=' . $result['domainid'] . '&action=togglegreylist&id=' . $result['id'],
- 'label' => ' ' . lng('panel.toggle'),
- 'classes' => 'btn btn-sm btn-secondary'
- ]
- ]
+ 'type' => 'checkbox',
+ 'value' => '1',
+ 'checked' => (int)$result['policy_greylist'],
],
'mail_fwds' => [
'label' => lng('emails.forwarders') . ' (' . $forwarders_count . ')',