| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <?php
- namespace MGModule\DNSManager2\mgLibs\custom\helpers;
- use MGModule\DNSManager2\mgLibs\custom\manager\LogHelper;
- use MGModule\DNSManager2\mgLibs\custom\manager\RecordHelper;
- use MGModule\DNSManager2 as main;
- use MGModule\DNSManager2\models\custom\set;
- use MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger\Manager as ZoneLoggerManager;
- /**
- * Helps to manage record sets
- *
- * @author slawomir@modulesgarden.com
- */
- class RecordSetHelper
- {
- /**
- * @var main\models\custom\zone\Zone
- */
- protected $zone;
- protected $package;
- /**
- * @var ZoneLoggerManager
- */
- private $zoneLoggerManager;
-
- public function __construct(\MGModule\DNSManager2\models\custom\zone\Zone $zone, ZoneLoggerManager $zoneLoggerManager)
- {
- $this->zone = $zone;
- $this->zoneLoggerManager = $zoneLoggerManager;
- }
-
-
- function getPackage()
- {
- if(empty($this->package))
- {
- $this->package = $this->zone->getPackage();
- }
-
- return $this->package;
- }
- public function addRecordSet($setId = false,$force = false,$alreadyExists = false)
- {
- if($force)
- {
- $set = new main\models\custom\set\Set($setId);
- $this->addRecords($set,$alreadyExists);
- return true;
- }
-
- $package = $this->getPackage();
-
- if($setId == 'none')
- {
- return true;
- }
-
- if($this->zone->clientid)
- {
- $checkUserSet = $this->getSpecificSet($setId);
-
- if(!$checkUserSet )
- {
- $checkUserSet = $this->getDefaultUserSet();
- }
-
- if($checkUserSet && is_numeric($checkUserSet))
- {
-
- if($set = new main\models\custom\set\Set($checkUserSet))
- {
- $this->addRecords($set);
- return true;
- }
- }
- }
- if(!$package || is_null($package))
- {
- return true;
- }
- if($set = $package->getDefaultSet())
- {
- $this->addRecords($set);
- return true;
- }
- }
-
- private function getSpecificSet($setId)
- {
- if( is_null($setId) || $setId == 0)
- {
- return false;
- }
-
- $checkUserSet = main\mgLibs\MySQL\query::select(
- array('id','name','idu','default'),
- 'dns_manager2_set',
- array('id' => $setId)
- )->fetch();
- if($checkUserSet['idu'] && $checkUserSet['idu'] != $this->zone->clientid)
- {
- return false;
- }
-
- $defaultSets = $this->getPackage()->getAdminSets();
- if(empty($checkUserSet['idu']) && !in_array( $checkUserSet['id'], $defaultSets ))
- {
- return false;
- }
-
-
- return $checkUserSet['id'];
- }
-
- private function getDefaultUserSet()
- {
- $checkUserSet = main\mgLibs\MySQL\query::select(
- array('id','name','idu','default'),
- 'dns_manager2_set',
- array('idu' => $this->zone->clientid, 'default' => '1')
- )->fetchColumn('id');
- return $checkUserSet;
- }
-
- private function addRecords(main\models\custom\set\Set $set,$checkIfAlreadyExists = false)
- {
- $module = $this->zone->getModule();
- $rSet = array();
- foreach($set->getRecords() as $record)
- {
- try
- {
- $zoneRecords = $this->zone->getModule()->getRecords();
- $rec = new RecordHelper($record, $this->zone,$this->getNameServers());
- if(empty($this->zone->ip)){
- $this->zone->ip = $this->getDefaultIP();
- }
- $tempRec = $rec->toDNSRecord($this->zone->name, $this->zone->ip);
-
- if($tempRec->type == 'SOA')
- {
- $soaRecord = $this->getSOARecord($zoneRecords);
- if($soaRecord)
- {
- $tempRec->line = $soaRecord->line;
- $module->editRecord($tempRec);
- $editRecords = new main\mgLibs\custom\helpers\ZoneLogger\Actions\EditRecord($tempRec, $soaRecord);
- $this->zoneLoggerManager->logEditRecordsInZone($this->zone, $editRecords);
- continue;
- }
- }
-
- if($checkIfAlreadyExists)
- {
- $alreadyExists = $this->checkIfRecordAlreadyExists($zoneRecords, $tempRec);
- if($alreadyExists)
- {
- continue;
- }
- }
- $tempRec->nameToAbsolute($this->zone->name);
- $module->addRecord($tempRec);
- $this->zoneLoggerManager->logAddRecordToZone($this->zone, $tempRec);
- $rSet[] = $tempRec;
- }
- catch(\Exception $exc)
- {
- main\mgLibs\error\register::register($exc);
- LogHelper::addFailLogUsingZone('Add Record', $exc->getMessage(), $this->zone->id);
- }
- }
-
- if(count($rSet) > 0)
- {
- $module->removeDefaultServerRecords($rSet);
- }
- }
- private function getDefaultIP()
- {
- $server = new \MGModule\DNSManager2\models\custom\server\Server($this->zone->serverid);
- $configuration = $server->getModuleConfiguration();
- if (is_array($configuration))
- {
- return $configuration['default_ip'];
- }
- }
-
- private function getSOARecord(array $zoneRecords)
- {
- foreach($zoneRecords as $zoneRecord)
- {
- if($zoneRecord->type == 'SOA')
- {
- return $zoneRecord;
- }
- }
-
- return false;
- }
- private function checkIfRecordAlreadyExists(array $zoneRecords, main\mgLibs\custom\dns\record\Record $record)
- {
- foreach($zoneRecords as $zoneRecord)
- {
- if($zoneRecord->name == $record->name . '.' && $zoneRecord->type == $record->type)
- {
- $zoneRecordRDATA = get_object_vars($zoneRecord->rdata);
- $recordRDATA = get_object_vars($record->rdata);
- if($zoneRecordRDATA == $recordRDATA)
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
- public static function checkAllowedRecordsLimits($packageID,$recordSetID,$currentRecords = NULL)
- {
- $packageSettings = main\models\custom\package\setting\PackageSetting::byPackageAndKey($packageID, 'allowed_record_types');
- $limits = unserialize($packageSettings->value);
- $rep = set\record\Repository::factory()->setFilter('setid',$recordSetID)->get();
-
- foreach($limits as $type => $value)
- {
- $count = 0;
- foreach($rep as $record)
- {
- if($record->type == $type)
- {
- $count++;
- }
- }
-
- if($currentRecords != NULL)
- {
- foreach($currentRecords as $currRecord)
- {
- if($currRecord->type == $type)
- {
- $count++;
- }
- }
- }
- if((int)$count > (int)$value && (int)$value !== -1)
- {
- return false;
- }
- }
-
- return true;
- }
- public static function formatRecordsToIndexById($records = [])
- {
- $out = [];
- foreach ($records as $record)
- {
- $out[$record->line] = $record;
- }
- return $out;
- }
- private function getNameServers()
- {
- global $CONFIG;
- foreach ( range(1, 5) as $i )
- {
- if ( isset($CONFIG['DefaultNameserver' . $i]) )
- {
- $nameServers[] = $CONFIG['DefaultNameserver' . $i];
- }
- }
- return $nameServers;
- }
- }
|