From d1d9bc512b14083dbe38e791cf8ee0e02b358336 Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Mon, 10 May 2010 14:17:02 -0400
Subject: [PATCH] Some small improvements of the output of the ISPConfig - Version

---
 server/lib/classes/db_mysql.inc.php |  192 +++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 158 insertions(+), 34 deletions(-)

diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 0270821..229b11e 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -29,20 +29,19 @@
 
 	class db
 	{
-		var $dbHost = "";		  // hostname of the MySQL server
-		var $dbName = "";		  // logical database name on that server
-		var $dbUser = "";		  // database authorized user
-		var $dbPass = "";		  // user's password
-		var $dbCharset = "";      // what charset comes and goes to mysql: utf8 / latin1
-		var $linkId = 0;		  // last result of mysql_connect()
-		var $queryId = 0;		  // last result of mysql_query()
-		var $record	= array();	  // last record fetched
-        var $autoCommit = 1;      // Autocommit Transactions
-		var $currentRow;		  // current row number
-		var $errorNumber = 0;	  // last error number
-		var $errorMessage = "";	  // last error message
-		var $errorLocation = "";  // last error location
-		var $show_error_messages = false;
+		var $dbHost = "";		// hostname of the MySQL server
+		var $dbName = "";		// logical database name on that server
+		var $dbUser = "";		// database authorized user
+		var $dbPass = "";		// user's password
+		var $linkId = 0;		// last result of mysql_connect()
+		var $queryId = 0;		// last result of mysql_query()
+		var $record	= array();	// last record fetched
+        var $autoCommit = 1;    // Autocommit Transactions
+		var $currentRow;		// current row number
+		var $errorNumber = 0;	// last error number
+		var $errorMessage = "";	// last error message
+		var $errorLocation = "";// last error location
+		var $show_error_messages = true;
 
 		// constructor
 		function db()
@@ -53,20 +52,22 @@
 			$this->dbName = $conf["db_database"];
 			$this->dbUser = $conf["db_user"];
 			$this->dbPass = $conf["db_password"];
-			$this->dbCharset = $conf["db_charset"];
+			$this->dbCharset = $conf['db_charset'];
 			//$this->connect();
 		}
 
 		// error handler
 		function updateError($location)
 		{
-			$this->errorNumber = mysql_errno();
-			$this->errorMessage = mysql_error();
+			global $app;
+			$this->errorNumber = mysql_errno($this->linkId);
+			$this->errorMessage = mysql_error($this->linkId);
 			$this->errorLocation = $location;
-			if($this->errorNumber && $this->show_error_messages)
+			if($this->errorNumber && $this->show_error_messages && method_exists($app,'log'))
 			{
-				echo('<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage);
-				flush();
+				// echo('<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage);
+				$app->log($this->errorLocation." ".$this->errorMessage,LOGLEVEL_WARN);
+				//flush();
 			}
 		}
 
@@ -77,10 +78,11 @@
 				$this->linkId = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
 				if(!$this->linkId)
 				{
-					$this->updateError('DB::connect()<br />mysql_connect');
+					$this->updateError('DB::connect()-> mysql_connect');
 					return false;
 				}
-    			$this->queryId = @mysql_query('SET NAMES '.$this->dbCharset, $this->linkId);
+				$this->queryId = @mysql_query('SET NAMES '.$this->dbCharset, $this->linkId);
+				$this->queryId = @mysql_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."'", $this->linkId);
 			}
 			return true;
 		}
@@ -93,11 +95,11 @@
 			}
 			if(!mysql_select_db($this->dbName, $this->linkId))
 			{
-				$this->updateError('DB::connect()<br />mysql_select_db');
+				$this->updateError('DB::connect()-> mysql_select_db');
 				return false;
 			}
 			$this->queryId = @mysql_query($queryString, $this->linkId);
