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; } }