CreateAccount.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace ThurData\Servers\KerioEmail\App\Http\Actions;
  3. use ThurData\Servers\KerioEmail\App\Enums\Response;
  4. use ThurData\Servers\KerioEmail\App\Helpers\KerioManager;
  5. use ThurData\Servers\KerioEmail\App\Libs\Product\ProductManager;
  6. use ThurData\Servers\KerioEmail\App\Libs\Kerio\Components\Api\Soap\Models\Domain;
  7. use ThurData\Servers\KerioEmail\App\Libs\Kerio\Components\Api\Soap\Traits\ProductManagerHandler;
  8. use ThurData\Servers\KerioEmail\App\Traits\ExtensionsCheckerTrait;
  9. use ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\AddonController;
  10. use ThurData\Servers\KerioEmail\App\Traits\HostingService;
  11. use \ThurData\Servers\KerioEmail\Core\UI\Traits\WhmcsParams;
  12. use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
  13. use ThurData\Servers\KerioEmail\Core\Helper\ConfigOptionsHelper;
  14. use ThurData\Servers\KerioEmail\Core\Helper\UpdateLimit;
  15. /**
  16. *
  17. * Created by PhpStorm.
  18. * User: ThurData
  19. * Date: 09.09.19
  20. * Time: 15:14
  21. * Class CreateAccount
  22. */
  23. class CreateAccount extends AddonController
  24. {
  25. use ExtensionsCheckerTrait;
  26. use HostingService;
  27. use WhmcsParams;
  28. /**
  29. * create domain in kerio
  30. *
  31. * @param null $params
  32. * @return string
  33. */
  34. public function execute($params = null)
  35. {
  36. try{
  37. /**
  38. * check if extensions are installed
  39. */
  40. $this->checkExtensionOrThrowError();
  41. //update domain
  42. if($params['customfields']['maildomain']){
  43. $params['domain'] = $params['customfields']['maildomain'];
  44. $this->hosting()->domain = $params['domain'];
  45. $this->hosting()->save();
  46. }
  47. /**
  48. * run kerio service
  49. */
  50. $result = $this->kerioRunService($params);
  51. return $result;
  52. }catch (\Exception $ex)
  53. {
  54. /**
  55. * return some crit error
  56. */
  57. return $ex->getMessage();
  58. }
  59. }
  60. /**
  61. * @param null $params
  62. * @return mixed|string
  63. */
  64. protected function kerioRunService($params = null)
  65. {
  66. $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
  67. try {
  68. $api->login($params['serverhostname'], $params['serverusername'], $params['serverpassword']);
  69. $result = $api->createDomain($params['domain']);
  70. $domainID = $result['result'][0]['id'];
  71. } catch (KerioApiException $error) {
  72. logModuleCall(
  73. 'kerioEmail',
  74. __FUNCTION__,
  75. $error,
  76. 'Debug Error',
  77. $error->getMessage()
  78. );
  79. return ['error' => $error->getMessage()];
  80. }
  81. // check, calculate & update limits
  82. $productManager = new ProductManager();
  83. $configOption = new ConfigOptionsHelper;
  84. $updateLimit = new UpdateLimit;
  85. $productManager->loadById($params['pid']);
  86. $acc_base = $productManager->get('acc_base') ? $productManager->get('acc_base') : 0;
  87. $acc_limit = $productManager->get('acc_limit') ? $productManager->get('acc_limit') : 0;
  88. $acc_add = $params['configoptions']['acc_add'] + $params['configoptions']['acc_new'];
  89. $acc_new = 0;
  90. // update
  91. $acc_addObj = $configOption->getConfigurableOption($params['serviceid'], 'acc_add');
  92. if(isset($acc_addObj->id)) {
  93. $configOption->updateConfigurableOption($acc_addObj->id, ['qty' => $acc_add]);
  94. }
  95. $acc_newObj = $configOption->getConfigurableOption($params['serviceid'], 'acc_new');
  96. if(isset($acc_newObj->id)) {
  97. $configOption->updateConfigurableOption($acc_newObj->id, ['qty' => $acc_new]);
  98. }
  99. $accounts = $acc_base + $acc_add;
  100. // set user count attributes
  101. if ($acc_limit > 0) {
  102. $attr['userMaxCountCheckbox'] = TRUE;
  103. if ($accounts > $acc_limit) {
  104. $accounts = $acc_limit;
  105. }
  106. $attr['userMaxCount'] = $accounts;
  107. } else {
  108. $attr['userMaxCountCheckbox'] = FALSE;
  109. }
  110. $domainBaseSize = $productManager->get('domainBaseSize') ? $productManager->get('domainBaseSize') : 0;
  111. $domainMaxSize = $productManager->get('domainMaxSize') ? $productManager->get('domainMaxSize') : 0;
  112. $domainAddSize = $params['configoptions']['domainAddSize'] + $params['configoptions']['domainNewSize'];
  113. $domainNewSize = 0;
  114. // update
  115. $domainAddSizeObj = $configOption->getConfigurableOption($params['serviceid'], 'domainAddSize');
  116. if(isset($domainAddSizeObj->id)) {
  117. $configOption->updateConfigurableOption($domainAddSizeObj->id, ['qty' => $domainAddSize]);
  118. }
  119. $domainNewSizeObj = $configOption->getConfigurableOption($params['serviceid'], 'domainNewSize');
  120. if(isset($domainNewSizeObj->id)) {
  121. $configOption->updateConfigurableOption($domainNewSizeObj->id, ['qty' => $domainNewSize]);
  122. }
  123. $domainSize = $domainBaseSize + $domainAddSize;
  124. // set domain size attributes
  125. if ($domainMaxSize > 0) {
  126. $attr['domainQuota']['diskSizeLimit']['isActive'] = TRUE;
  127. if ($domainSize > $domainMaxSize) {
  128. $domainSize = $domainMaxSize;
  129. }
  130. $attr['domainQuota']['diskSizeLimit']['limit']['value'] = $domainSize;
  131. $attr['domainQuota']['diskSizeLimit']['limit']['units'] = 'GigaBytes';
  132. } else {
  133. $attr['domainQuota']['diskSizeLimit']['isActive'] = FALSE;
  134. }
  135. $attr['domainQuota']['email'] = $params['clientsdetails']['email'];
  136. try {
  137. $result = $api->modifyDomain($domainID, $attr);
  138. } catch (KerioApiException $error) {
  139. logModuleCall(
  140. 'kerioEmail',
  141. __FUNCTION__,
  142. $error,
  143. 'Debug Error',
  144. $error->getMessage()
  145. );
  146. return ['error' => $error->getMessage()];
  147. }
  148. $api->logout();
  149. $updateLimit->updateDiskLimit($params['serviceid'], $domainSize * 1024);
  150. $updateLimit->updateBWLimit($params['serviceid'], $accounts);
  151. /**
  152. * return success response
  153. */
  154. return Response::SUCCESS;
  155. }
  156. }