settings.php 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126
  1. <?php
  2. namespace MGModule\DNSManager2\controllers\addon\admin;
  3. use \MGModule\DNSManager2 as main;
  4. use \MGModule\DNSManager2\mgLibs\custom;
  5. use \MGModule\DNSManager2\mgLibs\custom\AjaxResponse;
  6. use \MGModule\DNSManager2\mgLibs\custom\dns;
  7. use \MGModule\DNSManager2\mgLibs\custom\dns\exceptions\DNSException;
  8. use \MGModule\DNSManager2\mgLibs\custom\helpers\FileHelper;
  9. use \MGModule\DNSManager2\mgLibs\custom\helpers\ZoneSettings;
  10. use \MGModule\DNSManager2\mgLibs\custom\manager;
  11. use \MGModule\DNSManager2\mgLibs\MySQL as mysql;
  12. use \MGModule\DNSManager2\models\custom\globalsetting;
  13. use \MGModule\DNSManager2\models\custom\package;
  14. use \MGModule\DNSManager2\models\custom\package\server as pserver;
  15. use \MGModule\DNSManager2\models\custom\server;
  16. use \MGModule\DNSManager2\models\custom\set;
  17. use \MGModule\DNSManager2\models\custom\zone;
  18. use \MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger;
  19. use WHMCS\Database\Capsule as DB;
  20. use MGModule\DNSManager2\models\custom\task;
  21. class settings extends main\mgLibs\process\abstractController{
  22. private $set_form = array(
  23. 'edit' => false,
  24. 'name' => '',
  25. 'count' => 0,
  26. );
  27. private $notifications_map = array(
  28. 'created' => globalsetting\GlobalSettingEnum::CLIENT_NOTIFICATION_ZONE_CREATED_EXCLUDE,
  29. 'altered' => globalsetting\GlobalSettingEnum::CLIENT_NOTIFICATION_ZONE_ALTERED_EXCLUDE,
  30. 'removed' => globalsetting\GlobalSettingEnum::CLIENT_NOTIFICATION_ZONE_REMOVED_EXCLUDE,
  31. 'synchronizator' => globalsetting\GlobalSettingEnum::ADMIN_NOTIFICATION_CRON_SYNCHRONIZATOR_INCLUDE,
  32. 'migrator' => globalsetting\GlobalSettingEnum::ADMIN_NOTIFICATION_CRON_MIGRATOR_INCLUDE,
  33. 'cleaner' => globalsetting\GlobalSettingEnum::ADMIN_NOTIFICATION_CRON_CLEANER_INCLUDE,
  34. );
  35. public function indexJSON($input, $vars = array()) {
  36. return AjaxResponse::I()->refreshPage($this->indexHTML($input, $vars))->toArray();
  37. }
  38. function indexHTML($input, $vars = array()) {
  39. return $this->globalHTML($input);
  40. }
  41. //=================================GLOBALSETTINGS=============================================
  42. public function globalJSON($input, $vars = array()) {
  43. return AjaxResponse::I()->refreshPage($this->globalHTML($input, $vars))->toArray();
  44. }
  45. function globalHTML($input, $vars = array())
  46. {
  47. $vars['settings'] = array();
  48. foreach(globalsetting\Repository::factory()->get() as $setting)
  49. {
  50. $vars['settings'][$setting->key] = $setting->value;
  51. }
  52. $templates_map = manager\DefaultNotifications::getMessagesIDs();
  53. $vars['settings']['client_notification_zone_created_id'] = $templates_map[manager\DefaultNotifications::GENERAL_ZONE_CREATED_NOTIFICATION];
  54. $vars['settings']['client_notification_zone_altered_id'] = $templates_map[manager\DefaultNotifications::GENERAL_ZONE_ALTERED_NOTIFICATION];
  55. $vars['settings']['client_notification_zone_removed_id'] = $templates_map[manager\DefaultNotifications::GENERAL_ZONE_REMOVED_NOTIFICATION];
  56. $vars['settings']['admin_notification_cron_synchronizator_id'] = $templates_map[manager\DefaultNotifications::ADMIN_CRON_SYNCHRONIZATOR_NOTIFIACTION];
  57. $vars['settings']['admin_notification_cron_migrator_id'] = $templates_map[manager\DefaultNotifications::ADMIN_CRON_MIGRATOR_NOTIFICATION];
  58. $vars['settings']['admin_notification_cron_cleaner_id'] = $templates_map[manager\DefaultNotifications::ADMIN_CRON_CLEANER_NOTIFICATION];
  59. $vars['clientarea_rdns'] = [
  60. 'clientarea_rdns_allow',
  61. 'clientarea_rdns_block',
  62. 'clientarea_rdns_only'
  63. ];
  64. $vars += ZoneSettings::getSettingsForZonesCreate();
  65. $vars['days'] = array(1,2,3,4,5,6,7,14,21,30,60,90,180);
  66. $vars['skins'] = FileHelper::listFoldersFromDirectory(dirname(dirname(dirname(__DIR__))) . DS . 'templates' . DS . 'clientarea');
  67. $vars['available_log_zone_actions'] = ZoneLogger\Enum::AVAILABLE_ACTIONS;
  68. $vars['settings']['log_zone_actions'] = unserialize($vars['settings']['log_zone_actions']);
  69. return array(
  70. 'tpl' => 'global',
  71. 'vars' => $vars
  72. );
  73. }
  74. /*
  75. * Custom Ahmed - Blocek
  76. */
  77. public function blockedJSON($input, $vars = array()) {
  78. return AjaxResponse::I()->refreshPage($this->blockedHTML($input, $vars))->toArray();
  79. }
  80. public function blockedHTML( $input, $vars = [] )
  81. {
  82. $vars['dnsBlockedStrings'] = globalsetting\GlobalSetting::byKey('dns_blocked_strings');
  83. $vars['rdnsBlockedStrings'] = globalsetting\GlobalSetting::byKey('rdns_blocked_strings');
  84. $vars['useRdnsBlockedSameAsForDns'] = globalsetting\GlobalSetting::byKey('use_rdns_blocked_same_as_for_dns');
  85. $excludedClientsIds = globalsetting\GlobalSetting::byKey('blocked_strings_excluded_clients');
  86. if( $excludedClientsIds )
  87. {
  88. $vars['excludedClientsIds'] = $excludedClientsIds->value;
  89. }
  90. else
  91. {
  92. $vars['excludedClientsIds'] = '';
  93. }
  94. $excludedClientsData = DB::table('tblclients')
  95. ->whereIn('id', explode(',', $vars['excludedClientsIds']))
  96. ->select('id')
  97. ->addSelect(DB::raw("CONCAT(`firstname`,' ',`lastname`) as text"))
  98. ->get();
  99. $vars['excludedClientsData'] = json_encode($excludedClientsData);
  100. return [
  101. 'tpl' => 'blocked',
  102. 'vars' => $vars
  103. ];
  104. }
  105. public function getBlockedClientsJSON( $input, $vars = [])
  106. {
  107. $excludedClients = $input['blocked_strings_excluded_clients'] ?: [];
  108. $clients = DB::table('tblclients')
  109. ->where('id', '=', $input['search'])
  110. ->orWhere('firstname', 'LIKE', '%' . $input['search'] . '%')
  111. ->orWhere('lastname', 'LIKE', '%' . $input['search'] . '%')
  112. ->orWhereIn('id', $excludedClients)
  113. ->take(30)->get();
  114. $items = [];
  115. foreach( $clients as $client )
  116. {
  117. $items[] = [
  118. 'id' => $client->id,
  119. 'text' => $client->firstname . ' ' . $client->lastname
  120. ];
  121. }
  122. AjaxResponse::I()->items = $items;
  123. AjaxResponse::I()->total = count($clients);
  124. echo json_encode(AjaxResponse::I()->toArray(), JSON_HEX_QUOT | JSON_HEX_TAG);
  125. die();
  126. }
  127. public function saveBlockedJSON($input, $vars = array()) {
  128. $dnsBlocked = isset($input['dns_blocked']) ? $input['dns_blocked'] : '';
  129. $rdnsBlocked = isset($input['rdns_blocked']) ? $input['rdns_blocked'] : '';
  130. $useRdnsSameAsDns = isset($input['use_rdns_blocked_same_as_for_dns']) ? $input['use_rdns_blocked_same_as_for_dns'] : '';
  131. $excludedClients = isset($input['blocked_strings_excluded_clients']) ? $input['blocked_strings_excluded_clients'] : '';
  132. globalsetting\GlobalSetting::set('dns_blocked_strings', $dnsBlocked);
  133. globalsetting\GlobalSetting::set('rdns_blocked_strings', $rdnsBlocked);
  134. globalsetting\GlobalSetting::set('use_rdns_blocked_same_as_for_dns', $useRdnsSameAsDns);
  135. if( $excludedClients )
  136. {
  137. $excludedClients = implode(',',array_filter(explode(',', $excludedClients),'is_numeric'));
  138. }
  139. globalsetting\GlobalSetting::set('blocked_strings_excluded_clients', $excludedClients);
  140. AjaxResponse::I()->addInfo('changes_saved');
  141. return AjaxResponse::I()->toArray();
  142. }
  143. /*
  144. * End of custom
  145. */
  146. public function excludeNotificationJSON($input, $vars = array()) {
  147. $vars['type'] = $input['type'];
  148. $vars['domains'] = mysql\query::query('SELECT tbldomainpricing.id, tbldomainpricing.extension FROM tbldomainpricing')->fetchAll();
  149. $products = mysql\query::query('SELECT tblproducts.id, tblproducts.name, tblproductgroups.name AS group_name FROM tblproducts
  150. INNER JOIN tblproductgroups ON tblproductgroups.id = tblproducts.gid')->fetchAll();
  151. foreach($products as $product)
  152. $vars['products'][$product['group_name']][$product['id']] = $product['name'];
  153. $vars['addons'] = mysql\query::query('SELECT tbladdons.id, tbladdons.name FROM tbladdons')->fetchAll();
  154. $key = $this->notifications_map[$input['type']];
  155. $vars['selected'] = globalsetting\GlobalSetting::byKey($key)->value;
  156. $vars['selected'] = explode(';',$vars['selected']);
  157. foreach($vars['selected'] as &$arr) {
  158. $arr = explode(',', $arr);
  159. }
  160. return AjaxResponse::I()->modal('exclude', $vars)->toArray();
  161. }
  162. public function excludeNotificationSaveJSON($input, $vars = array()) {
  163. $key = $this->notifications_map[$input['type']];
  164. $value = implode(',', $input['domains']) . ';' . implode(',', $input['products']) . ';' . implode(',', $input['addons']);
  165. globalsetting\GlobalSetting::set($key, $value);
  166. AjaxResponse::I()->addInfo('changes_saved');
  167. return AjaxResponse::I()->toArray();
  168. }
  169. public function includeNotificationJSON($input, $vars = array()) {
  170. $vars['admins'] = mysql\query::query('SELECT tbladmins.id, tbladmins.username, tbladmins.firstname, tbladmins.lastname FROM tbladmins')->fetchAll();
  171. $key = $this->notifications_map[$input['type']];
  172. $vars['selected'] = globalsetting\GlobalSetting::byKey($key)->value;
  173. $vars['selected'] = explode(',', $vars['selected']);
  174. $vars['type'] = $input['type'];
  175. AjaxResponse::I()->modal('include', $vars);
  176. return AjaxResponse::I()->toArray();
  177. }
  178. public function includeNotificationSaveJSON($input, $vars = array()) {
  179. $key = $this->notifications_map[$input['type']];
  180. globalsetting\GlobalSetting::set($key, implode(',', $input['admins']));
  181. AjaxResponse::I()->addInfo('changes_saved');
  182. return AjaxResponse::I()->toArray();
  183. }
  184. function saveGlobalSettingsJSON($input, $vars = array())
  185. {
  186. $input['settings']['log_zone_actions'] = serialize($input['settings']['log_zone_actions']);
  187. mysql\query::startTransaction();
  188. foreach($input['settings'] as $k => $v)
  189. {
  190. globalsetting\GlobalSetting::set($k, $v);
  191. }
  192. mysql\query::endTransaction();
  193. AjaxResponse::I()->addInfo('changes_saved');
  194. return AjaxResponse::I()->toArray();
  195. }
  196. //=================================PACKAGES=============================================
  197. public function packagesJSON($input, $vars = array()) {
  198. return AjaxResponse::I()->refreshPage($this->packagesHTML($input, $vars))->toArray();
  199. }
  200. function packagesHTML($input, $vars = array()) {
  201. return array(
  202. 'tpl' => 'packages',
  203. 'vars' => $vars
  204. );
  205. }
  206. function refreshPackagesTableJSON($input, $vars = array()) {
  207. $query = "SELECT dns_manager2_package.id AS id, dns_manager2_package.name AS name, GROUP_CONCAT(DISTINCT(dns_manager2_server.name)) AS servers,
  208. IF(pi.cdomain IS NULL, 0, pi.cdomain) AS cdomain, IF(pi.chosting IS NULL, 0, pi.chosting) AS chosting, IF(pi.caddon IS NULL, 0, pi.caddon) AS caddon,
  209. dns_manager2_package.status AS status
  210. FROM dns_manager2_package
  211. LEFT JOIN (
  212. SELECT dns_manager2_packageitem.packageid, SUM(IF((dns_manager2_packageitem.`type` = 1 AND (dns_manager2_packageitem.`relid` = tbldomainpricing.`id`)), 1, 0)) AS cdomain,
  213. SUM(IF(dns_manager2_packageitem.`type` = 2, 1, 0)) AS chosting,
  214. SUM(IF(dns_manager2_packageitem.`type` = 3, 1, 0)) AS caddon
  215. FROM dns_manager2_packageitem
  216. LEFT JOIN tbldomainpricing ON dns_manager2_packageitem.`relid` = tbldomainpricing.`id`
  217. GROUP BY dns_manager2_packageitem.packageid
  218. ) pi ON pi.packageid = dns_manager2_package.id
  219. LEFT JOIN dns_manager2_packageserver ON dns_manager2_packageserver.packageid = dns_manager2_package.id
  220. LEFT JOIN dns_manager2_server ON dns_manager2_server.id = dns_manager2_packageserver.serverid
  221. GROUP BY dns_manager2_package.id";
  222. $columns = array('name','status');
  223. $helper = new main\mgLibs\custom\RawQueryTableHelper($query, $input, $columns);
  224. $vars = $helper->getDataTableArray();
  225. foreach($helper->get() as $package)
  226. {
  227. $package['servers'] = server\helpers\Formatter::formatServersRecord($package['servers']);
  228. $vars['data'][] = $this->dataTablesParseRow('package-row', array('package' => $package));
  229. }
  230. return $vars;
  231. }
  232. public function addPackageJSON($input, $vars = array()) {
  233. $vars = $this->getAddEditVariables();
  234. $this->encodePackageDomains($vars);
  235. return AjaxResponse::I()->modal('package-edit', $vars)->toArray();
  236. }
  237. public function editPackageJSON($input, $vars = array()) {
  238. $vars = $this->getAddEditVariables();
  239. $package = new package\Package($input['id']);
  240. $avalibleRegistrarDomains = $package->getItems(package\item\PackageItemTypeEnum::DOMAIN);
  241. $tldList = $this->parseDomainList($avalibleRegistrarDomains, 'relid');
  242. foreach($tldList as &$tld)
  243. {
  244. try
  245. {
  246. $tld = main\models\whmcs\domains\pricing\domainpricing::factory((int)$tld)->extension;
  247. }
  248. catch(\Exception $e)
  249. {
  250. main\mgLibs\error\register::register($e);
  251. }
  252. }
  253. $vars['avalibleRegistrarDomains'] = $this->checkIfPossibleToReplaceRegistrarFunctions($tldList);
  254. $registrarDomains = $input['id'] ? package\registrar\Repository::factory()->byPackageID($input['id'])->get() : array();
  255. $vars['registrarDomains'] = $this->parseDomainList($registrarDomains, 'tld');
  256. $path = str_replace(DS.'controllers'.DS.'addon'.DS.'admin', '', __DIR__);
  257. if(!is_readable($path.DS.'storage'.DS.'registrar'.DS.'mocks'.DS))
  258. {
  259. $vars['mocksNotReadable'] = true;
  260. $vars['mocksPath'] = $path.DS.'storage'.DS.'registrar'.DS.'mocks'.DS;
  261. }
  262. if(!is_writable($path.DS.'storage'.DS.'registrar'.DS.'functions'.DS))
  263. {
  264. $vars['functionsNotWritable'] = true;
  265. $vars['functionsPath'] = $path.DS.'storage'.DS.'registrar'.DS.'functions'.DS;
  266. }
  267. $vars['edit'] = true;
  268. $vars['package'] = $package->toArray(false);
  269. foreach($package->getSettings() as $setting)
  270. $vars['package']['setting'][$setting->key] = $setting->value;
  271. $vars['package']['setting']['allowed_record_types'] = unserialize($vars['package']['setting']['allowed_record_types']);
  272. $vars['package']['setting']['default_ttl'] = unserialize($vars['package']['setting']['default_ttl']);
  273. if($vars['package']['setting']['default_ttl'] == false)
  274. {
  275. foreach($vars['package']['setting']['allowed_record_types'] as $key => $value)
  276. {
  277. $vars['package']['setting']['default_ttl'][$key] = '14440';
  278. }
  279. }
  280. $vars['package']['setting']['dns_record_set'] = unserialize($vars['package']['setting']['dns_record_set']);
  281. $vars['package']['setting']['allowed_ips'] = implode(', ', json_decode($vars['package']['setting']['allowed_ips']));
  282. $vars['package']['setting']['ip_blacklist'] = implode(', ', json_decode($vars['package']['setting']['ip_blacklist']));
  283. $vars['package']['setting']['allowed_record_types_keys'] = array_keys($vars['package']['setting']['allowed_record_types']);
  284. $vars['package']['servers'] = $package->getServers();
  285. $vars['package']['servers_keys'] = array();
  286. foreach($vars['package']['servers'] as $ps) {
  287. $vars['package']['servers_keys'][] = $ps->serverid;
  288. }
  289. foreach($vars['package']['servers'] as $k => $server) {
  290. $vars['server_packages'][$k] = implode(', ', $this->getServerPackages($server->getServer()->id, $input['id']));
  291. }
  292. $vars['package']['serverids'] = array_map(function($item) {return $item->serverid;} , $vars['package']['servers']);
  293. foreach($package->getItems() as $types) {
  294. foreach($types as $item) {
  295. $vars['record_limit'] = $item->limit;
  296. if($item->type == package\item\PackageItemTypeEnum::DOMAIN) {
  297. $vars['package_domains'][] = $item->relid;
  298. } elseif($item->type == package\item\PackageItemTypeEnum::ADDON) {
  299. $vars['package_addons'][] = $item->relid;
  300. } elseif($item->type == package\item\PackageItemTypeEnum::HOSTING) {
  301. $vars['package_products'][] = $item->relid;
  302. } elseif($item->type == package\item\PackageItemTypeEnum::OTHER) {
  303. $vars['package_other'] = $item->relid;
  304. }
  305. }
  306. }
  307. foreach($package->getSets() as $package_set) {
  308. $vars['package_sets'][] = $package_set->setid;
  309. }
  310. // $this->encodePackageDomains($vars);
  311. AjaxResponse::I()->modal('package-edit', $vars);
  312. return AjaxResponse::I()->toArray();
  313. }
  314. private function encodePackageDomains(&$vars)
  315. {
  316. foreach($vars['domains'] as $key => $value)
  317. {
  318. foreach($value as $key1 => $val1)
  319. {
  320. if($val1 === '')
  321. {
  322. continue;
  323. }
  324. $vars['domains'][$key][$key1]['extension'] = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode(
  325. main\mgLibs\custom\helpers\IdnaHelper::idnaEncode($val1['extension'])
  326. );
  327. $vars['domains'][$key][$key1]['encodedExtension'] = strtolower(main\mgLibs\custom\helpers\IdnaHelper::idnaEncode($val1['extension']));
  328. }
  329. }
  330. }
  331. private function getServerPackages($serverid, $not = false) {
  332. $packages = array();
  333. foreach(package\server\Repository::factory()->byServerID($serverid)->get() as $package) {
  334. if($package->packageid == $not) {
  335. continue;
  336. }
  337. $packages[] = $package->getPackage()->name;
  338. }
  339. return $packages;
  340. }
  341. private function getAddEditVariables()
  342. {
  343. $vars = array();
  344. $domains = mysql\query::query('SELECT tbldomainpricing.id AS id, tbldomainpricing.extension AS extension, dns_manager2_packageitem.packageid AS packageid, dns_manager2_package.name AS packagename
  345. FROM tbldomainpricing
  346. LEFT JOIN dns_manager2_packageitem ON dns_manager2_packageitem.relid = tbldomainpricing.id
  347. AND dns_manager2_packageitem.type = :type
  348. LEFT JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid
  349. GROUP BY tbldomainpricing.extension', array('type' => package\item\PackageItemTypeEnum::DOMAIN))->fetchAll();
  350. $vars['domains'] = array_chunk(array_pad($domains, ceil(count($domains)/4) * 4, ''), 4);
  351. $products = mysql\query::query('SELECT tblproducts.id AS id, tblproducts.name AS name, dns_manager2_packageitem.packageid AS packageid, dns_manager2_package.name AS packagename
  352. FROM tblproducts
  353. LEFT JOIN dns_manager2_packageitem ON dns_manager2_packageitem.relid = tblproducts.id
  354. AND dns_manager2_packageitem.type = :type
  355. LEFT JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid',array('type' => package\item\PackageItemTypeEnum::PRODUCT))->fetchAll();
  356. $vars['products'] = array_chunk(array_pad($products, ceil(count($products)/2) * 2, ''), 2);
  357. $addons = mysql\query::query('SELECT tbladdons.id AS id, tbladdons.name AS name, dns_manager2_packageitem.packageid AS packageid, dns_manager2_package.name AS packagename
  358. FROM tbladdons
  359. LEFT JOIN dns_manager2_packageitem ON dns_manager2_packageitem.relid = tbladdons.id
  360. AND dns_manager2_packageitem.type = :type
  361. LEFT JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid',array('type' => package\item\PackageItemTypeEnum::ADDON))->fetchAll();
  362. $vars['addons'] = array_chunk(array_pad($addons, ceil(count($addons)/2) * 2, ''), 2);
  363. $others = mysql\query::query('SELECT 0 AS id, 0 AS name, dns_manager2_packageitem.packageid AS packageid, dns_manager2_package.name AS packagename
  364. FROM dns_manager2_packageitem
  365. INNER JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid
  366. WHERE dns_manager2_packageitem.relid = 0
  367. AND dns_manager2_packageitem.type = :type',
  368. array('type' => package\item\PackageItemTypeEnum::OTHER))->fetchAll();
  369. $vars['others'] = empty($others)?array():$others[0];
  370. $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
  371. $vars['sets'] = set\Repository::factory()->adminOnly()->get();
  372. $vars['servers'] = server\Repository::factory()->get();
  373. $vars['edit'] = false;
  374. $vars['record_limit'] = 1;
  375. $vars['avalibleRegistrarDomains'] = array();
  376. $vars['registrarDomains'] = array();
  377. $domainsWithoutNativeDnsSupport = mysql\query::query('SELECT extension FROM tbldomainpricing WHERE 1 ', array())->fetchAll();
  378. $aTld = $this->parseDomainList($domainsWithoutNativeDnsSupport, 'extension');
  379. $vars['domainsWithoutNativeDnsSupport'] = $this->checkIfPossibleToReplaceRegistrarFunctions($aTld);
  380. return $vars;
  381. }
  382. public function addPackageServerJSON($input, $vars = array())
  383. {
  384. if(empty($input['add_server']))
  385. {
  386. AjaxResponse::I()->addError("server_cannot_be_empty");
  387. }
  388. elseif(in_array($input['add_server'], $input['servers']))
  389. {
  390. AjaxResponse::I()->addError("server_already_on_list");
  391. }
  392. else
  393. {
  394. $vars['server'] = new server\Server($input['add_server']);
  395. $vars['packages'] = implode(', ', $this->getServerPackages($input['add_server']));
  396. AjaxResponse::I()->new_server = main\mgLibs\smarty::I()
  397. ->view('new-server', $vars,
  398. main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page);
  399. }
  400. return AjaxResponse::I()->toArray();
  401. }
  402. public function packageSaveJSON($input, $vars = array())
  403. {
  404. mysql\query::startTransaction();
  405. $package = new package\Package($input['packageid']?:false);
  406. $input['packageid']? '' : $package->status = 0;
  407. $package->name = $input['name'];
  408. $package->defaultset = $input['default_dns_record_set'];
  409. $package->save();
  410. $input['settings']['allowed_record_types'] = serialize($input['settings']['allowed_record_types']);
  411. $input['settings']['default_ttl'] = serialize($input['settings']['default_ttl']);
  412. $input['settings']['dns_record_set'] = serialize($input['settings']['dns_record_set']);
  413. $input['settings']['allowed_ips'] = explode(',', $input['settings']['allowed_ips']);
  414. $input['settings']['allowed_ips'] = array_map('trim',$input['settings']['allowed_ips']);
  415. foreach ($input['settings']['allowed_ips'] as $ip){
  416. $ipObj = new dns\utils\IP($ip);
  417. if(!$ipObj->isValid()){
  418. return AjaxResponse::I()->addError("bad_ip_format",['ip' => $ip, 'tab' => 'Allowed IPs'])->toArray();
  419. }
  420. }
  421. $input['settings']['allowed_ips'] = json_encode($input['settings']['allowed_ips']);
  422. $input['settings']['ip_blacklist'] = explode(',', $input['settings']['ip_blacklist']);
  423. $input['settings']['ip_blacklist'] = array_map('trim',$input['settings']['ip_blacklist']);
  424. foreach ($input['settings']['ip_blacklist'] as $ip){
  425. $ipObj = new dns\utils\IP($ip);
  426. if(!$ipObj->isValid()){
  427. return AjaxResponse::I()->addError("bad_ip_format",['ip' => $ip, 'tab' => 'IP Blacklist'])->toArray();
  428. }
  429. }
  430. $input['settings']['ip_blacklist'] = json_encode($input['settings']['ip_blacklist']);
  431. $input['settings']['records_allowed_ip'] = $input['allowedIpRecords'];
  432. $input['settings']['records_blacklist'] = $input['blacklistIpRecords'];
  433. foreach($input['settings'] as $setting => $on)
  434. {
  435. $package->setSetting($setting, $on);
  436. }
  437. $items_types = array(
  438. 'domains' => package\item\PackageItemTypeEnum::DOMAIN,
  439. 'products' => package\item\PackageItemTypeEnum::PRODUCT,
  440. 'addons' => package\item\PackageItemTypeEnum::ADDON,
  441. 'other' => 0,
  442. );
  443. $registrarDelete = array();
  444. foreach($items_types as $k => $type)
  445. {
  446. foreach($input[$k] as $id => $on)
  447. {
  448. if(!$on)
  449. {
  450. if($k == 'domains')
  451. {
  452. //$id = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode($id);
  453. array_push($registrarDelete, $id);
  454. }
  455. $package->removeItem($type, $id);
  456. continue;
  457. }
  458. if($k == 'domains')
  459. {
  460. //$id = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode($id);
  461. }
  462. $package->addItem($type, $id, $input['record_limit']);
  463. }
  464. }
  465. foreach($package->getSets() as $package_set) {
  466. if(!in_array($package_set->id, $input['available_dns_record_sets'])) {
  467. $package_set->delete();
  468. }
  469. }
  470. foreach($input['available_dns_record_sets'] as $id) {
  471. $package->addSet($id);
  472. }
  473. foreach($package->getServers() as $package_server) {
  474. if(!in_array($package_server->serverid, $input['servers'])) {
  475. $package_server->delete();
  476. }
  477. }
  478. foreach($input['servers'] as $id)
  479. {
  480. $input['isMaster'] == $id ? $package->addServer($id, true) : $package->addServer($id);
  481. }
  482. foreach ($input['registrarDomain'] as $key => $value)
  483. {
  484. //$key = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode($key);
  485. if($value == 'on')
  486. {
  487. $package->addRegistrarDomain($key);
  488. }
  489. else
  490. {
  491. $package->removeRegistrarDomain($key);
  492. }
  493. }
  494. foreach ($registrarDelete as $value)
  495. {
  496. $package->removeRegistrarDomain($value);
  497. }
  498. mysql\query::endTransaction();
  499. if(isset($input['packageid']))
  500. {
  501. AjaxResponse::I()->addInfo('changes_saved');
  502. }
  503. else
  504. {
  505. AjaxResponse::I()->addInfo('new_package_added');
  506. }
  507. //AjaxResponse::I()->refreshPage($this->packagesHTML($input, $vars));
  508. return AjaxResponse::I()->toArray();
  509. }
  510. public function removePackageJSON($input, $vars = array()) {
  511. //TODO: czy cos sprawdzać przed usunięciem?
  512. package\registrar\Repository::factory()->byPackageID($input['id'])->delete();
  513. package\Package::factory($input['id'])->delete();
  514. return AjaxResponse::I()->addInfo('package_removed')->toArray();
  515. }
  516. public function enablePackageJSON($input, $vars = array()) {
  517. package\Package::factory($input['id'])->enable();
  518. return AjaxResponse::I()->addInfo('package_enabled')->toArray();
  519. }
  520. public function disablePackageJSON($input, $vars = array()) {
  521. package\Package::factory($input['id'])->disable();
  522. return AjaxResponse::I()->addInfo('package_disabled')->toArray();
  523. }
  524. //=================================SETS=============================================
  525. public function setsJSON($input, $vars = array()) {
  526. return AjaxResponse::I()->refreshPage($this->setsHTML($input, $vars))->toArray();
  527. }
  528. function setsHTML($input, $vars = array()) {
  529. $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
  530. return array(
  531. 'tpl' => 'sets'
  532. ,'vars' => $vars
  533. );
  534. }
  535. public function addNewRecordJSON($input, $vars = array()) {
  536. $class = 'MGModule\DNSManager2\mgLibs\custom\dns\record\type\\' . $input['new_record_type'];
  537. if(class_exists($class)) {
  538. $vars['counter'] = $input['records_counter'];
  539. $vars['record_type'] = $input['new_record_type'];
  540. $vars['record_obj'] = new $class();
  541. $vars['record_fields'] = get_object_vars($vars['record_obj']);
  542. AjaxResponse::I()->new_record = main\mgLibs\smarty::I()->view('new-record',
  543. $vars,
  544. main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page);
  545. } else {
  546. AjaxResponse::I()->addError('cannot_find_class', array('class' => $class));
  547. }
  548. return AjaxResponse::I()->toArray();
  549. }
  550. public function removeSetJSON($input, $vars = array()) {
  551. set\Set::factory($input['id'])->delete();
  552. return AjaxResponse::I()->addInfo('set_removed')->toArray();
  553. }
  554. public function addSetJSON($input, $vars = array()) {
  555. $vars['set'] = $this->set_form;
  556. $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
  557. return AjaxResponse::I()->modal('set-edit', $vars)->toArray();
  558. }
  559. public function duplicateSetJSON($input, $vars = array()) {
  560. $set = new set\Set($input['id']);
  561. $vars['set']['id'] = $set->id;
  562. $vars['set']['name'] = $set->name.' Duplication';
  563. return AjaxResponse::I()->modal('set-duplicate', $vars)->toArray();
  564. }
  565. public function setDuplicateJSON($input, $vars = array()) {
  566. $duplicatedSet = new set\Set($input['id']);
  567. $newSet = new set\Set(false);
  568. $newSet->name = $input['name'];
  569. if($input['duplicateWithClient'] == 'on')
  570. $newSet->idu = $duplicatedSet->idu;
  571. $newSet->save();
  572. foreach($duplicatedSet->getRecords() as $record_data) {
  573. $newSet->setRecord($record_data->name, $record_data->type, $record_data->ttl, $record_data->rdata, false);
  574. }
  575. AjaxResponse::I()->addInfo('changes_saved');
  576. return AjaxResponse::I()->toArray();
  577. }
  578. public function editSetJSON($input, $vars = array()) {
  579. $set = new set\Set($input['id']);
  580. $vars['set'] = $this->set_form;
  581. $vars['set']['edit'] = true;
  582. $vars['set']['id'] = $set->id;
  583. $vars['set']['name'] = $set->name;
  584. $vars['set']['records'] = $set->getRecords();
  585. $vars['set']['count'] = count($vars['set']['records']);
  586. $vars['counter'] = 0;
  587. $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
  588. return AjaxResponse::I()->modal('set-edit', $vars)->toArray();
  589. }
  590. public function setSaveJSON($input, $vars = array()) {
  591. $set = new set\Set($input['id']?:false);
  592. $set->name = $input['name'];
  593. $set->save();
  594. foreach($input['record'] as $record_data) {
  595. $set->setRecord($record_data['name'], $record_data['type'], $record_data['ttl'], $record_data['field'], $record_data['id'] ?:false);
  596. }
  597. foreach($input['remove_record'] as $id) {
  598. $record = new set\record\SetRecord($id);
  599. $record->delete();
  600. }
  601. AjaxResponse::I()->addInfo('changes_saved');
  602. return AjaxResponse::I()->toArray();
  603. }
  604. function refreshSetsTableJSON($input, $vars = array()) {
  605. $query = "SELECT dns_manager2_set.id AS id, tblclients.lastname AS lastname, dns_manager2_set.idu as idu, tblclients.firstname AS firstname,
  606. dns_manager2_set.name AS name, COUNT(DISTINCT(dns_manager2_setrecord.id)) AS dnsrecords
  607. FROM dns_manager2_set
  608. LEFT JOIN dns_manager2_setrecord ON dns_manager2_setrecord.setid = dns_manager2_set.id
  609. LEFT JOIN dns_manager2_packageset ON dns_manager2_packageset.setid = dns_manager2_set.id
  610. LEFT JOIN dns_manager2_package ON dns_manager2_package.defaultset = dns_manager2_set.id
  611. LEFT JOIN tblclients ON tblclients.id = dns_manager2_set.idu
  612. GROUP BY dns_manager2_set.id";
  613. $columns = array('name','dnsrecords','idu','firstname','lastname');
  614. $helper = new main\mgLibs\custom\RawQueryTableHelper($query, $input, $columns);
  615. $vars = $helper->getDataTableArray();
  616. foreach($helper->get() as $set)
  617. $vars['data'][] = $this->dataTablesParseRow('set-row', array('set' => $set));
  618. return $vars;
  619. }
  620. //=================================LOGS=============================================
  621. public function logsJSON($input, $vars = array()) {
  622. return AjaxResponse::I()->refreshPage($this->logsHTML($input, $vars))->toArray();
  623. }
  624. function logsHTML($input, $vars = array()) {
  625. return array(
  626. 'tpl' => 'logs',
  627. 'vars' => $vars
  628. );
  629. }
  630. function refreshLogTableJSON($input, $vars = array()) {
  631. $query = "SELECT dns_manager2_log.name AS name, CONCAT(tblclients.firstname, ' ', tblclients.lastname) AS client, dns_manager2_log.action AS action,
  632. dns_manager2_log.status AS status, dns_manager2_log.value AS value, dns_manager2_log.date AS date, dns_manager2_log.clientid AS clientid
  633. FROM dns_manager2_log
  634. LEFT JOIN tblclients ON tblclients.id = dns_manager2_log.clientid";
  635. $columns = array('name', 'client', 'action', 'status', 'value', 'date');
  636. $helper = new main\mgLibs\custom\RawQueryTableHelper($query, $input, $columns);
  637. $vars = $helper->getDataTableArray();
  638. foreach($helper->get() as $log)
  639. $vars['data'][] = array_map('nl2br',$this->dataTablesParseRow('log-row', ['log' => $log]));
  640. return $vars;
  641. }
  642. public function removeAllLogsJSON($input, $vars = array()) {
  643. manager\LogHelper::removeAllLogs();
  644. AjaxResponse::I()->refreshPage($this->logsHTML($input));
  645. AjaxResponse::I()->addInfo('all_logs_removed');
  646. return AjaxResponse::I()->toArray();
  647. }
  648. //===========================================================================================================
  649. //===========================================SERVERS=========================================================
  650. //===========================================================================================================
  651. private $settings_array = array('allow_rdns', 'allow_multiple_ptr', 'enable_cache');
  652. private $form = array(
  653. 'edit' => false,
  654. 'name' => '',
  655. 'module' => '',
  656. );
  657. public function serversJSON($input, $vars = array()) {
  658. return AjaxResponse::I()->refreshPage($this->serversHTML($input, $vars))->toArray();
  659. }
  660. public function serversHTML($input, $vars = array()) {
  661. $vars['available_submodules'] = custom\dns\Core::getAvailableSubmodules();
  662. $path = main\addon::getMainDIR() . DS . 'mgLibs' . DS . 'custom' . DS . 'cache' . DS . 'storage';
  663. if(!is_writable($path) || !is_readable($path)) {
  664. $vars['error'] = str_replace(':path:', $path, main\mgLibs\lang::T('cache_warning'));
  665. }
  666. return array(
  667. 'tpl' => 'servers'
  668. ,'vars' => $vars
  669. );
  670. }
  671. public function refreshServersTableJSON($input, $vars = array()) {
  672. $rep = new server\Repository();
  673. $helper = new custom\RepoTableHelper($rep, $input);
  674. $vars = $helper->getDataTableArray();
  675. foreach($helper->get() as $server)
  676. $vars['data'][] = $this->dataTablesParseRow('server-row', array('server' => $server));
  677. return $vars;
  678. }
  679. public function getModuleConfigurationJSON($input, $vars = array()) {
  680. try {
  681. $vars['server']['module'] = $input['server_module'];
  682. $vars['server']['configuration'] = custom\CoreManager::getConfiguration($input['server_module']);
  683. foreach($vars['server']['configuration'] as $k => &$conf) {
  684. if(isset($input['conf'][$k]) && !isset($conf['value'])) {
  685. $conf['value'] = $input['conf'][$k];
  686. }
  687. }
  688. } catch(DNSException $e) {
  689. AjaxResponse::I()->addError("Module {$input['server_module']} is unsupported");
  690. }
  691. AjaxResponse::I()->html = main\mgLibs\smarty::I()->view('module-configuration', $vars, main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
  692. return AjaxResponse::I()->toArray();
  693. }
  694. public function testConnectionJSON($input, $vars = array()) {
  695. try {
  696. custom\CoreManager::testConnection($input['server_module_test'], $input['conf']);
  697. AjaxResponse::I()->addInfo("connection_success");
  698. } catch(custom\dns\exceptions\DNSSubmoduleException $e) {
  699. AjaxResponse::I()->addRawError($e->getMessage());
  700. } catch(custom\dns\exceptions\DNSException $e) {
  701. AjaxResponse::I()->addError('module_is_unsupported', array(':module:' => $input['server_module']));
  702. }
  703. return AjaxResponse::I()->toArray();
  704. }
  705. public function addServerJSON($input, $vars = array()) {
  706. $vars['server'] = $this->form;
  707. $vars['available_submodules'] = custom\dns\Core::getAvailableSubmodules();
  708. AjaxResponse::I()->modal('server', $vars);
  709. return AjaxResponse::I()->toArray();
  710. }
  711. public function editServerJSON($input, $vars = array()) {
  712. $server = new server\Server($input['id']);
  713. $form = $this->form;
  714. $form['edit'] = true;
  715. $form['id'] = $server->id;
  716. $form['name'] = $server->name;
  717. $form['module'] = $server->module;
  718. $form['configuration'] = custom\CoreManager::getConfiguration($server->module);
  719. foreach($form['configuration'] as $key => &$arr) {
  720. $arr['value'] = $server->getModuleConfiguration($key);
  721. }
  722. foreach($server->getNameservers() as $nameserver) {
  723. $form['nameserver'][$nameserver->index] = $nameserver->toArray(false);
  724. }
  725. $form['setting'] = array();
  726. foreach($server->getSettings() as $k => $v)
  727. $form['setting'][$k] = $v->value;
  728. $module = $server->getModule();
  729. $vars['soaSupport'] = $module->hasRecordSupport('SOA');
  730. $vars['server'] = $form;
  731. $vars['available_submodules'] = custom\dns\Core::getAvailableSubmodules();
  732. $vars['configuration_html'] = main\mgLibs\smarty::I()->view('module-configuration',
  733. $vars,
  734. main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
  735. $vars['additional_configurtaion'] = true;
  736. $vars['disabledNs'] = $module->isDisabledPopulateNs();
  737. $vars['additional_config_html'] = main\mgLibs\smarty::I()->view('additional-configuration', $vars, main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
  738. AjaxResponse::I()->modal('server', $vars);
  739. return AjaxResponse::I()->toArray();
  740. }
  741. public function serverSaveJSON($input, $vars = array()) {
  742. if(empty($input['server_module'])) {
  743. AjaxResponse::I()->addError('server_module_cannot_be_empty');
  744. return AjaxResponse::I()->toArray();
  745. }
  746. if(empty($input['name'])) {
  747. AjaxResponse::I()->addError('server_name_cannot_be_empty');
  748. return AjaxResponse::I()->toArray();
  749. }
  750. $server = new server\Server($input['id']?:false);
  751. $input['id']? '' : $server->status = 0;
  752. $server->module = $input['server_module'];
  753. $server->name = $input['name'];
  754. $server->save();
  755. foreach($input['ns'] as $k => $v) {
  756. $server->setNameserver($k, $v['name'], $v['ip']);
  757. }
  758. //sorting by configuration
  759. $module_fields = custom\CoreManager::getConfiguration($server->module);
  760. $module_conf = array();
  761. foreach($module_fields as $name => $arr)
  762. {
  763. $module_conf[$name] = $input['conf'][$name];
  764. }
  765. $input['conf'] = $module_conf;
  766. $server->setSetting(server\setting\ServerSettingEnum::MODULE_CONFIGURATION, serialize($input['conf']));
  767. foreach($input['setting'] as $k => $v) {
  768. $server->setSetting($k, $v);
  769. }
  770. AjaxResponse::I()->refreshPage($this->serversHTML($input, $vars));
  771. if($input['id']) {
  772. AjaxResponse::I()->addInfo('changes_saved');
  773. } else {
  774. AjaxResponse::I()->addInfo('new_server_added');
  775. }
  776. return AjaxResponse::I()->toArray();
  777. }
  778. public function deleteServerJSON($input, $vars = array()) {
  779. $server = new server\Server($input['id']);
  780. if(pserver\Repository::factory()->byServerID($server->id)->count() > 0) {
  781. return AjaxResponse::I()->addError('this_server_is_already_in_use_by_some_packages')->toArray();
  782. }
  783. if(zone\Repository::factory()->byServerID($server->id)->count() > 0) {
  784. return AjaxResponse::I()->addError('there_are_zones_on_this_server')->toArray();
  785. }
  786. $migrations = custom\TaskManager::getXTasksObjects(0, 'Migration:main', 0, false);
  787. foreach($migrations as $migration) {
  788. if($migration->getStatus() != task\TaskStatusEnum::FINISHED && $migration->getParams('from') == $input['id'] || $migration->getParams('to') == $input['id']) {
  789. return AjaxResponse::I()->addError('you_cannot_delete_server_with_task')->toArray();
  790. }
  791. }
  792. $imports = custom\TaskManager::getXTasksObjects(0, 'Import:main', 0, false);
  793. foreach($imports as $import) {
  794. if($import->getStatus() != task\TaskStatusEnum::FINISHED && $import->getParams('from') == $input['id']) {
  795. return AjaxResponse::I()->addError('you_cannot_delete_server_with_task')->toArray();
  796. }
  797. }
  798. $server->delete();
  799. AjaxResponse::I()->addInfo('server_removed');
  800. return AjaxResponse::I()->toArray();
  801. }
  802. public function turnOnServerJSON($input, $vars = array()) {
  803. server\Server::factory($input['id'])->turnOn();
  804. AjaxResponse::I()->addInfo('server_turned_on');
  805. return AjaxResponse::I()->toArray();
  806. }
  807. public function turnOffServerJSON($input, $vars = array()) {
  808. server\Server::factory($input['id'])->turnOff();
  809. AjaxResponse::I()->addInfo('server_turned_off');
  810. return AjaxResponse::I()->toArray();
  811. }
  812. public function parseDomainList($list, $key)
  813. {
  814. $parsedList = array();
  815. foreach($list as $value)
  816. {
  817. if(is_array($value))
  818. {
  819. array_push($parsedList, $value[$key]);
  820. }
  821. else
  822. {
  823. array_push($parsedList, $value->$key);
  824. }
  825. }
  826. return $parsedList;
  827. }
  828. public function validateServersByRecordsJSON($input, $vars = array())
  829. {
  830. $servers = $input['servers'] ? explode(',', $input['servers']) : false;
  831. $recordsTypes = $input['recordsTypes'] ? explode(',', $input['recordsTypes']) : false;
  832. if(!$servers || !$recordsTypes){
  833. return false;
  834. }
  835. $unsuportedList = array();
  836. foreach ($servers as $key => $value)
  837. {
  838. $unsuportedRecords = array();
  839. $tempServ = new main\models\custom\server\Server($value);
  840. $tempModule = $tempServ->getModule();
  841. $availableTypes = $tempModule->availableTypes;
  842. foreach ($recordsTypes as $record)
  843. {
  844. if(!in_array($record, $availableTypes))
  845. {
  846. $unsuportedRecords[] = $record;
  847. }
  848. }
  849. if($unsuportedRecords)
  850. {
  851. $unsuportedList[] = array(
  852. 'serverId' => $tempServ->id,
  853. 'serverName' => $tempServ->name,
  854. 'unsuportedRecords' => implode($unsuportedRecords, ', ')
  855. );
  856. }
  857. }
  858. if($unsuportedList)
  859. {
  860. return $unsuportedList;
  861. }
  862. return false;
  863. }
  864. public function checkIfPossibleToReplaceRegistrarFunctions($tldList)
  865. {
  866. $pathRegFunctions = str_replace( DS.'modules'.DS.'addons'.DS.'DNSManager2'.DS.'controllers'.DS.'addon'.DS.'admin',
  867. DS.'includes'.DS.'registrarfunctions.php', __DIR__);
  868. if(!function_exists('getregistrarconfigoptions') && file_exists($pathRegFunctions))
  869. {
  870. require_once($pathRegFunctions);
  871. }
  872. foreach ($tldList as $key => $tld)
  873. {
  874. $reg = mysql\query::query("SELECT autoreg FROM tbldomainpricing WHERE extension = :tld ",
  875. array('tld' => $tld))->fetchColumn("autoreg");
  876. $path = str_replace( DS.'addons'.DS.'DNSManager2'.DS.'controllers'.DS.'addon'.DS.'admin',
  877. DS.'registrars'.DS.$reg.DS.$reg.'.php', __DIR__);
  878. if(file_exists($path))
  879. {
  880. include_once $path;
  881. if(!function_exists($reg.'_GetDNS') && !function_exists($reg.'_SaveDNS'))
  882. {
  883. continue;
  884. }
  885. }
  886. unset($tldList[$key]);
  887. }
  888. return $tldList;
  889. }
  890. public function changeAlertTextJSON($input, $vars = array())
  891. {
  892. $vars['type'] = $input['type'];
  893. $vars['statusContent'] = globalsetting\GlobalSetting::byKey($vars['type']);
  894. if($vars['statusContent'] === false)
  895. {
  896. globalsetting\GlobalSetting::set($vars['type'], main\mgLibs\lang::T($vars['type']));
  897. $vars['statusContent'] = globalsetting\GlobalSetting::byKey($vars['type']);
  898. }
  899. return AjaxResponse::I()->modal('status-content', $vars)->toArray();
  900. }
  901. public function changeAlertTextSaveJSON($input, $vars = array())
  902. {
  903. globalsetting\GlobalSetting::set($input['type'], $input['statusContent']);
  904. AjaxResponse::I()->addInfo('changes_saved');
  905. return AjaxResponse::I()->toArray();
  906. }
  907. public function getAdditionalConfigurationJSON($input,$vars =array())
  908. {
  909. $subModule = $input['server_module'];
  910. $class = '\MGModule\DNSManager2\mgLibs\custom\dns\submodules\\' . $subModule;
  911. if(class_exists($class))
  912. {
  913. $module = new $class;
  914. $vars['soaSupport'] = $module->hasRecordSupport('SOA');
  915. $vars['disabledNs'] = $module->isDisabledPopulateNs();
  916. }
  917. AjaxResponse::I()->html = main\mgLibs\smarty::I()->view('additional-configuration', $vars, main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
  918. return AjaxResponse::I()->toArray();
  919. }
  920. }