X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Ffunctions.php;h=d6a9cb65eb4a910efe4db53dd2c17190e2c2a2ac;hb=27354f0e48c88ff5a55adaa8abe161861b6c76e3;hp=a31c402069ef86f8c151aa68bc481bbf26d62817;hpb=73593f0b418f39ff4872d6dff0d4295bc0a4a960;p=mailer.git diff --git a/inc/functions.php b/inc/functions.php index a31c402069..d6a9cb65eb 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -85,16 +85,7 @@ function outputHtml ($htmlCode, $newLine = true) { app_die(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--LANG_NO_RENDER_DIRECT--}'); break; } // END - switch - } elseif ((getPhpCaching() == 'on') && (isset($GLOBALS['footer_sent'])) && ($GLOBALS['footer_sent'] == 1)) { - // Headers already sent? - if (headers_sent()) { - // Log this error - logDebugMessage(__FUNCTION__, __LINE__, 'Headers already sent! We need debug backtrace here.'); - - // Trigger an user error - debug_report_bug('Headers are already sent!'); - } // END - if - + } elseif (getPhpCaching() == 'on') { // Output cached HTML code $GLOBALS['output'] = ob_get_contents(); @@ -108,12 +99,12 @@ function outputHtml ($htmlCode, $newLine = true) { $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']); } // END - if - // Compile and run finished rendered HTML code - compileFinalOutput(); - // Send all HTTP headers sendHttpHeaders(); + // Compile and run finished rendered HTML code + compileFinalOutput(); + // Output code here, DO NOT REMOVE! ;-) outputRawCode($GLOBALS['output']); } elseif ((getConfig('OUTPUT_MODE') == 'render') && (!empty($GLOBALS['output']))) { @@ -122,12 +113,12 @@ function outputHtml ($htmlCode, $newLine = true) { $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']); } // END - if - // Compile and run finished rendered HTML code - compileFinalOutput(); - // Send all HTTP headers sendHttpHeaders(); + // Compile and run finished rendered HTML code + compileFinalOutput(); + // Output code here, DO NOT REMOVE! ;-) outputRawCode($GLOBALS['output']); } @@ -142,7 +133,7 @@ function sendHttpHeaders () { sendHeader('HTTP/1.1 200'); // General headers for no caching - sendHeader('Expired: ' . $now); // RFC2616 - Section 14.21 + sendHeader('Expires: ' . $now); // RFC2616 - Section 14.21 sendHeader('Last-Modified: ' . $now); sendHeader('Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1 sendHeader('Pragma: no-cache'); // HTTP/1.0 @@ -169,7 +160,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; @@ -177,8 +168,26 @@ function compileFinalOutput () { $cnt++; } // END - while + // Compress it? + if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos('gzip', $_SERVER['HTTP_ACCEPT_ENCODING']) !== null)) { + // Compress it for HTTP gzip + $GLOBALS['output'] = gzencode($GLOBALS['output'], 9, true); + + // Add header + sendHeader('Content-Encoding: gzip'); + } elseif (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos('deflate', $_SERVER['HTTP_ACCEPT_ENCODING']) !== null)) { + // Compress it for HTTP deflate + $GLOBALS['output'] = gzcompress($GLOBALS['output'], 9); + + // Add header + sendHeader('Content-Encoding: deflate'); + } + // Add final length sendHeader('Content-Length: ' . strlen($GLOBALS['output'])); + + // Flush all headers + flushHeaders(); } // Output the raw HTML code @@ -302,7 +311,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 @@ -400,7 +409,7 @@ function detectExtraTemplatePath ($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! @@ -409,53 +418,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).'
" . $proxyTunnel.""); + //* DEBUG: */ print('proxyTunnel=
' . $proxyTunnel.''); // Write request fputs($fp, $proxyTunnel); @@ -1909,7 +1883,7 @@ function sendRawRequest ($host, $request) { } } // END - foreach - //* DEBUG: */ print("Response:
".print_r($response, true).""); + //* DEBUG: */ print('Response:
'.print_r($response, true).''); // Proxy agent found? if ((substr(strtolower($response[0]), 0, 11) == 'proxy-agent') && ($useProxy === true)) { @@ -1973,11 +1947,11 @@ function generateMemberAdminActionLinks ($userid, $status = '') { $targetArray = array('del_user', 'edit_user', 'lock_user', 'add_points', 'sub_points'); // Begin of navigation links - $OUT = "[ "; + $OUT = '[ '; foreach ($targetArray as $tar) { - $OUT .= ""); + $OUT .= '{--ADMIN_"; + $OUT .= '_TITLE--}">{--ADMIN_'; if (($tar == 'lock_user') && ($status == 'LOCKED')) { // Locked accounts shall be unlocked $OUT .= 'UNLOCK_USER'; @@ -1993,7 +1967,7 @@ function generateMemberAdminActionLinks ($userid, $status = '') { // All other status is fine $OUT .= strtoupper($tar); } - $OUT .= "--} | "; + $OUT .= '--} | '; } // Finish navigation link @@ -2057,15 +2031,15 @@ function generateHash ($plainText, $salt = '') { // Generate SHA1 sum from modula of number and the prime number $sha1 = sha1(($a % getConfig('_PRIME')) . $server . getConfig('ENCRYPT_SEPERATOR') . $keys . getConfig('ENCRYPT_SEPERATOR') . $data . getConfig('ENCRYPT_SEPERATOR') . getConfig('DATE_KEY') . getConfig('ENCRYPT_SEPERATOR') . $a); - //* DEBUG: */ outputHtml("SHA1=" . $sha1." (".strlen($sha1).")
".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 @@ -2619,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 @@ -2647,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); @@ -2667,35 +2598,33 @@ function getMessageFromErrorCode ($code) { $message = ''; switch ($code) { case '': break; - case getCode('LOGOUT_DONE') : $message = getMessage('LOGOUT_DONE'); break; - case getCode('LOGOUT_FAILED') : $message = "{--LOGOUT_FAILED--}"; break; - case getCode('DATA_INVALID') : $message = getMessage('MAIL_DATA_INVALID'); break; - case getCode('POSSIBLE_INVALID') : $message = getMessage('MAIL_POSSIBLE_INVALID'); break; - case getCode('ACCOUNT_LOCKED') : $message = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break; - case getCode('USER_404') : $message = getMessage('USER_404'); break; - case getCode('STATS_404') : $message = getMessage('MAIL_STATS_404'); break; - case getCode('ALREADY_CONFIRMED'): $message = getMessage('MAIL_ALREADY_CONFIRMED'); break; - case getCode('WRONG_PASS') : $message = getMessage('LOGIN_WRONG_PASS'); break; - case getCode('WRONG_ID') : $message = getMessage('LOGIN_WRONG_ID'); break; - 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('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; - case getCode('OVERLENGTH') : $message = getMessage('MEMBER_TEXT_OVERLENGTH'); break; - case getCode('URL_FOUND') : $message = getMessage('MEMBER_TEXT_CONTAINS_URL'); break; - case getCode('SUBJ_URL') : $message = getMessage('MEMBER_SUBJ_CONTAINS_URL'); break; - case getCode('BLIST_URL') : $message = "{--MEMBER_URL_BLACK_LISTED--}
\n{--MEMBER_BLIST_TIME--}: ".generateDateTime(getRequestElement('blist'), 0); break; - case getCode('NO_RECS_LEFT') : $message = getMessage('MEMBER_SELECTED_MORE_RECS'); break; - case getCode('INVALID_TAGS') : $message = getMessage('MEMBER_HTML_INVALID_TAGS'); break; - case getCode('MORE_POINTS') : $message = getMessage('MEMBER_MORE_POINTS_NEEDED'); break; - case getCode('MORE_RECEIVERS1') : $message = getMessage('MEMBER_ENTER_MORE_RECEIVERS'); break; - case getCode('MORE_RECEIVERS2') : $message = getMessage('MEMBER_NO_MORE_RECEIVERS_FOUND'); break; - case getCode('MORE_RECEIVERS3') : $message = sprintf(getMessage('MEMBER_ENTER_MORE_MIN_RECEIVERS'), getConfig('order_min')); break; - case getCode('INVALID_URL') : $message = getMessage('MEMBER_ENTER_INVALID_URL'); break; + case getCode('LOGOUT_DONE') : $message = getMessage('LOGOUT_DONE'); break; + case getCode('LOGOUT_FAILED') : $message = '{--LOGOUT_FAILED--}'; break; + case getCode('DATA_INVALID') : $message = getMessage('MAIL_DATA_INVALID'); break; + case getCode('POSSIBLE_INVALID') : $message = getMessage('MAIL_POSSIBLE_INVALID'); break; + case getCode('ACCOUNT_LOCKED') : $message = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break; + case getCode('USER_404') : $message = getMessage('USER_404'); break; + case getCode('STATS_404') : $message = getMessage('MAIL_STATS_404'); break; + case getCode('ALREADY_CONFIRMED') : $message = getMessage('MAIL_ALREADY_CONFIRMED'); break; + case getCode('WRONG_PASS') : $message = getMessage('LOGIN_WRONG_PASS'); break; + case getCode('WRONG_ID') : $message = getMessage('LOGIN_WRONG_ID'); break; + case getCode('STATUS_LOCKED') : $message = getMessage('LOGIN_STATUS_LOCKED'); break; + case getCode('STATUS_UNCONFIRMED'): $message = getMessage('LOGIN_STATUS_UNCONFIRMED'); 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; + case getCode('OVERLENGTH') : $message = getMessage('MEMBER_TEXT_OVERLENGTH'); break; + case getCode('URL_FOUND') : $message = getMessage('MEMBER_TEXT_CONTAINS_URL'); break; + case getCode('SUBJ_URL') : $message = getMessage('MEMBER_SUBJ_CONTAINS_URL'); break; + case getCode('BLIST_URL') : $message = "{--MEMBER_URL_BLACK_LISTED--}
\n{--MEMBER_BLIST_TIME--}: ".generateDateTime(getRequestElement('blist'), 0); break; + case getCode('NO_RECS_LEFT') : $message = getMessage('MEMBER_SELECTED_MORE_RECS'); break; + case getCode('INVALID_TAGS') : $message = getMessage('MEMBER_HTML_INVALID_TAGS'); break; + case getCode('MORE_POINTS') : $message = getMessage('MEMBER_MORE_POINTS_NEEDED'); break; + case getCode('MORE_RECEIVERS1') : $message = getMessage('MEMBER_ENTER_MORE_RECEIVERS'); break; + case getCode('MORE_RECEIVERS2') : $message = getMessage('MEMBER_NO_MORE_RECEIVERS_FOUND'); break; + case getCode('MORE_RECEIVERS3') : $message = sprintf(getMessage('MEMBER_ENTER_MORE_MIN_RECEIVERS'), getConfig('order_min')); break; + case getCode('INVALID_URL') : $message = getMessage('MEMBER_ENTER_INVALID_URL'); break; case getCode('ERROR_MAILID'): if (isExtensionActive('mailid', true)) { @@ -2917,7 +2846,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 { @@ -3122,15 +3051,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'], @@ -3382,7 +3311,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[] = '..'; @@ -3412,7 +3341,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 . '
'); @@ -3434,6 +3363,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!"); @@ -3476,7 +3409,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!'); @@ -3626,7 +3559,7 @@ function determinePageTitle () { $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')); @@ -3642,7 +3575,7 @@ function determinePageTitle () { } // Return title - return $pageTitle; + return decodeEntities($pageTitle); } // Checks wethere there is a cache file there. This function is cached. @@ -3876,6 +3809,52 @@ function getModuleFromFileName ($file, $accessLevel) { 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 () { + // Get the UA + $userAgent = strtolower(detectUserAgent(true)); + + // It should not be empty, if so it is better a spider/bot + if (empty($userAgent)) return true; + + // Is it a spider? + return ((strpos($userAgent, 'spider') !== false) || (strpos($userAgent, 'slurp') !== false) || (strpos($userAgent, 'bot') !== false)); +} + ////////////////////////////////////////////////// // AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS // //////////////////////////////////////////////////