From fddedde16a26a98e783047ab86751990ba833c7a Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Thu, 12 Apr 2012 11:32:03 -0400
Subject: [PATCH] Added optional force_update argument in datalogSave function in mysql library.

---
 interface/lib/classes/db_mysql.inc.php |  100 +++++++++++++++++++++++++++-----------------------
 1 files changed, 54 insertions(+), 46 deletions(-)

diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index a358598..b249c95 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -1,5 +1,4 @@
 <?php
-
 /*
 Copyright (c) 2007, Till Brehm, projektfarm Gmbh
 All rights reserved.
@@ -33,11 +32,13 @@
 	private $dbName = '';		   // logical database name on that server
 	private $dbUser = '';		   // database authorized user
 	private $dbPass = '';		   // user's password
-    private $dbCharset = "";       // what charset comes and goes to mysql: utf8 / latin1
+	private $dbCharset = '';	   // what charset comes and goes to mysql: utf8 / latin1
+	private $dbNewLink = false;    // Return a new linkID when connect is called again
+	private $dbClientFlags = 0;    // MySQL Client falgs
 	private $linkId = 0;		   // last result of mysql_connect()
 	private $queryId = 0;		   // last result of mysql_query()
 	private $record	= array();	   // last record fetched
-    private $autoCommit = 1;       // Autocommit Transactions
+	private $autoCommit = 1;	    // Autocommit Transactions
 	private $currentRow;		   // current row number
 	private $errorNumber = 0;	   // last error number
 	public $errorMessage = '';	   // last error message
@@ -52,6 +53,8 @@
 		$this->dbUser = $conf['db_user'];
 		$this->dbPass = $conf['db_password'];
 		$this->dbCharset = $conf['db_charset'];
+		$this->dbNewLink = $conf['db_new_link'];
+		$this->dbClientFlags = $conf['db_client_flags'];
 		//$this->connect();
 	}
 
@@ -68,20 +71,21 @@
 	}
 
 	public function connect()
-    {
+	{
 		if($this->linkId == 0){
-			$this->linkId = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
+			$this->linkId = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbNewLink, $this->dbClientFlags);
 			if(!$this->linkId){
 				$this->updateError('DB::connect()<br />mysql_connect');
 				return false;
 			}
     		$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;
 	}
 
 	public function query($queryString)
-    {
+	{
 		if(!$this->connect()){
 			return false;
 		}
@@ -100,7 +104,7 @@
 
 	/** Returns all records as an array */
 	public function queryAllRecords($queryString)
