function domainbox_SaveDNS($params) { // Get the list of existing DNS records $existingRecords = domainbox_GetDNS($params); $newRecordList = array(); $deleteRecords = array(); $modifyRecords = array(); $createRecords = array(); foreach ($params["dnsrecords"] as $key => $values) { if (!(strlen($values['address']) < 1 && strlen($values['hostname']) < 1)) { $dnsRecord = new DnsRecordParameter(); $dnsRecord->HostName = $values["hostname"]; $dnsRecord->RecordType = $values["type"]; $dnsRecord->Content = $values["address"]; $dnsRecord->Priority = $dnsRecord->RecordType == "MX" ? $params["priority"] : 0; $newRecordList[] = $dnsRecord; } } foreach ($newRecordList as $newRecord) { // Check if the record is in the existing records $isExistingRecord = false; foreach ($existingRecords as $existingRecord) { if ($newRecord->HostName == $existingRecord['hostname'] && $newRecord->RecordType == $existingRecord['type']) { $isExistingRecord = true; // Is in the existing records, so this is either delete or modify if (!($newRecord->Content == $existingRecord['address'])) { if (strlen($newRecord->Content) < 1) { $newRecord->Content = $existingRecord['address']; $deleteRecords[] = $newRecord; } else { $newRecord->OldContent = $existingRecord['address']; $modifyRecords[] = $newRecord; } break; } } } if (!$isExistingRecord) { $createRecords[] = $newRecord; } } // Domainbox API configuration $authParameters = getAuthParameters($params); $apiEndpoint = $params["TestMode"] ? "https://sandbox.domainbox.net/?WSDL" : "https://live.domainbox.net/?WSDL"; if (count($createRecords) > 0) { // Create DNS records $createDnsRecordsParameters = new CreateDnsRecordsParameters(); $createDnsRecordsParameters->Zone = $params['sld'] . '.' . $params['tld']; try { $createDnsRecordsParameters->Records = $createRecords; $parameters = array('AuthenticationParameters' => $authParameters, 'CommandParameters' => $createDnsRecordsParameters); $client = new SoapClient($apiEndpoint, array('soap_version' => SOAP_1_2)); $result = $client->CreateDnsRecords($parameters); $result = $result->CreateDnsRecordsResult; if ($result->ResultCode != 100) { $error = $result->ResultMsg; } } catch (Exception $e) { $error = "There was an error communicating with Domainbox"; } } if (count($deleteRecords) > 0) { // Delete DNS records $deleteDnsRecordsParameters = new DeleteDnsRecordsParameters(); $deleteDnsRecordsParameters->Zone = $params['sld'] . '.' . $params['tld']; try { $deleteDnsRecordsParameters->Records = $deleteRecords; $parameters = array('AuthenticationParameters' => $authParameters, 'CommandParameters' => $deleteDnsRecordsParameters); $client = new SoapClient($apiEndpoint, array('soap_version' => SOAP_1_2)); $result = $client->DeleteDnsRecords($parameters); $result = $result->DeleteDnsRecordsResult; if ($result->ResultCode != 100) { $error = $result->ResultMsg; } } catch (Exception $e) { $error = "There was an error communicating with Domainbox"; } } if (count($modifyRecords) > 0) { // Modify DNS records $modifyDnsRecordsParameter = new ModifyDnsRecordsParameters(); $modifyDnsRecordsParameter->Zone = $params["sld"] . '.' . $params["tld"]; try { $modifyDnsRecordsParameter->Records = $modifyRecords; $parameters = array('AuthenticationParameters' => $authParameters, 'CommandParameters' => $modifyDnsRecordsParameter); $client = new SoapClient($apiEndpoint, array('soap_version' => SOAP_1_2)); $result = $client->ModifyDnsRecords($parameters); $result = $result->ModifyDnsRecordsResult; if ($result->ResultCode != 100) { $error = $result->ResultMsg; } } catch (Exception $e) { $error = "There was an error communicating with Domainbox"; } } $values["error"] = $error; return $values; }