Эх сурвалжийг харах

Merge branch 'spf' of andre/whmcsKerioEmail into master

andre 1 жил өмнө
parent
commit
33862cce47

+ 11 - 7
app/Http/Actions/UsageUpdate.php

@@ -8,13 +8,13 @@ use ThurData\Servers\KerioEmail\App\Helpers\KerioManager;
 use ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\AddonController;
 use ThurData\Servers\KerioEmail\Core\Models\Whmcs;
 use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
+use WHMCS\Database\Capsule;
 
 class UsageUpdate extends AddonController
 {
     public function execute($params = null)
     {
         $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
-        
         try {
             $api->login($params['serverhostname'], $params['serverusername'], $params['serverpassword']);
             $domains = $api->getDomains(['id','name']);
@@ -68,14 +68,18 @@ class UsageUpdate extends AddonController
 
                 Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['bwusage' => $mailboxes]);
                 Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['diskusage' => $storage]);
-
+                Whmcs\Hosting::where('server', $serverId)->where('domain', $domainName)->update(['lastupdate' => Capsule::raw('now()')]);
                 usleep(5000);
+            } catch (KerioApiException $error) {
+                logModuleCall(
+                    'kerioEmail',
+                    __FUNCTION__,
+                    $error,
+                    'Debug Error',
+                    $error->getMessage()
+                );
+                return ['error' => $error->getMessage()];
             }
-            catch (\Exception $ex)
-            {
-
-            }
-
         }
     }
 }

+ 187 - 103
app/Libs/Metrics/MyMetricProvider.php

@@ -2,17 +2,12 @@
 
 namespace ThurData\Servers\KerioEmail\App\Libs\Metrics;
 
-use ThurData\Servers\HetznerVps\App\Libs\HetznerVps\Api;
-use ThurData\Servers\HetznerVps\App\Libs\HetznerVps\Api\Constants;
-use ThurData\Servers\KerioEmail\App\Helpers\KerioManager;
-use ThurData\Servers\KerioEmail\App\Enums\Size;
-use mysql_xdevapi\DocResult;
 use WHMCS\UsageBilling\Contracts\Metrics\MetricInterface;
 use WHMCS\UsageBilling\Contracts\Metrics\ProviderInterface;
 use WHMCS\UsageBilling\Metrics\Metric;
-use WHMCS\UsageBilling\Metrics\Units\WholeNumber;
 use WHMCS\UsageBilling\Metrics\Usage;
 use WHMCS\UsageBilling\Metrics\Units\GigaBytes;
+use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
 
 class MyMetricProvider implements ProviderInterface
 {
@@ -56,78 +51,222 @@ class MyMetricProvider implements ProviderInterface
 
     public function usage()
     {
-        $domains =(new KerioManager())
-            ->getApiByServer($this->moduleParams['serverid'])
-            ->soap
-            ->repository()
-            ->domains()
-            ->getAll();
-
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->moduleParams['serverhostname'], $this->moduleParams['serverusername'], $this->moduleParams['serverpassword']);
+            $domains = $api->getDomains(['id','name','aliasList']);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
         $usage = [];
+
         foreach ($domains as $domain)
         {
-            $domainName = $domain->getName();
-
-            $mailboxes = $this->getAccounts($domainName);
-            $countOfMailboxes = count($mailboxes);
-
-            $countOfDistributionList = count($this->getDistributionList($domainName));
-
-            $countOfEmailAliases = 0;
-
-            foreach ($mailboxes as $account)
+            $domainName = $domain['name'];
+            $domainID = $domain['id'];
+            $countOfDomainAliases = count($domain['aliasList']);
+            try
             {
-                $countOfEmailAliases += count($account->getAliases());
+                $fields = array(
+					'loginName',
+					'fullName',
+					'consumedSize'
+                );
+                $mailboxes = $api->getUsers($fields,$domainID);
+                $countOfMailboxes = count($mailboxes);
+                $totalUsage = 0;
+                if ($countOfMailboxes > 0) {
+                    foreach ($mailboxes as $mailboxe) {
+                        switch($mailboxe['consumedSize']['units']) {
+                            case 'Bytes' :
+                                $usage = $mailboxe['consumedSize']['value']/1024/1024;
+                                break;
+                            case 'KiloBytes' :
+                                $usage = $mailboxe['consumedSize']['value']/1024;
+                                break;
+                            case 'MegaBytes' :
+                                $usage = $mailboxe['consumedSize']['value'];
+                                break;
+                            case 'GigaBytes' :
+                                $usage = $mailboxe['consumedSize']['value']*1024;
+                                break;
+                        }
+                        $totalUsage += $usage;
+                    }
+                }
+               $storage = $totalUsage == 0 ? 0 : round($totalUsage);
+            } catch (KerioApiException $error) {
+                logModuleCall(
+                    'kerioEmail',
+                    __FUNCTION__,
+                    $error,
+                    'Debug Error',
+                    $error->getMessage()
+                );
+                return ['error' => $error->getMessage()];
+            }
+            try
+            {
+                $fields = array(
+                    "id",
+                    "name");
+                $mailingLists = $api->getMailingLists($fields,$domainID);
+                $countOfDistributionList = count($mailingLists);
+            } catch (KerioApiException $error) {
+                logModuleCall(
+                    'kerioEmail',
+                    __FUNCTION__,
+                    $error,
+                    'Debug Error',
+                    $error->getMessage()
+                );
+                return ['error' => $error->getMessage()];
+            }
+            try
+            {
+                $fields = array(
+                    "id",
+                    "name");
+                $aliases = $api->getAliases($fields,$domainID);
+                $countOfEmailAliases = count($aliases);
+            } catch (KerioApiException $error) {
+                logModuleCall(
+                    'kerioEmail',
+                    __FUNCTION__,
+                    $error,
+                    'Debug Error',
+                    $error->getMessage()
+                );
+                return ['error' => $error->getMessage()];
             }
-
-            $domainAliases = $this->getDomainAliases($domainName);
-            $countOfDomainAliases = count($domainAliases);
-
-            $storage = $this->getDomainUsage($domainName);
-
 
             $domainData = [
                 'mailboxes' => $countOfMailboxes,
                 'distributionLists' => $countOfDistributionList,
                 'aliases' => $countOfEmailAliases,
                 'domainAliases' => $countOfDomainAliases,
-                'storage' => round($storage / Size::B_TO_GB, 2),
+                'storage' => $storage,
             ];
 
             $usage[$domainName] = $this->wrapUserData($domainData);
 
         }
+        $api->logout();
         return $usage;
     }
 
     public function tenantUsage($tenant)
     {
-        $mailboxes = $this->getAccounts($tenant);
-        $countOfMailboxes = count($mailboxes);
-
-        $countOfEmailAliases = 0;
-
-        foreach ($mailboxes as $account)
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->moduleParams['serverhostname'], $this->moduleParams['serverusername'], $this->moduleParams['serverpassword']);
+            $domainID = $api->getDomainId($tenant);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $usage = [];
+        $countOfDomainAliases = count($domain['aliasList']);
+        try
         {
-            $countOfEmailAliases += count($account->getAliases());
+            $fields = array(
+                'loginName',
+                'fullName',
+                'consumedSize'
+            );
+            $mailboxes = $api->getUsers($fields,$domainID);
+            $countOfMailboxes = count($mailboxes);
+            $totalUsage = 0;
+            if ($countOfMailboxes > 0) {
+                foreach ($mailboxes as $mailboxe) {
+                    switch($mailboxe['consumedSize']['units']) {
+                        case 'Bytes' :
+                            $usage = $mailboxe['consumedSize']['value']/1024/1024;
+                            break;
+                        case 'KiloBytes' :
+                            $usage = $mailboxe['consumedSize']['value']/1024;
+                            break;
+                        case 'MegaBytes' :
+                            $usage = $mailboxe['consumedSize']['value'];
+                            break;
+                        case 'GigaBytes' :
+                            $usage = $mailboxe['consumedSize']['value']*1024;
+                            break;
+                    }
+                    $totalUsage += $usage;
+                }
+            }
+            $storage = $totalUsage == 0 ? 0 : round($totalUsage);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        try
+        {
+            $fields = array(
+                "id",
+                "name");
+            $mailingLists = $api->getMailingLists($fields,$domainID);
+            $countOfDistributionList = count($mailingLists);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        try
+        {
+            $fields = array(
+                "id",
+                "name");
+            $aliases = $api->getAliases($fields,$domainID);
+            $countOfEmailAliases = count($aliases);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
         }
 
-        $countOfDistributionList = count($this->getDistributionList($tenant));
-
-        $domainAliases = $this->getDomainAliases($tenant);
-        $countOfDomainAliases = count($domainAliases);
-
-        $storage = $this->getDomainUsage($tenant);
-
-        $userData = [
+        $domainData = [
             'mailboxes' => $countOfMailboxes,
             'distributionLists' => $countOfDistributionList,
             'aliases' => $countOfEmailAliases,
             'domainAliases' => $countOfDomainAliases,
-            'storage' => round($storage / Size::B_TO_GB, 2),
+            'storage' => $storage,
         ];
 
-        return $this->wrapUserData($userData);
+        $usage = $this->wrapUserData($domainData);
+
+        $api->logout();
+        return $usage;
     }
 
     private function wrapUserData($data)
@@ -148,59 +287,4 @@ class MyMetricProvider implements ProviderInterface
         return $wrapped;
     }
 
-    private function getAccounts($tenant)
-    {
-        $accounts =(new KerioManager())
-            ->getApiByServer($this->moduleParams['serverid'])
-            ->soap
-            ->repository()
-            ->accounts()
-            ->getByDomainName($tenant);
-
-        return $accounts;
-    }
-
-    private function getDomainAliases($tenant)
-    {
-        $domainAliases =(new KerioManager())
-            ->getApiByServer($this->moduleParams['serverid'])
-            ->soap
-            ->repository()
-            ->domains
-            ->getAliases($tenant);
-
-        return $domainAliases;
-    }
-
-    private function getDomainUsage($tenant)
-    {
-        $accounts =(new KerioManager())
-            ->getApiByServer($this->moduleParams['serverid'])
-            ->soap
-            ->repository()
-            ->accounts
-            ->getUsages($tenant);
-
-        $totalUsage = 0;
-        foreach ($accounts as $account)
-        {
-            $usage = $account->getUsed();
-            $totalUsage += $usage;
-        }
-
-        return $totalUsage;
-    }
-
-    private function getDistributionList($tenant)
-    {
-        $distributionList =(new KerioManager())
-            ->getApiByServer($this->moduleParams['serverid'])
-            ->soap
-            ->repository()
-            ->lists
-            ->getAllDistributionListsByDomain($tenant);
-
-        return $distributionList;
-    }
-
 }

