ExportFromFileWHMCS.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\task;
  3. use \Exception;
  4. use \MGModule\DNSManager2\mgLibs\custom\manager;
  5. use \MGModule\DNSManager2\mgLibs\custom\TaskManager;
  6. use \MGModule\DNSManager2\models\custom\globalsetting\GlobalSettingEnum;
  7. use \MGModule\DNSManager2\models\custom\server;
  8. use \MGModule\DNSManager2\models\custom\task;
  9. use \MGModule\DNSManager2\models\custom\zone\Zone;
  10. use \MGModule\DNSManager2\models\custom\zone\Repository as ZoneRepo;
  11. use \MGModule\DNSManager2\mgLibs\custom\helpers;
  12. use \MGModule\DNSManager2\mgLibs\custom\dns;
  13. use \MGModule\DNSManager2 as main;
  14. use MGModule\DNSManager2\helpers\custom\ClientFilesManage;
  15. class ExportFromFileWHMCS extends TaskAbstract
  16. {
  17. protected $abort_after_repeats = array('main' => 0);
  18. protected $taskTypeCode = TaskTypeCodesCodes::EXPORTTOFILEWHMCS;
  19. public function mainDescription()
  20. {
  21. // $serverTo = new server\Server($this->getParams('toServer'));
  22. return 'Export from: '.$this->getParams('fromFile').' to: WHMCS';
  23. }
  24. public function main($params)
  25. {
  26. $cron_import_run_each = manager\GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_IMPORT_RUN_EACH?:5);
  27. if(!$this->isReadyToRun( $cron_import_run_each ))
  28. {
  29. return true;
  30. }
  31. if($this->getStatus() == task\TaskStatusEnum::START)
  32. {
  33. $this->addChild('fetchZonesList', [], $this->task->clientid)->run();
  34. $this->setStatus(task\TaskStatusEnum::IN_PROGRESS);
  35. }
  36. elseif($this->getStatus() == task\TaskStatusEnum::IN_PROGRESS)
  37. {
  38. $zones_per_run = manager\GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_IMPORT_ZONES_PER_RUN);
  39. $childs = $this->getXChilds($zones_per_run, 'export', task\TaskStatusEnum::START);
  40. if(count($childs) < $zones_per_run)
  41. {
  42. $childs += $this->getXChilds($zones_per_run - count($childs), 'export');
  43. }
  44. foreach($childs as $child)
  45. {
  46. $child->run();
  47. }
  48. $this->setFinishedStatusOnCronRun('export', $zones_per_run);
  49. }
  50. }
  51. public function fetchZonesList($params)
  52. {
  53. $zoneList = $this->listBulkZones();
  54. foreach($zoneList as $zone)
  55. {
  56. $this->addResult(array(
  57. 'domain' => $zone->zoneName,
  58. 'ip' => $zone->ip ? $zone->ip : '',
  59. // 'zoneDetails' => $zone->zoneDetails
  60. ));
  61. }
  62. $this->setStatus(task\TaskStatusEnum::FINISHED);
  63. }
  64. public function export($params)
  65. {
  66. try
  67. {
  68. $file = $this->parent->getParams('fromFile');
  69. $zoneParams = $this->getZone($params['domain']);
  70. if(empty($zoneParams))
  71. {
  72. return;
  73. }
  74. $fileExporting = ClientFilesManage::getFileForClient($zoneParams->clientid, $file, ClientFilesManage::FROM_FILE_TO_WHMCS);
  75. if(!$file || $zoneParams->clientid != $fileExporting->clientid) //incase other user export another
  76. {
  77. return;
  78. }
  79. $server = new server\Server($zoneParams->serverid);
  80. $moduleTo = $server->getModule();
  81. $moduleTo->setDomain($zoneParams->name);
  82. if($moduleTo->isIPRequired())
  83. {
  84. $moduleTo->setIP($zoneParams->ip);
  85. }
  86. if(!$moduleTo->zoneExists())
  87. {
  88. $moduleTo->activateZone();
  89. }
  90. $this->setStatus(task\TaskStatusEnum::FINISHED);
  91. $result = TaskManager::getTaskResultByID($this->getParams('resultid'));
  92. $result->data['status'] = 'exported';
  93. $result->save();
  94. }
  95. catch(Exception $e)
  96. {
  97. $result = TaskManager::getTaskResultByID($this->getParams('resultid'));
  98. $result->data['status'] = $e->getMessage();
  99. $result->save();
  100. }
  101. }
  102. private function getZone($zoneName)
  103. {
  104. return main\models\custom\zone\Repository::factory()->byName($zoneName)->one();
  105. }
  106. private function getZoneIfExists()
  107. {
  108. $repo = new ZoneRepo();
  109. $repo->byName($this->getParams('domain'));
  110. $zone = $repo->one();
  111. return $zone;
  112. }
  113. private function listBulkZones()
  114. {
  115. $path = 'zonesFilesStorage' . DIRECTORY_SEPARATOR . 'bulkZones';
  116. $zoneList = helpers\ImportExportFileHelper::listBulkExportZones($this->parent->getParams('fromFile'), $path);
  117. return $zoneList;
  118. }
  119. }