X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ffunctions.php;h=6aedaf61bf7035fc788aab0b4f89739475093129;hb=3fc95231ba85cc8c292b81bf502d4d7fab85ca8b;hp=d077a3c7a875919cf5f86af638de2b3b28272b8e;hpb=d52beaaad0b8388fec7f9f3cece88ef98a833751;p=mailer.git diff --git a/inc/functions.php b/inc/functions.php index d077a3c7a8..6aedaf61bf 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -77,7 +77,7 @@ function outputHtml ($htmlCode, $newLine = true) { // The same as above... ^ outputRawCode($htmlCode); - if ($newLine) print("\n"); + if ($newLine === true) print("\n"); break; default: @@ -169,7 +169,7 @@ function compileFinalOutput () { // Was that eval okay? if (empty($newContent)) { // Something went wrong! - debug_report_bug('Evaluation error:
' . linenumberCode($eval) . '
'); + debug_report_bug('Evaluation error:
' . linenumberCode($eval) . '
', false); } // END - if $GLOBALS['output'] = $newContent; @@ -302,7 +302,7 @@ function loadTemplate ($template, $return = false, $content = array()) { } else { // Add surrounding HTML comments to help finding bugs faster $ret = '\n" . $GLOBALS['tpl_content'] . '\n"; - $eval = '$ret = "' . escapeQuotes($ret) . '";'; + $eval = '$ret = "' . compileRawCode(escapeQuotes($ret)) . '";'; } // END - if // Cache the eval() command here @@ -312,7 +312,7 @@ function loadTemplate ($template, $return = false, $content = array()) { eval($GLOBALS['template_eval'][$template]); } elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) { // Only admins shall see this warning or when installation mode is active - $ret = '
{--TEMPLATE_404--}
+ $ret = '
{--TEMPLATE_404--}
(' . $template . ')