+ 3 - 0
app/UI/Client/EmailAccount/Forms/EditAccountForm.php

@@ -6,6 +6,7 @@ use ThurData\Servers\KerioEmail\App\Traits\FormExtendedTrait;
 use ThurData\Servers\KerioEmail\App\UI\Admin\Custom\Forms\SortedFieldForm;
 use ThurData\Servers\KerioEmail\App\UI\Client\EmailAccount\Providers\EditAccountDataProvider;
 use ThurData\Servers\KerioEmail\App\UI\Client\EmailAccount\Sections\EditAdditionalSection;
+use ThurData\Servers\KerioEmail\App\UI\Client\EmailAccount\Sections\EditForwardSection;
 use ThurData\Servers\KerioEmail\App\UI\Client\EmailAccount\Sections\EditGeneralSection;
 use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
 use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\FormConstants;
@@ -39,5 +40,7 @@ class EditAccountForm extends SortedFieldForm implements ClientArea
         $this->addSection(new EditGeneralSection());
 
         $this->addSection(new EditAdditionalSection());
+
+        $this->addSection(new EditForwardSection());
     }
 }

+ 6 - 1
app/UI/Client/EmailAccount/Pages/Accounts.php

@@ -62,6 +62,9 @@ class Accounts extends DataTable implements ClientArea
             ->addColumn((new Column('quota'))
                 ->setOrderable()
                 ->setSearchable(true, Column::TYPE_INT))
+            ->addColumn((new Column('forward'))
+                ->setOrderable()
+                ->setSearchable(true, Column::TYPE_STRING))
             ->addColumn((new Column('status'))
                 ->setOrderable()
                 ->setSearchable(true));
@@ -143,7 +146,8 @@ class Accounts extends DataTable implements ClientArea
             "isEnabled",
             "diskSizeLimit",
             "consumedSize",
-            "lastLoginInfo");
+            "lastLoginInfo",
+            "emailForwarding");
         try {
             $accounts = $api->getUsers($fields,$domainID);
         } catch (KerioApiException $error) {
@@ -168,6 +172,7 @@ class Accounts extends DataTable implements ClientArea
                 'last_login'   => AccountHelper::getFormattedData($account['lastLoginInfo']['dateTime'], 'd/m/Y H:i'),
                 'size'         => AccountHelper::getQuotaAsMb($account['consumedSize']['value'],$account['consumedSize']['units']),
                 'quota'        => $account['diskSizeLimit']['isActive'] ?  AccountHelper::getQuotaAsMb($account['diskSizeLimit']['limit']['value'],$account['diskSizeLimit']['limit']['units']) : '∞',
+                'forward'      => $account['emailForwarding']['emailAddresses'][0],
                 'status'       => $account['isEnabled'] ? 'active' : 'default',
 
             ];

+ 4 - 2
app/UI/Client/EmailAccount/Providers/AccountDataProvider.php

@@ -77,9 +77,11 @@ class AccountDataProvider extends BaseDataProvider
         $account['fullName'] = $this->formData['display_name'];
         if ($this->formData['quota'] > 0) {
             $account['diskSizeLimit']['isActive'] = TRUE;
-            $account['diskSizeLimit']['limit']['value'] = intval($this->formData['quota']);
-            $account['diskSizeLimit']['limit']['units'] = $this->formData['unit'];
+        } else {
+            $account['diskSizeLimit']['isActive'] = FALSE;
         }
+        $account['diskSizeLimit']['limit']['value'] = intval($this->formData['quota']);
+        $account['diskSizeLimit']['limit']['units'] = $this->formData['unit'];
         try {
             $result = $api->modifyUser($userID, $account);
         } catch (KerioApiException $error) {

+ 27 - 7
app/UI/Client/EmailAccount/Providers/EditAccountDataProvider.php

@@ -32,6 +32,7 @@ class EditAccountDataProvider extends BaseDataProvider
             'loginName',
             'fullName',
             'description',
+            'emailForwarding',
             'isEnabled',
             'emailAddresses',
             'diskSizeLimit',
@@ -112,12 +113,22 @@ class EditAccountDataProvider extends BaseDataProvider
         } else {
             $this->data['quota'] = 0;
         }
