zone = $sourceZone; $this->backup = $backup; $this->module = $this->zone->getModule(); $this->bulidBackupRecords(); $this->zoneLoggerManager = $zoneLoggerManager; } public function update() { $currentRecords = $this->module->getRecords(); $tmpBackupRecords = $this->backupRecords; $curCname = false; foreach($currentRecords as $rKey => $cRecord) { foreach($tmpBackupRecords as $brKey => $bRecord) { if($cRecord === null || $bRecord === null) { continue; } if($cRecord->type === 'SOA') { $curCname = true; } if($this->compareRecords($cRecord, $bRecord) === true) { unset($currentRecords[$rKey]); unset($cRecord); unset($tmpBackupRecords[$brKey]); unset($bRecord); } } } foreach($tmpBackupRecords as $bdRecord) { if($bdRecord->type === 'SOA' && $curCname == false) { continue; } $this->module->addRecord($bdRecord); $this->zoneLoggerManager->logAddRecordToZone($this->zone, $bdRecord, 'Export: '); } foreach($currentRecords as $cdRecord) { $cRecords = $this->module->getRecords(); foreach($cRecords as $cValue) { if($this->compareRecords($cdRecord, $cValue)) { $this->module->deleteRecord($cValue); $this->zoneLoggerManager->logRemoveRecordFromZone($this->zone, $cValue, 'Export: '); } } } } protected function bulidBackupRecords() { $recordList = array(); $backupRecords = $this->backup->zoneRecords; foreach($backupRecords as $bRecord) { $recordList[] = $this->buildRecordFromStd($bRecord); } $this->backupRecords = $recordList; } protected function buildRecordFromStd($stdOb) { $record = new main\mgLibs\custom\dns\record\Record(); $record->name = $stdOb->name; $record->type = $stdOb->type; $record->ttl = $stdOb->ttl; $record->createRDATAObject(); $record->rdata->setDataFromArray($this->buildRdataFromStd($stdOb->type, $stdOb->rdata)); return $record; } protected function buildRdataFromStd($rType, $stdRdataOb) { $rDataValues = array(); $className = "\\MGModule\\DNSManager2\\mgLibs\\custom\\dns\\record\\type\\".$rType; if(class_exists($className)) { $rec = new $className; $obVars = get_object_vars($rec); foreach($obVars as $key => $var) { $rDataValues[$key] = $stdRdataOb->$key; } } return $rDataValues; } protected function compareRecords(dns\record\Record $rec1, dns\record\Record $rec2) { if($rec1->name === $rec2->name && $rec1->ttl === $rec2->ttl && $rec1->type === $rec2->type && $rec1->rdata->toString() === $rec2->rdata->toString()) { return true; } return false; } }