| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125 |
- <?php
- namespace MGModule\DNSManager2\controllers\addon\admin;
- use \MGModule\DNSManager2 as main;
- use \MGModule\DNSManager2\mgLibs\custom;
- use \MGModule\DNSManager2\mgLibs\custom\AjaxResponse;
- use \MGModule\DNSManager2\mgLibs\custom\dns;
- use \MGModule\DNSManager2\mgLibs\custom\dns\exceptions\DNSException;
- use \MGModule\DNSManager2\mgLibs\custom\helpers\FileHelper;
- use \MGModule\DNSManager2\mgLibs\custom\helpers\ZoneSettings;
- use \MGModule\DNSManager2\mgLibs\custom\manager;
- use \MGModule\DNSManager2\mgLibs\MySQL as mysql;
- use \MGModule\DNSManager2\models\custom\globalsetting;
- use \MGModule\DNSManager2\models\custom\package;
- use \MGModule\DNSManager2\models\custom\package\server as pserver;
- use \MGModule\DNSManager2\models\custom\server;
- use \MGModule\DNSManager2\models\custom\set;
- use \MGModule\DNSManager2\models\custom\zone;
- use \MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger;
- use WHMCS\Database\Capsule as DB;
- class settings extends main\mgLibs\process\abstractController{
- private $set_form = array(
- 'edit' => false,
- 'name' => '',
- 'count' => 0,
- );
- private $notifications_map = array(
- 'created' => globalsetting\GlobalSettingEnum::CLIENT_NOTIFICATION_ZONE_CREATED_EXCLUDE,
- 'altered' => globalsetting\GlobalSettingEnum::CLIENT_NOTIFICATION_ZONE_ALTERED_EXCLUDE,
- 'removed' => globalsetting\GlobalSettingEnum::CLIENT_NOTIFICATION_ZONE_REMOVED_EXCLUDE,
- 'synchronizator' => globalsetting\GlobalSettingEnum::ADMIN_NOTIFICATION_CRON_SYNCHRONIZATOR_INCLUDE,
- 'migrator' => globalsetting\GlobalSettingEnum::ADMIN_NOTIFICATION_CRON_MIGRATOR_INCLUDE,
- 'cleaner' => globalsetting\GlobalSettingEnum::ADMIN_NOTIFICATION_CRON_CLEANER_INCLUDE,
- );
- public function indexJSON($input, $vars = array()) {
- return AjaxResponse::I()->refreshPage($this->indexHTML($input, $vars))->toArray();
- }
- function indexHTML($input, $vars = array()) {
- return $this->globalHTML($input);
- }
- //=================================GLOBALSETTINGS=============================================
- public function globalJSON($input, $vars = array()) {
- return AjaxResponse::I()->refreshPage($this->globalHTML($input, $vars))->toArray();
- }
- function globalHTML($input, $vars = array())
- {
- $vars['settings'] = array();
- foreach(globalsetting\Repository::factory()->get() as $setting)
- {
- $vars['settings'][$setting->key] = $setting->value;
- }
- $templates_map = manager\DefaultNotifications::getMessagesIDs();
- $vars['settings']['client_notification_zone_created_id'] = $templates_map[manager\DefaultNotifications::GENERAL_ZONE_CREATED_NOTIFICATION];
- $vars['settings']['client_notification_zone_altered_id'] = $templates_map[manager\DefaultNotifications::GENERAL_ZONE_ALTERED_NOTIFICATION];
- $vars['settings']['client_notification_zone_removed_id'] = $templates_map[manager\DefaultNotifications::GENERAL_ZONE_REMOVED_NOTIFICATION];
- $vars['settings']['admin_notification_cron_synchronizator_id'] = $templates_map[manager\DefaultNotifications::ADMIN_CRON_SYNCHRONIZATOR_NOTIFIACTION];
- $vars['settings']['admin_notification_cron_migrator_id'] = $templates_map[manager\DefaultNotifications::ADMIN_CRON_MIGRATOR_NOTIFICATION];
- $vars['settings']['admin_notification_cron_cleaner_id'] = $templates_map[manager\DefaultNotifications::ADMIN_CRON_CLEANER_NOTIFICATION];
- $vars['clientarea_rdns'] = [
- 'clientarea_rdns_allow',
- 'clientarea_rdns_block',
- 'clientarea_rdns_only'
- ];
- $vars += ZoneSettings::getSettingsForZonesCreate();
- $vars['days'] = array(1,2,3,4,5,6,7,14,21,30,60,90,180);
- $vars['skins'] = FileHelper::listFoldersFromDirectory(dirname(dirname(dirname(__DIR__))) . DS . 'templates' . DS . 'clientarea');
- $vars['available_log_zone_actions'] = ZoneLogger\Enum::AVAILABLE_ACTIONS;
- $vars['settings']['log_zone_actions'] = unserialize($vars['settings']['log_zone_actions']);
- return array(
- 'tpl' => 'global',
- 'vars' => $vars
- );
- }
- /*
- * Custom Ahmed - Blocek
- */
- public function blockedJSON($input, $vars = array()) {
- return AjaxResponse::I()->refreshPage($this->blockedHTML($input, $vars))->toArray();
- }
- public function blockedHTML( $input, $vars = [] )
- {
- $vars['dnsBlockedStrings'] = globalsetting\GlobalSetting::byKey('dns_blocked_strings');
- $vars['rdnsBlockedStrings'] = globalsetting\GlobalSetting::byKey('rdns_blocked_strings');
- $vars['useRdnsBlockedSameAsForDns'] = globalsetting\GlobalSetting::byKey('use_rdns_blocked_same_as_for_dns');
- $excludedClientsIds = globalsetting\GlobalSetting::byKey('blocked_strings_excluded_clients');
- if( $excludedClientsIds )
- {
- $vars['excludedClientsIds'] = $excludedClientsIds->value;
- }
- else
- {
- $vars['excludedClientsIds'] = '';
- }
- $excludedClientsData = DB::table('tblclients')
- ->whereIn('id', explode(',', $vars['excludedClientsIds']))
- ->select('id')
- ->addSelect(DB::raw("CONCAT(`firstname`,' ',`lastname`) as text"))
- ->get();
- $vars['excludedClientsData'] = json_encode($excludedClientsData);
- return [
- 'tpl' => 'blocked',
- 'vars' => $vars
- ];
- }
- public function getBlockedClientsJSON( $input, $vars = [])
- {
- $excludedClients = $input['blocked_strings_excluded_clients'] ?: [];
- $clients = DB::table('tblclients')
- ->where('id', '=', $input['search'])
- ->orWhere('firstname', 'LIKE', '%' . $input['search'] . '%')
- ->orWhere('lastname', 'LIKE', '%' . $input['search'] . '%')
- ->orWhereIn('id', $excludedClients)
- ->take(30)->get();
- $items = [];
- foreach( $clients as $client )
- {
- $items[] = [
- 'id' => $client->id,
- 'text' => $client->firstname . ' ' . $client->lastname
- ];
- }
- AjaxResponse::I()->items = $items;
- AjaxResponse::I()->total = count($clients);
- echo json_encode(AjaxResponse::I()->toArray(), JSON_HEX_QUOT | JSON_HEX_TAG);
- die();
- }
- public function saveBlockedJSON($input, $vars = array()) {
- $dnsBlocked = isset($input['dns_blocked']) ? $input['dns_blocked'] : '';
- $rdnsBlocked = isset($input['rdns_blocked']) ? $input['rdns_blocked'] : '';
- $useRdnsSameAsDns = isset($input['use_rdns_blocked_same_as_for_dns']) ? $input['use_rdns_blocked_same_as_for_dns'] : '';
- $excludedClients = isset($input['blocked_strings_excluded_clients']) ? $input['blocked_strings_excluded_clients'] : '';
- globalsetting\GlobalSetting::set('dns_blocked_strings', $dnsBlocked);
- globalsetting\GlobalSetting::set('rdns_blocked_strings', $rdnsBlocked);
- globalsetting\GlobalSetting::set('use_rdns_blocked_same_as_for_dns', $useRdnsSameAsDns);
- if( $excludedClients )
- {
- $excludedClients = implode(',',array_filter(explode(',', $excludedClients),'is_numeric'));
- }
- globalsetting\GlobalSetting::set('blocked_strings_excluded_clients', $excludedClients);
- AjaxResponse::I()->addInfo('changes_saved');
- return AjaxResponse::I()->toArray();
- }
- /*
- * End of custom
- */
- public function excludeNotificationJSON($input, $vars = array()) {
- $vars['type'] = $input['type'];
- $vars['domains'] = mysql\query::query('SELECT tbldomainpricing.id, tbldomainpricing.extension FROM tbldomainpricing')->fetchAll();
- $products = mysql\query::query('SELECT tblproducts.id, tblproducts.name, tblproductgroups.name AS group_name FROM tblproducts
- INNER JOIN tblproductgroups ON tblproductgroups.id = tblproducts.gid')->fetchAll();
- foreach($products as $product)
- $vars['products'][$product['group_name']][$product['id']] = $product['name'];
- $vars['addons'] = mysql\query::query('SELECT tbladdons.id, tbladdons.name FROM tbladdons')->fetchAll();
- $key = $this->notifications_map[$input['type']];
- $vars['selected'] = globalsetting\GlobalSetting::byKey($key)->value;
- $vars['selected'] = explode(';',$vars['selected']);
- foreach($vars['selected'] as &$arr) {
- $arr = explode(',', $arr);
- }
- return AjaxResponse::I()->modal('exclude', $vars)->toArray();
- }
- public function excludeNotificationSaveJSON($input, $vars = array()) {
- $key = $this->notifications_map[$input['type']];
- $value = implode(',', $input['domains']) . ';' . implode(',', $input['products']) . ';' . implode(',', $input['addons']);
- globalsetting\GlobalSetting::set($key, $value);
- AjaxResponse::I()->addInfo('changes_saved');
- return AjaxResponse::I()->toArray();
- }
- public function includeNotificationJSON($input, $vars = array()) {
- $vars['admins'] = mysql\query::query('SELECT tbladmins.id, tbladmins.username, tbladmins.firstname, tbladmins.lastname FROM tbladmins')->fetchAll();
- $key = $this->notifications_map[$input['type']];
- $vars['selected'] = globalsetting\GlobalSetting::byKey($key)->value;
- $vars['selected'] = explode(',', $vars['selected']);
- $vars['type'] = $input['type'];
- AjaxResponse::I()->modal('include', $vars);
- return AjaxResponse::I()->toArray();
- }
- public function includeNotificationSaveJSON($input, $vars = array()) {
- $key = $this->notifications_map[$input['type']];
- globalsetting\GlobalSetting::set($key, implode(',', $input['admins']));
- AjaxResponse::I()->addInfo('changes_saved');
- return AjaxResponse::I()->toArray();
- }
- function saveGlobalSettingsJSON($input, $vars = array())
- {
- $input['settings']['log_zone_actions'] = serialize($input['settings']['log_zone_actions']);
- mysql\query::startTransaction();
- foreach($input['settings'] as $k => $v)
- {
- globalsetting\GlobalSetting::set($k, $v);
- }
- mysql\query::endTransaction();
- AjaxResponse::I()->addInfo('changes_saved');
- return AjaxResponse::I()->toArray();
- }
- //=================================PACKAGES=============================================
- public function packagesJSON($input, $vars = array()) {
- return AjaxResponse::I()->refreshPage($this->packagesHTML($input, $vars))->toArray();
- }
- function packagesHTML($input, $vars = array()) {
- return array(
- 'tpl' => 'packages',
- 'vars' => $vars
- );
- }
- function refreshPackagesTableJSON($input, $vars = array()) {
- $query = "SELECT dns_manager2_package.id AS id, dns_manager2_package.name AS name, GROUP_CONCAT(DISTINCT(dns_manager2_server.name)) AS servers,
- 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,
- dns_manager2_package.status AS status
- FROM dns_manager2_package
- LEFT JOIN (
- SELECT dns_manager2_packageitem.packageid, SUM(IF((dns_manager2_packageitem.`type` = 1 AND (dns_manager2_packageitem.`relid` = tbldomainpricing.`id`)), 1, 0)) AS cdomain,
- SUM(IF(dns_manager2_packageitem.`type` = 2, 1, 0)) AS chosting,
- SUM(IF(dns_manager2_packageitem.`type` = 3, 1, 0)) AS caddon
- FROM dns_manager2_packageitem
- LEFT JOIN tbldomainpricing ON dns_manager2_packageitem.`relid` = tbldomainpricing.`id`
- GROUP BY dns_manager2_packageitem.packageid
- ) pi ON pi.packageid = dns_manager2_package.id
- LEFT JOIN dns_manager2_packageserver ON dns_manager2_packageserver.packageid = dns_manager2_package.id
- LEFT JOIN dns_manager2_server ON dns_manager2_server.id = dns_manager2_packageserver.serverid
- GROUP BY dns_manager2_package.id";
- $columns = array('name','status');
- $helper = new main\mgLibs\custom\RawQueryTableHelper($query, $input, $columns);
- $vars = $helper->getDataTableArray();
- foreach($helper->get() as $package)
- {
- $package['servers'] = server\helpers\Formatter::formatServersRecord($package['servers']);
- $vars['data'][] = $this->dataTablesParseRow('package-row', array('package' => $package));
- }
- return $vars;
- }
- public function addPackageJSON($input, $vars = array()) {
- $vars = $this->getAddEditVariables();
- $this->encodePackageDomains($vars);
- return AjaxResponse::I()->modal('package-edit', $vars)->toArray();
- }
- public function editPackageJSON($input, $vars = array()) {
- $vars = $this->getAddEditVariables();
- $package = new package\Package($input['id']);
- $avalibleRegistrarDomains = $package->getItems(package\item\PackageItemTypeEnum::DOMAIN);
- $tldList = $this->parseDomainList($avalibleRegistrarDomains, 'relid');
- foreach($tldList as &$tld)
- {
- try
- {
- $tld = main\models\whmcs\domains\pricing\domainpricing::factory((int)$tld)->extension;
- }
- catch(\Exception $e)
- {
- main\mgLibs\error\register::register($e);
- }
- }
- $vars['avalibleRegistrarDomains'] = $this->checkIfPossibleToReplaceRegistrarFunctions($tldList);
- $registrarDomains = $input['id'] ? package\registrar\Repository::factory()->byPackageID($input['id'])->get() : array();
- $vars['registrarDomains'] = $this->parseDomainList($registrarDomains, 'tld');
- $path = str_replace(DS.'controllers'.DS.'addon'.DS.'admin', '', __DIR__);
- if(!is_readable($path.DS.'storage'.DS.'registrar'.DS.'mocks'.DS))
- {
- $vars['mocksNotReadable'] = true;
- $vars['mocksPath'] = $path.DS.'storage'.DS.'registrar'.DS.'mocks'.DS;
- }
- if(!is_writable($path.DS.'storage'.DS.'registrar'.DS.'functions'.DS))
- {
- $vars['functionsNotWritable'] = true;
- $vars['functionsPath'] = $path.DS.'storage'.DS.'registrar'.DS.'functions'.DS;
- }
- $vars['edit'] = true;
- $vars['package'] = $package->toArray(false);
- foreach($package->getSettings() as $setting)
- $vars['package']['setting'][$setting->key] = $setting->value;
- $vars['package']['setting']['allowed_record_types'] = unserialize($vars['package']['setting']['allowed_record_types']);
- $vars['package']['setting']['default_ttl'] = unserialize($vars['package']['setting']['default_ttl']);
- if($vars['package']['setting']['default_ttl'] == false)
- {
- foreach($vars['package']['setting']['allowed_record_types'] as $key => $value)
- {
- $vars['package']['setting']['default_ttl'][$key] = '14440';
- }
- }
- $vars['package']['setting']['dns_record_set'] = unserialize($vars['package']['setting']['dns_record_set']);
- $vars['package']['setting']['allowed_ips'] = implode(', ', json_decode($vars['package']['setting']['allowed_ips']));
- $vars['package']['setting']['ip_blacklist'] = implode(', ', json_decode($vars['package']['setting']['ip_blacklist']));
- $vars['package']['setting']['allowed_record_types_keys'] = array_keys($vars['package']['setting']['allowed_record_types']);
- $vars['package']['servers'] = $package->getServers();
- $vars['package']['servers_keys'] = array();
- foreach($vars['package']['servers'] as $ps) {
- $vars['package']['servers_keys'][] = $ps->serverid;
- }
- foreach($vars['package']['servers'] as $k => $server) {
- $vars['server_packages'][$k] = implode(', ', $this->getServerPackages($server->getServer()->id, $input['id']));
- }
- $vars['package']['serverids'] = array_map(function($item) {return $item->serverid;} , $vars['package']['servers']);
- foreach($package->getItems() as $types) {
- foreach($types as $item) {
- $vars['record_limit'] = $item->limit;
- if($item->type == package\item\PackageItemTypeEnum::DOMAIN) {
- $vars['package_domains'][] = $item->relid;
- } elseif($item->type == package\item\PackageItemTypeEnum::ADDON) {
- $vars['package_addons'][] = $item->relid;
- } elseif($item->type == package\item\PackageItemTypeEnum::HOSTING) {
- $vars['package_products'][] = $item->relid;
- } elseif($item->type == package\item\PackageItemTypeEnum::OTHER) {
- $vars['package_other'] = $item->relid;
- }
- }
- }
- foreach($package->getSets() as $package_set) {
- $vars['package_sets'][] = $package_set->setid;
- }
- // $this->encodePackageDomains($vars);
- AjaxResponse::I()->modal('package-edit', $vars);
- return AjaxResponse::I()->toArray();
- }
- private function encodePackageDomains(&$vars)
- {
- foreach($vars['domains'] as $key => $value)
- {
- foreach($value as $key1 => $val1)
- {
- if($val1 === '')
- {
- continue;
- }
- $vars['domains'][$key][$key1]['extension'] = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode(
- main\mgLibs\custom\helpers\IdnaHelper::idnaEncode($val1['extension'])
- );
- $vars['domains'][$key][$key1]['encodedExtension'] = strtolower(main\mgLibs\custom\helpers\IdnaHelper::idnaEncode($val1['extension']));
- }
- }
- }
- private function getServerPackages($serverid, $not = false) {
- $packages = array();
- foreach(package\server\Repository::factory()->byServerID($serverid)->get() as $package) {
- if($package->packageid == $not) {
- continue;
- }
- $packages[] = $package->getPackage()->name;
- }
- return $packages;
- }
- private function getAddEditVariables()
- {
- $vars = array();
- $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
- FROM tbldomainpricing
- LEFT JOIN dns_manager2_packageitem ON dns_manager2_packageitem.relid = tbldomainpricing.id
- AND dns_manager2_packageitem.type = :type
- LEFT JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid
- GROUP BY tbldomainpricing.extension', array('type' => package\item\PackageItemTypeEnum::DOMAIN))->fetchAll();
- $vars['domains'] = array_chunk(array_pad($domains, ceil(count($domains)/4) * 4, ''), 4);
- $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
- FROM tblproducts
- LEFT JOIN dns_manager2_packageitem ON dns_manager2_packageitem.relid = tblproducts.id
- AND dns_manager2_packageitem.type = :type
- LEFT JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid',array('type' => package\item\PackageItemTypeEnum::PRODUCT))->fetchAll();
- $vars['products'] = array_chunk(array_pad($products, ceil(count($products)/2) * 2, ''), 2);
- $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
- FROM tbladdons
- LEFT JOIN dns_manager2_packageitem ON dns_manager2_packageitem.relid = tbladdons.id
- AND dns_manager2_packageitem.type = :type
- LEFT JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid',array('type' => package\item\PackageItemTypeEnum::ADDON))->fetchAll();
- $vars['addons'] = array_chunk(array_pad($addons, ceil(count($addons)/2) * 2, ''), 2);
- $others = mysql\query::query('SELECT 0 AS id, 0 AS name, dns_manager2_packageitem.packageid AS packageid, dns_manager2_package.name AS packagename
- FROM dns_manager2_packageitem
- INNER JOIN dns_manager2_package ON dns_manager2_package.id = dns_manager2_packageitem.packageid
- WHERE dns_manager2_packageitem.relid = 0
- AND dns_manager2_packageitem.type = :type',
- array('type' => package\item\PackageItemTypeEnum::OTHER))->fetchAll();
- $vars['others'] = empty($others)?array():$others[0];
- $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
- $vars['sets'] = set\Repository::factory()->adminOnly()->get();
- $vars['servers'] = server\Repository::factory()->get();
- $vars['edit'] = false;
- $vars['record_limit'] = 1;
- $vars['avalibleRegistrarDomains'] = array();
- $vars['registrarDomains'] = array();
- $domainsWithoutNativeDnsSupport = mysql\query::query('SELECT extension FROM tbldomainpricing WHERE 1 ', array())->fetchAll();
- $aTld = $this->parseDomainList($domainsWithoutNativeDnsSupport, 'extension');
- $vars['domainsWithoutNativeDnsSupport'] = $this->checkIfPossibleToReplaceRegistrarFunctions($aTld);
- return $vars;
- }
- public function addPackageServerJSON($input, $vars = array())
- {
- if(empty($input['add_server']))
- {
- AjaxResponse::I()->addError("server_cannot_be_empty");
- }
- elseif(in_array($input['add_server'], $input['servers']))
- {
- AjaxResponse::I()->addError("server_already_on_list");
- }
- else
- {
- $vars['server'] = new server\Server($input['add_server']);
- $vars['packages'] = implode(', ', $this->getServerPackages($input['add_server']));
- AjaxResponse::I()->new_server = main\mgLibs\smarty::I()
- ->view('new-server', $vars,
- main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page);
- }
- return AjaxResponse::I()->toArray();
- }
- public function packageSaveJSON($input, $vars = array())
- {
- mysql\query::startTransaction();
- $package = new package\Package($input['packageid']?:false);
- $input['packageid']? '' : $package->status = 0;
- $package->name = $input['name'];
- $package->defaultset = $input['default_dns_record_set'];
- $package->save();
- $input['settings']['allowed_record_types'] = serialize($input['settings']['allowed_record_types']);
- $input['settings']['default_ttl'] = serialize($input['settings']['default_ttl']);
- $input['settings']['dns_record_set'] = serialize($input['settings']['dns_record_set']);
- $input['settings']['allowed_ips'] = explode(',', $input['settings']['allowed_ips']);
- $input['settings']['allowed_ips'] = array_map('trim',$input['settings']['allowed_ips']);
- foreach ($input['settings']['allowed_ips'] as $ip){
- $ipObj = new dns\utils\IP($ip);
- if(!$ipObj->isValid()){
- return AjaxResponse::I()->addError("bad_ip_format",['ip' => $ip, 'tab' => 'Allowed IPs'])->toArray();
- }
- }
- $input['settings']['allowed_ips'] = json_encode($input['settings']['allowed_ips']);
- $input['settings']['ip_blacklist'] = explode(',', $input['settings']['ip_blacklist']);
- $input['settings']['ip_blacklist'] = array_map('trim',$input['settings']['ip_blacklist']);
- foreach ($input['settings']['ip_blacklist'] as $ip){
- $ipObj = new dns\utils\IP($ip);
- if(!$ipObj->isValid()){
- return AjaxResponse::I()->addError("bad_ip_format",['ip' => $ip, 'tab' => 'IP Blacklist'])->toArray();
- }
- }
- $input['settings']['ip_blacklist'] = json_encode($input['settings']['ip_blacklist']);
- $input['settings']['records_allowed_ip'] = $input['allowedIpRecords'];
- $input['settings']['records_blacklist'] = $input['blacklistIpRecords'];
- foreach($input['settings'] as $setting => $on)
- {
- $package->setSetting($setting, $on);
- }
- $items_types = array(
- 'domains' => package\item\PackageItemTypeEnum::DOMAIN,
- 'products' => package\item\PackageItemTypeEnum::PRODUCT,
- 'addons' => package\item\PackageItemTypeEnum::ADDON,
- 'other' => 0,
- );
- $registrarDelete = array();
- foreach($items_types as $k => $type)
- {
- foreach($input[$k] as $id => $on)
- {
- if(!$on)
- {
- if($k == 'domains')
- {
- //$id = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode($id);
- array_push($registrarDelete, $id);
- }
- $package->removeItem($type, $id);
- continue;
- }
- if($k == 'domains')
- {
- //$id = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode($id);
- }
- $package->addItem($type, $id, $input['record_limit']);
- }
- }
- foreach($package->getSets() as $package_set) {
- if(!in_array($package_set->id, $input['available_dns_record_sets'])) {
- $package_set->delete();
- }
- }
- foreach($input['available_dns_record_sets'] as $id) {
- $package->addSet($id);
- }
- foreach($package->getServers() as $package_server) {
- if(!in_array($package_server->serverid, $input['servers'])) {
- $package_server->delete();
- }
- }
- foreach($input['servers'] as $id)
- {
- $input['isMaster'] == $id ? $package->addServer($id, true) : $package->addServer($id);
- }
- foreach ($input['registrarDomain'] as $key => $value)
- {
- //$key = '.'.main\mgLibs\custom\helpers\IdnaHelper::idnaDecode($key);
- if($value == 'on')
- {
- $package->addRegistrarDomain($key);
- }
- else
- {
- $package->removeRegistrarDomain($key);
- }
- }
- foreach ($registrarDelete as $value)
- {
- $package->removeRegistrarDomain($value);
- }
- mysql\query::endTransaction();
- if(isset($input['packageid']))
- {
- AjaxResponse::I()->addInfo('changes_saved');
- }
- else
- {
- AjaxResponse::I()->addInfo('new_package_added');
- }
- //AjaxResponse::I()->refreshPage($this->packagesHTML($input, $vars));
- return AjaxResponse::I()->toArray();
- }
- public function removePackageJSON($input, $vars = array()) {
- //TODO: czy cos sprawdzać przed usunięciem?
- package\registrar\Repository::factory()->byPackageID($input['id'])->delete();
- package\Package::factory($input['id'])->delete();
- return AjaxResponse::I()->addInfo('package_removed')->toArray();
- }
- public function enablePackageJSON($input, $vars = array()) {
- package\Package::factory($input['id'])->enable();
- return AjaxResponse::I()->addInfo('package_enabled')->toArray();
- }
- public function disablePackageJSON($input, $vars = array()) {
- package\Package::factory($input['id'])->disable();
- return AjaxResponse::I()->addInfo('package_disabled')->toArray();
- }
- //=================================SETS=============================================
- public function setsJSON($input, $vars = array()) {
- return AjaxResponse::I()->refreshPage($this->setsHTML($input, $vars))->toArray();
- }
- function setsHTML($input, $vars = array()) {
- $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
- return array(
- 'tpl' => 'sets'
- ,'vars' => $vars
- );
- }
- public function addNewRecordJSON($input, $vars = array()) {
- $class = 'MGModule\DNSManager2\mgLibs\custom\dns\record\type\\' . $input['new_record_type'];
- if(class_exists($class)) {
- $vars['counter'] = $input['records_counter'];
- $vars['record_type'] = $input['new_record_type'];
- $vars['record_obj'] = new $class();
- $vars['record_fields'] = get_object_vars($vars['record_obj']);
- AjaxResponse::I()->new_record = main\mgLibs\smarty::I()->view('new-record',
- $vars,
- main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page);
- } else {
- AjaxResponse::I()->addError('cannot_find_class', array('class' => $class));
- }
- return AjaxResponse::I()->toArray();
- }
- public function removeSetJSON($input, $vars = array()) {
- set\Set::factory($input['id'])->delete();
- return AjaxResponse::I()->addInfo('set_removed')->toArray();
- }
- public function addSetJSON($input, $vars = array()) {
- $vars['set'] = $this->set_form;
- $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
- return AjaxResponse::I()->modal('set-edit', $vars)->toArray();
- }
- public function duplicateSetJSON($input, $vars = array()) {
- $set = new set\Set($input['id']);
- $vars['set']['id'] = $set->id;
- $vars['set']['name'] = $set->name.' Duplication';
- return AjaxResponse::I()->modal('set-duplicate', $vars)->toArray();
- }
- public function setDuplicateJSON($input, $vars = array()) {
- $duplicatedSet = new set\Set($input['id']);
- $newSet = new set\Set(false);
- $newSet->name = $input['name'];
- if($input['duplicateWithClient'] == 'on')
- $newSet->idu = $duplicatedSet->idu;
- $newSet->save();
- foreach($duplicatedSet->getRecords() as $record_data) {
- $newSet->setRecord($record_data->name, $record_data->type, $record_data->ttl, $record_data->rdata, false);
- }
- AjaxResponse::I()->addInfo('changes_saved');
- return AjaxResponse::I()->toArray();
- }
- public function editSetJSON($input, $vars = array()) {
- $set = new set\Set($input['id']);
- $vars['set'] = $this->set_form;
- $vars['set']['edit'] = true;
- $vars['set']['id'] = $set->id;
- $vars['set']['name'] = $set->name;
- $vars['set']['records'] = $set->getRecords();
- $vars['set']['count'] = count($vars['set']['records']);
- $vars['counter'] = 0;
- $vars['available_record_types'] = dns\Core::getAvailableRecordTypes();
- return AjaxResponse::I()->modal('set-edit', $vars)->toArray();
- }
- public function setSaveJSON($input, $vars = array()) {
- $set = new set\Set($input['id']?:false);
- $set->name = $input['name'];
- $set->save();
- foreach($input['record'] as $record_data) {
- $set->setRecord($record_data['name'], $record_data['type'], $record_data['ttl'], $record_data['field'], $record_data['id'] ?:false);
- }
- foreach($input['remove_record'] as $id) {
- $record = new set\record\SetRecord($id);
- $record->delete();
- }
- AjaxResponse::I()->addInfo('changes_saved');
- return AjaxResponse::I()->toArray();
- }
- function refreshSetsTableJSON($input, $vars = array()) {
- $query = "SELECT dns_manager2_set.id AS id, tblclients.lastname AS lastname, dns_manager2_set.idu as idu, tblclients.firstname AS firstname,
- dns_manager2_set.name AS name, COUNT(DISTINCT(dns_manager2_setrecord.id)) AS dnsrecords
- FROM dns_manager2_set
- LEFT JOIN dns_manager2_setrecord ON dns_manager2_setrecord.setid = dns_manager2_set.id
- LEFT JOIN dns_manager2_packageset ON dns_manager2_packageset.setid = dns_manager2_set.id
- LEFT JOIN dns_manager2_package ON dns_manager2_package.defaultset = dns_manager2_set.id
- LEFT JOIN tblclients ON tblclients.id = dns_manager2_set.idu
- GROUP BY dns_manager2_set.id";
- $columns = array('name','dnsrecords','idu','firstname','lastname');
- $helper = new main\mgLibs\custom\RawQueryTableHelper($query, $input, $columns);
- $vars = $helper->getDataTableArray();
- foreach($helper->get() as $set)
- $vars['data'][] = $this->dataTablesParseRow('set-row', array('set' => $set));
- return $vars;
- }
- //=================================LOGS=============================================
- public function logsJSON($input, $vars = array()) {
- return AjaxResponse::I()->refreshPage($this->logsHTML($input, $vars))->toArray();
- }
- function logsHTML($input, $vars = array()) {
- return array(
- 'tpl' => 'logs',
- 'vars' => $vars
- );
- }
- function refreshLogTableJSON($input, $vars = array()) {
- $query = "SELECT dns_manager2_log.name AS name, CONCAT(tblclients.firstname, ' ', tblclients.lastname) AS client, dns_manager2_log.action AS action,
- dns_manager2_log.status AS status, dns_manager2_log.value AS value, dns_manager2_log.date AS date, dns_manager2_log.clientid AS clientid
- FROM dns_manager2_log
- LEFT JOIN tblclients ON tblclients.id = dns_manager2_log.clientid";
- $columns = array('name', 'client', 'action', 'status', 'value', 'date');
- $helper = new main\mgLibs\custom\RawQueryTableHelper($query, $input, $columns);
- $vars = $helper->getDataTableArray();
- foreach($helper->get() as $log)
- $vars['data'][] = array_map('nl2br',$this->dataTablesParseRow('log-row', ['log' => $log]));
- return $vars;
- }
- public function removeAllLogsJSON($input, $vars = array()) {
- manager\LogHelper::removeAllLogs();
- AjaxResponse::I()->refreshPage($this->logsHTML($input));
- AjaxResponse::I()->addInfo('all_logs_removed');
- return AjaxResponse::I()->toArray();
- }
- //===========================================================================================================
- //===========================================SERVERS=========================================================
- //===========================================================================================================
- private $settings_array = array('allow_rdns', 'allow_multiple_ptr', 'enable_cache');
- private $form = array(
- 'edit' => false,
- 'name' => '',
- 'module' => '',
- );
- public function serversJSON($input, $vars = array()) {
- return AjaxResponse::I()->refreshPage($this->serversHTML($input, $vars))->toArray();
- }
- public function serversHTML($input, $vars = array()) {
- $vars['available_submodules'] = custom\dns\Core::getAvailableSubmodules();
- $path = main\addon::getMainDIR() . DS . 'mgLibs' . DS . 'custom' . DS . 'cache' . DS . 'storage';
- if(!is_writable($path) || !is_readable($path)) {
- $vars['error'] = str_replace(':path:', $path, main\mgLibs\lang::T('cache_warning'));
- }
- return array(
- 'tpl' => 'servers'
- ,'vars' => $vars
- );
- }
- public function refreshServersTableJSON($input, $vars = array()) {
- $rep = new server\Repository();
- $helper = new custom\RepoTableHelper($rep, $input);
- $vars = $helper->getDataTableArray();
- foreach($helper->get() as $server)
- $vars['data'][] = $this->dataTablesParseRow('server-row', array('server' => $server));
- return $vars;
- }
- public function getModuleConfigurationJSON($input, $vars = array()) {
- try {
- $vars['server']['module'] = $input['server_module'];
- $vars['server']['configuration'] = custom\CoreManager::getConfiguration($input['server_module']);
- foreach($vars['server']['configuration'] as $k => &$conf) {
- if(isset($input['conf'][$k]) && !isset($conf['value'])) {
- $conf['value'] = $input['conf'][$k];
- }
- }
- } catch(DNSException $e) {
- AjaxResponse::I()->addError("Module {$input['server_module']} is unsupported");
- }
- AjaxResponse::I()->html = main\mgLibs\smarty::I()->view('module-configuration', $vars, main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
- return AjaxResponse::I()->toArray();
- }
- public function testConnectionJSON($input, $vars = array()) {
- try {
- custom\CoreManager::testConnection($input['server_module_test'], $input['conf']);
- AjaxResponse::I()->addInfo("connection_success");
- } catch(custom\dns\exceptions\DNSSubmoduleException $e) {
- AjaxResponse::I()->addRawError($e->getMessage());
- } catch(custom\dns\exceptions\DNSException $e) {
- AjaxResponse::I()->addError('module_is_unsupported', array(':module:' => $input['server_module']));
- }
- return AjaxResponse::I()->toArray();
- }
- public function addServerJSON($input, $vars = array()) {
- $vars['server'] = $this->form;
- $vars['available_submodules'] = custom\dns\Core::getAvailableSubmodules();
- AjaxResponse::I()->modal('server', $vars);
- return AjaxResponse::I()->toArray();
- }
- public function editServerJSON($input, $vars = array()) {
- $server = new server\Server($input['id']);
- $form = $this->form;
- $form['edit'] = true;
- $form['id'] = $server->id;
- $form['name'] = $server->name;
- $form['module'] = $server->module;
- $form['configuration'] = custom\CoreManager::getConfiguration($server->module);
- foreach($form['configuration'] as $key => &$arr) {
- $arr['value'] = $server->getModuleConfiguration($key);
- }
- foreach($server->getNameservers() as $nameserver) {
- $form['nameserver'][$nameserver->index] = $nameserver->toArray(false);
- }
- $form['setting'] = array();
- foreach($server->getSettings() as $k => $v)
- $form['setting'][$k] = $v->value;
- $module = $server->getModule();
- $vars['soaSupport'] = $module->hasRecordSupport('SOA');
- $vars['server'] = $form;
- $vars['available_submodules'] = custom\dns\Core::getAvailableSubmodules();
- $vars['configuration_html'] = main\mgLibs\smarty::I()->view('module-configuration',
- $vars,
- main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
- $vars['additional_configurtaion'] = true;
- $vars['disabledNs'] = $module->isDisabledPopulateNs();
- $vars['additional_config_html'] = main\mgLibs\smarty::I()->view('additional-configuration', $vars, main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
- AjaxResponse::I()->modal('server', $vars);
- return AjaxResponse::I()->toArray();
- }
- public function serverSaveJSON($input, $vars = array()) {
- if(empty($input['server_module'])) {
- AjaxResponse::I()->addError('server_module_cannot_be_empty');
- return AjaxResponse::I()->toArray();
- }
- if(empty($input['name'])) {
- AjaxResponse::I()->addError('server_name_cannot_be_empty');
- return AjaxResponse::I()->toArray();
- }
- $server = new server\Server($input['id']?:false);
- $input['id']? '' : $server->status = 0;
- $server->module = $input['server_module'];
- $server->name = $input['name'];
- $server->save();
- foreach($input['ns'] as $k => $v) {
- $server->setNameserver($k, $v['name'], $v['ip']);
- }
- //sorting by configuration
- $module_fields = custom\CoreManager::getConfiguration($server->module);
- $module_conf = array();
- foreach($module_fields as $name => $arr)
- {
- $module_conf[$name] = $input['conf'][$name];
- }
- $input['conf'] = $module_conf;
- $server->setSetting(server\setting\ServerSettingEnum::MODULE_CONFIGURATION, serialize($input['conf']));
- foreach($input['setting'] as $k => $v) {
- $server->setSetting($k, $v);
- }
- AjaxResponse::I()->refreshPage($this->serversHTML($input, $vars));
- if($input['id']) {
- AjaxResponse::I()->addInfo('changes_saved');
- } else {
- AjaxResponse::I()->addInfo('new_server_added');
- }
- return AjaxResponse::I()->toArray();
- }
- public function deleteServerJSON($input, $vars = array()) {
- $server = new server\Server($input['id']);
- if(pserver\Repository::factory()->byServerID($server->id)->count() > 0) {
- return AjaxResponse::I()->addError('this_server_is_already_in_use_by_some_packages')->toArray();
- }
- if(zone\Repository::factory()->byServerID($server->id)->count() > 0) {
- return AjaxResponse::I()->addError('there_are_zones_on_this_server')->toArray();
- }
- $migrations = custom\TaskManager::getXTasksObjects(0, 'Migration:main', 0, false);
- foreach($migrations as $migration) {
- if($migration->getParams('from') == $input['id'] || $migration->getParams('to') == $input['id']) {
- return AjaxResponse::I()->addError('you_cannot_delete_server_with_task')->toArray();
- }
- }
- $imports = custom\TaskManager::getXTasksObjects(0, 'Import:main', 0, false);
- foreach($imports as $import) {
- if($import->getParams('from') == $input['id']) {
- return AjaxResponse::I()->addError('you_cannot_delete_server_with_task')->toArray();
- }
- }
- $server->delete();
- AjaxResponse::I()->addInfo('server_removed');
- return AjaxResponse::I()->toArray();
- }
- public function turnOnServerJSON($input, $vars = array()) {
- server\Server::factory($input['id'])->turnOn();
- AjaxResponse::I()->addInfo('server_turned_on');
- return AjaxResponse::I()->toArray();
- }
- public function turnOffServerJSON($input, $vars = array()) {
- server\Server::factory($input['id'])->turnOff();
- AjaxResponse::I()->addInfo('server_turned_off');
- return AjaxResponse::I()->toArray();
- }
- public function parseDomainList($list, $key)
- {
- $parsedList = array();
- foreach($list as $value)
- {
- if(is_array($value))
- {
- array_push($parsedList, $value[$key]);
- }
- else
- {
- array_push($parsedList, $value->$key);
- }
- }
- return $parsedList;
- }
- public function validateServersByRecordsJSON($input, $vars = array())
- {
- $servers = $input['servers'] ? explode(',', $input['servers']) : false;
- $recordsTypes = $input['recordsTypes'] ? explode(',', $input['recordsTypes']) : false;
- if(!$servers || !$recordsTypes){
- return false;
- }
- $unsuportedList = array();
- foreach ($servers as $key => $value)
- {
- $unsuportedRecords = array();
- $tempServ = new main\models\custom\server\Server($value);
- $tempModule = $tempServ->getModule();
- $availableTypes = $tempModule->availableTypes;
- foreach ($recordsTypes as $record)
- {
- if(!in_array($record, $availableTypes))
- {
- $unsuportedRecords[] = $record;
- }
- }
- if($unsuportedRecords)
- {
- $unsuportedList[] = array(
- 'serverId' => $tempServ->id,
- 'serverName' => $tempServ->name,
- 'unsuportedRecords' => implode($unsuportedRecords, ', ')
- );
- }
- }
- if($unsuportedList)
- {
- return $unsuportedList;
- }
- return false;
- }
- public function checkIfPossibleToReplaceRegistrarFunctions($tldList)
- {
- $pathRegFunctions = str_replace( DS.'modules'.DS.'addons'.DS.'DNSManager2'.DS.'controllers'.DS.'addon'.DS.'admin',
- DS.'includes'.DS.'registrarfunctions.php', __DIR__);
- if(!function_exists('getregistrarconfigoptions') && file_exists($pathRegFunctions))
- {
- require_once($pathRegFunctions);
- }
- foreach ($tldList as $key => $tld)
- {
- $reg = mysql\query::query("SELECT autoreg FROM tbldomainpricing WHERE extension = :tld ",
- array('tld' => $tld))->fetchColumn("autoreg");
- $path = str_replace( DS.'addons'.DS.'DNSManager2'.DS.'controllers'.DS.'addon'.DS.'admin',
- DS.'registrars'.DS.$reg.DS.$reg.'.php', __DIR__);
- if(file_exists($path))
- {
- include_once $path;
- if(!function_exists($reg.'_GetDNS') && !function_exists($reg.'_SaveDNS'))
- {
- continue;
- }
- }
- unset($tldList[$key]);
- }
- return $tldList;
- }
- public function changeAlertTextJSON($input, $vars = array())
- {
- $vars['type'] = $input['type'];
- $vars['statusContent'] = globalsetting\GlobalSetting::byKey($vars['type']);
- if($vars['statusContent'] === false)
- {
- globalsetting\GlobalSetting::set($vars['type'], main\mgLibs\lang::T($vars['type']));
- $vars['statusContent'] = globalsetting\GlobalSetting::byKey($vars['type']);
- }
- return AjaxResponse::I()->modal('status-content', $vars)->toArray();
- }
- public function changeAlertTextSaveJSON($input, $vars = array())
- {
- globalsetting\GlobalSetting::set($input['type'], $input['statusContent']);
- AjaxResponse::I()->addInfo('changes_saved');
- return AjaxResponse::I()->toArray();
- }
- public function getAdditionalConfigurationJSON($input,$vars =array())
- {
- $subModule = $input['server_module'];
- $class = '\MGModule\DNSManager2\mgLibs\custom\dns\submodules\\' . $subModule;
- if(class_exists($class))
- {
- $module = new $class;
- $vars['soaSupport'] = $module->hasRecordSupport('SOA');
- $vars['disabledNs'] = $module->isDisabledPopulateNs();
- }
- AjaxResponse::I()->html = main\mgLibs\smarty::I()->view('additional-configuration', $vars, main\addon::getModuleTemplatesDir().DS.'pages' . DS . main\addon::I()->page . DS . 'modal');
- return AjaxResponse::I()->toArray();
- }
- }
|