-			$this->updateError('DB::query('.$queryString.')<br />mysql_query');
+			$this->updateError('DB::query('.$queryString.') -> mysql_query');
 			if(!$this->queryId)
 			{
 				return false;
@@ -135,7 +137,7 @@
 		function nextRecord()
 		{
             $this->record = mysql_fetch_assoc($this->queryId);
-			$this->updateError('DB::nextRecord()<br />mysql_fetch_array');
+			$this->updateError('DB::nextRecord()-> mysql_fetch_array');
 			if(!$this->record || !is_array($this->record))
 			{
 				return false;
@@ -171,7 +173,7 @@
 				return addslashes($formfield);
 			}
 			
-			return mysql_real_escape_string($formfield);
+			return mysql_real_escape_string($formfield, $this->linkId);
         }
 		
 		// Check der variablen
@@ -190,7 +192,8 @@
 		return $out;
 		}
        
-       
+       /*
+	   //* These functions are deprecated and will be removed.
        function insert($tablename,$form,$debug = 0)
        {
          if(is_array($form)){
@@ -225,15 +228,136 @@
       		 if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
            }
        }
+	   */
+	   
+	   public function diffrec($record_old, $record_new) {
+		$diffrec_full = array();
+		$diff_num = 0;
+
+		if(is_array($record_old) && count($record_old) > 0) {
+			foreach($record_old as $key => $val) {
+				// if(!isset($record_new[$key]) || $record_new[$key] != $val) {
+				if($record_new[$key] != $val) {
+					// Record has changed
+					$diffrec_full['old'][$key] = $val;
+					$diffrec_full['new'][$key] = $record_new[$key];
+					$diff_num++;
+				} 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];
+					$diff_num++;
+				} else {
+					$diffrec_full['new'][$key] = $val;
+					$diffrec_full['old'][$key] = $val;
+				}
+			}
+		}
+		
+		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) {
+		global $app,$conf;
+
+		// Insert backticks only for incomplete table names.
+		if(stristr($db_table,'.')) {
+			$escape = '';
+		} else {
+			$escape = '`';
+		}
+
+		$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;
+		if(isset($record_new["server_id"])) $server_id = $record_new["server_id"];
+		
+
+		if($diff_num > 0) {
+			//print_r($diff_num);
+			//print_r($diffrec_full);
+			$diffstr = $app->db->quote(serialize($diffrec_full));
+			$username = $app->db->quote($_SESSION["s"]["user"]["username"]);
+			$dbidx = $primary_field.":".$primary_id;
+						
+			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 ('".$db_table."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')";
+			$app->db->query($sql);
+		}
+
+		return true;
+	}
+	
+	//** Inserts a record and saves the changes into the datalog
+	public function datalogInsert($tablename, $insert_data, $index_field) {
+		global $app;
+		
+		$old_rec = array();
+		$this->query("INSERT INTO $tablename $insert_data");
+		$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);
+		
+		return $index_value;
+	}
+	
+	//** 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'");
+		$new_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
+		$this->datalogSave($tablename, 'UPDATE', $index_field, $index_value, $old_rec, $new_rec);
+		
+		return true;
+	}
+	
+	//** Deletes a record and saves the changes into the datalog
+	public function datalogDelete($tablename, $index_field, $index_value) {
+		global $app;
+		
+		$old_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
+		$this->query("DELETE FROM $tablename WHERE $index_field = '$index_value'");
+		$new_rec = array();
+		$this->datalogSave($tablename, 'DELETE', $index_field, $index_value, $old_rec, $new_rec);
+		
+		return true;
+	}
        
-       function closeConn() {
+       public function closeConn()
+    	{
+    		if($this->linkId)
+    		{
+    			mysql_close($this->linkId);
+    			return true;
+    		} else { return false; }
+    	}
        
-       }
-       
-       function freeResult() {
-       
-       
-       }
+    	public function freeResult($query) 
+    	{
+    		if(mysql_free_result($query))
+    		{
+    			return true;
+    		} else {
+    			return false;
+    		}
+    	}
        
        function delete() {
        

--
Gitblit v1.9.1