<?php

/**
 * Project:     Nxs Webservices Class
 * 
 * File:        nxs.class.php
 * @author      Jeroen de Jong <jeroen@telartis.nl>
 * @copyright   2009-2011 Telartis BV
 * @version     1.08
 *
 * @link        http://www.telartis.nl/xcms/nxs_webservices
 * 
 * Via deze PHP class kunt u op een makkelijke manier de webservices van Nxs Internet benaderen.
 * U moet vanzelfsprekend klant van Nxs zijn om deze te kunnen gebruiken.
 *  
 * Zie ook: https://klant.nxs.nl/webservice_help.php?help_command=settings
 *  
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 * 
 */

/*

=== voorbeeld code:

$domain = 'example.com';
$ip = '127.0.0.1';
$nxs = new nxs($login, $password);
$nxs->AddDNS($domain);
$nxs->SetWebRecords($domain, $ip);
$nxs->AddFallback($domain);

$zone_records = $nxs->GetZoneRecords($domain);
if ($zone_records === false) die($nxs->get_error());
foreach ($zone_records as $zone_record) {
    if ($zone_record['record_type'] == 'A') {
        ...
    } elseif ($zone_record['record_type'] == 'MX') {
        if (!strlen($zone_record['sundomain'])) {
            if ($zone_record['destination'] == 'fallback1.mx.nxs.nl') ...
        }
    }
}

$result = $nxs->AddPop($pop_username, $pop_password);
if ($nxs->has_error($result)) die($nxs->get_error($result));

list($result, $pop_accounts, $forwards) = $nxs->GetMailList($domain);
foreach ($pop_accounts as $row) {
    $pop = $row['username'];
    foreach ($row['aliases'] as $alias) ...
}
foreach ($forwards as $row) {
    $forward = $row['from'].' -> '.implode(', ', $row['tolist']);
}

=== functions:

do_webservice($data, $msg = '') => result array
print_result($result, $info, $only_errors = false, $extra_info = '') => echo result
has_error($result = array()) => bool
get_error($result = array()) => error string
email_split($email) => array(user, domain)
domain_split($domain) => array(private, public)

AddAlias($alias, $popaccount) => result array
AddDNS($domain) => result array
AddDNS2nd($domain, $masterIP) => result array
AddFTP($pakketnaam, $password) => result array
AddFallback($domain) => result array
AddForward($from, $to_array) => result array
AddHandle($data) => De aangemaakte handle
AddOrder($domain, $reg_type, $ns1, $ns1ip, $ns2, $ns2ip, $handle, $ns3 = '', $ns3ip = '', $transfer_key = '') => Het order id van de domeinaanvraag
AddPop($username, $password, $plaintext = true, $do_virus = true, $do_extra_spam = true, $extensie_blokkade = '') => result array
CheckWhois($domain) => result string (vrij, bezet, pending, Whois niet beschikbaar)
DelAlias($alias) => result array
DelDNS($domain) => result array
DelForward($from, $to) => result array
DelPOP($username) => result array
DelZoneRecord($domain, $subdomain, $record_type, $mx_pref = '') => result array
GetAutoresponder($username) => toegepaste text
GetColoAccess($datum, $tijd_start, $tijd_stop, $handles, $reden, $locatie, $guests = '') => internal_id
GetColoAccessID($internal_id) => result array
GetHandle($handle) => result array
GetHandleList() => handle array(handle, houder_naam)
GetIPTraffic($jaar = 0, $maand = 0, $dag = 0) => result array
GetMailList($domain) => array(result array, pop_accounts array(username, aliases array), forwards array(from, tolist array))
GetPostfix($domain) => postfix config text
GetOrderStatus($orderid) => result array
GetPortTraffic($jaar, $maand, $switch = 'totaal', $port = 0) => verkeer in bytes per dag
GetProductList($type = '', $alleen_actief = true) => producten array(product,type,startm,startj,stopm,stopj,lastm,lastj)
GetProductTypes($alleen_actief = true) => array(types)
_zone_records_array($domain, $result) => zone_records array(hostname, subdomain, record_type, destination, mx_pref, change)
GetZoneRecord($domain, $subdomain, $record_type) => zone_records array
GetZoneRecords($domain, $extra_info = '') => zone_records array
RebootServer($servernummer) => result array
RebootServerRack($pdu_id, $pdu_port) => result array
ReplaceZoneIPs($oud_ip, $nieuw_ip) => Het aantal gewijzigde records
SetAutoresponder($username, $content) => result array
SetFTPPass($username, $password) => result array
SetHandle($data) => result array
SetPOPFilters($username, $do_virus = true, $do_extra_spam = true, $extensie_blokkade = '') => result array
SetPOPPass($username, $password, $plaintext = true) => result array
SetZoneRecord($domain, $subdomain, $record_type, $destination, $do_create = false, $mx_pref = '') => result array
SetWebRecords($domain, $ip) => bool
SetMailRecords($domain, $mail_destination = '217.115.197.2', $mx_destination = 'lb.mailscanner.nxs.nl') => bool
TestPage($test_input = 'dummy') => test_input

*/

class nxs {

    public 
$login;
    public 
$password;
    public 
$verbose;
    public 
$url '';
    public 
$response '';
    public 
$result = array();
    public 
$pop_count 0;
    public 
$alias_count 0;
    public 
$forward_count 0;

