| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- <?php
- namespace MGModule\DNSManager2\mgLibs\custom\task;
- use \Exception;
- use \MGModule\DNSManager2\mgLibs\custom\manager;
- use \MGModule\DNSManager2\mgLibs\custom\TaskManager;
- use \MGModule\DNSManager2\models\custom\globalsetting\GlobalSettingEnum;
- use \MGModule\DNSManager2\models\custom\server;
- use \MGModule\DNSManager2\models\custom\task;
- use \MGModule\DNSManager2\models\custom\zone\Zone;
- use \MGModule\DNSManager2\models\custom\zone\Repository as ZoneRepo;
- use \MGModule\DNSManager2\mgLibs\custom\helpers;
- use \MGModule\DNSManager2\mgLibs\custom\dns;
- use \MGModule\DNSManager2\mgLibs\custom\task\TaskTypeCodesCodes;
- use \MGModule\DNSManager2 as main;
- use MGModule\DNSManager2\helpers\custom\ZoneLinked;
- use MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger\Manager as ZoneLoggerManager;
- class ExportFromFile extends TaskAbstract
- {
- protected $abort_after_repeats = array('main' => 0);
- protected $taskTypeCode = TaskTypeCodesCodes::EXPORTFROMFILE;
-
- public function mainDescription()
- {
- $serverTo = new server\Server($this->getParams('toServer'));
- return 'Export from: '.$this->getParams('fromFile').' to: '.$serverTo->name;
- }
-
- public function main($params)
- {
- $cron_import_run_each = manager\GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_IMPORT_RUN_EACH?:5);
- if(!$this->isReadyToRun( $cron_import_run_each ))
- {
- return true;
- }
-
- if($this->getStatus() == task\TaskStatusEnum::START)
- {
- $this->addChild('fetchZonesList')->run();
- $this->setStatus(task\TaskStatusEnum::IN_PROGRESS);
- }
- elseif($this->getStatus() == task\TaskStatusEnum::IN_PROGRESS)
- {
- $zones_per_run = manager\GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_IMPORT_ZONES_PER_RUN);
- $childs = $this->getXChilds($zones_per_run, 'export', task\TaskStatusEnum::START);
- if(count($childs) < $zones_per_run)
- {
- $childs += $this->getXChilds($zones_per_run - count($childs), 'export');
- }
-
- foreach($childs as $child)
- {
- $child->run();
- }
- $this->setFinishedStatusOnCronRun('export', $zones_per_run);
- }
- }
-
- public function fetchZonesList($params)
- {
- $zoneList = $this->listBulkZones();
- foreach($zoneList as $zone)
- {
- $this->addResult(array(
- 'domain' => $zone->zoneName,
- 'ip' => $zone->ip ? $zone->ip : ''
- ));
- }
- $this->setStatus(task\TaskStatusEnum::FINISHED);
- }
-
- public function export($params)
- {
- try
- {
- $server = new server\Server($this->parent->getParams('toServer'));
- $moduleTo = $server->getModule();
- $moduleTo->setDomain($params['domain']);
- $zoneLoggerManager = new ZoneLoggerManager($this->getParams('clientid'));
- $oldZone = $this->getZoneIfExists();
- if($oldZone)
- {
- $zoneUpdateHelper = new main\mgLibs\custom\helpers\ZoneUpdateHelper($oldZone, $this->getbackupZone(), $zoneLoggerManager);
- $zoneUpdateHelper->update();
- }
- else
- {
- if($moduleTo->isIPRequired())
- {
- $moduleTo->setIP($params['ip']);
- }
- $newZone = $this->createNewZone($server);
- $zoneUpdateHelper = new main\mgLibs\custom\helpers\ZoneUpdateHelper($newZone, $this->getbackupZone(), $zoneLoggerManager);
- $zoneUpdateHelper->update();
- }
- $this->setStatus(task\TaskStatusEnum::FINISHED);
- $result = TaskManager::getTaskResultByID($this->getParams('resultid'));
- $result->data['status'] = 'exported';
- $result->save();
- }
- catch(Exception $e)
- {
- $result = TaskManager::getTaskResultByID($this->getParams('resultid'));
- $result->data['status'] = $e->getMessage();
- $result->save();
- }
- }
-
- private function createNewZone($server)
- {
- $zone = new Zone();
- $zone->clientid = $this->getParams('clientid');
- $zone->type = $this->getParams('type');
- $zone->relid = $this->getParams('relid');
- $zone->name = $this->getParams('domain');
- $zone->ip = $this->getParams('ip');
- $zone->created_at = date('Y-m-d H:i:s');
- $zone->serverid = $server->id;
- $zone->status = 1;
- $zone->save();
- $zoneLink = new ZoneLinked($zone);
- $zoneLink->connectByService();
- $module = $zone->getModule();
- if(!$module->zoneExists())
- {
- $module->activateZone();
- }
- return $zone;
- }
-
- private function getZoneIfExists()
- {
- $repo = new ZoneRepo();
- $repo->byName($this->getParams('domain'));
-
- $zone = $repo->one();
- return $zone;
- }
-
- private function listBulkZones()
- {
- $path = 'zonesFilesStorage'.DIRECTORY_SEPARATOR.'bulkZones';
- $zoneList = helpers\ImportExportFileHelper::listBulkExportZones($this->parent->getParams('fromFile'), $path);
- return $zoneList;
- }
-
- private function removeCurrentRecords($zone)
- {
- $module = $zone->getModule();
- if(!$module->zoneExists())
- {
- return true;
- }
-
- $records = $module->getRecords();
- foreach($records as $record)
- {
- $module->deleteRecord($record);
- }
- }
-
- private function removeOldZone($zone)
- {
- $module = $zone->getModule();
-
- if($module->zoneExists())
- {
- $module->terminateZone();
- }
- $zone->delete();
- }
- private function exportRecords($zone)
- {
- $recordsList = $this->getRecordsListToExport();
- $module = $zone->getModule();
-
- foreach($recordsList as $recData)
- {
- $record = $this->createRecordFromArr($recData);
- $module->addRecord($record);
- }
- }
-
- private function getbackupZone()
- {
- $zoneName = $this->getParams('domain');
- $zoneList = $this->listBulkZones();
-
- return $zoneList->{$zoneName};
- }
-
- private function getRecordsListToExport()
- {
- $zoneName = $this->getParams('domain');
- $zoneList = $this->listBulkZones();
-
- return $zoneList->{$zoneName}->zoneRecords;
- }
-
- private function createRecordFromArr($recData)
- {
- $record = new dns\record\Record();
- $record->name = $recData->name;
- $record->type = $recData->type;
- $record->ttl = $recData->ttl;
- $record->line = $recData->line;
- $record->createRDATAObject();
- $record->rdata->setDataFromArray($recData->rdata);
- return $record;
- }
- }
|