From b480a0be57bf0415391a602cb6c3dc43f6b74b1a Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Sun, 13 Oct 2013 10:39:11 +0200 Subject: [PATCH] a few fixes here and there, imporved autoloader, updated database-class (ugly old php4 style), removed two functions which will be included in the following updated installer Signed-off-by: Michael Kaufmann (d00p) --- admin_settings.php | 4 + lib/classes/database/class.db.php | 176 +++++------------- lib/functions.php | 110 ++++++++--- .../database/function.remove_remarks.php | 55 ------ .../database/function.split_sql_file.php | 140 -------------- lng/german.lng.php | 2 +- 6 files changed, 134 insertions(+), 353 deletions(-) delete mode 100644 lib/functions/database/function.remove_remarks.php delete mode 100644 lib/functions/database/function.split_sql_file.php diff --git a/admin_settings.php b/admin_settings.php index 47d61fef..6e581649 100644 --- a/admin_settings.php +++ b/admin_settings.php @@ -149,6 +149,10 @@ elseif($page == 'phpinfo' eval("\$phpinfoentries .= \"" . getTemplate("settings/phpinfo/phpinfo_1") . "\";"); } } + // first header -> show actual php version + if (strtolower($name) == "phpinfo") { + $name = "PHP ".PHP_VERSION; + } eval("\$phpinfohtml .= \"" . getTemplate("settings/phpinfo/phpinfo_table") . "\";"); } $phpinfo = $phpinfohtml; diff --git a/lib/classes/database/class.db.php b/lib/classes/database/class.db.php index 2e6193eb..4cbfed0d 100644 --- a/lib/classes/database/class.db.php +++ b/lib/classes/database/class.db.php @@ -21,63 +21,54 @@ * Class to manage the connection to the Database * @package Functions */ +class db { -class db -{ /** * Link ID for every connection * @var int */ - public $link_id = 0; /** * Query ID for every query * @var int */ - private $query_id = 0; /** * Errordescription, if an error occures * @var string */ - public $errdesc = ''; /** * Errornumber, if an error occures * @var int */ - public $errno = 0; /** * Servername * @var string */ - private $server = ''; /** * Username * @var string */ - private $user = ''; /** * Password * @var string */ - private $password = ''; /** * Database * @var string */ - private $database = ''; /** @@ -88,14 +79,11 @@ class db * @param string Password * @param string Database */ + public function __construct($server, $user, $password, $database = '') { - function db($server, $user, $password, $database = '') - { // check for mysql extension - - if(!extension_loaded('mysql')) - { - $this->showerror('You should install the PHP MySQL extension!', false); + if (!extension_loaded('mysql')) { + $this->_showerror('You should install the PHP MySQL extension!', false); } $this->server = $server; @@ -104,34 +92,25 @@ class db $this->database = $database; $this->link_id = @mysql_connect($this->server, $this->user, $this->password, 1); - if(!$this->link_id) - { - //try to connect with no password and change it afterwards. only for root user + if (!$this->link_id) { - if($this->user == 'root') - { + //try to connect with no password and change it afterwards. only for root user + if ($this->user == 'root') { $this->link_id = @mysql_connect($this->server, $this->user, '', 1); - if($this->link_id) - { + if ($this->link_id) { $this->query("SET PASSWORD = PASSWORD('" . $this->escape($this->password) . "')"); + } else { + $this->_showerror('Establishing connection failed, exiting'); } - else - { - $this->showerror('Establishing connection failed, exiting'); - } - } - else - { - $this->showerror('Establishing connection failed, exiting'); + } else { + $this->_showerror('Establishing connection failed, exiting'); } } - if($this->database != '') - { - if(!@mysql_select_db($this->database, $this->link_id)) - { - $this->showerror('Trying to use database ' . $this->database . ' failed, exiting'); + if ($this->database != '') { + if (!@mysql_select_db($this->database, $this->link_id)) { + $this->_showerror('Trying to use database ' . $this->database . ' failed, exiting'); } } @@ -141,14 +120,11 @@ class db /** * Closes connection to Databaseserver */ - - function close() - { + public function close() { return @mysql_close($this->link_id); } - function getDbName() - { + public function getDbName() { return $this->database; } @@ -158,19 +134,12 @@ class db * @param string $input * @return string escaped string */ - - function escape($input) - { - if(is_int($input)) - { + public function escape($input) { + if (is_int($input)) { return (int)$input; - } - elseif(is_float($input)) - { + } elseif(is_float($input)) { return (float)$input; - } - else - { + } else { return mysql_real_escape_string($input, $this->link_id); } } @@ -182,54 +151,40 @@ class db * @param bool Unbuffered query? * @return string RessourceId */ - - function query($query_str, $unbuffered = false, $suppress_error = false) - { + public function query($query_str, $unbuffered = false, $suppress_error = false) { global $numbqueries, $theme; - if (!mysql_ping($this->link_id)) - { + // check if connection is still alive + if (!mysql_ping($this->link_id)) { $this->link_id = mysql_connect($this->server,$this->user,$this->password); - if(!$this->database) - { + if (!$this->database) { return false; } mysql_select_db($this->database); } - if(!$unbuffered) - { - if($suppress_error) - { + if (!$unbuffered) { + if ($suppress_error) { $this->query_id = @mysql_query($query_str, $this->link_id); } else { $this->query_id = mysql_query($query_str, $this->link_id); } - } - else - { - if($suppress_error) - { + } else { + if ($suppress_error) { $this->query_id = @mysql_unbuffered_query($query_str, $this->link_id); } else { $this->query_id = mysql_unbuffered_query($query_str, $this->link_id); } } - if(!$this->query_id && !$suppress_error) - { - $this->showerror('Invalid SQL: ' . $query_str); - } - elseif(!$this->query_id && $suppress_error) - { + if (!$this->query_id && !$suppress_error) { + $this->_showerror('Invalid SQL: ' . $query_str); + } elseif(!$this->query_id && $suppress_error) { return false; } $numbqueries++; - - //echo $query_str.' '.$numbqueries.'
'; - return $this->query_id; } @@ -240,22 +195,15 @@ class db * @param string Datatype, num or assoc * @return array The row */ - - function fetch_array($query_id = - 1, $datatype = 'assoc') - { - if($query_id != - 1) - { + public function fetch_array($query_id = - 1, $_datatype = 'assoc') { + if ($query_id != - 1) { $this->query_id = $query_id; } - if($datatype == 'num') - { + $datatype = MYSQL_ASSOC; + if ($_datatype == 'num') { $datatype = MYSQL_NUM; } - else - { - $datatype = MYSQL_ASSOC; - } $this->record = mysql_fetch_array($this->query_id, $datatype); return $this->record; @@ -268,9 +216,7 @@ class db * @param string Datatype, num or assoc * @return array The first row */ - - function query_first($query_string, $datatype = 'assoc') - { + public function query_first($query_string, $datatype = 'assoc') { $this->query($query_string); return $this->fetch_array($this->query_id, $datatype); } @@ -281,14 +227,10 @@ class db * @param string RessourceId * @return int Number of rows */ - - function num_rows($query_id = - 1) - { - if($query_id != - 1) - { + public function num_rows($query_id = - 1) { + if ($query_id != - 1) { $this->query_id = $query_id; } - return mysql_num_rows($this->query_id); } @@ -297,9 +239,7 @@ class db * * @return int auto_incremental-Value */ - - function insert_id() - { + public function insert_id() { return mysql_insert_id($this->link_id); } @@ -308,9 +248,7 @@ class db * * @return int affected rows */ - - function affected_rows() - { + public function affected_rows() { return mysql_affected_rows($this->link_id); } @@ -319,22 +257,15 @@ class db * * @return int Errornumber */ - - function geterrdescno() - { - if($this->link_id != 0) - { + private function _geterrdescno() { + if ($this->link_id != 0) { $this->errdesc = mysql_error($this->link_id); $this->errno = mysql_errno($this->link_id); - } - else - { + } else { // Maybe we don't have any linkid so let's try to catch at least anything - $this->errdesc = mysql_error(); $this->errno = mysql_errno(); } - return $this->errno; } @@ -343,24 +274,19 @@ class db * * @param string Errormessage */ - - function showerror($errormsg, $mysqlActive = true) - { + private function _showerror($errormsg, $mysqlActive = true) { global $filename, $theme; $text = 'MySQL - Error: ' . str_replace("\n", "\t", $errormsg); - if($mysqlActive) - { - $this->geterrdescno(); + + if ($mysqlActive) { + $this->_geterrdescno(); $text .= "; ErrNo: " . $this->errno . "; Desc: " . $this->errdesc; } - if($filename != 'cronscript.php') - { + if ($filename != 'froxlor_master_cronjob.php') { $text .= "; Script: " . getenv('REQUEST_URI') . "; Ref: " . getenv('HTTP_REFERER'); - } - else - { + } else { $text .= "; Script: cronscript"; } $md5 = md5($text . time()); @@ -384,5 +310,3 @@ class db die("We are sorry, but a MySQL - error occurred. The administrator may find more information in syslog with the ID ".$md5." or in the sql-error.log in the logs/ directory"); } } - -?> diff --git a/lib/functions.php b/lib/functions.php index fc00b1c3..2203a0b0 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -42,39 +42,87 @@ function includeFunctions($dirname) closedir($dirhandle); } -function __autoload($classname) -{ - global $libdirname, $theme; - findIncludeClass($libdirname . '/classes/', $classname); -} - -spl_autoload_register('__autoload'); - -function findIncludeClass($dirname, $classname) -{ - $dirhandle = opendir($dirname); - while(false !== ($filename = readdir($dirhandle))) - { - if($filename != '.' && $filename != '..' && $filename != '') - { - if($filename == 'class.' . $classname . '.php' || $filename == 'abstract.' . $classname . '.php' || $filename == 'interface.' . $classname . '.php') - { - include($dirname . $filename); - return; - } - - if(is_dir($dirname . $filename)) - { - findIncludeClass($dirname . $filename . '/', $classname); - } - } - } - closedir($dirhandle); -} - - function exportDetails($fielddata, $newfieldvalue) { print_r($newfieldvalue); } +Autoloader::init(); + +/** + * Class Autoloader + * + * iterates through given directory and includes + * the file which matches $classname + * + * @copyright (c) the authors + * @author Froxlor team (2013-) + * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt + * @package Autoloader + * @since 0.9.29.1 + */ +class Autoloader { + + /** + * returns a new AutoLoader-object + * @return Autoloader + */ + public static function init() { + return new self(); + } + + /** + * class constructor + * + * @return null + */ + public function __construct() { + // register autoload.function + spl_autoload_register(array($this, 'doAutoload')); + } + + /** + * gets the class to load as parameter, searches the library-paths + * recursively for this class and includes it + * + * @param string $class + * + * @throws Exception + * @return boolean + */ + public function doAutoload($class) { + + // define the paths where to look for classes + $paths = array( + dirname(__FILE__) . '/', + dirname(dirname(__FILE__)) . '/scripts/', + dirname(dirname(__FILE__)) . '/install/', + ); + + // now iterate through the paths + foreach ($paths as $path) { + // valid directory? + if (is_dir($path)) { + // create RecursiveIteratorIterator + $its = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($path) + ); + + // check every file + foreach ($its as $fullFileName => $it ) { + // does it match the Filename pattern? + if (preg_match("/^(class|module|interface|abstract|)\.?$class\.php$/i", $it->getFilename())) { + // include the file and return from the loop + include_once $fullFileName; + return true; + } + } + } else { + // yikes - no valid directory to check + throw new Exception("Cannot autoload from directory '".$path."'. No such directory."); + } + } + // yikes - class not found + throw new Exception("Could not find class '".$class."'"); + } +} diff --git a/lib/functions/database/function.remove_remarks.php b/lib/functions/database/function.remove_remarks.php deleted file mode 100644 index f5d09d0a..00000000 --- a/lib/functions/database/function.remove_remarks.php +++ /dev/null @@ -1,55 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -// -// remove_remarks will strip the sql comment lines out of an uploaded sql file -// The whole function has been taken from the phpbb installer, copyright by the phpbb team, phpbb in summer 2004. -// - -function remove_remarks($sql) -{ - $lines = explode("\n", $sql); - - // try to keep mem. use down - - $sql = ""; - $linecount = count($lines); - $output = ""; - for ($i = 0;$i < $linecount;$i++) - { - if(($i != ($linecount - 1)) - || (strlen($lines[$i]) > 0)) - { - if(substr($lines[$i], 0, 1) != "#") - { - $output.= $lines[$i] . "\n"; - } - else - { - $output.= "\n"; - } - - // Trading a bit of speed for lower mem. use here. - - $lines[$i] = ""; - } - } - - return $output; -} diff --git a/lib/functions/database/function.split_sql_file.php b/lib/functions/database/function.split_sql_file.php deleted file mode 100644 index cce97878..00000000 --- a/lib/functions/database/function.split_sql_file.php +++ /dev/null @@ -1,140 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -// -// split_sql_file will split an uploaded sql file into single sql statements. -// Note: expects trim() to have already been run on $sql -// The whole function has been taken from the phpbb installer, copyright by the phpbb team, phpbb in summer 2004. -// - -function split_sql_file($sql, $delimiter) -{ - // Split up our string into "possible" SQL statements. - - $tokens = explode($delimiter, $sql); - - // try to save mem. - - $sql = ""; - $output = array(); - - // we don't actually care about the matches preg gives us. - - $matches = array(); - - // this is faster than calling count($oktens) every time thru the loop. - - $token_count = count($tokens); - for ($i = 0;$i < $token_count;$i++) - { - // Don't wanna add an empty string as the last thing in the array. - - if(($i != ($token_count - 1)) - || (strlen($tokens[$i] > 0))) - { - // This is the total number of single quotes in the token. - - $total_quotes = preg_match_all("/'/", $tokens[$i], $matches); - - // Counts single quotes that are preceded by an odd number of backslashes, - // which means they're escaped quotes. - - $escaped_quotes = preg_match_all("/(?