diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index 205e0fa6fca64379374d2e0a1eb0f8b4af90fa1e..1a981a6156a37a1429b61b2ec3fb0583046557e6 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -5,21 +5,31 @@ class remoting { //* remote session timeout in seconds private $session_timeout = 600; - private $app; + private $server; + + /* + These variables shall stay global. + Please do not make them private variables. + + private $app; private $conf; - private $server; + */ public function __construct() { - global $app, $conf, $server; + global $server; $this->server = $server; + /* $this->app = $app; $this->conf = $conf; + */ } //* remote login function public function login($username, $password) { + global $app, $conf, $server; + if(empty($username)) { $this->server->fault('login_username_empty', 'The login username is empty'); return false; @@ -30,11 +40,11 @@ class remoting { return false; } - $username = $this->app->db->quote($username); - $password = $this->app->db->quote($password); + $username = $app->db->quote($username); + $password = $app->db->quote($password); $sql = "SELECT * FROM remote_user WHERE remote_username = '$username' and remote_password = md5('$password')"; - $remote_user = $this->app->db->queryOneRecord($sql); + $remote_user = $app->db->queryOneRecord($sql); if($remote_user['remote_userid'] > 0) { //* Create a remote user session srand ((double)microtime()*1000000); @@ -45,7 +55,7 @@ class remoting { $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp' .') VALUES (' ." '$remote_session',$remote_userid,'$remote_functions',$tstamp)"; - $this->app->db->query($sql); + $app->db->query($sql); return $remote_session; } else { $this->server->fault('login_failed', 'The login failed. Username or password wrong.'); @@ -54,44 +64,117 @@ class remoting { } - //* remote logout function public function logout($session_id) { + global $app; + if(empty($session_id)) { $this->server->fault('session_id_empty', 'The SessionID is empty.'); return false; } - $session_id = $this->app->db->quote($session_id); + $session_id = $app->db->quote($session_id); $sql = "DELETE FROM remote_session WHERE remote_session = '$session_id'"; - $this->app->db->query($sql); - return ($this->app->db->affectedRows() == 1); + $app->db->query($sql); + return ($app->db->affectedRows() == 1); } - public function mail_domain_add($session_id, $params) + + public function mail_domain_add($session_id, $client_id, $params) { if(!$this->checkPerm($session_id, 'mail_domain_add')) { $this->server->fault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - - //* Form definition file, that is used for this table in the interafce - $formdef = '../mail/form/mail_domain.tform.php'; - - //* check the variables against the form definition and build the sql query automatically. - // I will use a modified version of the tform class for this. - + $domain_id = $this->insertQuery('../mail/form/mail_domain.tform.php',$client_id,$params); + return $domain_id; + } + + public function mail_domain_update($session_id, $client_id, $domain_id, $params) + { + if(!$this->checkPerm($session_id, 'mail_domain_update')) { + $this->server->fault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + $domain_id = $this->updateQuery('../mail/form/mail_domain.tform.php',$client_id,$domain_id,$params); + return $domain_id; } //** private functions ----------------------------------------------------------------------------------- - private function updateQuery($formdef, $params) + private function updateQuery($formdef_file, $client_id, $primary_id, $params) { + global $app; + + $app->uses('remoting_lib'); + + //* Load the form definition + $app->remoting_lib->loadFormDef($formdef_file); + + //* load the user profile of the client + $app->remoting_lib->loadUserProfile($client_id); + + //* Get the SQL query + $sql = $app->remoting_lib->getSQL($params,'UPDATE',$primary_id); + if($app->remoting_lib->errorMessage != '') { + $this->server->fault('data_processing_error', $app->remoting_lib->errorMessage); + return false; + } + + $app->db->query($sql); + + if($app->db->errorMessage != '') { + $this->server->fault('database_error', $app->db->errorMessage . ' '.$sql); + return false; + } + + $affected_rows = $app->db->affectedRows(); + + //* TODO: Save changes to Datalog + + + + return $affected_rows; + } + private function insertQuery($formdef_file, $client_id, $params) + { + global $app; + + $app->uses('remoting_lib'); + + //* Load the form definition + $app->remoting_lib->loadFormDef($formdef_file); + + //* load the user profile of the client + $app->remoting_lib->loadUserProfile($client_id); + + //* Get the SQL query + $sql = $app->remoting_lib->getSQL($params,'INSERT',0); + if($app->remoting_lib->errorMessage != '') { + $this->server->fault('data_processing_error', $app->remoting_lib->errorMessage); + return false; + } + + $app->db->query($sql); + + if($app->db->errorMessage != '') { + $this->server->fault('database_error', $app->db->errorMessage . ' '.$sql); + return false; + } + + $insert_id = $app->db->insertID(); + + //* TODO: Save changes to Datalog + + + + + return $insert_id } @@ -107,16 +190,18 @@ class remoting { private function getSession($session_id) { + global $app; + if(empty($session_id)) { $this->server->fault('session_id_empty','The SessionID is empty.'); return false; } - $session_id = $this->app->db->quote($session_id); + $session_id = $app->db->quote($session_id); $now = time(); $sql = "SELECT * FROM remote_session WHERE remote_session = '$session_id' AND tstamp >= $now"; - $session = $this->app->db->queryOneRecord($sql); + $session = $app->db->queryOneRecord($sql); if($session['remote_userid'] > 0) { return $session; } else { diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..0908275b737af13408c191226e6b94d1d6767d8b --- /dev/null +++ b/interface/lib/classes/remoting_lib.inc.php @@ -0,0 +1,684 @@ +formDef = $form; + unset($this->formDef['tabs']); + + //* Copy all fields from all tabs into one form definition + foreach($form['tabs'] as $tab) { + foreach($tab['fields'] as $key => $value) { + $this->formDef['fields'][$key] = $value; + } + } + unset($form); + + return true; + } + + //* Load the user profile + function loadUserProfile($client_id = 0) { + global $app,$conf; + + $client_id = intval($client_id); + + if($client_id == 0) { + $this->sys_username = 'admin'; + $this->sys_userid = 1; + $this->sys_default_group = 1; + $this->sys_groups = 1; + } else { + //* Load the client data + $client = $app->db->queryOneRecord("SELECT username FROM client WHERE client_id = $client_id"); + if($client["username"] == '') { + $this->errorMessage .= 'No client with ID $client_id found.'; + return false; + } + //* load system user + $user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE username = '".$app->db->quote($client["username"])."'"); + if(empty($user["userid"])) { + $this->errorMessage .= 'No user with the username '.$client['username'].' found.'; + return false; + } + $this->sys_username = $user['username']; + $this->sys_userid = $user['userid']; + $this->sys_default_group = $user['default_group']; + $this->sys_groups = $user['groups']; + } + + return true; + + } + + + /** + * Converts data in human readable form + * + * @param record + * @return record + */ + function decode($record) { + $new_record = ''; + if(is_array($record)) { + foreach($this->formDef['fields'] as $key => $field) { + switch ($field['datatype']) { + case 'VARCHAR': + $new_record[$key] = stripslashes($record[$key]); + break; + + case 'TEXT': + $new_record[$key] = stripslashes($record[$key]); + break; + + case 'DATE': + if($record[$key] > 0) { + $new_record[$key] = date($this->dateformat,$record[$key]); + } + break; + + case 'INTEGER': + $new_record[$key] = intval($record[$key]); + break; + + case 'DOUBLE': + $new_record[$key] = $record[$key]; + break; + + case 'CURRENCY': + $new_record[$key] = number_format($record[$key], 2, ',', ''); + break; + + default: + $new_record[$key] = stripslashes($record[$key]); + } + } + + } + + return $new_record; + } + + /** + * Get the key => value array of a form filled from a datasource definitiom + * + * @param field = array with field definition + * @param record = Dataset as array + * @return key => value array for the value field of a form + */ + + function getDatasourceData($field, $record) { + global $app; + + $values = array(); + + if($field["datasource"]["type"] == 'SQL') { + + // Preparing SQL string. We will replace some + // common placeholders + $querystring = $field["datasource"]["querystring"]; + $querystring = str_replace("{USERID}",$this->sys_userid,$querystring); + $querystring = str_replace("{GROUPID}",$this->sys_default_group,$querystring); + $querystring = str_replace("{GROUPS}",$this->sys_groups,$querystring); + $table_idx = $this->formDef['db_table_idx']; + + $tmp_recordid = (isset($record[$table_idx]))?$record[$table_idx]:0; + $querystring = str_replace("{RECORDID}",$tmp_recordid,$querystring); + unset($tmp_recordid); + + $querystring = str_replace("{AUTHSQL}",$this->getAuthSQL('r'),$querystring); + + // Getting the records + $tmp_records = $app->db->queryAllRecords($querystring); + if($app->db->errorMessage != '') die($app->db->errorMessage); + if(is_array($tmp_records)) { + $key_field = $field["datasource"]["keyfield"]; + $value_field = $field["datasource"]["valuefield"]; + foreach($tmp_records as $tmp_rec) { + $tmp_id = $tmp_rec[$key_field]; + $values[$tmp_id] = $tmp_rec[$value_field]; + } + } + } + + if($field["datasource"]["type"] == 'CUSTOM') { + // Calls a custom class to validate this record + if($field["datasource"]['class'] != '' and $field["datasource"]['function'] != '') { + $datasource_class = $field["datasource"]['class']; + $datasource_function = $field["datasource"]['function']; + $app->uses($datasource_class); + $values = $app->$datasource_class->$datasource_function($field, $record); + } else { + $this->errorMessage .= "Custom datasource class or function is empty
\r\n"; + } + } + + return $values; + + } + + /** + * Converts the data in a format to store it in the database table + * + * @param record = Datensatz als Array + * @return record + */ + function encode($record) { + + if(is_array($record)) { + foreach($this->formDef['fields'] as $key => $field) { + + if(isset($field['validators']) && is_array($field['validators'])) $this->validateField($key, (isset($record[$key]))?$record[$key]:'', $field['validators']); + + switch ($field['datatype']) { + case 'VARCHAR': + if(!@is_array($record[$key])) { + $new_record[$key] = (isset($record[$key]))?addslashes($record[$key]):''; + } else { + $new_record[$key] = implode($field['separator'],$record[$key]); + } + break; + case 'TEXT': + if(!is_array($record[$key])) { + $new_record[$key] = addslashes($record[$key]); + } else { + $new_record[$key] = implode($field['separator'],$record[$key]); + } + break; + case 'DATE': + if($record[$key] > 0) { + list($tag,$monat,$jahr) = explode('.',$record[$key]); + $new_record[$key] = mktime(0,0,0,$monat,$tag,$jahr); + } else { + $new_record[$key] = 0; + } + break; + case 'INTEGER': + $new_record[$key] = (isset($record[$key]))?intval($record[$key]):0; + //if($new_record[$key] != $record[$key]) $new_record[$key] = $field['default']; + //if($key == 'refresh') die($record[$key]); + break; + case 'DOUBLE': + $new_record[$key] = addslashes($record[$key]); + break; + case 'CURRENCY': + $new_record[$key] = str_replace(",",".",$record[$key]); + break; + } + + // The use of the field value is deprecated, use validators instead + if(isset($field['regex']) && $field['regex'] != '') { + // Enable that "." matches also newlines + $field['regex'] .= 's'; + if(!preg_match($field['regex'], $record[$key])) { + $errmsg = $field['errmsg']; + $this->errorMessage .= $errmsg."\r\n"; + } + } + + + } + } + return $new_record; + } + + /** + * process the validators for a given field. + * + * @param field_name = Name of the field + * @param field_value = value of the field + * @param validatoors = Array of validators + * @return record + */ + + function validateField($field_name, $field_value, $validators) { + + global $app; + + $escape = '`'; + + // loop trough the validators + foreach($validators as $validator) { + + switch ($validator['type']) { + case 'REGEX': + $validator['regex'] .= 's'; + if(!preg_match($validator['regex'], $field_value)) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + break; + case 'UNIQUE': + if($this->action == 'NEW') { + $num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."'"); + if($num_rec["number"] > 0) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + } else { + $num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."' AND ".$this->formDef['db_table_idx']." != ".$this->primary_id); + if($num_rec["number"] > 0) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + } + break; + case 'NOTEMPTY': + if(empty($field_value)) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + break; + case 'ISEMAIL': + if(!preg_match("/^\w+[\w.-]*\w+@\w+[\w.-]*\w+\.[a-z]{2,10}$/i", $field_value)) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + break; + case 'ISINT': + $tmpval = intval($field_value); + if($tmpval === 0 and !empty($field_value)) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + break; + case 'ISPOSITIVE': + if(!is_numeric($field_value) || $field_value <= 0){ + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + break; + case 'CUSTOM': + // Calls a custom class to validate this record + if($validator['class'] != '' and $validator['function'] != '') { + $validator_class = $validator['class']; + $validator_function = $validator['function']; + $app->uses($validator_class); + $this->errorMessage .= $app->$validator_class->$validator_function($field_name, $field_value, $validator); + } else { + $this->errorMessage .= "Custom validator class or function is empty
\r\n"; + } + break; + default: + $this->errorMessage .= "Unknown Validator: ".$validator['type']; + break; + } + + + } + + return true; + } + + /** + * Create SQL statement + * + * @param record = Datensatz als Array + * @param action = INSERT oder UPDATE + * @param primary_id + * @return record + */ + function getSQL($record, $action = 'INSERT', $primary_id = 0, $sql_ext_where = '') { + + global $app; + + $this->action = $action; + $this->primary_id = $primary_id; + + $record = $this->encode($record,$tab); + $sql_insert_key = ''; + $sql_insert_val = ''; + $sql_update = ''; + + if(!is_array($this->formDef)) $app->error("No form definition found."); + + // gehe durch alle Felder des Tabs + if(is_array($record)) { + foreach($this->formDef['fields'] as $key => $field) { + // Wenn es kein leeres Passwortfeld ist + if (!($field['formtype'] == 'PASSWORD' and $record[$key] == '')) { + // Erzeuge Insert oder Update Quelltext + if($action == "INSERT") { + if($field['formtype'] == 'PASSWORD') { + $sql_insert_key .= "`$key`, "; + if($field['encryption'] == 'CRYPT') { + $salt="$1$"; + for ($n=0;$n<8;$n++) { + $salt.=chr(mt_rand(64,126)); + } + $salt.="$"; + // $salt = substr(md5(time()),0,2); + $record[$key] = crypt($record[$key],$salt); + } else { + $record[$key] = md5($record[$key]); + } + $sql_insert_val .= "'".$record[$key]."', "; + } elseif ($field['formtype'] == 'CHECKBOX') { + $sql_insert_key .= "`$key`, "; + if($record[$key] == '') { + // if a checkbox is not set, we set it to the unchecked value + $sql_insert_val .= "'".$field['value'][0]."', "; + $record[$key] = $field['value'][0]; + } else { + $sql_insert_val .= "'".$record[$key]."', "; + } + } else { + $sql_insert_key .= "`$key`, "; + $sql_insert_val .= "'".$record[$key]."', "; + } + } else { + if($field['formtype'] == 'PASSWORD') { + if($field['encryption'] == 'CRYPT') { + $salt="$1$"; + for ($n=0;$n<8;$n++) { + $salt.=chr(mt_rand(64,126)); + } + $salt.="$"; + // $salt = substr(md5(time()),0,2); + $record[$key] = crypt($record[$key],$salt); + } else { + $record[$key] = md5($record[$key]); + } + $sql_update .= "`$key` = '".$record[$key]."', "; + } elseif ($field['formtype'] == 'CHECKBOX') { + if($record[$key] == '') { + // if a checkbox is not set, we set it to the unchecked value + $sql_update .= "`$key` = '".$field['value'][0]."', "; + $record[$key] = $field['value'][0]; + } else { + $sql_update .= "`$key` = '".$record[$key]."', "; + } + } else { + $sql_update .= "`$key` = '".$record[$key]."', "; + } + } + } else { + // we unset the password filed, if empty to tell the datalog function + // that the password has not been changed + unset($record[$key]); + } + } + } + + + + if(stristr($this->formDef['db_table'],'.')) { + $escape = ''; + } else { + $escape = '`'; + } + + + if($action == "INSERT") { + if($this->formDef['auth'] == 'yes') { + // Setze User und Gruppe + $sql_insert_key .= "`sys_userid`, "; + $sql_insert_val .= ($this->formDef["auth_preset"]["userid"] > 0)?"'".$this->formDef["auth_preset"]["userid"]."', ":"'".$this->sys_userid."', "; + $sql_insert_key .= "`sys_groupid`, "; + $sql_insert_val .= ($this->formDef["auth_preset"]["groupid"] > 0)?"'".$this->formDef["auth_preset"]["groupid"]."', ":"'".$this->sys_default_group."', "; + $sql_insert_key .= "`sys_perm_user`, "; + $sql_insert_val .= "'".$this->formDef["auth_preset"]["perm_user"]."', "; + $sql_insert_key .= "`sys_perm_group`, "; + $sql_insert_val .= "'".$this->formDef["auth_preset"]["perm_group"]."', "; + $sql_insert_key .= "`sys_perm_other`, "; + $sql_insert_val .= "'".$this->formDef["auth_preset"]["perm_other"]."', "; + } + $sql_insert_key = substr($sql_insert_key,0,-2); + $sql_insert_val = substr($sql_insert_val,0,-2); + $sql = "INSERT INTO ".$escape.$this->formDef['db_table'].$escape." ($sql_insert_key) VALUES ($sql_insert_val)"; + } else { + if($primary_id != 0) { + $sql_update = substr($sql_update,0,-2); + $sql = "UPDATE ".$escape.$this->formDef['db_table'].$escape." SET ".$sql_update." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id; + if($sql_ext_where != '') $sql .= " and ".$sql_ext_where; + } else { + $app->error("Primary ID fehlt!"); + } + } + + return $sql; + } + + + function getDataRecord($primary_id) { + global $app; + $escape = '`'; + $sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id; + return $app->db->queryOneRecord($sql); + } + + + function datalogSave($action,$primary_id, $record_old, $record_new) { + global $app,$conf; + + if(stristr($this->formDef['db_table'],'.')) { + $escape = ''; + } else { + $escape = '`'; + } + + $diffrec = array(); + + if(is_array($record_new) && count($record_new) > 0) { + foreach($record_new as $key => $val) { + if($record_old[$key] != $val) { + // Record has changed + $diffrec[$key] = array('old' => $record_old[$key], + 'new' => $val); + } + } + } elseif(is_array($record_old)) { + foreach($record_old as $key => $val) { + if($record_new[$key] != $val) { + // Record has changed + $diffrec[$key] = array('new' => $record_new[$key], + 'old' => $val); + } + } + } + $this->diffrec = $diffrec; + + + // Full diff records for ISPConfig, they have a different format then the simple diffrec + $diffrec_full = array(); + + if(is_array($record_old) && count($record_old) > 0) { + foreach($record_old as $key => $val) { + if(isset($record_new[$key]) && $record_new[$key] != $val) { + // Record has changed + $diffrec_full['old'][$key] = $val; + $diffrec_full['new'][$key] = $record_new[$key]; + } else { + $diffrec_full['old'][$key] = $val; + $diffrec_full['new'][$key] = $val; + } + } + } elseif(is_array($record_new)) { + foreach($record_new as $key => $val) { + if(isset($record_new[$key]) && $record_old[$key] != $val) { + // Record has changed + $diffrec_full['new'][$key] = $val; + $diffrec_full['old'][$key] = $record_old[$key]; + } else { + $diffrec_full['new'][$key] = $val; + $diffrec_full['old'][$key] = $val; + } + } + } + + /* + echo "
";
+				print_r($diffrec_full);
+				echo "
"; + */ + + // Insert the server_id, if the record has a server_id + $server_id = (isset($record_old["server_id"]) && $record_old["server_id"] > 0)?$record_old["server_id"]:0; + if(isset($record_new["server_id"])) $server_id = $record_new["server_id"]; + + if(count($this->diffrec) > 0) { + $diffstr = $app->db->quote(serialize($diffrec_full)); + $username = $app->db->quote($this->sys_username); + $dbidx = $this->formDef['db_table_idx'].":".$primary_id; + // $action = ($action == 'INSERT')?'i':'u'; + + if($action == 'INSERT') $action = 'i'; + if($action == 'UPDATE') $action = 'u'; + if($action == 'DELETE') $action = 'd'; + $sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$this->formDef['db_table']."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')"; + $app->db->query($sql); + } + + return true; + + } + +} + +?> \ No newline at end of file diff --git a/interface/web/remote/index.php b/interface/web/remote/index.php index d83a54356e8ad1b2f67a68bb233aa277ece8c875..78e8d0134f775cf528f4f1fcdd433e4f2c664373 100644 --- a/interface/web/remote/index.php +++ b/interface/web/remote/index.php @@ -7,7 +7,6 @@ require_once('../../lib/app.inc.php'); $app->load('remoting'); $server = new SoapServer(null, array('uri' => $_SERVER['REQUEST_URI'])); -//$server->setPersistence(SOAP_PERSISTENCE_SESSION); $server->setClass('remoting'); $server->handle(); diff --git a/remoting_client/example.php b/remoting_client/example.php new file mode 100644 index 0000000000000000000000000000000000000000..7d89cd40a6849527fd5b5698e5d2e82576e2bef7 --- /dev/null +++ b/remoting_client/example.php @@ -0,0 +1,76 @@ + $soap_location, + 'uri' => $soap_uri)); + + +try { + //* Login to the remote server + if($session_id = $client->login($username,$password)) { + echo 'Logged into remote server sucessfully. The SessionID is '.$session_id.'
'; + } + + //* ---------------------------------------------------------- + //* Example functions + //* ---------------------------------------------------------- + + /* + //* Add a email domain + $params = array( 'server_id' => 1, + 'domain' => 'test.com', + 'active' => 'y'); + $client_id = 0; + $domain_id = $client->mail_domain_add($session_id, $client_id, $params); + */ + + /* + //* Update email domain + $params = array( 'server_id' => 1, + 'domain' => 'test.org', + 'active' => 'y'); + //* ID of the client. 0 = the admin owns this record. + $client_id = 0; + + // ID of the domain whch shall be updated. + $domain_id = 1; + + // Call the domain update function + $domain_id = $client->mail_domain_update($session_id, $client_id, $domain_id, $params); + */ + + + //* Logout + if($client->logout($session_id)) { + echo 'Logged out sucessfully.
'; + } + + +} catch (SoapFault $e) { + die('SOAP Error: '.$e->getMessage()); +} + + + + + + + + + + + + + +?> \ No newline at end of file