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(); } }