ExportFromFile.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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\mgLibs\custom\task\TaskTypeCodesCodes;
  14. use \MGModule\DNSManager2 as main;
  15. use MGModule\DNSManager2\helpers\custom\ZoneLinked;
  16. use MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger\Manager as ZoneLoggerManager;
  17. class ExportFromFile extends TaskAbstract
  18. {
  19. protected $abort_after_repeats = array('main' => 0);
  20. protected $taskTypeCode = TaskTypeCodesCodes::EXPORTFROMFILE;
  21. public function mainDescription()
  22. {
  23. $serverTo = new server\Server($this->getParams('toServer'));
  24. return 'Export from: '.$this->getParams('fromFile').' to: '.$serverTo->name;
  25. }
  26. public function main($params)
  27. {
  28. $cron_import_run_each = manager\GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_IMPORT_RUN_EACH?:5);
  29. if(!$this->isReadyToRun( $cron_import_run_each ))
  30. {
  31. return true;
  32. }
  33. if($this->getStatus() == task\TaskStatusEnum::START)
  34. {
  35. $this->addChild('fetchZonesList')->run();
  36. $this->setStatus(task\TaskStatusEnum::IN_PROGRESS);
  37. }
  38. elseif($this->getStatus() == task\TaskStatusEnum::IN_PROGRESS)
  39. {
  40. $zones_per_run = manager\GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_IMPORT_ZONES_PER_RUN);
  41. $childs = $this->getXChilds($zones_per_run, 'export', task\TaskStatusEnum::START);
  42. if(count($childs) < $zones_per_run)
  43. {
  44. $childs += $this->getXChilds($zones_per_run - count($childs), 'export');
  45. }
  46. foreach($childs as $child)
  47. {
  48. $child->run();
  49. }
  50. $this->setFinishedStatusOnCronRun('export', $zones_per_run);
  51. }
  52. }
  53. public function fetchZonesList($params)
  54. {
  55. $zoneList = $this->listBulkZones();
  56. foreach($zoneList as $zone)
  57. {
  58. $this->addResult(array(
  59. 'domain' => $zone->zoneName,
  60. 'ip' => $zone->ip ? $zone->ip : ''
  61. ));
  62. }
  63. $this->setStatus(task\TaskStatusEnum::FINISHED);
  64. }
  65. public function export($params)
  66. {
  67. try
  68. {
  69. $server = new server\Server($this->parent->getParams('toServer'));
  70. $moduleTo = $server->getModule();
  71. $moduleTo->setDomain($params['domain']);
  72. $zoneLoggerManager = new ZoneLoggerManager($this->getParams('clientid'));
  73. $oldZone = $this->getZoneIfExists();
  74. if($oldZone)
  75. {
  76. $zoneUpdateHelper = new main\mgLibs\custom\helpers\ZoneUpdateHelper($oldZone, $this->getbackupZone(), $zoneLoggerManager);
  77. $zoneUpdateHelper->update();
  78. }
  79. else
  80. {
  81. if($moduleTo->isIPRequired())
  82. {
  83. $moduleTo->setIP($params['ip']);
  84. }
  85. $newZone = $this->createNewZone($server);
  86. $zoneUpdateHelper = new main\mgLibs\custom\helpers\ZoneUpdateHelper($newZone, $this->getbackupZone(), $zoneLoggerManager);
  87. $zoneUpdateHelper->update();
  88. }
  89. $this->setStatus(task\TaskStatusEnum::FINISHED);
  90. $result = TaskManager::getTaskResultByID($this->getParams('resultid'));
  91. $result->data['status'] = 'exported';
  92. $result->save();
  93. }
  94. catch(Exception $e)
  95. {
  96. $result = TaskManager::getTaskResultByID($this->getParams('resultid'));
  97. $result->data['status'] = $e->getMessage();
  98. $result->save();
  99. }
  100. }
  101. private function createNewZone($server)
  102. {
  103. $zone = new Zone();
  104. $zone->clientid = $this->getParams('clientid');
  105. $zone->type = $this->getParams('type');
  106. $zone->relid = $this->getParams('relid');
  107. $zone->name = $this->getParams('domain');
  108. $zone->ip = $this->getParams('ip');
  109. $zone->created_at = date('Y-m-d H:i:s');
  110. $zone->serverid = $server->id;
  111. $zone->status = 1;
  112. $zone->save();
  113. $zoneLink = new ZoneLinked($zone);
  114. $zoneLink->connectByService();
  115. $module = $zone->getModule();
  116. if(!$module->zoneExists())
  117. {
  118. $module->activateZone();
  119. }
  120. return $zone;
  121. }
  122. private function getZoneIfExists()
  123. {
  124. $repo = new ZoneRepo();
  125. $repo->byName($this->getParams('domain'));
  126. $zone = $repo->one();
  127. return $zone;
  128. }
  129. private function listBulkZones()
  130. {
  131. $path = 'zonesFilesStorage'.DIRECTORY_SEPARATOR.'bulkZones';
  132. $zoneList = helpers\ImportExportFileHelper::listBulkExportZones($this->parent->getParams('fromFile'), $path);
  133. return $zoneList;
  134. }
  135. private function removeCurrentRecords($zone)
  136. {
  137. $module = $zone->getModule();
  138. if(!$module->zoneExists())
  139. {
  140. return true;
  141. }
  142. $records = $module->getRecords();
  143. foreach($records as $record)
  144. {
  145. $module->deleteRecord($record);
  146. }
  147. }
  148. private function removeOldZone($zone)
  149. {
  150. $module = $zone->getModule();
  151. if($module->zoneExists())
  152. {
  153. $module->terminateZone();
  154. }
  155. $zone->delete();
  156. }
  157. private function exportRecords($zone)
  158. {
  159. $recordsList = $this->getRecordsListToExport();
  160. $module = $zone->getModule();
  161. foreach($recordsList as $recData)
  162. {
  163. $record = $this->createRecordFromArr($recData);
  164. $module->addRecord($record);
  165. }
  166. }
  167. private function getbackupZone()
  168. {
  169. $zoneName = $this->getParams('domain');
  170. $zoneList = $this->listBulkZones();
  171. return $zoneList->{$zoneName};
  172. }
  173. private function getRecordsListToExport()
  174. {
  175. $zoneName = $this->getParams('domain');
  176. $zoneList = $this->listBulkZones();
  177. return $zoneList->{$zoneName}->zoneRecords;
  178. }
  179. private function createRecordFromArr($recData)
  180. {
  181. $record = new dns\record\Record();
  182. $record->name = $recData->name;
  183. $record->type = $recData->type;
  184. $record->ttl = $recData->ttl;
  185. $record->line = $recData->line;
  186. $record->createRDATAObject();
  187. $record->rdata->setDataFromArray($recData->rdata);
  188. return $record;
  189. }
  190. }