// Was that eval okay?
if (empty($newContent)) {
// Something went wrong!
- debug_report_bug('Evaluation error:<pre>' . linenumberCode($eval) . '</pre>');
+ debug_report_bug('Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', false);
} // END - if
$GLOBALS['output'] = $newContent;
} else {
// Add surrounding HTML comments to help finding bugs faster
$ret = '<!-- Template ' . $template . " - Start -->\n" . $GLOBALS['tpl_content'] . '<!-- Template ' . $template . " - End -->\n";
- $eval = '$ret = "' . escapeQuotes($ret) . '";';
+ $eval = '$ret = "' . compileRawCode(escapeQuotes($ret)) . '";';
} // END - if
// Cache the eval() command here
eval("\$toEmail = \"".compileRawCode(escapeQuotes($toEmail))."\";");
// Compile "MSG"
- eval("\$message = \"".compileRawCode(escapeQuotes($message))."\";");
+ eval("\$message = \"".str_replace('$', '$', compileRawCode(escapeQuotes($message)))."\";");
// Fix HTML parameter (default is no!)
if (empty($isHtml)) $isHtml = 'N';
// Don't de-refer our own links!
if (substr($URL, 0, strlen(getConfig('URL'))) != getConfig('URL')) {
// De-refer this link
- $URL = '{?URL?}/modules.php?module=loader&url=' . encodeString(compileUriCode($URL));
+ $URL = '{%url=modules.php?module=loader&url=' . encodeString(compileUriCode($URL)) . '%}';
} // END - if
// Return link
// Generates an URL for the frametester
function generateFrametesterUrl ($URL) {
// Prepare frametester URL
- $frametesterUrl = sprintf("{?URL?}/modules.php?module=frametester&url=%s",
+ $frametesterUrl = sprintf("{%%url=modules.php?module=frametester&url=%s%%}",
encodeString(compileUriCode($URL))
);
// Generate XHTML code for the CAPTCHA
function generateCaptchaCode ($code, $type, $DATA, $userid) {
- return '<img border="0" alt="Code ' . $code . '" src="{?URL?}/mailid_top.php?userid=' . $userid . '&' . $type . '=' . $DATA . '&mode=img&code=' . $code . '" />';
+ return '<img border="0" alt="Code ' . $code . '" src="{%url=mailid_top.php?userid=' . $userid . '&' . $type . '=' . $DATA . '&mode=img&code=' . $code . '%}" />';
}
// Generates a timestamp (some wrapper for mktime())
// Redirects to an URL and if neccessarry extends it with own base URL
function redirectToUrl ($URL) {
// Compile out codes
- eval('$URL = "' . compileRawCode($URL) . '";');
-
- // Check if http(s):// is there
- if ((substr($URL, 0, 7) != 'http://') && (substr($URL, 0, 8) != 'https://')) {
- // Make all URLs full-qualified
- $URL = getConfig('URL') . '/' . $URL;
- } // END - if
-
- // Three different debug ways...
- //* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'URL=' . $URL);
- //* DEBUG: */ die($URL);
+ eval('$URL = "' . compileRawCode(encodeUrl($URL)) . '";');
// Default 'rel' value is external, nofollow is evil from Google and hurts the Internet
$rel = ' rel="external"';
clearOutputBuffer();
} // END - if
+ // Three different ways to debug...
+ //* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'URL=' . $URL);
+ //* DEBUG: */ die($URL);
+
// Simple probe for bots/spiders from search engines
if ((strpos(detectUserAgent(), 'spider') !== false) || (strpos(detectUserAgent(), 'bot') !== false)) {
// Secure the URL against bad things such als HTML insertions and so on...
if ($constants === true) {
// BEFORE 0.2.1 : Language and data constants
// WITH 0.2.1+ : Only language constants
- $code = str_replace('{--', "\".getMessage('", str_replace('--}', "').\"", $code));
+ $code = str_replace('{--', "\" . getMessage('", str_replace('--}', "') . \"", $code));
// BEFORE 0.2.1 : Not used
// WITH 0.2.1+ : Data constants
- $code = str_replace('{!', "\".constant('", str_replace("!}", "').\"", $code));
+ $code = str_replace('{!', "\" . constant('", str_replace('!}', "') . \"", $code));
} // END - if
// Compile QUOT and other non-HTML codes
debug_report_bug('img_code ' . $img_code .' has invalid length. img_code()=' . strlen($img_code) . ' code_length=' . getConfig('code_length'));
} elseif ($headerSent === false) {
// Return an HTML code here
- return "<img src=\"{?URL?}/img.php?code=" . $img_code."\" alt=\"Image\" />\n";
+ return "<img src=\"{%url=img.php?code=" . $img_code."%}\" alt=\"Image\" />\n";
}
// Load image
$NAV .= '<strong>-';
} else {
// Open anchor tag and add base URL
- $NAV .= '<a href="{?URL?}/modules.php?module=admin&what=' . getWhat() . '&page=' . $page . '&offset=' . $offset;
+ $NAV .= '<a href="{%url=modules.php?module=admin&what=' . getWhat() . '&page=' . $page . '&offset=' . $offset;
// Add userid when we shall show all mails from a single member
if ((isGetRequestElementSet('userid')) && (bigintval(getRequestElement('userid')) > 0)) $NAV .= '&userid=' . bigintval(getRequestElement('userid'));
// Close open anchor tag
- $NAV .= '">';
+ $NAV .= '%}">';
}
$NAV .= $page;
if (($page == getRequestElement('page')) || ((!isGetRequestElementSet('page')) && ($page == 1))) {
$OUT = "[ ";
foreach ($targetArray as $tar) {
- $OUT .= "<span class=\"admin_user_link\"><a href=\"{?URL?}/modules.php?module=admin&what=" . $tar . "&userid=" . $userid . "\" title=\"{--ADMIN_LINK_";
+ $OUT .= "<span class=\"admin_user_link\"><a href=\"{%url=modules.php?module=admin&what=" . $tar . "&userid=" . $userid . "%}\" title=\"{--ADMIN_LINK_";
//* DEBUG: */ outputHtml("*" . $tar.'/' . $status."*<br />");
if (($tar == 'lock_user') && ($status == 'LOCKED')) {
// Locked accounts shall be unlocked
// The default theme is 'default'... ;-)
$ret = 'default';
- // Load default theme if not empty from configuration
- if ((isConfigEntrySet('default_theme')) && (getConfig('default_theme') != '')) $ret = getConfig('default_theme');
-
- if (!isSessionVariableSet('mxchange_theme')) {
- // Set default theme
- setTheme($ret);
- } elseif ((isSessionVariableSet('mxchange_theme')) && (isExtensionInstalledAndNewer('sql_patches', '0.1.4'))) {
- //die("<pre>".print_r($GLOBALS['cache_array']['themes'], true)."</pre>");
- // Get theme from cookie
- $ret = getSession('mxchange_theme');
-
- // Is it valid?
- if (getThemeId($ret) == '0') {
- // Fix it to default
- $ret = 'default';
- } // END - if
- } elseif ((!isInstalled()) && ((isInstalling()) || (getOutputMode() == true)) && ((isGetRequestElementSet('theme')) || (isPostRequestElementSet('theme')))) {
- // Prepare FQFN for checking
- $theme = sprintf("%stheme/%s/theme.php", getConfig('PATH'), getRequestElement('theme'));
-
- // Installation mode active
- if ((isGetRequestElementSet('theme')) && (isFileReadable($theme))) {
- // Set cookie from URL data
- setTheme(getRequestElement('theme'));
- } elseif (isFileReadable(sprintf("%stheme/%s/theme.php", getConfig('PATH'), secureString(postRequestElement('theme'))))) {
- // Set cookie from posted data
- setTheme(secureString(postRequestElement('theme')));
- }
-
- // Set return value
- $ret = getSession('mxchange_theme');
- } else {
- // Invalid design, reset cookie
- setTheme($ret);
- }
+ // Do we have ext-theme installed and active?
+ if (isExtensionActive('theme')) {
+ // Call inner method
+ $ret = getActualTheme();
+ } // END - if
// Return theme value
return $ret;
}
-// Setter for theme in session
-function setTheme ($newTheme) {
- setSession('mxchange_theme', $newTheme);
-}
-
-// Get id from theme
-// @TODO Try to move this to inc/libs/theme_functions.php
-function getThemeId ($name) {
- // Is the extension 'theme' installed?
- if (!isExtensionActive('theme')) {
- // Then abort here
- return 0;
- } // END - if
-
- // Default id
- $id = '0';
-
- // Is the cache entry there?
- if (isset($GLOBALS['cache_array']['themes']['id'][$name])) {
- // Get the version from cache
- $id = $GLOBALS['cache_array']['themes']['id'][$name];
-
- // Count up
- incrementStatsEntry('cache_hits');
- } elseif (isExtensionInstalledAndNewer('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), __FUNCTION__, __LINE__);
-
- // Entry found?
- if (SQL_NUMROWS($result) == 1) {
- // Fetch data
- list($id) = SQL_FETCHROW($result);
- } // END - if
-
- // Free result
- SQL_FREERESULT($result);
- }
-
- // Return id
- return $id;
-}
-
// Generates an error code from given account status
function generateErrorCodeFromUserStatus ($status='') {
// If no status is provided, use the default, cached
return $backtrace;
}
+// A mail-able backtrace
+function debug_get_mailable_backtrace () {
+ // Init variable
+ $backtrace = '';
+
+ // Get and prepare backtrace for output
+ $backtraceArray = debug_backtrace();
+ foreach ($backtraceArray as $key => $trace) {
+ if (!isset($trace['file'])) $trace['file'] = __FUNCTION__;
+ if (!isset($trace['line'])) $trace['line'] = __LINE__;
+ if (!isset($trace['args'])) $trace['args'] = array();
+ $backtrace .= ($key+1) . '.:' . basename($trace['file']) . ':' . $trace['line'] . ', ' . $trace['function'] . '(' . count($trace['args']) . ")\n";
+ } // END - foreach
+
+ // Return the backtrace
+ return $backtrace;
+}
+
// Output a debug backtrace to the user
-function debug_report_bug ($message = '') {
+function debug_report_bug ($message = '', $sendEmail = true) {
// Is this already called?
if (isset($GLOBALS[__FUNCTION__])) {
// Other backtrace
} // END - if
// Add output
- $debug .= "Please report this bug at <a title=\"Direct link to the bug-tracker\" href=\"http://bugs.mxchange.org\" rel=\"external\" target=\"_blank\">bugs.mxchange.org</a> and include the logfile from <strong>" . str_replace(getConfig('PATH'), '', getConfig('CACHE_PATH')) . "debug.log</strong> in your report (you can now attach files):<pre>";
+ $debug .= "Please report this bug at <a title=\"Direct link to the bug-tracker\" href=\"http://bugs.mxchange.org\" rel=\"external\" target=\"_blank\">http://bugs.mxchange.org</a> and include the logfile from <strong>" . str_replace(getConfig('PATH'), '', getConfig('CACHE_PATH')) . "debug.log</strong> in your report (you can now attach files):<pre>";
$debug .= debug_get_printable_backtrace();
$debug .= "</pre>\nRequest-URI: " . getRequestUri()."<br />\n";
$debug .= "Thank you for finding bugs.";
+ // Send an email? (e.g. not wanted for evaluation errors)
+ if ($sendEmail === true) {
+ // Prepare content
+ $content = array(
+ 'message' => trim($message),
+ 'backtrace' => trim(debug_get_mailable_backtrace()),
+ 'request_uri' => trim(getRequestUri())
+ );
+
+ // Send email to webmaster
+ sendAdminNotification(getMessage('DEBUG_REPORT_BUG_SUBJECT'), 'admin_report_bug', $content);
+ } // END - if
+
// And abort here
// @TODO This cannot be rewritten to app_die(), try to find a solution for this.
die($debug);
case getCode('ID_LOCKED') : $message = getMessage('LOGIN_ID_LOCKED'); break;
case getCode('ID_UNCONFIRMED') : $message = getMessage('LOGIN_ID_UNCONFIRMED'); break;
case getCode('ID_GUEST') : $message = getMessage('LOGIN_ID_GUEST'); break;
- case getCode('NO_COOKIES') : $message = getMessage('LOGIN_NO_COOKIES'); break;
- case getCode('COOKIES_DISABLED') : $message = getMessage('LOGIN_NO_COOKIES'); break;
+ case getCode('COOKIES_DISABLED') : $message = getMessage('LOGIN_COOKIES_DISABLED'); break;
case getCode('BEG_SAME_AS_OWN') : $message = getMessage('BEG_SAME_UID_AS_OWN'); break;
case getCode('LOGIN_FAILED') : $message = getMessage('LOGIN_FAILED_GENERAL'); break;
case getCode('MODULE_MEM_ONLY') : $message = sprintf(getMessage('MODULE_MEM_ONLY'), getRequestElement('mod')); break;
// Reads a directory recursively by default and searches for files not matching
// an exclusion pattern. You can now keep the exclusion pattern empty for reading
// a whole directory.
-function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $addBaseDir = true, $excludeArray = array(), $extension = '.php', $excludePattern = '@(\.|\.\.)$@', $recursive = true) {
+function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $addBaseDir = true, $excludeArray = array(), $extension = '.php', $excludePattern = '@(\.|\.\.)$@', $recursive = true, $suffix = '') {
// Add default entries we should exclude
$excludeArray[] = '.';
$excludeArray[] = '..';
// Remove double slashes
$FQFN = str_replace('//', '/', $FQFN);
- // Check if the base filename matches an exclusion pattern and if the pattern is not empty
+ // Check if the base filenname matches an exclusion pattern and if the pattern is not empty
if ((!empty($excludePattern)) && (preg_match($excludePattern, $baseFile, $match))) {
// These Lines are only for debugging!!
//* DEBUG: */ outputHtml('baseDir:' . $baseDir . '<br />');
// Skip this file
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "Invalid prefix in file " . $baseFile . ", prefix=" . $prefix);
continue;
+ } elseif ((!empty($suffix)) && (substr($baseFile, -(strlen($suffix . $extension)), (strlen($suffix . $extension))) != $suffix . $extension)) {
+ // Skip wrong suffix as well
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "Invalid suffix in file " . $baseFile . ", suffix=" . $suffix);
+ continue;
} elseif (!isFileReadable($FQFN)) {
// Not readable so skip it
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "File " . $FQFN . " is not readable!");
closedir($dirPointer);
// Sort array
- asort($files);
+ sort($files);
// Return array with include files
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, '- Left!');
return $modCheck;
}
+// Encodes an URL for adding session id, etc.
+function encodeUrl ($url, $outputMode = '0') {
+ // Do we have already have a PHPSESSID inside? Then it is already converted...
+ if (strpos($url, session_name()) !== false) return $url;
+
+ // Do we have a valid session?
+ if ((($GLOBALS['valid_session'] === false) || (!isset($_COOKIE[session_name()]))) && (isSpider() === false)) {
+ // Invalid session
+ // Determine right seperator
+ $seperator = '&';
+ if (strpos($url, '?') === false) {
+ // No question mark
+ $seperator = '?';
+ } elseif ((getOutputMode() != '0') || ($outputMode != '0')) {
+ // Non-HTML mode
+ $seperator = '&';
+ }
+
+ // Add it to URL
+ if (session_id() != '') {
+ $url .= $seperator . session_name() . '=' . session_id();
+ } // END - if
+ } // END - if
+
+ // Add {?URL?}
+ $url = '{?URL?}/' . $url;
+
+ // Return the URL
+ return $url;
+}
+
+// Simple check for spider
+function isSpider () {
+ // Is it a spider?
+ return ((strpos('spider', strtolower(detectUserAgent(true))) !== false) || (strpos('bot', strtolower(detectUserAgent(true))) !== false));
+}
+
//////////////////////////////////////////////////
// AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //
//////////////////////////////////////////////////