From 7cd9971f543f12a5fb60b67631190712d0d9788e Mon Sep 17 00:00:00 2001 From: latham <latham@ispconfig3> Date: Thu, 05 May 2011 14:57:13 -0400 Subject: [PATCH] First upload of the email quota reporting. All parts are disabled at the moment. Please help update the language files. --- server/lib/classes/db_mysql.inc.php | 278 +++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 198 insertions(+), 80 deletions(-) diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php index f85cbb0..2c113b5 100644 --- a/server/lib/classes/db_mysql.inc.php +++ b/server/lib/classes/db_mysql.inc.php @@ -29,42 +29,46 @@ 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 $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 = 'utf8';// Database charset 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 $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 $errorMessage = ''; // last error message + var $errorLocation = '';// last error location + var $show_error_messages = true; // constructor function db() { global $conf; - $this->dbHost = $conf["db_host"]; - $this->dbName = $conf["db_database"]; - $this->dbUser = $conf["db_user"]; - $this->dbPass = $conf["db_password"]; + $this->dbHost = $conf['db_host']; + $this->dbName = $conf['db_database']; + $this->dbUser = $conf['db_user']; + $this->dbPass = $conf['db_password']; + $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(); } } @@ -72,12 +76,14 @@ { if($this->linkId == 0) { - $this->linkId = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass); + $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 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; } @@ -90,11 +96,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; @@ -132,7 +138,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; @@ -168,7 +174,7 @@ return addslashes($formfield); } - return mysql_real_escape_string($formfield); + return mysql_real_escape_string($formfield, $this->linkId); } // Check der variablen @@ -187,7 +193,8 @@ return $out; } - + /* + //* These functions are deprecated and will be removed. function insert($tablename,$form,$debug = 0) { if(is_array($form)){ @@ -222,7 +229,119 @@ 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; + } + + public function closeConn() { if($this->linkId) @@ -266,31 +385,30 @@ */ function createTable($table_name,$columns) { - $index = ""; + $index = ''; $sql = "CREATE TABLE $table_name ("; foreach($columns as $col){ - $sql .= $col["name"]." ".$this->mapType($col["type"],$col["typeValue"])." "; + $sql .= $col['name'].' '.$this->mapType($col['type'],$col['typeValue']).' '; - if($col["defaultValue"] != "") $sql .= "DEFAULT '".$col["defaultValue"]."' "; - if($col["notNull"] == true) { - $sql .= "NOT NULL "; + 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.= ','; // key Definitionen - 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"]."),"; + 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); - $sql .= ")"; - + $sql .= ')'; $this->query($sql); return true; - } + } /* $columns = array(action => add | alter | drop @@ -306,29 +424,29 @@ */ function alterTable($table_name,$columns) { - $index = ""; + $index = ''; $sql = "ALTER TABLE $table_name "; foreach($columns as $col){ - if($col["action"] == 'add') { - $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'] == 'add') { + $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.= ","; - // key Definitionen - 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"]."),"; + 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; @@ -345,7 +463,7 @@ return $this->query($sql); } - // gibt Array mit Tabellennamen zur�ck + // gibt Array mit Tabellennamen zur�ck function getTables($database_name = '') { if($database_name == '') $database_name = $this->dbName; @@ -356,7 +474,7 @@ return $tb_names; } - // gibt Feldinformationen zur Tabelle zur�ck + // gibt Feldinformationen zur Tabelle zur�ck /* $columns = array(action => add | alter | drop name => Spaltenname @@ -376,7 +494,7 @@ global $go_api,$go_info; // Tabellenfelder einlesen - if($rows = $go_api->db->queryAllRecords("SHOW FIELDS FROM ".$table_name)){ + if($rows = $go_api->db->queryAllRecords('SHOW FIELDS FROM '.$table_name)){ foreach($rows as $row) { $name = $row[0]; $default = $row[4]; @@ -388,38 +506,38 @@ $column = array(); - $column["name"] = $name; - //$column["type"] = $type; - $column["defaultValue"] = $default; - if(stristr($key,"PRI")) $column["option"] = "primary"; - if(stristr($isnull,"YES")) { - $column["notNull"] = false; + $column['name'] = $name; + //$column['type'] = $type; + $column['defaultValue'] = $default; + if(stristr($key,'PRI')) $column['option'] = 'primary'; + if(stristr($isnull,'YES')) { + $column['notNull'] = false; } else { - $column["notNull"] = true; + $column['notNull'] = true; } - if($extra == 'auto_increment') $column["autoInc"] = true; + if($extra == 'auto_increment') $column['autoInc'] = true; // Type in Metatype umsetzen - if(stristr($type,"int(")) $metaType = 'int32'; - if(stristr($type,"bigint")) $metaType = 'int64'; - if(stristr($type,"char")) { + if(stristr($type,'int(')) $metaType = 'int32'; + if(stristr($type,'bigint')) $metaType = 'int64'; + if(stristr($type,'char')) { $metaType = 'char'; $tmp_typeValue = explode('(',$type); - $column["typeValue"] = substr($tmp_typeValue[1],0,-1); + $column['typeValue'] = substr($tmp_typeValue[1],0,-1); } - if(stristr($type,"varchar")) { + if(stristr($type,'varchar')) { $metaType = 'varchar'; $tmp_typeValue = explode('(',$type); - $column["typeValue"] = substr($tmp_typeValue[1],0,-1); + $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; + $column['type'] = $metaType; $columns[] = $column; } @@ -478,7 +596,7 @@ return 'char'; break; case 'varchar': - if($typeValue < 1) die("Datenbank Fehler: F�r diesen Datentyp ist eine L�ngenangabe notwendig."); + if($typeValue < 1) die('Database failure: Lenght required for these data types.'); return 'varchar('.$typeValue.')'; break; case 'text': @@ -492,4 +610,4 @@ } -?> \ No newline at end of file +?> -- Gitblit v1.9.1