From 305df2203cc28a6333dd21d2fe6ce3582df38899 Mon Sep 17 00:00:00 2001 From: norahmollo Date: Wed, 17 Oct 2012 16:16:00 +0000 Subject: [PATCH] ODE STYLE Formating gulliver/system Change format files in gulliver/system --- gulliver/system/class.database_mysql.php | 1631 +++++++++++----------- gulliver/system/class.dbconnection.php | 573 ++++---- 2 files changed, 1124 insertions(+), 1080 deletions(-) diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index a2f015fa2..75fd83e8c 100755 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -1,623 +1,655 @@ -. - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * - */ - -/** - * @package gulliver.system -*/ - -G::LoadSystem('database_base'); - -class database extends database_base { - - public $iFetchType = MYSQL_ASSOC; - - /** - * class database constructor - * @param $sType adapter type - * @param $sServer server - * @param $sUser db user - * @param $sPass db user password - * @param $sDataBase Database name - */ - public function __construct($sType = DB_ADAPTER, $sServer = DB_HOST, $sUser = DB_USER, $sPass = DB_PASS, $sDataBase = DB_NAME) { - $this->sType = $sType; - $this->sServer = $sServer; - $this->sUser = $sUser; - $this->sPass = $sPass; - $this->sDataBase = $sDataBase; - $this->oConnection = @mysql_connect($sServer, $sUser, $sPass) || null; - $this->sQuoteCharacter = '`'; - $this->nullString = 'null'; - } - - /** - * generate the sql sentence to create a table - * @param $sTable table name - * @param $aColumns array of columns - * @return $sSql the sql sentence - */ - public function generateCreateTableSQL($sTable, $aColumns) { - $sKeys = ''; - $sSQL = 'CREATE TABLE IF NOT EXISTS ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . '('; - - foreach ($aColumns as $sColumnName => $aParameters) { - if ($sColumnName != 'INDEXES') { - - if ( $sColumnName != '' && isset($aParameters['Type']) && $aParameters['Type'] != '' ){ - $sSQL .= $this->sQuoteCharacter . $sColumnName . $this->sQuoteCharacter . ' ' . $aParameters['Type']; - - if ( isset($aParameters['Null']) && $aParameters['Null'] == 'YES') { - $sSQL .= ' NULL'; - } else { - $sSQL .= ' NOT NULL'; - } - if ( isset($aParameters['Key']) && $aParameters['Key'] == 'PRI') { - $sKeys .= $this->sQuoteCharacter . $sColumnName . $this->sQuoteCharacter . ','; - } - - if ( isset($aParameters['Default']) && $aParameters['Default'] != '' ) { - $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; - } - - $sSQL .= ','; - } - } - } - $sSQL = substr($sSQL, 0, -1); - if ($sKeys != '') { - $sSQL .= ',PRIMARY KEY(' . substr($sKeys, 0, -1) . ')'; - } - $sSQL .= ')' . $this->sEndLine; - - return $sSQL; - } - - /** - * generate a drop table sentence - * @param $sTable table name - * @return sql sentence string - */ - public function generateDropTableSQL($sTable) { - return 'DROP TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . $this->sEndLine; - } - - /** - * generate drop column sentence - * @param $sTable table name - * @param $sColumn column name - * @return $sSql sql sentence - */ - public function generateDropColumnSQL($sTable, $sColumn) { - $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . - ' DROP COLUMN ' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter . $this->sEndLine; - return $sSQL; - } - - /** - * generate an add column sentence - * @param $sTable table name - * @param $sColumn column name - * @param $aParameters parameters of field like typo or if it can be null - * @return $sSql sql sentence - */ - public function generateAddColumnSQL($sTable, $sColumn, $aParameters) { - if ( isset($aParameters['Type']) && isset($aParameters['Null']) ) { - $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . - ' ADD COLUMN ' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter . - ' ' . $aParameters['Type']; - if ($aParameters['Null'] == 'YES') { - $sSQL .= ' NULL'; - } - else { - $sSQL .= ' NOT NULL'; - } - } - /*if ($aParameters['Key'] == 'PRI') { +. + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + * + */ + +/** + * + * @package gulliver.system + * + */ + +G::LoadSystem( 'database_base' ); + +class database extends database_base +{ + + public $iFetchType = MYSQL_ASSOC; + + /** + * class database constructor + * + * @param $sType adapter type + * @param $sServer server + * @param $sUser db user + * @param $sPass db user password + * @param $sDataBase Database name + */ + public function __construct ($sType = DB_ADAPTER, $sServer = DB_HOST, $sUser = DB_USER, $sPass = DB_PASS, $sDataBase = DB_NAME) + { + $this->sType = $sType; + $this->sServer = $sServer; + $this->sUser = $sUser; + $this->sPass = $sPass; + $this->sDataBase = $sDataBase; + $this->oConnection = @mysql_connect( $sServer, $sUser, $sPass ) || null; + $this->sQuoteCharacter = '`'; + $this->nullString = 'null'; + } + + /** + * generate the sql sentence to create a table + * + * @param $sTable table name + * @param $aColumns array of columns + * @return $sSql the sql sentence + */ + public function generateCreateTableSQL ($sTable, $aColumns) + { + $sKeys = ''; + $sSQL = 'CREATE TABLE IF NOT EXISTS ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . '('; + + foreach ($aColumns as $sColumnName => $aParameters) { + if ($sColumnName != 'INDEXES') { + + if ($sColumnName != '' && isset( $aParameters['Type'] ) && $aParameters['Type'] != '') { + $sSQL .= $this->sQuoteCharacter . $sColumnName . $this->sQuoteCharacter . ' ' . $aParameters['Type']; + + if (isset( $aParameters['Null'] ) && $aParameters['Null'] == 'YES') { + $sSQL .= ' NULL'; + } else { + $sSQL .= ' NOT NULL'; + } + if (isset( $aParameters['Key'] ) && $aParameters['Key'] == 'PRI') { + $sKeys .= $this->sQuoteCharacter . $sColumnName . $this->sQuoteCharacter . ','; + } + + if (isset( $aParameters['Default'] ) && $aParameters['Default'] != '') { + $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; + } + + $sSQL .= ','; + } + } + } + $sSQL = substr( $sSQL, 0, - 1 ); + if ($sKeys != '') { + $sSQL .= ',PRIMARY KEY(' . substr( $sKeys, 0, - 1 ) . ')'; + } + $sSQL .= ')' . $this->sEndLine; + + return $sSQL; + } + + /** + * generate a drop table sentence + * + * @param $sTable table name + * @return sql sentence string + */ + public function generateDropTableSQL ($sTable) + { + return 'DROP TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . $this->sEndLine; + } + + /** + * generate drop column sentence + * + * @param $sTable table name + * @param $sColumn column name + * @return $sSql sql sentence + */ + public function generateDropColumnSQL ($sTable, $sColumn) + { + $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' DROP COLUMN ' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter . $this->sEndLine; + return $sSQL; + } + + /** + * generate an add column sentence + * + * @param $sTable table name + * @param $sColumn column name + * @param $aParameters parameters of field like typo or if it can be null + * @return $sSql sql sentence + */ + public function generateAddColumnSQL ($sTable, $sColumn, $aParameters) + { + if (isset( $aParameters['Type'] ) && isset( $aParameters['Null'] )) { + $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' ADD COLUMN ' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter . ' ' . $aParameters['Type']; + if ($aParameters['Null'] == 'YES') { + $sSQL .= ' NULL'; + } else { + $sSQL .= ' NOT NULL'; + } + } + /*if ($aParameters['Key'] == 'PRI') { $sKeys .= 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' ADD PRIMARY KEY (' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter . ')' . $this->sEndLine; - }*/ - if (isset($aParameters['AI'])) { - if ($aParameters['AI'] == 1) { - $sSQL .= ' AUTO_INCREMENT'; - } - else { - if ($aParameters['Default'] != '') { - $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; - } - } - } - else { - if (isset($aParameters['Default'])) { - $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; - } - } - $sSQL .= $this->sEndLine; - return $sSQL; - } - - /** - * generate a change column sentence - * @param $sTable table name - * @param $sColumn column name - * @param $aParameters parameters of field like typo or if it can be null - * @param $sColumnNewName column new name - * @return $sSql sql sentence - */ - public function generateChangeColumnSQL($sTable, $sColumn, $aParameters, $sColumnNewName = '') { - $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . - ' CHANGE COLUMN ' . $this->sQuoteCharacter . ($sColumnNewName != '' ? $sColumnNewName : $sColumn) . $this->sQuoteCharacter . - ' ' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter; - if (isset($aParameters['Type'])) { - $sSQL .= ' ' . $aParameters['Type']; - } - if (isset($aParameters['Null'])) { - if ($aParameters['Null'] == 'YES') { - $sSQL .= ' NULL'; - } - else { - $sSQL .= ' NOT NULL'; - } - } - //if (isset($aParameters['AI'])) { - // if ($aParameters['AI'] == 1) { - // $sSQL .= ' AUTO_INCREMENT'; - // } - // else { - // if (isset($aParameters['Default'])) { - // if ($aParameters['Default'] != '') { - // $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; - // } - // } - // } - //} - //else { - if (isset($aParameters['Default'])) { - if ( trim($aParameters['Default']) == '' && $aParameters['Type'] == 'datetime' ) { - //do nothing - } - else - $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; - //} - } - if (!isset($aParameters['Default']) && isset($aParameters['Null']) && $aParameters['Null'] == 'YES') { - $sSQL .= " DEFAULT NULL "; - } - //} - $sSQL .= $this->sEndLine; - return $sSQL; - } - - /** - * Generate and get the primary key in a sentence - * @param $sTable table name - * @return $sSql sql sentence - */ - public function generateGetPrimaryKeysSQL($sTable) { - try { - if ($sTable == '') { - throw new Exception('The table name cannot be empty!'); - } - return 'SHOW INDEX FROM ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' WHERE Seq_in_index = 1' . $this->sEndLine; - } - catch (Exception $oException) { - throw $oException; - } - } - - /** - * generate a sentence to drop the primary key - * @param $sTable table name - * @return sql sentence - */ - public function generateDropPrimaryKeysSQL($sTable) { - try { - if ($sTable == '') { - throw new Exception('The table name cannot be empty!'); - } - return 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' DROP PRIMARY KEY' . $this->sEndLine; - } - catch (Exception $oException) { - throw $oException; - } - } - - /** - * generate a sentence to add multiple primary keys - * @param $sTable table name - * @param $aPrimaryKeys array of primary keys - * @return sql sentence - */ - public function generateAddPrimaryKeysSQL($sTable, $aPrimaryKeys) { - try { - if ($sTable == '') { - throw new Exception('The table name cannot be empty!'); - } - $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . - ' ADD PRIMARY KEY ('; - foreach ($aPrimaryKeys as $sKey) { - $sSQL .= $this->sQuoteCharacter . $sKey . $this->sQuoteCharacter . ','; - } - $sSQL = substr($sSQL, 0, -1) . ')' . $this->sEndLine; - return $sSQL; - } - catch (Exception $oException) { - throw $oException; - } - } - - /** - * generate a sentence to drop an index - * @param $sTable table name - * @param $sIndexName index name - * @return sql sentence - */ - public function generateDropKeySQL($sTable, $sIndexName) { - try { - if ($sTable == '') { - throw new Exception('The table name cannot be empty!'); - } - if ($sIndexName == '') { - throw new Exception('The column name cannot be empty!'); - } - return 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' DROP INDEX ' . $this->sQuoteCharacter . $sIndexName . $this->sQuoteCharacter . $this->sEndLine; - } - catch (Exception $oException) { - throw $oException; - } - } - - /** - * generate a sentence to add indexes or primary keys - * @param $sTable table name - * @param $indexName index name - * @param $aKeys array of keys - * @return sql sentence - */ - - public function generateAddKeysSQL($sTable, $indexName, $aKeys) { - try { - $indexType = 'INDEX'; - if ( $indexName == 'primaryKey' || $indexName == 'PRIMARY' ) { - $indexType = 'PRIMARY'; - $indexName = 'KEY'; - } - $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' ADD ' . $indexType . ' ' . $indexName . ' ('; - foreach ($aKeys as $sKey) { - $sSQL .= $this->sQuoteCharacter . $sKey . $this->sQuoteCharacter . ', '; - } - $sSQL = substr($sSQL, 0, -2); - $sSQL .= ')' . $this->sEndLine; - return $sSQL; - } - catch (Exception $oException) { - throw $oException; - } - } - - /** - * generate a sentence to show the tables - * @return sql sentence - */ - public function generateShowTablesSQL() { - return 'SHOW TABLES' . $this->sEndLine; - } - - /** - * generate a sentence to show the tables with a like sentence - * @return sql sentence - */ - public function generateShowTablesLikeSQL($sTable) { - return "SHOW TABLES LIKE '" . $sTable . "'" . $this->sEndLine; - } - - /** - * generate a sentence to show the tables with a like sentence - * @param $sTable table name - * @return sql sentence - */ - public function generateDescTableSQL($sTable) { - try { - if ($sTable == '') { - throw new Exception('The table name cannot be empty!'); - } - return 'DESC ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . $this->sEndLine; - } - catch (Exception $oException) { - throw $oException; - } - } - - /** - * generate a sentence to show some table indexes - * @param $sTable table name - * @return sql sentence - */ - public function generateTableIndexSQL($sTable) { - return 'SHOW INDEX FROM ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . " " . $this->sEndLine; - //return 'SHOW INDEX FROM ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . " WHERE Key_name <> 'PRIMARY'" . $this->sEndLine; - } - - /** - * execute a sentence to check if there is connection - * @return void - */ - public function isConnected() { - if ( !$this->oConnection ) - return false; - return $this->executeQuery( 'USE ' . $this->sDataBase ); - } - - /** - * generate a sentence to show the tables with a like sentence - * @param $sQuery sql query string - * @return void - */ - public function logQuery($sQuery ) { - try { - $found = false; - if ( substr($sQuery,0, 6) == 'SELECT' ) $found = true; - if ( substr($sQuery,0, 4) == 'SHOW' ) $found = true; - if ( substr($sQuery,0, 4) == 'DESC' ) $found = true; - if ( substr($sQuery,0, 4) == 'USE ' ) $found = true; - if ( ! $found ) { - $logDir = PATH_DATA . 'log'; - if (!file_exists($logDir)) - if (!mkdir($logDir)) - return; - $logFile = "$logDir/query.log"; - $fp = fopen ( $logFile, 'a+' ); - if ($fp !== false) { - fwrite ( $fp, date("Y-m-d H:i:s") . " " . $this->sDataBase . " " . $sQuery . "\n" ); - fclose ( $fp ); - } - } - } - catch (Exception $oException) { - } - } - - /** - * execute a sql query - * @param $sQuery table name - * @return void - */ - public function executeQuery($sQuery) { - $this->logQuery( $sQuery); - - try { - if ($this->oConnection) { - @mysql_select_db($this->sDataBase); - - return @mysql_query($sQuery); - } - else { - throw new Exception('invalid connection to database ' . $this->sDataBase ); - } - } - catch (Exception $oException) { - $this->logQuery( $oException->getMessage() ); - throw $oException; - } - } - - /** - * count the rows of a dataset - * @param $oDataset - * @return the number of rows - */ - public function countResults($oDataset) { - return @mysql_num_rows($oDataset); - } - - /** - * count an array of the registry from a dataset - * @param $oDataset - * @return the registry - */ - public function getRegistry($oDataset) { - return @mysql_fetch_array($oDataset, $this->iFetchType); - } - - /** - * close the current connection - * @return void - */ - public function close() { - @mysql_close($this->oConnection); - } - - public function generateInsertSQL($table, $data) { - $fields = array(); - $values = array(); - foreach ($data as $field) { - $fields[] = $field['field']; - if (!is_null($field['value'])) { - switch ($field['type']) { - case 'text': - case 'date': - $values[] = "'" . mysql_real_escape_string($field['value']) . "'"; - break; - case 'int': - default: - $values[] = mysql_real_escape_string($field['value']); - break; - } - } - else { - $values[] = $this->nullString; - } - } - $fields = array_map(array($this, 'putQuotes'), $fields); - $sql = sprintf("INSERT INTO %s (%s) VALUES (%s)", $this->putQuotes($table), implode(', ', $fields), implode(', ', $values)); - return $sql; - } - - public function generateUpdateSQL($table, $keys, $data) { - $fields = array(); - $where = array(); - foreach ($data as $field) { - if (!is_null($field['value'])) { - switch ($field['type']) { - case 'text': - case 'date': - $fields[] = $this->putQuotes($field['field']) . " = '" . mysql_real_escape_string($field['value']) . "'"; - break; - case 'int': - default: - $fields[] = $this->putQuotes($field['field']) . " = " . mysql_real_escape_string($field['value']); - break; - } - } - else { - $values[] = $this->nullString; - } - if (in_array($field['field'], $keys)) { - $where[] = $fields[count($fields) - 1]; - } - } - $sql = sprintf("UPDATE %s SET %s WHERE %s", $this->putQuotes($table), implode(', ', $fields), implode(', ', $where)); - return $sql; - } - - public function generateDeleteSQL($table, $keys, $data) { - $fields = array(); - $where = array(); - foreach ($data as $field) { - if (in_array($field['field'], $keys)) { - if (!is_null($field['value'])) { - switch ($field['type']) { - case 'text': - case 'date': - $where[] = $this->putQuotes($field['field']) . " = '" . mysql_real_escape_string($field['value']) . "'"; - break; - case 'int': - default: - $where[] = $this->putQuotes($field['field']) . " = " . mysql_real_escape_string($field['value']); - break; - } - } - else { - $values[] = $this->nullString; - } - } - } - $sql = sprintf("DELETE FROM %s WHERE %s", $this->putQuotes($table), implode(', ', $where)); - return $sql; - } - - public function generateSelectSQL($table, $keys, $data) { - $fields = array(); - $where = array(); - foreach ($data as $field) { - if (in_array($field['field'], $keys)) { - if (!is_null($field['value'])) { - switch ($field['type']) { - case 'text': - case 'date': - $where[] = $this->putQuotes($field['field']) . " = '" . mysql_real_escape_string($field['value']) . "'"; - break; - case 'int': - default: - $where[] = $this->putQuotes($field['field']) . " = " . mysql_real_escape_string($field['value']); - break; - } - } - else { - $values[] = $this->nullString; - } - } - } - $sql = sprintf("SELECT * FROM %s WHERE %s", $this->putQuotes($table), implode(', ', $where)); - return $sql; - } - - private function putQuotes($element) { - return $this->sQuoteCharacter . $element . $this->sQuoteCharacter; - } - - /*=================================================================================================*/ - /** - * concatString - * Generates a string equivalent to the chosen database. - * - * author Hector Cortez - * date 2010-08-04 - * - * @return string $sConcat - */ - function concatString() - { - $nums = func_num_args(); - $vars = func_get_args(); - - $sConcat = " CONCAT("; - for($i = 0;$i < $nums; $i++) { - if(isset($vars[$i])) { - $sConcat .= $vars[$i]; - if(($i+1) < $nums) - $sConcat .= ", "; - } - } - $sConcat .= ")"; - - return $sConcat; - - } - - /* + }*/ + if (isset( $aParameters['AI'] )) { + if ($aParameters['AI'] == 1) { + $sSQL .= ' AUTO_INCREMENT'; + } else { + if ($aParameters['Default'] != '') { + $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; + } + } + } else { + if (isset( $aParameters['Default'] )) { + $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; + } + } + $sSQL .= $this->sEndLine; + return $sSQL; + } + + /** + * generate a change column sentence + * + * @param $sTable table name + * @param $sColumn column name + * @param $aParameters parameters of field like typo or if it can be null + * @param $sColumnNewName column new name + * @return $sSql sql sentence + */ + public function generateChangeColumnSQL ($sTable, $sColumn, $aParameters, $sColumnNewName = '') + { + $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' CHANGE COLUMN ' . $this->sQuoteCharacter . ($sColumnNewName != '' ? $sColumnNewName : $sColumn) . $this->sQuoteCharacter . ' ' . $this->sQuoteCharacter . $sColumn . $this->sQuoteCharacter; + if (isset( $aParameters['Type'] )) { + $sSQL .= ' ' . $aParameters['Type']; + } + if (isset( $aParameters['Null'] )) { + if ($aParameters['Null'] == 'YES') { + $sSQL .= ' NULL'; + } else { + $sSQL .= ' NOT NULL'; + } + } + //if (isset($aParameters['AI'])) { + // if ($aParameters['AI'] == 1) { + // $sSQL .= ' AUTO_INCREMENT'; + // } + // else { + // if (isset($aParameters['Default'])) { + // if ($aParameters['Default'] != '') { + // $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; + // } + // } + // } + //} + //else { + if (isset( $aParameters['Default'] )) { + if (trim( $aParameters['Default'] ) == '' && $aParameters['Type'] == 'datetime') { + //do nothing + } else + $sSQL .= " DEFAULT '" . $aParameters['Default'] . "'"; + //} + } + if (! isset( $aParameters['Default'] ) && isset( $aParameters['Null'] ) && $aParameters['Null'] == 'YES') { + $sSQL .= " DEFAULT NULL "; + } + //} + $sSQL .= $this->sEndLine; + return $sSQL; + } + + /** + * Generate and get the primary key in a sentence + * + * @param $sTable table name + * @return $sSql sql sentence + */ + public function generateGetPrimaryKeysSQL ($sTable) + { + try { + if ($sTable == '') { + throw new Exception( 'The table name cannot be empty!' ); + } + return 'SHOW INDEX FROM ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' WHERE Seq_in_index = 1' . $this->sEndLine; + } catch (Exception $oException) { + throw $oException; + } + } + + /** + * generate a sentence to drop the primary key + * + * @param $sTable table name + * @return sql sentence + */ + public function generateDropPrimaryKeysSQL ($sTable) + { + try { + if ($sTable == '') { + throw new Exception( 'The table name cannot be empty!' ); + } + return 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' DROP PRIMARY KEY' . $this->sEndLine; + } catch (Exception $oException) { + throw $oException; + } + } + + /** + * generate a sentence to add multiple primary keys + * + * @param $sTable table name + * @param $aPrimaryKeys array of primary keys + * @return sql sentence + */ + public function generateAddPrimaryKeysSQL ($sTable, $aPrimaryKeys) + { + try { + if ($sTable == '') { + throw new Exception( 'The table name cannot be empty!' ); + } + $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' ADD PRIMARY KEY ('; + foreach ($aPrimaryKeys as $sKey) { + $sSQL .= $this->sQuoteCharacter . $sKey . $this->sQuoteCharacter . ','; + } + $sSQL = substr( $sSQL, 0, - 1 ) . ')' . $this->sEndLine; + return $sSQL; + } catch (Exception $oException) { + throw $oException; + } + } + + /** + * generate a sentence to drop an index + * + * @param $sTable table name + * @param $sIndexName index name + * @return sql sentence + */ + public function generateDropKeySQL ($sTable, $sIndexName) + { + try { + if ($sTable == '') { + throw new Exception( 'The table name cannot be empty!' ); + } + if ($sIndexName == '') { + throw new Exception( 'The column name cannot be empty!' ); + } + return 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' DROP INDEX ' . $this->sQuoteCharacter . $sIndexName . $this->sQuoteCharacter . $this->sEndLine; + } catch (Exception $oException) { + throw $oException; + } + } + + /** + * generate a sentence to add indexes or primary keys + * + * @param $sTable table name + * @param $indexName index name + * @param $aKeys array of keys + * @return sql sentence + */ + + public function generateAddKeysSQL ($sTable, $indexName, $aKeys) + { + try { + $indexType = 'INDEX'; + if ($indexName == 'primaryKey' || $indexName == 'PRIMARY') { + $indexType = 'PRIMARY'; + $indexName = 'KEY'; + } + $sSQL = 'ALTER TABLE ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . ' ADD ' . $indexType . ' ' . $indexName . ' ('; + foreach ($aKeys as $sKey) { + $sSQL .= $this->sQuoteCharacter . $sKey . $this->sQuoteCharacter . ', '; + } + $sSQL = substr( $sSQL, 0, - 2 ); + $sSQL .= ')' . $this->sEndLine; + return $sSQL; + } catch (Exception $oException) { + throw $oException; + } + } + + /** + * generate a sentence to show the tables + * + * @return sql sentence + */ + public function generateShowTablesSQL () + { + return 'SHOW TABLES' . $this->sEndLine; + } + + /** + * generate a sentence to show the tables with a like sentence + * + * @return sql sentence + */ + public function generateShowTablesLikeSQL ($sTable) + { + return "SHOW TABLES LIKE '" . $sTable . "'" . $this->sEndLine; + } + + /** + * generate a sentence to show the tables with a like sentence + * + * @param $sTable table name + * @return sql sentence + */ + public function generateDescTableSQL ($sTable) + { + try { + if ($sTable == '') { + throw new Exception( 'The table name cannot be empty!' ); + } + return 'DESC ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . $this->sEndLine; + } catch (Exception $oException) { + throw $oException; + } + } + + /** + * generate a sentence to show some table indexes + * + * @param $sTable table name + * @return sql sentence + */ + public function generateTableIndexSQL ($sTable) + { + return 'SHOW INDEX FROM ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . " " . $this->sEndLine; + //return 'SHOW INDEX FROM ' . $this->sQuoteCharacter . $sTable . $this->sQuoteCharacter . " WHERE Key_name <> 'PRIMARY'" . $this->sEndLine; + } + + /** + * execute a sentence to check if there is connection + * + * @return void + */ + public function isConnected () + { + if (! $this->oConnection) + return false; + return $this->executeQuery( 'USE ' . $this->sDataBase ); + } + + /** + * generate a sentence to show the tables with a like sentence + * + * @param $sQuery sql query string + * @return void + */ + public function logQuery ($sQuery) + { + try { + $found = false; + if (substr( $sQuery, 0, 6 ) == 'SELECT') + $found = true; + if (substr( $sQuery, 0, 4 ) == 'SHOW') + $found = true; + if (substr( $sQuery, 0, 4 ) == 'DESC') + $found = true; + if (substr( $sQuery, 0, 4 ) == 'USE ') + $found = true; + if (! $found) { + $logDir = PATH_DATA . 'log'; + if (! file_exists( $logDir )) + if (! mkdir( $logDir )) + return; + $logFile = "$logDir/query.log"; + $fp = fopen( $logFile, 'a+' ); + if ($fp !== false) { + fwrite( $fp, date( "Y-m-d H:i:s" ) . " " . $this->sDataBase . " " . $sQuery . "\n" ); + fclose( $fp ); + } + } + } catch (Exception $oException) { + } + } + + /** + * execute a sql query + * + * @param $sQuery table name + * @return void + */ + public function executeQuery ($sQuery) + { + $this->logQuery( $sQuery ); + + try { + if ($this->oConnection) { + @mysql_select_db( $this->sDataBase ); + + return @mysql_query( $sQuery ); + } else { + throw new Exception( 'invalid connection to database ' . $this->sDataBase ); + } + } catch (Exception $oException) { + $this->logQuery( $oException->getMessage() ); + throw $oException; + } + } + + /** + * count the rows of a dataset + * + * @param $oDataset + * @return the number of rows + */ + public function countResults ($oDataset) + { + return @mysql_num_rows( $oDataset ); + } + + /** + * count an array of the registry from a dataset + * + * @param $oDataset + * @return the registry + */ + public function getRegistry ($oDataset) + { + return @mysql_fetch_array( $oDataset, $this->iFetchType ); + } + + /** + * close the current connection + * + * @return void + */ + public function close () + { + @mysql_close( $this->oConnection ); + } + + public function generateInsertSQL ($table, $data) + { + $fields = array (); + $values = array (); + foreach ($data as $field) { + $fields[] = $field['field']; + if (! is_null( $field['value'] )) { + switch ($field['type']) { + case 'text': + case 'date': + $values[] = "'" . mysql_real_escape_string( $field['value'] ) . "'"; + break; + case 'int': + default: + $values[] = mysql_real_escape_string( $field['value'] ); + break; + } + } else { + $values[] = $this->nullString; + } + } + $fields = array_map( array ($this,'putQuotes' + ), $fields ); + $sql = sprintf( "INSERT INTO %s (%s) VALUES (%s)", $this->putQuotes( $table ), implode( ', ', $fields ), implode( ', ', $values ) ); + return $sql; + } + + public function generateUpdateSQL ($table, $keys, $data) + { + $fields = array (); + $where = array (); + foreach ($data as $field) { + if (! is_null( $field['value'] )) { + switch ($field['type']) { + case 'text': + case 'date': + $fields[] = $this->putQuotes( $field['field'] ) . " = '" . mysql_real_escape_string( $field['value'] ) . "'"; + break; + case 'int': + default: + $fields[] = $this->putQuotes( $field['field'] ) . " = " . mysql_real_escape_string( $field['value'] ); + break; + } + } else { + $values[] = $this->nullString; + } + if (in_array( $field['field'], $keys )) { + $where[] = $fields[count( $fields ) - 1]; + } + } + $sql = sprintf( "UPDATE %s SET %s WHERE %s", $this->putQuotes( $table ), implode( ', ', $fields ), implode( ', ', $where ) ); + return $sql; + } + + public function generateDeleteSQL ($table, $keys, $data) + { + $fields = array (); + $where = array (); + foreach ($data as $field) { + if (in_array( $field['field'], $keys )) { + if (! is_null( $field['value'] )) { + switch ($field['type']) { + case 'text': + case 'date': + $where[] = $this->putQuotes( $field['field'] ) . " = '" . mysql_real_escape_string( $field['value'] ) . "'"; + break; + case 'int': + default: + $where[] = $this->putQuotes( $field['field'] ) . " = " . mysql_real_escape_string( $field['value'] ); + break; + } + } else { + $values[] = $this->nullString; + } + } + } + $sql = sprintf( "DELETE FROM %s WHERE %s", $this->putQuotes( $table ), implode( ', ', $where ) ); + return $sql; + } + + public function generateSelectSQL ($table, $keys, $data) + { + $fields = array (); + $where = array (); + foreach ($data as $field) { + if (in_array( $field['field'], $keys )) { + if (! is_null( $field['value'] )) { + switch ($field['type']) { + case 'text': + case 'date': + $where[] = $this->putQuotes( $field['field'] ) . " = '" . mysql_real_escape_string( $field['value'] ) . "'"; + break; + case 'int': + default: + $where[] = $this->putQuotes( $field['field'] ) . " = " . mysql_real_escape_string( $field['value'] ); + break; + } + } else { + $values[] = $this->nullString; + } + } + } + $sql = sprintf( "SELECT * FROM %s WHERE %s", $this->putQuotes( $table ), implode( ', ', $where ) ); + return $sql; + } + + private function putQuotes ($element) + { + return $this->sQuoteCharacter . $element . $this->sQuoteCharacter; + } + + /*=================================================================================================*/ + /** + * concatString + * Generates a string equivalent to the chosen database. + * + * author Hector Cortez + * date 2010-08-04 + * + * @return string $sConcat + */ + function concatString () + { + $nums = func_num_args(); + $vars = func_get_args(); + + $sConcat = " CONCAT("; + for ($i = 0; $i < $nums; $i ++) { + if (isset( $vars[$i] )) { + $sConcat .= $vars[$i]; + if (($i + 1) < $nums) + $sConcat .= ", "; + } + } + $sConcat .= ")"; + + return $sConcat; + + } + + /* * query functions for class class.case.php * - */ - /** - * concatString - * Generates a string equivalent to the case when - * - * author Hector Cortez - * date 2010-08-04 - * - * @return string $sCompare - */ - function getCaseWhen($compareValue, $trueResult, $falseResult) - { - $sCompare = "IF(" . $compareValue . ", " . $trueResult . ", " . $falseResult . ") "; - return $sCompare; - - } - - /** - * Generates a string equivalent to create table ObjectPermission - * - * class.case.php - * function verifyTable() - * - * @return string $sql - */ - function createTableObjectPermission() - { - $sql = "CREATE TABLE IF NOT EXISTS `OBJECT_PERMISSION` ( + */ + /** + * concatString + * Generates a string equivalent to the case when + * + * author Hector Cortez + * date 2010-08-04 + * + * @return string $sCompare + */ + function getCaseWhen ($compareValue, $trueResult, $falseResult) + { + $sCompare = "IF(" . $compareValue . ", " . $trueResult . ", " . $falseResult . ") "; + return $sCompare; + + } + + /** + * Generates a string equivalent to create table ObjectPermission + * + * class.case.php + * function verifyTable() + * + * @return string $sql + */ + function createTableObjectPermission () + { + $sql = "CREATE TABLE IF NOT EXISTS `OBJECT_PERMISSION` ( `OP_UID` varchar(32) NOT NULL, `PRO_UID` varchar(32) NOT NULL, `TAS_UID` varchar(32) NOT NULL, @@ -629,30 +661,29 @@ class database extends database_base { `OP_OBJ_UID` varchar(32) NOT NULL, `OP_ACTION` varchar(10) NOT NULL default 'VIEW', KEY `PRO_UID` (`PRO_UID`,`TAS_UID`,`USR_UID`,`OP_TASK_SOURCE`,`OP_OBJ_UID`) - )ENGINE=MyISAM DEFAULT CHARSET=latin1;"; - return $sql; - } - - /* + )ENGINE=MyISAM DEFAULT CHARSET=latin1;"; + return $sql; + } + + /* * query functions for class class.report.php * - */ - /** - * Generates a string query - * - * class.report.php - * function generatedReport4() - * - * @return string $sql - */ - function getSelectReport4() - { - - $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; - $sqlGroupBy = " USER "; - - $sql = "SELECT " . $sqlConcat . ", " . - " COUNT(*) AS CANTCASES, + */ + /** + * Generates a string query + * + * class.report.php + * function generatedReport4() + * + * @return string $sql + */ + function getSelectReport4 () + { + + $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; + $sqlGroupBy = " USER "; + + $sql = "SELECT " . $sqlConcat . ", " . " COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, @@ -661,27 +692,26 @@ class database extends database_base { LEFT JOIN APP_DELEGATION AS AD ON(A.APP_UID = AD.APP_UID AND AD.DEL_INDEX=1) LEFT JOIN USERS AS U ON(U.USR_UID = A.APP_INIT_USER) WHERE A.APP_UID<>'' - GROUP BY " . $sqlGroupBy; - - return $sql; - - } - - /** - * Generates a string query - * - * class.report.php - * function generatedReport4_filter() - * - * @return string $sql - */ - function getSelectReport4Filter($var) - { - $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; - $sqlGroupBy = " USER "; - - $sql = " SELECT " . $sqlConcat . ", " . - " COUNT(*) AS CANTCASES, + GROUP BY " . $sqlGroupBy; + + return $sql; + + } + + /** + * Generates a string query + * + * class.report.php + * function generatedReport4_filter() + * + * @return string $sql + */ + function getSelectReport4Filter ($var) + { + $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; + $sqlGroupBy = " USER "; + + $sql = " SELECT " . $sqlConcat . ", " . " COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, @@ -689,28 +719,27 @@ class database extends database_base { FROM APPLICATION AS A LEFT JOIN APP_DELEGATION AS AD ON(A.APP_UID = AD.APP_UID AND AD.DEL_INDEX=1) LEFT JOIN USERS AS U ON(U.USR_UID = A.APP_INIT_USER) - ".$var." - GROUP BY " . $sqlGroupBy; - - return $sql; - - } - - /** - * Generates a string query - * - * class.report.php - * function generatedReport5() - * - * @return string $sql - */ - function getSelectReport5() - { - $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; - $sqlGroupBy = " USER "; - - $sql = " SELECT " . $sqlConcat . ", " . - " COUNT(*) AS CANTCASES, + " . $var . " + GROUP BY " . $sqlGroupBy; + + return $sql; + + } + + /** + * Generates a string query + * + * class.report.php + * function generatedReport5() + * + * @return string $sql + */ + function getSelectReport5 () + { + $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; + $sqlGroupBy = " USER "; + + $sql = " SELECT " . $sqlConcat . ", " . " COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, @@ -719,28 +748,27 @@ class database extends database_base { LEFT JOIN PROCESS AS P ON (P.PRO_UID = AD.PRO_UID) LEFT JOIN USERS AS U ON(U.USR_UID = AD.USR_UID) WHERE AD.APP_UID<>'' AND AD.DEL_FINISH_DATE IS NULL - GROUP BY " . $sqlGroupBy; - - return $sql; - - } - - /** - * Generates a string query - * - * class.report.php - * function generatedReport5_filter() - * - * @return string $sql - */ - function getSelectReport5Filter($var) - { - - $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; - $sqlGroupBy = " USER "; - - $sql = "SELECT " . $sqlConcat . ", " . - " COUNT(*) AS CANTCASES, + GROUP BY " . $sqlGroupBy; + + return $sql; + + } + + /** + * Generates a string query + * + * class.report.php + * function generatedReport5_filter() + * + * @return string $sql + */ + function getSelectReport5Filter ($var) + { + + $sqlConcat = " CONCAT(U.USR_LASTNAME,' ',USR_FIRSTNAME) AS USER "; + $sqlGroupBy = " USER "; + + $sql = "SELECT " . $sqlConcat . ", " . " COUNT(*) AS CANTCASES, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, @@ -748,107 +776,106 @@ class database extends database_base { FROM APP_DELEGATION AS AD LEFT JOIN PROCESS AS P ON (P.PRO_UID = AD.PRO_UID) LEFT JOIN USERS AS U ON(U.USR_UID = AD.USR_UID) - ".$var." - GROUP BY " . $sqlGroupBy; - - return $sql; - } - - /* + " . $var . " + GROUP BY " . $sqlGroupBy; + + return $sql; + } + + /* * query functions for class class.net.php * - */ - function getServerVersion($driver, $dbIP, $dbPort, $dbUser, $dbPasswd, $dbSourcename) - { - - if($link = @mysql_connect($dbIP, $dbUser, $dbPasswd)){ - $v = @mysql_get_server_info(); - } else { - throw new Exception(@mysql_error($link)); - } - return (isset($v))?$v:'none'; - - } - - + */ + function getServerVersion ($driver, $dbIP, $dbPort, $dbUser, $dbPasswd, $dbSourcename) + { + + if ($link = @mysql_connect( $dbIP, $dbUser, $dbPasswd )) { + $v = @mysql_get_server_info(); + } else { + throw new Exception( @mysql_error( $link ) ); + } + return (isset( $v )) ? $v : 'none'; + + } + /* * query functions for class class.net.php, class.reportTables.php * - */ - function getDropTable($sTableName) - { - $sql = 'DROP TABLE IF EXISTS `' . $sTableName . '`'; - return $sql; - } - - - function getTableDescription($sTableName) - { - $sql = "DESC ".$sTableName; - return $sql; - } - - function getFieldNull() - { - $fieldName = "Null"; - return $fieldName; - } - - function getValidate($validate) - { - $oValidate = $validate; - return $oValidate; - } - - /** - * Determines whether a table exists - * It is part of class.reportTables.php - */ - function reportTableExist() - { - $bExists = true; - $oConnection = mysql_connect(DB_HOST, DB_USER, DB_PASS); - mysql_select_db(DB_NAME); - $oDataset = mysql_query('SELECT COUNT(*) FROM REPORT_TABLE') || ($bExists = false); - - return $bExists; - } - - /** - * It is part of class.pagedTable.php - */ - function getLimitRenderTable($nCurrentPage, $nRowsPerPage) - { - $sql = ' LIMIT '.(($nCurrentPage-1)*$nRowsPerPage).', '.$nRowsPerPage; - return $sql; - } - - /** - * Determining the existence of a table - */ - function tableExists($tableName, $database) - { - @mysql_select_db($database); - $tables = array(); - $tablesResult = mysql_query("SHOW TABLES FROM $database;"); - while ($row = @mysql_fetch_row($tablesResult)) $tables[] = $row[0]; - if(in_array($tableName, $tables)) { - return TRUE; - } - return FALSE; - } - -/* - * Determining the existence of a table (Depricated) - */ -// function tableExists ($table, $db) { -// $tables = mysql_list_tables ($db); -// while (list ($temp) = @mysql_fetch_array ($tables)) { -// if ($temp == $table) { -// return TRUE; -// } -// } -// return FALSE; -// } - -} \ No newline at end of file + */ + function getDropTable ($sTableName) + { + $sql = 'DROP TABLE IF EXISTS `' . $sTableName . '`'; + return $sql; + } + + function getTableDescription ($sTableName) + { + $sql = "DESC " . $sTableName; + return $sql; + } + + function getFieldNull () + { + $fieldName = "Null"; + return $fieldName; + } + + function getValidate ($validate) + { + $oValidate = $validate; + return $oValidate; + } + + /** + * Determines whether a table exists + * It is part of class.reportTables.php + */ + function reportTableExist () + { + $bExists = true; + $oConnection = mysql_connect( DB_HOST, DB_USER, DB_PASS ); + mysql_select_db( DB_NAME ); + $oDataset = mysql_query( 'SELECT COUNT(*) FROM REPORT_TABLE' ) || ($bExists = false); + + return $bExists; + } + + /** + * It is part of class.pagedTable.php + */ + function getLimitRenderTable ($nCurrentPage, $nRowsPerPage) + { + $sql = ' LIMIT ' . (($nCurrentPage - 1) * $nRowsPerPage) . ', ' . $nRowsPerPage; + return $sql; + } + + /** + * Determining the existence of a table + */ + function tableExists ($tableName, $database) + { + @mysql_select_db( $database ); + $tables = array (); + $tablesResult = mysql_query( "SHOW TABLES FROM $database;" ); + while ($row = @mysql_fetch_row( $tablesResult )) + $tables[] = $row[0]; + if (in_array( $tableName, $tables )) { + return TRUE; + } + return FALSE; + } + + /* + * Determining the existence of a table (Depricated) + */ + // function tableExists ($table, $db) { + // $tables = mysql_list_tables ($db); + // while (list ($temp) = @mysql_fetch_array ($tables)) { + // if ($temp == $table) { + // return TRUE; + // } + // } + // return FALSE; + // } +} + diff --git a/gulliver/system/class.dbconnection.php b/gulliver/system/class.dbconnection.php index 1875108f0..50b374f93 100755 --- a/gulliver/system/class.dbconnection.php +++ b/gulliver/system/class.dbconnection.php @@ -1,278 +1,295 @@ -. - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * - */ - -/** - * @package gulliver.system -*/ - -require_once ("DB.php"); - -define ( 'DB_ERROR_NO_SHOW_AND_CONTINUE', 0); -define ( 'DB_ERROR_SHOW_AND_STOP', 1); -define ( 'DB_ERROR_SHOW_AND_CONTINUE', 2); -define ( 'DB_ERROR_SHOWALL_AND_STOP', 3); -define ( 'DB_ERROR_SHOWALL_AND_CONTINUE', 4); - - /** - * DBConnection class definition - * It is useful to stablish a connection - * @package gulliver.system - * @author Fernando Ontiveros Lira - * @copyright (C) 2002 by Colosa Development Team. - */ -class DBConnection -{ - var $db; - var $db_error; - var $errorLevel; - var $type; - -/***************************************************************** -/* Error types: -/* -1 Fatal error ( clase no instanced ) -/* -2 Syntax error ( session missing, query malformed, etc ) -/* -3 warning ( when the engine build a dangerous query, i.e delete without where clause ) -/* -/* Error level: -/* 0 don't display any error information and continue. -/* 1 display small box with error information and die. -/* 2 display small box with error information and continue -/* 3 display complete error information and die. -/* 4 display complete error information and continue. -/* -/* Error Structure -/* int error code -/* string error message -/* string error detailed message -/* -/* In all cases, the error will be saved in the apache log file -/* -/* */ - - /** - * Starts DB connection with default values - * @author Fernando Ontiveros Lira - * @access public - * @param const $strServer Host Name - * @param const $strUser User Name - * @param const $strPwd Password - * @param const $strDB Database Name - * @param string $type Connection Type - * @param integer $strPort Used Port - * @param string $errorLevel Error values posibles are: - * @return string - * - */ - function DBConnection( $strServer = DB_HOST, $strUser = DB_USER, $strPwd = DB_PASS, $strDB = DB_NAME , $type = DB_ADAPTER, $strPort = 0, $errorLevel = 2 ) - { - $this->errorLevel = $errorLevel; - if ($type == null ) $type = 'mysql'; - $this->type = $type; - //print "
$type $strServer, $strUser, $strPwd, $strDB
"; - if ( $type == "mysql" ) - $dsn = "mysql://$strUser:$strPwd@$strServer/$strDB"; - if ( $type == "pgsql" ) { - //$dsn = "pgsql://postgres@$strServer/$strDB"; - $prt = ( $strPort == 0 || $strPort == 5432 ? '' : ":$strPort" ); - $dsn = "pgsql://$strUser:$strPwd@$strServer$prt/$strDB"; - } - if ( $type == "odbc" ) - $dsn = "odbc://$strUser:$strPwd@$strServer/$strDB"; - if ( $type == "mssql" ) { - $strServer = substr($strServer, 0, strpos($strServer,':')); - $prt = ( $strPort == 0 || $strPort == 1433 ? '' : ":$strPort" ); - $dsn = "mssql://$strUser:$strPwd@$strServer$prt/$strDB"; - ///--) $dsn = "mssql://$strUser:$strPwd@$strServer/$strDB"; - } - if ( $type == "oracle" ) { - $dsn = "oci8://$strUser:$strPwd@$strServer/$strDB"; - } - $this->db_error = NULL; - if ( $type === 'myxml' ) { - $this->db = XMLDB::connect ( $strServer ); - } else { - $this->db = DB::connect ( $dsn ); - } - if ( DB::isError ($this->db) ) { - $this->db_error = $this->db; - $this->db = NULL; - $this->logError( $this->db_error ); - } - } - - /** - * Close Connection and Generate Log Message - * @author Fernando Ontiveros Lira - * @access public - * @return void - */ - function Reset() - { - if ( $this->db ){ - $this->db->disconnect(); - } - $this->db = NULL; - } - - /** - * Disconnect from Data base - * @author Fernando Ontiveros Lira - * @access public - * @return void - */ - function Free() - { - $this->Reset(); - } - - /** - * Close Connection - * @author Fernando Ontiveros Lira - * @access public - * @return void - */ - function Close() - { - $this->Reset(); - } - - /** - * log Errors - * @author Fernando Ontiveros Lira - * @access public - * @param db_error $obj - * @param string $errorLevel - * @return void - */ - function logError( $obj, $errorLevel = NULL ) - { - global $_SESSION; - global $_SERVER; - if ( is_null( $errorLevel ) ) - if ( isset ( $this->errorLevel) ) - $errorLevel = $this->errorLevel; - else - $errorLevel = DB_ERROR_SHOWALL_AND_STOP; //for fatal errors the default is 3, show detailed and die. - if ($errorLevel == DB_ERROR_SHOW_AND_STOP || $errorLevel == DB_ERROR_SHOW_AND_CONTINUE || - $errorLevel == DB_ERROR_SHOWALL_AND_STOP || $errorLevel == DB_ERROR_SHOWALL_AND_CONTINUE ) { - print ""; - print ""; - if ($errorLevel == DB_ERROR_SHOWALL_AND_STOP || $errorLevel == DB_ERROR_SHOWALL_AND_CONTINUE ) { - print ""; - } - print "
" . $obj->code . ' '. $obj->message . "
" . $obj->userinfo . "
"; - } - if (defined('DB_ERROR_BACKTRACE') && DB_ERROR_BACKTRACE) { - print "
"; - } - //G::setErrorHandler ( ); - G::customErrorLog ('DB_Error', $obj->code . ' '. $obj->message .'-' . $obj->userinfo, '', ''); - if ($errorLevel == DB_ERROR_SHOW_AND_STOP || $errorLevel == DB_ERROR_SHOWALL_AND_STOP ) { - die; //stop - } - } - - /** - * Get the trace of the current execution (debug_backtrace). - * @author David Callizaya - * @param string $tts - * @param string $limit - * @return string - */ - function traceError( $tts=2 , $limit=-1 ) - { - $trace = debug_backtrace(); - $out=''; - foreach($trace as $step) { - if ($tts>0) { - $tts--; - } else { - $out .= '['.basename($step['file']).': '.$step['line'].'] : ' . $step['function'] .'(' . - DBConnection::printArgs($step['args']). ")\n"; - $limit--; - if ($limit===0) - return $out; - } - } - return $out; - } - - /** - * Print the arguments of a function - * @author David Callizaya - * @param string $args - * @return string - */ - function printArgs( $args ) - { - $out = ''; - if (is_array($args)){ - foreach($args as $arg) { - if ($out!=='') - $out .= ' ,'; - if (is_string($arg)) - $out .= "'".($arg)."'"; - elseif (is_array($arg) ) - $out .= print_r ( $arg ,1 ); - elseif (is_object($arg)) - $out .= get_class($arg);// print_r ( $arg ,1 ); - elseif (!isset($arg)) - $out .= 'NULL'; - else - $out .= sprintf ( "%s" ,$arg ); - } - } else { - if (!isset($args)) - $out = 'NULL'; - else - $out = print_r($args,1); - } - return $out; - } - - /** - * Gets last autoincrement value inserted - * @author Fernando Ontiveros Lira - * @access public - * @return void - */ - function GetLastID() - { - if ( PEAR_DATABASE == "mysql" ){ - return mysql_insert_id(); - } - else { - $dberror = PEAR::raiseError(null, DB_ERROR_FEATURE_NOT_AVAILABLE, null, 'null', - "getLastID with " . PEAR_DATABASE . ' database.', - 'G_Error', true); - DBconnection::logError( $dberror, DB_ERROR_SHOWALL_AND_STOP ); //this error will stop the execution, until we add this feature!! - return $dberror; - } - return mysql_insert_id(); - } -} \ No newline at end of file +. + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + * + */ + +/** + * + * @package gulliver.system + * + */ + +require_once ("DB.php"); + +define( 'DB_ERROR_NO_SHOW_AND_CONTINUE', 0 ); +define( 'DB_ERROR_SHOW_AND_STOP', 1 ); +define( 'DB_ERROR_SHOW_AND_CONTINUE', 2 ); +define( 'DB_ERROR_SHOWALL_AND_STOP', 3 ); +define( 'DB_ERROR_SHOWALL_AND_CONTINUE', 4 ); + +/** + * DBConnection class definition + * It is useful to stablish a connection + * + * @package gulliver.system + * @author Fernando Ontiveros Lira + * @copyright (C) 2002 by Colosa Development Team. + */ +class DBConnection +{ + var $db; + var $db_error; + var $errorLevel; + var $type; + + /** + * *************************************************************** + * /* Error types: + * /* -1 Fatal error ( clase no instanced ) + * /* -2 Syntax error ( session missing, query malformed, etc ) + * /* -3 warning ( when the engine build a dangerous query, i.e delete without where clause ) + * /* + * /* Error level: + * /* 0 don't display any error information and continue. + * /* 1 display small box with error information and die. + * /* 2 display small box with error information and continue + * /* 3 display complete error information and die. + * /* 4 display complete error information and continue. + * /* + * /* Error Structure + * /* int error code + * /* string error message + * /* string error detailed message + * /* + * /* In all cases, the error will be saved in the apache log file + * /* + * /* + */ + + /** + * Starts DB connection with default values + * + * @author Fernando Ontiveros Lira + * @access public + * @param const $strServer Host Name + * @param const $strUser User Name + * @param const $strPwd Password + * @param const $strDB Database Name + * @param string $type Connection Type + * @param integer $strPort Used Port + * @param string $errorLevel Error values posibles are: + * @return string + * + */ + function DBConnection ($strServer = DB_HOST, $strUser = DB_USER, $strPwd = DB_PASS, $strDB = DB_NAME, $type = DB_ADAPTER, $strPort = 0, $errorLevel = 2) + { + $this->errorLevel = $errorLevel; + if ($type == null) + $type = 'mysql'; + $this->type = $type; + //print "
$type $strServer, $strUser, $strPwd, $strDB
"; + if ($type == "mysql") + $dsn = "mysql://$strUser:$strPwd@$strServer/$strDB"; + if ($type == "pgsql") { + //$dsn = "pgsql://postgres@$strServer/$strDB"; + $prt = ($strPort == 0 || $strPort == 5432 ? '' : ":$strPort"); + $dsn = "pgsql://$strUser:$strPwd@$strServer$prt/$strDB"; + } + if ($type == "odbc") + $dsn = "odbc://$strUser:$strPwd@$strServer/$strDB"; + if ($type == "mssql") { + $strServer = substr( $strServer, 0, strpos( $strServer, ':' ) ); + $prt = ($strPort == 0 || $strPort == 1433 ? '' : ":$strPort"); + $dsn = "mssql://$strUser:$strPwd@$strServer$prt/$strDB"; + ///--) $dsn = "mssql://$strUser:$strPwd@$strServer/$strDB"; + } + if ($type == "oracle") { + $dsn = "oci8://$strUser:$strPwd@$strServer/$strDB"; + } + $this->db_error = null; + if ($type === 'myxml') { + $this->db = XMLDB::connect( $strServer ); + } else { + $this->db = DB::connect( $dsn ); + } + if (DB::isError( $this->db )) { + $this->db_error = $this->db; + $this->db = null; + $this->logError( $this->db_error ); + } + } + + /** + * Close Connection and Generate Log Message + * + * @author Fernando Ontiveros Lira + * @access public + * @return void + */ + function Reset () + { + if ($this->db) { + $this->db->disconnect(); + } + $this->db = null; + } + + /** + * Disconnect from Data base + * + * @author Fernando Ontiveros Lira + * @access public + * @return void + */ + function Free () + { + $this->Reset(); + } + + /** + * Close Connection + * + * @author Fernando Ontiveros Lira + * @access public + * @return void + */ + function Close () + { + $this->Reset(); + } + + /** + * log Errors + * + * @author Fernando Ontiveros Lira + * @access public + * @param db_error $obj + * @param string $errorLevel + * @return void + */ + function logError ($obj, $errorLevel = NULL) + { + global $_SESSION; + global $_SERVER; + if (is_null( $errorLevel )) + if (isset( $this->errorLevel )) { + $errorLevel = $this->errorLevel; + } else { + $errorLevel = DB_ERROR_SHOWALL_AND_STOP; //for fatal errors the default is 3, show detailed and die. + } + + if ($errorLevel == DB_ERROR_SHOW_AND_STOP || $errorLevel == DB_ERROR_SHOW_AND_CONTINUE || $errorLevel == DB_ERROR_SHOWALL_AND_STOP || $errorLevel == DB_ERROR_SHOWALL_AND_CONTINUE) { + print ""; + print ""; + if ($errorLevel == DB_ERROR_SHOWALL_AND_STOP || $errorLevel == DB_ERROR_SHOWALL_AND_CONTINUE) { + print ""; + } + print "
" . $obj->code . ' ' . $obj->message . "
" . $obj->userinfo . "
"; + } + if (defined( 'DB_ERROR_BACKTRACE' ) && DB_ERROR_BACKTRACE) { + print "
"; + } + //G::setErrorHandler ( ); + G::customErrorLog( 'DB_Error', $obj->code . ' ' . $obj->message . '-' . $obj->userinfo, '', '' ); + if ($errorLevel == DB_ERROR_SHOW_AND_STOP || $errorLevel == DB_ERROR_SHOWALL_AND_STOP) { + die(); //stop + } + } + + /** + * Get the trace of the current execution (debug_backtrace). + * + * @author David Callizaya + * @param string $tts + * @param string $limit + * @return string + */ + function traceError ($tts = 2, $limit = -1) + { + $trace = debug_backtrace(); + $out = ''; + foreach ($trace as $step) { + if ($tts > 0) { + $tts --; + } else { + $out .= '[' . basename( $step['file'] ) . ': ' . $step['line'] . '] : ' . $step['function'] . '(' . DBConnection::printArgs( $step['args'] ) . ")\n"; + $limit --; + if ($limit === 0) { + return $out; + } + } + } + return $out; + } + + /** + * Print the arguments of a function + * + * @author David Callizaya + * @param string $args + * @return string + */ + function printArgs ($args) + { + $out = ''; + if (is_array( $args )) { + foreach ($args as $arg) { + if ($out !== '') { + $out .= ' ,'; + } + if (is_string( $arg )) { + $out .= "'" . ($arg) . "'"; + } elseif (is_array( $arg )) { + $out .= print_r( $arg, 1 ); + } elseif (is_object( $arg )) { + $out .= get_class( $arg ); // print_r ( $arg ,1 ); + } elseif (! isset( $arg )) { + $out .= 'NULL'; + } else { + $out .= sprintf( "%s", $arg ); + } + } + } else { + if (! isset( $args )) { + $out = 'NULL'; + } else { + $out = print_r( $args, 1 ); + } + } + return $out; + } + + /** + * Gets last autoincrement value inserted + * + * @author Fernando Ontiveros Lira + * @access public + * @return void + */ + function GetLastID () + { + if (PEAR_DATABASE == "mysql") { + return mysql_insert_id(); + } else { + $dberror = PEAR::raiseError( null, DB_ERROR_FEATURE_NOT_AVAILABLE, null, 'null', "getLastID with " . PEAR_DATABASE . ' database.', 'G_Error', true ); + DBconnection::logError( $dberror, DB_ERROR_SHOWALL_AND_STOP ); //this error will stop the execution, until we add this feature!! + return $dberror; + } + return mysql_insert_id(); + } +} +