settings.php 47 KB

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