RecordHelper.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. class RecordHelper {
  7. private $record = false;
  8. private $zone;
  9. private $serverConfiguration;
  10. private $nameservers;
  11. public function __construct(set\record\SetRecord $record, Zone $zone, $nameservers = null) {
  12. $this->record = $record;
  13. $this->zone = $zone;
  14. $this->serverConfiguration = $zone->getServer()->getModuleConfiguration();
  15. $this->nameservers = $nameservers;
  16. }
  17. /**
  18. *
  19. * @param type $domain
  20. * @param type $ip
  21. * @return \MGModule\DNSManager2\mgLibs\custom\dns\record\Record
  22. */
  23. public function toDNSRecord($domain, $ip = '') {
  24. $record = new dns\record\Record();
  25. $record->name = $this->getNameWithReplacedValues($domain, $ip);
  26. $record->type = $this->record->type;
  27. $record->ttl = $this->record->ttl;
  28. $record->createRDATAObject();
  29. $record->rdata->setDataFromArray($this->getRDATAWithReplacedValues($domain, $ip));
  30. return $record;
  31. }
  32. public function getNameWithReplacedValues($domain, $ip = '') {
  33. return $this->replaceValues($this->record->name, $domain, $ip);
  34. }
  35. public function getRDATAWithReplacedValues($domain, $ip = '') {
  36. $out = array();
  37. foreach($this->record->rdata as $k => $v) {
  38. $out[$k] = $this->replaceValues($v, $domain, $ip);
  39. }
  40. return $out;
  41. }
  42. private function replaceValues($value, $domain, $ip = '') {
  43. $splitDomain = $this->splitDomain($domain);
  44. $a = str_replace('{$domain}', $domain, $value);
  45. $b = str_replace('{$domainname}', $splitDomain['domainname'], $a);
  46. $c = str_replace('{$domainextension}', $splitDomain['extension'], $b);
  47. $d = str_replace('{$serverhostname}', $this->serverConfiguration['hostname'], $c);
  48. foreach ( range(1, 5) as $i )
  49. {
  50. $search = '{$ns' . $i . '}';
  51. $replace = (is_array($this->nameservers) && $this->nameservers[$i - 1]) ? $this->nameservers[$i - 1] : '';
  52. $d = str_replace($search, $replace, $d);
  53. }
  54. return str_replace('{$ip}', $ip?:'', $d);
  55. }
  56. private function splitDomain($domain)
  57. {
  58. $domain = explode('.', $domain);
  59. if(count($domain) > 2)
  60. {
  61. $newDomain = array();
  62. $newDomain['domainname'] = $domain[0];
  63. foreach($domain as $k => $v)
  64. {
  65. if($domain[$k+1])
  66. {
  67. $newDomain['extension'] .= $newDomain['extension'] ? '.' . $domain[$k+1] : $domain[$k+1];
  68. }
  69. }
  70. return $newDomain;
  71. }
  72. return array(
  73. 'domainname'=> $domain[0],
  74. 'extension' => $domain[1]);
  75. }
  76. /** @return dns\Record */
  77. public function obj() {
  78. return $this->record;
  79. }
  80. }