",
$item_name
);
if ($this->Fields[$item]['readonly']) {
printf(
" %s ",
$item,
$carrier->$item,
$carrier->$item
);
} else {
printf(
"",
$item,
$carrier->$item
);
}
print "
";
}
printf("", $carrier->id);
$this->printFiltersToForm();
$this->printHiddenFormElements();
print <<< END
END;
}
function updateRecord()
{
//print "Updating carrier ...";
if (!$_REQUEST['id_filter']) return;
if (!$carrier = $this->getRecord($_REQUEST['id_filter'])) {
return false;
}
foreach (array_keys($this->Fields) as $item) {
$var_name = $item.'_form';
if ($this->Fields[$item]['type'] == 'integer') {
$carrier->$item = intval($_REQUEST[$var_name]);
} else {
$carrier->$item = trim($_REQUEST[$var_name]);
}
}
$function = array(
'commit' => array(
'name' => 'updateCarrier',
'parameters' => array($carrier),
'logs' => array(
'success' => sprintf('Carrier %d has been updated', $_REQUEST['id_filter'])
)
)
);
$result = $this->SoapEngine->execute($function, $this->html);
dprint_r($result);
return (bool)$result;
}
}
diff --git a/library/NGNPro/Records/DnsZones.php b/library/NGNPro/Records/DnsZones.php
index cf71d88..890175a 100644
--- a/library/NGNPro/Records/DnsZones.php
+++ b/library/NGNPro/Records/DnsZones.php
@@ -1,904 +1,904 @@
array(
'type'=>'integer',
'help' => 'Zone owner'
)
);
var $Fields = array(
'customer' => array(
'type' => 'integer',
'help' => 'Zone owner'
),
'serial' => array(
'type' => 'integer',
'help' => 'Serial number',
'readonly' => 1
),
'email' => array(
'type' => 'string',
'help' => 'Administrator address'
),
'ttl' => array(
'type' => 'integer',
'help' => 'Time to live of SOA record'
),
'minimum' => array(
'type' => 'integer',
'help' => 'Default time to live period'
),
'retry' => array(
'type' => 'integer',
'help' => 'Retry transfer period'
),
'expire' => array(
'type' => 'integer',
'help' => 'Expire period'
),
'info' => array(
'type' => 'string',
'help' => 'Zone description'
)
);
public function __construct($SoapEngine)
{
dprint("init DnsZones");
$this->filters = array(
'name' => trim($_REQUEST['name_filter']),
'info' => trim($_REQUEST['info_filter'])
);
parent::__construct($SoapEngine);
$this->sortElements = array(
'changeDate' => 'Change date',
'name' => 'Name'
);
$this->Fields['nameservers'] = array(
'type'=>'text',
'name'=>'Name servers',
'help'=>'Authoritative name servers'
);
}
function showAfterEngineSelection()
{
if ($this->SoapEngine->name_servers) {
//printf(" Available name servers: %s", $this->SoapEngine->name_servers);
}
}
function listRecords()
{
$this->showSeachForm();
// Filter
$filter = array(
'name' => $this->filters['name'],
'info' => $this->filters['info'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range = array(
'start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query = array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getZones');
$result = $this->SoapEngine->soapclient->getZones($Query);
if ($this->checkLogSoapError($result, true)) {
return false;
} else {
$this->rows = $result->total;
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print <<< END
$this->rows records found
Id |
Owner |
Zone |
Administrator |
Info |
|
Serial |
Default TTL |
Change date |
Actions |
END;
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows = $this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->zones[$i]) break;
$zone = $result->zones[$i];
$base_url_data = array(
'service' => $this->SoapEngine->service,
'name_filter' => $zone->name
);
$delete_url_data = array_merge(
$base_url_data,
array(
'action' => 'Delete'
)
);
$zone_url_data = $base_url_data;
$records_url_data = array(
- 'service' => sprintf('dns_records@%s', $this->SoapEngine->service),
+ 'service' => sprintf('dns_records@%s', $this->SoapEngine),
'zone_filter' => $zone->name
);
$customer_url_data = array(
- 'service' => sprintf('customers@%s', $this->SoapEngine->service),
+ 'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine),
'customer_filter' => $zone->customer
);
$index = $this->next + $i + 1;
if ($this->adminonly) {
$delete_url_data['reseller_filter'] = $zone->reseller;
$zone_url_data['reseller_filter'] = $zone->reseller;
$records_url_data['reseller_filter'] = $zone->reseller;
}
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['name_filter'] == $zone->name) {
$delete_url_data['confirm'] = 1;
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
$_url = sprintf(
"%s&%s",
$this->url,
http_build_query($delete_url_data)
);
$zone_url = sprintf(
"%s&%s",
$this->url,
http_build_query($zone_url_data)
);
$records_url = sprintf(
"%s&%s",
$this->url,
http_build_query($records_url_data)
);
$customer_url = sprintf(
"%s&%s",
$this->url,
http_build_query($customer_url_data)
);
sort($zone->nameservers);
$ns_text = '';
foreach ($zone->nameservers as $ns) {
$ns_text.= $ns." ";
}
printf(
"
%s |
%s.%s |
%s |
%s |
%s |
Records |
%s |
%s |
%s |
%s |
",
$index,
$customer_url,
$zone->customer,
$zone->reseller,
$zone_url,
$zone->name,
$zone->email,
$zone->info,
$records_url,
$zone->serial,
$zone->ttl,
$zone->changeDate,
$_url,
$actionText
);
print "";
$i++;
}
}
print " ";
if ($this->rows == 1) {
$this->showRecord($zone);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function deleteRecord($dictionary = array())
{
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "Please press on Confirm to confirm the delete. ";
return true;
}
if (!strlen($this->filters['name'])) {
print " Error: missing Dns zone name ";
return false;
}
$name = $this->filters['name'];
$function = array(
'commit' => array(
'name' => 'deleteZone',
'parameters' => array($name),
'logs' => array(
'success' => sprintf('Dns zone %s has been deleted', $this->filters['name'])
)
)
);
unset($this->filters);
$result = $this->SoapEngine->execute($function, $this->html);
if ($this->checkLogSoapError($result, true)) {
return false;
} else {
return true;
}
}
function showAddForm()
{
if ($this->selectionActive) return;
printf(
"
";
}
function addRecord($dictionary = array())
{
$name = trim($_REQUEST['name']);
$info = trim($_REQUEST['info']);
$name_servers = trim($_REQUEST['name_servers']);
if ($_FILES['import_file']['tmp_name']) {
$content = fread(fopen($_FILES['import_file']['tmp_name'], "r"), $_FILES['import_file']['size']);
//print_r($content);
if (!$imported_data = json_decode($content, true)) {
printf("Error: reading imported data. ");
return false;
}
//print_r($imported_data);
if (!in_array('dns_zones', array_keys($imported_data))) {
printf(" Error: Missing zones in imported data. ");
return false;
}
if (!in_array('dns_records', array_keys($imported_data))) {
return false;
printf(" Error: Missing records in imported data. ");
}
foreach ($imported_data['customers'] as $customer) {
// Insert credetials
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth);
$customer['credit'] = floatval($customer['credit']);
$customer['balance'] = floatval($customer['balance']);
// Call function
$this->log_action('addAccount');
$result = $this->SoapEngine->soapclientCustomers->addAccount($customer);
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode == 5001) {
$result = $this->SoapEngine->soapclientCustomers->updateCustomer($customer);
if (!$this->checkLogSoapError($result, true, true)) {
printf(' Customer %s has been updated', $customer['id']);
}
} else {
$log = sprintf(
"SOAP request error from %s: %s (%s): %s",
$this->SoapEngine->SOAPurl,
$error_msg,
$error_fault->detail->exception->errorcode,
$error_fault->detail->exception->errorstring
);
syslog(LOG_NOTICE, $log);
printf(" Error: $log");
}
} else {
printf(' Customer %s has been added', $customer['id']);
}
}
$name_servers = array();
foreach ($imported_data['dns_zones'] as $zone) {
flush();
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('addZone');
$result = $this->SoapEngine->soapclient->addZone($zone);
$name_servers[$zone['name']] = $zone['nameservers'];
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode == 7001) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('updateZone');
$result = $this->SoapEngine->soapclient->updateZone($zone);
if (!$this->checkLogSoapError($result, true, true)) {
printf(' Zone %s has been updated', $zone['name']);
}
} else {
$log = sprintf(
"SOAP request error from %s: %s (%s): %s",
$this->SoapEngine->SOAPurl,
$error_msg,
$error_fault->detail->exception->errorcode,
$error_fault->detail->exception->errorstring
);
syslog(LOG_NOTICE, $log);
printf(" Error: $log");
}
} else {
printf(' Zone %s has been added', $zone['name']);
}
}
$added = 0;
$updated = 0;
foreach ($imported_data['dns_records'] as $record) {
flush();
if (in_array($record['name'], $name_servers[$record['zone']]) && $record['type'] == "A") {
continue;
}
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('addRecord');
$result = $this->SoapEngine->soapclient->addRecord($record);
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode == 7003) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('updateRecord');
$result = $this->SoapEngine->soapclient->updateRecord($record);
if (!$this->checkLogSoapError($result, true, true)) {
$added += 1;
}
} else {
$log = sprintf(
"SOAP request error from %s: %s (%s): %s",
$this->SoapEngine->SOAPurl,
$error_msg,
$error_fault->detail->exception->errorcode,
$error_fault->detail->exception->errorstring
);
syslog(LOG_NOTICE, $log);
printf(" Error: $log");
}
} else {
$added += 1;
}
}
printf(' %d DNS records added and %d updated', $added, $updated);
return true;
} else {
if (isset($this->SoapEngine->allow_none_local_dns_zones)) {
$allow_none_local_dns_zones = $this->SoapEngine->allow_none_local_dns_zones;
} else {
$allow_none_local_dns_zones = false;
}
if (!strlen($name)) {
printf(" Error: Missing zone name. ");
return false;
}
$lookup1 = dns_get_record($name);
//dprint_r($lookup1);
$ns_array1=explode(" ", trim($this->SoapEngine->name_servers));
if (empty($lookup1) || $allow_none_local_dns_zones) {
$valid = 1;
} else {
$valid = 0;
foreach ($lookup1 as $lrecord) {
if ($lrecord['type'] == 'NS') {
if (in_array($lrecord['target'], $ns_array1)) {
$valid = 1 ;
}
}
}
}
if ($valid==0) {
printf("Error: DNS zone already exists on other server. Please contact our support if you plan to transfer this DNS zone to this system. ");
return false;
}
if (is_numeric($prefix)) {
printf("Error: Numeric zone names are not allowed. Use ENUM port instead. ");
return false;
}
list($customer, $reseller)=$this->customerFromLogin($dictionary);
if (!trim($_REQUEST['ttl'])) {
$ttl=3600;
} else {
$ttl = intval(trim($_REQUEST['ttl']));
}
if ($name_servers) {
$ns_array = explode(" ", trim($name_servers));
} elseif ($this->login_credentials['login_type'] != 'admin' && $this->SoapEngine->name_servers) {
$ns_array = explode(" ", trim($this->SoapEngine->name_servers));
} else {
$ns_array = array();
}
$zone = array(
'name' => $name,
'ttl' => $ttl,
'info' => $info,
'customer' => intval($customer),
'reseller' => intval($reseller),
'nameservers' => $ns_array
);
$function = array('commit' => array('name' => 'addZone',
'parameters' => array($zone),
'logs' => array('success' => sprintf('DNS zone %s has been added', $name)))
);
$result = $this->SoapEngine->execute($function, $this->html);
dprint_r($result);
if ($this->checkLogSoapError($result, true)) {
return false;
} else {
return true;
}
}
}
function showSeachFormCustom()
{
printf(
"
DNS zone
",
$this->filters['name']
);
printf(
"
Info
",
$this->filters['info']
);
}
function showRecord($zone)
{
print <<< END
";
}
function updateRecord()
{
if (!$_REQUEST['name_filter']) return;
//dprintf(" Updating zone %s...", $_REQUEST['name_filter']);
$filter = array('name' => $_REQUEST['name_filter']);
if (!$zone = $this->getRecord($filter)) {
return false;
}
$zone_old = $zone;
foreach (array_keys($this->Fields) as $item) {
$var_name = $item.'_form';
//printf(" %s=%s", $var_name, $_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer') {
$zone->$item = intval($_REQUEST[$var_name]);
} elseif ($item == 'nameservers') {
$_txt = trim($_REQUEST[$var_name]);
if (!strlen($_txt)) {
unset($zone->$item);
} else {
$_nameservers = array();
$_lines = explode("\n", $_txt);
foreach ($_lines as $_line) {
$_ns = trim($_line);
$_nameservers[] = $_ns;
}
$zone->$item = $_nameservers;
}
} else {
$zone->$item = trim($_REQUEST[$var_name]);
}
}
if ($this->adminonly) {
foreach (array_keys($this->FieldsAdminOnly) as $item) {
$var_name = $item.'_form';
if ($this->FieldsAdminOnly[$item]['type'] == 'integer') {
$zone->$item = intval($_REQUEST[$var_name]);
} else {
$zone->$item = trim($_REQUEST[$var_name]);
}
}
}
$function = array('commit' => array('name' => 'updateZone',
'parameters' => array($zone),
'logs' => array('success' => sprintf('DNS zone %s has been updated', $filter['name'])))
);
$result = $this->SoapEngine->execute($function, $this->html);
dprint_r($result);
if ($this->checkLogSoapError($result, true)) {
return false;
} else {
return true;
}
}
function getRecord($zone) {
// Filter
if (!$zone['name']) {
print "Error in getRecord(): Missing zone name";
return false;
}
$filter = array('name' => $zone['name']);
// Range
$range = array('start' => 0,
'count' => 1
);
// Order
$orderBy = array('attribute' => 'changeDate',
'direction' => 'DESC'
);
// Compose query
$Query = array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getZones');
$result = $this->SoapEngine->soapclient->getZones($Query);
if ($this->checkLogSoapError($result, true)) {
return false;
} else {
if ($result->zones[0]) {
return $result->zones[0];
} else {
return false;
}
}
}
function getRecordKeys()
{
// Filter
$filter = array(
'name' => $this->filters['name'],
'info' => $this->filters['info'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range = array(
'start' => 0,
'count' => 200
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array(
'attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query = array(
'filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getZones');
// Call function
$result = $this->SoapEngine->soapclient->getZones($Query);
if ($this->checkLogSoapError($result, true)) {
return false;
} else {
foreach ($result->zones as $zone) {
$this->selectionKeys[] = array('name' => $zone->name);
}
return true;
}
}
function hide_html()
{
if ($_REQUEST['action'] == 'PerformActions' && $_REQUEST['sub_action'] == 'export') {
return true;
} else {
return false;
}
}
}
| |