    public function 
__construct($login$password$verbose false)
    {
        
$this->login $login;
        
$this->password $password;
        
$this->verbose $verbose;
    }

    
/**
     * Voer een webservice uit
     *
     * @return result array
     **/
    
public function do_webservice($data$msg '')
    {
        
$data['login'] = $this->login;
        
$data['pass'] = md5($this->password);
        
        
$this->url 'https://klant.nxs.nl/webservice.php?'.http_build_query($data);
        
        
$this->result = array();
        
        
$ch curl_init();
        if (
$ch === false) {
            
$this->result['errCount'] = 1;
            
$this->result['Err0'] = 'cURL init error';
        } else {
            
curl_setopt($chCURLOPT_URL$this->url);
            
curl_setopt($chCURLOPT_HEADERfalse);
            
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
curl_setopt($chCURLOPT_FOLLOWLOCATIONfalse);
            
curl_setopt($chCURLOPT_TIMEOUT120);
            
$this->response curl_exec($ch);
            
curl_close($ch);
            if (
$this->response === false) {
                
$this->result['errCount'] = 1;
                
$this->result['Err0'] = 'cURL exec error';
            } else {
                if (!
preg_match_all('/<([^>]+)>([^<]*)<\/[^>]+>/'$this->response$match)) {
                    
ob_start();
                    
var_dump($this->response);
                    
$dump trim(ob_get_contents());
                    
ob_end_clean();
                    
$this->result['errCount'] = 1;
                    
$this->result['Err0'] = 'Response error '.$dump;
                } else {
                    for (
$i 0$cnt count($match[0]); $i $cnt$i++) {
                        
$this->result[$match[1][$i]] = $match[2][$i];
                    }
                }
            }
        }
        if (
strlen($msg)) $this->print_result($this->result$msg);
        return 
$this->result;
    }

    
/**
     * Print het resultaat
     *
     * @return void
     **/
    
public function print_result($result$info ''$only_errors false$extra_info '')
    {
        if (
$this->verbose) {
            
$command array_key_exists('command'$result) ? $result['command'] : 'Unknown command';
            
$msg $command.': '.(strlen($info) ? $info.(strlen($extra_info) ? " ($extra_info)" '').' => ' '');
            if (
$this->has_error($result)) {
                echo 
$msg.$this->get_error($result);
            } elseif (!
$only_errors) {
                echo 
$msg.'OK'."\n";
            }
        }
    }

    
/**
     * Heeft het resultaat een fout?
     *
     * @return bool
     **/
    
public function has_error($result = array())
    {
        if (!
$result$result $this->result;
        return 
is_array($result) && array_key_exists('errCount'$result) ? (int)($result['errCount']) > true;
    }

    
/**
     * Geeft de error string uit het resultaat terug
     *
     * @return error string
     **/
    
public function get_error($result = array())
    {
        if (!
$result$result $this->result;
        
$errors = array();
        if (
is_array($result) && array_key_exists('errCount'$result)) {
            
$errCount = (int)$result['errCount'];
            for (
$i 0$i $errCount$i++) $errors[] = $result['Err'.$i];
        } else {
            
$errors[] = 'Unknown error';
        }
        return (
$errors implode("\n"$errors)."\n" '');
    }

    
/**
     * Split een e-mailadres in het user en domein gedeelte
     *
     * 'user@example.com' => array('user', 'example.com')
     *
     * @return array(user, domain)
     **/
    
public function email_split($email)
    {
        return 
explode('@'$email2);
    }

    
/**
     * Split een domein in private en public (=tld en soms sld+tld) gedeelte
     *
     * 'mail.example.nl' => array('mail.example', 'nl')
     * 'example.co.uk' => array('example', 'co.uk')
     *
     * @return array(private, public)
     **/
    
function domain_split($domain)
    {
        
// See Public Suffix List at: http://publicsuffix.org/
        
$parts explode('.'$domain);
        
$tld array_pop($parts);
        if (
in_array($tldexplode('|''ar|au|bd|bn|ck|cy|do|eg|er|et|fj|fk|gt|gu|il|jm|ke|kh|kw|mm|mt|mz|ni|np|nz|om|pg|py|qa|sv|tr|uk|uy|ve|ye|yu|za|zm|zw'))) {
            
// Only third level domains like *.co.uk
            
$public array_pop($parts).'.'.$tld;
        } else {
            
// Only second level domains like *.com, *.nl
            
$public $tld;
        }
        
$private implode('.'$parts);
        return array(
$private$public);
    }

    
/**
     * Maakt een alias aan naar een POP
     *
     * @return result array
     **/
    
public function AddAlias($alias$popaccount)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['alias'] = $alias// het alias adres inclusief domeinnaam
        
$data['popaccount'] = $popaccount// het POP account waar de alias naar moet verwijzen
        
        
return $this->do_webservice($data$alias.' -> '.$popaccount);
    }

    
/**
     * Voegt een domein toe aan de ns1.nxs.nl t/m ns3.nxs.nl
     *
     * @return result array
     **/
    
public function AddDNS($domain)
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        return 
$this->do_webservice($data$domain);
    }

    
/**
     * Voegt een domein toe aan de slave server ns2.nxs.nl
     *
     * @return result array
     **/
    
public function AddDNS2nd($domain$masterIP)
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$data['masterIP'] = $masterIP// het IP adres van de masterserver
        
        
return $this->do_webservice($data$domain.' '.$masterIP);
    }

    
/**
     * Maakt een FTP account aan
     *
     * @return result array
     **/
    
public function AddFTP($pakketnaam$password)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['pakketnaam'] = $pakketnaam;  // de naam van het pakket (te vinden bij producten > hosting)
        
$data['password'] = $password;      // het gewenste wachtwoord in Unix DES-based encryption (http://nl2.php.net/crypt)
        
        
return $this->do_webservice($data$pakketnaam);
    }

    
/**
     * Activeert fallback mailserver dienst voor domeinnaam
     *
     * @return result array
     **/
    
public function AddFallback($domain)
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$data['do_zonefile'] = 1// voeg ook het vereiste MX record toe aan de zonefile
        
        
return $this->do_webservice($data$domain);
    }

    
/**
     * Maakt een mailforward aan naar een extern emailadres
     *
     * @return result array
     **/
    
public function AddForward($from$to_array)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['from'] = $from// het locale adres inclusief domeinnaam
        
if (!is_array($to_array)) $to_array explode(','$to_array);
        for (
$i 0$cnt count($to_array); $i $cnt$i++) {
            
$data['to'.($i == '' $i 1)] = $to_array[$i]; // het externe adres (de ontvanger)
        
}
        
        
$msg $from.' -> '.implode(', '$to_array);
        
// max 5 forwards via webservice, niet max 15 zoals in het klanten beheer systeem:
        
if ($cnt 5$msg .= " TO MANY FORWARDS! MAX 5 / INPUT $cnt";
        
        return 
$this->do_webservice($data$msg);
    }

    
/**
     * Voegt een nieuwe handle toe onder uw klantprofiel
     *
     * @return result array
     **/
    
