. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ 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 = '`'; } /** * 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']) && $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 ) { $logFile = PATH_DATA . 'log' . PATH_SEP . 'query.log'; $fp = fopen ( $logFile, 'a+' ); 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); } /*=================================================================================================*/ /** * 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` ( `OP_UID` varchar(32) NOT NULL, `PRO_UID` varchar(32) NOT NULL, `TAS_UID` varchar(32) NOT NULL, `USR_UID` varchar(32) NOT NULL, `OP_USER_RELATION` int(1) NOT NULL default '1', `OP_TASK_SOURCE` varchar(32) NOT NULL, `OP_PARTICIPATE` int(1) NOT NULL default '1', `OP_OBJ_TYPE` varchar(15) NOT NULL default 'ANY', `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; } /* * 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, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, AVG(AD.DEL_DURATION) AS PROMEDIO 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) 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, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, AVG(AD.DEL_DURATION) AS PROMEDIO 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, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, AVG(AD.DEL_DURATION) AS PROMEDIO 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) 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, MIN(AD.DEL_DURATION) AS MIN, MAX(AD.DEL_DURATION) AS MAX, SUM(AD.DEL_DURATION) AS TOTALDUR, AVG(AD.DEL_DURATION) AS PROMEDIO 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; } /* * 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'; } /* * 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; } }