From a2da83be3c29008eaf8bae47dfefd297eeb46ca9 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Fri, 11 May 2012 06:27:27 -0400
Subject: [PATCH] Various improvements in list form file.
---
interface/lib/classes/db_mysql.inc.php | 151 ++++++++++++++++++++++++++++++-------------------
1 files changed, 92 insertions(+), 59 deletions(-)
diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index 3146a0f..7cee46e 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -1,7 +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,
@@ -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,9 +71,9 @@
}
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;
@@ -82,7 +85,7 @@
}
public function query($queryString)
- {
+ {
if(!$this->connect()){
return false;
}
@@ -101,7 +104,7 @@
/** Returns all records as an array */
public function queryAllRecords($queryString)
- {
+ {
if(!$this->query($queryString)){
return false;
}
@@ -114,7 +117,7 @@
/** Returns one row as an array */
public function queryOneRecord($queryString)
- {
+ {
if(!$this->query($queryString) || $this->numRows() == 0){
return false;
}
@@ -123,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;
@@ -146,7 +149,7 @@
/** Returns the last mySQL insert_id() */
public function insertID()
- {
+ {
return mysql_insert_id($this->linkId);
}
@@ -217,7 +220,7 @@
}
}
*/
-
+
public function diffrec($record_old, $record_new) {
$diffrec_full = array();
$diff_num = 0;
@@ -254,32 +257,37 @@
}
//** 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
- $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($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;
+ $username = $app->db->quote($_SESSION['s']['user']['username']);
+ $dbidx = $primary_field.':'.$primary_id;
if($action == 'INSERT') $action = 'i';
if($action == 'UPDATE') $action = 'u';
@@ -295,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);
@@ -305,13 +327,24 @@
}
//** 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'");
- $this->query("UPDATE $tablename SET $update_data 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;
}
@@ -327,8 +360,8 @@
return true;
}
-
-
+
+
public function closeConn()
{
@@ -338,7 +371,7 @@
return true;
} else { return false; }
}
-
+
public function freeResult($query)
{
if(mysql_free_result($query))
@@ -406,10 +439,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;
}
@@ -428,36 +461,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)
@@ -484,7 +517,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'];
@@ -512,9 +545,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;
@@ -548,7 +581,7 @@
return 'blob';
}
}
-
+
}
-?>
\ No newline at end of file
+?>
--
Gitblit v1.9.1