-
+        if ($account[0]['emailForwarding']['mode'] === 'UForwardYes') {
+            $this->data['forward'] = 'on';
+            $this->data['target'] = $account[0]['emailForwarding']['emailAddresses'][0];
+        }
         $lang = di('lang');
-        $this->availableValues['status'] = [
-            Kerio::ACC_STATUS_ACTIVE        => $lang->absoluteT('kerio','account','status','active'),
-            Kerio::ACC_STATUS_CLOSED        => $lang->absoluteT('kerio','account','status','closed')
-        ];
+        if ($this->data['status'] == 1) {
+            $this->availableValues['status'] = [
+                Kerio::ACC_STATUS_ACTIVE        => $lang->absoluteT('kerio','account','status','active'),
+                Kerio::ACC_STATUS_CLOSED        => $lang->absoluteT('kerio','account','status','closed')
+            ];
+        } else {
+            $this->availableValues['status'] = [
+                Kerio::ACC_STATUS_CLOSED        => $lang->absoluteT('kerio','account','status','closed'),
+                Kerio::ACC_STATUS_ACTIVE        => $lang->absoluteT('kerio','account','status','active')
+            ];
+        }
         $this->availableValues['unit'] = [
             'MegaBytes' => 'MB',
             'GigaBytes' => 'GB',
@@ -140,11 +151,20 @@ class EditAccountDataProvider extends BaseDataProvider
         $account['isEnabled'] = $this->formData['status'] === 'active' ? TRUE : FALSE;
         if ($this->formData['quota'] > 0) {
             $account['diskSizeLimit']['isActive'] = TRUE;
-            $account['diskSizeLimit']['limit']['value'] = intval($this->formData['quota']);
-            $account['diskSizeLimit']['limit']['units'] = $this->formData['unit'];
         } else {
             $account['diskSizeLimit']['isActive'] = FALSE;
         }
+        $account['diskSizeLimit']['limit']['value'] = intval($this->formData['quota']);
+        $account['diskSizeLimit']['limit']['units'] = $this->formData['unit'];
+
+        if ( $this->formData['forward'] == 'on') {
+            $account['emailForwarding']['mode'] = 'UForwardYes';
+            $account['emailForwarding']['emailAddresses'] = [ $this->formData['target'] ];
+        } else {
+            $account['emailForwarding']['mode'] = 'UForwardNone';
+            $account['emailForwarding']['emailAddresses'] = [];
+        }
+
         $fields['firstName'] = $this->formData['firstname'];
         $fields['surName'] = $this->formData['lastname'];
         $fields['commonName'] = $this->formData['display_name'];

+ 33 - 0
app/UI/Client/EmailAccount/Sections/EditForwardSection.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\EmailAccount\Sections;
+
+
+use ThurData\Servers\KerioEmail\App\Traits\FormExtendedTrait;
+use ThurData\Servers\KerioEmail\App\UI\Admin\Custom\Sections\FreeFieldsSection;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Text;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Checkbox;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 12.11.19
+ * Time: 13:52
+ * Class EditAdditionalSection
+ */
+class EditForwardSection extends FreeFieldsSection
+{
+    protected $id   = 'editForwardSection';
+    protected $name = 'editForwardSection';
+
+    use FormExtendedTrait;
+
+    public function initContent()
+    {
+
+        $this->generateDoubleSection([new Checkbox('forward'), new Text('target')]);
+
+    }
+
+}

+ 1 - 1
core/DependencyInjection/Container.php

@@ -19,7 +19,7 @@ class Container extends \Illuminate\Container\Container
         return static::$instance;
     }
 
-    public static function setInstance(ContainerContract $container)
+    public static function setInstance(ContainerContract $container = null)
     {
         self::$instance = $container;
     }

+ 520 - 120
kerioEmail_help_mx.tpl

@@ -1,128 +1,528 @@
-<h2>Information zum MX Eintrag für {$maildomain}</h2>
+<h2>DNS Einstellungen für E-Mail @{$maildomain}</h2>
 <hr>
-
+<div class="alert alert-warning">
+	Wenn Sie Änderungen am DNS gemacht haben, kann es bis zu einer Stunde dauern, bevor die Änderung vollständig repliziert wurde. 
+	Da die Prüfung Ihrer Settings auf dieser Webseite von der Replikation abhängt, wird auch hier die Änderung erst angezeigt, wenn die Replikation abgeschlossen ist. 
+	Vermeiden Sie es bitte, zu versuchen, nach einer Änderung im DNS diese Änderung zu wiederholen, weil das Ergebnis aus obigen Gründen noch nicht direkt angezeigt wird!
+</div>
 <div class="row">