public function AddHandle($data)
    {
        
$data['command'] = __FUNCTION__;
        
// Vereiste variabelen:
        // $data['houder_naam'] = $houder_naam; // De naam van de houder
        // $data['houder_bezoek_straat'] = $houder_bezoek_straat; // De straat van de houder
        // $data['houder_bezoek_huisnr'] = $houder_bezoek_huisnr; // Het huisnummer van de houder
        // $data['houder_bezoek_postcode1'] = $houder_bezoek_postcode1; // Het numerieke deel postcode van de houder
        // $data['houder_bezoek_postcode2'] = $houder_bezoek_postcode2; // Het niet numerieke deel postcode van de houder
        // $data['houder_bezoek_plaats'] = $houder_bezoek_plaats; // de Woonplaats van de houder
        // $data['houder_bezoek_landcode'] = $houder_bezoek_landcode; // De landcode van de houder
        // $data['houder_adminc_achternaam'] = $houder_adminc_achternaam; // De achternaam van de administratieve contactpersoon
        // $data['houder_adminc_tussenvoegsels'] = $houder_adminc_tussenvoegsels; //  De tussenvoegsels van de administratieve contactpersoon
        // $data['houder_adminc_voorletters'] = $houder_adminc_voorletters; //  De voorletters van de administratieve contactpersoon
        // $data['houder_adminc_geslacht'] = $houder_adminc_geslacht; // Het geslacht van de administratieve contactpersoon
        // $data['houder_adminc_tel_landnummer'] = $houder_adminc_tel_landnummer; // Het landnummer van de administratieve contactpersoon
        // $data['houder_adminc_tel_nummer'] = $houder_adminc_tel_nummer; // Het telefoonnummer van de administratieve contactpersoon
        // $data['houder_adminc_emailadres'] = $houder_adminc_emailadres; // Het e-mail adres van de administratieve contactpersoon

        // Optionele variabelen:
        // $data['houder_bezoek_huisnr_toev'] = $houder_bezoek_huisnr_toev; // De toevoeging van het huisnummer van de houder
        // $data['houder_techc_achternaam'] = $houder_techc_achternaam; // De achternaam van de technische contactpersoon
        // $data['houder_techc_tussenvoegsels'] = $houder_techc_tussenvoegsels; // De tussenvoegsels van de technische contactpersoon
        // $data['houder_techc_voorletters'] = $houder_techc_voorletters; // De voorletters van de technische contactpersoon
        // $data['houder_techc_geslacht'] = $houder_techc_geslacht; // Het geslacht van de technische contactpersoon
        // $data['houder_techc_tel_landnummer'] = $houder_techc_tel_landnummer; // Het landnummer van de technische contactpersoon
        // $data['houder_techc_tel_nummer'] = $houder_techc_tel_nummer; // Het telefoonnummer van de technische contactpersoon
        // $data['houder_techc_emailadres'] = $houder_techc_emailadres; // Het e-mail adres van de technische contactpersoon
        // $data['houder_correspond_straat'] = $houder_correspond_straat; // De straatnaam van het correspondentieadres van de houder
        // $data['houder_correspond_huisnr'] = $houder_correspond_huisnr; // Het huisnummer van het correspondentieadres
        // $data['houder_correspond_huisnr_toev'] = $houder_correspond_huisnr_toev; // De toevoeging van het correspondentieadres
        // $data['houder_correspond_postcode1'] = $houder_correspond_postcode1; // Het numerieke deel van de postcode van het correspondentieadres
        // $data['houder_correspond_postcode2'] = $houder_correspond_postcode2; // Het niet numerieke deel van de postcode van het correspondentieadres
        // $data['houder_correspond_plaats'] = $houder_correspond_plaats; // De woonplaats van het correspondentieadres
        // $data['houder_correspond_landcode'] = $houder_correspond_landcode; //  De landcode van het correspondentieadres
        // $data['houder_domicilie_straat'] = $houder_domicilie_straat; // De straatnaam van het domicilieadres van de houder
        // $data['houder_domicilie_huisnr'] = $houder_domicilie_huisnr; // Het huisnummer van het domicilieadres
        // $data['houder_domicilie_huisnr_toev'] = $houder_domicilie_huisnr_toev; // De toevoeging van het huisnummer van het domicilieadres
        // $data['houder_domicilie_postcode1'] = $houder_domicilie_postcode1; // Het numerieke deel van het domicilieadres
        // $data['houder_domicilie_postcode2'] = $houder_domicilie_postcode2; // Het niet numerieke deel van het domicilieadres
        // $data['houder_domicilie_plaats'] = $houder_domicilie_plaats; // De woonplaats van het domicilieadres
        // $data['houder_opt_out'] = $houder_opt_out; // Wenst de houder gebruik te maken van een opt-out regeling?
        // $data['eerste'] = $eerste; // Een nl domein dat eerder door dezelfde houder is geregistreerd.
        // $data['btw_nummer'] = $btw_nummer; // Het btw nummer van de houder

        
$result $this->do_webservice($data$data['houder_naam']);
        
        return 
$result['handle']; // De aangemaakte handle
    
}

    
/**
     * Dient een order voor een domeinnaam in. Alleen mogelijk voor klanten met een overkoepelend registratiecontract met Nxs Internet.
     *
     * @return result array
     **/
    
public function AddOrder($domain$reg_type$ns1$ns1ip$ns2$ns2ip$handle$ns3 ''$ns3ip ''$transfer_key '')
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain); // De te registreren domeinnaam
        
        
$data['reg_type'] = $reg_type;  // Registratie van nieuw domein (nieuw) of verhuizing (verhuis)
        
$data['ns1'] = $ns1;            // De eerste nameserver
        
$data['ns1ip'] = $ns1ip;        // Het ip adres van de eerste nameserver
        
$data['ns2'] = $ns2;            // De tweede nameserver
        
$data['ns2ip'] = $ns2ip;        // Het ip adres van de tweede nameserver
        
$data['handle'] = $handle;      // De handle van de houder van de te registreren domeinnaam
        
        
if (strlen($ns3)) $data['ns3'] = $ns3;                              // De derde nameserver
        
if (strlen($ns3ip)) $data['ns3ip'] = $ns3ip;                        // Het ip adres van de derde nameserver
        
if (strlen($transfer_key)) $data['transfer_key'] = $transfer_key;   // De transferkey van een verhuizing
        
        
$result $this->do_webservice($data$domain);
        
        return 
$result['order-id']; // Het order id van de domeinaanvraag
    
}

    
/**
     * Maakt een POP account aan
     *
     * @return result array
     **/
    
public function AddPop($username$password$plaintext true$do_virus true$do_extra_spam true$extensie_blokkade '')
    {
        
$data['command'] = $plaintext 'AddPOPNoCrypt' 'AddPop';
        
        
$data['username'] = $username// de naam van het mailaccount inclusief domeinnaam
        
$data['password'] = $password// het gewenste wachtwoord in plaintext of Unix DES-based encryption (http://nl2.php.net/crypt)
        
        
$data['do_virus'] = ($do_virus 0);           // wel of geen virusfiltering toepassen (1/0)
        
$data['do_extra_spam'] = ($do_extra_spam 0); // wel of geen extra spamfilters toepassen (1/0)
        
$data['extensie_blokkade'] = ''// attachments met deze extensies altijd blokkeren door dubbele punten gescheiden (.exe:.com:.bat)
        
        
return $this->do_webservice($data$username);
    }

    
/**
     * Voert een WHOIS query uit voor een op te geven domeinnaam
     *
     * @return result string (vrij, bezet, pending, Whois niet beschikbaar)
     **/
    
public function CheckWhois($domain)
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain); // de domeinnaam voor WHOIS query
        
        
$result $this->do_webservice($data);
        