{--TEMPLATE_CONTENT--} @@ -350,48 +350,57 @@ function detectExtraTemplatePath ($template) { // Default is empty $extraPath = ''; - // Check for admin/guest/member templates - if (substr($template, 0, 6) == 'admin_') { - // Admin template found - $extraPath = 'admin/'; - } elseif (substr($template, 0, 6) == 'guest_') { - // Guest template found - $extraPath = 'guest/'; - } elseif (substr($template, 0, 7) == 'member_') { - // Member template found - $extraPath = 'member/'; - } elseif (substr($template, 0, 8) == 'install_') { - // Installation template found - $extraPath = 'install/'; - } elseif (substr($template, 0, 4) == 'ext_') { - // Extension template found - $extraPath = 'ext/'; - } elseif (substr($template, 0, 3) == 'la_') { - // 'Logical-area' template found - $extraPath = 'la/'; - } elseif (substr($template, 0, 3) == 'js_') { - // JavaScript template found - $extraPath = 'js/'; - } elseif (substr($template, 0, 5) == 'menu_') { - // Menu template found - $extraPath = 'menu/'; - } else { - // Test for extension - $test = substr($template, 0, strpos($template, '_')); + // Do we have cache? + if (!isset($GLOBALS['extra_path'][$template])) { + // Check for admin/guest/member/etc. templates + if (substr($template, 0, 6) == 'admin_') { + // Admin template found + $extraPath = 'admin/'; + } elseif (substr($template, 0, 6) == 'guest_') { + // Guest template found + $extraPath = 'guest/'; + } elseif (substr($template, 0, 7) == 'member_') { + // Member template found + $extraPath = 'member/'; + } elseif (substr($template, 0, 7) == 'select_') { + // Selection template found + $extraPath = 'select/'; + } elseif (substr($template, 0, 8) == 'install_') { + // Installation template found + $extraPath = 'install/'; + } elseif (substr($template, 0, 4) == 'ext_') { + // Extension template found + $extraPath = 'ext/'; + } elseif (substr($template, 0, 3) == 'la_') { + // 'Logical-area' template found + $extraPath = 'la/'; + } elseif (substr($template, 0, 3) == 'js_') { + // JavaScript template found + $extraPath = 'js/'; + } elseif (substr($template, 0, 5) == 'menu_') { + // Menu template found + $extraPath = 'menu/'; + } else { + // Test for extension + $test = substr($template, 0, strpos($template, '_')); - // Probe for valid extension name - if (isExtensionNameValid($test)) { - // Set extra path to extension's name - $extraPath = $test . '/'; - } // END - if - } + // Probe for valid extension name + if (isExtensionNameValid($test)) { + // Set extra path to extension's name + $extraPath = $test . '/'; + } // END - if + } + + // Store it in cache + $GLOBALS['extra_path'][$template] = $extraPath; + } // END - if // Return result - return $extraPath; + return $GLOBALS['extra_path'][$template]; } // Loads an email template and compiles it -function loadEmailTemplate ($template, $content = array(), $UID = '0') { +function loadEmailTemplate ($template, $content = array(), $userid = '0') { global $DATA; // Make sure all template names are lowercase! @@ -400,53 +409,33 @@ function loadEmailTemplate ($template, $content = array(), $UID = '0') { // Default 'nickname' if extension is not installed $nick = '---'; - // Prepare IP number and User Agent - $REMOTE_ADDR = detectRemoteAddr(); - $HTTP_USER_AGENT = detectUserAgent(); - - // Default admin - $ADMIN = getConfig('MAIN_TITLE'); - - // Is the admin logged in? - if (isAdmin()) { - // Get admin id - $adminId = getCurrentAdminId(); - - // Load Admin data - $ADMIN = getAdminEmail($adminId); - } // END - if - // Neutral email address is default $email = getConfig('WEBMASTER'); - // Expiration in a nice output format - // NOTE: Use $content[expiration] in your templates instead of $EXPIRATION - if (getConfig('auto_purge') == '0') { - // Will never expire! - $EXPIRATION = getMessage('MAIL_WILL_NEVER_EXPIRE'); - } else { - // Create nice date string - $EXPIRATION = createFancyTime(getConfig('auto_purge')); - } - // Is content an array? if (is_array($content)) { - // Add expiration to array, $EXPIRATION is now deprecated! - $content['expiration'] = $EXPIRATION; + // Add expiration to array + if (getConfig('auto_purge') == '0') { + // Will never expire! + $content['expiration'] = getMessage('MAIL_WILL_NEVER_EXPIRE'); + } else { + // Create nice date string + $content['expiration'] = createFancyTime(getConfig('auto_purge')); + } } // END - if // Load user's data - //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__."):UID={$UID},template={$template},content[]=".gettype($content).'
'); - if (($UID > 0) && (is_array($content))) { + //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__."):UID={$userid},template={$template},content[]=".gettype($content).'
'); + if (($userid > 0) && (is_array($content))) { // If nickname extension is installed, fetch nickname as well - if ((isExtensionActive('nickname')) && (isNicknameUsed($UID))) { + if ((isExtensionActive('nickname')) && (isNicknameUsed($userid))) { //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__."):NICKNAME!
"); // Load by nickname - fetchUserData($UID, 'nickname'); + fetchUserData($userid, 'nickname'); } else { //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__."):NO-NICK!
"); /// Load by userid - fetchUserData($UID); + fetchUserData($userid); } // Merge data if valid @@ -464,7 +453,7 @@ function loadEmailTemplate ($template, $content = array(), $UID = '0') { if (isset($content['email'])) $email = $content['email']; // Store email for some functions in global data array - // @TODO Do only use $contentn, not $DATA or raw variables + // @TODO Do only use $content, not $DATA or raw variables $DATA['email'] = $email; // Base directory @@ -510,7 +499,7 @@ function loadEmailTemplate ($template, $content = array(), $UID = '0') { // Is there some content? if (empty($newContent)) { // Compiling failed - $newContent = "Compiler error for template {$template}!\nUncompiled content:\n" . $GLOBALS['tpl_content']; + $newContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['tpl_content']; // Add last error if the required function exists if (function_exists('error_get_last')) $newContent .= "\n--------------------------------------\nDebug:\n".print_r(error_get_last(), true)."--------------------------------------\nPlease don't alter these informations!\nThanx."; @@ -578,7 +567,7 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = ' 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'; @@ -853,7 +842,7 @@ function generateDerefererUrl ($URL) { // 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 @@ -863,7 +852,7 @@ function generateDerefererUrl ($URL) { // 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)) ); @@ -894,7 +883,7 @@ function countSelection ($array) { // Generate XHTML code for the CAPTCHA function generateCaptchaCode ($code, $type, $DATA, $userid) { - return 'Code ' . $code . ''; + return 'Code ' . $code . ''; } // Generates a timestamp (some wrapper for mktime()) @@ -918,18 +907,7 @@ function makeTime ($hours, $minutes, $seconds, $stamp) { // 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"'; @@ -948,6 +926,11 @@ function redirectToUrl ($URL) { 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... @@ -1034,11 +1017,11 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true 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 @@ -1345,7 +1328,7 @@ function generateImageOrCode ($img_code, $headerSent = true) { 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 "\"Image\"\n"; + return "\"Image\"\n"; } // Load image @@ -1658,13 +1641,13 @@ function addEmailNavigation ($PAGES, $offset, $show_form, $colspan, $return=fals $NAV .= '-'; } else { // Open anchor tag and add base URL - $NAV .= ' 0)) $NAV .= '&userid=' . bigintval(getRequestElement('userid')); // Close open anchor tag - $NAV .= '">'; + $NAV .= '%}">'; } $NAV .= $page; if (($page == getRequestElement('page')) || ((!isGetRequestElementSet('page')) && ($page == 1))) { @@ -1967,7 +1950,7 @@ function generateMemberAdminActionLinks ($userid, $status = '') { $OUT = "[ "; foreach ($targetArray as $tar) { - $OUT .= ""); if (($tar == 'lock_user') && ($status == 'LOCKED')) { // Locked accounts shall be unlocked @@ -2302,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 (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 @@ -2610,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 @@ -2638,11 +2566,23 @@ function debug_report_bug ($message = '') { } // END - if // Add output - $debug .= "Please report this bug at
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 .= "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); @@ -2671,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; @@ -2908,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 { @@ -3113,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'], @@ -3373,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[] = '..'; @@ -3403,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 . '
'); @@ -3425,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!"); @@ -3467,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!'); @@ -3608,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')); @@ -3633,7 +3576,7 @@ function determinePageTitle () { } // Return title - return $pageTitle; + return decodeEntities($pageTitle); } // Checks wethere there is a cache file there. This function is cached. @@ -3815,6 +3758,101 @@ function sendModeMails ($mod, $modes) { loadTemplate('admin_settings_saved', false, $content); } +// Generates a 'selection box' from given array +function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent) { + // Start the output + $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 // //////////////////////////////////////////////////