");
if (($tar == 'lock_user') && ($status == 'LOCKED')) {
// Locked accounts shall be unlocked
@@ -2296,89 +2285,16 @@ function getCurrentTheme () {
// 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("".print_r($GLOBALS['cache_array']['themes'], true)." ");
- // 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 (getExtensionVersion('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
@@ -2482,7 +2398,7 @@ function getActualVersion ($type = 'Revision') {
$new = true;
} else {
// Generate fake cache entry
- foreach ($mapper as $map=>$idx) {
+ foreach ($mapper as $map => $idx) {
$GLOBALS['cache_array']['revision'][$map][0] = $ins_vers[$idx];
} // END - foreach
@@ -2604,8 +2520,26 @@ function debug_get_printable_backtrace () {
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
@@ -2632,21 +2566,31 @@ function debug_report_bug ($message = '') {
} // END - if
// Add output
- $debug .= "Please report this bug at bugs.mxchange.org and include the logfile from " . getConfig('CACHE_PATH') . "debug.log in your report (you can now attach files):";
+ $debug .= "Please report this bug at http://bugs.mxchange.org and include the logfile from " . str_replace(getConfig('PATH'), '', getConfig('CACHE_PATH')) . "debug.log in your report (you can now attach files):";
$debug .= debug_get_printable_backtrace();
$debug .= " \nRequest-URI: " . getRequestUri()." \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())
+ );
+
+ // 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);
}
-// Generates a ***weak*** seed (taken from de.php.net/mt_srand)
+// Generates a ***weak*** seed
function generateSeed () {
- list($usec, $sec) = explode(' ', microtime());
- $microTime = (((float)$sec + (float)$usec)) * 100000;
- return $microTime;
+ return microtime(true) * 100000;
}
// Converts a message code to a human-readable message
@@ -2667,8 +2611,7 @@ function getMessageFromErrorCode ($code) {
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;
@@ -2904,7 +2847,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) {
}
// Send notification to admin
function sendAdminNotification ($subject, $templateName, $content=array(), $userid = '0') {
- if (isExtensionInstalledAndNewer('admins', '0.4.1')) {
+ if ((isExtensionInstalledAndNewer('admins', '0.4.1')) && (function_exists('sendAdminsEmails'))) {
// Send new way
sendAdminsEmails($subject, $templateName, $content, $userid);
} else {
@@ -3109,15 +3052,15 @@ function addNewBonusMail ($data, $mode = '', $output=true) {
if ((empty($mode)) && (isset($data['mode']))) $mode = $data['mode'];
// Generate receiver list
- $RECEIVER = generateReceiverList($data['cat'], $data['receiver'], $mode);
+ $receiver = generateReceiverList($data['cat'], $data['receiver'], $mode);
// Receivers added?
- if (!empty($RECEIVER)) {
+ if (!empty($receiver)) {
// Add bonus mail to queue
addBonusMailToQueue(
$data['subject'],
$data['text'],
- $RECEIVER,
+ $receiver,
$data['points'],
$data['seconds'],
$data['url'],
@@ -3160,7 +3103,7 @@ function determineReferalId () {
} elseif ((isSessionVariableSet('refid')) && (getSession('refid') != 0)) {
// Set session refid als global
$GLOBALS['refid'] = bigintval(getSession('refid'));
- } elseif ((isExtensionInstalledAndNewer('user', '0.3.4')) && (getConfig('select_user_zero_refid')) == 'Y') {
+ } elseif ((isExtensionInstalledAndNewer('user', '0.3.4')) && (getConfig('select_user_zero_refid') == 'Y')) {
// Select a random user which has confirmed enougth mails
$GLOBALS['refid'] = determineRandomReferalId();
} elseif ((isExtensionInstalled('sql_patches')) && (getConfig('def_refid') > 0)) {
@@ -3177,7 +3120,7 @@ function determineReferalId () {
$found = false;
// Do we have nickname or userid set?
- if (isNicknameUsed($GLOBALS['refid'])) {
+ if ((isExtensionActive('nickname')) && (isNicknameUsed($GLOBALS['refid']))) {
// Nickname in URL, so load the id
$found = fetchUserData($GLOBALS['refid'], 'nickname');
} elseif ($GLOBALS['refid'] > 0) {
@@ -3186,7 +3129,7 @@ function determineReferalId () {
}
// Is the record valid?
- if (($found === false) || (!isUserDataValid())) {
+ if ((($found === false) || (!isUserDataValid())) && (isConfigEntrySet('def_refid'))) {
// No, then reset referal id
$GLOBALS['refid'] = getConfig('def_refid');
} // END - if
@@ -3369,7 +3312,7 @@ function generateExtensionInactiveNotInstalledMessage ($ext_name) {
// 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[] = '..';
@@ -3399,7 +3342,7 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
// 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 . ' ');
@@ -3421,6 +3364,10 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
// 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!");
@@ -3463,7 +3410,7 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
closedir($dirPointer);
// Sort array
- asort($files);
+ sort($files);
// Return array with include files
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, '- Left!');
@@ -3604,16 +3551,16 @@ function determinePageTitle () {
$mode = '';
if (getModule() == 'login') $mode = 'member';
elseif (getModule() == 'index') $mode = 'guest';
- if ((!empty($mode)) && (getConfig('enable_what_title') == 'Y')) $TITLE .= " ".trim(getConfig('title_middle'))." ".getModuleDescription($mode, getWhat());
+ if ((!empty($mode)) && (getConfig('enable_what_title') == 'Y')) $TITLE .= ' ' . trim(getConfig('title_middle')) . ' ' . getTitleFromMenu($mode, getWhat());
// Add title decorations? (right)
- if ((getConfig('enable_title_deco') == 'Y') && (getConfig('title_right') != '')) $TITLE .= " ".trim(getConfig('title_right'));
+ if ((getConfig('enable_title_deco') == 'Y') && (getConfig('title_right') != '')) $TITLE .= ' ' . trim(getConfig('title_right'));
// Remember title in constant for the template
$pageTitle = $TITLE;
} elseif ((isInstalled()) && (isAdminRegistered())) {
// Installed, admin registered but no ext-sql_patches
- $pageTitle = '[-- ' . getConfig('MAIN_TITLE').' - '.getModuleTitle(getModule()) . ' --]';
+ $pageTitle = '[-- ' . getConfig('MAIN_TITLE') . ' - ' . getModuleTitle(getModule()) . ' --]';
} elseif ((isInstalled()) && (!isAdminRegistered())) {
// Installed but no admin registered
$pageTitle = sprintf(getMessage('SETUP_OF_MXCHANGE'), getConfig('MAIN_TITLE'));
@@ -3629,7 +3576,7 @@ function determinePageTitle () {
}
// Return title
- return $pageTitle;
+ return decodeEntities($pageTitle);
}
// Checks wethere there is a cache file there. This function is cached.
@@ -3650,7 +3597,7 @@ function isTemplateCached ($template) {
// Flushes non-flushed template cache to disk
function flushTemplateCache ($template, $eval) {
// Is this cache flushed?
- if ((!isTemplateCached($template)) && ($eval != '404')) {
+ if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template) === false) && ($eval != '404')) {
// Generate FQFN
$FQFN = sprintf("%s_compiled/templates/%s.tpl.cache", getConfig('CACHE_PATH'), $template);
@@ -3665,7 +3612,7 @@ function flushTemplateCache ($template, $eval) {
// Reads a template cache
function readTemplateCache ($template) {
// Check it again
- if (isTemplateCached($template)) {
+ if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template))) {
// Generate FQFN
$FQFN = sprintf("%s_compiled/templates/%s.tpl.cache", getConfig('CACHE_PATH'), $template);
@@ -3685,13 +3632,227 @@ function escapeQuotes ($str, $single = false) {
$str = addslashes($str);
} else {
// Escape only double-quotes but prevent double-quoting
- $str = stripslashes(str_replace('"', "\\\"", $str));
+ $str = str_replace("\\\\", "\\", str_replace('"', "\\\"", $str));
}
// Return the escaped string
return $str;
}
+// Escapes the JavaScript code, prevents \r and \n becoming char 10/13
+function escapeJavaScriptQuotes ($str) {
+ // Replace all double-quotes and secure back-ticks
+ $str = str_replace('"', '\"', str_replace("\\", '{BACK}', $str));
+
+ // Return it
+ return $str;
+}
+
+// Send out mails depending on the 'mod/modes' combination
+// @TODO Lame description for this function
+function sendModeMails ($mod, $modes) {
+ // Load hash
+ if (fetchUserData(getMemberId())) {
+ // Extract salt from cookie
+ $salt = substr(getSession('u_hash'), 0, -40);
+
+ // Now let's compare passwords
+ $hash = generatePassString(getUserData('password'));
+
+ // Does the hash match or should we change it?
+ if (($hash == getSession('u_hash')) || (postRequestElement('pass1') == postRequestElement('pass2'))) {
+ // Load the data
+ $content = getUserDataArray();
+
+ // Translate gender
+ $content['gender'] = translateGender($content['gender']);
+
+ // Clear/init the content variable
+ $content['message'] = '';
+
+ // Which mail?
+ // @TODO Move this in a filter
+ switch ($mod) {
+ case 'mydata':
+ foreach ($modes as $mode) {
+ switch ($mode) {
+ case 'normal': break; // Do not add any special lines
+ case 'email': // Email was changed!
+ $content['message'] = getMessage('MEMBER_CHANGED_EMAIL').": ".postRequestElement('old_email')."\n";
+ break;
+
+ case 'pass': // Password was changed
+ $content['message'] = getMessage('MEMBER_CHANGED_PASS')."\n";
+ break;
+
+ default:
+ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown mode %s detected.", $mode));
+ $content['message'] = getMessage('MEMBER_UNKNOWN_MODE') . ': ' . $mode . "\n\n";
+ break;
+ } // END - switch
+ } // END - foreach
+
+ if (isExtensionActive('country')) {
+ // Replace code with description
+ $content['country'] = generateCountryInfo(postRequestElement('country_code'));
+ } // END - if
+
+ // Merge content with data from POST
+ $content = merge_array($content, postRequestArray());
+
+ // Load template
+ $message = loadEmailTemplate('member_mydata_notify', $content, getMemberId());
+
+ if (getConfig('admin_notify') == 'Y') {
+ // The admin needs to be notified about a profile change
+ $message_admin = 'admin_mydata_notify';
+ $sub_adm = getMessage('ADMIN_CHANGED_DATA');
+ } else {
+ // No mail to admin
+ $message_admin = '';
+ $sub_adm = '';
+ }
+
+ // Set subject lines
+ $sub_mem = getMessage('MEMBER_CHANGED_DATA');
+
+ // Output success message
+ $content = "{--MYDATA_MAIL_SENT--} ";
+ break;
+
+ default: // Unsupported module!
+ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unsupported module %s detected.", $mod));
+ $content = "{--UNKNOWN_MODULE--} ";
+ break;
+ } // END - switch
+ } else {
+ // Passwords mismatch
+ $content = "{--MEMBER_PASSWORD_ERROR--} ";
+ }
+ } else {
+ // Could not load profile
+ $content = "{--MEMBER_CANNOT_LOAD_PROFILE--} ";
+ }
+
+ // Send email to user if required
+ if ((!empty($sub_mem)) && (!empty($message))) {
+ // Send member mail
+ sendEmail($content['email'], $sub_mem, $message);
+ } // END - if
+
+ // Send only if no other error has occured
+ if (empty($content)) {
+ if ((!empty($sub_adm)) && (!empty($message_admin))) {
+ // Send admin mail
+ sendAdminNotification($sub_adm, $message_admin, $content, getMemberId());
+ } elseif (getConfig('admin_notify') == 'Y') {
+ // Cannot send mails to admin!
+ $content = getMessage('CANNOT_SEND_ADMIN_MAILS');
+ } else {
+ // No mail to admin
+ $content = "{--MYDATA_MAIL_SENT--} ";
+ }
+ } // END - if
+
+ // Load template
+ loadTemplate('admin_settings_saved', false, $content);
+}
+
+// Generates a 'selection box' from given array
+function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent) {
+ // Start the output
+ $OUT = '
+{--PLEASE_SELECT--} ';
+
+ // Walk through all options
+ foreach ($options as $option) {
+ // Add the entry
+ $OUT .= ' ' . $option[$optionContent] . ' ';
+ } // END - foreach
+
+ // Finish selection box
+ $OUT .= ' ';
+
+ // Prepare output
+ $content = array(
+ 'selection_box' => $OUT,
+ 'module' => getModule(),
+ 'what' => getWhat()
+ );
+
+ // Load template and return it
+ return loadTemplate('select_' . $name . '_box', true, $content);
+}
+
+// Get a module from filename and access level
+function getModuleFromFileName ($file, $accessLevel) {
+ // Default is 'invalid';
+ $modCheck = 'invalid';
+
+ // @TODO This is still very static, rewrite it somehow
+ switch ($accessLevel) {
+ case 'admin':
+ $modCheck = 'admin';
+ break;
+
+ case 'sponsor':
+ case 'guest':
+ case 'member':
+ $modCheck = getModule();
+ break;
+
+ default: // Unsupported file name / access level
+ debug_report_bug('Unsupported file name=' . basename($file) . '/access level=' . $accessLevel);
+ break;
+ }
+
+ // Return result
+ 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?} ?
+ if ((substr($url, 0, strlen(getConfig('URL'))) != getConfig('URL')) && (substr($url, 0, 7) != '{?URL?}') && (substr($url, 0, 7) != 'http://') && (substr($url, 0, 8) != 'https://')) {
+ // Add it
+ $url = '{?URL?}/' . $url;
+ } // END - if
+
+ // Return the URL
+ return $url;
+}
+
+// Simple check for spider
+function isSpider () {
+ // It should not be empty, if so it is better a spider/bot
+ if (detectUserAgent(true) == '') return true;
+
+ // Is it a spider?
+ return ((strpos('spider', strtolower(detectUserAgent(true))) !== false) || (strpos('bot', strtolower(detectUserAgent(true))) !== false));
+}
+
//////////////////////////////////////////////////
// AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //
//////////////////////////////////////////////////
@@ -3707,7 +3868,7 @@ if (!function_exists('html_entity_decode')) {
if (!function_exists('http_build_query')) {
// Taken from documentation on www.php.net, credits to Marco K. (Germany)
- function http_build_query($data, $prefix='', $sep='', $key='') {
+ function http_build_query($data, $prefix = '', $sep = '', $key = '') {
$ret = array();
foreach ((array)$data as $k => $v) {
if (is_int($k) && $prefix != null) {
@@ -3727,7 +3888,7 @@ if (!function_exists('http_build_query')) {
return implode($sep, $ret);
}
-}// // END - if
+} // END - if
// [EOF]
?>