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 . ')',