Merge branch 'master' of git://github.com/Froxlor/Froxlor

This commit is contained in:
BNoiZe
2013-10-30 17:23:37 +01:00

View File

@@ -38,18 +38,29 @@ class Database {
*/
private static $_link = null ;
/**
* indicator whether to use root-connection or not
*/
private static $_needroot = false;
/**
* indicator which database-server we're on (not really used)
*/
private static $_dbserver = 0;
/**
* Wrapper for PDOStatement::execute so we can catch the PDOException
* and display the error nicely on the panel
*
* @param PDOStatement $stmt
* @param array $params (optional)
* @param bool $showerror suppress errordisplay (default true)
*/
public static function pexecute(&$stmt, $params = null) {
public static function pexecute(&$stmt, $params = null, $showerror = true) {
try {
$stmt->execute($params);
} catch (PDOException $e) {
self::_showerror($e);
self::_showerror($e, $showerror);
}
}
@@ -58,10 +69,36 @@ class Database {
*
* @return int
*/
public static function num_rows($stmt) {
public static function num_rows() {
return Database::query("SELECT FOUND_ROWS()")->fetchColumn();
}
/**
* enabled the usage of a root-connection to the database
* Note: must be called *before* any prepare/query/etc.
* and should be called again with 'false'-parameter to resume
* the 'normal' database-connection
*
* @param bool $needroot
* @param int $dbserver optional
*/
public static function needRoot($needroot = false, $dbserver = 0) {
// force re-connecting to the db with corresponding user
// and set the $dbserver (mostly to 0 = default)
self::_setServer($dbserver);
self::$_needroot = $needroot;
}
/**
* set the database-server (relevant for root-connection)
*
* @param int $dbserver
*/
private static function _setServer($dbserver = 0) {
self::$_dbserver = $dbserver;
self::$_link = null;
}
/**
* let's us interact with the PDO-Object by using static
* call like "Database::function()"
@@ -72,7 +109,7 @@ class Database {
* @return mixed
*/
public static function __callStatic($name, $args) {
$callback = array(self::getDB(), $name);
$callback = array(self::getDB(self::$_needroot), $name);
$result = null;
try {
$result = call_user_func_array($callback, $args );
@@ -118,9 +155,9 @@ class Database {
// either root or unprivileged user
if ($root) {
$user = $sql_root[0]['user'];
$password = $sql_root[0]['password'];
$host = $sql_root[0]['host'];
$user = $sql_root[self::$_dbserver]['user'];
$password = $sql_root[self::$_dbserver]['password'];
$host = $sql_root[self::$_dbserver]['host'];
} else {
$user = $sql["user"];
$password = $sql["password"];
@@ -166,8 +203,9 @@ class Database {
* display a nice error if it occurs and log everything
*
* @param PDOException $error
* @param bool $showerror if set to false, the error will be logged but we go on
*/
private static function _showerror($error) {
private static function _showerror($error, $showerror = true) {
global $theme;
/**
@@ -183,6 +221,7 @@ class Database {
@fwrite($sqllog, date('d.m.Y H:i', time())." --- ".str_replace("\n", " ", $error->getMessage())."\n");
@fclose($sqllog);
if ($showerror) {
if (!isset($_SERVER['SHELL']) || (isset($_SERVER['SHELL']) && $_SERVER['SHELL'] == '')) {
// if we're not on the shell, output a nicer error-message
$err_hint = file_get_contents(dirname($sl_dir).'/templates/'.$theme.'/misc/dberrornice.tpl');
@@ -195,3 +234,4 @@ class Database {
die("We are sorry, but a MySQL - error occurred. The administrator may find more information in in the sql-error.log in the logs/ directory");
}
}
}