Location: PHPKode > projects > TEMS -Time and Expense Management System > tems/baseclass/DBCoreFunctions.php
<?php

/*********************************************************************************
 * TES is a Time and Expense Management program developed by
 * Initechs, LLC. Copyright (C) 2009 - 2010 Initechs LLC.
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License version 3 as published by the
 * Free Software Foundation with the addition of the following permission added
 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
 * IN WHICH THE COPYRIGHT IS OWNED BY INITECHS, INITECHS DISCLAIMS THE WARRANTY
 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, see http://www.gnu.org/licenses or write to the Free
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301 USA.
 *
 * You can contact Initechs headquarters at 1841 Piedmont Road, Suite 301,
 * Marietta, GA, USA. or at email address hide@address.com
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU General Public License version 3,
 * these Appropriate Legal Notices must retain the display od the "Initechs" logo.
 * If the display of the logo is not reasonably feasible for technical reasons,
 * the Appropriate Legal Notices must display the words "Powered by Initechs".

 ********************************************************************************/
$basedir = dirname(__FILE__) . '/..';
require_once("$basedir/initialize.php");

global $ini_array;

$db_server = ''; unset($db_server);	// To avoid warning of $db_server not defined at the next line.

if (!isset($db_server))
{
	$configFile = $basedir."/systemconfig/config.ini";
	$DBconfigFile = $basedir."/config/Database.ini";

	$ini_array = parse_ini_file($configFile, true);
	if (is_file($DBconfigFile))
	{
		$db_ini_array = parse_ini_file($DBconfigFile, true);
		$ini_array['database'] = $db_ini_array['database'];
		unset($db_ini_array);
	}
	if (isset($ini_array['database']))
	{
		$db_server = $ini_array['database']['db_server'];
		$db_user = $ini_array['database']['db_user'];
		$db_password = $ini_array['database']['db_password'];
		$db_database = $ini_array['database']['db_database'];
	}
}


define('MYSQL_DUPLICATE_ENTRY', 1062);
define('MYSQL_DATA_TOO_LONG', 1406);
define('MYSQL_PARENT_KEY_CONSTRAINT', 1451);
define('MYSQL_FOREIGN_KEY_CONSTRAINT', 1452);

// TODO Find the list of all database error list and write a generic error handler routine - Kallol.

class iInvalidDataException extends Exception {}
class iInvalidArgumentException extends Exception {}
class iFKInUseException extends Exception {}
class iPKInUseException extends Exception {}
class iDataTooLongException extends Exception {}

class iBLError extends Exception
{
	public $errField = '';
	public $msgid = '';
	public $msgdta = '';

	public function __construct($errField='', $msgid='', $msgdta='')
	{
		$this->errField = $errField;
		$this->msgid = $msgid;
		$this->msgdta = $msgdta;
		parent::__construct();
	}
}

class iIDInUseException extends Exception
{
	public function __construct($dbConn)
	{
		parent::__construct("<div>{$dbConn->error}</div>");
	}
}


class iDatabaseErrorException extends Exception
{
	public function __construct($dbConn, $query)
	{
		parent::__construct("{$dbConn} 
		 Ocurred when executing SQL Statement: {$query}");
	}
}


abstract class DBCoreFunctions
{
	private static $s_connection = NULL;

	protected function getConnection()
	{
		global $db_server, $db_user, $db_password, $db_database;

		if (self::$s_connection === NULL)
		{
			$conn = @new mysqli($db_server, $db_user, $db_password, $db_database);
			if (mysqli_connect_errno() !== 0)
			{
				$msg = mysqli_connect_error();
				throw new iDatabaseErrorException($msg, 'Connect');
			}
			self::$s_connection = $conn;
		}
		self::$s_connection->query('SET NAMES utf8');
		return self::$s_connection;
	}

	protected function escapeString($in_string)
	{
		if ($in_string === NULL)
			return '';

		$conn = DBCoreFunctions::getConnection();
		if ($conn !== NULL)
			return($conn->real_escape_string($in_string));
	}


	protected function beginTransaction()
	{
		$conn = $this->getConnection();
		$conn->query('START TRANSACTION');
		if ($conn->errno != 0)
			throw new iDatabaseErrorException();
	}


	protected function commitTransaction()
	{
		$conn = $this->getConnection();
		$conn->query('COMMIT');
		if ($conn->errno != 0)
			throw new iDatabaseErrorException();
	}

	protected function rollbackTransaction()
	{
		$conn = $this->getConnection();
		$conn->query('ROLLBACK');
		if ($conn->errno != 0)
			throw new iDatabaseErrorException();
	}

	protected function chkQueryError($dbConn, $query)
	{
		if ($dbConn->errno == MYSQL_DUPLICATE_ENTRY)
			throw new iIDInUseException($dbConn);
		if ($dbConn->errno == MYSQL_PARENT_KEY_CONSTRAINT)
			throw new iPKInUseException();
		if ($dbConn->errno == MYSQL_FOREIGN_KEY_CONSTRAINT)
			throw new iFKInUseException();
		if ($dbConn->errno == MYSQL_DATA_TOO_LONG)
			throw new iDataTooLongException();

		if ($dbConn->errno != 0)
			throw new iDatabaseErrorException($dbConn, $query);
	}


}

?>
Return current item: TEMS -Time and Expense Management System