From 0aa4efbc0b79ba9ab8a66e8facfda8cb16b7c427 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Mon, 07 May 2012 11:01:19 -0400
Subject: [PATCH] Improved mysql db library.

---
 interface/lib/classes/db_mysql.inc.php |   60 +++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 43 insertions(+), 17 deletions(-)

diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index b249c95..7cee46e 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -1,6 +1,6 @@
 <?php
 /*
-Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+Copyright (c) 2007-2012, Till Brehm, projektfarm Gmbh, ISPConfig UG
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -257,29 +257,34 @@
 	}
 	
 	//** Function to fill the datalog with a full differential record.
-	public function datalogSave($db_table, $action, $primary_field, $primary_id, $record_old, $record_new) {
+	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.
+		//* 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
+		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;
 		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;
@@ -298,8 +303,22 @@
 	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);
@@ -311,14 +330,21 @@
 	public function datalogUpdate($tablename, $update_data, $index_field, $index_value, $force_update = false) {
 		global $app;
 		
-		if($force_update == true) {
-			$old_rec = array();
+		$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 {
-			$old_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
+			$update_data_str = $update_data;
 		}
-		$this->query("UPDATE $tablename SET $update_data WHERE $index_field = '$index_value'");
+		
+		$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;
 	}

--
Gitblit v1.9.1