-    {
+	{
 		if(!$this->query($queryString)){
 			return false;
 		}
@@ -113,7 +117,7 @@
 
 	/** Returns one row as an array */
 	public function queryOneRecord($queryString)
-    {
+	{
 		if(!$this->query($queryString) || $this->numRows() == 0){
 			return false;
 		}
@@ -122,8 +126,8 @@
 
 	/** Returns the next record as an array */
 	public function nextRecord()
-    {
-        $this->record = mysql_fetch_assoc($this->queryId);
+	{
+	$this->record = mysql_fetch_assoc($this->queryId);
 		$this->updateError('DB::nextRecord()<br />mysql_fetch_array');
 		if(!$this->record || !is_array($this->record)){
 			return false;
@@ -145,7 +149,7 @@
 		
 	/** Returns the last mySQL insert_id() */
 	public function insertID()
-    {
+	{
 		return mysql_insert_id($this->linkId);
 	}
         
@@ -216,7 +220,7 @@
         }
     }
 	*/
-	
+
 	public function diffrec($record_old, $record_new) {
 		$diffrec_full = array();
 		$diff_num = 0;
@@ -269,16 +273,16 @@
 		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"];
+		$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;
+			$username = $app->db->quote($_SESSION['s']['user']['username']);
+			$dbidx = $primary_field.':'.$primary_id;
 						
 			if($action == 'INSERT') $action = 'i';
 			if($action == 'UPDATE') $action = 'u';
@@ -304,10 +308,14 @@
 	}
 	
 	//** Updates a record and saves the changes into the datalog
-	public function datalogUpdate($tablename, $update_data, $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($force_update == true) {
+			$old_rec = array();
+		} else {
+			$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);
@@ -326,8 +334,8 @@
 		
 		return true;
 	}
-	
-	
+
+
        
     public function closeConn()
     {
@@ -337,7 +345,7 @@
     		return true;
     	} else { return false; }
     }
-       
+    
     public function freeResult($query) 
     {
     	if(mysql_free_result($query))
@@ -405,10 +413,10 @@
             if(isset($col['option']) && $col['option'] == 'primary'){ $index .= 'PRIMARY KEY ('.$col['name'].'),'; }
             if(isset($col['option']) && $col['option'] == 'index'){   $index .= 'INDEX ('.$col['name'].'),'; }
             if(isset($col['option']) && $col['option'] == 'unique'){  $index .= 'UNIQUE ('.$col['name'].'),'; }
-        }
+       }
        $sql .= $index;
        $sql = substr($sql,0,-1);
-       $sql .= ')';  
+       $sql .= ')';
        $this->query($sql);
        return true;
     }
@@ -427,36 +435,36 @@
     */
     public function alterTable($table_name,$columns)
     {
-        $index = '';
-        $sql = "ALTER TABLE $table_name ";
-        foreach($columns as $col){
+       $index = '';
+       $sql = "ALTER TABLE $table_name ";
+       foreach($columns as $col){
             if($col['action'] == 'add'){
-                $sql .= 'ADD '.$col['name'].' '.$this->mapType($col['type'], $col['typeValue']).' ';
+                $sql .= 'ADD '.$col['name'].' '.$this->mapType($col['type'],$col['typeValue']).' ';
             }elseif($col['action'] == 'alter') {
                 $sql .= 'CHANGE '.$col['name'].' '.$col['name_new'].' '.$this->mapType($col['type'],$col['typeValue']).' ';
             }elseif($col['action'] == 'drop') {
                 $sql .= 'DROP '.$col['name'].' ';
             }
-            if($col["action"] != 'drop') {  
-            if($col["defaultValue"] != "") $sql .= "DEFAULT '".$col["defaultValue"]."' ";
-            if($col["notNull"] == true) {
-                $sql .= "NOT NULL ";
+            if($col['action'] != 'drop') {  
+            if($col['defaultValue'] != '') $sql .= "DEFAULT '".$col['defaultValue']."' ";
+            if($col['notNull'] == true) {
+                $sql .= 'NOT NULL ';
             } else {
-                $sql .= "NULL ";
+                $sql .= 'NULL ';
             }
-            if($col["autoInc"] == true) $sql .= "auto_increment ";
-            $sql.= ",";
+            if($col['autoInc'] == true) $sql .= 'auto_increment ';
+            $sql.= ',';
             //* Index definitions
             if($col['option'] == 'primary') $index .= 'PRIMARY KEY ('.$col['name'].'),';
             if($col['option'] == 'index') $index .= 'INDEX ('.$col['name'].'),';
             if($col['option'] == 'unique') $index .= 'UNIQUE ('.$col['name'].'),';
             }
-        }
-        $sql .= $index;
-        $sql = substr($sql,0,-1);
-        //die($sql);
-        $this->query($sql);
-        return true;
+       }
+       $sql .= $index;
+       $sql = substr($sql,0,-1);
+       //die($sql);
+       $this->query($sql);
+       return true;
     }
        
     public function dropTable($table_name) 
@@ -483,7 +491,7 @@
        
     public function tableInfo($table_name) {
         //* Tabellenfelder einlesen ?
-        if($rows = $this->queryAllRecords("SHOW FIELDS FROM $table_name")){
+        if($rows = $this->queryAllRecords('SHOW FIELDS FROM '.$table_name)){
         foreach($rows as $row) {
             $name    = $row['Field'];
             $default = $row['Default'];
@@ -511,9 +519,9 @@
                 $tmp_typeValue = explode('(',$type);
                 $column['typeValue'] = substr($tmp_typeValue[1], 0, -1);  
             }
-            if(stristr($type, 'text'))   $metaType = 'text';
-            if(stristr($type, 'double')) $metaType = 'double';
-            if(stristr($type, 'blob'))   $metaType = 'blob';
+            if(stristr($type,'text'))   $metaType = 'text';
+            if(stristr($type,'double')) $metaType = 'double';
+            if(stristr($type,'blob'))   $metaType = 'blob';
             
             $column['type'] = $metaType;
             $columns[] = $column;
@@ -547,7 +555,7 @@
             return 'blob';
         }
     }
-	
+
 }
 
-?>
\ No newline at end of file
+?>

--
Gitblit v1.9.1