RecordHelper.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\manager;
  3. use MGModule\DNSManager2\mgLibs\custom\dns;
  4. use MGModule\DNSManager2\models\custom\set;
  5. use MGModule\DNSManager2\models\custom\zone\Zone;
  6. use MGModule\DNSManager2\models\whmcs\servers\server;
  7. use MGModule\DNSManager2\models\whmcs\service\service;
  8. class RecordHelper {
  9. private $record = false;
  10. private $zone;
  11. private $serverConfiguration;
  12. private $nameservers;
  13. public function __construct(set\record\SetRecord $record, Zone $zone, $nameservers = null) {
  14. $this->record = $record;
  15. $this->zone = $zone;
  16. $this->serverConfiguration = $zone->getServer()->getModuleConfiguration();
  17. $this->nameservers = $nameservers;
  18. }
  19. /**
  20. *
  21. * @param type $domain
  22. * @param type $ip
  23. * @return \MGModule\DNSManager2\mgLibs\custom\dns\record\Record
  24. */
  25. public function toDNSRecord($domain, $ip = '') {
  26. $record = new dns\record\Record();
  27. $record->name = $this->getNameWithReplacedValues($domain, $ip);
  28. $record->type = $this->record->type;
  29. $record->ttl = $this->record->ttl;
  30. $record->createRDATAObject();
  31. $record->rdata->setDataFromArray($this->getRDATAWithReplacedValues($domain, $ip));
  32. return $record;
  33. }
  34. public function getNameWithReplacedValues($domain, $ip = '') {
  35. return $this->replaceValues($this->record->name, $domain, $ip);
  36. }
  37. public function getRDATAWithReplacedValues($domain, $ip = '') {
  38. $out = array();
  39. foreach($this->record->rdata as $k => $v) {
  40. $out[$k] = $this->replaceValues($v, $domain, $ip);
  41. }
  42. return $out;
  43. }
  44. private function replaceValues($value, $domain, $ip = '') {
  45. $splitDomain = $this->splitDomain($domain);
  46. $a = str_replace('{$domain}', $domain, $value);
  47. $b = str_replace('{$domainname}', $splitDomain['domainname'], $a);
  48. $c = str_replace('{$domainextension}', $splitDomain['extension'], $b);
  49. $d = str_replace('{$serverhostname}', $this->serverConfiguration['hostname'], $c);
  50. try {
  51. $relid = $this->zone->relid;
  52. $relatedService = new service($relid);
  53. $relatedServer = new server($relatedService->serverID);
  54. $assignedIps = $relatedServer->assignedips;
  55. } catch (\Exception $e) {}
  56. $assignedIps = preg_split('/\r\n|\r|\n/', $assignedIps);
  57. if(count($assignedIps) > 0){
  58. foreach (range(1, count($assignedIps)) as $i)
  59. {
  60. $search = '{$serverassignedip' . $i . '}';
  61. $replace = (is_array($assignedIps) && $assignedIps[$i - 1]) ? $assignedIps[$i - 1] : '';
  62. $d = str_replace($search, $replace, $d);
  63. }
  64. }
  65. foreach ( range(1, 5) as $i )
  66. {
  67. $search = '{$ns' . $i . '}';
  68. $replace = (is_array($this->nameservers) && $this->nameservers[$i - 1]) ? $this->nameservers[$i - 1] : '';
  69. $d = str_replace($search, $replace, $d);
  70. }
  71. return str_replace('{$ip}', $ip?:'', $d);
  72. }
  73. private function splitDomain($domain)
  74. {
  75. $domain = explode('.', $domain);
  76. if(count($domain) > 2)
  77. {
  78. $newDomain = array();
  79. $newDomain['domainname'] = $domain[0];
  80. foreach($domain as $k => $v)
  81. {
  82. if($domain[$k+1])
  83. {
  84. $newDomain['extension'] .= $newDomain['extension'] ? '.' . $domain[$k+1] : $domain[$k+1];
  85. }
  86. }
  87. return $newDomain;
  88. }
  89. return array(
  90. 'domainname'=> $domain[0],
  91. 'extension' => $domain[1]);
  92. }
  93. /** @return dns\Record */
  94. public function obj() {
  95. return $this->record;
  96. }
  97. }