* -------------------------------------------------------------------- *
* Kurzbeschreibung : Viele Nicht-MySQL-Funktionen (auch Dateizugriff) *
* -------------------------------------------------------------------- *
- * *
+ * $Revision:: $ *
+ * $Date:: $ *
+ * $Tag:: 0.2.1-FINAL $ *
+ * $Author:: $ *
+ * Needs to be in all Files and every File needs "svn propset *
+ * svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2008 by Roland Haeder *
* For more information visit: http://www.mxchange.org *
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
* MA 02110-1301 USA *
************************************************************************/
-
// Some security stuff...
if (!defined('__SECURITY')) {
$INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4)."/security.php";
}
// Check if our config file is writeable or not
-function IS_INC_WRITEABLE($inc) {
+function IS_INC_WRITEABLE ($inc) {
// Generate FQFN
- $fqfn = sprintf("%sinc/%s.php", constant('PATH'), $inc);
+ $FQFN = sprintf("%sinc/%s.php", constant('PATH'), $inc);
// Abort by simple test
- if ((FILE_READABLE($fqfn)) && (!is_writeable($fqfn))) {
+ if ((FILE_READABLE($FQFN)) && (!is_writeable($FQFN))) {
return false;
} // END - if
- // Test if we can append data
- $fp = @fopen($fqfn, 'a');
- if ($inc == "dummy") {
- // Remove dummy file
- fclose($fp);
- return unlink($fqfn);
- } else {
- // Close all other files
- return fclose($fp);
- }
+ // Test write-access on directory
+ return is_writeable(dirname($FQFN));
}
// Output HTML code directly or "render" it. You addionally switch the new-line character off
mxchange_die("<strong>{--FATAL_ERROR--}:</strong> {--LANG_NO_RENDER_DIRECT--}");
break;
}
- } elseif ((constant('_OB_CACHING') == "on") && ($GLOBALS['footer_sent'] == 1)) {
+ } elseif ((constant('_OB_CACHING') == "on") && (isset($GLOBALS['footer_sent'])) && ($GLOBALS['footer_sent'] == 1)) {
// Headers already sent?
if (headers_sent()) {
// Log this error
// Output cached HTML code
$OUTPUT = ob_get_contents();
- // Clear output buffer for later output
- clearOutputBuffer();
+ // Clear output buffer for later output if output is found
+ if (!empty($OUTPUT)) {
+ clearOutputBuffer();
+ } // END - if
// Send HTTP header
header("HTTP/1.1 200");
while (strpos($OUTPUT, '{!') > 0) {
// Prepare the content and eval() it...
$newContent = "";
- $eval = "\$newContent = \"".COMPILE_CODE(SQL_ESCAPE($OUTPUT))."\";";
- @eval($eval);
+ $eval = "\$newContent = \"".COMPILE_CODE(smartAddSlashes($OUTPUT))."\";";
+ eval($eval);
// Was that eval okay?
if (empty($newContent)) {
// Compile and run finished rendered HTML code
while (strpos($OUTPUT, '{!') > 0) {
- $eval = "\$OUTPUT = \"".COMPILE_CODE(SQL_ESCAPE($OUTPUT))."\";";
+ $eval = "\$OUTPUT = \"".COMPILE_CODE(smartAddSlashes($OUTPUT))."\";";
eval($eval);
} // END - while
$GLOBALS['fatal_messages'] = array();
}
+// Getter for whole fatal error messages
+function getFatalArray () {
+ return $GLOBALS['fatal_messages'];
+}
+
// Add a fatal error message to the queue array
-function addFatalMessage ($message, $extra="") {
+function addFatalMessage ($F, $L, $message, $extra="") {
if (is_array($extra)) {
// Multiple extras for a message with masks
$message = call_user_func_array('sprintf', $extra);
$GLOBALS['fatal_messages'][] = $message;
// Log fatal messages away
- DEBUG_LOG(__FUNCTION__, __LINE__, " message={$message}");
+ DEBUG_LOG($F, $L, " message={$message}");
}
// Getter for total fatal message count
if ($template == "member_support_form") {
// Support request of a member
$result = SQL_QUERY_ESC("SELECT userid, gender, surname, family, email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1",
- array($GLOBALS['userid']), __FILE__, __LINE__);
+ array(getUserId()), __FUNCTION__, __LINE__);
// Is content an array?
if (is_array($content)) {
$ret = "";
if ((strpos($tmpl_file, "\$") !== false) || (strpos($tmpl_file, '{--') !== false) || (strpos($tmpl_file, '--}') > 0)) {
// Okay, compile it!
- $tmpl_file = "\$ret=\"".COMPILE_CODE(SQL_ESCAPE($tmpl_file))."\";";
+ $tmpl_file = "\$ret=\"".COMPILE_CODE(smartAddSlashes($tmpl_file))."\";";
eval($tmpl_file);
} else {
// Simply return loaded code
// Add surrounding HTML comments to help finding bugs faster
$ret = "<!-- Template ".$template." - Start -->\n".$ret."<!-- Template ".$template." - End -->\n";
- } elseif ((IS_ADMIN()) || ((isBooleanConstantAndTrue('mxchange_installing')) && (!isBooleanConstantAndTrue('mxchange_installed')))) {
+ } elseif ((IS_ADMIN()) || ((isInstalling()) && (!isInstalled()))) {
// Only admins shall see this warning or when installation mode is active
$ret = "<br /><span class=\"guest_failed\">".TEMPLATE_404."</span><br />
(".basename($FQFN).")<br />
// Do we have some content to output or return?
if (!empty($ret)) {
// Not empty so let's put it out! ;)
- if ($return) {
+ if ($return === true) {
// Return the HTML code
return $ret;
} else {
// Output direct
OUTPUT_HTML($ret);
}
- } elseif (isBooleanConstantAndTrue('DEBUG_MODE')) {
+ } elseif (isDebugModeEnabled()) {
// Warning, empty output!
return "E:".$template."<br />\n";
}
//* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):TO={$TO},SUBJECT={$SUBJECT}<br />\n";
// Compile subject line (for POINTS constant etc.)
- $eval = "\$SUBJECT = decodeEntities(\"".COMPILE_CODE(SQL_ESCAPE($SUBJECT))."\");";
+ $eval = "\$SUBJECT = decodeEntities(\"".COMPILE_CODE(smartAddSlashes($SUBJECT))."\");";
eval($eval);
// Set from header
return;
} else {
// Load email address
- $result_email = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1", array(bigintval($TO)), __FILE__, __LINE__);
+ $result_email = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1", array(bigintval($TO)), __FUNCTION__, __LINE__);
//* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):numRows=".SQL_NUMROWS($result_email)."<br />\n";
// Does the user exist?
// Append header
$FROM .= LOAD_EMAIL_TEMPLATE("header");
}
- } elseif (isBooleanConstantAndTrue('DEBUG_MODE')) {
+ } elseif (isDebugModeEnabled()) {
if (empty($FROM)) {
// Load email header template
$FROM = LOAD_EMAIL_TEMPLATE("header");
}
// Compile "TO"
- $eval = "\$TO = \"".COMPILE_CODE(SQL_ESCAPE($TO))."\";";
+ $eval = "\$TO = \"".COMPILE_CODE(smartAddSlashes($TO))."\";";
eval($eval);
// Compile "MSG"
- $eval = "\$MSG = \"".COMPILE_CODE(SQL_ESCAPE($MSG))."\";";
+ $eval = "\$MSG = \"".COMPILE_CODE(smartAddSlashes($MSG))."\";";
eval($eval);
// Fix HTML parameter (default is no!)
if (empty($HTML)) $HTML = "N";
- if (isBooleanConstantAndTrue('DEBUG_MODE')) {
+ if (isDebugModeEnabled()) {
// In debug mode we want to display the mail instead of sending it away so we can debug this part
print("<pre>
".htmlentities(trim($FROM))."
}
// Check if legacy or PHPMailer command
+// @TODO Rewrite this to an extension 'smtp'
// @private
function CHECK_PHPMAILER_USAGE() {
- return ((defined('SMTP_HOSTNAME')) && (defined('SMTP_USER')) && (defined('SMTP_PASSWORD')) && (SMTP_HOSTNAME != "") && (SMTP_USER != ""));
+ return ((defined('SMTP_HOSTNAME')) && (defined('SMTP_USER')) && (defined('SMTP_PASSWORD')) && (constant('SMTP_HOSTNAME') != "") && (constant('SMTP_USER') != ""));
}
/*
// Start creating password
$PASS = "";
for ($i = 0; $i < $LEN; $i++) {
- $PASS .= $ABC[mt_rand(0, sizeof($ABC) -1)];
+ $PASS .= $ABC[mt_rand(0, count($ABC) -1)];
} // END - for
// When the size is below 40 we can also add additional security by scrambling it
function SELECTION_COUNT ($array) {
$ret = 0;
if (is_array($array)) {
- foreach ($array as $key => $sel) {
- if (!empty($sel)) $ret++;
+ foreach ($array as $key => $selected) {
+ if (!empty($selected)) $ret++;
}
}
return $ret;
//* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):NICKNAME!<br />\n";
// Load nickname
$result = SQL_QUERY_ESC("SELECT surname, family, gender, email, nickname FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1",
- array(bigintval($UID)), __FILE__, __LINE__);
+ array(bigintval($UID)), __FUNCTION__, __LINE__);
} else {
//* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):NO-NICK!<br />\n";
/// Load normal data
$result = SQL_QUERY_ESC("SELECT surname, family, gender, email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1",
- array(bigintval($UID)), __FILE__, __LINE__);
+ array(bigintval($UID)), __FUNCTION__, __LINE__);
}
// Fetch and merge data
// Run code
$tmpl_file = "\$newContent = decodeEntities(\"".COMPILE_CODE($tmpl_file)."\");";
- @eval($tmpl_file);
+ eval($tmpl_file);
} elseif (!empty($template)) {
// Template file not found!
$newContent = "{--TEMPLATE_404--}: ".$template."<br />
<br /><br />";
// Debug mode not active? Then remove the HTML tags
- if (!isBooleanConstantAndTrue('DEBUG_MODE')) $newContent = strip_tags($newContent);
+ if (!isDebugModeEnabled()) $newContent = strip_tags($newContent);
} else {
// No template name supplied!
$newContent = getMessage('NO_TEMPLATE_SUPPLIED');
return COMPILE_CODE($newContent);
}
//
-function MAKE_TIME($H, $M, $S, $stamp) {
+function MAKE_TIME ($H, $M, $S, $stamp) {
// Extract day, month and year from given timestamp
$DAY = date("d", $stamp);
$MONTH = date("m", $stamp);
return mktime($H, $M, $S, $MONTH, $DAY, $YEAR);
}
//
-function LOAD_URL($URL, $addUrlData=true) {
+function LOAD_URL ($URL, $addUrlData=true) {
// Compile out URI codes
$URL = compileUriCode($URL);
}
// Get output buffer
- //* DEBUG: */ debug_report_bug();
+ //* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
+ //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, $URL);
$OUTPUT = ob_get_contents();
// Clear it only if there is content
} // END - if
// Add some data to URL if cookies are not accepted
- if (((!defined('__COOKIES')) || (!__COOKIES)) && ($addUrlData)) $URL = ADD_URL_DATA($URL);
+ if (((!defined('__COOKIES')) || (!constant('__COOKIES'))) && ($addUrlData)) $URL = ADD_URL_DATA($URL);
// Probe for bot from search engine
if ((eregi("spider", GET_USER_AGENT())) || (eregi("bot", GET_USER_AGENT()))) {
LOAD_TEMPLATE("redirect_url", false, str_replace("&", "&", $URL));
LOAD_INC("inc/footer.php");
}
- exit();
+ shutdown();
}
// Wrapper for LOAD_URL but URL comes from a configuration entry
//
function ADD_SELECTION ($type, $DEFAULT, $prefix="", $id="0") {
- global $MONTH_DESCR;
$OUT = "";
if ($type == "yn") {
break;
case "month": // Month
- foreach ($MONTH_DESCR as $month => $descr) {
+ foreach ($GLOBALS['month_descr'] as $month => $descr) {
$OUT .= "<option value=\"".$month."\"";
if ($DEFAULT == $month) $OUT .= " selected=\"selected\"";
$OUT .= ">".$descr."</option>\n";
}
//
-function TRANSLATE_YESNO($yn) {
+function TRANSLATE_YESNO ($yn) {
// Default
- $yn = "??? (".$yn.")";
+ $translated = "??? (".$yn.")";
switch ($yn) {
- case "Y": $yn = getMessage('YES'); break;
- case "N": $yn = getMessage('NO'); break;
+ case "Y": $translated = getMessage('YES'); break;
+ case "N": $translated = getMessage('NO'); break;
default:
// Log unknown value
DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected Y/N!", $yn));
}
// Return it
- return $yn;
+ return $translated;
}
//
// Deprecated : $length
// Optional : $DATA
//
-function GEN_RANDOM_CODE ($length, $code, $uid, $DATA="") {
+function generateRandomCodde ($length, $code, $uid, $DATA="") {
// Fix missing _MAX constant
+ // @TODO Rewrite this unnice code
if (!defined('_MAX')) define('_MAX', 15235);
// Build server string
$keys = constant('SITE_KEY').":".constant('DATE_KEY');
if (isConfigEntrySet('secret_key')) $keys .= ":".getConfig('secret_key');
if (isConfigEntrySet('file_hash')) $keys .= ":".getConfig('file_hash');
- $keys .= ":".date("d-m-Y (l-F-T)", bigintval(getConfig('patch_ctime')));
+ $keys .= ":".date("d-m-Y (l-F-T)", getConfig(('patch_ctime')));
if (isConfigEntrySet('master_salt')) $keys .= ":".getConfig('master_salt');
// Build string from misc data
// Add more additional data
if (isSessionVariableSet('u_hash')) $data .= ":".get_session('u_hash');
- if (isset($GLOBALS['userid'])) $data .= ":".$GLOBALS['userid'];
- if (isSessionVariableSet('mxchange_theme')) $data .= ":".get_session('mxchange_theme');
- if (isSessionVariableSet('mx_lang')) $data .= ":".GET_LANGUAGE();
- if (isset($GLOBALS['refid'])) $data .= ":".$GLOBALS['refid'];
+ if (isUserIdSet()) $data .= ":".getUserId();
+ if (isSessionVariableSet('mxchange_theme')) $data .= ":".get_session('mxchange_theme');
+ if (isSessionVariableSet('mx_lang')) $data .= ":".GET_LANGUAGE();
+ if (isset($GLOBALS['refid'])) $data .= ":".$GLOBALS['refid'];
// Calculate number for generating the code
$a = $code + constant('_ADD') - 1;
$rcode = hexdec(substr($saltedHash, strlen(getConfig('master_salt')), 9)) / abs(constant('_MAX') - $a + sqrt(constant('_ADD'))) / pi();
} else {
// Generate hash with "hash of site key" from modula of number with the prime number and other data
- $saltedHash = generateHash(($a % constant('_PRIME')).":".$server.":".$keys.":".$data.":".date("d-m-Y (l-F-T)", time()).":".$a, substr(sha1(SITE_KEY), 0, 8));
+ $saltedHash = generateHash(($a % constant('_PRIME')).":".$server.":".$keys.":".$data.":".date("d-m-Y (l-F-T)", time()).":".$a, substr(sha1(constant('SITE_KEY')), 0, 8));
// Create number from hash
$rcode = hexdec(substr($saltedHash, 8, 9)) / abs(constant('_MAX') - $a + sqrt(constant('_ADD'))) / pi();
// Load email template
$msg = LOAD_EMAIL_TEMPLATE($template, $content, $UID);
- if (EXT_VERSION_IS_OLDER("admins", "0.4.0")) {
- // Older version detected!
- return SEND_ADMIN_EMAILS($subj, $msg);
- } // END - if
-
// Check which admin shall receive this mail
$result = SQL_QUERY_ESC("SELECT DISTINCT admin_id FROM `{!_MYSQL_PREFIX!}_admins_mails` WHERE mail_template='%s' ORDER BY admin_id",
- array($template), __FILE__, __LINE__);
+ array($template), __FUNCTION__, __LINE__);
if (SQL_NUMROWS($result) == 0) {
// Create new entry (to all admins)
SQL_QUERY_ESC("INSERT INTO `{!_MYSQL_PREFIX!}_admins_mails` (admin_id, mail_template) VALUES (0, '%s')",
- array($template), __FILE__, __LINE__);
+ array($template), __FUNCTION__, __LINE__);
} else {
// Load admin IDs...
- $aids = array();
- while (list($aid) = SQL_FETCHROW($result)) {
- $aids[] = $aid;
+ // @TODO This can be, somehow, rewritten
+ $adminIds = array();
+ while ($content = SQL_FETCHARRAY($result)) {
+ $adminIds[] = $content['admin_id'];
} // END - while
// Free memory
$result = false;
// "implode" IDs and query string
- $aid = implode(",", $aids);
+ $aid = implode(",", $adminIds);
if ($aid == "-1") {
if (EXT_IS_ACTIVE("events")) {
// Add line to user events
}
} elseif ($aid == "0") {
// Select all email adresses
- $result = SQL_QUERY("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` ORDER BY `id`", __FILE__, __LINE__);
+ $result = SQL_QUERY("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` ORDER BY `id`",
+ __FUNCTION__, __LINE__);
} else {
// If Admin-ID is not "to-all" select
- $result = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` WHERE id IN (%s) ORDER BY `id`", array($aid), __FILE__, __LINE__);
+ $result = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` WHERE id IN (%s) ORDER BY `id`",
+ array($aid), __FUNCTION__, __LINE__);
}
}
// Load email addresses and send away
- while (list($email) = SQL_FETCHROW($result)) {
- SEND_EMAIL($email, $subj, $msg);
+ while ($content = SQL_FETCHARRAY($result)) {
+ SEND_EMAIL($content['email'], $subj, $msg);
} // END - while
// Free memory
// Load navigation template
$OUT = LOAD_TEMPLATE("admin_email_nav_row", true);
- if ($return) {
+ if ($return === true) {
// Return generated HTML-Code
return $OUT;
} else {
$request = "GET /" . trim($script) . " HTTP/1.1\r\n";
$request .= "Host: " . $host . "\r\n";
$request .= "Referer: " . constant('URL') . "/admin.php\r\n";
- $request .= "User-Agent: " . constant('TITLE') . "/" . constant('FULL_VERSION') . "\r\n";
+ if (defined('FULL_VERSION')) {
+ $request .= "User-Agent: " . constant('TITLE') . "/" . constant('FULL_VERSION') . "\r\n";
+ } else {
+ $request .= "User-Agent: " . constant('TITLE') . "/?.?.?\r\n";
+ }
$request .= "Content-Type: text/plain\r\n";
$request .= "Cache-Control: no-cache\r\n";
$request .= "Connection: Close\r\n\r\n";
fputs($fp, $request);
// Read response
- while(!feof($fp)) {
+ while (!feof($fp)) {
$response[] = trim(fgets($fp, 1024));
} // END - while
}
// Taken from www.php.net eregi() user comments
-function VALIDATE_EMAIL($email) {
+function VALIDATE_EMAIL ($email) {
// Compile email
$email = COMPILE_CODE($email);
return isUrlValid($URL);
}
-//
+// Generate a list of administrative links to a given userid
function MEMBER_ACTION_LINKS ($uid, $status = "") {
// Define all main targets
$TARGETS = array("del_user", "edit_user", "lock_user", "add_points", "sub_points");
return $OUT;
}
-// Function for backward-compatiblity
-// @TODO Can this function be deprecated?
-function ADD_CATEGORY_TABLE ($MODE, $return=false) {
- // Load it from the register extension
- return REGISTER_ADD_CATEGORY_TABLE ($MODE, $return);
-}
-
// Generate an email link
function CREATE_EMAIL_LINK ($email, $table = "admins") {
// Default email link (INSECURE! Spammer can read this by harvester programs)
// Return email link
return $EMAIL;
}
+
// Generate a hash for extra-security for all passwords
function generateHash ($plainText, $salt = "") {
global $_SERVER;
$server = $_SERVER['PHP_SELF'].":".GET_USER_AGENT().":".getenv('SERVER_SOFTWARE').":".GET_REMOTE_ADDR().":".":".filemtime(constant('PATH')."inc/databases.php");
// Build key string
- $keys = constant('SITE_KEY').":".constant('DATE_KEY').":".getConfig('secret_key').":".getConfig('file_hash').":".date("d-m-Y (l-F-T)", bigintval(getConfig('patch_ctime'))).":".getConfig('master_salt');
+ $keys = constant('SITE_KEY').":".constant('DATE_KEY').":".getConfig('secret_key').":".getConfig('file_hash').":".date("d-m-Y (l-F-T)", getConfig(('patch_ctime'))).":".getConfig('master_salt');
// Additional data
$data = $plainText.":".uniqid(mt_rand(), true).":".time();
// Return hash
return $salt.sha1($salt.$plainText);
}
-//
+
+// Scramble a string
function scrambleString($str) {
// Init
$scrambled = "";
//* DEBUG: */ echo "***Scrambled=".$scrambled."***<br />";
return $scrambled;
}
-//
+
+// De-scramble a string scrambled by scrambleString()
function descrambleString($str) {
// Scramble only 40 chars long strings
if (strlen($str) != 40) return $str;
//* DEBUG: */ echo "+++Original=".$orig."+++<br />";
return $orig;
}
-//
+
+// Generated a "string" for scrambling
function genScrambleString ($len) {
// Prepare array for the numbers
$scrambleNumbers = array();
LOAD_INC_ONCE("inc/footer.php");
// Exit explicitly
- exit;
+ shutdown();
}
// Display parsing time and number of SQL queries in footer
// Check wether a boolean constant is set
// Taken from user comments in PHP documentation for function constant()
-function isBooleanConstantAndTrue($constName) { // : Boolean
+function isBooleanConstantAndTrue ($constName) { // : Boolean
// Failed by default
$res = false;
if (isset($GLOBALS['cache_array']['const'][$constName])) {
// Use cache
//* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ".$constName."-CACHE!<br />\n";
- $res = $GLOBALS['cache_array']['const'][$constName];
+ $res = ($GLOBALS['cache_array']['const'][$constName] === true);
} else {
// Check constant
//* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ".$constName."-RESOLVE!<br />\n";
- if (defined($constName)) $res = (constant($constName) === true);
+ if (defined($constName)) {
+ // Found!
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ".$constName."-FOUND!<br />\n";
+ $res = (constant($constName) === true);
+ } // END - if
// Set cache
$GLOBALS['cache_array']['const'][$constName] = $res;
// Fix it to default
$ret = "default";
} // END - if
- } elseif ((!isBooleanConstantAndTrue('mxchange_installed')) && ((isBooleanConstantAndTrue('mxchange_installing')) || ($GLOBALS['output_mode'] == true)) && ((REQUEST_ISSET_GET(('theme'))) || (REQUEST_ISSET_POST(('theme'))))) {
+ } elseif ((!isInstalled()) && ((isInstalling()) || ($GLOBALS['output_mode'] == true)) && ((REQUEST_ISSET_GET(('theme'))) || (REQUEST_ISSET_POST(('theme'))))) {
// Prepare FQFN for checking
- $theme = sprintf("%stheme/%s/theme.php", constant('PATH'), SQL_ESCAPE(REQUEST_GET('theme')));
+ $theme = sprintf("%stheme/%s/theme.php", constant('PATH'), REQUEST_GET(('theme')));
// Installation mode active
if ((REQUEST_ISSET_GET(('theme'))) && (FILE_READABLE($theme))) {
// Set cookie from URL data
- set_session('mxchange_theme', SQL_ESCAPE(REQUEST_GET('theme')));
+ set_session('mxchange_theme', REQUEST_GET(('theme')));
} elseif (FILE_READABLE(sprintf("%stheme/%s/theme.php", constant('PATH'), SQL_ESCAPE(REQUEST_POST('theme'))))) {
// Set cookie from posted data
set_session('mxchange_theme', SQL_ESCAPE(REQUEST_POST('theme')));
} elseif (GET_EXT_VERSION("cache") != "0.1.8") {
// Check if current theme is already imported or not
$result = SQL_QUERY_ESC("SELECT id FROM `{!_MYSQL_PREFIX!}_themes` WHERE theme_path='%s' LIMIT 1",
- array($name), __FILE__, __LINE__);
+ array($name), __FUNCTION__, __LINE__);
// Entry found?
if (SQL_NUMROWS($result) == 1) {
// Generates an error code from given account status
function GEN_ERROR_CODE_FROM_ACCOUNT_STATUS ($status) {
// Default error code if unknown account status
- $ERROR = constant('CODE_UNKNOWN_STATUS');
+ $ERROR = getCode('UNKNOWN_STATUS');
// Generate constant name
- $constantName = sprintf("CODE_ID_%s", $status);
+ $constantName = sprintf("ID_%s", $status);
// Is the constant there?
- if (defined($constantName)) {
+ if (isCodeSet($constantName)) {
// Then get it!
- $ERROR = constant($constantName);
+ $ERROR = getCode($constantName);
} else {
// Unknown status
DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Unknown error status %s detected.", $status));
} // END - if
}
+// Function to search for the last modifified file
+function searchDirsRecursive ($dir, &$last_changed) {
+ // Get dir as array
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):dir=".$dir."<br />\n";
+ $ds = GET_DIR_AS_ARRAY($dir, "", true, false);
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):ds[]=".count($ds)."<br />\n";
+
+ // Walk through all entries
+ foreach ($ds as $d) {
+ // Generate proper FQFN
+ $FQFN = str_replace("//", "/", constant('PATH') . $dir. "/". $d);
+
+ // Does it match what we are looking for? (We skip a lot files already!)
+ if (!preg_match('@(\.|\.\.|\.revision|\.svn|debug\.log|\.cache)$@', $d)) { // no . or .. or .revision or .svn in the filename
+ // Is it a file and readable?
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):FQFN={$FQFN}<br />\n";
+ if (isDirectory($FQFN)) {
+ // $FQFN is a directory so also crawl into this directory
+ $newDir = $d;
+ if (!empty($dir)) $newDir = $dir . "/". $d;
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):DESCENT: ".$newDir."<br />\n";
+ searchDirsRecursive($newDir, $last_changed);
+ } elseif (FILE_READABLE($FQFN)) {
+ // $FQFN is a filename and no directory
+ $time = filemtime($FQFN);
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):File: ".$d." found. (".($last_changed['time'] - $time).")<br />\n";
+ if ($last_changed['time'] < $time) {
+ // This file is newer as the file before
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>) - NEWER!<br />\n";
+ $last_changed['path_name'] = $FQFN;
+ $last_changed['time'] = $time;
+ } // END - if
+ }
+ } // END - if
+ } // END - foreach
+}
+
// "Getter" for revision/version data
-function getActualVersion ($type = 0) {
+function getActualVersion ($type = 'Revision') {
// By default nothing is new... ;-)
$new = false;
- // FQFN of revision file
- $FQFN = sprintf("%sinc/cache/.revision", constant('PATH'));
+ if (EXT_IS_ACTIVE("cache")) {
+ // Check if $_GET['check_revision_data'] is setted (switch for manually rewrite the .revision-File)
+ if (isset($_GET['check_revision_data']) && $_GET['check_revision_data'] == 'yes') $new = true;
+ if (!isset($GLOBALS['cache_array']['revision'][$type])
+ || count($GLOBALS['cache_array']['revision']) < 3
+ || !$GLOBALS['cache_instance']->loadCacheFile("revision")) $new = true;
+
+ // Is the cache file outdated/invalid?
+ if ($new === true){
+ $GLOBALS['cache_instance']->destroyCacheFile(); // @TODO isn't it better to do $GLOBALS['cache_instance']->destroyCacheFile('revision')?
+
+ // @TODO shouldn't do the unset and the reloading $GLOBALS['cache_instance']->destroyCacheFile() Or a new methode like forceCacheReload('revision')?
+ unset($GLOBALS['cache_array']['revision']);
+
+ // Reload load_cach-revison.php
+ LOAD_INC("inc/loader/load_cache-revision.php");
+ } // END - if
+
+ // Return found value
+ return $GLOBALS['cache_array']['revision'][$type][0];
- // Check for revision file
- if (!FILE_READABLE($FQFN)) {
- // Not found, so we need to create it
- $new = true;
} else {
- // Revision file found
- $ins_vers = explode("\n", READ_FILE($FQFN));
+ // Old Version without ext-cache active (deprecated ?)
+
+ // FQFN of revision file
+ $FQFN = sprintf("%sinc/cache/.revision", constant('PATH'));
- // Is the content valid?
- if ((!is_array($ins_vers)) || (count($ins_vers) <= 0) || (!isset($ins_vers[$type])) || ($ins_vers[0]) == "new") {
- // File needs update!
+ // Check if $_GET['check_revision_data'] is setted (switch for manually rewrite the .revision-File)
+ if ((isset($_GET['check_revision_data'])) && ($_GET['check_revision_data'] == 'yes')) {
+ // Has changed!
$new = true;
} else {
- // Revision-File has valid Data and isn't 'new' so return the Rev-Number
- return trim($ins_vers[$type]);
+ // Check for revision file
+ if (!FILE_READABLE($FQFN)) {
+ // Not found, so we need to create it
+ $new = true;
+ } else {
+ // Revision file found
+ $ins_vers = explode("\n", READ_FILE($FQFN));
+
+ // Get array for mapping information
+ $mapper = array_flip(getSearchFor());
+ //* DEBUG: */ print("<pre>".print_r($mapper, true).print_r($ins_vers, true)."</pre>");
+
+ // Is the content valid?
+ if ((!is_array($ins_vers)) || (count($ins_vers) <= 0) || (!isset($ins_vers[$mapper[$type]])) || (trim($ins_vers[$mapper[$type]]) == "") || ($ins_vers[0]) == "new") {
+ // File needs update!
+ $new = true;
+ } else {
+ // Return found value
+ return trim($ins_vers[$mapper[$type]]);
+ }
+ }
}
+
+ // Has it been updated?
+ if ($new === true) {
+ WRITE_FILE($FQFN, implode("\n", getAkt_vers()));
+ } // END - if
}
+}
- // Has it been updated?
- if ($new === true) {
- // No Revision-File or has no valid Data so read the Revision from the Server.
- $version = GET_URL("check-updates3.php");
+// Repares an array we are looking for
+function getSearchFor () {
+ // Add Revision, Date, Tag and Author
+ $searchFor = array('Revision', 'Date', 'Tag', 'Author');
+
+ // Return the created array
+ return $searchFor;
+}
+
+function getAkt_vers () {
+ // Init variables
+ $next_dir = "";
+ $last_changed = array(
+ 'path_name' => "",
+ 'time' => 0
+ );
+ $akt_vers = array();
+ $res = 0;
+
+ // Searches all Files and there date of the last modifikation and puts the newest File in $last_changed.
+ searchDirsRecursive($next_dir, $last_changed);
+
+ // Get file
+ $last_file = READ_FILE($last_changed['path_name']);
+ $searchFor = getSearchFor();
+ // @TODO What does this loop/regex do? Document it, please.
+ foreach ($searchFor as $search) {
+ $res += preg_match('@\$'.$search.'(:|::) (.*) \$@U', $last_file, $t);
+ if (isset($t[2])) $akt_vers[$search] = trim($t[2]);
+ } // END - foreach
+
+ if ($res && $res >= 3) {
// Prepare content
- $akt_vers[] = trim($version[10]);
- $akt_vers[] = trim($version[9]);
- $akt_vers[] = trim($version[8]);
+ preg_match('@(....)-(..)-(..) (..):(..):(..)@', $akt_vers['Date'], $match_d);
- // Write file
- WRITE_FILE($FQFN, implode("\n", $akt_vers));
+ // Prepare timestamp for date
+ $akt_vers['Date'] = mktime($match_d[4], $match_d[5], $match_d[6], $match_d[2], $match_d[3], $match_d[1]);
- // Return requested content
- return trim($akt_vers[$type]);
+ // Add Tag if the author is set and is not quix0r (lead coder)
+ if ((isset($akt_vers['Author'])) && ($akt_vers['Author'] != "quix0r")) {
+ $akt_vers['Tag'] .= '-'.strtoupper($akt_vers['Author']);
+ } // END - if
+ } else {
+ // No valid Data from the last modificated file so read the Revision from the Server. Fallback-solution!! Could be removed I think.
+ $version = GET_URL("check-updates3.php");
+
+ // Prepare content
+ $akt_vers['Revision'] = trim($version[10]);
+ $akt_vers['Date'] = trim($version[9]);
+ $akt_vers['Tag'] = trim($version[8]);
+ $akt_vers['Author'] = "quix0r";
}
+
+ // Return prepared array
+ return $akt_vers;
}
+
// Loads an include file and logs any missing files for debug purposes
function LOAD_INC ($INC) {
- // Get constant path
- $PATH = constant('PATH');
-
- // Use the include file name directly
- // @TODO Try to find all locations where an FQFN is given to these two
- // @TODO functions and avoid it.
- $FQFN = $INC;
-
- // Check if PATH is in $INC
- if (substr($INC, 0, $PATH) != $PATH) {
- // Add it. This is why we need a trailing slash in config.php
- $FQFN = $PATH . $INC;
- } // END - if
+ // Add the path. This is why we need a trailing slash in config.php
+ $FQFN = constant('PATH') . $INC;
// Is the include file there?
if (!FILE_READABLE($FQFN)) {
// Not there so log it
- DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Include file %s not found.", basename($INC)));
+ debug_report_bug(sprintf("Include file %s not found.", $INC));
return false;
} // END - if
// Loads an include file once
function LOAD_INC_ONCE ($INC) {
// Is it not loaded?
- if (!isset($GLOBALS['cache_array']['load_once'][$INC])) {
+ if (!isset($GLOBALS['load_once'][$INC])) {
// Then try to load it
LOAD_INC($INC);
// And mark it as loaded
- $GLOBALS['cache_array']['load_once'][$INC] = true;
+ $GLOBALS['load_once'][$INC] = "loaded";
} // END - if
}
// Get and prepare backtrace for output
$backtraceArray = debug_backtrace();
foreach ($backtraceArray as $key => $trace) {
- if (!isset($trace['file'])) $trace['file'] = __FILE__;
+ if (!isset($trace['file'])) $trace['file'] = __FUNCTION__;
if (!isset($trace['line'])) $trace['line'] = __LINE__;
if (!isset($trace['args'])) $trace['args'] = array();
$backtrace .= "<li class=\"debug_list\"><span class=\"backtrace_file\">".basename($trace['file'])."</span>:".$trace['line'].", <span class=\"backtrace_function\">".$trace['function']."(".count($trace['args']).")</span></li>\n";
} // END - if
// Add output
- $debug .= ("Please report this error at <a href=\"http://bugs.mxchange.org\" rel=\"external\" target=\"_blank\">bugs.mxchange.org</a>:<pre>");
- $debug .= (debug_get_printable_backtrace());
- $debug .= ("</pre>Thank you for your help finding bugs.");
+ $debug .= "Please report this error at <a href=\"http://bugs.mxchange.org\" rel=\"external\" target=\"_blank\">bugs.mxchange.org</a>:<pre>";
+ $debug .= debug_get_printable_backtrace();
+ $debug .= "</pre>Thank you for finding bugs.";
// And abort here
+ // @TODO This cannot be rewritten to mxchange_die(), try to find a solution for this.
die($debug);
}
function convertCodeToMessage ($code) {
$msg = "";
switch ($code) {
- case constant('CODE_LOGOUT_DONE') : $msg = getMessage('LOGOUT_DONE'); break;
- case constant('CODE_LOGOUT_FAILED') : $msg = "<span class=\"guest_failed\">{--LOGOUT_FAILED--}</span>"; break;
- case constant('CODE_DATA_INVALID') : $msg = getMessage('MAIL_DATA_INVALID'); break;
- case constant('CODE_POSSIBLE_INVALID') : $msg = getMessage('MAIL_POSSIBLE_INVALID'); break;
- case constant('CODE_ACCOUNT_LOCKED') : $msg = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break;
- case constant('CODE_USER_404') : $msg = getMessage('USER_NOT_FOUND'); break;
- case constant('CODE_STATS_404') : $msg = getMessage('MAIL_STATS_404'); break;
- case constant('CODE_ALREADY_CONFIRMED'): $msg = getMessage('MAIL_ALREADY_CONFIRMED'); break;
-
- case constant('CODE_ERROR_MAILID'):
+ case getCode('LOGOUT_DONE') : $msg = getMessage('LOGOUT_DONE'); break;
+ case getCode('LOGOUT_FAILED') : $msg = "<span class=\"guest_failed\">{--LOGOUT_FAILED--}</span>"; break;
+ case getCode('DATA_INVALID') : $msg = getMessage('MAIL_DATA_INVALID'); break;
+ case getCode('POSSIBLE_INVALID') : $msg = getMessage('MAIL_POSSIBLE_INVALID'); break;
+ case getCode('ACCOUNT_LOCKED') : $msg = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break;
+ case getCode('USER_404') : $msg = getMessage('USER_NOT_FOUND'); break;
+ case getCode('STATS_404') : $msg = getMessage('MAIL_STATS_404'); break;
+ case getCode('ALREADY_CONFIRMED'): $msg = getMessage('MAIL_ALREADY_CONFIRMED'); break;
+
+ case getCode('ERROR_MAILID'):
if (EXT_IS_ACTIVE($ext, true)) {
$msg = getMessage('ERROR_CONFIRMING_MAIL');
} else {
}
break;
- case constant('CODE_EXTENSION_PROBLEM'):
+ case getCode('EXTENSION_PROBLEM'):
if (REQUEST_ISSET_GET(('ext'))) {
- $msg = sprintf(getMessage('EXTENSION_PROBLEM_EXT_INACTIVE'), SQL_ESCAPE(REQUEST_GET('ext')));
+ $msg = sprintf(getMessage('EXTENSION_PROBLEM_EXT_INACTIVE'), REQUEST_GET(('ext')));
} else {
$msg = getMessage('EXTENSION_PROBLEM_UNSET_EXT');
}
break;
- case constant('CODE_COOKIES_DISABLED') : $msg = getMessage('LOGIN_NO_COOKIES'); break;
- case constant('CODE_BEG_SAME_AS_OWN') : $msg = getMessage('BEG_SAME_UID_AS_OWN'); break;
- case constant('CODE_LOGIN_FAILED') : $msg = getMessage('LOGIN_FAILED_GENERAL'); break;
+ case getCode('COOKIES_DISABLED') : $msg = getMessage('LOGIN_NO_COOKIES'); break;
+ case getCode('BEG_SAME_AS_OWN') : $msg = getMessage('BEG_SAME_UID_AS_OWN'); break;
+ case getCode('LOGIN_FAILED') : $msg = getMessage('LOGIN_FAILED_GENERAL'); break;
default : $msg = sprintf(getMessage('UNKNOWN_MAILID_CODE'), $code); break;
} // END - switch
// Is the extension uninstalled/inactive?
if (!EXT_IS_ACTIVE($ext_name)) {
// Redirect to index
- LOAD_URL("modules.php?module=index&msg=".constant('CODE_EXTENSION_PROBLEM')."&ext=".$ext_name);
+ LOAD_URL("modules.php?module=index&msg=".getCode('EXTENSION_PROBLEM')."&ext=".$ext_name);
} // END - if
}
// Generate a "link" for the given admin id (aid)
function GENERATE_AID_LINK ($aid) {
// No assigned admin is default
- $admin = "<div class=\"admin_note\">{--ADMIN_NO_ADMIN_ASSIGNED--}</div>";
+ $admin = "<span class=\"admin_note\">{--ADMIN_NO_ADMIN_ASSIGNED--}</span>";
// Zero? = Not assigned
- if ($aid == "0") {
+ if ($aid > 0) {
// Load admin's login
$login = GET_ADMIN_LOGIN($aid);
if ($login != "***") {
$tmp = $FQFN.".tmp";
// Open the source file
- $fp = @fopen($FQFN, 'r') or OUTPUT_HTML("<strong>READ:</strong> ".$FQFN."<br />");
+ $fp = fopen($FQFN, 'r') or OUTPUT_HTML("<strong>READ:</strong> ".$FQFN."<br />");
// Is the resource valid?
if (is_resource($fp)) {
// Open temporary file
- $fp_tmp = @fopen($tmp, 'w') or OUTPUT_HTML("<strong>WRITE:</strong> ".$tmp."<br />");
+ $fp_tmp = fopen($tmp, 'w') or OUTPUT_HTML("<strong>WRITE:</strong> ".$tmp."<br />");
// Is the resource again valid?
if (is_resource($fp_tmp)) {
if (($done) && ($found)) {
// Copy back tmp file and delete tmp :-)
- @copy($tmp, $FQFN);
- @unlink($tmp);
- define('_FATAL', false);
+ copy($tmp, $FQFN);
+ return unlink($tmp);
} elseif (!$found) {
OUTPUT_HTML("<strong>CHANGE:</strong> 404!");
- define('_FATAL', true);
} else {
OUTPUT_HTML("<strong>TMP:</strong> UNDONE!");
- define('_FATAL', true);
}
}
} else {
// File not found, not readable or writeable
OUTPUT_HTML("<strong>404:</strong> ".$FQFN."<br />");
}
+
+ // An error was detected!
+ return false;
}
// Send notification to admin
-function SEND_ADMIN_NOTIFICATION($subject, $templateName, $content=array(), $uid="0") {
+function SEND_ADMIN_NOTIFICATION ($subject, $templateName, $content=array(), $uid="0") {
if (GET_EXT_VERSION("admins") >= "0.4.1") {
// Send new way
SEND_ADMIN_EMAILS_PRO($subject, $templateName, $content, $uid);
} else {
- // Send outdated way
+ // Send out out-dated way
$msg = LOAD_EMAIL_TEMPLATE($templateName, $content, $uid);
SEND_ADMIN_EMAILS($subject, $msg);
}
// Debug message logger
function DEBUG_LOG ($funcFile, $line, $message, $force=true) {
// Is debug mode enabled?
- if ((isBooleanConstantAndTrue('DEBUG_MODE')) || ($force === true)) {
+ if ((isDebugModeEnabled()) || ($force === true)) {
+ // Remove CRLF
+ $message = str_replace("\r", "", str_replace("\n", "", $message));
+
// Log this message away
$fp = fopen(constant('PATH')."inc/cache/debug.log", 'a') or mxchange_die("Cannot write logfile debug.log!");
fwrite($fp, date("d.m.Y|H:i:s", time())."|".basename($funcFile)."|".$line."|".strip_tags($message)."\n");
}
// Reads a directory with PHP files in and gets only files back
-function GET_DIR_AS_ARRAY ($baseDir, $prefix) {
+function GET_DIR_AS_ARRAY ($baseDir, $prefix, $includeDirs = false, $addBaseDir = true) {
+ // Init includes
$INCs = array();
// Open directory
- $dirPointer = opendir($baseDir) or mxchange_die("Cannot read ".basename($baseDir)." path!");
+ $dirPointer = opendir(constant('PATH') . $baseDir) or mxchange_die("Cannot read ".basename($baseDir)." path!");
// Read all entries
while ($baseFile = readdir($dirPointer)) {
- // Load file only if extension is active
- // Make full path
- $FQFN = $baseDir.$baseFile;
+ // Construct include filename and FQFN
+ $INC = $baseDir . "/" . $baseFile;
+ $FQFN = constant('PATH') . $INC;
// Is this a valid reset file?
//* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):baseDir={$baseDir},prefix={$prefix},baseFile={$baseFile}<br />\n";
- if ((FILE_READABLE($FQFN)) && (substr($baseFile, 0, strlen($prefix)) == $prefix) && (substr($baseFile, -4, 4) == ".php")) {
+ if (((FILE_READABLE($FQFN)) && (substr($baseFile, 0, strlen($prefix)) == $prefix) && (substr($baseFile, -4, 4) == ".php")) || (($includeDirs) && (isDirectory($FQFN)))) {
// Remove both for extension name
$extName = substr($baseFile, strlen($prefix), -4);
// Is the extension valid and active?
if (($extId > 0) && (EXT_IS_ACTIVE($extName))) {
// Then add this file
- $INCs[] = $FQFN;
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): Extension entry ".$baseFile." added.<br />\n";
+ $INCs[] = $INC;
} elseif ($extId == 0) {
// Add non-extension files as well
- $INCs[] = $FQFN;
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): Regular entry ".$baseFile." added.<br />\n";
+ if ($addBaseDir) {
+ $INCs[] = $INC;
+ } else {
+ $INCs[] = $baseFile;
+ }
}
} // END - if
} // END - while
}
// Load more reset scripts
-function RESET_ADD_INCLUDES () {
+function runResetIncludes () {
// Is the reset set or old sql_patches?
- if ((!defined('__DAILY_RESET')) || (EXT_VERSION_IS_OLDER("sql_patches", "0.4.5"))) {
+ if ((!isResetModeEnabled()) || (EXT_VERSION_IS_OLDER("sql_patches", "0.4.5"))) {
// Then abort here
- return array();
+ DEBUG_LOG(__FUNCTION__, __LINE__, "Cannot run reset! Please report this bug. Thanks");
} // END - if
// Get more daily reset scripts
- $INC_POOL = GET_DIR_AS_ARRAY(constant('PATH')."inc/reset/", "reset_");
+ $INC_POOL = GET_DIR_AS_ARRAY("inc/reset/", "reset_");
// Update database
if (!defined('DEBUG_RESET')) UPDATE_CONFIG("last_update", time());
- // Create current week mark
- $currWeek = date("W", time());
+ // Is the config entry set?
+ if (GET_EXT_VERSION("sql_patches") >= "0.4.2") {
+ // Create current week mark
+ $currWeek = date("W", time());
- // Has it changed?
- if (getConfig('last_week') != $currWeek) {
- // Include weekly reset scripts
- $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY(constant('PATH')."inc/weekly/", "weekly_"));
+ // Has it changed?
+ if (getConfig('last_week') != $currWeek) {
+ // Include weekly reset scripts
+ $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY("inc/weekly/", "weekly_"));
- // Update config
- if (!defined('DEBUG_WEEKLY')) UPDATE_CONFIG("last_week", $currWeek);
- } // END - if
+ // Update config
+ if (!defined('DEBUG_WEEKLY')) UPDATE_CONFIG("last_week", $currWeek);
+ } // END - if
- // Create current month mark
- $currMonth = date("m", time());
+ // Create current month mark
+ $currMonth = date("m", time());
- // Has it changed?
- if (getConfig('last_month') != $currMonth) {
- // Include monthly reset scripts
- $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY(constant('PATH')."inc/monthly/", "monthly_"));
+ // Has it changed?
+ if (getConfig('last_month') != $currMonth) {
+ // Include monthly reset scripts
+ $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY("inc/monthly/", "monthly_"));
- // Update config
- if (!defined('DEBUG_MONTHLY')) UPDATE_CONFIG("last_month", $currMonth);
+ // Update config
+ if (!defined('DEBUG_MONTHLY')) UPDATE_CONFIG("last_month", $currMonth);
+ } // END - if
} // END - if
- // Return array
- return $INC_POOL;
+ // Run the filter
+ runFilterChain('load_includes', $INC_POOL);
}
// Handle extra values
}
// Check if given FQFN is a readable file
-function FILE_READABLE($fqfn) {
+function FILE_READABLE ($FQFN) {
// Check all...
- return ((file_exists($fqfn)) && (is_file($fqfn)) && (is_readable($fqfn)));
+ return ((file_exists($FQFN)) && (is_file($FQFN)) && (is_readable($FQFN)));
}
// Converts timestamp selections into a timestamp
-function CONVERT_SELECTIONS_TO_TIMESTAMP(&$POST, &$DATA, &$id, &$skip) {
+function CONVERT_SELECTIONS_TO_TIMESTAMP (&$POST, &$DATA, &$id, &$skip) {
// Init test variable
$test2 = "";
} // END - if
} else {
// Process this entry
- $skip = false; $test2 = "";
+ $skip = false;
+ $test2 = "";
}
}
}
// Rebuild cache
-function REBUILD_CACHE ($cache, $inc="") {
+function rebuildCacheFiles ($cache, $inc="") {
// Shall I remove the cache file?
- if ((EXT_IS_ACTIVE("cache")) && (is_object($GLOBALS['cache_instance']))) {
+ if ((EXT_IS_ACTIVE("cache")) && (isCacheInstanceValid())) {
// Rebuild cache
if ($GLOBALS['cache_instance']->loadCacheFile($cache)) {
// Destroy it
if (!EXT_IS_ACTIVE("cache")) {
// Cache extension not active
return false;
- } elseif (!is_object($GLOBALS['cache_instance'])) {
+ } elseif (!isCacheInstanceValid()) {
// No cache instance!
DEBUG_LOG(__FUNCTION__, __LINE__, " No cache instance found.");
return false;
$GLOBALS['refid'] = bigintval(get_session('refid'));
} elseif ((GET_EXT_VERSION("sql_patches") != "") && (getConfig('def_refid') > 0)) {
// Set default refid as refid in URL
- $GLOBALS['refid'] = bigintval(getConfig('def_refid'));
+ $GLOBALS['refid'] = getConfig(('def_refid'));
} elseif ((GET_EXT_VERSION("user") >= "0.3.4") && (getConfig('select_user_zero_refid')) == "Y") {
// Select a random user which has confirmed enougth mails
$GLOBALS['refid'] = SELECT_RANDOM_REFID();
return $GLOBALS['refid'];
}
+// Check wether we are installing
+function isInstalling () {
+ $installing = ((isset($GLOBALS['mxchange_installing'])) || (REQUEST_ISSET_GET('installing')));
+ //* DEBUG: */ var_dump($installing);
+ return $installing;
+}
+
+// Check wether this script is installed
+function isInstalled () {
+ return isBooleanConstantAndTrue('mxchange_installed');
+}
+
+// Check wether an admin is registered
+function isAdminRegistered () {
+ return isBooleanConstantAndTrue('admin_registered');
+}
+
+// Enables the reset mode. Only call this function if you really want the
+// reset to be run!
+function enableResetMode () {
+ // Enable the reset mode
+ $GLOBALS['reset_enabled'] = true;
+
+ // Run filters
+ runFilterChain('reset_enabled');
+}
+
+// Checks wether the reset mode is active
+function isResetModeEnabled () {
+ // Now simply check it
+ return ((isset($GLOBALS['reset_enabled'])) && ($GLOBALS['reset_enabled'] === true));
+}
+
+// Checks wether the debug mode is enabled
+function isDebugModeEnabled () {
+ // Simply check it
+ return isBooleanConstantAndTrue('DEBUG_MODE');
+}
+
+// Checks wether the cache instance is valid
+function isCacheInstanceValid () {
+ return ((isset($GLOBALS['cache_instance'])) && (is_object($GLOBALS['cache_instance'])));
+}
+
+// Our shutdown-function
+function shutdown () {
+ // Call the filter chain 'shutdown'
+ runFilterChain('shutdown', null, false);
+
+ if (SQL_IS_LINK_UP()) {
+ // Close link
+ SQL_CLOSE(__FILE__, __LINE__);
+ } elseif (!isInstalling()) {
+ // No database link
+ addFatalMessage(__FILE__, __LINE__, getMessage('NO_DB_LINK_SHUTDOWN'));
+ }
+
+ // Stop executing here
+ exit;
+}
+
+// Setter for userid
+function setUserId ($userid) {
+ $GLOBALS['userid'] = bigintval($userid);
+}
+
+// Getter for userid or returns zero
+function getUserId () {
+ // Default userid
+ $userid = 0;
+
+ // Is the userid set?
+ if (isUserIdSet()) {
+ // Then use it
+ $userid = $GLOBALS['userid'];
+ } // END - if
+
+ // Return it
+ return $userid;
+}
+
+// Checks ether the userid is set
+function isUserIdSet () {
+ return (isset($GLOBALS['userid']));
+}
+
+// Checks wether the given FQFN is a directory and not .,.. or .svn
+function isDirectory ($FQFN) {
+ // Generate baseName
+ $baseName = basename($FQFN);
+
+ // Check it
+ $isDirectory = ((is_dir($FQFN)) && ($baseName != ".") && ($baseName != "..") && ($baseName != ".svn"));
+
+ // Return the result
+ return $isDirectory;
+}
+
//////////////////////////////////////////////////
// AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //
//////////////////////////////////////////////////