$this->print_result($result$domain.' -> '.$result['whois']);
        
        return 
$result['whois']; // het resultaat van de WHOIS query
    
}

    
/**
     * Verwijdert een alias van een POP
     *
     * @return result array
     **/
    
public function DelAlias($alias)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['alias'] = $alias// het alias adres inclusief domeinnaam
        
        
return $this->do_webservice($data$alias);
    }

    
/**
     * Verwijdert domein uit de nameservers ns1 t/m ns3 of alleen ns2 (slave)
     *
     * @return result array
     **/
    
public function DelDNS($domain)
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        return 
$this->do_webservice($data$domain);
    }

    
/**
     * Verwijderd mailforward account
     *
     * @return result array
     **/
    
public function DelForward($from$to)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['from'] = $from// het locale adres inclusief domeinnaam
        
$data['to'] = $to;     // één van de ontvangende adressen
        
        
return $this->do_webservice($data$from.' -> '.$to);
    }

    
/**
     * Verwijdert POP account
     *
     * @return result array
     **/
    
public function DelPOP($username)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['username'] = $username// de naam van het te verwijderen mailaccount inclusief domeinnaam
        
        
return $this->do_webservice($data$username);
    }

    
/**
     * Verwijdert een record in de zonefile van een domein
     *
     * @return result array
     **/
    
public function DelZoneRecord($domain$subdomain$record_type$mx_pref '')
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$hostname strlen($subdomain) ? $subdomain '@';
        
        
$data['hostname'] = $hostname;             // het te verwijderen A,MX,CNAME record ('@' indien er geen sprake is van subdomein bv: 'nxstest.nl')
        
$data['record_type'] = $record_type;       // het type (A,MX,CNAME) van het te verwijderen record
        
if ($mx_pref$data['mx_pref'] = $mx_pref// de preference van het MX record indien deze verwijderd wordt
        
        
return $this->do_webservice($data$hostname.'.'.$domain.' '.$record_type.rtrim(' '.$mx_pref));
    }

    
/**
     * Retourneert autoresponder van POP account
     *
     * @return content string
     **/
    
public function GetAutoresponder($username)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['username'] = $username// de naam van het mailaccount inclusief domeinnaam
        
        
$result $this->do_webservice($data);
        
$this->print_result($result$username." -> '".$result['content']."'");
        
        return 
$result['content']; // toegepaste tekst
    
}

    
/**
     * Vraagt toegang aan tot datacenter. De benodigde access ID kan vervolgens met de functie GetColoAccessID opgevraagd worden
     *
     * @return internal_id
     **/
    
public function GetColoAccess($datum$tijd_start$tijd_stop$handles$reden$locatie$guests '')
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['datum'] = $datum;            // de datum van toegang in formaat: ddmmyyy
        
$data['tijd_start'] = $tijd_start;  // het starttijdstip in formaat: hhmm
        
$data['tijd_stop'] = $tijd_stop;    // het stoptijdstip in formaat: hhmm
        
$data['handles'] = $handles;        // de contactpersoon handles (te vinden op klant.nxs.nl) gescheiden door komma's
        
$data['reden'] = $reden;            // de reden van uw bezoek
        
$data['locatie'] = $locatie;        // het datacenter waar u toegang toe wilt aanvragen
        
if (strlen($guests)) $data['guests'] = $guests// de namen van eventuele gasten die eenmalig toegang krijgen gescheiden door komma's. Alleen beschikbaar voor klanten met een eigen rack
        
        
$result $this->do_webservice($data);
        
$this->print_result($result$datum.' '.$tijd_start.' -> internal_id='.$result['internal_id']);
        
        return 
$result['internal_id']; // interne nummer waarmee later ook het externe AccessID opgevraagd kan worden.
                                       // Gebruik hiervoor de functie GetColoAccessID. De benodigde AccessID wordt
                                       // ook naar de aangemelde personen gemaild en per SMS verstuurd.
    
}

    
/**
     * Vraagt Access ID op voor een eerder ingediende aanvraag met het commando GetColoAccess. De Access ID kan gebruikt worden om toegang tot het datacenter te krijgen.
     *
     * @return result array
     **/
    
public function GetColoAccessID($internal_id)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['internal_id'] = $internal_id// het interne nummer dat uitgegeven is door de functie GetColoAccess
        
        // Output:
        // access_id de Access ID indien al teruggekoppeld door het datacenter. Anders is deze waarde 0
        // handles   de handles die onder deze aanmelding geregistreerd zijn
        // guests    de gasten die onder deze aanmelding geregistreerd zijn (alleen voor klanten met een eigen rack)
        // datum     datum en tijden van aanmelding
        // reden     de reden van aanmelding
        
return $this->do_webservice($data$internal_id);
    }

    
/**
     * Geeft alle contactinformatie van 1 handle
     *
     * @return result array
     **/
    
public function GetHandle($handle)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['handle'] = $handle;
        
        
// Output:
        // houder_naam    De naam van de houder
        // houder_bezoek_straat    De straat van de houder
        // houder_bezoek_huisnr    Het huisnummer van de houder
        // houder_bezoek_postcode1    Het numerieke deel postcode van de houder
        // houder_bezoek_postcode2    Het niet numerieke deel postcode van de houder
        // houder_bezoek_plaats    de Woonplaats van de houder
        // houder_bezoek_landcode    De landcode van de houder
        // houder_adminc_achternaam    De achternaam van de administratieve contactpersoon
        // houder_adminc_tussenvoegsels     De tussenvoegsels van de administratieve contactpersoon
        // houder_adminc_voorletters     De voorletters van de administratieve contactpersoon
        // houder_adminc_geslacht    Het geslacht van de administratieve contactpersoon
        // houder_adminc_tel_landnummer    Het landnummer van de administratieve contactpersoon
        // houder_adminc_tel_nummer    Het telefoonnummer van de administratieve contactpersoon
        // houder_adminc_emailadres    Het e-mail adres van de administratieve contactpersoon
        // houder_techc_achternaam    De achternaam van de technische contactpersoon
        // houder_techc_tussenvoegsels    De tussenvoegsels van de technische contactpersoon
        // houder_techc_voorletters    De voorletters van de technische contactpersoon
        // houder_techc_geslacht    Het geslacht van de technische contactpersoon
        // houder_techc_tel_landnummer    Het landnummer van de technische contactpersoon
        // houder_techc_tel_nummer    Het telefoonnummer van de technische contactpersoon
        // houder_techc_emailadres    Het e-mail adres van de technische contactpersoon
        // houder_bezoek_huisnr_toev    De toevoeging van het huisnummer van de houder
        // houder_correspond_straat    De straatnaam van het correspondentieadres van de houder
        // houder_correspond_huisnr    Het huisnummer van het correspondentieadres
        // houder_correspond_huisnr_toev    De toevoeging van het correspondentieadres
        // houder_correspond_postcode1    Het numerieke deel van de postcode van het correspondentieadres
        // houder_correspond_postcode2    Het niet numerieke deel van de postcode van het correspondentieadres
        // houder_correspond_plaats    De woonplaats van het correspondentieadres
        // houder_correspond_landcode     De landcode van het correspondentieadres
        // houder_domicilie_straat    De straatnaam van het domicilieadres van de houder
        // houder_domicilie_huisnr    Het huisnummer van het domicilieadres
        // houder_domicilie_huisnr_toev    De toevoeging van het huisnummer van het domicilieadres
        // houder_domicilie_postcode1    Het numerieke deel van het domicilieadres
        // houder_domicilie_postcode2    Het niet numerieke deel van het domicilieadres
        // houder_domicilie_plaats    De woonplaats van het domicilieadres
        // houder_opt_out    Wenst de houder gebruik te maken van een opt-out regeling?
        // eerste    Een nl domein dat eerder door dezelfde houder is geregistreerd
        // datum    De datum waarop de handle voor het laatst is gewijzigd
        // btw_nummer    Het btw nummer van de houder
        
