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.'