Example #1
0
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;
}