return $this->do_webservice($data$handle);
    }

    
/**
     * Geeft een lijst van alle handles en houder namen onder uw klantprofiel
     *
     * @return handle array(handle, houder_naam)
     **/
    
public function GetHandleList()
    {
        
$data['command'] = __FUNCTION__;
        
$result $this->do_webservice($data);
        
$this->print_result($result);
        
        
$r = array();
        if (!
$this->has_error($result)) {
            
$handles = array();
            
$houder_namen = array();
            foreach (
$result as $key=>$val) {
                if (
preg_match('/^handle(\d+)$/'$key$m)) {
                    
$handles[$m[1]] = $val;
                } elseif (
preg_match('/^houder_naam(\d+)$/'$key$m)) {
                    
$houder_namen[$m[1]] = $val;
                }
            }
            foreach (
$handles as $key=>$handle) {
                
$r[] = array('handle'=>$handle'houder_naam'=>$houder_namen[$key]);
            }
        }
        return 
$r;
    }

    
/**
     * Geeft verbruikt traffic per ip voor opgegeven jaar en maand
     *
     * @return result array
     **/
    
public function GetIPTraffic($jaar 0$maand 0$dag 0)
    {
        
$data['command'] = __FUNCTION__;
        
        if (
$jaar)  $data['jaar']  = $jaar;  // Het jaar dat moet worden opgevraagd. Als geen jaar wordt opgegeven wordt het huidige jaar gebruikt
        
if ($maand$data['maand'] = $maand// De maand die moet worden opgevraagd. Als geen maand wordt opgegeven wordt de huidige maand gebruikt.
        
if ($dag)   $data['dag']   = $dag;   // Als een dag wordt opgegeven wordt alleen traffic van deze dag teruggegeven
        
        // Output:
        // ipX            ip nummer X
        // sentX          Totaal uitgaand verkeer naar ip X in bytes
        // receivedX      Totaal inkomend verkeer vanaf ip X in bytes
        // totalX         Totaal verkeer gegenereerd door ip X
        // countip        Totaal aantal ip adressen
        // total-received Totaal inkomend verkeer
        // total-sent     Totaal uitgaand verkeer
        // total-traffic  Totaal verkeer
        
return $this->do_webservice($data"jaar=$jaar maand=$maand dag=$dag");
    }

    
/**
     * Geeft een lijst van alle gebruikte POP accounts en forwards voor een domein
     *
     * @return array(result array, pop_accounts array(username, aliases array), forwards array(from, tolist array))
     **/
    
public function GetMailList($domain)
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);  // de domeinnaam voor op te vragen lijst
        
        
$result $this->do_webservice($data$domain);
        
        
$pop_accounts = array();
        
$forwards = array();
        
        
$this->pop_count 0;
        
$this->alias_count 0;
        
$this->forward_count 0;
        
        if (!
$this->has_error($result)) {
            
            
// Let op: Nxs help voor GetMailList klopt niet. Geen pops_used/forwards_used maar wel total_pops/total_forwards
            // $total_pops = (int)$result['total_pops']; // pops_used: totaal aantal gebruikte POP accounts
            // $total_forwards = (int)$result['total_forwards']; // forwards_used: totaal aantal gebruikte forwards
            
            
$pop_accounts_tmp = array();
            
$aliases_tmp = array();
            
$forwards_tmp = array();
            
$tolist_tmp = array();
            foreach (
$result as $key=>$val) {
                if (
preg_match('/^pop(\d+)$/'$key$m)) {
                    
// popX: accountnaam nummer X van het POP account. Als er geen accounts gevonden worden is de waarde van pop0 gelijk aan 0.
                    
if ($val !== '0'$pop_accounts_tmp[$m[1]] = $val;
                } elseif (
preg_match('/^pop(\d+)alias(\d+)$/'$key$m)) {
                    
// popXaliasY: alias Y voor het POP account popX
                    
$aliases_tmp[$m[1]][] = $val;
                } elseif (
preg_match('/^forward(\d+)$/'$key$m)) {
                    
// forwardZ: forward Z op het locale domein (bv info@nxs.nl)
                    
$forwards_tmp[$m[1]] = $val;
                } elseif (
preg_match('/^forward(\d+)to(\d+)$/'$key$m)) {
                    
// forwardZtoW: bestemming W van forward Z op het externe domein (bv test@hotmail.com)
                    
$tolist_tmp[$m[1]][] = $val;
                }
            }
            
            foreach (
$pop_accounts_tmp as $key=>$username) {
                
$aliases = array();
                if (
array_key_exists($key$aliases_tmp)) {
                    foreach (
$aliases_tmp[$key] as $alias) {
                        
$aliases[] = $alias;
                    }
                }
                
$this->alias_count += count($aliases);
                
$pop_accounts[] = array('username'=>$username'aliases'=>$aliases);
            }
            
$this->pop_count count($pop_accounts);

            foreach (
$forwards_tmp as $key=>$from) {
                
$tolist = array();
                if (
array_key_exists($key$tolist_tmp)) {
                    foreach (
$tolist_tmp[$key] as $to) {
                        
$tolist[] = $to;
                    }
                }
                
$forwards[] = array('from'=>$from'tolist'=>$tolist);
            }
            
$this->forward_count count($forwards);

        }
        
        return array(
$result$pop_accounts$forwards);
    }

    
/**
     * Geeft een lijst van alle gebruikte POP accounts en forwards voor een domein in Postfix formaat
     *
     * @return postfix config text
     **/
    
