├── README.md ├── fullbackup.php └── xmlapi.php /README.md: -------------------------------------------------------------------------------- 1 | CPanel-Fullbackup 2 | ============= 3 | 4 | CPanel full backup (all files+databases+emails) PHP script 5 | 6 | [Blog Post on blogs.silicontechnix.com](http://blogs.silicontechnix.com/?p=710) 7 | 8 | Working script to take full backup (all files+databases+emails) 9 | manually or using crontab services on CPanel based hosting servers. 10 | 11 | It needs CPanel account details and FTP host/account details. 12 | 13 | Most of the scripts for doing full backups are either old, totally unusable or commercial. 14 | 15 | So here is a **Open Source and Free** tool for everyone. 16 | 17 | I wrote one for my own use and sharing here so others don’t need to re-invent the wheel. 18 | 19 | For multiple servers and ftp cleanup (expire old backups) Plese check 20 | [Multi CPanel Domains-Fullbackup](https://github.com/babarnazmi/CPanel-Servers-Fullbackup) 21 | 22 | # Install Instructions: 23 | Just extract the download zip and configure the config.php file as per your need. 24 | Add remove CPanel servers. id, password, ftp credentials and good to go. 25 | 26 | If it works for you, please give your feedbackup and share your thoughts. (here [Blog Post on blogs.silicontechnix.com](http://blogs.silicontechnix.com/?p=710)) 27 | -------------------------------------------------------------------------------- /fullbackup.php: -------------------------------------------------------------------------------- 1 | password_auth($cpanel_account,$cpanel_password); 27 | $xmlapi->set_port('2083'); 28 | 29 | // Delete any other backup with filetime greater than expire time, before create new backup 30 | $conn_id = ftp_connect($ftphost) or die ("Could not connect to remote FTP"); 31 | $login_result = ftp_login($conn_id, $ftpacct, $ftppass); 32 | 33 | ftp_chdir($conn_id, $logs_dir); 34 | $files = ftp_nlist($conn_id, "."); 35 | foreach ($files as $filename) { 36 | $fileCreationTime = ftp_mdtm($conn_id, $filename); 37 | //$date = date("F j, Y, g:i a", ftp_mdtm($conn_id, $filename)); 38 | //print "
Timestamp of '$filename': $date"; 39 | $fileAge=time(); 40 | $fileAge=$fileAge-$fileCreationTime; 41 | if ($fileAge > $backupexpireindays) { // Is the file older than the given time span? 42 | //echo "
The file $filename is older than Expire time :$expiretime ...Deleting\n"; 43 | ftp_delete($conn_id, $filename); 44 | //echo "
Deleted

"; 45 | } 46 | } 47 | 48 | ftp_close($conn_id); 49 | 50 | $api_args = array( 51 | $ftpmode, 52 | $ftphost, 53 | $ftpacct, 54 | $ftppass, 55 | $email_notify, 56 | 21, 57 | '/' 58 | ); 59 | 60 | $xmlapi->set_output('json'); 61 | print $xmlapi->api1_query($cpanel_account,'Fileman','fullbackup',$api_args); 62 | 63 | ?> 64 | -------------------------------------------------------------------------------- /xmlapi.php: -------------------------------------------------------------------------------- 1 | set_hash("username", $accessHash); 118 | * $xmlapi->set_password("username", "password"); 119 | * 120 | * 3.) Execute a function 121 | * $xmlapi->listaccts(); 122 | * 123 | * @category Cpanel 124 | * @package xmlapi 125 | * @copyright 2012 cPanel, Inc. 126 | * @license http://sdk.cpanel.net/license/bsd.html 127 | * @version Release: 1.0.13 128 | * @link http://twiki.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/XmlApi 129 | * @since Class available since release 0.1 130 | **/ 131 | 132 | class xmlapi 133 | { 134 | // should debugging statements be printed? 135 | private $debug = false; 136 | 137 | // The host to connect to 138 | private $host = '127.0.0.1'; 139 | 140 | // the port to connect to 141 | private $port = '2087'; 142 | 143 | // should be the literal strings http or https 144 | private $protocol = 'https'; 145 | 146 | // output that should be given by the xml-api 147 | private $output = 'simplexml'; 148 | 149 | // literal strings hash or password 150 | private $auth_type = null; 151 | 152 | // the actual password or hash 153 | private $auth = null; 154 | 155 | // username to authenticate as 156 | private $user = null; 157 | 158 | // The HTTP Client to use 159 | 160 | private $http_client = 'curl'; 161 | 162 | /** 163 | * Instantiate the XML-API Object 164 | * All parameters to this function are optional and can be set via the accessor functions or constants 165 | * This defaults to password auth, however set_hash can be used to use hash authentication 166 | * 167 | * @param string $host The host to perform queries on 168 | * @param string $user The username to authenticate as 169 | * @param string $password The password to authenticate with 170 | * @return Xml_Api object 171 | */ 172 | public function __construct($host = null, $user = null, $password = null ) 173 | { 174 | // Check if debugging must be enabled 175 | if ( (defined('XMLAPI_DEBUG')) && (XMLAPI_DEBUG == '1') ) { 176 | $this->debug = true; 177 | } 178 | 179 | // Check if raw xml output must be enabled 180 | if ( (defined('XMLAPI_RAW_XML')) && (XMLAPI_RAW_XML == '1') ) { 181 | $this->raw_xml = true; 182 | } 183 | 184 | /** 185 | * Authentication 186 | * This can either be passed at this point or by using the set_hash or set_password functions 187 | **/ 188 | 189 | if ( ( defined('XMLAPI_USER') ) && ( strlen(XMLAPI_USER) > 0 ) ) { 190 | $this->user = XMLAPI_USER; 191 | 192 | // set the authtype to pass and place the password in $this->pass 193 | if ( ( defined('XMLAPI_PASS') ) && ( strlen(XMLAPI_PASS) > 0 ) ) { 194 | $this->auth_type = 'pass'; 195 | $this->auth = XMLAPI_PASS; 196 | } 197 | 198 | // set the authtype to hash and place the hash in $this->auth 199 | if ( ( defined('XMLAPI_HASH') ) && ( strlen(XMLAPI_HASH) > 0 ) ) { 200 | $this->auth_type = 'hash'; 201 | $this->auth = preg_replace("/(\n|\r|\s)/", '', XMLAPI_HASH); 202 | } 203 | 204 | // Throw warning if XMLAPI_HASH and XMLAPI_PASS are defined 205 | if ( ( ( defined('XMLAPI_HASH') ) && ( strlen(XMLAPI_HASH) > 0 ) ) 206 | && ( ( defined('XMLAPI_PASS') ) && ( strlen(XMLAPI_PASS) > 0 ) ) ) { 207 | error_log('warning: both XMLAPI_HASH and XMLAPI_PASS are defined, defaulting to XMLAPI_HASH'); 208 | } 209 | 210 | 211 | // Throw a warning if XMLAPI_HASH and XMLAPI_PASS are undefined and XMLAPI_USER is defined 212 | if ( !(defined('XMLAPI_HASH') ) || !defined('XMLAPI_PASS') ) { 213 | error_log('warning: XMLAPI_USER set but neither XMLAPI_HASH or XMLAPI_PASS have not been defined'); 214 | } 215 | 216 | } 217 | 218 | if ( ( $user != null ) && ( strlen( $user ) < 9 ) ) { 219 | $this->user = $user; 220 | } 221 | 222 | if ($password != null) { 223 | $this->set_password($password); 224 | } 225 | 226 | /** 227 | * Connection 228 | * 229 | * $host/XMLAPI_HOST should always be equal to either the IP of the server or it's hostname 230 | */ 231 | 232 | // Set the host, error if not defined 233 | if ($host == null) { 234 | if ( (defined('XMLAPI_HOST')) && (strlen(XMLAPI_HOST) > 0) ) { 235 | $this->host = XMLAPI_HOST; 236 | } else { 237 | throw new Exception("No host defined"); 238 | } 239 | } else { 240 | $this->host = $host; 241 | } 242 | 243 | // disabling SSL is probably a bad idea.. just saying. 244 | if ( defined('XMLAPI_USE_SSL' ) && (XMLAPI_USE_SSL == '0' ) ) { 245 | $this->protocol = "http"; 246 | } 247 | 248 | // Detemine what the default http client should be. 249 | if ( function_exists('curl_setopt') ) { 250 | $this->http_client = "curl"; 251 | } elseif ( ini_get('allow_url_fopen') ) { 252 | $this->http_client = "fopen"; 253 | } else { 254 | throw new Exception('allow_url_fopen and curl are neither available in this PHP configuration'); 255 | } 256 | 257 | } 258 | 259 | /** 260 | * Accessor Functions 261 | **/ 262 | /** 263 | * Return whether the debug option is set within the object 264 | * 265 | * @return boolean 266 | * @see set_debug() 267 | */ 268 | public function get_debug() 269 | { 270 | return $this->debug; 271 | } 272 | 273 | /** 274 | * Turn on debug mode 275 | * 276 | * Enabling this option will cause this script to print debug information such as 277 | * the queries made, the response XML/JSON and other such pertinent information. 278 | * Calling this function without any parameters will enable debug mode. 279 | * 280 | * @param bool $debug turn on or off debug mode 281 | * @see get_debug() 282 | */ 283 | public function set_debug( $debug = 1 ) 284 | { 285 | $this->debug = $debug; 286 | } 287 | 288 | /** 289 | * Get the host being connected to 290 | * 291 | * This function will return the host being connected to 292 | * @return string host 293 | * @see set_host() 294 | */ 295 | public function get_host() 296 | { 297 | return $this->host; 298 | } 299 | 300 | /** 301 | * Set the host to query 302 | * 303 | * Setting this will set the host to be queried 304 | * @param string $host The host to query 305 | * @see get_host() 306 | */ 307 | public function set_host( $host ) 308 | { 309 | $this->host = $host; 310 | } 311 | 312 | /** 313 | * Get the port to connect to 314 | * 315 | * This will return which port the class is connecting to 316 | * @return int $port 317 | * @see set_port() 318 | */ 319 | public function get_port() 320 | { 321 | return $this->port; 322 | } 323 | 324 | /** 325 | * Set the port to connect to 326 | * 327 | * This will allow a user to define which port needs to be connected to. 328 | * The default port set within the class is 2087 (WHM-SSL) however other ports are optional 329 | * this function will automatically set the protocol to http if the port is equal to: 330 | * - 2082 331 | * - 2086 332 | * - 2095 333 | * - 80 334 | * @param int $port the port to connect to 335 | * @see set_protocol() 336 | * @see get_port() 337 | */ 338 | public function set_port( $port ) 339 | { 340 | if ( !is_int( $port ) ) { 341 | $port = intval($port); 342 | } 343 | 344 | if ($port < 1 || $port > 65535) { 345 | throw new Exception('non integer or negative integer passed to set_port'); 346 | } 347 | 348 | // Account for ports that are non-ssl 349 | if ($port == '2086' || $port == '2082' || $port == '80' || $port == '2095') { 350 | $this->set_protocol('http'); 351 | } 352 | 353 | $this->port = $port; 354 | } 355 | 356 | /** 357 | * Return the protocol being used to query 358 | * 359 | * This will return the protocol being connected to 360 | * @return string 361 | * @see set_protocol() 362 | */ 363 | public function get_protocol() 364 | { 365 | return $this->protocol; 366 | } 367 | 368 | /** 369 | * Set the protocol to use to query 370 | * 371 | * This will allow you to set the protocol to query cpsrvd with. The only to acceptable values 372 | * to be passed to this function are 'http' or 'https'. Anything else will cause the class to throw 373 | * an Exception. 374 | * @param string $proto the protocol to use to connect to cpsrvd 375 | * @see get_protocol() 376 | */ 377 | public function set_protocol( $proto ) 378 | { 379 | if ($proto != 'https' && $proto != 'http') { 380 | throw new Exception('https and http are the only protocols that can be passed to set_protocol'); 381 | } 382 | $this->protocol = $proto; 383 | } 384 | 385 | /** 386 | * Return what format calls with be returned in 387 | * 388 | * This function will return the currently set output format 389 | * @see set_output() 390 | * @return string 391 | */ 392 | public function get_output() 393 | { 394 | return $this->output; 395 | } 396 | 397 | /** 398 | * Set the output format for call functions 399 | * 400 | * This class is capable of returning data in numerous formats including: 401 | * - json 402 | * - xml 403 | * - {@link http://php.net/simplexml SimpleXML} 404 | * - {@link http://us.php.net/manual/en/language.types.array.php Associative Arrays} 405 | * 406 | * These can be set by passing this class any of the following values: 407 | * - json - return JSON string 408 | * - xml - return XML string 409 | * - simplexml - return SimpleXML object 410 | * - array - Return an associative array 411 | * 412 | * Passing any value other than these to this class will cause an Exception to be thrown. 413 | * @param string $output the output type to be set 414 | * @see get_output() 415 | */ 416 | public function set_output( $output ) 417 | { 418 | if ($output != 'json' && $output != 'xml' && $output != 'array' && $output != 'simplexml') { 419 | throw new Exception('json, xml, array and simplexml are the only allowed values for set_output'); 420 | } 421 | $this->output = $output; 422 | } 423 | 424 | /** 425 | * Return the auth_type being used 426 | * 427 | * This function will return a string containing the auth type in use 428 | * @return string auth type 429 | * @see set_auth_type() 430 | */ 431 | public function get_auth_type() 432 | { 433 | return $this->auth_type; 434 | } 435 | 436 | /** 437 | * Set the auth type 438 | * 439 | * This class is capable of authenticating with both hash auth and password auth 440 | * This function will allow you to manually set which auth_type you are using. 441 | * 442 | * the only accepted parameters for this function are "hash" and "pass" anything else will cuase 443 | * an exception to be thrown 444 | * 445 | * @see set_password() 446 | * @see set_hash() 447 | * @see get_auth_type() 448 | * @param string auth_type the auth type to be set 449 | */ 450 | public function set_auth_type( $auth_type ) 451 | { 452 | if ($auth_type != 'hash' && $auth_type != 'pass') { 453 | throw new Exception('the only two allowable auth types arehash and path'); 454 | } 455 | $this->auth_type = $auth_type; 456 | } 457 | 458 | /** 459 | * Set the password to be autenticated with 460 | * 461 | * This will set the password to be authenticated with, the auth_type will be automatically adjusted 462 | * when this function is used 463 | * 464 | * @param string $pass the password to authenticate with 465 | * @see set_hash() 466 | * @see set_auth_type() 467 | * @see set_user() 468 | */ 469 | public function set_password( $pass ) 470 | { 471 | $this->auth_type = 'pass'; 472 | $this->auth = $pass; 473 | } 474 | 475 | /** 476 | * Set the hash to authenticate with 477 | * 478 | * This will set the hash to authenticate with, the auth_type will automatically be set when this function 479 | * is used. This function will automatically strip the newlines from the hash. 480 | * @param string $hash the hash to autenticate with 481 | * @see set_password() 482 | * @see set_auth_type() 483 | * @see set_user() 484 | */ 485 | public function set_hash( $hash ) 486 | { 487 | $this->auth_type = 'hash'; 488 | $this->auth = preg_replace("/(\n|\r|\s)/", '', $hash); 489 | } 490 | 491 | /** 492 | * Return the user being used for authtication 493 | * 494 | * This will return the username being authenticated against. 495 | * 496 | * @return string 497 | */ 498 | public function get_user() 499 | { 500 | return $this->user; 501 | } 502 | 503 | /** 504 | * Set the user to authenticate against 505 | * 506 | * This will set the user being authenticated against. 507 | * @param string $user username 508 | * @see set_password() 509 | * @see set_hash() 510 | * @see get_user() 511 | */ 512 | public function set_user( $user ) 513 | { 514 | $this->user = $user; 515 | } 516 | 517 | /** 518 | * Set the user and hash to be used for authentication 519 | * 520 | * This function will allow one to set the user AND hash to be authenticated with 521 | * 522 | * @param string $user username 523 | * @param string $hash WHM Access Hash 524 | * @see set_hash() 525 | * @see set_user() 526 | */ 527 | public function hash_auth( $user, $hash ) 528 | { 529 | $this->set_hash( $hash ); 530 | $this->set_user( $user ); 531 | } 532 | 533 | /** 534 | * Set the user and password to be used for authentication 535 | * 536 | * This function will allow one to set the user AND password to be authenticated with 537 | * @param string $user username 538 | * @param string $pass password 539 | * @see set_pass() 540 | * @see set_user() 541 | */ 542 | public function password_auth( $user, $pass ) 543 | { 544 | $this->set_password( $pass ); 545 | $this->set_user( $user ); 546 | } 547 | 548 | /** 549 | * Return XML format 550 | * 551 | * this function will cause call functions to return XML format, this is the same as doing: 552 | * set_output('xml') 553 | * 554 | * @see set_output() 555 | */ 556 | public function return_xml() 557 | { 558 | $this->set_output('xml'); 559 | } 560 | 561 | /** 562 | * Return simplexml format 563 | * 564 | * this function will cause all call functions to return simplexml format, this is the same as doing: 565 | * set_output('simplexml') 566 | * 567 | * @see set_output() 568 | */ 569 | public function return_object() 570 | { 571 | $this->set_output('simplexml'); 572 | } 573 | 574 | /** 575 | * Set the HTTP client to use 576 | * 577 | * This class is capable of two types of HTTP Clients: 578 | * - curl 579 | * - fopen 580 | * 581 | * When using allow url fopen the class will use get_file_contents to perform the query 582 | * The only two acceptable parameters for this function are 'curl' and 'fopen'. 583 | * This will default to fopen, however if allow_url_fopen is disabled inside of php.ini 584 | * it will switch to curl 585 | * 586 | * @param string client The http client to use 587 | * @see get_http_client() 588 | */ 589 | 590 | public function set_http_client( $client ) 591 | { 592 | if ( ( $client != 'curl' ) && ( $client != 'fopen' ) ) { 593 | throw new Exception('only curl and fopen and allowed http clients'); 594 | } 595 | $this->http_client = $client; 596 | } 597 | 598 | /** 599 | * Get the HTTP Client in use 600 | * 601 | * This will return a string containing the HTTP client currently in use 602 | * 603 | * @see set_http_client() 604 | * @return string 605 | */ 606 | public function get_http_client() 607 | { 608 | return $this->http_client; 609 | } 610 | 611 | /* 612 | * Query Functions 613 | * -- 614 | * This is where the actual calling of the XML-API, building API1 & API2 calls happens 615 | */ 616 | 617 | /** 618 | * Perform an XML-API Query 619 | * 620 | * This function will perform an XML-API Query and return the specified output format of the call being made 621 | * 622 | * @param string $function The XML-API call to execute 623 | * @param array $vars An associative array of the parameters to be passed to the XML-API Calls 624 | * @return mixed 625 | */ 626 | public function xmlapi_query( $function, $vars = array() ) 627 | { 628 | // Check to make sure all the data needed to perform the query is in place 629 | if (!$function) { 630 | throw new Exception('xmlapi_query() requires a function to be passed to it'); 631 | } 632 | 633 | if ($this->user == null) { 634 | throw new Exception('no user has been set'); 635 | } 636 | 637 | if ($this->auth ==null) { 638 | throw new Exception('no authentication information has been set'); 639 | } 640 | 641 | // Build the query: 642 | 643 | $query_type = '/xml-api/'; 644 | 645 | if ($this->output == 'json') { 646 | $query_type = '/json-api/'; 647 | } 648 | 649 | $args = http_build_query($vars, '', '&'); 650 | $url = $this->protocol . '://' . $this->host . ':' . $this->port . $query_type . $function; 651 | 652 | if ($this->debug) { 653 | error_log('URL: ' . $url); 654 | error_log('DATA: ' . $args); 655 | } 656 | 657 | // Set the $auth string 658 | 659 | $authstr; 660 | if ($this->auth_type == 'hash') { 661 | $authstr = 'Authorization: WHM ' . $this->user . ':' . $this->auth . "\r\n"; 662 | } elseif ($this->auth_type == 'pass') { 663 | $authstr = 'Authorization: Basic ' . base64_encode($this->user .':'. $this->auth) . "\r\n"; 664 | } else { 665 | throw new Exception('invalid auth_type set'); 666 | } 667 | 668 | if ($this->debug) { 669 | error_log("Authentication Header: " . $authstr ."\n"); 670 | } 671 | 672 | // Perform the query (or pass the info to the functions that actually do perform the query) 673 | 674 | $response; 675 | if ($this->http_client == 'curl') { 676 | $response = $this->curl_query($url, $args, $authstr); 677 | } elseif ($this->http_client == 'fopen') { 678 | $response = $this->fopen_query($url, $args, $authstr); 679 | } 680 | 681 | /* 682 | * Post-Query Block 683 | * Handle response, return proper data types, debug, etc 684 | */ 685 | 686 | // print out the response if debug mode is enabled. 687 | if ($this->debug) { 688 | error_log("RESPONSE:\n " . $response); 689 | } 690 | 691 | // The only time a response should contain is in the case of authentication error 692 | // cPanel 11.25 fixes this issue, but if is in the response, we'll error out. 693 | 694 | if (stristr($response, '') == true) { 695 | if (stristr($response, 'Login Attempt Failed') == true) { 696 | error_log("Login Attempt Failed"); 697 | 698 | return; 699 | } 700 | if (stristr($response, 'action="/login/"') == true) { 701 | error_log("Authentication Error"); 702 | 703 | return; 704 | } 705 | 706 | return; 707 | } 708 | 709 | 710 | // perform simplexml transformation (array relies on this) 711 | if ( ($this->output == 'simplexml') || $this->output == 'array') { 712 | $response = simplexml_load_string($response, null, LIBXML_NOERROR | LIBXML_NOWARNING); 713 | if (!$response) { 714 | error_log("Some error message here"); 715 | 716 | return; 717 | } 718 | if ($this->debug) { 719 | error_log("SimpleXML var_dump:\n" . print_r($response, true)); 720 | } 721 | } 722 | 723 | // perform array tranformation 724 | if ($this->output == 'array') { 725 | $response = $this->unserialize_xml($response); 726 | if ($this->debug) { 727 | error_log("Associative Array var_dump:\n" . print_r($response, true)); 728 | } 729 | } 730 | 731 | return $response; 732 | } 733 | 734 | private function curl_query( $url, $postdata, $authstr ) 735 | { 736 | $curl = curl_init(); 737 | curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 738 | // Return contents of transfer on curl_exec 739 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 740 | // Allow self-signed certs 741 | curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 742 | // Set the URL 743 | curl_setopt($curl, CURLOPT_URL, $url); 744 | // Increase buffer size to avoid "funny output" exception 745 | curl_setopt($curl, CURLOPT_BUFFERSIZE, 131072); 746 | 747 | // Pass authentication header 748 | $header[0] =$authstr . 749 | "Content-Type: application/x-www-form-urlencoded\r\n" . 750 | "Content-Length: " . strlen($postdata) . "\r\n" . "\r\n" . $postdata; 751 | 752 | curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 753 | 754 | curl_setopt($curl, CURLOPT_POST, 1); 755 | 756 | $result = curl_exec($curl); 757 | if ($result == false) { 758 | throw new Exception("curl_exec threw error \"" . curl_error($curl) . "\" for " . $url . "?" . $postdata ); 759 | } 760 | curl_close($curl); 761 | 762 | return $result; 763 | } 764 | 765 | private function fopen_query( $url, $postdata, $authstr ) 766 | { 767 | if ( !(ini_get('allow_url_fopen') ) ) { 768 | throw new Exception('fopen_query called on system without allow_url_fopen enabled in php.ini'); 769 | } 770 | 771 | $opts = array( 772 | 'http' => array( 773 | 'allow_self_signed' => true, 774 | 'method' => 'POST', 775 | 'header' => $authstr . 776 | "Content-Type: application/x-www-form-urlencoded\r\n" . 777 | "Content-Length: " . strlen($postdata) . "\r\n" . 778 | "\r\n" . $postdata 779 | ) 780 | ); 781 | $context = stream_context_create($opts); 782 | 783 | return file_get_contents($url, false, $context); 784 | } 785 | 786 | 787 | /* 788 | * Convert simplexml to associative arrays 789 | * 790 | * This function will convert simplexml to associative arrays. 791 | */ 792 | private function unserialize_xml($input, $callback = null, $recurse = false) 793 | { 794 | // Get input, loading an xml string with simplexml if its the top level of recursion 795 | $data = ( (!$recurse) && is_string($input) ) ? simplexml_load_string($input) : $input; 796 | // Convert SimpleXMLElements to array 797 | if ($data instanceof SimpleXMLElement) { 798 | $data = (array) $data; 799 | } 800 | // Recurse into arrays 801 | if (is_array($data)) { 802 | foreach ($data as &$item) { 803 | $item = $this->unserialize_xml($item, $callback, true); 804 | } 805 | } 806 | // Run callback and return 807 | return (!is_array($data) && is_callable($callback)) ? call_user_func($callback, $data) : $data; 808 | } 809 | 810 | 811 | /* TO DO: 812 | Implement API1 and API2 query functions!!!!! 813 | */ 814 | /** 815 | * Call an API1 function 816 | * 817 | * This function allows you to call API1 from within the XML-API, This allowes a user to peform actions 818 | * such as adding ftp accounts, etc 819 | * 820 | * @param string $user The username of the account to perform API1 actions on 821 | * @param string $module The module of the API1 call to use 822 | * @param string $function The function of the API1 call 823 | * @param array $args The arguments for the API1 function, this should be a non-associative array 824 | * @return mixed 825 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CallingAPIFunctions XML API Call documentation 826 | * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiRef/WebHome API1 & API2 Call documentation 827 | * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiBasics/CallingApiOne API1 Documentation 828 | */ 829 | public function api1_query($user, $module, $function, $args = array() ) 830 | { 831 | if ( !isset($module) || !isset($function) || !isset($user) ) { 832 | error_log("api1_query requires that a module and function are passed to it"); 833 | 834 | return false; 835 | } 836 | 837 | if (!is_array($args)) { 838 | error_log('api1_query requires that it is passed an array as the 4th parameter'); 839 | 840 | return false; 841 | } 842 | 843 | $cpuser = 'cpanel_xmlapi_user'; 844 | $module_type = 'cpanel_xmlapi_module'; 845 | $func_type = 'cpanel_xmlapi_func'; 846 | $api_type = 'cpanel_xmlapi_apiversion'; 847 | 848 | if ( $this->get_output() == 'json' ) { 849 | $cpuser = 'cpanel_jsonapi_user'; 850 | $module_type = 'cpanel_jsonapi_module'; 851 | $func_type = 'cpanel_jsonapi_func'; 852 | $api_type = 'cpanel_jsonapi_apiversion'; 853 | } 854 | 855 | $call = array( 856 | $cpuser => $user, 857 | $module_type => $module, 858 | $func_type => $function, 859 | $api_type => '1' 860 | ); 861 | for ($int = 0; $int < count($args); $int++) { 862 | $call['arg-' . $int] = $args[$int]; 863 | } 864 | 865 | return $this->xmlapi_query('cpanel', $call); 866 | } 867 | 868 | /** 869 | * Call an API2 Function 870 | * 871 | * This function allows you to call an API2 function, this is the modern API for cPanel and should be used in preference over 872 | * API1 when possible 873 | * 874 | * @param string $user The username of the account to perform API2 actions on 875 | * @param string $module The module of the API2 call to use 876 | * @param string $function The function of the API2 call 877 | * @param array $args An associative array containing the arguments for the API2 call 878 | * @return mixed 879 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CallingAPIFunctions XML API Call documentation 880 | * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiRef/WebHome API1 & API2 Call documentation 881 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ApiTwo Legacy API2 Documentation 882 | * @link http://docs.cpanel.net/twiki/bin/view/DeveloperResources/ApiBasics/CallingApiTwo API2 Documentation 883 | */ 884 | 885 | public function api2_query($user, $module, $function, $args = array()) 886 | { 887 | if (!isset($user) || !isset($module) || !isset($function) ) { 888 | error_log("api2_query requires that a username, module and function are passed to it"); 889 | 890 | return false; 891 | } 892 | if (!is_array($args)) { 893 | error_log("api2_query requires that an array is passed to it as the 4th parameter"); 894 | 895 | return false; 896 | } 897 | 898 | $cpuser = 'cpanel_xmlapi_user'; 899 | $module_type = 'cpanel_xmlapi_module'; 900 | $func_type = 'cpanel_xmlapi_func'; 901 | $api_type = 'cpanel_xmlapi_apiversion'; 902 | 903 | if ( $this->get_output() == 'json' ) { 904 | $cpuser = 'cpanel_jsonapi_user'; 905 | $module_type = 'cpanel_jsonapi_module'; 906 | $func_type = 'cpanel_jsonapi_func'; 907 | $api_type = 'cpanel_jsonapi_apiversion'; 908 | } 909 | 910 | $args[$cpuser] = $user; 911 | $args[$module_type] = $module; 912 | $args[$func_type] = $function; 913 | $args[$api_type] = '2'; 914 | 915 | return $this->xmlapi_query('cpanel', $args); 916 | } 917 | 918 | #### 919 | # XML API Functions 920 | #### 921 | 922 | /** 923 | * Return a list of available XML-API calls 924 | * 925 | * This function will return an array containing all applications available within the XML-API 926 | * 927 | * @return mixed 928 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListAvailableCalls XML API Call documentation 929 | */ 930 | public function applist() 931 | { 932 | return $this->xmlapi_query('applist'); 933 | } 934 | 935 | #### 936 | # Account functions 937 | #### 938 | 939 | /** 940 | * Create a cPanel Account 941 | * 942 | * This function will allow one to create an account, the $acctconf parameter requires that the follow 943 | * three associations are defined: 944 | * - username 945 | * - password 946 | * - domain 947 | * 948 | * Failure to prive these will cause an error to be logged. Any other key/value pairs as defined by the createaccount call 949 | * documentation are allowed parameters for this call. 950 | * 951 | * @param array $acctconf 952 | * @return mixed 953 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CreateAccount XML API Call documentation 954 | */ 955 | 956 | public function createacct($acctconf) 957 | { 958 | if (!is_array($acctconf)) { 959 | error_log("createacct requires that first parameter passed to it is an array"); 960 | 961 | return false; 962 | } 963 | if (!isset($acctconf['username']) || !isset($acctconf['password']) || !isset($acctconf['domain'])) { 964 | error_log("createacct requires that username, password & domain elements are in the array passed to it"); 965 | 966 | return false; 967 | } 968 | 969 | return $this->xmlapi_query('createacct', $acctconf); 970 | } 971 | 972 | /** 973 | * Change a cPanel Account's Password 974 | * 975 | * This function will allow you to change the password of a cpanel account 976 | * 977 | * @param string $username The username to change the password of 978 | * @param string $pass The new password for the cPanel Account 979 | * @return mixed 980 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ChangePassword XML API Call documentation 981 | */ 982 | public function passwd($username, $pass) 983 | { 984 | if (!isset($username) || !isset($pass)) { 985 | error_log("passwd requires that an username and password are passed to it"); 986 | 987 | return false; 988 | } 989 | 990 | return $this->xmlapi_query('passwd', array('user' => $username, 'pass' => $pass)); 991 | } 992 | 993 | /** 994 | * Limit an account's monthly bandwidth usage 995 | * 996 | * This function will set an account's bandwidth limit. 997 | * 998 | * @param string $username The username of the cPanel account to modify 999 | * @param int $bwlimit The new bandwidth limit in megabytes 1000 | * @return mixed 1001 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/LimitBandwidth XML API Call documentation 1002 | */ 1003 | public function limitbw($username, $bwlimit) 1004 | { 1005 | if (!isset($username) || !isset($bwlimit)) { 1006 | error_log("limitbw requires that an username and bwlimit are passed to it"); 1007 | 1008 | return false; 1009 | } 1010 | 1011 | return $this->xmlapi_query('limitbw', array('user' => $username, 'bwlimit' => $bwlimit)); 1012 | } 1013 | 1014 | /** 1015 | * List accounts on Server 1016 | * 1017 | * This call will return a list of account on a server, either no parameters or both parameters may be passed to this function. 1018 | * 1019 | * @param string $searchtype Type of account search to use, allowed values: domain, owner, user, ip or package 1020 | * @param string $search the string to search against 1021 | * @return mixed 1022 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListAccounts XML API Call documentation 1023 | */ 1024 | public function listaccts($searchtype = null, $search = null) 1025 | { 1026 | if ($search) { 1027 | return $this->xmlapi_query('listaccts', array('searchtype' => $searchtype, 'search' => $search )); 1028 | } 1029 | 1030 | return $this->xmlapi_query('listaccts'); 1031 | } 1032 | 1033 | /** 1034 | * Modify a cPanel account 1035 | * 1036 | * This call will allow you to change limitations and information about an account. See the XML API call documentation for a list of 1037 | * acceptable values for args. 1038 | * 1039 | * @param string $username The username to modify 1040 | * @param array $args the new values for the modified account (see {@link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ModifyAccount modifyacct documentation}) 1041 | * @return mixed 1042 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ModifyAccount XML API Call documentation 1043 | */ 1044 | public function modifyacct($username, $args = array()) 1045 | { 1046 | if (!isset($username)) { 1047 | error_log("modifyacct requires that username is passed to it"); 1048 | 1049 | return false; 1050 | } 1051 | $args['user'] = $username; 1052 | if (sizeof($args) < 2) { 1053 | error_log("modifyacct requires that at least one attribute is passed to it"); 1054 | 1055 | return false; 1056 | } 1057 | 1058 | return $this->xmlapi_query('modifyacct', $args); 1059 | } 1060 | 1061 | /** 1062 | * Edit a cPanel Account's Quota 1063 | * 1064 | * This call will allow you to change a cPanel account's quota 1065 | * 1066 | * @param string $username The username of the account to modify the quota. 1067 | * @param int $quota the new quota in megabytes 1068 | * @return mixed 1069 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/EditQuota XML API Call documentation 1070 | */ 1071 | public function editquota($username, $quota) 1072 | { 1073 | if (!isset($username) || !isset($quota)) { 1074 | error_log("editquota requires that an username and quota are passed to it"); 1075 | 1076 | return false; 1077 | } 1078 | 1079 | return $this->xmlapi_query('editquota', array('user' => $username, 'quota' => $quota)); 1080 | } 1081 | 1082 | /** 1083 | * Return a summary of the account's information 1084 | * 1085 | * This call will return a brief report of information about an account, such as: 1086 | * - Disk Limit 1087 | * - Disk Used 1088 | * - Domain 1089 | * - Account Email 1090 | * - Theme 1091 | * - Start Data 1092 | * 1093 | * Please see the XML API Call documentation for more information on what is returned by this call 1094 | * 1095 | * @param string $username The username to retrieve a summary of 1096 | * @return mixed 1097 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ShowAccountInformation XML API Call documenation 1098 | */ 1099 | public function accountsummary($username) 1100 | { 1101 | if (!isset($username)) { 1102 | error_log("accountsummary requires that an username is passed to it"); 1103 | 1104 | return false; 1105 | } 1106 | 1107 | return $this->xmlapi_query('accountsummary', array('user' => $username)); 1108 | } 1109 | 1110 | /** 1111 | * Suspend a User's Account 1112 | * 1113 | * This function will suspend the specified cPanel users account. 1114 | * The $reason parameter is optional, but can contain a string of any length 1115 | * 1116 | * @param string $username The username to suspend 1117 | * @param string $reason The reason for the suspension 1118 | * @return mixed 1119 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SuspendAccount XML API Call documentation 1120 | */ 1121 | public function suspendacct($username, $reason = null) 1122 | { 1123 | if (!isset($username)) { 1124 | error_log("suspendacct requires that an username is passed to it"); 1125 | 1126 | return false; 1127 | } 1128 | if ($reason) { 1129 | return $this->xmlapi_query('suspendacct', array('user' => $username, 'reason' => $reason )); 1130 | } 1131 | 1132 | return $this->xmlapi_query('suspendacct', array('user' => $username)); 1133 | } 1134 | 1135 | /** 1136 | * List suspended accounts on a server 1137 | * 1138 | * This function will return an array containing all the suspended accounts on a server 1139 | * 1140 | * @return mixed 1141 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListSuspended XML API Call documentation 1142 | */ 1143 | public function listsuspended() 1144 | { 1145 | return $this->xmlapi_query('listsuspended'); 1146 | } 1147 | 1148 | /** 1149 | * Remove an Account 1150 | * 1151 | * This XML API call will remove an account on the server 1152 | * The $keepdns parameter is optional, when enabled this will leave the DNS zone on the server 1153 | * 1154 | * @param string $username The usename to delete 1155 | * @param bool $keepdns When pass a true value, the DNS zone will be retained 1156 | * @return mixed 1157 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/TerminateAccount 1158 | */ 1159 | public function removeacct($username, $keepdns = false) 1160 | { 1161 | if (!isset($username)) { 1162 | error_log("removeacct requires that a username is passed to it"); 1163 | 1164 | return false; 1165 | } 1166 | if ($keepdns) { 1167 | return $this->xmlapi_query('removeacct', array('user' => $username, 'keepdns' => '1')); 1168 | } 1169 | 1170 | return $this->xmlapi_query('removeacct', array('user' => $username)); 1171 | } 1172 | 1173 | /** 1174 | * Unsuspend an Account 1175 | * 1176 | * This XML API call will unsuspend an account 1177 | * 1178 | * @param string $username The username to unsuspend 1179 | * @return mixed 1180 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/UnsuspendAcount XML API Call documentation 1181 | */ 1182 | public function unsuspendacct($username) 1183 | { 1184 | if (!isset($username)) { 1185 | error_log("unsuspendacct requires that a username is passed to it"); 1186 | 1187 | return false; 1188 | } 1189 | 1190 | return $this->xmlapi_query('unsuspendacct', array('user' => $username)); 1191 | } 1192 | 1193 | /** 1194 | * Change an Account's Package 1195 | * 1196 | * This XML API will change the package associated account. 1197 | * 1198 | * @param string $username the username to change the package of 1199 | * @param string $pkg The package to change the account to. 1200 | * @return mixed 1201 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ChangePackage XML API Call documentation 1202 | */ 1203 | public function changepackage($username, $pkg) 1204 | { 1205 | if (!isset($username) || !isset($pkg)) { 1206 | error_log("changepackage requires that username and pkg are passed to it"); 1207 | 1208 | return false; 1209 | } 1210 | 1211 | return $this->xmlapi_query('changepackage', array('user' => $username, 'pkg' => $pkg)); 1212 | } 1213 | 1214 | /** 1215 | * Return the privileges a reseller has in WHM 1216 | * 1217 | * This will return a list of the privileges that a reseller has to WHM 1218 | * @return mixed 1219 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ViewPrivileges XML API Call documentation 1220 | */ 1221 | public function myprivs() 1222 | { 1223 | return $this->xmlapi_query('myprivs'); 1224 | } 1225 | 1226 | 1227 | /** 1228 | * Display Data about a Virtual Host 1229 | * 1230 | * This function will return information about a specific domain. This data is essentially a representation of the data 1231 | * Contained in the httpd.conf VirtualHost for the domain. 1232 | * 1233 | * @return mixed 1234 | * @param string $domain The domain to fetch information for 1235 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DomainUserData 1236 | */ 1237 | 1238 | public function domainuserdata( $domain ) 1239 | { 1240 | if (!isset( $domain ) ) { 1241 | error_log("domainuserdata requires that domain is passed to it"); 1242 | 1243 | return false; 1244 | } 1245 | 1246 | return $this->xmlapi_query("domainuserdata", array( 'domain' => $domain ) ); 1247 | } 1248 | 1249 | /** 1250 | * Change a site's IP Address 1251 | * 1252 | * This function will allow you to change the IP address that a domain listens on. 1253 | * In order to properly call this function Either $user or $domain parameters must be defined 1254 | * @param string $ip The $ip address to change the account or domain to 1255 | * @param string $user The username to change the IP of 1256 | * @param string $domain The domain to change the IP of 1257 | * @return mixed 1258 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetSiteIp XML API Call documentation 1259 | */ 1260 | public function setsiteip ( $ip, $user = null, $domain = null ) 1261 | { 1262 | if ( !isset($ip) ) { 1263 | error_log("setsiteip requires that ip is passed to it"); 1264 | 1265 | return false; 1266 | } 1267 | 1268 | if ($user == null && $domain == null) { 1269 | error_log("setsiteip requires that either domain or user is passed to it"); 1270 | 1271 | return false; 1272 | } 1273 | 1274 | if ($user == null) { 1275 | return $this->xmlapi_query( "setsiteip", array( "ip" => $ip, "domain" => $domain ) ); 1276 | } else { 1277 | return $this->xmlapi_query( "setsiteip", array( "ip" => $ip, "user" => $user ) ); 1278 | } 1279 | } 1280 | 1281 | #### 1282 | # DNS Functions 1283 | #### 1284 | 1285 | // This API function lets you create a DNS zone. 1286 | /** 1287 | * Add a DNS Zone 1288 | * 1289 | * This XML API function will create a DNS Zone. This will use the "standard" template when 1290 | * creating the zone. 1291 | * 1292 | * @param string $domain The DNS Domain that you wish to create a zone for 1293 | * @param string $ip The IP you want the domain to resolve to 1294 | * @return mixed 1295 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddDNSZone XML API Call documentation 1296 | */ 1297 | public function adddns($domain, $ip) 1298 | { 1299 | if (!isset($domain) || !isset($ip)) { 1300 | error_log("adddns require that domain, ip are passed to it"); 1301 | 1302 | return false; 1303 | } 1304 | 1305 | return $this->xmlapi_query('adddns', array('domain' => $domain, 'ip' => $ip)); 1306 | } 1307 | 1308 | /** 1309 | * Add a record to a zone 1310 | * 1311 | * This will append a record to a DNS Zone. The $args argument to this function 1312 | * must be an associative array containing information about the DNS zone, please 1313 | * see the XML API Call documentation for more info 1314 | * 1315 | * @param string $zone The DNS zone that you want to add the record to 1316 | * @param array $args Associative array representing the record to be added 1317 | * @return mixed 1318 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddZoneRecord XML API Call documentation 1319 | */ 1320 | public function addzonerecord( $zone, $args ) 1321 | { 1322 | if (!is_array($args)) { 1323 | error_log("addzonerecord requires that $args passed to it is an array"); 1324 | 1325 | return; 1326 | } 1327 | 1328 | $args['zone'] = $zone; 1329 | 1330 | return $this->xmlapi_query('addzonerecord', $args); 1331 | } 1332 | 1333 | /** 1334 | * Edit a Zone Record 1335 | * 1336 | * This XML API Function will allow you to edit an existing DNS Zone Record. 1337 | * This works by passing in the line number of the record you wish to edit. 1338 | * Line numbers can be retrieved with dumpzone() 1339 | * 1340 | * @param string $zone The zone to edit 1341 | * @param int $line The line number of the zone to edit 1342 | * @param array $args An associative array representing the zone record 1343 | * @return mixed 1344 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/EditZoneRecord XML API Call documentation 1345 | * @see dumpzone() 1346 | */ 1347 | 1348 | public function editzonerecord( $zone, $line, $args ) 1349 | { 1350 | if (!is_array($args)) { 1351 | error_log("editzone requires that $args passed to it is an array"); 1352 | 1353 | return; 1354 | } 1355 | 1356 | $args['domain'] = $zone; 1357 | $args['Line'] = $line; 1358 | 1359 | return $this->xmlapi_query('editzonerecord', $args); 1360 | } 1361 | 1362 | /** 1363 | * Retrieve a DNS Record 1364 | * 1365 | * This function will return a data structure representing a DNS record, to 1366 | * retrieve all lines see dumpzone. 1367 | * @param string $zone The zone that you want to retrieve a record from 1368 | * @param string $line The line of the zone that you want to retrieve 1369 | * @return mixed 1370 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/GetZoneRecord XML API Call documentation 1371 | */ 1372 | public function getzonerecord( $zone, $line ) 1373 | { 1374 | return $this->xmlapi_query('getzonerecord', array( 'domain' => $zone, 'Line' => $line ) ); 1375 | } 1376 | 1377 | /** 1378 | * Remove a DNS Zone 1379 | * 1380 | * This function will remove a DNS Zone from the server 1381 | * 1382 | * @param string $domain The domain to be remove 1383 | * @return mixed 1384 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeleteDNSZone XML API Call documentation 1385 | */ 1386 | public function killdns($domain) 1387 | { 1388 | if (!isset($domain)) { 1389 | error_log("killdns requires that domain is passed to it"); 1390 | 1391 | return false; 1392 | } 1393 | 1394 | return $this->xmlapi_query('killdns', array('domain' => $domain)); 1395 | } 1396 | 1397 | /** 1398 | * Return a List of all DNS Zones on the server 1399 | * 1400 | * This XML API function will return an array containing all the DNS Zones on the server 1401 | * 1402 | * @return mixed 1403 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListDNSZone XML API Call documentation 1404 | */ 1405 | public function listzones() 1406 | { 1407 | return $this->xmlapi_query('listzones'); 1408 | } 1409 | 1410 | /** 1411 | * Return all records in a zone 1412 | * 1413 | * This function will return all records within a zone. 1414 | * @param string $domain The domain to return the records from. 1415 | * @return mixed 1416 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListOneZone XML API Call documentation 1417 | * @see editdnsrecord() 1418 | * @see getdnsrecord() 1419 | */ 1420 | public function dumpzone($domain) 1421 | { 1422 | if (!isset($domain)) { 1423 | error_log("dumpzone requires that a domain is passed to it"); 1424 | 1425 | return false; 1426 | } 1427 | 1428 | return $this->xmlapi_query('dumpzone', array('domain' => $domain)); 1429 | } 1430 | 1431 | /** 1432 | * Return a Nameserver's IP 1433 | * 1434 | * This function will return a nameserver's IP 1435 | * 1436 | * @param string $nameserver The nameserver to lookup 1437 | * @return mixed 1438 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/LookupIP XML API Call documentation 1439 | */ 1440 | public function lookupnsip($nameserver) 1441 | { 1442 | if (!isset($nameserver)) { 1443 | error_log("lookupnsip requres that a nameserver is passed to it"); 1444 | 1445 | return false; 1446 | } 1447 | 1448 | return $this->xmlapi_query('lookupnsip', array('nameserver' => $nameserver)); 1449 | } 1450 | 1451 | /** 1452 | * Remove a line from a zone 1453 | * 1454 | * This function will remove the specified line from a zone 1455 | * @param string $zone The zone to remove a line from 1456 | * @param int $line The line to remove from the zone 1457 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RemoveZone XML API Call documentation 1458 | */ 1459 | public function removezonerecord($zone, $line) 1460 | { 1461 | if ( !isset($zone) || !isset($line) ) { 1462 | error_log("removezone record requires that a zone and line number is passed to it"); 1463 | 1464 | return false; 1465 | } 1466 | 1467 | return $this->xmlapi_query('removezonerecord', array('zone' => $zone, 'Line' => $line) ); 1468 | } 1469 | 1470 | /** 1471 | * Reset a zone 1472 | * 1473 | * This function will reset a zone removing all custom records. Subdomain records will be readded by scanning the userdata datastore. 1474 | * @param string $domain the domain name of the zone to reset 1475 | * @return mixed 1476 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ResetZone XML API Call documentation 1477 | */ 1478 | public function resetzone($domain) 1479 | { 1480 | if ( !isset($domain) ) { 1481 | error_log("resetzone requires that a domain name is passed to it"); 1482 | 1483 | return false; 1484 | } 1485 | 1486 | return $this->xmlapi_query('resetzone', array('domain' => $domain)); 1487 | } 1488 | 1489 | #### 1490 | # Package Functions 1491 | #### 1492 | 1493 | /** 1494 | * Add a new package 1495 | * 1496 | * This function will allow you to add a new package 1497 | * This function should be passed an associative array containing elements that define package parameters. 1498 | * These variables map directly to the parameters for the XML-API Call, please refer to the link below for a complete 1499 | * list of possible variable. The "name" element is required. 1500 | * @param array $pkg an associative array containing package parameters 1501 | * @return mixed 1502 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddPackage XML API Call documentation 1503 | */ 1504 | public function addpkg($pkg) 1505 | { 1506 | if (!isset($pkg['name'])) { 1507 | error_log("addpkg requires that name is defined in the array passed to it"); 1508 | 1509 | return false; 1510 | } 1511 | 1512 | return $this->xmlapi_query('addpkg', $pkg); 1513 | } 1514 | 1515 | /** 1516 | * Remove a package 1517 | * 1518 | * This function allow you to delete a package 1519 | * @param string $pkgname The package you wish to delete 1520 | * @return mixed 1521 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeletePackage XML API Call documentation 1522 | */ 1523 | public function killpkg($pkgname) 1524 | { 1525 | if (!isset($pkgname)) { 1526 | error_log("killpkg requires that the package name is passed to it"); 1527 | 1528 | return false; 1529 | } 1530 | 1531 | return $this->xmlapi_query('killpkg', array('pkg' => $pkgname)); 1532 | } 1533 | 1534 | /** 1535 | * Edit a package 1536 | * 1537 | * This function allows you to change a package's paremeters. This is passed an associative array defining 1538 | * the parameters for the package. The keys within this array map directly to the XML-API call, please see the link 1539 | * below for a list of possible keys within this package. The name element is required. 1540 | * @param array $pkg An associative array containing new parameters for the package 1541 | * @return mixed 1542 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/EditPackage XML API Call documentation 1543 | */ 1544 | public function editpkg($pkg) 1545 | { 1546 | if (!$isset($pkg['name'])) { 1547 | error_log("editpkg requires that name is defined in the array passed to it"); 1548 | 1549 | return false; 1550 | } 1551 | 1552 | return $this->xmlapi_query('editpkg', $pkg); 1553 | } 1554 | 1555 | /** 1556 | * List Packages 1557 | * 1558 | * This function will list all packages available to the user 1559 | * @return mixed 1560 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListPackages XML API Call documentation 1561 | */ 1562 | public function listpkgs() 1563 | { 1564 | return $this->xmlapi_query('listpkgs'); 1565 | } 1566 | 1567 | #### 1568 | # Reseller functions 1569 | #### 1570 | 1571 | /** 1572 | * Make a user a reseller 1573 | * 1574 | * This function will allow you to mark an account as having reseller privileges 1575 | * @param string $username The username of the account you wish to add reseller privileges to 1576 | * @param int $makeowner Boolean 1 or 0 defining whether the account should own itself or not 1577 | * @see setacls() 1578 | * @see setresellerlimits() 1579 | * @return mixed 1580 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddResellerPrivileges XML API Call documentation 1581 | */ 1582 | public function setupreseller($username, $makeowner = true) 1583 | { 1584 | if (!isset($username)) { 1585 | error_log("setupreseller requires that username is passed to it"); 1586 | 1587 | return false; 1588 | } 1589 | if ($makeowner) { 1590 | return $this->xmlapi_query('setupreseller', array('user' => $username, 'makeowner' => '1')); 1591 | } 1592 | 1593 | return $this->xmlapi_query('setupreseller', array('user' => $username, 'makeowner' => '0')); 1594 | } 1595 | 1596 | /** 1597 | * Create a New ACL List 1598 | * 1599 | * This function allows you to create a new privilege set for reseller accounts. This is passed an 1600 | * Associative Array containing the configuration information for this variable. Please see the XML API Call documentation 1601 | * For more information. "acllist" is a required element within this array 1602 | * @param array $acl an associative array describing the parameters for the ACL to be create 1603 | * @return mixed 1604 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CreateResellerACLList XML API Call documentation 1605 | */ 1606 | public function saveacllist($acl) 1607 | { 1608 | if (!isset($acl['acllist'])) { 1609 | error_log("saveacllist requires that acllist is defined in the array passed to it"); 1610 | 1611 | return false; 1612 | } 1613 | 1614 | return $this->xmlapi_query('saveacllist', $acl); 1615 | } 1616 | 1617 | 1618 | /** 1619 | * List available saved ACLs 1620 | * 1621 | * This function will return a list of Saved ACLs for reseller accounts 1622 | * @return mixed 1623 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListCurrentResellerACLLists XML API Call documentation 1624 | */ 1625 | public function listacls() 1626 | { 1627 | return $this->xmlapi_query('listacls'); 1628 | } 1629 | 1630 | /** 1631 | * List Resellers 1632 | * 1633 | * This function will return a list of resellers on the server 1634 | * @return mixed 1635 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListResellerAccounts XML API Call documentation 1636 | */ 1637 | public function listresellers() 1638 | { 1639 | return $this->xmlapi_query('listresellers'); 1640 | } 1641 | 1642 | /** 1643 | * Get a reseller's statistics 1644 | * 1645 | * This function will return general information on a reseller and all it's account individually such as disk usage and bandwidth usage 1646 | * 1647 | * @param string $username The reseller to be checked 1648 | * @return mixed 1649 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListResellersAccountsInformation XML API Call documentation 1650 | */ 1651 | public function resellerstats($username) 1652 | { 1653 | if (!isset($username)) { 1654 | error_log("resellerstats requires that a username is passed to it"); 1655 | 1656 | return false; 1657 | } 1658 | 1659 | return $this->xmlapi_query('resellerstats', array('reseller' => $username)); 1660 | } 1661 | 1662 | /** 1663 | * Remove Reseller Privileges 1664 | * 1665 | * This function will remove an account's reseller privileges, this does not remove the account. 1666 | * 1667 | * @param string $username The username to remove reseller privileges from 1668 | * @return mixed 1669 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RemoveResellerPrivileges XML API Call documentation 1670 | */ 1671 | public function unsetupreseller($username) 1672 | { 1673 | if (!isset($username)) { 1674 | error_log("unsetupreseller requires that a username is passed to it"); 1675 | 1676 | return false; 1677 | } 1678 | 1679 | return $this->xmlapi_query('unsetupreseller', array('user' => $username)); 1680 | } 1681 | 1682 | /** 1683 | * Set a reseller's privileges 1684 | * 1685 | * This function will allow you to set what parts of WHM a reseller has access to. This is passed an associative array 1686 | * containing the privleges that this reseller should have access to. These map directly to the parameters passed to the XML API Call 1687 | * Please view the XML API Call documentation for more information. "reseller" is the only required element within this array 1688 | * @param array $acl An associative array containing all the ACL information for the reseller 1689 | * @return mixed 1690 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellersACLList XML API Call documentation 1691 | */ 1692 | public function setacls($acl) 1693 | { 1694 | if (!isset($acl['reseller'])) { 1695 | error_log("setacls requires that reseller is defined in the array passed to it"); 1696 | 1697 | return false; 1698 | } 1699 | 1700 | return $this->xmlapi_query('setacls', $acl); 1701 | } 1702 | 1703 | /** 1704 | * Terminate a Reseller's Account 1705 | * 1706 | * This function will terminate a reseller's account and all accounts owned by the reseller 1707 | * 1708 | * @param string $reseller the name of the reseller to terminate 1709 | * @param boolean $terminatereseller Passing this as true will terminate the the reseller's account as well as all the accounts owned by the reseller 1710 | * @return mixed 1711 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/TerminateResellerandAccounts XML API Call documentation 1712 | * 1713 | **/ 1714 | public function terminatereseller($reseller, $terminatereseller = true) 1715 | { 1716 | if (!isset($reseller)) { 1717 | error_log("terminatereseller requires that username is passed to it"); 1718 | 1719 | return false; 1720 | } 1721 | $verify = 'I understand this will irrevocably remove all the accounts owned by the reseller ' . $reseller; 1722 | if ($terminatereseller) { 1723 | return $this->xmlapi_query('terminatereseller', array('reseller' => $reseller, 'terminatereseller' => '1', 'verify' => $verify)); 1724 | } 1725 | 1726 | return $this->xmlapi_query('terminatereseller', array('reseller' => $reseller, 'terminatereseller' => '0', 'verify' => $verify)); 1727 | } 1728 | 1729 | /** 1730 | * Set a reseller's dedicated IP addresses 1731 | * 1732 | * This function will set a reseller's dedicated IP addresses. If an IP is not passed to this function, 1733 | * it will reset the reseller to use the server's main shared IP address. 1734 | * @param string $user The username of the reseller to change dedicated IPs for 1735 | * @param string $ip The IP to assign to the reseller, this can be a comma-seperated list of IPs to allow for multiple IP addresses 1736 | * @return mixed 1737 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerIps XML API Call documentation 1738 | */ 1739 | public function setresellerips($user, $ip = null) 1740 | { 1741 | if (!isset($user) ) { 1742 | error_log("setresellerips requires that a username is passed to it"); 1743 | 1744 | return false; 1745 | } 1746 | $params = array("user" => $user); 1747 | if ($ip != null) { 1748 | $params['ip'] = $ip; 1749 | } 1750 | 1751 | return $this->xmlapi_query('setresellerips',$params); 1752 | } 1753 | 1754 | /** 1755 | * Set Accounting Limits for a reseller account 1756 | * 1757 | * This function allows you to define limits for reseller accounts not included with in access control such as 1758 | * the number of accounts a reseller is allowed to create, the amount of disk space to use. 1759 | * This function is passed an associative array defining these limits, these map directly to the parameters for the XML API 1760 | * Call, please refer to the XML API Call documentation for more information. The only required parameters is "user" 1761 | * 1762 | * @param array $reseller_cfg An associative array containing configuration information for the specified reseller 1763 | * @return mixed 1764 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerLimits XML API Call documentation 1765 | * 1766 | */ 1767 | public function setresellerlimits( $reseller_cfg ) 1768 | { 1769 | if ( !isset($reseller_cfg['user'] ) ) { 1770 | error_log("setresellerlimits requires that a user is defined in the array passed to it"); 1771 | 1772 | return false; 1773 | } 1774 | 1775 | return $this->xmlapi_query('setresellerlimits',$reseller_cfg); 1776 | } 1777 | 1778 | /** 1779 | * Set a reseller's main IP 1780 | * 1781 | * This function will allow you to set a reseller's main IP. By default all accounts created by this reseller 1782 | * will be created on this IP 1783 | * @param string $reseller the username of the reseller to change the main IP of 1784 | * @param string $ip The ip you would like this reseller to create accounts on by default 1785 | * @return mixed 1786 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerMainIp XML API Call documentation 1787 | */ 1788 | public function setresellermainip($reseller, $ip) 1789 | { 1790 | if ( !isset($reseller) || !isset($ip) ) { 1791 | error_log("setresellermainip requires that an reseller and ip are passed to it"); 1792 | 1793 | return false; 1794 | } 1795 | 1796 | return $this->xmlapi_query("setresellermainip", array('user' => $reseller, 'ip' => $ip)); 1797 | } 1798 | 1799 | /** 1800 | * Set reseller package limits 1801 | * 1802 | * This function allows you to define which packages a reseller has access to use 1803 | * @param string $user The reseller you wish to define package limits for 1804 | * @param boolean $no_limit Whether or not you wish this reseller to have packages limits 1805 | * @param string $package if $no_limit is false, then the package you wish to modify privileges for 1806 | * @param boolean $allowed if $no_limit is false, then defines if the reseller should have access to the package or not 1807 | * @param int $number if $no_limit is false, then defines the number of account a reseller can create of a specific package 1808 | * @return mixed 1809 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerPkgLimit XML API Call documentation 1810 | */ 1811 | public function setresellerpackagelimits($user, $no_limit, $package = null, $allowed = null, $number = null) 1812 | { 1813 | if (!isset($user) || !isset($no_limit) ) { 1814 | error_log("setresellerpackagelimits requires that a username and no_limit are passed to it by default"); 1815 | 1816 | return false; 1817 | } 1818 | if ($no_limit) { 1819 | return $this->xmlapi_query("setresellerpackagelimits", array( 'user' => $user, "no_limit" => '1') ); 1820 | } else { 1821 | if ( is_null($package) || is_null($allowed) ) { 1822 | error_log('setresellerpackagelimits requires that package and allowed are passed to it if no_limit eq 0'); 1823 | 1824 | return false; 1825 | } 1826 | $params = array( 1827 | 'user' => $user, 1828 | 'no_limit' => '0', 1829 | 'package' => $package, 1830 | ); 1831 | if ($allowed) { 1832 | $params['allowed'] = 1; 1833 | } else { 1834 | $params['allowed'] = 0; 1835 | } 1836 | if ( !is_null($number) ) { 1837 | $params['number'] = $number; 1838 | } 1839 | 1840 | return $this->xmlapi_query('setresellerpackagelimits', $params); 1841 | } 1842 | } 1843 | 1844 | /** 1845 | * Suspend a reseller and all accounts owned by a reseller 1846 | * 1847 | * This function, when called will suspend a reseller account and all account owned by said reseller 1848 | * @param string $reseller The reseller account to be suspended 1849 | * @param string $reason (optional) The reason for suspending the reseller account 1850 | * @return mixed 1851 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SuspendReseller XML API Call documentation 1852 | */ 1853 | public function suspendreseller($reseller, $reason = null) 1854 | { 1855 | if (!isset($reseller) ) { 1856 | error_log("suspendreseller requires that the reseller's username is passed to it"); 1857 | 1858 | return false; 1859 | } 1860 | $params = array("user" => $reseller); 1861 | if ($reason) { 1862 | $params['reason'] = $reason; 1863 | } 1864 | 1865 | return $this->xmlapi_query('suspendreseller', $params); 1866 | } 1867 | 1868 | 1869 | /** 1870 | * Unsuspend a Reseller Account 1871 | * 1872 | * This function will unsuspend a reseller account and all accounts owned by the reseller in question 1873 | * @param string $user The username of the reseller to be unsuspended 1874 | * @return mixed 1875 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/UnsuspendReseller XML API Call documentation 1876 | */ 1877 | public function unsuspendreseller($user) 1878 | { 1879 | if (!isset($user) ) { 1880 | error_log("unsuspendreseller requires that a username is passed to it"); 1881 | 1882 | return false; 1883 | } 1884 | 1885 | return $this->xmlapi_query('unsuspendreseller', array('user' => $user)); 1886 | } 1887 | 1888 | /** 1889 | * Get the number of accounts owned by a reseller 1890 | * 1891 | * This function will return the number of accounts owned by a reseller account, along with information such as the number of active, suspended and accounting limits 1892 | * @param string $user The username of the reseller to get account information from 1893 | * @return mixed 1894 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AcctCounts XML API Call documentation 1895 | */ 1896 | public function acctcounts($user) 1897 | { 1898 | if (!isset($user)) { 1899 | error_log('acctcounts requires that a username is passed to it'); 1900 | 1901 | return false; 1902 | } 1903 | 1904 | return $this->xmlapi_query('acctcounts', array('user' => $user) ); 1905 | } 1906 | 1907 | /** 1908 | * Set a reseller's nameservers 1909 | * 1910 | * This function allows you to change the nameservers that account created by a specific reseller account will use. 1911 | * If this function is not passed a $nameservers parameter, it will reset the nameservers for the reseller to the servers's default 1912 | * @param string $user The username of the reseller account to grab reseller accounts from 1913 | * @param string $nameservers A comma seperate list of nameservers 1914 | * @return mixed 1915 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResellerNameservers XML API Call documentation 1916 | */ 1917 | public function setresellernameservers($user, $nameservers = null) 1918 | { 1919 | if (!isset($user)) { 1920 | error_log("setresellernameservers requires that a username is passed to it"); 1921 | 1922 | return false; 1923 | } 1924 | $params = array('user' => $user); 1925 | if ($nameservers) { 1926 | $params['nameservers'] = $nameservers; 1927 | } 1928 | 1929 | return $this->xmlapi_query('setresellernameservers', $params); 1930 | } 1931 | 1932 | #### 1933 | # Server information 1934 | #### 1935 | 1936 | /** 1937 | * Get a server's hostname 1938 | * 1939 | * This function will return a server's hostname 1940 | * @return mixed 1941 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DisplayServerHostname XML API Call documentation 1942 | */ 1943 | public function gethostname() 1944 | { 1945 | return $this->xmlapi_query('gethostname'); 1946 | } 1947 | 1948 | /** 1949 | * Get the version of cPanel running on the server 1950 | * 1951 | * This function will return the version of cPanel/WHM running on the remote system 1952 | * @return mixed 1953 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DisplaycPanelWHMVersion XML API Call documentation 1954 | */ 1955 | public function version() 1956 | { 1957 | return $this->xmlapi_query('version'); 1958 | } 1959 | 1960 | 1961 | /** 1962 | * Get Load Average 1963 | * 1964 | * This function will return the loadavg of the remote system 1965 | * 1966 | * @return mixed 1967 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/LoadAvg XML API Call documentation 1968 | */ 1969 | public function loadavg() 1970 | { 1971 | return $this->xmlapi_query('loadavg'); 1972 | } 1973 | 1974 | /** 1975 | * Get a list of languages on the remote system 1976 | * 1977 | * This function will return a list of available langauges for the cPanel interface 1978 | * @return mixed 1979 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/GetLangList XML API Call documentation 1980 | * 1981 | */ 1982 | public function getlanglist() 1983 | { 1984 | return $this->xmlapi_query('getlanglist'); 1985 | } 1986 | 1987 | #### 1988 | # Server administration 1989 | #### 1990 | 1991 | /** 1992 | * Reboot server 1993 | * 1994 | * This function will reboot the server 1995 | * @param boolean $force This will determine if the server should be given a graceful or forceful reboot 1996 | * @return mixed 1997 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RebootServer XML API Call documentation 1998 | */ 1999 | public function reboot($force = false) 2000 | { 2001 | if ($force) { 2002 | return $this->xmlapi_query('reboot', array('force' => '1')); 2003 | } 2004 | 2005 | return $this->xmlapi_query('reboot'); 2006 | } 2007 | 2008 | /** 2009 | * Add an IP to a server 2010 | * 2011 | * This function will add an IP alias to your server 2012 | * @param string $ip The IP to be added 2013 | * @param string $netmask The netmask of the IP to be added 2014 | * @return mixed 2015 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddIPAddress XML API Call documentation 2016 | */ 2017 | public function addip($ip, $netmask) 2018 | { 2019 | if (!isset($ip) || !isset($netmask)) { 2020 | error_log("addip requires that an IP address and Netmask are passed to it"); 2021 | 2022 | return false; 2023 | } 2024 | 2025 | return $this->xmlapi_query('addip', array('ip' => $ip, 'netmask' => $netmask)); 2026 | } 2027 | 2028 | // This function allows you to delete an IP address from your server. 2029 | /** 2030 | * Delete an IP from a server 2031 | * 2032 | * Remove an IP from the server 2033 | * @param string $ip The IP to remove 2034 | * @param string $ethernetdev The ethernet device that the IP is bound to 2035 | * @param bool $skipifshutdown Whether the function should remove the IP even if the ethernet interface is down 2036 | * @return mixed 2037 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeleteIPAddress XML API Call documentation 2038 | */ 2039 | public function delip($ip, $ethernetdev = null, $skipifshutdown = false) 2040 | { 2041 | $args = array(); 2042 | if (!isset($ip)) { 2043 | error_log("delip requires that an IP is defined in the array passed to it"); 2044 | 2045 | return false; 2046 | } 2047 | $args['ip'] = $ip; 2048 | if ($ethernetdev) { 2049 | $args['ethernetdev'] = $ethernetdev; 2050 | } 2051 | $args['skipifshutdown'] = ($skipifshutdown) ? '1' : '0'; 2052 | 2053 | return $this->xmlapi_query('delip', $args); 2054 | } 2055 | 2056 | /** 2057 | * List IPs 2058 | * 2059 | * This should return a list of IPs on a server 2060 | * @return mixed 2061 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeleteIPAddress XML API Call documentation 2062 | */ 2063 | public function listips() 2064 | { 2065 | return $this->xmlapi_query('listips'); 2066 | } 2067 | 2068 | /** 2069 | * Set Hostname 2070 | * 2071 | * This function will allow you to set the hostname of the server 2072 | * @param string $hostname the hostname that should be assigned to the serve 2073 | * @return mixed 2074 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetHostname XML API Call documentation 2075 | */ 2076 | public function sethostname($hostname) 2077 | { 2078 | if (!isset($hostname)) { 2079 | error_log("sethostname requires that hostname is passed to it"); 2080 | 2081 | return false; 2082 | } 2083 | 2084 | return $this->xmlapi_query('sethostname', array('hostname' => $hostname)); 2085 | } 2086 | 2087 | /** 2088 | * Set the resolvers used by the server 2089 | * 2090 | * This function will set the resolvers in /etc/resolv.conf for the server 2091 | * @param string $nameserver1 The IP of the first nameserver to use 2092 | * @param string $nameserver2 The IP of the second namesever to use 2093 | * @param string $nameserver3 The IP of the third nameserver to use 2094 | * @param string $nameserver4 The IP of the forth nameserver to use 2095 | * @return mixed 2096 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/SetResolvers XML API Call documentation 2097 | */ 2098 | public function setresolvers($nameserver1, $nameserver2 = null, $nameserver3 = null) 2099 | { 2100 | $args = array(); 2101 | if (!isset($nameserver1)) { 2102 | error_log("setresolvers requires that nameserver1 is defined in the array passed to it"); 2103 | 2104 | return false; 2105 | } 2106 | $args['nameserver1'] = $nameserver1; 2107 | if ($nameserver2) { 2108 | $args['nameserver2'] = $nameserver2; 2109 | } 2110 | if ($nameserver3) { 2111 | $args['nameserver3'] = $nameserver3; 2112 | } 2113 | 2114 | return $this->xmlapi_query('setresolvers', $args); 2115 | } 2116 | 2117 | /** 2118 | * Display bandwidth Usage 2119 | * 2120 | * This function will return all bandwidth usage information for the server, 2121 | * The arguments for this can be passed in via an associative array, the elements of this array map directly to the 2122 | * parameters of the call, please see the XML API Call documentation for more information 2123 | * @param array $args The configuration for what bandwidth information to display 2124 | * @return mixed 2125 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ShowBw XML API Call documentation 2126 | */ 2127 | public function showbw($args = null) 2128 | { 2129 | if (is_array($args)) { 2130 | return $this->xmlapi_query('showbw', $args); 2131 | } 2132 | 2133 | return $this->xmlapi_query('showbw'); 2134 | } 2135 | 2136 | public function nvset($key, $value) 2137 | { 2138 | if (!isset($key) || !isset($value)) { 2139 | error_log("nvset requires that key and value are passed to it"); 2140 | 2141 | return false; 2142 | } 2143 | 2144 | return $this->xmlapi_query('nvset', array('key' => $key, 'value' => $value)); 2145 | } 2146 | 2147 | // This function allows you to retrieve and view a non-volatile variable's value. 2148 | public function nvget($key) 2149 | { 2150 | if (!isset($key)) { 2151 | error_log("nvget requires that key is passed to it"); 2152 | 2153 | return false; 2154 | } 2155 | 2156 | return $this->xmlapi_query('nvget', array('key' => $key)); 2157 | } 2158 | 2159 | #### 2160 | # Service functions 2161 | #### 2162 | 2163 | /** 2164 | * Restart a Service 2165 | * 2166 | * This function allows you to restart a service on the server 2167 | * @param string $service the service that you wish to restart please view the XML API Call documentation for acceptable values to this parameters 2168 | * @return mixed 2169 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/RestartService XML API Call documentation 2170 | */ 2171 | public function restartsrv($service) 2172 | { 2173 | if (!isset($service)) { 2174 | error_log("restartsrv requires that service is passed to it"); 2175 | 2176 | return false; 2177 | } 2178 | 2179 | return $this->xmlapi_query('restartservice', array('service' => $service)); 2180 | } 2181 | 2182 | /** 2183 | * Service Status 2184 | * 2185 | * This function will return the status of all services on the and whether they are running or not 2186 | * @param string $service A single service to filter for. 2187 | * @return mixed 2188 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ServiceStatus XML API Call documentation 2189 | */ 2190 | public function servicestatus($args=array()) 2191 | { 2192 | if (!empty($args) && !is_array($args)) { 2193 | $args = array('service'=>$args); 2194 | } elseif (!is_array($args)) { 2195 | $args = array(); 2196 | } 2197 | 2198 | return $this->xmlapi_query('servicestatus', $args); 2199 | } 2200 | 2201 | /** 2202 | * Configure A Service 2203 | * 2204 | * This function will allow you to enabled or disable services along with their monitoring by chkservd 2205 | * @param string $service The service to be monitored 2206 | * @param bool $enabled Whether the service should be enabled or not 2207 | * @param bool $monitored Whether the service should be monitored or not 2208 | * @return mixed 2209 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ConfigureService XML API Call documentation 2210 | */ 2211 | public function configureservice($service, $enabled = true, $monitored = true) 2212 | { 2213 | if (!isset($service)) { 2214 | error_log("configure service requires that a service is passed to it"); 2215 | 2216 | return false; 2217 | } 2218 | $params = array('service' => $service); 2219 | 2220 | if ($enabled) { 2221 | $params['enabled'] = 1; 2222 | } else { 2223 | $params['enabled'] = 0; 2224 | } 2225 | 2226 | if ($monitored) { 2227 | $params['monitored'] = 1; 2228 | } else { 2229 | $params['monitored'] = 0; 2230 | } 2231 | 2232 | return $this->xmlapi_query('configureservice', $params); 2233 | 2234 | } 2235 | 2236 | #### 2237 | # SSL functions 2238 | #### 2239 | 2240 | /** 2241 | * Display information on an SSL host 2242 | * 2243 | * This function will return information on an SSL Certificate, CSR, cabundle and SSL key for a specified domain 2244 | * @param array $args Configuration information for the SSL certificate, please see XML API Call documentation for required values 2245 | * @return mixed 2246 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/FetchSSL XML API Call documentation 2247 | */ 2248 | public function fetchsslinfo($args) 2249 | { 2250 | if ( (isset($args['domain']) && isset($args['crtdata'])) || (!isset($args['domain']) && !isset($args['crtdata'])) ) { 2251 | error_log("fetchsslinfo requires domain OR crtdata is passed to it"); 2252 | } 2253 | if (isset($args['crtdata'])) { 2254 | // crtdata must be URL-encoded! 2255 | $args['crtdata'] = urlencode(trim($args['crtdata'])); 2256 | } 2257 | 2258 | return $this->xmlapi_query('fetchsslinfo', $args); 2259 | } 2260 | 2261 | /** 2262 | * Generate an SSL Certificate 2263 | * 2264 | * This function will generate an SSL Certificate, the arguments for this map directly to the call for the XML API call. Please consult the XML API Call documentation for more information 2265 | * @param array $args the configuration for the SSL Certificate being generated 2266 | * @return mixed 2267 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/GenerateSSL XML API Call documentation 2268 | */ 2269 | public function generatessl($args) 2270 | { 2271 | if (!isset($args['xemail']) || !isset($args['host']) || !isset($args['country']) || !isset($args['state']) || !isset($args['city']) || !isset($args['co']) || !isset($args['cod']) || !isset($args['email']) || !isset($args['pass'])) { 2272 | error_log("generatessl requires that xemail, host, country, state, city, co, cod, email and pass are defined in the array passed to it"); 2273 | 2274 | return false; 2275 | } 2276 | 2277 | return $this->xmlapi_query('generatessl', $args); 2278 | } 2279 | 2280 | /** 2281 | * Install an SSL certificate 2282 | * 2283 | * This function will allow you to install an SSL certificate that is uploaded via the $argument parameter to this call. The arguments for this call map directly to the parameters for the XML API call, 2284 | * please consult the XML API Call documentation for more information. 2285 | * @param array $args The configuration for the SSL certificate 2286 | * @return mixed 2287 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/InstallSSL XML API Call documentation 2288 | */ 2289 | public function installssl($args) 2290 | { 2291 | if (!isset($args['user']) || !isset($args['domain']) || !isset($args['cert']) || !isset($args['key']) || !isset($args['cab']) || !isset($args['ip'])) { 2292 | error_log("installssl requires that user, domain, cert, key, cab and ip are defined in the array passed to it"); 2293 | 2294 | return false; 2295 | } 2296 | 2297 | return $this->xmlapi_query('installssl', $args); 2298 | } 2299 | 2300 | /** 2301 | * List SSL Certs 2302 | * 2303 | * This function will list all SSL certificates installed on the server 2304 | * @return mixed 2305 | * @link http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ListSSL XML API Call documentation 2306 | */ 2307 | public function listcrts() 2308 | { 2309 | return $this->xmlapi_query('listcrts'); 2310 | } 2311 | 2312 | #### 2313 | # cPanel API1 functions 2314 | # Note: A cPanel account username is required 2315 | # Some cPanel features must be enabled to be able to use some function (f.e. park, unpark) 2316 | #### 2317 | 2318 | // This API1 function adds a emailaccount for a specific user. 2319 | public function addpop($username, $args) 2320 | { 2321 | if (!isset($username) || !isset($args)) { 2322 | error_log("addpop requires that a user and args are passed to it"); 2323 | 2324 | return false; 2325 | } 2326 | if (is_array($args) && (sizeof($args) < 3)) { 2327 | error_log("addpop requires that args at least contains an email_username, email_password and email_domain"); 2328 | 2329 | return false; 2330 | } 2331 | 2332 | return $this->api1_query($username, 'Email', 'addpop', $args); 2333 | } 2334 | 2335 | // This API function displays a list of all parked domains for a specific user. 2336 | public function park($username, $newdomain, $topdomain) 2337 | { 2338 | $args = array(); 2339 | if ( (!isset($username)) && (!isset($newdomain)) ) { 2340 | error_log("park requires that a username and new domain are passed to it"); 2341 | 2342 | return false; 2343 | } 2344 | $args['domain'] = $newdomain; 2345 | if ($topdomain) { 2346 | $args['topdomain'] = $topdomain; 2347 | } 2348 | 2349 | return $this->api2_query($username, 'Park', 'park', $args); 2350 | } 2351 | 2352 | // This API function displays a list of all parked domains for a specific user. 2353 | public function unpark($username, $domain) 2354 | { 2355 | $args = array(); 2356 | if ( (!isset($username)) && (!isset($domain)) ) { 2357 | error_log("unpark requires that a username and domain are passed to it"); 2358 | 2359 | return false; 2360 | } 2361 | $args['domain'] = $domain; 2362 | 2363 | return $this->api2_query($username, 'Park', 'unpark', $args); 2364 | } 2365 | 2366 | #### 2367 | # cPanel API2 functions 2368 | # Note: A cPanel account username is required 2369 | # Some cPanel features must be enabled to be able to use some function 2370 | #### 2371 | 2372 | // This API2 function allows you to view the diskusage of a emailaccount. 2373 | public function getdiskusage($username, $args) 2374 | { 2375 | if (!isset($username) || !isset($args)) { 2376 | error_log("getdiskusage requires that a username and args are passed to it"); 2377 | 2378 | return false; 2379 | } 2380 | if (is_array($args) && (!isset($args['domain']) || !isset($args['login']))) { 2381 | error_log("getdiskusage requires that args at least contains an email_domain and email_username"); 2382 | 2383 | return false; 2384 | } 2385 | 2386 | return $this->api2_query($username, 'Email', 'getdiskusage', $args); 2387 | } 2388 | 2389 | // This API2 function allows you to list ftp-users associated with a cPanel account including disk information. 2390 | public function listftpwithdisk($username) 2391 | { 2392 | if (!isset($username)) { 2393 | error_log("listftpwithdisk requires that user is passed to it"); 2394 | 2395 | return false; 2396 | } 2397 | 2398 | return $this->api2_query($username, 'Ftp', 'listftpwithdisk'); 2399 | } 2400 | 2401 | // This API2 function allows you to list ftp-users associated with a cPanel account. 2402 | public function listftp($username) 2403 | { 2404 | if (!isset($username)) { 2405 | error_log("listftp requires that user is passed to it"); 2406 | 2407 | return false; 2408 | } 2409 | 2410 | return $this->api2_query($username, 'Ftp', 'listftp'); 2411 | } 2412 | 2413 | // This API function displays a list of all parked domains for a specific user. 2414 | public function listparkeddomains($username, $domain = null) 2415 | { 2416 | $args = array(); 2417 | if (!isset($username)) { 2418 | error_log("listparkeddomains requires that a user is passed to it"); 2419 | 2420 | return false; 2421 | } 2422 | if (isset($domain)) { 2423 | $args['regex'] = $domain; 2424 | 2425 | return $this->api2_query($username, 'Park', 'listparkeddomains', $args); 2426 | } 2427 | 2428 | return $this->api2_query($username, 'Park', 'listparkeddomains'); 2429 | } 2430 | 2431 | // This API function displays a list of all addon domains for a specific user. 2432 | public function listaddondomains($username, $domain = null) 2433 | { 2434 | $args = array(); 2435 | if (!isset($username)) { 2436 | error_log("listaddondomains requires that a user is passed to it"); 2437 | 2438 | return false; 2439 | } 2440 | if (isset($domain)) { 2441 | $args['regex'] = $domain; 2442 | 2443 | return $this->api2_query($username, 'AddonDomain', 'listaddondomains', $args); 2444 | } 2445 | 2446 | return $this->api2_query($username, 'Park', 'listaddondomains'); 2447 | } 2448 | 2449 | // This API function displays a list of all selected stats for a specific user. 2450 | public function stat($username, $args = null) 2451 | { 2452 | if ( (!isset($username)) || (!isset($args)) ) { 2453 | error_log("stat requires that a username and options are passed to it"); 2454 | 2455 | return false; 2456 | } 2457 | if (is_array($args)) { 2458 | $display = ''; 2459 | foreach ($args as $key => $value) { 2460 | $display .= $value . '|'; 2461 | } 2462 | $values['display'] = substr($display, 0, -1); 2463 | } else { 2464 | $values['display'] = substr($args, 0, -1); 2465 | } 2466 | 2467 | return $this->api2_query($username, 'StatsBar', 'stat', $values); 2468 | } 2469 | 2470 | } 2471 | --------------------------------------------------------------------------------