ChangePackage.php 5.6 KB

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