| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- <?php
- namespace MGModule\DNSManager2\mgLibs\custom\helpers;
- use MGModule\DNSManager2\controllers\addon\admin\zones;
- use MGModule\DNSManager2\mgLibs\custom\manager\ClientHelper;
- use MGModule\DNSManager2\mgLibs\MySQL\result;
- use \MGModule\DNSManager2\models\custom\globalsetting;
- use MGModule\DNSManager2\models\custom\zone\ZoneTypeEnum;
- use MGModule\DNSManager2\models\whmcs\addon\addon;
- use MGModule\DNSManager2\models\whmcs\domains\domain;
- use MGModule\DNSManager2\models\whmcs\domains\repository;
- use MGModule\DNSManager2\models\whmcs\hostingaddon\hostingaddon;
- use MGModule\DNSManager2\models\whmcs\service\service;
- /**
- * Class Zone
- *
- * @author Artur Pilch <artur.pi@modulesgarden.com>
- */
- class ZoneSettings
- {
- CONST ALLOW_ONLY_DOMAINS_FROM_DOMAINS_ITEMS = 'allowOnlyDomainsFromDomainItems';
- CONST ALLOW_ONLY_DOMAINS_FROM_PRODUCT_ITEMS = 'allowOnlyDomainFromProductItems';
- CONST ALLOW_ONLY_DOMAINS_FROM_DOMAINS_AND_PRODUCT_ITEMS = 'allowOnlyDomainsFromDomainAndProductItems';
- CONST ALLOW_CUSTOM_DOMAINS = 'allowCustomDomain';
- CONST ALLOW_ONLY_THAT_DOMAIN = 'allowOnlyThatDomain';
- CONST ALLOW_ONLY_THAT_PRODUCT_DOMAIN = 'allowOnlyThatProductDomain';
- private static $usedZones = [];
- /**
- * Sponsored Custom Zones Options
- */
- public static function getSettingsForZonesCreate()
- {
- $basics = [
- SELF::ALLOW_ONLY_DOMAINS_FROM_DOMAINS_ITEMS,
- SELF::ALLOW_ONLY_DOMAINS_FROM_PRODUCT_ITEMS,
- SELF::ALLOW_ONLY_DOMAINS_FROM_DOMAINS_AND_PRODUCT_ITEMS,
- SELF::ALLOW_CUSTOM_DOMAINS,
- ];
- $vars[globalsetting\GlobalSettingEnum::DOMAIN_ITEM_OPTION] = [
- SELF::ALLOW_ONLY_THAT_DOMAIN,
- ];
- $vars[globalsetting\GlobalSettingEnum::PRODUCT_ITEM_OPTION] = [
- SELF::ALLOW_ONLY_THAT_PRODUCT_DOMAIN,
- ];
- $vars[globalsetting\GlobalSettingEnum::ADDON_ITEM_OPTION] = [
- SELF::ALLOW_ONLY_THAT_PRODUCT_DOMAIN,
- ];
- $vars[globalsetting\GlobalSettingEnum::OTHER_ITEM_OPTION] = [];
- foreach ($vars as &$item)
- {
- $item = array_merge($item, $basics);
- }
- return $vars;
- }
- public static function getZoneItemSettingForType($type)
- {
- switch ($type)
- {
- case ZoneTypeEnum::OTHER:
- return self::getSettingFromQuery(globalsetting\GlobalSettingEnum::OTHER_ITEM_OPTION);
- case ZoneTypeEnum::DOMAIN:
- return self::getSettingFromQuery(globalsetting\GlobalSettingEnum::DOMAIN_ITEM_OPTION);
- case ZoneTypeEnum::HOSTING:
- return self::getSettingFromQuery(globalsetting\GlobalSettingEnum::PRODUCT_ITEM_OPTION);
- case ZoneTypeEnum::ADDON:
- return self::getSettingFromQuery(globalsetting\GlobalSettingEnum::ADDON_ITEM_OPTION);
- }
- }
- public static function getProperlyItems($clientid, $relId, $relType)
- {
- $setting = self::getZoneItemSettingForType($relType)->value;
- switch ($setting)
- {
- case self::ALLOW_CUSTOM_DOMAINS:
- return self::ALLOW_CUSTOM_DOMAINS;
- case self::ALLOW_ONLY_THAT_DOMAIN:
- case self::ALLOW_ONLY_THAT_PRODUCT_DOMAIN:
- $domain = self::getOneDomain($relId, $relType)->domain;
- $domain = !in_array($domain, self::getUsedZones()) ? $domain : '';
- return [$domain];
- case self::ALLOW_ONLY_DOMAINS_FROM_DOMAINS_AND_PRODUCT_ITEMS:
- $records = array_merge(self::getAllDomainsFromDomainsRecords($clientid), self::getAllDomainsFromHostingRecords($clientid));
- asort($records);
- return $records;
- case self::ALLOW_ONLY_DOMAINS_FROM_DOMAINS_ITEMS:
- return self::getAllDomainsFromDomainsRecords($clientid);
- case self::ALLOW_ONLY_DOMAINS_FROM_PRODUCT_ITEMS;
- return self::getAllDomainsFromHostingRecords($clientid);
- }
- return false;
- }
- public static function getOneDomain($relId, $relType)
- {
- switch ($relType)
- {
- case ZoneTypeEnum::DOMAIN:
- return domain::factory($relId);
- case ZoneTypeEnum::HOSTING:
- return service::factory($relId);
- case ZoneTypeEnum::ADDON:
- return hostingaddon::factory($relId)->getHostingModel();
- }
- return false;
- }
- public static function getSettingFromQuery($key)
- {
- return globalsetting\Repository::factory()->byKey($key)->one();
- }
- public static function isDomainClient($zoneName, $type, $relid, $clientId)
- {
- $setting = self::getZoneItemSettingForType($type)->value;
- switch ($setting)
- {
- case self::ALLOW_CUSTOM_DOMAINS:
- return true;
- case self::ALLOW_ONLY_THAT_DOMAIN:
- case self::ALLOW_ONLY_THAT_PRODUCT_DOMAIN:
- $model = self::getOneDomain($relid, $type);
- return $model->domain == $zoneName && $model->userid == $clientId;
- case self::ALLOW_ONLY_DOMAINS_FROM_DOMAINS_AND_PRODUCT_ITEMS:
- $domains = array_merge(self::getAllDomainsFromDomainsRecords($clientId), self::getAllDomainsFromHostingRecords($clientId));
- return in_array($zoneName, $domains);
- case self::ALLOW_ONLY_DOMAINS_FROM_DOMAINS_ITEMS:
- return in_array($zoneName, self::getAllDomainsFromDomainsRecords($clientId));
- case self::ALLOW_ONLY_DOMAINS_FROM_PRODUCT_ITEMS;
- return in_array($zoneName, self::getAllDomainsFromHostingRecords($clientId));
- }
- return false;
- }
- public static function getAllDomainsFromHostingRecords($clientid)
- {
- $services = \MGModule\DNSManager2\models\whmcs\service\repository::factory()->byClientID($clientid)->get();
- $out = [];
- foreach ($services as $serviceModel)
- {
- $domain = $serviceModel->domain;
- if(!self::canAddZone($domain, $out))
- {
- continue;
- }
- array_push($out, $domain);
- }
- asort($out);
- return $out;
- }
- public static function getAllDomainsFromDomainsRecords($clientid)
- {
- $domains = repository::factory()->byClientID($clientid)->get();
- $out = [];
- foreach ($domains as $domainModel)
- {
- $domain = $domainModel->domain;
- if(!self::canAddZone($domain, $out))
- {
- continue;
- }
- array_push($out, $domain);
- }
- asort($out);
- return $out;
- }
- private static function canAddZone($domain, $domains)
- {
- if(!$domain || trim($domain) == '')
- {
- return false;
- }
- if(self::isExcludeUsedZones() && in_array($domain, self::getUsedZones()))
- {
- return false;
- }
- if(in_array($domain, $domains))
- {
- return false;
- }
- if(self::isSubdomain($domain))
- {
- return false;
- }
- return true;
- }
- private static function isSubdomain($domain)
- {
- $helper = new DomainHelper($domain);
- return $helper->isSubdamain();
- }
- public static function getUsedZones()
- {
- if(!empty(self::$usedZones))
- {
- return self::$usedZones;
- }
- $zones = \MGModule\DNSManager2\models\custom\zone\Repository::factory()->get();
- foreach ($zones as $zone)
- {
- array_push(self::$usedZones, $zone->name);
- }
- return self::$usedZones;
- }
- private function isExcludeUsedZones()
- {
- return globalsetting\GlobalSetting::byKey(globalsetting\GlobalSettingEnum::EXCLUDE_USED_ZONE_FROM_OPTIONS)->value == 'on';
- }
- }
|