From aa370627b211a51dc46891cfa4b6e3d2ef3e52db Mon Sep 17 00:00:00 2001
From: mcramer <m.cramer@pixcept.de>
Date: Tue, 16 Jul 2013 10:45:17 -0400
Subject: [PATCH] - Fixed FS#2924 - the month will not set automatically in the autoresponder by click now Along with this fixed some display problems with the combo boxes introduced in 3.0.5. Some fields were not correctly displayed with the predefined values if value and text of the underlying option element differ.
---
server/lib/classes/db_mysql.inc.php | 166 +++++++++++++++++++++++++++++++++++--------------------
1 files changed, 105 insertions(+), 61 deletions(-)
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 54561c0..2974da0 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -45,6 +45,7 @@
public $errorMessage = ''; // last error message
private $errorLocation = '';// last error location
public $show_error_messages = false; // false in server, true in interface
+ private $isConnected = false; // needed to know if we have a valid mysqli object from the constructor
// constructor
public function __construct($host = NULL , $user = NULL, $pass = NULL, $database = NULL) {
@@ -59,11 +60,22 @@
$this->dbClientFlags = $conf['db_client_flags'];
parent::__construct($this->dbHost, $this->dbUser, $this->dbPass,$this->dbName);
- if ($this->connect_error) {
+ $try = 0;
+ //while(!is_null($this->connect_error) && $try < 10) {
+ while(mysqli_connect_error() && $try < 10) {
+ if($try > 8) sleep(5);
+ elseif($try > 0) sleep(1);
+
+ $try++;
$this->updateError('DB::__construct');
+
+ parent::__construct($this->dbHost, $this->dbUser, $this->dbPass,$this->dbName);
}
- parent::query( 'SET NAMES '.$this->dbCharset);
- parent::query( "SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'");
+
+ //if(is_null($this->connect_error)) $this->isConnected = true;
+ if(!mysqli_connect_error()) $this->isConnected = true;
+
+ $this->setCharacterEncoding();
}
public function __destruct() {
@@ -79,12 +91,21 @@
public function updateError($location) {
global $app;
- if($this->connect_error) {
+ /*
+ if(!is_null($this->connect_error)) {
$this->errorNumber = $this->connect_errno;
$this->errorMessage = $this->connect_error;
} else {
$this->errorNumber = $this->errno;
$this->errorMessage = $this->error;
+ }
+ */
+ if(mysqli_connect_error()) {
+ $this->errorNumber = mysqli_connect_errno();
+ $this->errorMessage = mysqli_connect_error();
+ } else {
+ $this->errorNumber = mysqli_errno($this);
+ $this->errorMessage = mysqli_error($this);
}
$this->errorLocation = $location;
@@ -101,9 +122,34 @@
}
}
}
+
+ private function setCharacterEncoding() {
+ if($this->isConnected == false) return false;
+ parent::query( 'SET NAMES '.$this->dbCharset);
+ parent::query( "SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'");
+ }
public function query($queryString) {
- $this->queryId = parent::query($queryString);
+ if($this->isConnected == false) return false;
+ $try = 0;
+ do {
+ $try++;
+ $ok = $this->ping();
+ if(!$ok) {
+ if(!$this->real_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName)) {
+ if($try > 9) {
+ $this->updateError('DB::query -> reconnect');
+ return false;
+ } else {
+ sleep(($try > 7 ? 5 : 1));
+ }
+ } else {
+ $this->setCharacterEncoding();
+ $ok = true;
+ }
+ }
+ } while($ok == false);
+ $this->queryId = parent::query($queryString);
$this->updateError('DB::query('.$queryString.') -> mysqli_query');
if(!$this->queryId) {
return false;
@@ -151,6 +197,10 @@
public function numRows() {
return $this->queryId->num_rows;
}
+
+ public function affectedRows() {
+ return $this->queryId->affected_rows;
+ }
// returns mySQL insert id
public function insertID() {
@@ -179,44 +229,6 @@
}
return $out;
}
-
- /*
- //* These functions are deprecated and will be removed.
- function insert($tablename,$form,$debug = 0)
- {
- if(is_array($form)){
- foreach($form as $key => $value)
- {
- $sql_key .= "$key, ";
- $sql_value .= "'".$this->check($value)."', ";
- }
- $sql_key = substr($sql_key,0,strlen($sql_key) - 2);
- $sql_value = substr($sql_value,0,strlen($sql_value) - 2);
-
- $sql = "INSERT INTO $tablename (" . $sql_key . ") VALUES (" . $sql_value .")";
-
- if($debug == 1) echo "SQL-Statement: ".$sql."<br><br>";
- $this->query($sql);
- if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
- }
- }
-
- function update($tablename,$form,$bedingung,$debug = 0)
- {
-
- if(is_array($form)){
- foreach($form as $key => $value)
- {
- $insql .= "$key = '".$this->check($value)."', ";
- }
- $insql = substr($insql,0,strlen($insql) - 2);
- $sql = "UPDATE $tablename SET " . $insql . " WHERE $bedingung";
- if($debug == 1) echo "SQL-Statement: ".$sql."<br><br>";
- $this->query($sql);
- if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
- }
- }
- */
public function diffrec($record_old, $record_new) {
$diffrec_full = array();
@@ -252,9 +264,9 @@
return array('diff_num' => $diff_num, 'diff_rec' => $diffrec_full);
}
-
- //** Function to fill the datalog with a full differential record.
- public function datalogSave($db_table, $action, $primary_field, $primary_id, $record_old, $record_new) {
+
+ //** Function to fill the datalog with a full differential record.
+ public function datalogSave($db_table, $action, $primary_field, $primary_id, $record_old, $record_new, $force_update = false) {
global $app,$conf;
// Insert backticks only for incomplete table names.
@@ -264,10 +276,17 @@
$escape = '`';
}
- $tmp = $this->diffrec($record_old, $record_new);
- $diffrec_full = $tmp['diff_rec'];
- $diff_num = $tmp['diff_num'];
- unset($tmp);
+ if($force_update == true) {
+ //* We force a update even if no record has changed
+ $diffrec_full = array('new' => $record_new,'old' => $record_old);
+ $diff_num = count($record_new);
+ } else {
+ //* get the difference record between old and new record
+ $tmp = $this->diffrec($record_old, $record_new);
+ $diffrec_full = $tmp['diff_rec'];
+ $diff_num = $tmp['diff_num'];
+ unset($tmp);
+ }
// 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;
@@ -275,9 +294,9 @@
if($diff_num > 0) {
- $diffstr = $app->db->quote(serialize($diffrec_full));
+ $diffstr = $this->quote(serialize($diffrec_full));
if(isset($_SESSION)) {
- $username = $app->db->quote($_SESSION['s']['user']['username']);
+ $username = $this->quote($_SESSION['s']['user']['username']);
} else {
$username = 'admin';
}
@@ -287,7 +306,7 @@
if($action == 'UPDATE') $action = 'u';
if($action == 'DELETE') $action = 'd';
$sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$db_table."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')";
- $app->db->query($sql);
+ $this->query($sql);
}
return true;
@@ -296,9 +315,23 @@
//** Inserts a record and saves the changes into the datalog
public function datalogInsert($tablename, $insert_data, $index_field) {
global $app;
+
+ if(is_array($insert_data)) {
+ $key_str = '';
+ $val_str = '';
+ foreach($insert_data as $key => $val) {
+ $key_str .= "`".$key ."`,";
+ $val_str .= "'".$this->quote($val)."',";
+ }
+ $key_str = substr($key_str,0,-1);
+ $val_str = substr($val_str,0,-1);
+ $insert_data_str = '('.$key_str.') VALUES ('.$val_str.')';
+ } else {
+ $insert_data_str = $insert_data;
+ }
$old_rec = array();
- $this->query("INSERT INTO $tablename $insert_data");
+ $this->query("INSERT INTO $tablename $insert_data_str");
$index_value = $this->insertID();
$new_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
$this->datalogSave($tablename, 'INSERT', $index_field, $index_value, $old_rec, $new_rec);
@@ -307,13 +340,24 @@
}
//** Updates a record and saves the changes into the datalog
- public function datalogUpdate($tablename, $update_data, $index_field, $index_value) {
- global $app;
-
- $old_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
- $this->query("UPDATE $tablename SET $update_data WHERE $index_field = '$index_value'");
+ public function datalogUpdate($tablename, $update_data, $index_field, $index_value, $force_update = false) {
+ global $app;
+
+ $old_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
+
+ if(is_array($update_data)) {
+ $update_data_str = '';
+ foreach($update_data as $key => $val) {
+ $update_data_str .= "`".$key ."` = '".$this->quote($val)."',";
+ }
+ $update_data_str = substr($update_data_str,0,-1);
+ } else {
+ $update_data_str = $update_data;
+ }
+
+ $this->query("UPDATE $tablename SET $update_data_str WHERE $index_field = '$index_value'");
$new_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
- $this->datalogSave($tablename, 'UPDATE', $index_field, $index_value, $old_rec, $new_rec);
+ $this->datalogSave($tablename, 'UPDATE', $index_field, $index_value, $old_rec, $new_rec, $force_update);
return true;
}
@@ -447,7 +491,7 @@
// gibt Array mit Tabellennamen zur�ck
public function getTables($database_name = '') {
-
+ if($this->isConnected == false) return false;
if($database_name == '') $database_name = $this->dbName;
$result = parent::query("SHOW TABLES FROM $database_name");
for ($i = 0; $i < $result->num_rows; $i++) {
--
Gitblit v1.9.1