-    <div class="col-xl-9 primary-content left-layout">
-	<div class="section">
-	    <div class="row row-eq-height row-eq-height-sm">
-                <div class="col-md-5">
-		    {$LANG.clientareaproductdetails}
-    		</div>
-	        <div class="col-md-7">
-    		    {$product}
-        	</div>
-    	    </div>
-        </div>
-	<div class="section" style="margin-top: 0px">
-	    <div class="row row-eq-height row-eq-height-sm">
-		<div class="col-md-5">
-    		    Domain
+    <div class="col-xl-12 primary-content left-layout">
+{* debug		
+		mx: {$mx}<br>
+		selfDNS: {$selfDNS}<br>
+		multiMX: {$multiMX}<br>
+		mxtarget: {$mxtarget}<br>
+		domainMX:
+		{foreach $domainMX as $MX}
+			{$MX->preference} {$MX->exchange}<br>
+		{/foreach}
+		SPF: {$spf}<br>
+		multiSPF: {$multiSPF}<br>
+		domainSPF:
+		{foreach $domainSPF as $record}
+			TXT "{$record}"<br>
+		{/foreach}
+*}
+		<div class="row row-eq-height row-eq-height-sm">
+			<div class="col-md-6">
+				<div class="section">
+					<div class="center">
+						<h4>Mails empfangen (MX Eintrag)
+					</div>
+					{if $mx === 'set' && $selfDNS == true && $multiXM == false}
+						<div class="alert alert-success" style="width:90%">
+							Der MX Eintrag ist richtig konfiguriert. Ihr Mailserver empfängt E-Mails für <b>{$maildomain}</b>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Mailserver für {$maildomain}:
+							<div><small>
+								{$mxtarget}
+							</small></div>
+						</div>
+					{elseif $mx === 'set' && $selfDNS == true && $multiMX == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein MX Eintrag mit für {$maildomain} zeigt auf diesen Mailserver. 
+							Es wurden aber weitere MX Einträge für {$maildomain} konfiguriert.
+							<div><small>
+								{foreach $domainMX as $MX}
+									Priorität: {$MX->preference} Ziel: {$MX->exchange}{if $MX->exchange == $mxtarget} ✔ {/if}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+					{elseif $mx === 'set' && $selfDNS == false && $multiMX == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein MX Eintrag mit für {$maildomain} zeigt auf diesen Mailserver. 
+							Es wurden aber weitere MX Einträge für {$maildomain} konfiguriert.
+							<div><small>
+								{foreach $domainMX as $MX}
+									Priorität: {$MX->preference} Ziel: {$MX->exchange}{if $MX->exchange == $mxtarget} ✔ {/if}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $mx === 'set' && $selfDNS == false && $multiMX == false}
+						<div class="alert alert-success" style="width:90%">
+							Der MX Eintrag ist richtig konfiguriert. Ihr Mailserver empfängt E-Mails für <b>{$maildomain}</b>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Mailserver für {$maildomain}:
+							<div><small>
+								{$mxtarget}
+							</small></div>
+						</div>
+					{elseif $mx === 'unset' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein MX Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, müssen Sie bei Ihrem DNS Server einen MX Eintrag für die Domain {$maildomain} mit Ziel <b>{$mxtarget}</b> hinzufügen.<br>
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $mx === 'unset' && $selfDNS == true}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein MX Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, muß ein MX Eintrag für die Domain {$maildomain} mit Ziel {$mxtarget} hinzugefügt werden.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setMX" />
+							<button type="submit" class="btn btn-primary" title="automatisch konfigurieren">
+								MX {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $mx === 'wrong' && $selfDNS == true && $multiMX == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der MX Eintrag für <b>{$maildomain}</b> ist nicht für diesen Mailserver konfiguriert.
+							E-Mails an @{$maildomain} werden an den Server {$mxtarget} geschickt.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, muß ein MX Eintrag für die Domain {$maildomain} korrigiert werden.
+							Bitte beachten Sie, das nach dem Hinzufügen des Eintrags die DNS Replikation abgewartet werden muß.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setMX" />
+							<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+								MX {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $mx === 'wrong' && $selfDNS == true && $multiMX == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der MX Eintrag für <b>{$maildomain}</b> ist nicht für diesen Mailserver konfiguriert.
+							Folgende Mailserver sind für @{$maildomain} konfiguriert:<br>
+							<div><small>
+								{foreach $domainMX as $MX}
+									Priorität: {$MX->preference} Ziel: {$MX->exchange}<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, ein MX Eintrag für die Domain {$maildomain} mit Ziel {$mxtarget} hinzugefügt werden.
+							Bitte beachten Sie, das nach dem Hinzufügen des Eintrags die DNS Replikation abgewartet werden muß.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setMX" />
+							<button type="submit" class="btn btn-primary">
+								MX {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $mx === 'wrong' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der MX Eintrag für <b>{$maildomain}</b> ist nicht für diesen Mailserver konfiguriert.
+							E-Mails an @{$maildomain} werden an den Server {$mxtarget} geschickt.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, muß der MX Eintrag für die Domain {$maildomain} auf das Ziel {$mxtarget} geändert werden.
+							Bitte beachten Sie, das nach dem Hinzufügen des Eintrags die DNS Replikation abgewartet werden muß.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{else}
+						{* sollte nie erreicht werden *}
+						<div class="alert alert-warning" style="width:90%">
+							Beim Versuche, den MX Eintrag für <b>{$maildomain}</b> zu ermitteln, ist ein Fehler aufgetreten.
+							Bitte versuchen Sie es später noch einmal!
+						</div>
+					{/if}
+				</div>
+			</div>
+			<div class="col-md-6">
+				<div class="section">
+					<div class="center">
+						<h4>Mails verschicken (SPF Eintrag)
+					</div>
+					{if $spf === 'set' && $multiSPF == false}
+						<div class="alert alert-success" style="width:90%">
+							Der SPF Eintrag für Ihren Mailserver ist richtig konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							SPF Eintrag für {$maildomain}:
+							<div><small>
+								{$domainSPF.0}
+							</small></div>
+						</div>
+					{elseif $spf === 'set' && $selfDNS == false && $multiSPF == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein korrekter SPF Eintrag für {$maildomain} existiert. 
+							Es wurden aber weitere SPF Einträge für {$maildomain} erkannt.
+							<div><small>
+								{foreach $domainSPF as $SPF}
+									{$SPF}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $spf === 'set' && $selfDNS == true && $multiSPF == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein korrekter SPF Eintrag für {$maildomain} existiert. 
+							Es wurden aber weitere SPF Einträge für {$maildomain} erkannt.
+							<div><small>
+								{foreach $domainSPF as $SPF}
+									{$SPF}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+					{elseif $spf === 'unset' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein SPF Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. Thurdata empfiehlt die Einrichtung eines 
+							SPF Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=spf1 mx a:mail3.seecure.ch ip4:185.163.51.0/24 ip4:89.35.78.0/23 ~all'
+							</small></div>
+						</div>
+					{elseif $spf === 'unset' && $selfDNS == true}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein SPF Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein fehlender SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+						<div class="col-md-4">
+							<form method="post" action="clientarea.php?action=productdetails">
+								<input type="hidden" name="id" value="{$id}" />
+								<input type="hidden" name="modop" value="custom" />
+								<input type="hidden" name="a" value="setSPF" />
+								<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+									SPF {$LANG.orderconfigure}
+								</button>
+							</form>
+						</div>
+					{elseif $spf === 'wrong' && $selfDNS == true && $multiSPF == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Eintrag für {$maildomain}:
+							<div><small>
+								{$domainSPF.0}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setSPF" />
+							<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+								SPF {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $spf === 'wrong' && $selfDNS == false && $multiSPF == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Einträge für {$maildomain}:
+							<div><small>
+								{foreach $domainSPF as $record}
+									TXT "{$record}"<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $spf === 'wrong' && $selfDNS == false && $multiSPF == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Eintrag für {$maildomain}:
+							<div><small>
+								{$domainSPF.0}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $spf === 'wrong' && $selfDNS == true && $multiSPF == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Einträge für {$maildomain}:
+							<div><small>
+								{foreach $domainSPF as $record}
+									TXT "{$record}"<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setSPF" />
+							<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+								SPF {$LANG.orderconfigure}
+							</button>
+						</form>
+					{else}
+						{* sollte nie erreicht werden *}
+						<div class="alert alert-warning" style="width:90%">
+							Beim Versuche, den SPF Eintrag für <b>{$maildomain}</b> zu ermitteln, ist ein Fehler aufgetreten.
+							Bitte versuchen Sie es später noch einmal!
+						</div>
+					{/if}
+				</div>
+			</div>
 		</div>
-		<div class="col-md-7">
-    		    {$maildomain}
+		<div class="row row-eq-height row-eq-height-sm">
+			<div class="col-md-6">
+				<div class="section">
+					<div class="center">
+						<h4>Mails signieren (DKIM Eintrag)
+					</div>
+					{if $dkim === 'set' && $multiDKIM == false}
+						<div class="alert alert-success" style="width:90%">
+							Es existiert ein DKIM Eintrag für <b>{$maildomain}</b>.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							DKIM Eintrag für {$maildomain}:
+							<div><small>
+								{$domainDKIM}
+							</small></div>
+						</div>
+					{elseif $dkim === 'set' && $multiDKIM == true}
+						<div class="alert alert-info" style="width:90%">
+							Es wurden mehrere DKIM Einträge für {$maildomain} konfiguriert.
+							<div><small>
+								{foreach $domainDKIM as $DKIM}
+									{$DKIM}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+					{elseif $dkim === 'unset' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein DKIM Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit Mailserver, die E-Mails vom @{$maildomain} empfangen, die Signatur dieser E-Mails überprüfen können, muß ein DKIM Eintrag für {$maildomain} konfiguriert werden.<br>
+							Bitte fragen Sie unseren Support nach den nötigen Daten und beauftragen Sie den Support Ihres Nameserver Providers, diese einzupflegen.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen. {$domainId}
+						</div>
+					{elseif $dkim === 'unset' && $selfDNS == true}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein DKIM Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+						Damit Mailserver, die E-Mails vom @{$maildomain} empfangen, die Signatur dieser E-Mails überprüfen können, muß ein DKIM Eintrag für {$maildomain} konfiguriert werden.<br>
+						Nehmen Sie dafür bitte Kontakt mit unserem Support auf!
+					</div>
+					{else}
+						{* sollte nie erreicht werden *}
+						<div class="alert alert-warning" style="width:90%">
+							Beim Versuch, den DKIM Eintrag für <b>{$maildomain}</b> zu ermitteln, ist ein Fehler aufgetreten.
+							Bitte versuchen Sie es später noch einmal!
+						</div>
+					{/if}
+				</div>
+			</div>
+			<div class="col-md-6">
+				<div class="section">
+					<div class="center">
+						<h4>E-Mail Empfängerrichtlinien (DMARC Eintrag)
+					</div>
+					{if $dmarc === 'set' && $multiDMARC == false}
+						<div class="alert alert-success" style="width:90%">
+							Der DMARC Eintrag für Ihren Mailserver ist richtig konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							DMARC Eintrag für {$maildomain}:
+							<div><small>
+								{$domainDMARC.0}
+							</small></div>
+						</div>
+					{elseif $dmarc === 'set' && $selfDNS == false && $multiDMARC == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein korrekter DMARC Eintrag für {$maildomain} existiert. 
+							Es wurden aber weitere DMARC Einträge für {$maildomain} erkannt.
+							<div><small>
+								{foreach $domainDMARC as $DMARC}
+									{$DMARC}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $dmarc === 'set' && $selfDNS == true && $multiDMARC == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein korrekter DMARC Eintrag für {$maildomain} existiert. 
+							Es wurden aber weitere DMARC Einträge für {$maildomain} erkannt.
+							<div><small>
+								{foreach $domainDMARC as $DMARC}
+									{$SPF}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+					{elseif $dmarc === 'unset' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein DMARC Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher DMARC Eintrag kann zu Zustellungsproblemen bei einigen E-Mail Providern führen. Thurdata empfiehlt die Einrichtung eines 
+							DMARC Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=DMARC1; p=reject; rua=mailto:technik@thurdata.ch; ruf=mailto:technik@thurdata.ch'
+							</small></div>
+						</div>
+					{elseif $dmarc === 'unset' && $selfDNS == true}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein DMARC Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein fehlender DMARC Eintrag kann zu Zustellungsproblemen bei einigen E-Mail Providern führen. 
+							Thurdata empfiehlt die Einrichtung eines DMARC Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=DMARC1; p=reject; rua=mailto:technik@thurdata.ch; ruf=mailto:technik@thurdata.ch'
+							</small></div>
+						</div>
+					{elseif $dmarc === 'wrong' && $selfDNS == true && $multiDMARC == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der DMARC Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							DMARC Eintrag für {$maildomain}:
+							<div><small>
+								{$domainDMARC.0}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher DMARC Eintrag kann zu Zustellungsproblemen bei einigen E-Mail Providern führen. 
+							Thurdata empfiehlt die Einrichtung eines DMARC Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=DMARC1; p=reject; rua=mailto:technik@thurdata.ch; ruf=mailto:technik@thurdata.ch'
+							</small></div>
+						</div>
+					{elseif $dmarc === 'wrong' && $selfDNS == false && $multiDMARC == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der DMARC Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							DMARC Einträge für {$maildomain}:
+							<div><small>
+								{foreach $domainDMARC as $record}
+									{$record}<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher DMARC Eintrag kann zu Zustellungsproblemen bei einigen E-Mail Providern führen. 
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Thurdata empfiehlt die Einrichtung eines DMARC Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=DMARC1; p=reject; rua=mailto:technik@thurdata.ch; ruf=mailto:technik@thurdata.ch'
+							</small></div>
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $dmarc === 'wrong' && $selfDNS == false && $multiDMARC == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der DMARC Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							DMARC Eintrag für {$maildomain}:
+							<div><small>
+								{$domainDMARC.0}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher DMARC Eintrag kann zu Zustellungsproblemen bei einigen E-Mail Providern führen. 
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Thurdata empfiehlt die Einrichtung eines DMARC Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=DMARC1; p=reject; rua=mailto:technik@thurdata.ch; ruf=mailto:technik@thurdata.ch'
+							</small></div>
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $dmarc === 'wrong' && $selfDNS == true && $multiDMARC == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der DMARC Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							DMARC Einträge für {$maildomain}:
+							<div><small>
+								{foreach $domainDMARC as $record}
+									{$record}<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Thurdata empfiehlt die Einrichtung eines DMARC Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=DMARC1; p=reject; rua=mailto:technik@thurdata.ch; ruf=mailto:technik@thurdata.ch'
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+					{else}
+						{* sollte nie erreicht werden *}
+						<div class="alert alert-warning" style="width:90%">
+							Beim Versuche, den DMARC Eintrag für <b>{$maildomain}</b> zu ermitteln, ist ein Fehler aufgetreten.
+							Bitte versuchen Sie es später noch einmal!
+						</div>
+					{/if}
+				</div>
+			</div>
 		</div>
-	    </div>
-	</div>
-	<div class="section">
-	    {if $action === 'show'}
-		<div class="alert alert-success" style="width:90%">
-	            Der MX Eintrag ist richtig konfiguriert. Ihr Mailserver empfängt E-Mails für <b>{$maildomain}</b>
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Mailserver für {$maildomain}: {$mxtarget}
-	        </div>
-	    {elseif $action === 'set'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag fehlt. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !
-	        </div>
-	        <div class="alert alert-info">
-	            Klicken Sie auf <b>MX konfigurieren</b> um den Mailempfang für <b>{$maildomain}</b auf Ihr Thurmail Produkt zu aktivieren.
-	        </div>
-	    {elseif $action === 'change'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag ist falsch. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !<br>
-	            Mail für <b>{$maildomain}</b werden an den Server <b>{$mxtarget}</b> verschickt.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Klicken Sie auf <b>MX konfigurieren</b> um den Mailempfang für <b>{$maildomain}</b auf Ihr Thurmail Produkt zu aktivieren.
-	        </div>
-	    {elseif $action === 'noMX'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag fehlt. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-		    Sie müssen den MX Eintrag bei Ihrem DNS-Hoster konfigurieren.<br>
-	            Alternativ bieten wir Ihnen die Option, Ihre Domain <b>{$maildomain}</b><br />
-	            zu uns zu transferieren und hier im Portal zu verwalten.
-	        </div>
-	    {elseif $action === 'wrongMX'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag ist falsch. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !<br>
-	            Mail für <b>{$maildomain}</b> werden an den Server <b>{$mxtarget}</b> verschickt.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Sie müssen den MX Eintrag bei Ihrem DNS-Hoster anpassen.<br>
-	            Alternativ bieten wir Ihnen die Option, Ihre Domain <b>{$maildomain}</b><br />
-	            zu uns zu transferieren und hier im Portal zu verwalten.
-	        </div>
-	    {elseif $action === 'manual'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Es wurden mehrere MX Einträge für <b>{$maildomain}</b> gefunden.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Sie haben bereits mehrere MX Einträge für Ihre Domain <b>{$maildomain}</b> konfiguriert.<br>
-	            Da Sie Ihre Domain bei uns verwalten können Sie den DNS-Manager aufrufen, um Ihre MX Einträge zu prüfen.
-	        </div>
-	    {elseif $action === 'manualext'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Es wurden mehrere MX Einträge für <b>{$maildomain}</b> bei einem externen Registrar gefunden.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Sie haben mehrere MX Einträge für Ihre Domain <b>{$maildomain}</b> bereits anderweitig konfiguriert.<br>
-	            Sie können Ihre MX Einträge bei Ihrem Registrar prüfen.<br>
-	            Alternativ bieten wir Ihnen die Option, Ihre Domain <b>{$maildomain}</b><br />
-	            zu uns zu transferieren und hier im Portal zu verwalten.
-	        </div>
-	    {/if}
-	</div>
-	<div class="clear"><br /><br /><br /></div>
-	<div class="section">
-	    <div class="row row-eq-height row-eq-height-sm">
-		<div class="col-md-4">
-    		    <form method="post" action="clientarea.php?action=productdetails">
-	        	<input type="hidden" name="id" value="{$id}" />
-    			<button type="submit" class="btn btn-default btn-block">
-            		    {$LANG.clientareabacklink}
-	        	</button>
-    		    </form>
+		<div class="clear">
+			<br /><hr /><br />
 		</div>
-		<div class="col-md-4">
-		    {if $action === 'show'}
-		    {elseif $action === 'set' || $action === 'change'}
-    			<form method="post" action="clientarea.php?action=productdetails">
-	        	    <input type="hidden" name="id" value="{$id}" />
-    			    <input type="hidden" name="modop" value="custom" />
-	        	    <input type="hidden" name="a" value="setMX" />
-	        	    <button type="submit" class="btn btn-default btn-block">
-    		    		MX {$LANG.orderconfigure}
-	        	    </button>
-	    		</form>
-    		    {elseif $action === 'manual'}
-    			<form method="post" action="clientarea.php?action=domaindns&domainid={$domainId}">
-	        	    <button type="submit" class="btn btn-default btn-block">
-    		    		{$LANG.domaindnsmanagement}
-	        	    </button>
-	    		</form>
-		    {else}
-    			<form method="post" action="cart.php?a=add&domain=transfer">
-			    <input type="hidden" name="sld" value="{$maildomain}" />
-	        	    <button type="submit" class="btn btn-default btn-block">
-            			{$LANG.domainstransfer} {$maildomain}
-	        	    </button>
-    			</form>
-		    {/if}
+		<div class="row row-eq-height row-eq-height-sm">
+			<div class="col-md-4">
+				<form method="post" action="clientarea.php?action=productdetails&id={$id}">
+					<input type="hidden" name="id" value="{$id}" />
+					<button type="submit" class="btn btn-default">
+						{$LANG.clientareabacklink}
+					</button>
+				</form>
+			</div>
+			{* Wenn bei Fehlern die Domain nicht selbst verwaltet wird, biete Domaintransfer an *}
+			{if $selfDNS == false && ($multiMX == true || $mx != 'set' || $multiSPF == true || $spf != 'set')}
+				<div class="col-md-4">
+					<form method="post" action="cart.php?a=add&domain=transfer">
+						<input type="hidden" name="sld" value="{$maildomain}" />
+						<button type="submit" class="btn btn-primary">
+							{$LANG.domainstransfer} {$maildomain}
+						</button>
+					</form>
+				</div>
+			{/if}
 		</div>
-	    </div>
 	</div>
-    </div>
 </div>

+ 177 - 75
kerioEmail_mx.php

@@ -10,90 +10,33 @@ const NS1 = '185.163.51.130';
 const NS2 = '185.163.51.131';
 const MX  = 'mail3.seecure.ch';
 const SPF = 'v=spf1 mx a:mail3.seecure.ch ip4:185.163.51.0/24 ip4:89.35.78.0/23 ~all';
+const DMARC = 'v=DMARC1; p=reject; rua=mailto:technik@thurdata.ch; ruf=mailto:technik@thurdata.ch';
 
 function KerioEmail_ClientAreaCustomButtonArray ($params)
 {
-    $mxStatus = KerioEmailCheckMX($params);
-    switch($mxStatus['action']) {
-        case 'set':
-            return array(
-                'MX Info' => 'infoMX',
-                'MX Setzen' => 'setMX',
-            );
-        case 'change':
-            return array(
-                'MX Info' => 'infoMX',
-                'MX Ändern' => 'setMX',
-            );
-        default:
-            return array(
-                'MX Info' => 'infoMX',
-            );
-    }
+    return array(
+        'DNS-Settings' => 'DNS',
+    );
 }
 
-function KerioEmail_infoMX($params)
+function KerioEmail_ClientAreaAllowedFunctions ($params)
 {
-    $mxStatus = KerioEmailCheckMX($params);
     return array(
-        'breadcrumb' => array(
-            'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=infoMX' => 'MX Info',
-        ),
-        'templatefile' => 'kerioEmail_help_mx',
-        'vars' => array(
-            'maildomain' => $params['domain'],
-            'action' => $mxStatus['action'],
-            'mxtarget' => (isset($mxStatus['mxtarget']) ? $mxStatus['mxtarget'] : 'false'),
-        ),
+        'MX konfigurieren' => 'setMX',
+        'SPF konfigurieren' => 'setSPF',
     );
 }
 
-function KerioEmailCheckMX($params)
+function KerioEmail_DNS($params)
 {
-    unset($zoneID);
-    unset($mxStatus);
-    $clientDomains = localAPI('GetClientsDomains', array('clientid' => $params['userid']));
-    $nameserver = array(
-        NS1,
-        NS2);
-    
-    $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver));
-    try {
-            $result = $resolver->query($params['domain'], 'MX');
-            
-    } catch(Net_DNS2_Exception $e) {
-            
-            echo "::query() failed: ", $e->getMessage(), "\n";
-    }
-    $domainMX = $result->answer;
-    if(count($domainMX) > 1) {
-        for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
-            if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
-                return array('action' => 'manual', 'mxtarget' => $domainMX);
-            }
-        }
-        return array('action' => 'manualext', 'mxtarget' => $domainMX);
-    }
-    if(empty($domainMX)){
-        for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
-            if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
-                return array('action' => 'set');
-            }
-        }
-        return array('action' => 'noMX');
-    } else {
-        $domainMXrecord = array_shift($domainMX);
-//        if($domainMXrecord['target'] == $params['serverhostname']) {
-        if($domainMXrecord->exchange == MX) {
-            return array('action' => 'show', 'mxtarget' => $domainMXrecord->exchange);
-        }
-        for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
-            if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
-                return array('action' => 'change', 'mxtarget' => $domainMXrecord->exchange);
-            }
-        }
-        return array('action' => 'wrongMX', 'mxtarget' => $domainMXrecord->exchange);
-    }
+    $vars = KerioEmailCheckDNS($params);
+    return array(
+        'breadcrumb' => array(
+            'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=DNS' => 'DNS Mail Settings',
+        ),
+        'templatefile' => 'kerioEmail_help_mx',
+        'vars' => $vars,
+    );
 }
 
 function KerioEmail_setMX($params)
@@ -119,11 +62,44 @@ function KerioEmail_setMX($params)
         'class' => 'IN',
         'data' => array(
             'preference' => '10',
-//            'exchange' => $params['serverhostname'],
             'exchange' => MX,
         ),
     );
     array_push($zoneRecords, $mxRecord);
+    foreach($dnsZone['data']->records as $record) {
+    if($record->type != 'MX') {
+            array_push($zoneRecords, $record);
+        };
+    }
+    $result = localAPI('dnsmanager' ,
+        array(
+            'dnsaction' => 'updateZone',
+            'zone_id' => $zoneID,
+            'records' => $zoneRecords,
+        )
+    );
+    if($result['result'] != 'success') {
+        return 'Error: cloud not update zone for ID ' . $zoneID;
+    }
+    return 'success';
+}
+
+function KerioEmail_setSPF($params)
+{
+    $zoneIDcollection = Capsule::table('dns_manager2_zone')
+        ->select('id')
+        ->where('name', '=', $params['domain'])
+        ->get();
+    $zoneIDobj = $zoneIDcollection[0];
+    $zoneID = $zoneIDobj->{'id'};
+    if(!isset($zoneID)) {
+        return 'Error: zone ID not found for domain ' . $params['domain'];
+    }
+    $dnsZone = localAPI('dnsmanager', array( 'dnsaction' => 'getZone', 'zone_id' => $zoneID));
+    if($dnsZone['result'] != 'success') {
+        return 'Error: cloud not fetch zone for ID ' . $zoneID;
+    }
+    $zoneRecords = array();
     $spfRecord = array(
             'line' => $params['domain'].'.|TXT|0',
             'name' => '@',
@@ -132,8 +108,12 @@ function KerioEmail_setMX($params)
             'data' => SPF
         );
     array_push($zoneRecords, $spfRecord);
+
     foreach($dnsZone['data']->records as $record) {
-    if(($record->type != 'MX') && ($record->data != SPF)) {
+
+        if(!$record->type === 'TXT'){
+            array_push($zoneRecords, $record);
+        } elseif (!preg_match('/^v=spf(.*)$/i', trim($record->rdata->txtdata,'"'))) {
             array_push($zoneRecords, $record);
         };
     }
@@ -144,9 +124,131 @@ function KerioEmail_setMX($params)
             'records' => $zoneRecords,
         )
     );
+
     if($result['result'] != 'success') {
         return 'Error: cloud not update zone for ID ' . $zoneID;
     }
     return 'success';
 }
 
+function KerioEmailCheckDNS($params)
+{
+    unset($zoneID);
+    unset($mxStatus);
+    unset($dnsData);
+    unset($vars);
+    $vars['maildomain'] = $params['domain'];
+    $clientDomains = localAPI('GetClientsDomains', array('clientid' => $params['userid']));
+    $nameserver = array(
+        NS1,
+        NS2);
+    
+    $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver));
+    try {
+            $result = $resolver->query($params['domain'], 'MX');
+            
+    } catch(Net_DNS2_Exception $e) {
+            
+            echo "::query() failed: ", $e->getMessage(), "\n";
+    }
+    $domainMX = $result->answer;
+    try {
+        $result = $resolver->query($params['domain'], 'TXT');
+        
+    } catch(Net_DNS2_Exception $e) {
+            
+            echo "::query() failed: ", $e->getMessage(), "\n";
+    }
+    $domainTXT = $result->answer;
+    $domainSPF = array();
+    $domainDKIM = array();
+    $domainDMARC = array();
+    foreach($domainTXT as $txtRecord) {
+        foreach($txtRecord->text as $txtData) {
+            if(strstr($txtData,'v=spf')) {
+                array_push($domainSPF,$txtData);
+            }
+            if(strstr($txtData,'v=DKIM')) {
+                array_push($domainDKIM,$txtData);
+            }
+            if(strstr($txtData,'v=DMARC')) {
+                array_push($domainDMARC,$txtData);
+            }
+        }
+    }
+    # self hosted DNS
+    $vars['selfDNS'] = FALSE;
+    for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
+        if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
+            $vars['selfDNS'] = TRUE;
+            $vars['domainId'] = $clientDomains['domains']['domain'][$i]['id'];
+        }
+    }
+    # SPF
+    if (count($domainSPF) > 1) {
+        $vars['multiSPF'] = TRUE;
+    } else {
+        $vars['multiSPF'] = FALSE;
+    }
+    $vars['spf'] = 'wrong';
+    if (empty($domainSPF)) {
+        $vars['spf'] = 'unset';
+    } else {        
+        foreach($domainSPF as $spf) {
+            if($spf === SPF) {
+                $vars['spf'] = 'set';
+            }
+        }
+    }
+    $vars['domainSPF'] = $domainSPF;
+    # DKIM
+    if (count($domainDKIM) > 1) {
+        $vars['multiDKIM'] = TRUE;
+    } else {
+        $vars['multiDKIM'] = FALSE;
+    }
+    if (empty($domainDKIM)) {
+        $vars['dkim'] = 'unset';
+    } else {        
+        $vars['dkim'] = 'set';
+    }
+    $vars['domainDKIM'] = $domainDKIM;
+    # DMARC
+    if (count($domainDMARC) > 1) {
+        $vars['multiDMARC'] = TRUE;
+    } else {
+        $vars['multiDMARC'] = FALSE;
+    }
+    $vars['dmarc'] = 'wrong';
+    if (empty($domainDMARC)) {
+        $vars['dmarc'] = 'unset';
+    } else {        
+        foreach($domainDMARC as $dmarc) {
+            if($dmarc === DMARC) {
+                $vars['dmarc'] = 'set';
+            }
+        }
+    }
+    $vars['domainDMARC'] = $domainDMARC;
+    # MX
+    if(count($domainMX) > 1) {
+        $vars['multiMX'] = TRUE;
+    } else {
+        $vars['multiMX'] = FALSE;
+    }
+    if(empty($domainMX)){
+        $vars['mx'] = 'unset';
+        $vars['mxtarget'] = MX;
+    } else {
+        $vars['domainMX'] = $domainMX;
+        $domainMXrecord = array_shift($domainMX);
+        $vars['mxtarget'] = $domainMXrecord->exchange;
+        if($domainMXrecord->exchange == MX) {
+            $vars['mx'] = 'set';
+        } else {
+            $var['mx'] = 'wrong';
+        }
+    }
+    return $vars;
+}
+

+ 7 - 1
langs/german.php

@@ -283,6 +283,7 @@ $_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['table']['date_cr
 $_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['table']['last_login'] = 'Letztes Login';
 $_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['table']['size'] = 'Größe (MB)';
 $_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['table']['quota'] = 'Quota (MB)';
+$_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['table']['forward'] = 'Weiterleitung';
 $_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['table']['status'] = 'Status';
 $_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['editAccountButton']['button']['editAccountButton'] = 'Editieren';
 $_LANG['addonCA']['emailAccount']['mainContainer']['accounts']['deleteAccountButton']['button']['deleteAccountButton'] = 'Löschen';
@@ -334,7 +335,7 @@ $_LANG['addonCA']['ressource']['addRessourceModal']['status']['status'] = 'Statu
 $_LANG['addonCA']['ressource']['addRessourceModal']['baseAcceptButton']['title'] = 'Bestätigen';
 $_LANG['addonCA']['ressource']['addRessourceModal']['baseCancelButton']['title'] = 'Abbrechen';
 
-$_LANG['addonCA']['ressource']['editRessourceModal']['modal']['addRessourceModal'] = 'Ressource bearbeiten';
+$_LANG['addonCA']['ressource']['editRessourceModal']['modal']['editRessourceModal'] = 'Ressource bearbeiten';
 $_LANG['addonCA']['ressource']['editRessourceModal']['usernameGroup']['usernameGroup'] = 'E-Mail Adresse';
 $_LANG['addonCA']['ressource']['editRessourceModal']['description']['description'] = 'Beschreibung';
 $_LANG['addonCA']['ressource']['editRessourceModal']['type']['type'] = 'Typ';
@@ -363,6 +364,7 @@ $_LANG['kerio']['account']['status']['maintenance'] = 'Maintenance';
 $_LANG['kerio']['account']['status']['closed'] = 'Geschlossen';
 $_LANG['kerio']['account']['status']['lockout'] = 'Gesperrt';
 $_LANG['kerio']['account']['status']['pending'] = 'Pending';
+$_LANG['kerio']['account']['status']['default'] = 'Deaktiviert';
 
 $_LANG['kerio']['ressource']['type']['location'] = 'Ort';
 $_LANG['kerio']['ressource']['type']['equipment'] = 'Inventar';
@@ -379,6 +381,7 @@ $_LANG['ressourceHasBeenDeleted'] = 'Die Ressource wurde erfolgreich gelöscht';
 
 $_LANG['addonCA']['emailAccount']['editAccountModal']['editGeneralSection'] = 'Allgemein';
 $_LANG['addonCA']['emailAccount']['editAccountModal']['editAdditionalSection'] = 'Zusätzliche Informationen';
+$_LANG['addonCA']['emailAccount']['editAccountModal']['editForwardSection'] = 'Weiterleitung';
 $_LANG['addonCA']['emailAccount']['editAccountModal']['modal']['editAccountModal'] = 'Account bearbeiten';
 $_LANG['addonCA']['emailAccount']['editAccountForm']['editGeneralSection']['generated_row_section_0']['generated_0_0']['firstname']['firstname'] = 'Vorname';
 $_LANG['addonCA']['emailAccount']['editAccountForm']['editGeneralSection']['generated_row_section_0']['generated_0_1']['lastname']['lastname'] = 'Nachname';
@@ -397,6 +400,8 @@ $_LANG['addonCA']['emailAccount']['editAccountForm']['editAdditionalSection']['g
 $_LANG['addonCA']['emailAccount']['editAccountForm']['editAdditionalSection']['generated_row_section_1']['generated_1_1']['office']['office'] = 'Büro';
 $_LANG['addonCA']['emailAccount']['editAccountForm']['editAdditionalSection']['generated_row_section_2']['generated_2_0']['work_phone']['work_phone'] = 'Telefon';
 $_LANG['addonCA']['emailAccount']['editAccountForm']['editAdditionalSection']['generated_row_section_2']['generated_2_1']['mobile_phone']['mobile_phone'] = 'Mobil';
+$_LANG['addonCA']['emailAccount']['editAccountForm']['editForwardSection']['generated_row_section_0']['generated_0_0']['forward']['forward'] = 'Weiterleitung aktiv';
+$_LANG['addonCA']['emailAccount']['editAccountForm']['editForwardSection']['generated_row_section_0']['generated_0_1']['target']['target'] = 'Weiterleitung an';
 $_LANG['addonCA']['emailAccount']['editAccountModal']['baseAcceptButton']['title'] = 'Bestätigen';
 $_LANG['addonCA']['emailAccount']['editAccountModal']['baseCancelButton']['title'] = 'Abbrechen';
 
@@ -637,6 +642,7 @@ $_LANG['Automatically reject'] = 'Automatisch zurückweisen';
 $_LANG['Require moderator approval'] = 'Benötigt die Bestätigung des Moderators';
 $_LANG['mail@example.com'] = 'mail@example.com';
 $_LANG['phoneNumberPlaceholder'] = '071 111 22 33';
+$_LANG['kerio']['account']['status']['default']  = 'Deaktiviert';
 $_LANG['kerio']['account']['status']['disabled']  = 'Deaktiviert';
 $_LANG['kerio']['account']['status']['enabled'] = 'Aktiviert';
 $_LANG['Sender'] = 'Sender';

+ 5 - 5
templates/client/default/controlers/main.tpl

@@ -255,7 +255,7 @@
                                           <table width="100%" cellspacing="0" cellpadding="0" class="frame">
                                             <tr>
                                               <td align='left'>Webmail URL</td>
-                                              <td align="left"><a href="https://mail1.thurdata.ch" target="_blank">https://mail1.thurdata.ch</a></td>
+                                              <td align="left"><a href="https://{$serverdata.hostname}" target="_blank">https://{$serverdata.hostname}</a></td>
                                             </tr>
                                             <tr>
                                               <td colspan=2 align='left'>
@@ -295,7 +295,7 @@
                                             </tr>
                                             <tr>
                                               <td align='left'>Exchange Server</td>
-                                              <td align="left">mail1.thurdata.ch</td>
+                                              <td align="left">{$serverdata.hostname}</td>
                                             </tr>
                                             <tr>
                                               <td align='left'>Sicherheit</td>
@@ -313,7 +313,7 @@
                                             </tr>
                                             <tr>
                                               <td align='left'>Server Name</td>
-                                              <td align="left">mail1.thurdata.ch</td>
+                                              <td align="left">{$serverdata.hostname}</td>
                                             </tr>
                                             <tr>
                                               <td align='left'>Server Type</td>
@@ -339,7 +339,7 @@
                                             </tr>
                                             <tr>
                                               <td align='left'>Server Name</td>
-                                              <td align="left">mail1.thurdata.ch</td>
+                                              <td align="left">{$serverdata.hostname}</td>
                                             </tr>
                                             <tr>
                                               <td align='left'>Server Type</td>
@@ -365,7 +365,7 @@
                                             </tr>
                                             <tr>
                                               <td align='left'>Server Name</td>
-                                              <td align="left">mail1.thurdata.ch</td>
+                                              <td align="left">{$serverdata.hostname}</td>
                                             </tr>
                                             <tr>
                                               <td align='left'>Server Type</td>

+ 0 - 17
vendor/mso/idna-convert/.gitattributes

@@ -1,17 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
-
-# Custom for Visual Studio
-*.cs     diff=csharp
-
-# Standard to msysgit
-*.doc	 diff=astextplain
-*.DOC	 diff=astextplain
-*.docx diff=astextplain
-*.DOCX diff=astextplain
-*.dot  diff=astextplain
-*.DOT  diff=astextplain
-*.pdf  diff=astextplain
-*.PDF	 diff=astextplain
-*.rtf	 diff=astextplain
-*.RTF	 diff=astextplain

+ 0 - 4
vendor/mso/idna-convert/.gitignore

@@ -1,4 +0,0 @@
-/vendor/
-.htaccess
-.idea
-IdnaConvert-*.zip

+ 0 - 5
vendor/piwik/ini/.gitattributes

@@ -1,5 +0,0 @@
-# .gitattributes
-tests/ export-ignore
-
-# Auto detect text files and perform LF normalization
-* text=auto

+ 0 - 3
vendor/piwik/ini/.gitignore

@@ -1,3 +0,0 @@
-/composer.phar
-/composer.lock
-/vendor/

+ 0 - 3
vendor/psr/container/.gitignore

@@ -1,3 +0,0 @@
-composer.lock
-composer.phar
-/vendor/

+ 0 - 1
vendor/psr/log/.gitignore

@@ -1 +0,0 @@
-vendor

+ 0 - 5
vendor/rappasoft/laravel-helpers/.gitignore

@@ -1,5 +0,0 @@
-/vendor
-composer.phar
-composer.lock
-.DS_Store
-.idea

+ 0 - 3
vendor/symfony/cache/.gitignore

@@ -1,3 +0,0 @@
-composer.lock
-phpunit.xml
-vendor/

+ 0 - 3
vendor/symfony/dependency-injection/.gitignore

@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml

+ 0 - 3
vendor/symfony/http-foundation/.gitignore

@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml

+ 0 - 3
vendor/symfony/yaml/.gitignore

@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml