Browse Source

new settings section

andre 6 months ago
parent
commit
a3abc257bd
25 changed files with 1142 additions and 17 deletions
  1. 2 1
      app/Enums/ControllerEnums.php
  2. 7 14
      app/Http/Client/Settings.php
  3. 2 1
      app/Libs/Migrations/Drivers/Version1To2/Settings.php
  4. 4 1
      app/Libs/Product/ProductManager.php
  5. 3 0
      app/UI/Admin/ProductConfiguration/Pages/Sections/ClientAreaFeatures.php
  6. 1 0
      app/UI/Admin/ProductConfiguration/Providers/ProductConfigurationDataProvider.php
  7. 10 0
      app/UI/Client/Home/Pages/Dashboard.php
  8. 31 0
      app/UI/Client/Settings/Buttons/ChangeStatusButton.php
  9. 32 0
      app/UI/Client/Settings/Buttons/EditSettingsButton.php
  10. 28 0
      app/UI/Client/Settings/Buttons/MassChangeStatusButton.php
  11. 19 0
      app/UI/Client/Settings/Buttons/SpanDropdownButton.php
  12. 44 0
      app/UI/Client/Settings/Forms/ChangeStatusForm.php
  13. 55 0
      app/UI/Client/Settings/Forms/EditSettingsForm.php
  14. 35 0
      app/UI/Client/Settings/Forms/MassChangeStatusForm.php
  15. 26 0
      app/UI/Client/Settings/Modals/ChangeStatusModal.php
  16. 27 0
      app/UI/Client/Settings/Modals/EditSettingsModal.php
  17. 28 0
      app/UI/Client/Settings/Modals/MassChangeStatusModal.php
  18. 30 0
      app/UI/Client/Settings/Modals/MassDeleteSettingsModal.php
  19. 190 0
      app/UI/Client/Settings/Pages/Settings.php
  20. 216 0
      app/UI/Client/Settings/Providers/EditSettingsDataProvider.php
  21. 171 0
      app/UI/Client/Settings/Providers/SettingsDataProvider.php
  22. 39 0
      app/UI/Client/Settings/Sections/AdditionalSection.php
  23. 40 0
      app/UI/Client/Settings/Sections/EditAdditionalSection.php
  24. 62 0
      app/UI/Client/Settings/Sections/EditGeneralSection.php
  25. 40 0
      app/UI/Client/Settings/Sections/GeneralSection.php

+ 2 - 1
app/Enums/ControllerEnums.php

@@ -19,5 +19,6 @@ class ControllerEnums
     const WEBMAIL_PAGE              = 'ca_goToWebmailPage';
     const DISTRIBUTION_MAIL_PAGE    = 'ca_distributionListPage';
     const RESSOURCE_PAGE            = 'ca_ressourcePage';
+    const SETTINGS_PAGE             = 'ca_ressourcePage';
 
-}
+}

+ 7 - 14
app/Http/Client/Dns.php → app/Http/Client/Settings.php

@@ -33,22 +33,15 @@ class Dns extends AbstractClientController
     {
         $productManager = new ProductManager();
         $productManager->loadByHostingId($this->request->get('id'));
-        if ($this->getWhmcsParamByKey('status') === 'Active')
+        if ($this->getWhmcsParamByKey('status') !== 'Active' || !$productManager->isControllerAccessible(ControllerEnums::SETTINGS_PAGE))
         {
-            $dnshelper = new DnsHelper;
-            $response = $dnshelper->KerioEmailsetDNS();
-        
-            logModuleCall(
-                'kerioEmail',
-                __FUNCTION__,
-                $response,
-                'Debug',
-                $this->params
-            );
-
             return Helper\redirectByUrl(BuildUrlExtended::getProvisioningUrl('',false,false));
-        } else {
-            return 'error';
         }
+
+        return Helper\view()
+            ->addElement(new Description('ressource'))
+            ->addElement(Ressources::class)
+            ;
+
     }
 }

+ 2 - 1
app/Libs/Migrations/Drivers/Version1To2/Settings.php

@@ -183,8 +183,9 @@ class Settings
             'clientAreaFeaturesRight'   => 'on',
             'ca_emailAliasesPage'       => 'on',
             'ca_domainAliasesPage'      => 'on',
+            'ca_settingsPage'           => 'on',
         ];
 
     }
 
-}
+}

+ 4 - 1
app/Libs/Product/ProductManager.php

@@ -269,6 +269,9 @@ class ProductManager
             case 'domainAlias':
                 $controller = ControllerEnums::DOMAIN_ALIAS_PAGE;
                 break;
+            case 'settings':
+                $controller = ControllerEnums::SETTINGS_PAGE;
+                break;
             case 'goWebmail':
                 $controller = ControllerEnums::WEBMAIL_PAGE;
                 break;
@@ -374,4 +377,4 @@ class ProductManager
 
 
 
-}
+}

+ 3 - 0
app/UI/Admin/ProductConfiguration/Pages/Sections/ClientAreaFeatures.php

@@ -48,6 +48,9 @@ class ClientAreaFeatures extends BoxSectionExtended implements AdminArea
         $field = new Switcher('ca_ressourcePage');
         $leftSection->addField($field);
 
+        $field = new Switcher('ca_settingsPage');
+        $leftSection->addField($field);
+
         return $leftSection;
 
     }

+ 1 - 0
app/UI/Admin/ProductConfiguration/Providers/ProductConfigurationDataProvider.php

@@ -48,6 +48,7 @@ class ProductConfigurationDataProvider extends BaseDataProvider implements Admin
         'ca_goToWebmailPage',
         'ca_emailAliasesPage',
         'ca_domainAliasesPage',
+        'ca_settingsPage',
         'ca_logInToMailboxButton',
     ];
 

+ 10 - 0
app/UI/Client/Home/Pages/Dashboard.php

@@ -95,6 +95,16 @@ class Dashboard extends BaseContainer implements ClientArea
             $this->addFeature($feature);
         }
 
+        /**
+         *
+         * check if settings page is enabled
+         */
+        if($productManager->isControllerAccessible(ControllerEnums::SETTINGS_PAGE)) {
+            $feature = new FeatureField('settings');
+            $feature->setUrl(BuildUrlExtended::getProvisioningUrl('settings'));
+            $this->addFeature($feature);
+        }
+
         /**
          *
          * check if webmail is enabled

+ 31 - 0
app/UI/Client/Settings/Buttons/ChangeStatusButton.php

@@ -0,0 +1,31 @@
+<?php
+/**
+ * Class ChangeStatusButton
+ * User: ThurData
+ * Date: 2019-10-11
+ * Time: 11:29
+ * @package ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons
+ */
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons;
+
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals\AddSettingsModal;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals\ChangeStatusModal;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\ButtonCreate;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\ButtonDataTableModalAction;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\DropdawnButtonWrappers\ButtonDropdownItem;
+
+class ChangeStatusButton extends ButtonDropdownItem implements ClientArea
+{
+    protected $id    = 'changeStatusButton';
+    protected $title = 'changeStatusButton';
+    protected $icon  = 'lu-dropdown__link-icon lu-btn__icon lu-zmdi lu-zmdi-refresh-sync';
+
+    public function initContent()
+    {
+        $this->initLoadModalAction(new ChangeStatusModal());
+    }
+
+}

+ 32 - 0
app/UI/Client/Settings/Buttons/EditSettingsButton.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons;
+
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals\EditSettingsModal;
+use \ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\ButtonDataTableModalAction;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals\AddSettingsModal;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\ButtonCustomAction;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\ButtonModal;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\DropdawnButtonWrappers\ButtonDropdownItem;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 18.09.19
+ * Time: 09:29
+ * Class EditSettingsButton
+ */
+class EditSettingsButton extends ButtonDataTableModalAction implements ClientArea
+{
+    protected $id    = 'editSettingsButton';
+    protected $title = 'editSettingsButton';
+
+    public function initContent()
+    {
+        $this->initLoadModalAction(new EditSettingsModal());
+    }
+
+}

+ 28 - 0
app/UI/Client/Settings/Buttons/MassChangeStatusButton.php

@@ -0,0 +1,28 @@
+<?php
+/**
+ * Class MassChangeStatusButton
+ * User: ThurData
+ * Date: 2019-10-11
+ * Time: 11:29
+ * @package ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons
+ */
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons;
+
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals\MassChangeStatusModal;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\ButtonMassAction;
+
+class MassChangeStatusButton extends ButtonMassAction implements ClientArea
+{
+    protected $id    = 'massChangeStatusButton';
+    protected $title = 'massChangeStatusButton';
+    protected $icon  = 'lu-btn__icon lu-zmdi lu-zmdi-refresh-sync';
+
+    public function initContent()
+    {
+        $this->initLoadModalAction(new MassChangeStatusModal());
+    }
+
+}

+ 19 - 0
app/UI/Client/Settings/Buttons/SpanDropdownButton.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons;
+
+
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Buttons\DropdawnButtonWrappers\ButtonDropdown;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 13.11.19
+ * Time: 08:53
+ * Class SpanDropdownButton
+ */
+class SpanDropdownButton extends ButtonDropdown
+{
+    protected $id = 'spanDropdownButton';
+}

+ 44 - 0
app/UI/Client/Settings/Forms/ChangeStatusForm.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms;
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Providers\EditSettingsDataProvider;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\BaseForm;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Hidden;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Select;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 16.10.19
+ * Time: 13:20
+ * Class ChangeStatusForm
+ */
+class ChangeStatusForm extends BaseForm implements ClientArea
+{
+    protected $id    = 'changeStatusForm';
+    protected $name  = 'changeStatusForm';
+    protected $title = 'changeStatusForm';
+
+    protected function getDefaultActions()
+    {
+        return ['updateStatus'];
+    }
+
+    public function initContent()
+    {
+        $this->setFormType('updateStatus');
+        $this->dataProvider = new EditSettingsDataProvider();
+
+        $field = new Hidden('id');
+        $this->addField($field);
+
+        $field = new Select('status');
+        $this->addField($field);
+
+        $this->loadDataToForm();
+    }
+
+}

+ 55 - 0
app/UI/Client/Settings/Forms/EditSettingsForm.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms;
+
+use ThurData\Servers\KerioEmail\App\Traits\FormExtendedTrait;
+use ThurData\Servers\KerioEmail\App\UI\Admin\Custom\Forms\SortedFieldForm;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Providers\EditSettingsDataProvider;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Hidden;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Select;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Text;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\FormConstants;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Sections\InputGroup;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\InputGroupElements;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 18.09.19
+ * Time: 09:29
+ * Class EditSettingsForm
+ */
+class EditSettingsForm extends SortedFieldForm implements ClientArea
+{
+    use FormExtendedTrait;
+
+    protected $id    = 'editSettingsForm';
+    protected $name  = 'editSettingsForm';
+    protected $title = 'editSettingsForm';
+
+    public function initContent()
+    {
+        $this->setFormType(FormConstants::UPDATE);
+        $this->setProvider(new EditSettingsDataProvider());
+        $this->initFields();
+        $this->loadDataToForm();
+    }
+
+    public function initFields()
+    {
+        $this->addField((new Hidden('id')));
+        $email = new InputGroup('usernameGroup');
+
+        $email->addInputComponent((new InputGroupElements\Text('name'))->addHtmlAttribute('readonly','true'));
+        $email->addInputAddon('emailSign', false, '@');
+        $email->addInputComponent((new InputGroupElements\Text('domain'))->addHtmlAttribute('readonly','true'));
+        $this->addSection($email);
+
+        $this->generateDoubleSection([new Text('description'), new Select('type')]);
+
+        $this->generateDoubleSection([new Select('manager'), new Select('status')]);
+
+    }
+}

+ 35 - 0
app/UI/Client/Settings/Forms/MassChangeStatusForm.php

@@ -0,0 +1,35 @@
+<?php
+/**
+ * Class MassChangeStatusForm
+ * User: ThurData
+ * Date: 2019-10-11
+ * Time: 12:26
+ * @package ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms
+ */
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms;
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Providers\SettingsDataProvider;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\BaseForm;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Select;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\FormConstants;
+
+class MassChangeStatusForm extends BaseForm implements ClientArea
+{
+    protected $id    = 'massChangeStatusForm';
+    protected $name  = 'massChangeStatusForm';
+    protected $title = 'massChangeStatusForm';
+
+    public function initContent()
+    {
+        $this->setFormType(FormConstants::UPDATE);
+        $this->dataProvider = new SettingsDataProvider();
+
+        $field = new Select('status');
+        $this->addField($field);
+
+        $this->loadDataToForm();
+    }
+
+}