public function GetPostfix($domain$add_comment true)
    {
        list(
$result$pop_accounts$forwards) = $this->GetMailList($domain);
        if (
$this->has_error($result)) {
            return 
'# '.$domain.': '.$this->get_error($result);
        } else {
            
$r = array();
            foreach (
$pop_accounts as $row) {
                
$r[] = $row['username'].' '.$row['username'].($add_comment ' # pop' '');
                foreach (
$row['aliases'] as $alias) {
                    
$r[] = $alias.' '.$row['username'].($add_comment ' # alias' '');
                }
            }
            foreach (
$forwards as $row) {
                
$r[] = $row['from'].' '.implode(','$row['tolist']).($add_comment ' # forward' '');
            }
            return 
implode("\r\n"$r)."\r\n";
        }
    }

    
/**
     * Geeft de status van een domeinaanvraag
     *
     * @return result array
     **/
    
public function GetOrderStatus($orderid)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['orderid'] = $orderid// Het orderid van de bestelling
        
        // Output:
        // orderid           Het orderid van de bestelling
        // domein            De aangevraagde domeinnaam
        // ext               De aangevraagde extensie
        // reg_type          Het aangevraagde registratietype: nieuw of verhuis
        // handle            De handle van de houder van de aangevraagde domeinnaam
        // last_update       De timestamp van de laatste update
        // status            De status van de bestelling
        // errorX            In het geval van fouten bij de registratie fout nummer X
        // error uitlegX     Korte uitleg over fout nummer X
        // registratiefouten Het aantal registratiefouten
        
return $this->do_webservice($data$orderid);
    }

    
/**
     * Geeft traffic van een switchport voor een bepaalde periode
     *
     * @return verkeer in bytes per dag
     **/
    
public function GetPortTraffic($jaar$maand$switch 'totaal'$port 0)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['jaar'] = $jaar;      // het jaar van de opgevraagde periode
        
$data['maand'] = $maand;    // de maand van de opgevraagde periode
        
$data['switch'] = $switch;  // de naam van de switch of 'totaal' voor een overzicht van al uw verkeer.
        
if ($port$data['port'] = $port;  // de poort van de switch, kan weggelaten worden wanneer het totaaloverzicht wordt opgevraagd.
        
        // Output:
        // verkeer in bytes per dag
        
return $this->do_webservice($data"jaar=$jaar maand=$maand switch=$switch port=$port");
    }

    
/**
     * Geeft een lijst van alle producten onder het klantprofiel
     *
     * @return producten array(product,type,startm,startj,stopm,stopj,lastm,lastj)
     **/
    
public function GetProductList($type ''$alleen_actief true)
    {
        
$data['command'] = __FUNCTION__;
        
$data['alleen_actief'] = ($alleen_actief 0); // toon alleen producten die niet opgezegd zijn (waarde: 1)
        
        
$types explode(',''domein,hosting,colocated,dedicated,rackspace,bandbreedte,dnsservice');
        
        if (
in_array($type$types)) {
            
$do_types = array($type);
        } else {
            
$do_types $types;
        }
        
        
$r = array();
        foreach (
$do_types as $type) {
            
$data['type'] = $type// Het type van de te tonen producten
            
$result $this->do_webservice($data);
            
$this->print_result($result$typetrue);
            if (!
$this->has_error($result)) {
                
// Let op: Nxs help voor GetProductList klopt niet. Geen total_products maar wel total_records.
                
$total = (int)$result['total_records']; // totale aantal gevonden producten.
                
for ($i 0$i $total$i++) {
                    
$r[] = array(
                        
'product' => $result['product'.$i], // omschrijving van het product
                        
'type'    => $result['type'.$i],    // het type van product
                        
'startm'  => $result['startm'.$i],  // maand waarin het product gestart is
                        
'startj'  => $result['startj'.$i],  // jaar waarin het product gestart is
                        
'stopm'   => $result['stopm'.$i],   // maand waarin het product opgezegd is. 0 Als het product nog actief is.
                        
'stopj'   => $result['stopj'.$i],   // jaar waarin het product opgezegd is. 0 Als het product nog actief is.
                        
'lastm'   => $result['lastm'.$i],   // maand waarin het product X voor het laatst gefactureerd is. Op de eerste dag na deze maand volgt een nieuwe factuur.
                        
'lastj'   => $result['lastj'.$i],   // jaar waarin het product X voor het laatst gefactureerd is. Op de eerste dag na deze maand volgt een nieuwe factuur.
                    
);
                } 
// end for
            
// end if has_error
        
// foreach end
        
        
return $r;
    }

    
/**
     * Geeft een lijst van alle producten typen onder het klantprofiel
     *
     * @return producten array(types)
     **/
    
public function GetProductTypes($alleen_actief true)
    {
        
$r = array();
        foreach (
$this->GetProductList(''$alleen_actief) as $product) {
            
$r[] = $product['type'];
        }
        
$r array_unique($r);
        return 
$r;
    }

    
/**
     * Zet GetZoneRecord(s) result om in een associative array
     *
     * @return zone_records array(hostname, subdomain, record_type, destination, mx_pref, change)
     **/
    
public function _zone_records_array($domain$result)
    {
        if (
$this->has_error($result)) {
            
$r false;
        } else {
            
$r = array();
            
$total = (int)$result['total_records'];
            for (
$i 0$i $total$i++) {
                
                
$hostname $result['hostname'.$i];
                
                if (
$hostname == $domain) {
                    
$subdomain '';
                } else {
                    
$pos strrpos($hostname'.'.$domain);
                    if (
$pos 0) {
                        
$subdomain substr($hostname0$pos);
                    } else {
                        
$subdomain $hostname;
                    }
                }
                
                
$mx_pref = (int)$result['prio'.$i];
                if (!
$mx_pref$mx_pref '';
                
                
$r[] = array(
                    
'hostname' => $hostname,         // het locale deel van de zonefile (bv: test.nxs.nl)
                    
'subdomain' => $subdomain,
                    
'record_type' => $result['type'.$i], // het record type van de zonefile (bv: A)
                    
'destination' => $result['destination'.$i], // de bestemming van de zonefile (bv: 217.115.192.5)
                    
'mx_pref' => $mx_pref,           // de prioriteit indien sprake is van MX records (bv: 10)
                    
'change' => $result['change'.$i// de datum waarop de laatste wijziging is uitgevoerd in timestamp formaat (bv: 1113312389)
                
);
            }
        }
        return 
$r;
    }
    
    
/**
     * Geeft zonefile instellingen van één record (zie GetZoneRecords voor alle records van 1 domein)
     *
     * @return zone_records array(hostname, subdomain, record_type, destination, mx_pref, change)
     **/
    
public function GetZoneRecord($domain$subdomain$record_type)
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$hostname strlen($subdomain) ? $subdomain '@';
        
        
$data['hostname'] = $hostname;       // het op te vragen A,MX,CNAME record ('@' indien er geen sprake is van subdomein bv: 'nxstest.nl')
        
$data['record_type'] = $record_type// het type (A,MX,CNAME) van het op te vragen record
        
        
$result $this->do_webservice($data$hostname.'.'.$domain.' '.$record_type);
        
        return 
$this->_zone_records_array($domain$result);
    }

    
/**
     * Geeft een lijst met zonefile instellingen van een domein (zie GetZoneRecord voor instellingen van één record)
     *
     * @return zone_records array(hostname, subdomain, record_type, destination, mx_pref, change)
     **/
    
public function GetZoneRecords($domain$extra_info '')
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$result $this->do_webservice($data);
        
$this->print_result($result$domaintrue$extra_info);
        
        return 
$this->_zone_records_array($domain$result);
    }

    
/**
     * Reboot een server via PDU
     *
     * @return result array
     **/
    
public function RebootServer($servernummer)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['servernummer'] = $servernummer// het servernummer (bv 100 in s100.nxs.nl)
        
        
return $this->do_webservice($data$servernummer);
    }

    
/**
     * Reboot een poort van een PDU
     *
     * @return result array
     **/
    
public function RebootServerRack($pdu_id$pdu_port)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['pdu_id'] = $pdu_id;      // het id van de pdu, te vinden in het klantsysteem
        
$data['pdu_port'] = $pdu_port;  // de poort van de pdu, te vinden in het klantsysteem
        
        
return $this->do_webservice($data$pdu_id.' '.$pdu_port);
    }

    
