- //* DEBUG: */ print($passHash.'<br />' . $newHash." (".strlen($newHash).')<br />');
- $ret = generateHash($newHash, getConfig('master_salt'));
- //* DEBUG: */ print('ret='.$ret.'<br />');
- } else {
- // Hash it simple
- //* DEBUG: */ outputHtml("--" . $passHash."--<br />");
- $ret = md5($passHash);
- //* DEBUG: */ outputHtml("++" . $ret."++<br />");
- }
-
- // Return result
- return $ret;
-}
-
-// Fix "deleted" cookies
-function fixDeletedCookies ($cookies) {
- // Is this an array with entries?
- if ((is_array($cookies)) && (count($cookies) > 0)) {
- // Then check all cookies if they are marked as deleted!
- foreach ($cookies as $cookieName) {
- // Is the cookie set to "deleted"?
- if (getSession($cookieName) == 'deleted') {
- setSession($cookieName, '');
- } // END - if
- } // END - foreach
- } // END - if
-}
-
-// Output error messages in a fasioned way and die...
-function app_die ($F, $L, $message) {
- // Check if Script is already dieing and not let it kill itself another 1000 times
- if (!isset($GLOBALS['app_died'])) {
- // Make sure, that the script realy realy diese here and now
- $GLOBALS['app_died'] = true;
-
- // Load header
- loadIncludeOnce('inc/header.php');
-
- // Rewrite message for output
- $message = sprintf(getMessage('MXCHANGE_HAS_DIED'), basename($F), $L, $message);
-
- // Better log this message away
- logDebugMessage($F, $L, $message);
-
- // Load the message template
- loadTemplate('admin_settings_saved', false, $message);
-
- // Load footer
- loadIncludeOnce('inc/footer.php');
- } else {
- // Script tried to kill itself twice
- debug_report_bug('Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L);
- }
-}
-
-// Display parsing time and number of SQL queries in footer
-function displayParsingTime() {
- // Is the timer started?
- if (!isset($GLOBALS['startTime'])) {
- // Abort here
- return false;
- } // END - if
-
- // Get end time
- $endTime = microtime(true);
-
- // "Explode" both times
- $start = explode(' ', $GLOBALS['startTime']);
- $end = explode(' ', $endTime);
- $runTime = $end[0] - $start[0];
- if ($runTime < 0) $runTime = '0';
-
- // Prepare output
- $content = array(
- 'runtime' => translateComma($runTime),
- 'timeSQLs' => translateComma(getConfig('sql_time') * 1000),
- );
-
- // Load the template
- loadTemplate('show_timings', false, $content);
-}
-
-// Check wether a boolean constant is set
-// Taken from user comments in PHP documentation for function constant()
-function isBooleanConstantAndTrue ($constName) { // : Boolean
- // Failed by default
- $res = false;
-
- // In cache?
- if (isset($GLOBALS['cache_array']['const'][$constName])) {
- // Use cache
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): " . $constName."-CACHE!<br />");
- $res = ($GLOBALS['cache_array']['const'][$constName] === true);
- } else {
- // Check constant
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): " . $constName."-RESOLVE!<br />");
- if (defined($constName)) {
- // Found!
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): " . $constName."-FOUND!<br />");
- $res = (constant($constName) === true);
- } // END - if
-
- // Set cache
- $GLOBALS['cache_array']['const'][$constName] = $res;
- }
- //* DEBUG: */ var_dump($res);
-
- // Return value
- return $res;
-}
-
-// Checks if a given apache module is loaded
-function isApacheModuleLoaded ($apacheModule) {
- // Check it and return result
- return (((function_exists('apache_get_modules')) && (in_array($apacheModule, apache_get_modules()))) || (!function_exists('apache_get_modules')));
-}
-
-// Get current theme name
-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("<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);
- }
-
- // 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
- if ((empty($status)) && (isMember())) {
- // Get user status
- $status = getUserData('status');
- } // END - if
-
- // Default error code if unknown account status
- $errorCode = getCode('UNKNOWN_STATUS');
-
- // Generate constant name
- $codeName = sprintf("ID_%s", $status);
-
- // Is the constant there?
- if (isCodeSet($codeName)) {
- // Then get it!
- $errorCode = getCode($codeName);
- } else {
- // Unknown status
- logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown error status %s detected.", $status));
- }
-
- // Return error code
- return $errorCode;
-}
-
-// Function to search for the last modifified file
-function searchDirsRecursive ($dir, &$last_changed) {
- // Get dir as array
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):dir=" . $dir.'<br />');
- // Does it match what we are looking for? (We skip a lot files already!)
- // RegexPattern to exclude ., .., .revision, .svn, debug.log or .cache in the filenames
- $excludePattern = '@(\.revision|debug\.log|\.cache|config\.php)$@';
- $ds = getArrayFromDirectory($dir, '', true, false, array(), '.php', $excludePattern);
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):ds[]=".count($ds).'<br />');
-
- // Walk through all entries
- foreach ($ds as $d) {
- // Generate proper FQFN
- $FQFN = str_replace('//', '/', getConfig('PATH') . $dir. '/'. $d);
-
- // Is it a file and readable?
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):FQFN={$FQFN}<br />");
- if (isDirectory($FQFN)) {
- // $FQFN is a directory so also crawl into this directory
- $newDir = $d;
- if (!empty($dir)) $newDir = $dir . '/'. $d;
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):DESCENT: " . $newDir.'<br />');
- searchDirsRecursive($newDir, $last_changed);
- } elseif (isFileReadable($FQFN)) {
- // $FQFN is a filename and no directory
- $time = filemtime($FQFN);
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):File: " . $d." found. (".($last_changed['time'] - $time).")<br />");
- if ($last_changed['time'] < $time) {
- // This file is newer as the file before
- //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>) - NEWER!<br />");
- $last_changed['path_name'] = $FQFN;
- $last_changed['time'] = $time;
- } // END - if
- }
- } // END - foreach
-}
-
-// "Getter" for revision/version data
-function getActualVersion ($type = 'Revision') {
- // By default nothing is new... ;-)
- $new = false;
-
- // Is the cache entry there?
- if (isset($GLOBALS['cache_array']['revision'][$type])) {
- // Found so increase cache hit
- incrementStatsEntry('cache_hits');
-
- // Return it
- return $GLOBALS['cache_array']['revision'][$type][0];
- } else {
- // FQFN of revision file
- $FQFN = sprintf("%s/.revision", getConfig('CACHE_PATH'));
-
- // Check if 'check_revision_data' is setted (switch for manually rewrite the .revision-File)
- if ((isGetRequestElementSet('check_revision_data')) && (getRequestElement('check_revision_data') == 'yes')) {
- // Forced rebuild of .revision file
- $new = true;
- } else {
- // Check for revision file
- if (!isFileReadable($FQFN)) {
- // Not found, so we need to create it
- $new = true;
- } else {
- // Revision file found
- $ins_vers = explode("\n", readFromFile($FQFN));
-
- // Get array for mapping information
- $mapper = array_flip(getSearchFor());
- //* DEBUG: */ print('<pre>mapper='.print_r($mapper, true).'</pre>ins_vers=<pre>'.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 {
- // Generate fake cache entry
- foreach ($mapper as $map=>$idx) {
- $GLOBALS['cache_array']['revision'][$map][0] = $ins_vers[$idx];
- } // END - foreach
-
- // Return found value
- return trim($ins_vers[$mapper[$type]]);
- }
- }
- }
-
- // Has it been updated?
- if ($new === true) {
- // Write it
- writeToFile($FQFN, implode("\n", getArrayFromActualVersion()));