+ 26 - 0
app/UI/Client/Settings/Modals/ChangeStatusModal.php

@@ -0,0 +1,26 @@
+<?php
+/**
+ * Class ChangeStatusModal
+ * User: ThurData
+ * Date: 2019-10-11
+ * Time: 11:29
+ * @package ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals
+ */
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals;
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms\ChangeStatusForm;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Modals\BaseEditModal;
+
+class ChangeStatusModal extends BaseEditModal implements ClientArea
+{
+    protected $id    = 'changeStatusModal';
+    protected $name  = 'changeStatusModal';
+    protected $title = 'changeStatusModal';
+
+    public function initContent()
+    {
+        $this->addForm(new ChangeStatusForm());
+    }
+}

+ 27 - 0
app/UI/Client/Settings/Modals/EditSettingsModal.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals;
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms\EditSettingsForm;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Modals\BaseEditModal;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 18.09.19
+ * Time: 09:30
+ * Class EditSettingsModal
+ */
+class EditSettingsModal extends BaseEditModal implements ClientArea
+{
+    protected $id    = 'editSettingsModal';
+    protected $name  = 'editSettingsModal';
+    protected $title = 'editSettingsModal';
+
+    public function initContent()
+    {
+        $this->addForm(new EditSettingsForm());
+    }
+}

+ 28 - 0
app/UI/Client/Settings/Modals/MassChangeStatusModal.php

@@ -0,0 +1,28 @@
+<?php
+/**
+ * Class MassChangeStatusModal
+ * User: ThurData
+ * Date: 2019-10-11
+ * Time: 11:30
+ * @package ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals
+ */
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals;
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms\MassChangeStatusForm;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Modals\BaseEditModal;
+
+class MassChangeStatusModal extends BaseEditModal implements ClientArea
+{
+
+    protected $id    = 'massChangeStatusModal';
+    protected $name  = 'massChangeStatusModal';
+    protected $title = 'massChangeStatusModal';
+
+    public function initContent()
+    {
+        $this->addForm(new MassChangeStatusForm());
+    }
+
+}

+ 30 - 0
app/UI/Client/Settings/Modals/MassDeleteSettingsModal.php

@@ -0,0 +1,30 @@
+<?php
+/**
+ * Class MassDeleteSettingsModal
+ * User: ThurData
+ * Date: 2019-10-11
+ * Time: 11:29
+ * @package ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals
+ */
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Modals;
+
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Forms\MassDeleteSettingsForm;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Modals\BaseModal;
+
+class MassDeleteSettingsModal extends BaseModal implements ClientArea
+{
+
+    protected $id    = 'massDeleteSettingsModal';
+    protected $name  = 'massDeleteSettingsModal';
+    protected $title = 'massDeleteSettingsModal';
+
+    public function initContent()
+    {
+        $this->setSubmitButtonClassesDanger();
+        $this->setModalTitleTypeDanger();
+        $this->addForm(new MassDeleteSettingsForm());
+    }
+
+}

+ 190 - 0
app/UI/Client/Settings/Pages/Settings.php