/**
     * Vervangt IP adres A voor IP adres B in alle zonefiles van een klant. LET OP: ALLE RECORDS VAN ALLE DOMEINEN MET IP A WORDEN VERVANGEN DOOR IP B
     *
     * @return result array
     **/
    
public function ReplaceZoneIPs($oud_ip$nieuw_ip)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['oud_ip'] = $oud_ip;      // het oude IP adres
        
$data['nieuw_ip'] = $nieuw_ip;  // het nieuwe IP adres
        
        
$result $this->do_webservice($data$oud_ip.' '.$nieuw_ip);
        
        return 
$result['gewijzigde_records']; // Het aantal gewijzigde records
    
}

    
/**
     * Wijzigt autoresponder van POP account
     *
     * @return result array
     **/
    
public function SetAutoresponder($username$content)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['username'] = $username;  // de naam van het mailaccount inclusief domeinnaam
        
$data['content'] = $content;    // de tekst van de autoresponse. laat dit leeg om de autoresponse uit te zetten
        
        
return $this->do_webservice($data$username." -> '".$content."'");
    }

    
/**
     * Wijzigt wachtwoord van FTP account
     *
     * @return result array
     **/
    
public function SetFTPPass($username$password)
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['username'] = $username// de naam van het FTP account
        
$data['password'] = $password// het gewenste wachtwoord in Unix DES-based encryption (http://nl2.php.net/crypt)
        
        
return $this->do_webservice($data$username);
    }

    
/**
     * Wijzig een bestaande handle
     *
     * @return result array
     **/
    
public function SetHandle($data)
    {
        
$data['command'] = __FUNCTION__;
        
// Vereiste variabelen:
        // $data['handle'] = $handle; //  De handle zoals die bij Nxs bekend is
        // $data['houder_naam'] = $houder_naam; // De naam van de houder
        // $data['houder_bezoek_straat'] = $houder_bezoek_straat; // De straat van de houder
        // $data['houder_bezoek_huisnr'] = $houder_bezoek_huisnr; // Het huisnummer van de houder
        // $data['houder_bezoek_postcode1'] = $houder_bezoek_postcode1; // Het numerieke deel postcode van de houder
        // $data['houder_bezoek_postcode2'] = $houder_bezoek_postcode2; // Het niet numerieke deel postcode van de houder
        // $data['houder_bezoek_plaats'] = $houder_bezoek_plaats; // de Woonplaats van de houder
        // $data['houder_bezoek_landcode'] = $houder_bezoek_landcode; // De landcode van de houder
        // $data['houder_adminc_achternaam'] = $houder_adminc_achternaam; // De achternaam van de administratieve contactpersoon
        // $data['houder_adminc_tussenvoegsels'] = $houder_adminc_tussenvoegsels; //  De tussenvoegsels van de administratieve contactpersoon
        // $data['houder_adminc_voorletters'] = $houder_adminc_voorletters; //  De voorletters van de administratieve contactpersoon
        // $data['houder_adminc_geslacht'] = $houder_adminc_geslacht; // Het geslacht van de administratieve contactpersoon
        // $data['houder_adminc_tel_landnummer'] = $houder_adminc_tel_landnummer; // Het landnummer van de administratieve contactpersoon
        // $data['houder_adminc_tel_nummer'] = $houder_adminc_tel_nummer; // Het telefoonnummer van de administratieve contactpersoon
        // $data['houder_adminc_emailadres'] = $houder_adminc_emailadres; // Het e-mail adres van de administratieve contactpersoon

        // Optionele variabelen:
        // $data['houder_bezoek_huisnr_toev'] = $houder_bezoek_huisnr_toev; // De toevoeging van het huisnummer van de houder
        // $data['houder_techc_achternaam'] = $houder_techc_achternaam; // De achternaam van de technische contactpersoon
        // $data['houder_techc_tussenvoegsels'] = $houder_techc_tussenvoegsels; // De tussenvoegsels van de technische contactpersoon
        // $data['houder_techc_voorletters'] = $houder_techc_voorletters; // De voorletters van de technische contactpersoon
        // $data['houder_techc_geslacht'] = $houder_techc_geslacht; // Het geslacht van de technische contactpersoon
        // $data['houder_techc_tel_landnummer'] = $houder_techc_tel_landnummer; // Het landnummer van de technische contactpersoon
        // $data['houder_techc_tel_nummer'] = $houder_techc_tel_nummer; // Het telefoonnummer van de technische contactpersoon
        // $data['houder_techc_emailadres'] = $houder_techc_emailadres; // Het e-mail adres van de technische contactpersoon
        // $data['houder_correspond_straat'] = $houder_correspond_straat; // De straatnaam van het correspondentieadres van de houder
        // $data['houder_correspond_huisnr'] = $houder_correspond_huisnr; // Het huisnummer van het correspondentieadres
        // $data['houder_correspond_huisnr_toev'] = $houder_correspond_huisnr_toev; // De toevoeging van het correspondentieadres
        // $data['houder_correspond_postcode1'] = $houder_correspond_postcode1; // Het numerieke deel van de postcode van het correspondentieadres
        // $data['houder_correspond_postcode2'] = $houder_correspond_postcode2; // Het niet numerieke deel van de postcode van het correspondentieadres
        // $data['houder_correspond_plaats'] = $houder_correspond_plaats; // De woonplaats van het correspondentieadres
        // $data['houder_correspond_landcode'] = $houder_correspond_landcode; //  De landcode van het correspondentieadres
        // $data['houder_domicilie_straat'] = $houder_domicilie_straat; // De straatnaam van het domicilieadres van de houder
        // $data['houder_domicilie_huisnr'] = $houder_domicilie_huisnr; // Het huisnummer van het domicilieadres
        // $data['houder_domicilie_huisnr_toev'] = $houder_domicilie_huisnr_toev; // De toevoeging van het huisnummer van het domicilieadres
        // $data['houder_domicilie_postcode1'] = $houder_domicilie_postcode1; // Het numerieke deel van het domicilieadres
        // $data['houder_domicilie_postcode2'] = $houder_domicilie_postcode2; // Het niet numerieke deel van het domicilieadres
        // $data['houder_domicilie_plaats'] = $houder_domicilie_plaats; // De woonplaats van het domicilieadres
        // $data['houder_opt_out'] = $houder_opt_out; // Wenst de houder gebruik te maken van een opt-out regeling?
        // $data['eerste'] = $eerste; // Een nl domein dat eerder door dezelfde houder is geregistreerd.
        // $data['btw_nummer'] = $btw_nummer; // Het btw nummer van de houder
        
return $this->do_webservice($data$data['handle']);
    }

    
