ZoneUpdateHelper.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\helpers;
  3. use MGModule\DNSManager2 as main;
  4. use MGModule\DNSManager2\mgLibs\custom\dns as dns;
  5. use MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger\Manager as ZoneLoggerManager;
  6. /**
  7. * Upadting zone record sets
  8. *
  9. * @author
  10. */
  11. class ZoneUpdateHelper
  12. {
  13. private $zone;
  14. private $backup;
  15. private $module;
  16. private $backupRecords = array();
  17. /**
  18. * @var ZoneLoggerManager
  19. */
  20. private $zoneLoggerManager;
  21. public function __construct($sourceZone, $backup, ZoneLoggerManager $zoneLoggerManager)
  22. {
  23. $this->zone = $sourceZone;
  24. $this->backup = $backup;
  25. $this->module = $this->zone->getModule();
  26. $this->bulidBackupRecords();
  27. $this->zoneLoggerManager = $zoneLoggerManager;
  28. }
  29. public function update()
  30. {
  31. $currentRecords = $this->module->getRecords();
  32. $tmpBackupRecords = $this->backupRecords;
  33. $curCname = false;
  34. foreach($currentRecords as $rKey => $cRecord)
  35. {
  36. foreach($tmpBackupRecords as $brKey => $bRecord)
  37. {
  38. if($cRecord === null || $bRecord === null)
  39. {
  40. continue;
  41. }
  42. if($cRecord->type === 'SOA')
  43. {
  44. $curCname = true;
  45. }
  46. if($this->compareRecords($cRecord, $bRecord) === true)
  47. {
  48. unset($currentRecords[$rKey]); unset($cRecord);
  49. unset($tmpBackupRecords[$brKey]); unset($bRecord);
  50. }
  51. }
  52. }
  53. foreach($tmpBackupRecords as $bdRecord)
  54. {
  55. if($bdRecord->type === 'SOA' && $curCname == false)
  56. {
  57. continue;
  58. }
  59. $this->module->addRecord($bdRecord);
  60. $this->zoneLoggerManager->logAddRecordToZone($this->zone, $bdRecord, 'Export: ');
  61. }
  62. foreach($currentRecords as $cdRecord)
  63. {
  64. $cRecords = $this->module->getRecords();
  65. foreach($cRecords as $cValue)
  66. {
  67. if($this->compareRecords($cdRecord, $cValue))
  68. {
  69. $this->module->deleteRecord($cValue);
  70. $this->zoneLoggerManager->logRemoveRecordFromZone($this->zone, $cValue, 'Export: ');
  71. }
  72. }
  73. }
  74. }
  75. protected function bulidBackupRecords()
  76. {
  77. $recordList = array();
  78. $backupRecords = $this->backup->zoneRecords;
  79. foreach($backupRecords as $bRecord)
  80. {
  81. $recordList[] = $this->buildRecordFromStd($bRecord);
  82. }
  83. $this->backupRecords = $recordList;
  84. }
  85. protected function buildRecordFromStd($stdOb)
  86. {
  87. $record = new main\mgLibs\custom\dns\record\Record();
  88. $record->name = $stdOb->name;
  89. $record->type = $stdOb->type;
  90. $record->ttl = $stdOb->ttl;
  91. $record->createRDATAObject();
  92. $record->rdata->setDataFromArray($this->buildRdataFromStd($stdOb->type, $stdOb->rdata));
  93. return $record;
  94. }
  95. protected function buildRdataFromStd($rType, $stdRdataOb)
  96. {
  97. $rDataValues = array();
  98. $className = "\\MGModule\\DNSManager2\\mgLibs\\custom\\dns\\record\\type\\".$rType;
  99. if(class_exists($className))
  100. {
  101. $rec = new $className;
  102. $obVars = get_object_vars($rec);
  103. foreach($obVars as $key => $var)
  104. {
  105. $rDataValues[$key] = $stdRdataOb->$key;
  106. }
  107. }
  108. return $rDataValues;
  109. }
  110. protected function compareRecords(dns\record\Record $rec1, dns\record\Record $rec2)
  111. {
  112. if($rec1->name === $rec2->name && $rec1->ttl === $rec2->ttl && $rec1->type === $rec2->type
  113. && $rec1->rdata->toString() === $rec2->rdata->toString())
  114. {
  115. return true;
  116. }
  117. return false;
  118. }
  119. }