@@ -0,0 +1,190 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Pages;
+
+use ThurData\Servers\KerioEmail\App\UI\Admin\Custom\Fields\EnabledField;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons\AddSettingsButton;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons\ChangeStatusButton;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons\DeleteSettingsButton;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons\EditSettingsButton;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons\MassChangeStatusButton;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons\MassDeleteSettingsButton;
+use ThurData\Servers\KerioEmail\App\UI\Client\Settings\Buttons\SpanDropdownButton;
+use function ThurData\Servers\KerioEmail\Core\Helper\di;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\Column;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataProviders\DataProvider;
+use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataProviders\Providers\ArrayDataProvider;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataTable;
+use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 10.09.19
+ * Time: 10:51
+ * Class Settingss
+ */
+class Settingss extends DataTable implements ClientArea
+{
+
+    /**
+     * labels for statuses
+     */
+    const STATUS_LABEL = [
+        'active'        => 'success',
+        'closed'        => 'default',
+        'default'       => 'default'
+    ];
+
+    protected $id    = 'settings';
+    protected $name  = 'settings';
+    protected $title = null;
+
+    /**
+     * load columns
+     */
+    protected function loadHtml()
+    {
+        $this
+            ->addColumn((new Column('setting'))
+                ->setOrderable(DataProvider::SORT_ASC)
+                ->setSearchable(true, Column::TYPE_STRING))
+            ->addColumn((new Column('description'))
+                ->setOrderable()
+                ->setSearchable(true, Column::TYPE_STRING))
+            ->addColumn((new Column('type'))
+                ->setOrderable()
+                ->setSearchable(true, Column::TYPE_STRING))
+            ->addColumn((new Column('manager'))
+                ->setOrderable()
+                ->setSearchable(true, Column::TYPE_STRING))
+            ->addColumn((new Column('status'))
+                ->setOrderable()
+                ->setSearchable(true));
+    }
+
+    /**
+     * @param $key
+     * @param $row
+     * @return mixed
+     */
+    public function replaceFieldStatus($key, $row)
+    {
+        $status = self::STATUS_LABEL[$row[$key]] ? self::STATUS_LABEL[$row[$key]] : self::STATUS_LABEL['default'];
+        $label = di('lang')->absoluteT('kerio','account','status',$row[$key]);
+
+        $field = new EnabledField();
+        $field->setRawType($status);
+        $field->setRawTitle($label);
+
+        return $field->getHtml();
+    }
+
+    /**
+     * @param $key
+     * @param $row
+     * @return mixed
+     */
+    public function replaceFieldLast_login($key, $row)
+    {
+        return $row[$key] ? $row[$key] : '-';
+    }
+
+    /**
+     * @param $key
+     * @param $row
+     * @return mixed
+     */
+    public function replaceFieldType($key, $row)
+    {
+        return $row[$key] == 'Room' ? di('lang')->absoluteT('kerio','setting','type','location') : di('lang')->absoluteT('kerio','setting','type','equipment');
+    }
+
+    /**
+     * load buttons
+     */
+    public function initContent()
+    {
+        $this->addMassActionButton(new MassChangeStatusButton());
+        $this->addMassActionButton(new MassDeleteSettingsButton());
+
+        $this->addButton(new AddSettingsButton());
+
+
+        $this->addActionButton(new EditSettingsButton());
+        $this->addActionButton(new DeleteSettingsButton());
+
+        $actions = new SpanDropdownButton('actions');
+        $actions->addButton(new ChangeStatusButton());
+
+        $this->addActionButton($actions);
+
+    }
+
+    /**
+     * load data
+     */
+    public function loadData()
+    {
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
+            $domainID = $api->getDomainId($this->getWhmcsParamByKey('domain'));
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $fields = array(
+            "id",
+            "name",
+            "description",
+            "type",
+            "isEnabled",
+            "manager");
+        try {
+            $settings = $api->getResources($fields, $domainID);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $api->logout();
+
+        /**
+         * format model to array
+         */
+        $data = [];
+        foreach ($settings as $setting)
+        {
+            $settingArray = [
+                'id'           => $setting['id'],
+                'setting'    => $setting['name'],
+                'description'  => $setting['description'],
+                'type'         => $setting['type'],
+                'manager'      => $setting['manager']['name'] . '@' . $setting['manager']['domainName'],
+                'status'       => $setting['isEnabled'] ? 'active' : 'default'
+            ];
+
+            $data[] = $settingArray;
+        }
+
+        $dataProv = new ArrayDataProvider();
+        $dataProv->setDefaultSorting('setting', 'ASC')->setData($data);
+
+        $this->setDataProvider($dataProv);
+    }
+
+}

+ 216 - 0
app/UI/Client/Settings/Providers/EditSettingsDataProvider.php

@@ -0,0 +1,216 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Providers;
+
+use ThurData\Servers\KerioEmail\App\Enums\Kerio;
+use function ThurData\Servers\KerioEmail\Core\Helper\di;
+use ThurData\Servers\KerioEmail\Core\UI\ResponseTemplates\HtmlDataJsonResponse;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\DataProviders\BaseDataProvider;
+use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 18.09.19
+ * Time: 09:35
+ * Class EditSettingsDataProvider
+ */
+class EditSettingsDataProvider extends BaseDataProvider
+{
+
+    /**
+     *
+     */
+    public function read()
+    {
+        $fields = array(
+            "id",
+            "name",
+            "description",
+            "type",
+            "isEnabled",
+            "manager"
+        );
+        $cond = array(
+                "fieldName" => "id",
+                "comparator" => "Eq",
+                "value" => $this->actionElementId
+        );
+
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
+            $domainID = $api->getDomainId($this->getWhmcsParamByKey('domain'));
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        try {
+            $ressource = $api->getResources($fields,$domainID,[ $cond ]);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $attr = array(
+            "id",
+            "loginName",
+            "isEnabled");
+        try {
+            $users = $api->getUsers($attr,$domainID);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $api->logout();
+        $this->availableValues['manager'][$ressource[0]['manager']['id']] = $ressource[0]['manager']['name'] . '@' . $ressource[0]['manager']['domainName'];
+        foreach($users as $user) {
+            if($user['isEnabled']){
+                $this->availableValues['manager'][ $user['id']] = $user['loginName'] . '@' . $this->getWhmcsParamByKey('domain');
+            }
+        }
+
+        $lang = di('lang');
+        $this->data['id']            = $ressource[0]['id'];
+        $this->data['name']          = $ressource[0]['name'];
+        $this->data['domain']        = $this->getWhmcsParamByKey('domain');
+        $this->data['status']        = $ressource[0]['isEnabled'] == true ? Kerio::ACC_STATUS_ACTIVE : Kerio::ACC_STATUS_CLOSED;
+        $this->data['type']          = $ressource[0]['type'] === 'Room' ? Kerio::RES_TYPE_LOCATION : Kerio::RES_TYPE_EQUIPMENT;
+        $this->data['description']   = $ressource[0]['description'];
+        $this->data['manager']       = $ressource[0]['manager']['name'] . '@' . $ressource[0]['manager']['domainName'];
+
+        $this->availableValues['status'] = [
+            Kerio::ACC_STATUS_ACTIVE        => $lang->absoluteT('kerio','account','status','active'),
+            Kerio::ACC_STATUS_CLOSED        => $lang->absoluteT('kerio','account','status','closed'),
+        ];
+
+        $this->availableValues['type'] = [
+            Kerio::RES_TYPE_LOCATION        => $lang->absoluteT('kerio','ressource','type','location'),
+            Kerio::RES_TYPE_EQUIPMENT       => $lang->absoluteT('kerio','ressource','type','equipment')
+        ];
+
+    }
+
+    /**
+     * @return HtmlDataJsonResponse
+     */
+    public function update()
+    {
+        $fieldToProtection = [
+            'name',
+            'status',
+            'type',
+            'description',
+            'managert'
+        ];
+
+        foreach ($this->formData as $field => &$value)
+        {
+            $value = in_array($field, $fieldToProtection) ? htmlentities($value) : $value;
+        }
+
+        $attr = array(
+            'description' => $this->formData['description'],
+            'type' => $this->formData['type'],
+            'isEnabled' => $this->formData['status'] === 'active' ? true : false,
+            'manager' => array(
+                'id' => $this->formData['manager'],
+                'type' => 'UserPrincipal'
+            )
+        );
+
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
+            $domainID = $api->getDomainId($this->getWhmcsParamByKey('domain'));
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        try {
+            $result = $api->updateResouce($attr,$this->formData['id']);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $api->logout();
+        return (new HtmlDataJsonResponse())->setMessageAndTranslate('ressourceHasBeenUpdated')->setStatusSuccess();
+    }
+
+    /**
+     * @return HtmlDataJsonResponse
+     */
+    public function updateStatus()
+    {
+        $attr = array(
+            'isEnabled' => $this->formData['status'] === 'active' ? true : false,
+        );
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        try {
+            $result = $api->updateResouce($attr,$this->formData['id']);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $api->logout();
+
+        return (new HtmlDataJsonResponse())->setMessageAndTranslate('ressourceStatusHasBeenUpdated')->setStatusSuccess();
+
+    }
+
+    /**
+     * @return HtmlDataJsonResponse
+     */
+    public function changePassword()
+    {
+
+    }
+}

+ 171 - 0
app/UI/Client/Settings/Providers/SettingsDataProvider.php

@@ -0,0 +1,171 @@
+<?php
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\Providers;
+
+use ThurData\Servers\KerioEmail\App\Enums\Kerio;
+use function ThurData\Servers\KerioEmail\Core\Helper\di;
+use ThurData\Servers\KerioEmail\Core\UI\ResponseTemplates\HtmlDataJsonResponse;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\DataProviders\BaseDataProvider;
+use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 10.09.19
+ * Time: 13:06
+ * Class SettingsDataProvider
+ */
+class SettingsDataProvider extends BaseDataProvider
+{
+
+    public function read()
+    {
+        $this->data['domain'] = $this->getWhmcsParamByKey('domain');
+
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
+            $domainID = $api->getDomainId($this->getWhmcsParamByKey('domain'));
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $fields = array(
+            "id",
+            "loginName",
+            "isEnabled");
+        try {
+            $users = $api->getUsers($fields,$domainID);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $api->logout();
+
+        foreach($users as $user) {
+            if($user['isEnabled']){
+                $this->availableValues['manager'][ $user['id']] = $user['loginName'] . '@' . $this->getWhmcsParamByKey('domain');
+            }
+        }
+
+        $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'),
+        ];
+
+        $this->availableValues['type'] = [
+            Kerio::RES_TYPE_LOCATION        => $lang->absoluteT('kerio','ressource','type','location'),
+            Kerio::RES_TYPE_EQUIPMENT       => $lang->absoluteT('kerio','ressource','type','equipment')
+        ];
+    }
+
+    public function create()
+    {
+        $fieldToProtection = [
+            'name',
+            'status',
+            'manager',
+            'type',
+            'description'
+        ];
+
+        foreach ($this->formData as $field => &$value)
+        {
+            $value = in_array($field, $fieldToProtection) ? htmlentities($value) : $value;
+        }
+
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
+            $domainID = $api->getDomainId($this->getWhmcsParamByKey('domain'));
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        try {
+            $ressourceID = $api->createResouce($this->formData, $domainID);
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+        $api->logout();
+
+        return (new HtmlDataJsonResponse())->setMessageAndTranslate('ressourceHasBeenAdded')->setStatusSuccess();
+
+    }
+
+    public function updateStatus()
+    {
+
+
+    }
+
+    public function update()
+    {
+        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        try {
+            $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
+        } catch (KerioApiException $error) {
+            logModuleCall(
+                'kerioEmail',
+                __FUNCTION__,
+                $error,
+                'Debug Error',
+                $error->getMessage()
+            );
+            return ['error' => $error->getMessage()];
+        }
+
+        $isEnabled = $this->formData['status'] === Kerio::ACC_STATUS_ACTIVE ? true : false;
+
+        /**
+         * run service for each id
+         */
+        foreach($this->request->get('massActions') as $id)
+        {
+            try {
+                $result = $api->updateResouce(['isEnabled' => $isEnabled], $id);
+            } catch (KerioApiException $error) {
+                logModuleCall(
+                    'kerioEmail',
+                    __FUNCTION__,
+                    $error,
+                    'Debug Error',
+                    $error->getMessage()
+                );
+                return ['error' => $error->getMessage()];
+            }
+    
+        }
+        $api->logout();
+        /**
+         * return success
+         */
+        return (new HtmlDataJsonResponse())->setMessageAndTranslate('massSettingsStatusHasBeenUpdated')->setStatusSuccess();
+    }
+}

+ 39 - 0
app/UI/Client/Settings/Sections/AdditionalSection.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\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;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 12.11.19
+ * Time: 13:42
+ * Class AdditionalSection
+ */
+class AdditionalSection extends FreeFieldsSection
+{
+    protected $id   = 'additionalSection';
+    protected $name = 'additionalSection';
+
+    use FormExtendedTrait;
+
+    public function initContent()
+    {
+        $this->generateDoubleSection([new Text('contact'), new Text('site')]);
+
+        $this->generateDoubleSection([new Text('contact_mail'), new Text('contact_phone')]);
+
+        $this->generateDoubleSection([new Text('street'), new Text('building')]);
+
+        $this->generateDoubleSection([new Text('floor'), new Text('room')]);
+
+        $this->generateDoubleSection([new Text('post_code'), new Text('town')]);
+
+        $this->generateDoubleSection([new Text('state'), new Text('county')]);
+
+    }
+}

+ 40 - 0
app/UI/Client/Settings/Sections/EditAdditionalSection.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\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;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 12.11.19
+ * Time: 13:52
+ * Class EditAdditionalSection
+ */
+class EditAdditionalSection extends FreeFieldsSection
+{
+    protected $id   = 'editAdditionalSection';
+    protected $name = 'editAdditionalSection';
+
+    use FormExtendedTrait;
+
+    public function initContent()
+    {
+        $this->generateDoubleSection([new Text('contact'), new Text('site')]);
+
+        $this->generateDoubleSection([new Text('contact_mail'), new Text('contact_phone')]);
+
+        $this->generateDoubleSection([new Text('street'), new Text('building')]);
+
+        $this->generateDoubleSection([new Text('floor'), new Text('room')]);
+
+        $this->generateDoubleSection([new Text('post_code'), new Text('town')]);
+
+        $this->generateDoubleSection([new Text('state'), new Text('county')]);
+
+    }
+
+}

+ 62 - 0
app/UI/Client/Settings/Sections/EditGeneralSection.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\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\Hidden;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Select;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Text;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Switcher;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Sections\InputGroup;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\InputGroupElements;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 12.11.19
+ * Time: 13:52
+ * Class EditGeneralSection
+ */
+class EditGeneralSection extends FreeFieldsSection
+{
+    protected $id   = 'editGeneralSection';
+    protected $name = 'editGeneralSection';
+
+    use FormExtendedTrait;
+
+    public function initContent()
+    {
+        /**
+         * add fields
+         */
+        $field = new Hidden('id');
+        $this->addField($field);
+
+        $email =new InputGroup('usernameGroup');
+
+        $email->addInputComponent((new InputGroupElements\Text('username'))->addHtmlAttribute('readonly','true'));
+        $email->addInputAddon('emailSign', false, '@');
+        $email->addInputComponent((new InputGroupElements\Text('domain'))->addHtmlAttribute('readonly','true'));
+        $this->addSection($email);
+
+        $this->generateDoubleSection([new Text('display_name'), new Select('status')]);
+
+        $type = new Select('type');
+        $capacity = new Text('capacity');
+
+        $this->generateDoubleSection([$type, $capacity]);
+
+        $field = new Text('description');
+        $this->addField($field);
+
+        $field = new Text('notes');
+        $this->addField($field);
+
+        $autoAcceptDecline = new Switcher('auto_accept');
+        $autoDeclineBusy = new Switcher('auto_busy');
+        $this->generateDoubleSection([$autoAcceptDecline, $autoDeclineBusy]);
+
+    }
+}

+ 40 - 0
app/UI/Client/Settings/Sections/GeneralSection.php

@@ -0,0 +1,40 @@
+<?php
+namespace ThurData\Servers\KerioEmail\App\UI\Client\Settings\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\Select;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\Text;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Sections\InputGroup;
+use ThurData\Servers\KerioEmail\Core\UI\Widget\Forms\Fields\InputGroupElements;
+
+/**
+ *
+ * Created by PhpStorm.
+ * User: ThurData
+ * Date: 12.11.19
+ * Time: 13:39
+ * Class GeneralSection
+ */
+class GeneralSection extends FreeFieldsSection
+{
+    protected $id   = 'generalSection';
+    protected $name = 'generalSection';
+
+    use FormExtendedTrait;
+
+    public function initContent()
+    {
+        $email = new InputGroup('usernameGroup');
+
+        $email->addTextField('name', false, true);
+        $email->addInputAddon('emailSign', false, '@');
+        $email->addInputComponent((new InputGroupElements\Text('domain'))->addHtmlAttribute('readonly','true'));
+        $this->addSection($email);
+
+        $this->generateDoubleSection([new Text('description'), new Select('type')]);
+
+        $this->generateDoubleSection([new Select('manager'), new Select('status')]);
+
+    }
+}