/**
     * Wijzigt spam/virus filters van een POP account
     *
     * @return result array
     **/
    
public function SetPOPFilters($username$do_virus true$do_extra_spam true$extensie_blokkade '')
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['username'] = $username;                      // de naam van het mailaccount inclusief domeinnaam
        
$data['do_virus'] = ($do_virus 0);            // wel of geen virusfiltering toepassen (1/0)
        
$data['do_extra_spam'] = ($do_extra_spam 0);  // wel of geen extra spamfilters toepassen (1/0)
        
$data['extensie_blokkade'] = $extensie_blokkade;    // attachments met deze extensies altijd blokkeren door dubbele punten gescheiden (.exe:.com:.bat)
        
        
return $this->do_webservice($data$username);
    }

    
/**
     * Wijzigt wachtwoord van POP account
     *
     * @return result array
     **/
    
public function SetPOPPass($username$password$plaintext true)
    {
        
$data['command'] = $plaintext 'SetPOPPassNoCrypt' 'SetPOPPass';
        
        
$data['username'] = $username// de naam van het mailaccount inclusief domeinnaam
        
$data['password'] = $password// het gewenste wachtwoord in plaintext of Unix DES-based encryption (http://nl2.php.net/crypt)
        
        
return $this->do_webservice($data$username);
    }

    
/**
     * Wijzigt een record of voegt een record toe in de zonefile van een domein
     *
     * @return result array
     **/
    
public function SetZoneRecord($domain$subdomain$record_type$destination$do_create false$mx_pref '')
    {
        
$data['command'] = __FUNCTION__;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$hostname strlen($subdomain) ? $subdomain '@';
        
        
$data['hostname'] = $hostname;             // het te wijzigen of toe te voegen A,MX,CNAME record ('@' indien er geen sprake is van subdomein bv: 'nxstest.nl')
        
$data['record_type'] = $record_type;       // het type (A,MX,CNAME) van het te wijzigen of toe te voegen record
        
$data['destination'] = $destination;       // de nieuwe waarde voor het record
        
$data['do_create'] = ($do_create 0); // maak het record aan als blijkt dat deze nog niet bestaat (1 voor aanmaken of 0 voor niet aanmaken)
        
if ($mx_pref) {
            
$data['mx_pref'] = $mx_pref;           // de preference van het MX record indien deze gewijzigd of toegevoegd wordt
        
}
        
        return 
$this->do_webservice($data$hostname.'.'.$domain.' '.$record_type.rtrim(' '.$mx_pref).' '.$destination);
    }

    
/**
     * Wijzigt de website A records in de zonefile van een domein
     *
     * @return result bool
     **/
    
public function SetWebRecords($domain$destination)
    {
        
$data['command'] = 'SetZoneRecord';
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$data['destination'] = $destination// de nieuwe waarde voor het record
        
$data['do_create'] = 0;     // maak het record aan als blijkt dat deze nog niet bestaat (1 voor aanmaken of 0 voor niet aanmaken)
        
        
$data['hostname'] = '*';    // het te wijzigen of toe te voegen A,MX,CNAME record
        
$data['record_type'] = 'A'// het type (A,MX,CNAME) van het te wijzigen of toe te voegen record
        
$result1 $this->do_webservice($data$domain.' * A '.$destination);
        
        
$data['hostname'] = '@';    // '@' indien er geen sprake is van subdomein
        
$data['record_type'] = 'A';
        
$result2 $this->do_webservice($data$domain.' @ A '.$destination);
        
        return !
$this->has_error($result1) && !$this->has_error($result2);
    }

    
/**
     * Wijzigt het mail en MX record in de zonefile van een domein
     *
     * @return result bool
     **/
    
public function SetMailRecords($domain$mail_destination '217.115.197.2'$mx_destination 'lb.mailscanner.nxs.nl')
    {
        
$data['command'] = 'SetZoneRecord';
        
$data['do_create'] = 0;
        
        list(
$data['domein'], $data['ext']) = $this->domain_split($domain);
        
        
$data['hostname'] = 'mail';
        
$data['record_type'] = 'A';
        
$data['destination'] = $mail_destination;
        
$result1 $this->do_webservice($data$domain.' mail A '.$mail_destination);
        
        
$data['hostname'] = '@';
        
$data['record_type'] = 'MX';
        
$data['mx_pref'] = '10';
        
$data['destination'] = $mx_destination;
        
$result2 $this->do_webservice($data$domain.' @ MX 10 '.$mx_destination);
        
        return !
$this->has_error($result1) && !$this->has_error($result2);
    }

    
/**
     * Test pagina
     *
     * @return result array
     **/
    
public function TestPage($test_input 'dummy')
    {
        
$data['command'] = __FUNCTION__;
        
        
$data['test_input'] = $test_input// een op te geven test input
        
        
$result $this->do_webservice($data);
        
        
$test_output $result['test_output'];
        
        
$test_result $test_input != $test_output 'ERROR' 'OK';
        
        
$this->print_result($result$test_result);
        
        return 
$result;
    }

// END class

?>