X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ffunctions.php;h=837184d15f9cd8667bebb481c4d34c3d9bd7cdd2;hb=cb529a09bd803ae98b5a2fd9baed5a55332252af;hp=921cda0aea979a1322e5097f2c3fc18413a9ed07;hpb=3fce27f277e3316c33a7e904ef499370c0c95dde;p=mailer.git
diff --git a/inc/functions.php b/inc/functions.php
index 921cda0aea..837184d15f 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -18,6 +18,7 @@
* svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
+ * Copyright (c) 2009, 2010 by Mailer Developer Team *
* For more information visit: http://www.mxchange.org *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -44,11 +45,9 @@ if (!defined('__SECURITY')) {
// Output HTML code directly or 'render' it. You addionally switch the new-line character off
function outputHtml ($htmlCode, $newLine = true) {
// Init output
- if (!isset($GLOBALS['output'])) $GLOBALS['output'] = '';
-
- // Transfer username
- $username = getMessage('USERNAME_UNKNOWN');
- if (isset($GLOBALS['username'])) $username = getUsername();
+ if (!isset($GLOBALS['output'])) {
+ $GLOBALS['output'] = '';
+ } // END - if
// Do we have HTML-Code here?
if (!empty($htmlCode)) {
@@ -82,7 +81,7 @@ function outputHtml ($htmlCode, $newLine = true) {
default:
// Huh, something goes wrong or maybe you have edited config.php ???
- app_die(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--LANG_NO_RENDER_DIRECT--}');
+ debug_report_bug(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--LANG_NO_RENDER_DIRECT--}');
break;
} // END - switch
} elseif ((getPhpCaching() == 'on') && ((!isset($GLOBALS['header'])) || (count($GLOBALS['header']) == 0))) {
@@ -94,11 +93,6 @@ function outputHtml ($htmlCode, $newLine = true) {
clearOutputBuffer();
} // END - if
- // Extension 'rewrite' installed?
- if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
- $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
- } // END - if
-
// Send all HTTP headers
sendHttpHeaders();
@@ -108,11 +102,6 @@ function outputHtml ($htmlCode, $newLine = true) {
// Output code here, DO NOT REMOVE! ;-)
outputRawCode($GLOBALS['output']);
} elseif ((getConfig('OUTPUT_MODE') == 'render') && (!empty($GLOBALS['output']))) {
- // Rewrite links when rewrite extension is active
- if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
- $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
- } // END - if
-
// Send all HTTP headers
sendHttpHeaders();
@@ -133,7 +122,7 @@ function sendHttpHeaders () {
$now = gmdate('D, d M Y H:i:s') . ' GMT';
// Send HTTP header
- sendHeader('HTTP/1.1 200');
+ sendHeader('HTTP/1.1 ' . getHttpStatus());
// General headers for no caching
sendHeader('Expires: ' . $now); // RFC2616 - Section 14.21
@@ -147,32 +136,16 @@ function sendHttpHeaders () {
// Compiles the final output
function compileFinalOutput () {
- // Init counter
- $cnt = '0';
-
// Add page header and footer
addPageHeaderFooter();
- // Compile all out
- while (((strpos($GLOBALS['output'], '{--') > 0) || (strpos($GLOBALS['output'], '{!') > 0) || (strpos($GLOBALS['output'], '{?') > 0)) && ($cnt < 3)) {
- // Init common variables
- $content = array();
- $newContent = '';
-
- // Compile it
- $eval = "\$newContent = \"".compileCode(escapeQuotes($GLOBALS['output']))."\";";
- eval($eval);
+ // Do the final compilation
+ $GLOBALS['output'] = doFinalCompilation($GLOBALS['output']);
- // Was that eval okay?
- if (empty($newContent)) {
- // Something went wrong!
- debug_report_bug('Evaluation error:
' . linenumberCode($eval) . ' ', false);
- } // END - if
- $GLOBALS['output'] = $newContent;
-
- // Count round
- $cnt++;
- } // END - while
+ // Extension 'rewrite' installed?
+ if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
+ $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
+ } // END - if
// Compress it?
if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos('gzip', $_SERVER['HTTP_ACCEPT_ENCODING']) !== null)) {
@@ -196,6 +169,44 @@ function compileFinalOutput () {
flushHeaders();
}
+// Main compilation loop
+function doFinalCompilation ($code, $insertComments = true) {
+ // Insert comments? (Only valid with HTML templates, of course)
+ enableTemplateHtml($insertComments);
+
+ // Init counter
+ $cnt = 0;
+
+ // Compile all out
+ while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== false) || (strpos($code, '{?') !== false) || (strpos($code, '{%') !== false)) && ($cnt < 4)) {
+ // Init common variables
+ $content = array();
+ $newContent = '';
+
+ // Compile it
+ //* DEBUG: */ debugOutput(''.htmlentities($code).' ');
+ $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code))) . '";';
+ //* DEBUG: */ if ($insertComments) die(''.linenumberCode($eval).' ');
+ eval($eval);
+ //* DEBUG: */ die(''.htmlentities($newContent).' ');
+
+ // Was that eval okay?
+ if (empty($newContent)) {
+ // Something went wrong!
+ debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:' . linenumberCode($eval) . ' ', false);
+ } // END - if
+
+ // Use it again
+ $code = $newContent;
+
+ // Count round
+ $cnt++;
+ } // END - while
+
+ // Return the compiled code
+ return $code;
+}
+
// Output the raw HTML code
function outputRawCode ($htmlCode) {
// Output stripped HTML code to avoid broken JavaScript code, etc.
@@ -253,19 +264,16 @@ function getTotalFatalErrors () {
// Load a template file and return it's content (only it's name; do not use ' or ")
function loadTemplate ($template, $return = false, $content = array()) {
// @TODO Remove this sanity-check if all is fine
- if (!is_bool($return)) debug_report_bug('return is not bool (' . gettype($return) . ')');
+ if (!is_bool($return)) debug_report_bug(__FUNCTION__, __LINE__, 'return is not bool (' . gettype($return) . ')');
// @TODO Try to rewrite all $DATA to $content
global $DATA;
// Do we have cache?
- if (isTemplateCached($template)) {
+ if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template))) {
// Evaluate the cache
eval(readTemplateCache($template));
} elseif (!isset($GLOBALS['template_eval'][$template])) {
- // Add more variables which you want to use in your template files
- $username = getUsername();
-
// Make all template names lowercase
$template = strtolower($template);
@@ -298,7 +306,7 @@ function loadTemplate ($template, $return = false, $content = array()) {
// Do we have to compile the code?
$ret = '';
- if ((strpos($GLOBALS['tpl_content'], '$') !== false) || (strpos($GLOBALS['tpl_content'], '{--') !== false) || (strpos($GLOBALS['tpl_content'], '{!') !== false) || (strpos($GLOBALS['tpl_content'], '{?') !== false) || (strpos($GLOBALS['tpl_content'], '{%') !== false)) {
+ if ((strpos($GLOBALS['tpl_content'], '$') !== false) || (strpos($GLOBALS['tpl_content'], '{--') !== false) || (strpos($GLOBALS['tpl_content'], '{?') !== false) || (strpos($GLOBALS['tpl_content'], '{%') !== false)) {
// Normal HTML output?
if (getOutputMode() == '0') {
// Add surrounding HTML comments to help finding bugs faster
@@ -321,27 +329,31 @@ function loadTemplate ($template, $return = false, $content = array()) {
// Cache the eval() command here
$GLOBALS['template_eval'][$template] = $eval;
-
- // Eval the code
- eval($GLOBALS['template_eval'][$template]);
} elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) {
// Only admins shall see this warning or when installation mode is active
- $ret = '{--TEMPLATE_404--}
-(' . $template . ')
-
-{--TEMPLATE_CONTENT--}
-' . print_r($content, true) . '
-{--TEMPLATE_DATA--}
-' . print_r($DATA, true) . '
- ';
+ $ret = '
+ {--TEMPLATE_404--}
+
+
+ (' . $template . ')
+
+
+ {--TEMPLATE_CONTENT--}
+
' . print_r($content, true) . '
+ {--TEMPLATE_DATA--}
+
' . print_r($DATA, true) . '
+
';
} else {
// No file!
$GLOBALS['template_eval'][$template] = '404';
}
- } else {
+ }
+
+ // Code set?
+ if ((isset($GLOBALS['template_eval'][$template])) && ($GLOBALS['template_eval'][$template] != '404')) {
// Eval the code
eval($GLOBALS['template_eval'][$template]);
- }
+ } // END - if
// Do we have some content to output or return?
if (!empty($ret)) {
@@ -420,59 +432,43 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') {
// Make sure all template names are lowercase!
$template = strtolower($template);
- // Default 'nickname' if extension is not installed
- $nick = '---';
-
- // Neutral email address is default
- $email = getConfig('WEBMASTER');
-
// Is content an array?
if (is_array($content)) {
// Add expiration to array
if ((isConfigEntrySet('auto_purge')) && (getConfig('auto_purge') == '0')) {
// Will never expire!
- $content['expiration'] = getMessage('MAIL_WILL_NEVER_EXPIRE');
+ $content['expiration'] = '{--MAIL_WILL_NEVER_EXPIRE--}';
} elseif (isConfigEntrySet('auto_purge')) {
// Create nice date string
$content['expiration'] = createFancyTime(getConfig('auto_purge'));
} else {
// Missing entry
- $content['expiration'] = getMessage('MAIL_NO_CONFIG_AUTO_PURGE');
+ $content['expiration'] = '{--MAIL_NO_CONFIG_AUTO_PURGE--}';
}
} // END - if
// Load user's data
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):UID={$userid},template={$template},content[]=".gettype($content).' ');
+ //* DEBUG: */ logDebugMessage(__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($userid))) {
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):NICKNAME! ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "NICKNAME! ");
// Load by nickname
fetchUserData($userid, 'nickname');
} else {
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):NO-NICK! ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "NO-NICK! ");
/// Load by userid
fetchUserData($userid);
}
// Merge data if valid
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):content()=".count($content)." - PRE ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - PRE ");
if (isUserDataValid()) {
$content = merge_array($content, getUserDataArray());
} // END - if
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):content()=".count($content)." - AFTER ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - AFTER ");
} // END - if
- // Translate M to male or F to female if present
- if (isset($content['gender'])) $content['gender'] = translateGender($content['gender']);
-
- // Overwrite email from data if present
- if (isset($content['email'])) $email = $content['email'];
-
- // Store email for some functions in global data array
- // @TODO Do only use $content, not $DATA or raw variables
- $DATA['email'] = $email;
-
// Base directory
$basePath = sprintf("%stemplates/%s/emails/", getConfig('PATH'), getLanguage());
@@ -495,22 +491,25 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') {
$GLOBALS['tpl_content'] = readFromFile($FQFN);
// Run code
- $GLOBALS['tpl_content'] = "\$newContent = decodeEntities(\"".compileRawCode(escapeQuotes($GLOBALS['tpl_content']))."\");";
+ $GLOBALS['tpl_content'] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'])) . '");';
eval($GLOBALS['tpl_content']);
} elseif (!empty($template)) {
// Template file not found!
- $newContent = '{--TEMPLATE_404--}: ' . $template . '
-{--TEMPLATE_CONTENT--}
-' . print_r($content, true) . '
-{--TEMPLATE_DATA--}
-' . print_r($DATA, true) . '
- ';
+ $newContent = '
+ {--TEMPLATE_404--}: ' . $template . '
+
+
+ {--TEMPLATE_CONTENT--}
+
' . print_r($content, true) . '
+ {--TEMPLATE_DATA--}
+
' . print_r($DATA, true) . '
+
';
// Debug mode not active? Then remove the HTML tags
if (!isDebugModeEnabled()) $newContent = secureString($newContent);
} else {
// No template name supplied!
- $newContent = getMessage('NO_TEMPLATE_SUPPLIED');
+ $newContent = '{--NO_TEMPLATE_SUPPLIED--}';
}
// Is there some content?
@@ -532,13 +531,13 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') {
// Send mail out to an email address
function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '') {
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):TO={$toEmail},SUBJECT={$subject} ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail},SUBJECT={$subject} ");
// Compile subject line (for POINTS constant etc.)
- eval("\$subject = decodeEntities(\"".compileRawCode(escapeQuotes($subject))."\");");
+ eval('$subject = decodeEntities("' . compileRawCode(escapeQuotes($subject)) . '");');
// Set from header
- if ((!eregi('@', $toEmail)) && ($toEmail > 0)) {
+ if ((!isInStringIgnoreCase('@', $toEmail)) && ($toEmail > 0)) {
// Value detected, is the message extension installed?
// @TODO Extension 'msg' does not exist
if (isExtensionActive('msg')) {
@@ -558,10 +557,10 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '
// Is the webmaster!
$toEmail = getConfig('WEBMASTER');
}
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):TO={$toEmail} ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail} ");
// Check for PHPMailer or debug-mode
- if (!checkPhpMailerUsage()) {
+ if ((!checkPhpMailerUsage()) || (isDebugModeEnabled())) {
// Not in PHPMailer-Mode
if (empty($mailHeader)) {
// Load email header template
@@ -570,24 +569,12 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '
// Append header
$mailHeader .= loadEmailTemplate('header');
}
- } elseif (isDebugModeEnabled()) {
- if (empty($mailHeader)) {
- // Load email header template
- $mailHeader = loadEmailTemplate('header');
- } else {
- // Append header
- $mailHeader .= loadEmailTemplate('header');
- }
- }
-
- // Compile "TO"
- eval("\$toEmail = \"".compileRawCode(escapeQuotes($toEmail))."\";");
-
- // Compile "MSG"
- eval("\$message = \"".str_replace('$', '$', compileRawCode(escapeQuotes($message)))."\";");
+ } // END - if
// Fix HTML parameter (default is no!)
if (empty($isHtml)) $isHtml = 'N';
+
+ // Debug mode enabled?
if (isDebugModeEnabled()) {
// In debug mode we want to display the mail instead of sending it away so we can debug this part
outputHtml('
@@ -596,16 +583,22 @@ To : ' . htmlentities(utf8_decode($toEmail)) . '
Subject : ' . htmlentities(utf8_decode($subject)) . '
Message : ' . htmlentities(utf8_decode($message)) . '
');
+
+ // This is always fine
+ return true;
} elseif (($isHtml == 'Y') && (isExtensionActive('html_mail'))) {
// Send mail as HTML away
- sendHtmlEmail($toEmail, $subject, $message, $mailHeader);
+ return sendHtmlEmail($toEmail, $subject, $message, $mailHeader);
} elseif (!empty($toEmail)) {
// Send Mail away
- sendRawEmail($toEmail, $subject, $message, $mailHeader);
+ return sendRawEmail($toEmail, $subject, $message, $mailHeader);
} elseif ($isHtml != 'Y') {
// Problem found!
- sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader);
+ return sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader);
}
+
+ // Why did we end up here? This should not happen
+ debug_report_bug(__FUNCTION__, __LINE__, 'Ending up: template=' . $template);
}
// Check to use wether legacy mail() command or PHPMailer class
@@ -618,10 +611,10 @@ function checkPhpMailerUsage() {
// Send out a raw email with PHPMailer class or legacy mail() command
function sendRawEmail ($toEmail, $subject, $message, $from) {
// Just compile all again, to put out all configs, etc.
- eval('$toEmail = decodeEntities("' . compileRawCode(escapeQuotes($toEmail)) . '");');
- eval('$subject = decodeEntities("' . compileRawCode(escapeQuotes($subject)) . '");');
- eval('$message = decodeEntities("' . compileRawCode(escapeQuotes($message)) . '");');
- eval('$from = decodeEntities("' . compileRawCode(escapeQuotes($from)) . '");');
+ eval('$toEmail = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($toEmail)), false) . '");');
+ eval('$subject = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($subject)), false) . '");');
+ eval('$message = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($message)), false) . '");');
+ eval('$from = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($from)) , false) . '");');
// Shall we use PHPMailer class or legacy mode?
if (checkPhpMailerUsage()) {
@@ -633,7 +626,7 @@ function sendRawEmail ($toEmail, $subject, $message, $from) {
$mail = new PHPMailer();
// Set charset to UTF-8
- $mail->CharSet('UTF-8');
+ $mail->CharSet = 'UTF-8';
// Path for PHPMailer
$mail->PluginDir = sprintf("%sinc/phpmailer/", getConfig('PATH'));
@@ -664,9 +657,21 @@ function sendRawEmail ($toEmail, $subject, $message, $from) {
$mail->AddCustomHeader('Errors-To:' . getConfig('WEBMASTER'));
$mail->AddCustomHeader('X-Loop:' . getConfig('WEBMASTER'));
$mail->Send();
+
+ // Has an error occured?
+ if (!empty($mail->ErrorInfo)) {
+ // Log message
+ logDebugMessage(__FUNCTION__, __LINE__, 'Error while sending mail: ' . $mail->ErrorInfo);
+
+ // Raise an error
+ return false;
+ } else {
+ // All fine!
+ return true;
+ }
} else {
// Use legacy mail() command
- mail($toEmail, $subject, decodeEntities($message), $from);
+ return mail($toEmail, $subject, decodeEntities($message), $from);
}
}
@@ -740,13 +745,13 @@ function translateYesNo ($yn) {
// Default
$translated = '??? (' . $yn . ')';
switch ($yn) {
- case 'Y': $translated = getMessage('YES'); break;
- case 'N': $translated = getMessage('NO'); break;
+ case 'Y': $translated = '{--YES--}'; break;
+ case 'N': $translated = '{--NO--}'; break;
default:
// Log unknown value
logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected Y/N!", $yn));
break;
- }
+ } // END - switch
// Return it
return $translated;
@@ -772,6 +777,9 @@ function translatePoolType ($type) {
// Translates the american decimal dot into a german comma
function translateComma ($dotted, $cut = true, $max = '0') {
+ // First, cast all to double, due to PHP changes
+ $dotted = (double) $dotted;
+
// Default is 3 you can change this in admin area "Misc -> Misc Options"
if (!isConfigEntrySet('max_comma')) setConfigEntry('max_comma', 3);
@@ -803,7 +811,7 @@ function translateComma ($dotted, $cut = true, $max = '0') {
default: // All others
$dotted = number_format($dotted, $maxComma, '.', ',');
break;
- }
+ } // END - switch
// Return translated value
return $dotted;
@@ -816,14 +824,14 @@ function translateGender ($gender) {
// Male/female or company?
switch ($gender) {
- case 'M': $ret = getMessage('GENDER_M'); break;
- case 'F': $ret = getMessage('GENDER_F'); break;
- case 'C': $ret = getMessage('GENDER_C'); break;
+ case 'M': $ret = '{--GENDER_M--}'; break;
+ case 'F': $ret = '{--GENDER_F--}'; break;
+ case 'C': $ret = '{--GENDER_C--}'; break;
default:
- // Log unknown gender
- logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown gender %s detected.", $gender));
+ // Please report bugs on unknown genders
+ debug_report_bug(__FUNCTION__, __LINE__, sprintf("Unknown gender %s detected.", $gender));
break;
- }
+ } // END - switch
// Return translated gender
return $ret;
@@ -841,12 +849,12 @@ function translateUserStatus ($status) {
case '':
case null:
- $ret = getMessage('ACCOUNT_DELETED');
+ $ret = '{--ACCOUNT_DELETED--}';
break;
default:
- logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown status %s detected.", $status));
- $ret = getMaskedMessage('UNKNOWN_STATUS', $status);
+ // Please report all unknown status
+ debug_report_bug(__FUNCTION__, __LINE__, sprintf("Unknown status %s detected.", $status));
break;
} // END - switch
@@ -854,6 +862,53 @@ function translateUserStatus ($status) {
return $ret;
}
+// "Translates" 'visible' and 'locked' to a CSS class
+function translateMenuVisibleLocked ($content, $prefix = '') {
+ // Translate 'visible' and keep an eye on the prefix
+ switch ($content['visible']) {
+ // Should be visible
+ case 'Y': $content['visible_css'] = $prefix . 'menu_visible' ; break;
+ case 'N': $content['visible_css'] = $prefix . 'menu_invisible'; break;
+ default:
+ // Please report this
+ debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported visible value detected. content=' . print_r($content, true) . ' ');
+ break;
+ } // END - switch
+
+ // Translate 'locked' and keep an eye on the prefix
+ switch ($content['locked']) {
+ // Should be locked
+ case 'Y': $content['locked_css'] = $prefix . 'menu_locked' ; break;
+ case 'N': $content['locked_css'] = $prefix . 'menu_unlocked'; break;
+ default:
+ // Please report this
+ debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported locked value detected. content=' . print_r($content, true) . ' ');
+ break;
+ } // END - switch
+
+ // Return the resulting array
+ return $content;
+}
+
+// "Getter" for menu CSS classes, mainly used in templates
+function getMenuCssClasses ($data) {
+ // $data needs to be converted into an array
+ $content = explode('|', $data);
+
+ // Non-existent index 2 will happen in menu blocks
+ if (!isset($content[2])) $content[2] = '';
+
+ // Re-construct the array: 0=visible,1=locked,2=prefix
+ $content['visible'] = $content[0];
+ $content['locked'] = $content[1];
+
+ // Call our "translator" function
+ $content = translateMenuVisibleLocked($content, $content[2]);
+
+ // Return CSS classes
+ return ($content['visible_css'] . ' ' . $content['locked_css']);
+}
+
// Generates an URL for the dereferer
function generateDerefererUrl ($URL) {
// Don't de-refer our own links!
@@ -922,7 +977,7 @@ function makeTime ($hours, $minutes, $seconds, $stamp) {
}
// Redirects to an URL and if neccessarry extends it with own base URL
-function redirectToUrl ($URL) {
+function redirectToUrl ($URL, $allowSpider = true) {
// Compile out codes
eval('$URL = "' . compileRawCode(encodeUrl($URL)) . '";');
@@ -936,26 +991,32 @@ function redirectToUrl ($URL) {
} // END - if
// Three different ways to debug...
- //* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
+ //* DEBUG: */ debug_report_bug(__FUNCTION__, __LINE__, 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 (isSpider()) {
- // Secure the URL against bad things such als HTML insertions and so on...
- $URL = secureString($URL);
+ if ((isSpider()) && ($allowSpider === true)) {
+ // Set HTTP-Status
+ setHttpStatus('200 OK');
// Set content-type here to fix a missing array element
setContentType('text/html');
// Output new location link as anchor
- outputHtml('' . $URL . ' ');
+ outputHtml('' . secureString($URL) . ' ');
} elseif (!headers_sent()) {
+ // Clear output buffer
+ clearOutputBuffer();
+
// Clear own output buffer
$GLOBALS['output'] = '';
+ // Set header
+ setHttpStatus('302 Found');
+
// Load URL when headers are not sent
- sendHeader('Location: '.str_replace('&', '&', $URL));
+ sendRawRedirect(doFinalCompilation(str_replace('&', '&', $URL), false));
} else {
// Output error message
loadInclude('inc/header.php');
@@ -969,17 +1030,8 @@ function redirectToUrl ($URL) {
// Wrapper for redirectToUrl but URL comes from a configuration entry
function redirectToConfiguredUrl ($configEntry) {
- // Get the URL
- $URL = getConfig($configEntry);
-
- // Is this URL set?
- if (is_null($URL)) {
- // Then abort here
- debug_report_bug(sprintf("Configuration entry %s is not set!", $configEntry));
- } // END - if
-
// Load the URL
- redirectToUrl($URL);
+ redirectToUrl(getConfig($configEntry));
}
// Compiles the given HTML/mail code
@@ -999,15 +1051,18 @@ function compileCode ($code, $simple = false, $constants = true, $full = true) {
// Get timing
$compiled = microtime(true);
- // Add timing
- $code .= '';
+ // Add timing if enabled
+ if (isTemplateHtml()) {
+ // Add timing, this should be disabled in
+ $code .= '';
+ } // END - if
// Return compiled code
return $code;
}
// Compiles the code (use compileCode() only for HTML because of the comments)
-// @TODO $simple is deprecated
+// @TODO $simple/$constants are deprecated
function compileRawCode ($code, $simple = false, $constants = true, $full = true) {
// Is the code a string?
if (!is_string($code)) {
@@ -1024,16 +1079,8 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true
// Compile more through a filter
$code = runFilterChain('compile_code', $code);
- // Compile constants
- 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));
-
- // BEFORE 0.2.1 : Not used
- // WITH 0.2.1+ : Data constants
- $code = str_replace('{!', "\" . constant('", str_replace('!}', "') . \"", $code));
- } // END - if
+ // Compile message strings
+ $code = str_replace('{--', '{%message,', str_replace('--}', '%}', $code));
// Compile QUOT and other non-HTML codes
foreach ($secChars['to'] as $k => $to) {
@@ -1059,10 +1106,10 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true
$test = substr($found, 0, strlen($match));
// Does this entry exist?
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):found={$found},match={$match},set={$set} ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "found={$found},match={$match},set={$set} ");
if ($test == $match) {
// Match found!
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):fuzzyFound! ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "fuzzyFound! ");
$fuzzyFound = true;
break;
} // END - if
@@ -1072,16 +1119,16 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true
if ($fuzzyFound === true) continue;
// Take all string elements
- if ((is_string($matches[4][$key])) && (!isset($matchesFound[$match])) && (!isset($matchesFound[$key."_" . $matches[4][$key]]))) {
+ if ((is_string($matches[4][$key])) && (!isset($matchesFound[$match])) && (!isset($matchesFound[$key.'_' . $matches[4][$key]]))) {
// Replace it in the code
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):key={$key},match={$match} ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "key={$key},match={$match} ");
$newMatch = str_replace('[', "['", str_replace(']', "']", $match));
$code = str_replace($match, '".' . $newMatch . '."', $code);
$matchesFound[$key . '_' . $matches[4][$key]] = 1;
$matchesFound[$match] = 1;
} elseif (!isset($matchesFound[$match])) {
// Not yet replaced!
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):match={$match} ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "match={$match} ");
$code = str_replace($match, '".' . $match . '."', $code);
$matchesFound[$match] = 1;
}
@@ -1149,30 +1196,30 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're
if ($type == 'yn') {
// This is a yes/no selection only!
- if ($id > 0) $prefix .= "[" . $id."]";
- $OUT .= " \n";
+ if ($id > 0) $prefix .= '[' . $id . ']';
+ $OUT .= '';
} else {
// Begin with regular selection box here
- if (!empty($prefix)) $prefix .= "_";
+ if (!empty($prefix)) $prefix .= '_';
$type2 = $type;
- if ($id > 0) $type2 .= "[" . $id."]";
- $OUT .= " \n";
+ if ($id > 0) $type2 .= '[' . $id . ']';
+ $OUT .= '';
}
switch ($type) {
case 'day': // Day
for ($idx = 1; $idx < 32; $idx++) {
- $OUT .= "\n";
+ $OUT .= '>' . $idx . ' ';
} // END - for
break;
case 'month': // Month
- foreach ($GLOBALS['month_descr'] as $month => $descr) {
- $OUT .= "\n";
+ foreach ($GLOBALS['month_descr'] as $idx => $descr) {
+ $OUT .= ' ';
} // END - for
break;
@@ -1181,7 +1228,7 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're
$year = date('Y', time());
// Use configured min age or fixed?
- if ((isExtensionActive('other')) && (getExtensionVersion('other') >= '0.2.1')) {
+ if (isExtensionInstalledAndNewer('order', '0.2.1')) {
// Configured
$startYear = $year - getConfig('min_age');
} else {
@@ -1195,21 +1242,20 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're
// Check if the default value is larger than minimum and bigger than actual year
if (($default > $minYear) && ($default >= $year)) {
for ($idx = $year; $idx < ($year + 11); $idx++) {
- $OUT .= " \n";
+ $OUT .= '>' . $idx . ' ';
} // END - for
} elseif ($default == -1) {
// Current year minus 1
- for ($idx = $startYear; $idx <= ($year + 1); $idx++)
- {
- $OUT .= "" . $idx." \n";
- }
+ for ($idx = $startYear; $idx <= ($year + 1); $idx++) {
+ $OUT .= '' . $idx . ' ';
+ } // END - for
} else {
// Get current year and subtract the configured minimum age
- $OUT .= "<" . $minYear." \n";
+ $OUT .= '<' . $minYear . ' ';
// Calculate earliest year depending on extension version
- if ((isExtensionActive('other')) && (getExtensionVersion('other') >= '0.2.1')) {
+ if (isExtensionInstalledAndNewer('order', '0.2.1')) {
// Use configured minimum age
$year = date('Y', time()) - getConfig('min_age');
} else {
@@ -1219,41 +1265,41 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're
// Construct year selection list
for ($idx = $minYear; $idx <= $year; $idx++) {
- $OUT .= "\n";
+ $OUT .= '>' . $idx . ' ';
} // END - for
}
break;
case 'sec':
case 'min':
- for ($idx = '0'; $idx < 60; $idx+=5) {
+ for ($idx = 0; $idx < 60; $idx+=5) {
if (strlen($idx) == 1) $idx = '0' . $idx;
- $OUT .= "\n";
+ $OUT .= '>' . $idx . ' ';
} // END - for
break;
case 'hour':
- for ($idx = '0'; $idx < 24; $idx++) {
+ for ($idx = 0; $idx < 24; $idx++) {
if (strlen($idx) == 1) $idx = '0' . $idx;
- $OUT .= "\n";
+ $OUT .= '>' . $idx . ' ';
} // END - for
break;
case 'yn':
- $OUT .= " 6) || (empty($img_code)) || (getConfig('code_length') == '0')) {
// Stop execution of function here because of over-sized code length
- debug_report_bug('img_code ' . $img_code .' has invalid length. img_code()=' . strlen($img_code) . ' code_length=' . getConfig('code_length'));
+ debug_report_bug(__FUNCTION__, __LINE__, '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 " \n";
+ return ' ';
}
// Load image
@@ -1352,8 +1398,7 @@ function generateImageOrCode ($img_code, $headerSent = true) {
// Is it readable?
if (isFileReadable($img)) {
// Switch image type
- switch (getConfig('img_type'))
- {
+ switch (getConfig('img_type')) {
case 'jpg':
// Okay, load image and hide all errors
$image = imagecreatefromjpeg($img);
@@ -1363,7 +1408,7 @@ function generateImageOrCode ($img_code, $headerSent = true) {
// Okay, load image and hide all errors
$image = imagecreatefrompng($img);
break;
- }
+ } // END - switch
} else {
// Exit function here
logDebugMessage(__FUNCTION__, __LINE__, sprintf("File for image type %s not found.", getConfig('img_type')));
@@ -1383,7 +1428,7 @@ function generateImageOrCode ($img_code, $headerSent = true) {
switch (getConfig('img_type')) {
case 'jpg': imagejpeg($image); break;
case 'png': imagepng($image); break;
- }
+ } // END - switch
// Remove image from memory
imagedestroy($image);
@@ -1402,7 +1447,7 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align =
// Calculate 2-seconds timestamp
$stamp = round($timestamp);
- //* DEBUG: */ print("*" . $stamp.'/' . $timestamp."* ");
+ //* DEBUG: */ debugOutput('*' . $stamp .'/' . $timestamp . '*');
// Do we have a leap year?
$SWITCH = '0';
@@ -1411,29 +1456,29 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align =
$M2 = date('m', (time() + $timestamp));
// If so and if current time is before 02/29 and estimated time is after 02/29 then add 86400 seconds (one day)
- if ((floor($TEST) == $TEST) && ($M1 == "02") && ($M2 > "02")) $SWITCH = getConfig('ONE_DAY');
+ if ((floor($TEST) == $TEST) && ($M1 == '02') && ($M2 > '02')) $SWITCH = getConfig('ONE_DAY');
// First of all years...
$Y = abs(floor($timestamp / (31536000 + $SWITCH)));
- //* DEBUG: */ print("Y={$Y} ");
+ //* DEBUG: */ debugOutput('Y=' . $Y);
// Next months...
$M = abs(floor($timestamp / 2628000 - $Y * 12));
- //* DEBUG: */ print("M={$M} ");
+ //* DEBUG: */ debugOutput('M=' . $M);
// Next weeks
$W = abs(floor($timestamp / 604800 - $Y * ((365 + $SWITCH / getConfig('ONE_DAY')) / 7) - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) / 7)));
- //* DEBUG: */ print("W={$W} ");
+ //* DEBUG: */ debugOutput('W=' . $W);
// Next days...
$D = abs(floor($timestamp / 86400 - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY'))) - $W * 7));
- //* DEBUG: */ print("D={$D} ");
+ //* DEBUG: */ debugOutput('D=' . $D);
// Next hours...
$h = abs(floor($timestamp / 3600 - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) * 24) - $W * 7 * 24 - $D * 24));
- //* DEBUG: */ print("h={$h} ");
+ //* DEBUG: */ debugOutput('h=' . $h);
// Next minutes..
$m = abs(floor($timestamp / 60 - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 60 - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 60) - $W * 7 * 24 * 60 - $D * 24 * 60 - $h * 60));
- //* DEBUG: */ print("m={$m} ");
+ //* DEBUG: */ debugOutput('m=' . $m);
// And at last seconds...
$s = abs(floor($timestamp - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 3600 - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 3600) - $W * 7 * 24 * 3600 - $D * 24 * 3600 - $h * 3600 - $m * 60));
- //* DEBUG: */ print("s={$s} ");
+ //* DEBUG: */ debugOutput('s=' . $s);
// Is seconds zero and time is < 60 seconds?
if (($s == '0') && ($timestamp < 60)) {
@@ -1457,137 +1502,137 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align =
);
} else {
// Generate table
- $OUT = "\n";
- $OUT .= "
\n";
- $OUT .= "\n";
+ $OUT = '';
+ $OUT .= '
';
+ $OUT .= '';
- if (ereg('Y', $display) || (empty($display))) {
- $OUT .= " {--_YEARS--}
\n";
- }
+ if (isInString('Y', $display) || (empty($display))) {
+ $OUT .= '{--_YEARS--}
';
+ } // END - if
- if (ereg('M', $display) || (empty($display))) {
- $OUT .= " {--_MONTHS--}
\n";
- }
+ if (isInString('M', $display) || (empty($display))) {
+ $OUT .= '{--_MONTHS--}
';
+ } // END - if
- if (ereg('W', $display) || (empty($display))) {
- $OUT .= " {--_WEEKS--}
\n";
- }
+ if (isInString('W', $display) || (empty($display))) {
+ $OUT .= '{--_WEEKS--}
';
+ } // END - if
- if (ereg('D', $display) || (empty($display))) {
- $OUT .= " {--_DAYS--}
\n";
- }
+ if (isInString('D', $display) || (empty($display))) {
+ $OUT .= '{--_DAYS--}
';
+ } // END - if
- if (ereg('h', $display) || (empty($display))) {
- $OUT .= " {--_HOURS--}
\n";
- }
+ if (isInString('h', $display) || (empty($display))) {
+ $OUT .= '{--_HOURS--}
';
+ } // END - if
- if (ereg('m', $display) || (empty($display))) {
- $OUT .= " {--_MINUTES--}
\n";
- }
+ if (isInString('m', $display) || (empty($display))) {
+ $OUT .= '{--_MINUTES--}
';
+ } // END - if
- if (ereg('s', $display) || (empty($display))) {
- $OUT .= " {--_SECONDS--}
\n";
- }
+ if (isInString('s', $display) || (empty($display))) {
+ $OUT .= '{--_SECONDS--}
';
+ } // END - if
- $OUT .= " \n";
- $OUT .= "\n";
+ $OUT .= ' ';
+ $OUT .= '';
- if (ereg('Y', $display) || (empty($display))) {
+ if (isInString('Y', $display) || (empty($display))) {
// Generate year selection
- $OUT .= " \n";
- for ($idx = '0'; $idx <= 10; $idx++) {
- $OUT .= " ';
+ for ($idx = 0; $idx <= 10; $idx++) {
+ $OUT .= ' \n";
- }
- $OUT .= " \n";
+ $OUT .= '>' . $idx . '';
+ } // END - for
+ $OUT .= '';
} else {
$OUT .= ' ';
}
- if (ereg('M', $display) || (empty($display))) {
+ if (isInString('M', $display) || (empty($display))) {
// Generate month selection
- $OUT .= " \n";
- for ($idx = '0'; $idx <= 11; $idx++)
- {
- $OUT .= " ';
+ for ($idx = 0; $idx <= 11; $idx++) {
+ $OUT .= ' \n";
- }
- $OUT .= " \n";
+ $OUT .= '>' . $idx . '';
+ } // END - for
+ $OUT .= '';
} else {
$OUT .= ' ';
}
- if (ereg('W', $display) || (empty($display))) {
+ if (isInString('W', $display) || (empty($display))) {
// Generate week selection
- $OUT .= " \n";
- for ($idx = '0'; $idx <= 4; $idx++) {
- $OUT .= " ';
+ for ($idx = 0; $idx <= 4; $idx++) {
+ $OUT .= ' \n";
- }
- $OUT .= " \n";
+ $OUT .= '>' . $idx . '';
+ } // END - for
+ $OUT .= '';
} else {
$OUT .= ' ';
}
- if (ereg('D', $display) || (empty($display))) {
+ if (isInString('D', $display) || (empty($display))) {
// Generate day selection
- $OUT .= " \n";
- for ($idx = '0'; $idx <= 31; $idx++) {
- $OUT .= " ';
+ for ($idx = 0; $idx <= 31; $idx++) {
+ $OUT .= ' \n";
- }
- $OUT .= " \n";
+ $OUT .= '>' . $idx . '';
+ } // END - for
+ $OUT .= '';
} else {
$OUT .= ' ';
}
- if (ereg('h', $display) || (empty($display))) {
+ if (isInString('h', $display) || (empty($display))) {
// Generate hour selection
- $OUT .= " \n";
- for ($idx = '0'; $idx <= 23; $idx++) {
- $OUT .= " ';
+ for ($idx = 0; $idx <= 23; $idx++) {
+ $OUT .= ' \n";
- }
- $OUT .= " \n";
+ $OUT .= '>' . $idx . '';
+ } // END - for
+ $OUT .= '';
} else {
$OUT .= ' ';
}
- if (ereg('m', $display) || (empty($display))) {
+ if (isInString('m', $display) || (empty($display))) {
// Generate minute selection
- $OUT .= " \n";
- for ($idx = '0'; $idx <= 59; $idx++) {
- $OUT .= " ';
+ for ($idx = 0; $idx <= 59; $idx++) {
+ $OUT .= ' \n";
- }
- $OUT .= " \n";
+ $OUT .= '>' . $idx . '';
+ } // END - for
+ $OUT .= '';
} else {
$OUT .= ' ';
}
- if (ereg('s', $display) || (empty($display))) {
+ if (isInString('s', $display) || (empty($display))) {
// Generate second selection
- $OUT .= " \n";
- for ($idx = '0'; $idx <= 59; $idx++) {
- $OUT .= " ';
+ for ($idx = 0; $idx <= 59; $idx++) {
+ $OUT .= ' \n";
- }
- $OUT .= " \n";
+ $OUT .= '>' . $idx . '';
+ } // END - for
+ $OUT .= '';
} else {
$OUT .= ' ';
}
- $OUT .= " \n";
- $OUT .= "
\n";
- $OUT .= "
\n";
- // Return generated HTML code
+ $OUT .= ' ';
+ $OUT .= '
';
+ $OUT .= '
';
}
+
+ // Return generated HTML code
return $OUT;
}
@@ -1600,22 +1645,31 @@ function createTimestampFromSelections ($prefix, $postData) {
$SWITCH = '0';
$TEST = date('Y', time()) / 4;
$M1 = date('m', time());
+
// If so and if current time is before 02/29 and estimated time is after 02/29 then add 86400 seconds (one day)
if ((floor($TEST) == $TEST) && ($M1 == '02') && ($postData[$prefix . '_mo'] > '02')) $SWITCH = getConfig('ONE_DAY');
+
// First add years...
$ret += $postData[$prefix . '_ye'] * (31536000 + $SWITCH);
+
// Next months...
$ret += $postData[$prefix . '_mo'] * 2628000;
+
// Next weeks
$ret += $postData[$prefix . '_we'] * 604800;
+
// Next days...
$ret += $postData[$prefix . '_da'] * 86400;
+
// Next hours...
$ret += $postData[$prefix . '_ho'] * 3600;
+
// Next minutes..
$ret += $postData[$prefix . '_mi'] * 60;
+
// And at last seconds...
$ret += $postData[$prefix . '_se'];
+
// Return calculated value
return $ret;
}
@@ -1628,7 +1682,7 @@ function createFancyTime ($stamp) {
foreach($data as $k => $v) {
if ($v > 0) {
// Value is greater than 0 "eval" data to return string
- eval("\$ret .= \", \".\$v.\" {--_".strtoupper($k)."--}\";");
+ eval('$ret .= ", ".$v." {--_' . strtoupper($k) . '--}";');
break;
} // END - if
} // END - foreach
@@ -1639,68 +1693,13 @@ function createFancyTime ($stamp) {
$ret = substr($ret, 2);
} else {
// Zero seconds
- $ret = "0 {--_SECONDS--}";
+ $ret = '0 {--_SECONDS--}';
}
// Return fancy time string
return $ret;
}
-// Generates a navigation row for listing emails
-function addEmailNavigation ($PAGES, $offset, $show_form, $colspan, $return=false) {
- $SEP = ''; $TOP = '';
- if ($show_form === false) {
- $TOP = " top";
- $SEP = " ";
- }
-
- $NAV = '';
- for ($page = 1; $page <= $PAGES; $page++) {
- // Is the page currently selected or shall we generate a link to it?
- if (($page == getRequestParameter('page')) || ((!isGetRequestParameterSet('page')) && ($page == 1))) {
- // Is currently selected, so only highlight it
- $NAV .= '-';
- } else {
- // Open anchor tag and add base URL
- $NAV .= '';
- }
- $NAV .= $page;
- if (($page == getRequestParameter('page')) || ((!isGetRequestParameterSet('page')) && ($page == 1))) {
- // Is currently selected, so only highlight it
- $NAV .= '- ';
- } else {
- // Close anchor tag
- $NAV .= '';
- }
-
- // Add seperator if we have not yet reached total pages
- if ($page < $PAGES) $NAV .= ' | ';
- } // END - for
-
- // Define constants only once
- $content['nav'] = $NAV;
- $content['span'] = $colspan;
- $content['top'] = $TOP;
- $content['sep'] = $SEP;
-
- // Load navigation template
- $OUT = loadTemplate('admin_email_nav_row', true, $content);
-
- if ($return === true) {
- // Return generated HTML-Code
- return $OUT;
- } else {
- // Output HTML-Code
- outputHtml($OUT);
- }
-}
-
// Extract host from script name
function extractHostnameFromUrl (&$script) {
// Use default SERVER_URL by default... ;) So?
@@ -1717,10 +1716,10 @@ function extractHostnameFromUrl (&$script) {
// Extract host name
$host = str_replace('http://', '', $url);
- if (ereg('/', $host)) $host = substr($host, 0, strpos($host, '/'));
+ if (isInString('/', $host)) $host = substr($host, 0, strpos($host, '/'));
// Generate relative URL
- //* DEBUG: */ print("SCRIPT=" . $script.' ');
+ //* DEBUG: */ debugOutput('SCRIPT=' . $script);
if (substr(strtolower($script), 0, 7) == 'http://') {
// But only if http:// is in front!
$script = substr($script, (strlen($url) + 7));
@@ -1729,7 +1728,7 @@ function extractHostnameFromUrl (&$script) {
$script = substr($script, (strlen($url) + 8));
}
- //* DEBUG: */ print("SCRIPT=" . $script.' ');
+ //* DEBUG: */ debugOutput('SCRIPT=' . $script);
if (substr($script, 0, 1) == '/') $script = substr($script, 1);
// Return host name
@@ -1768,11 +1767,9 @@ function sendGetRequest ($script, $data = array()) {
} else {
$request .= 'User-Agent: ' . getConfig('TITLE') . '/' . getConfig('VERSION') . getConfig('HTTP_EOL');
}
- $request .= 'Accept: text/plain;q=0.8' . getConfig('HTTP_EOL');
+ $request .= 'Accept: image/png,image/*;q=0.8,text/plain,text/html,*/*;q=0.5' . getConfig('HTTP_EOL');
$request .= 'Accept-Charset: UTF-8,*' . getConfig('HTTP_EOL');
- $request .= 'Cache-Control: no-cache' . getConfig('HTTP_EOL');
- $request .= 'Content-Type: text/plain' . getConfig('HTTP_EOL');
- $request .= 'Content-Length: 0' . getConfig('HTTP_EOL');
+ $request .= 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0' . getConfig('HTTP_EOL');
$request .= 'Connection: close' . getConfig('HTTP_EOL');
$request .= getConfig('HTTP_EOL');
@@ -1795,16 +1792,19 @@ function sendPostRequest ($script, $postData) {
// Extract host name from script
$host = extractHostnameFromUrl($script);
- // Construct request
+ // Construct request body
$body = http_build_query($postData, '', '&');
// Generate POST request header
- $request = 'POST /' . trim($script) . ' HTTP/1.1' . getConfig('HTTP_EOL');
+ $request = 'POST /' . trim($script) . ' HTTP/1.0' . getConfig('HTTP_EOL');
$request .= 'Host: ' . $host . getConfig('HTTP_EOL');
$request .= 'Referer: ' . getConfig('URL') . '/admin.php' . getConfig('HTTP_EOL');
$request .= 'User-Agent: ' . getConfig('TITLE') . '/' . getConfig('FULL_VERSION') . getConfig('HTTP_EOL');
+ $request .= 'Accept: text/plain;q=0.8' . getConfig('HTTP_EOL');
+ $request .= 'Accept-Charset: UTF-8,*' . getConfig('HTTP_EOL');
$request .= 'Cache-Control: no-cache' . getConfig('HTTP_EOL');
$request .= 'Content-Type: application/x-www-form-urlencoded' . getConfig('HTTP_EOL');
+ $request .= 'Content-Length: ' . strlen($body) . getConfig('HTTP_EOL');
$request .= 'Connection: close' . getConfig('HTTP_EOL');
$request .= getConfig('HTTP_EOL');
@@ -1835,14 +1835,26 @@ function sendRawRequest ($host, $request) {
$useProxy = true;
} // END - if
+ // Load include
+ loadIncludeOnce('inc/classes/resolver.class.php');
+
+ // Get resolver instance
+ $resolver = new HostnameResolver();
+
// Open connection
- //* DEBUG: */ die("SCRIPT=" . $script.' ');
+ //* DEBUG: */ die('SCRIPT=' . $script);
if ($useProxy === true) {
+ // Resolve hostname into IP address
+ $ip = $resolver->resolveHostname(compileRawCode(getConfig('proxy_host')));
+
// Connect to host through proxy connection
- $fp = fsockopen(compileRawCode(getConfig('proxy_host')), bigintval(getConfig('proxy_port')), $errno, $errdesc, 30);
+ $fp = fsockopen($ip, bigintval(getConfig('proxy_port')), $errno, $errdesc, 30);
} else {
+ // Resolve hostname into IP address
+ $ip = $resolver->resolveHostname($host);
+
// Connect to host directly
- $fp = fsockopen($host, 80, $errno, $errdesc, 30);
+ $fp = fsockopen($ip, 80, $errno, $errdesc, 30);
}
// Is there a link?
@@ -1858,35 +1870,13 @@ function sendRawRequest ($host, $request) {
// Do we use proxy?
if ($useProxy === true) {
- // Generate CONNECT request header
- $proxyTunnel = 'CONNECT ' . $host . ':80 HTTP/1.1' . getConfig('HTTP_EOL');
- $proxyTunnel .= 'Host: ' . $host . getConfig('HTTP_EOL');
-
- // Use login data to proxy? (username at least!)
- if (getConfig('proxy_username') != '') {
- // Add it as well
- $encodedAuth = base64_encode(compileRawCode(getConfig('proxy_username')) . getConfig('ENCRYPT_SEPERATOR') . compileRawCode(getConfig('proxy_password')));
- $proxyTunnel .= 'Proxy-Authorization: Basic ' . $encodedAuth . getConfig('HTTP_EOL');
- } // END - if
-
- // Add last new-line
- $proxyTunnel .= getConfig('HTTP_EOL');
- //* DEBUG: */ print('proxyTunnel= ' . $proxyTunnel.' ');
-
- // Write request
- fwrite($fp, $proxyTunnel);
-
- // Got response?
- if (feof($fp)) {
- // No response received
- return $response;
- } // END - if
+ // Setup proxy tunnel
+ $response = setupProxyTunnel($host, $fp);
- // Read the first line
- $resp = trim(fgets($fp, 10240));
- $respArray = explode(' ', $resp);
- if ((strtolower($respArray[0]) !== 'http/1.0') || ($respArray[1] != '200')) {
+ // If the response is invalid, abort
+ if ((count($response) == 3) && (empty($response[0])) && (empty($response[1])) && (empty($response[2]))) {
// Invalid response!
+ logDebugMessage(__FUNCTION__, __LINE__, 'Proxy tunnel not working?');
return $response;
} // END - if
} // END - if
@@ -1933,7 +1923,7 @@ function sendRawRequest ($host, $request) {
// Time request if debug-mode is enabled
if (isDebugModeEnabled()) {
// Add debug message...
- logDebugMessage(__FUNCTION__, __LINE__, 'Request took ' . (microtime(true) - $start) . ' seconds.');
+ logDebugMessage(__FUNCTION__, __LINE__, 'Request took ' . (microtime(true) - $start) . ' seconds and returned ' . count($response) . ' line(s).');
} // END - if
// Skip first empty lines
@@ -1952,12 +1942,14 @@ function sendRawRequest ($host, $request) {
}
} // END - foreach
- //* DEBUG: */ print('Response: '.print_r($response, true).' ');
+ //* DEBUG: */ debugOutput('Request: '.print_r($request, true).' ');
+ //* DEBUG: */ debugOutput('Response: '.print_r($response, true).' ');
// Proxy agent found or something went wrong?
if (!isset($response[0])) {
// No response, maybe timeout
$response = array('', '', '');
+ logDebugMessage(__FUNCTION__, __LINE__, 'Invalid empty response array, maybe timed out?');
} elseif ((substr(strtolower($response[0]), 0, 11) == 'proxy-agent') && ($useProxy === true)) {
// Proxy header detected, so remove two lines
array_shift($response);
@@ -1965,8 +1957,9 @@ function sendRawRequest ($host, $request) {
} // END - if
// Was the request successfull?
- if ((!eregi('200 OK', $response[0])) || (empty($response[0]))) {
+ if ((!isInStringIgnoreCase('200 OK', $response[0])) || (empty($response[0]))) {
// Not found / access forbidden
+ logDebugMessage(__FUNCTION__, __LINE__, 'Unexpected status code ' . $response[0] . ' detected. "200 OK" was expected.');
$response = array('', '', '');
} // END - if
@@ -1974,7 +1967,48 @@ function sendRawRequest ($host, $request) {
return $response;
}
-// Taken from www.php.net eregi() user comments
+// Sets up a proxy tunnel for given hostname and through resource
+function setupProxyTunnel ($host, $resource) {
+ // Initialize array
+ $response = array('', '', '');
+
+ // Generate CONNECT request header
+ $proxyTunnel = 'CONNECT ' . $host . ':80 HTTP/1.0' . getConfig('HTTP_EOL');
+ $proxyTunnel .= 'Host: ' . $host . getConfig('HTTP_EOL');
+
+ // Use login data to proxy? (username at least!)
+ if (getConfig('proxy_username') != '') {
+ // Add it as well
+ $encodedAuth = base64_encode(compileRawCode(getConfig('proxy_username')) . ':' . compileRawCode(getConfig('proxy_password')));
+ $proxyTunnel .= 'Proxy-Authorization: Basic ' . $encodedAuth . getConfig('HTTP_EOL');
+ } // END - if
+
+ // Add last new-line
+ $proxyTunnel .= getConfig('HTTP_EOL');
+ //* DEBUG: */ debugOutput('proxyTunnel= ' . $proxyTunnel.' ');
+
+ // Write request
+ fwrite($fp, $proxyTunnel);
+
+ // Got response?
+ if (feof($fp)) {
+ // No response received
+ return $response;
+ } // END - if
+
+ // Read the first line
+ $resp = trim(fgets($fp, 10240));
+ $respArray = explode(' ', $resp);
+ if ((strtolower($respArray[0]) !== 'http/1.0') || ($respArray[1] != '200')) {
+ // Invalid response!
+ return $response;
+ } // END - if
+
+ // All fine!
+ return $respArray;
+}
+
+// Taken from www.php.net isInStringIgnoreCase() user comments
function isEmailValid ($email) {
// Check first part of email address
$first = '[-a-z0-9!#$%&\'*+/=?^_<{|}~]+(\.[-a-zA-Z0-9!#$%&\'*+/=?^_<{|}~]+)*';
@@ -1989,15 +2023,15 @@ function isEmailValid ($email) {
return preg_match($regex, $email);
}
-// Function taken from user comments on www.php.net / function eregi()
+// Function taken from user comments on www.php.net / function isInStringIgnoreCase()
function isUrlValid ($URL, $compile=true) {
// Trim URL a little
$URL = trim(urldecode($URL));
- //* DEBUG: */ outputHtml($URL.' ');
+ //* DEBUG: */ debugOutput($URL);
// Compile some chars out...
if ($compile === true) $URL = compileUriCode($URL, false, false, false);
- //* DEBUG: */ outputHtml($URL.' ');
+ //* DEBUG: */ debugOutput($URL);
// Check for the extension filter
if (isExtensionActive('filter')) {
@@ -2011,19 +2045,22 @@ function isUrlValid ($URL, $compile=true) {
}
// Generate a list of administrative links to a given userid
-function generateMemberAdminActionLinks ($userid, $status = '') {
+function generateMemberAdminActionLinks ($userid) {
// Make sure userid is a number
- if ($userid != bigintval($userid)) debug_report_bug('userid is not a number!');
+ if ($userid != bigintval($userid)) debug_report_bug(__FUNCTION__, __LINE__, 'userid is not a number!');
// Define all main targets
$targetArray = array('del_user', 'edit_user', 'lock_user', 'add_points', 'sub_points');
+ // Get user status
+ $status = getFetchedUserData('userid', $userid, 'status');
+
// Begin of navigation links
- $OUT = '[ ';
+ $OUT = '[';
foreach ($targetArray as $tar) {
$OUT .= '".__LINE__."): " . $constName."-CACHE! ");
+ //* DEBUG: */ debugOutput(__FUNCTION__ . '(' . __LINE__ . ' ): ' . $constName."-CACHE! ");
$res = ($GLOBALS['cache_array']['const'][$constName] === true);
} else {
// Check constant
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ): " . $constName."-RESOLVE! ");
+ //* DEBUG: */ debugOutput(__FUNCTION__ . '(' . __LINE__ . ' ): ' . $constName."-RESOLVE! ");
if (defined($constName)) {
// Found!
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ): " . $constName."-FOUND! ");
+ //* DEBUG: */ debugOutput(__FUNCTION__ . '(' . __LINE__ . ' ): ' . $constName."-FOUND! ");
$res = (constant($constName) === true);
} // END - if
@@ -2405,187 +2456,10 @@ function generateErrorCodeFromUserStatus ($status='') {
return $errorCode;
}
-// Function to search for the last modifified file
-function searchDirsRecursive ($dir, &$last_changed) {
- // Get dir as array
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):dir=" . $dir.' ');
- // 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__."(".__LINE__." ):ds[]=".count($ds).' ');
-
- // 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__."(".__LINE__." ):FQFN={$FQFN} ");
- if (isDirectory($FQFN)) {
- // $FQFN is a directory so also crawl into this directory
- $newDir = $d;
- if (!empty($dir)) $newDir = $dir . '/'. $d;
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):DESCENT: " . $newDir.' ');
- searchDirsRecursive($newDir, $last_changed);
- } elseif (isFileReadable($FQFN)) {
- // $FQFN is a filename and no directory
- $time = filemtime($FQFN);
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):File: " . $d." found. (".($last_changed['time'] - $time).") ");
- if ($last_changed['time'] < $time) {
- // This file is newer as the file before
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ) - NEWER! ");
- $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 ((isGetRequestParameterSet('check_revision_data')) && (getRequestParameter('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('mapper='.print_r($mapper, true).' ins_vers='.print_r($ins_vers, true).' ');
-
- // 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()));
-
- // ... and call recursive
- return getActualVersion($type);
- } // END - if
- }
-}
-
-// Repares an array we are looking for
-// The returned Array is needed twice (in getArrayFromActualVersion() and in getActualVersion() in the old .revision-fallback) so I puted it in an extra function to not polute the global namespace
-function getSearchFor () {
- // Add Revision, Date, Tag and Author
- $searchFor = array('Revision', 'Date', 'Tag', 'Author', 'File');
-
- // Return the created array
- return $searchFor;
-}
-
-// @TODO Please describe this function
-function getArrayFromActualVersion () {
- // Init variables
- $next_dir = '';
-
- // Directory to start with search
- $last_changed = array(
- 'path_name' => '',
- 'time' => 0
- );
-
- // Init return array
- $akt_vers = array();
-
- // Init value for counting the founded keywords
- $res = '0';
-
- // Searches all Files and there date of the last modifikation and puts the newest File in $last_changed.
- searchDirsRecursive($next_dir, $last_changed); // @TODO small change to API to $last_changed = searchDirsRecursive($next_dir, $time);
-
- // Get file
- $last_file = readFromFile($last_changed['path_name']);
-
- // Get all the keywords to search for
- $searchFor = getSearchFor();
-
- // This foreach loops the $searchFor-Tags (array('Revision', 'Date', 'Tag', 'Author') --> could easaly extended in the future)
- foreach ($searchFor as $search) {
- // Searches for "$search-tag:VALUE$" or "$search-tag::VALUE$"(the stylish keywordversion ;-)) in the lates modified file
- $res += preg_match('@\$' . $search.'(:|::) (.*) \$@U', $last_file, $t);
- // This trimms the search-result and puts it in the $GLOBALS['cache_array']['revision']-return array
- if (isset($t[2])) $GLOBALS['cache_array']['revision'][$search] = trim($t[2]);
- } // END - foreach
-
- // Save the last-changed filename for debugging
- $GLOBALS['cache_array']['revision']['File'] = $last_changed['path_name'];
-
- // at least 3 keyword-Tags are needed for propper values
- if ($res && $res >= 3
- && isset($GLOBALS['cache_array']['revision']['Revision']) && $GLOBALS['cache_array']['revision']['Revision'] != ''
- && isset($GLOBALS['cache_array']['revision']['Date']) && $GLOBALS['cache_array']['revision']['Date'] != ''
- && isset($GLOBALS['cache_array']['revision']['Tag']) && $GLOBALS['cache_array']['revision']['Tag'] != '') {
- // Prepare content witch need special treadment
-
- // Prepare timestamp for date
- preg_match('@(....)-(..)-(..) (..):(..):(..)@', $GLOBALS['cache_array']['revision']['Date'], $match_d);
- $GLOBALS['cache_array']['revision']['Date'] = mktime($match_d[4], $match_d[5], $match_d[6], $match_d[2], $match_d[3], $match_d[1]);
-
- // Add author to the Tag if the author is set and is not quix0r (lead coder)
- if ((isset($GLOBALS['cache_array']['revision']['Author'])) && ($GLOBALS['cache_array']['revision']['Author'] != 'quix0r')) {
- $GLOBALS['cache_array']['revision']['Tag'] .= '-'.strtoupper($GLOBALS['cache_array']['revision']['Author']);
- } // END - if
-
- } else {
- // No valid Data from the last modificated file so read the Revision from the Server. Fallback-solution!! Should not be removed I think.
- $version = sendGetRequest('check-updates3.php');
-
- // Prepare content
- // Only sets not setted or not proper values to the Online-Server-Fallback-Solution
- if (!isset($GLOBALS['cache_array']['revision']['Revision']) || $GLOBALS['cache_array']['revision']['Revision'] == '') $GLOBALS['cache_array']['revision']['Revision'] = trim($version[10]);
- if (!isset($GLOBALS['cache_array']['revision']['Date']) || $GLOBALS['cache_array']['revision']['Date'] == '') $GLOBALS['cache_array']['revision']['Date'] = trim($version[9]);
- if (!isset($GLOBALS['cache_array']['revision']['Tag']) || $GLOBALS['cache_array']['revision']['Tag'] == '') $GLOBALS['cache_array']['revision']['Tag'] = trim($version[8]);
- if (!isset($GLOBALS['cache_array']['revision']['Author']) || $GLOBALS['cache_array']['revision']['Author'] == '') $GLOBALS['cache_array']['revision']['Author'] = 'quix0r';
- if (!isset($GLOBALS['cache_array']['revision']['File']) || $GLOBALS['cache_array']['revision']['File'] == '') $GLOBALS['cache_array']['revision']['File'] = trim($version[11]);
- }
-
- // Return prepared array
- return $GLOBALS['cache_array']['revision'];
-}
-
// Back-ported from the new ship-simu engine. :-)
function debug_get_printable_backtrace () {
// Init variable
- $backtrace = "\n";
+ $backtrace = '';
// Get and prepare backtrace for output
$backtraceArray = debug_backtrace();
@@ -2593,11 +2467,11 @@ function debug_get_printable_backtrace () {
if (!isset($trace['file'])) $trace['file'] = __FUNCTION__;
if (!isset($trace['line'])) $trace['line'] = __LINE__;
if (!isset($trace['args'])) $trace['args'] = array();
- $backtrace .= "".basename($trace['file'])." :" . $trace['line'].", " . $trace['function'].'('.count($trace['args']).") \n";
+ $backtrace .= '' . basename($trace['file']) . ' :' . $trace['line'].", " . $trace['function'] . '(' . count($trace['args']) . ') ';
} // END - foreach
// Close it
- $backtrace .= " \n";
+ $backtrace .= ' ';
// Return the backtrace
return $backtrace;
@@ -2622,7 +2496,7 @@ function debug_get_mailable_backtrace () {
}
// Output a debug backtrace to the user
-function debug_report_bug ($message = '', $sendEmail = true) {
+function debug_report_bug ($F, $L, $message = '', $sendEmail = true) {
// Is this already called?
if (isset($GLOBALS[__FUNCTION__])) {
// Other backtrace
@@ -2645,21 +2519,22 @@ function debug_report_bug ($message = '', $sendEmail = true) {
);
// @TODO Add a little more infos here
- logDebugMessage(__FUNCTION__, __LINE__, strip_tags($message));
+ logDebugMessage($F, $L, strip_tags($message));
} // END - if
// Add output
- $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 .= '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.";
+ $debug .= ' ';
+ $debug .= 'Request-URI: ' . getRequestUri() . '
';
+ $debug .= 'Thank you for finding bugs.
';
// Send an email? (e.g. not wanted for evaluation errors)
if (($sendEmail === true) && (!isInstallationPhase())) {
// Prepare content
$content = array(
- 'message' => trim($message),
- 'backtrace' => trim(debug_get_mailable_backtrace())
+ 'message' => trim($message),
+ 'backtrace' => trim(debug_get_mailable_backtrace())
);
// Send email to webmaster
@@ -2667,7 +2542,7 @@ function debug_report_bug ($message = '', $sendEmail = true) {
} // END - if
// And abort here
- app_die(__FUNCTION__, __LINE__, $debug);
+ app_die($F, $L, $debug);
}
// Generates a ***weak*** seed
@@ -2680,40 +2555,41 @@ function getMessageFromErrorCode ($code) {
$message = '';
switch ($code) {
case '': break;
- case getCode('LOGOUT_DONE') : $message = getMessage('LOGOUT_DONE'); break;
+ case getCode('LOGOUT_DONE') : $message = '{--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('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('ACCOUNT_LOCKED') : $message = getMessage('LOGIN_STATUS_LOCKED'); break;
- case getCode('ACCOUNT_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 = getMaskedMessage('MODULE_MEM_ONLY', getRequestParameter('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(getRequestParameter('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 = getMessage('MEMBER_ENTER_MORE_MIN_RECEIVERS'); break;
- case getCode('INVALID_URL') : $message = getMessage('MEMBER_ENTER_INVALID_URL'); break;
- case getCode('UNKNOWN_ERROR') : $message = getMessage('LOGIN_UNKNOWN_ERROR'); break;
- case getCode('UNKNOWN_STATUS') : $message = getMessage('LOGIN_UNKNOWN_STATUS'); break;
+ case getCode('DATA_INVALID') : $message = '{--MAIL_DATA_INVALID--}'; break;
+ case getCode('POSSIBLE_INVALID') : $message = '{--MAIL_POSSIBLE_INVALID--}'; break;
+ case getCode('USER_404') : $message = '{--USER_404--}'; break;
+ case getCode('STATS_404') : $message = '{--MAIL_STATS_404--}'; break;
+ case getCode('ALREADY_CONFIRMED') : $message = '{--MAIL_ALREADY_CONFIRMED--}'; break;
+ case getCode('WRONG_PASS') : $message = '{--LOGIN_WRONG_PASS--}'; break;
+ case getCode('WRONG_ID') : $message = '{--LOGIN_WRONG_ID--}'; break;
+ case getCode('ACCOUNT_LOCKED') : $message = '{--LOGIN_STATUS_LOCKED--}'; break;
+ case getCode('ACCOUNT_UNCONFIRMED'): $message = '{--LOGIN_STATUS_UNCONFIRMED--}'; break;
+ case getCode('COOKIES_DISABLED') : $message = '{--LOGIN_COOKIES_DISABLED--}'; break;
+ case getCode('BEG_SAME_AS_OWN') : $message = '{--BEG_SAME_UID_AS_OWN--}'; break;
+ case getCode('LOGIN_FAILED') : $message = '{--LOGIN_FAILED_GENERAL--}'; break;
+ case getCode('MODULE_MEMBER_ONLY') : $message = getMaskedMessage('MODULE_MEMBER_ONLY', getRequestParameter('mod')); break;
+ case getCode('OVERLENGTH') : $message = '{--MEMBER_TEXT_OVERLENGTH--}'; break;
+ case getCode('URL_FOUND') : $message = '{--MEMBER_TEXT_CONTAINS_URL--}'; break;
+ case getCode('SUBJ_URL') : $message = '{--MEMBER_SUBJ_CONTAINS_URL--}'; break;
+ case getCode('BLIST_URL') : $message = '{--MEMBER_URL_BLACK_LISTED--} {--MEMBER_BLIST_TIME--}: ' . generateDateTime(getRequestParameter('blist'), 0); break;
+ case getCode('NO_RECS_LEFT') : $message = '{--MEMBER_SELECTED_MORE_RECS--}'; break;
+ case getCode('INVALID_TAGS') : $message = '{--MEMBER_HTML_INVALID_TAGS--}'; break;
+ case getCode('MORE_POINTS') : $message = '{--MEMBER_MORE_POINTS_NEEDED--}'; break;
+ case getCode('MORE_RECEIVERS1') : $message = '{--MEMBER_ENTER_MORE_RECEIVERS--}'; break;
+ case getCode('MORE_RECEIVERS2') : $message = '{--MEMBER_NO_MORE_RECEIVERS_FOUND--}'; break;
+ case getCode('MORE_RECEIVERS3') : $message = '{--MEMBER_ENTER_MORE_MIN_RECEIVERS--}'; break;
+ case getCode('INVALID_URL') : $message = '{--MEMBER_ENTER_INVALID_URL--}'; break;
+ case getCode('NO_MAIL_TYPE') : $message = '{--MEMBER_NO_MAIL_TYPE_SELECTED--}'; break;
+ case getCode('UNKNOWN_ERROR') : $message = '{--LOGIN_UNKNOWN_ERROR--}'; break;
+ case getCode('UNKNOWN_STATUS') : $message = '{--LOGIN_UNKNOWN_STATUS--}'; break;
case getCode('ERROR_MAILID'):
if (isExtensionActive('mailid', true)) {
- $message = getMessage('ERROR_CONFIRMING_MAIL');
+ $message = '{--ERROR_CONFIRMING_MAIL--}';
} else {
- $message = getMaskedMessage('EXTENSION_PROBLEM_NOT_INSTALLED', 'mailid');
+ $message = getMaskedMessage('EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', 'mailid');
}
break;
@@ -2721,14 +2597,14 @@ function getMessageFromErrorCode ($code) {
if (isGetRequestParameterSet('ext')) {
$message = generateExtensionInactiveNotInstalledMessage(getRequestParameter('ext'));
} else {
- $message = getMessage('EXTENSION_PROBLEM_UNSET_EXT');
+ $message = '{--EXTENSION_PROBLEM_UNSET_EXT--}';
}
break;
case getCode('URL_TLOCK'):
// @TODO Move this SQL code into a function, let's say 'getTimestampFromPoolId($id) ?
$result = SQL_QUERY_ESC("SELECT `timestamp` FROM `{?_MYSQL_PREFIX?}_pool` WHERE `id`=%s LIMIT 1",
- array(bigintval(getRequestParameter('id'))), __FILE__, __LINE__);
+ array(bigintval(getRequestParameter('id'))), __FUNCTION__, __LINE__);
// Load timestamp from last order
list($timestamp) = SQL_FETCHROW($result);
@@ -2790,7 +2666,7 @@ function compileUriCode ($code, $simple = true) {
return $code;
}
-// Function taken from user comments on www.php.net / function eregi()
+// Function taken from user comments on www.php.net / function isInStringIgnoreCase()
function isUrlValidSimple ($url) {
// Prepare URL
$url = secureString(str_replace("\\", '', compileRawCode(urldecode($url))));
@@ -2833,19 +2709,20 @@ function isUrlValidSimple ($url) {
$pattern['d1g12'] = $http . $domain1 . $getstring1;
$pattern['d2g12'] = $http . $domain2 . $getstring1;
$pattern['ipg12'] = $http . $ip . $getstring1;
+
// Test all patterns
$reg = false;
foreach ($pattern as $key => $pat) {
// Debug regex?
- if (isDebugRegExpressionEnabled()) {
+ if (isDebugRegularExpressionEnabled()) {
// @TODO Are these convertions still required?
$pat = str_replace('.', "\.", $pat);
$pat = str_replace('@', "\@", $pat);
- //* DEBUG: */ outputHtml($key."= " . $pat . ' ');
+ //* DEBUG: */ debugOutput($key."= " . $pat);
} // END - if
// Check if expression matches
- $reg = ($reg || preg_match(('^' . $pat.'^'), $url));
+ $reg = ($reg || preg_match(('^' . $pat . '^'), $url));
// Does it match?
if ($reg === true) break;
@@ -2870,12 +2747,12 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) {
$tmp = $FQFN . '.tmp';
// Open the source file
- $fp = fopen($FQFN, 'r') or outputHtml('READ: ' . $FQFN . ' ');
+ $fp = fopen($FQFN, 'r') or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot read. file=' . basename($FQFN));
// Is the resource valid?
if (is_resource($fp)) {
// Open temporary file
- $fp_tmp = fopen($tmp, 'w') or outputHtml('WRITE: ' . $tmp . ' ');
+ $fp_tmp = fopen($tmp, 'w') or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot write. tmp=' . basename($tmp) . ',file=' . $FQFN);
// Is the resource again valid?
if (is_resource($fp_tmp)) {
@@ -2924,7 +2801,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) {
}
} else {
// File not found, not readable or writeable
- outputHtml('404: ' . $FQFN . ' ');
+ debug_report_bug(__FUNCTION__, __LINE__, 'File not readable/writeable. file=' . basename($FQFN));
}
// An error was detected!
@@ -2949,8 +2826,8 @@ function logDebugMessage ($funcFile, $line, $message, $force=true) {
// Remove CRLF
$message = str_replace("\r", '', str_replace("\n", '', $message));
- // Log this message away, we better don't call app_die() here to prevent an endless loop
- $fp = fopen(getConfig('CACHE_PATH') . 'debug.log', 'a') or die(__FUNCTION__.'['.__LINE__.']: Cannot write logfile debug.log!');
+ // Log this message away
+ $fp = fopen(getConfig('CACHE_PATH') . 'debug.log', 'a') or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot write logfile debug.log!');
fwrite($fp, date('d.m.Y|H:i:s', time()) . '|' . getModule(false) . '|' . basename($funcFile) . '|' . $line . '|' . $message . "\n");
fclose($fp);
} // END - if
@@ -3047,19 +2924,19 @@ function convertCommaToDot ($str) {
}
// Handle menu-depending failed logins and return the rendered content
-function handleLoginFailtures ($accessLevel) {
+function handleLoginFailures ($accessLevel) {
// Default output is empty ;-)
$OUT = '';
// Is the session data set?
- if ((isSessionVariableSet('mxchange_' . $accessLevel.'_failures')) && (isSessionVariableSet('mxchange_' . $accessLevel.'_last_fail'))) {
+ if ((isSessionVariableSet('mailer_' . $accessLevel . '_failures')) && (isSessionVariableSet('mailer_' . $accessLevel . '_last_failure'))) {
// Ignore zero values
- if (getSession('mxchange_' . $accessLevel.'_failures') > 0) {
+ if (getSession('mailer_' . $accessLevel . '_failures') > 0) {
// Non-guest has login failures found, get both data and prepare it for template
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ):accessLevel={$accessLevel} ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "accessLevel={$accessLevel} ");
$content = array(
- 'login_failures' => getSession('mxchange_' . $accessLevel.'_failures'),
- 'last_failure' => generateDateTime(getSession('mxchange_' . $accessLevel.'_last_fail'), 2)
+ 'login_failures' => getSession('mailer_' . $accessLevel . '_failures'),
+ 'last_failure' => generateDateTime(getSession('mailer_' . $accessLevel . '_last_failure'), 2)
);
// Load template
@@ -3067,8 +2944,8 @@ function handleLoginFailtures ($accessLevel) {
} // END - if
// Reset session data
- setSession('mxchange_' . $accessLevel.'_failures', '');
- setSession('mxchange_' . $accessLevel.'_last_fail', '');
+ setSession('mailer_' . $accessLevel . '_failures', '');
+ setSession('mailer_' . $accessLevel . '_last_failure', '');
} // END - if
// Return rendered content
@@ -3076,7 +2953,7 @@ function handleLoginFailtures ($accessLevel) {
}
// Rebuild cache
-function rebuildCacheFile ($cache, $inc = '', $force = false) {
+function rebuildCache ($cache, $inc = '', $force = false) {
// Debug message
/* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("cache=%s, inc=%s, force=%s", $cache, $inc, intval($force)));
@@ -3096,7 +2973,7 @@ function rebuildCacheFile ($cache, $inc = '', $force = false) {
// Is the include there?
if (isIncludeReadable($inc)) {
// And rebuild it from scratch
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__." ): inc={$inc} - LOADED! ");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "inc={$inc} - LOADED! ");
loadInclude($inc);
} else {
// Include not found!
@@ -3143,25 +3020,27 @@ function addNewBonusMail ($data, $mode = '', $output=true) {
if (!empty($receiver)) {
// Add bonus mail to queue
addBonusMailToQueue(
- $data['subject'],
- $data['text'],
- $receiver,
- $data['points'],
- $data['seconds'],
- $data['url'],
- $data['cat'],
- $mode,
- $data['receiver']
+ $data['subject'],
+ $data['text'],
+ $receiver,
+ $data['points'],
+ $data['seconds'],
+ $data['url'],
+ $data['cat'],
+ $mode,
+ $data['receiver']
);
// Mail inserted into bonus pool
- if ($output) loadTemplate('admin_settings_saved', false, getMessage('ADMIN_BONUS_SEND'));
- } elseif ($output) {
+ if ($output === true) {
+ loadTemplate('admin_settings_saved', false, '{--ADMIN_BONUS_SEND--}');
+ } // END - if
+ } elseif ($output === true) {
// More entered than can be reached!
- loadTemplate('admin_settings_saved', false, getMessage('ADMIN_MORE_SELECTED'));
+ loadTemplate('admin_settings_saved', false, '{--ADMIN_MORE_SELECTED--}');
} else {
// Debug log
- logDebugMessage(__FUNCTION__, __LINE__, "cat={$data['cat']},receiver={$data['receiver']},data=".base64_encode(serialize($data))." More selected, than available!");
+ logDebugMessage(__FUNCTION__, __LINE__, 'cat=' . $data['cat'] . ',receiver=' . $data['receiver'] . ',data=' . base64_encode(serialize($data)) . ' More selected, than available!');
}
}
@@ -3191,7 +3070,7 @@ function determineReferalId () {
} 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)) {
+ } elseif ((isExtensionInstalledAndNewer('sql_patches', '0.1.2')) && (getConfig('def_refid') > 0)) {
// Set default refid as refid in URL
$GLOBALS['refid'] = getConfig('def_refid');
} else {
@@ -3244,10 +3123,10 @@ function shutdown () {
// Check if not in installation phase and the link is up
if ((!isInstallationPhase()) && (SQL_IS_LINK_UP())) {
// Close link
- SQL_CLOSE(__FILE__, __LINE__);
+ SQL_CLOSE(__FUNCTION__, __LINE__);
} elseif (!isInstallationPhase()) {
// No database link
- addFatalMessage(__FILE__, __LINE__, getMessage('NO_DB_LINK_SHUTDOWN'));
+ addFatalMessage(__FUNCTION__, __LINE__, '{--NO_DB_LINK_SHUTDOWN--}');
}
// Stop executing here
@@ -3262,7 +3141,7 @@ function initMemberId () {
// Setter for member id
function setMemberId ($memberid) {
// We should not set member id to zero
- if ($memberid == '0') debug_report_bug('Userid should not be set zero.');
+ if ($memberid == '0') debug_report_bug(__FUNCTION__, __LINE__, 'Userid should not be set zero.');
// Set it secured
$GLOBALS['member_id'] = bigintval($memberid);
@@ -3315,7 +3194,7 @@ function getExtraTitle () {
// Is the extra title set?
if (!isExtraTitleSet()) {
// No, then abort here
- debug_report_bug('extra_title is not set!');
+ debug_report_bug(__FUNCTION__, __LINE__, 'extra_title is not set!');
} // END - if
// Return it
@@ -3332,7 +3211,7 @@ function generateExtensionInactiveMessage ($ext_name) {
// Is the extension empty?
if (empty($ext_name)) {
// This should not happen
- debug_report_bug(__FUNCTION__ . ': Parameter ext is empty. This should not happen.');
+ debug_report_bug(__FUNCTION__, __LINE__, 'Parameter ext is empty. This should not happen.');
} // END - if
// Default message
@@ -3353,16 +3232,16 @@ function generateExtensionNotInstalledMessage ($ext_name) {
// Is the extension empty?
if (empty($ext_name)) {
// This should not happen
- debug_report_bug(__FUNCTION__ . ': Parameter ext is empty. This should not happen.');
+ debug_report_bug(__FUNCTION__, __LINE__, 'Parameter ext is empty. This should not happen.');
} // END - if
// Default message
- $message = getMaskedMessage('EXTENSION_PROBLEM_EXT_NOT_INSTALLED', $ext_name);
+ $message = getMaskedMessage('EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', $ext_name);
// Is an admin logged in?
if (isAdmin()) {
// Then output admin message
- $message = getMaskedMessage('ADMIN_EXTENSION_PROBLEM_EXT_NOT_INSTALLED', $ext_name);
+ $message = getMaskedMessage('ADMIN_EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', $ext_name);
} // END - if
// Return prepared message
@@ -3410,14 +3289,14 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
$files = array();
// Open directory
- $dirPointer = opendir(getConfig('PATH') . $baseDir) or app_die(__FUNCTION__, __LINE__, 'Cannot read directory ' . basename($baseDir) . '.');
+ $dirPointer = opendir(getConfig('PATH') . $baseDir) or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot read directory ' . basename($baseDir) . '.');
// Read all entries
while ($baseFile = readdir($dirPointer)) {
// Exclude '.', '..' and entries in $excludeArray automatically
if (in_array($baseFile, $excludeArray, true)) {
// Exclude them
- //* DEBUG: */ outputHtml('excluded=' . $baseFile . ' ');
+ //* DEBUG: */ debugOutput('excluded=' . $baseFile);
continue;
} // END - if
@@ -3431,9 +3310,9 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
// 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 . ' ');
- //* DEBUG: */ outputHtml('baseFile:' . $baseFile . ' ');
- //* DEBUG: */ outputHtml('FQFN:' . $FQFN . ' ');
+ //* DEBUG: */ debugOutput('baseDir:' . $baseDir);
+ //* DEBUG: */ debugOutput('baseFile:' . $baseFile);
+ //* DEBUG: */ debugOutput('FQFN:' . $FQFN);
// Exclude this one
continue;
@@ -3484,7 +3363,7 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
}
} else {
// We found .php file but should not search for them, why?
- debug_report_bug('We should find files with extension=' . $extension . ', but we found a PHP script.');
+ debug_report_bug(__FUNCTION__, __LINE__, 'We should find files with extension=' . $extension . ', but we found a PHP script.');
}
} elseif (substr($baseFile, -4, 4) == $extension) {
// Other, generic file found
@@ -3563,7 +3442,7 @@ function initCacheInstance () {
$GLOBALS['cache_instance'] = new CacheSystem();
if ($GLOBALS['cache_instance']->getStatus() != 'done') {
// Failed to initialize cache sustem
- addFatalMessage(__FILE__, __LINE__, '(' . __LINE__ . ' ): ' . getMessage('CACHE_CANNOT_INITIALIZE'));
+ addFatalMessage(__FUNCTION__, __LINE__, '(' . __LINE__ . ' ): {--CACHE_CANNOT_INITIALIZE--}');
} // END - if
}
@@ -3649,16 +3528,16 @@ function determinePageTitle () {
$pageTitle = '[-- ' . getConfig('MAIN_TITLE') . ' - ' . getModuleTitle(getModule()) . ' --]';
} elseif ((isInstalled()) && (!isAdminRegistered())) {
// Installed but no admin registered
- $pageTitle = getMessage('SETUP_OF_MXCHANGE');
+ $pageTitle = '{--SETUP_OF_MAILER--}';
} elseif ((!isInstalled()) || (!isAdminRegistered())) {
// Installation mode
- $pageTitle = getMessage('INSTALLATION_OF_MXCHANGE');
+ $pageTitle = '{--INSTALLATION_OF_MAILER--}';
} else {
// Configuration not found!
- $pageTitle = getMessage('NO_CONFIG_FOUND_TITLE');
+ $pageTitle = '{--NO_CONFIG_FOUND_TITLE--}';
// Do not add the fatal message in installation mode
- if ((!isInstalling()) && (!isConfigurationLoaded())) addFatalMessage(__FILE__, __LINE__, getMessage('NO_CONFIG_FOUND'));
+ if ((!isInstalling()) && (!isConfigurationLoaded())) addFatalMessage(__FUNCTION__, __LINE__, '{--NO_CONFIG_FOUND--}');
}
// Return title
@@ -3670,7 +3549,7 @@ function isTemplateCached ($template) {
// Do we have cached this result?
if (!isset($GLOBALS['template_cache'][$template])) {
// Generate FQFN
- $FQFN = sprintf("%s_compiled/templates/%s.tpl.cache", getConfig('CACHE_PATH'), $template);
+ $FQFN = generateCacheFqfn($template);
// Is it there?
$GLOBALS['template_cache'][$template] = isFileReadable($FQFN);
@@ -3685,10 +3564,7 @@ function flushTemplateCache ($template, $eval) {
// Is this cache flushed?
if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template) === false) && ($eval != '404')) {
// Generate FQFN
- $FQFN = sprintf("%s_compiled/templates/%s.tpl.cache", getConfig('CACHE_PATH'), $template);
-
- // Replace username with a call
- $eval = str_replace('$username', '".getUsername()."', $eval);
+ $FQFN = generateCacheFqfn($template);
// And flush it
writeToFile($FQFN, $eval, true);
@@ -3698,9 +3574,15 @@ function flushTemplateCache ($template, $eval) {
// Reads a template cache
function readTemplateCache ($template) {
// Check it again
- if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template))) {
+ if ((isDebuggingTemplateCache()) || (!isTemplateCached($template))) {
+ // This should not happen
+ debug_report_bug('Wether debugging of template cache is enabled or template ' . $template . ' is not cached while expected.');
+ } // END - if
+
+ // Is it cached?
+ if (!isset($GLOBALS['template_eval'][$template])) {
// Generate FQFN
- $FQFN = sprintf("%s_compiled/templates/%s.tpl.cache", getConfig('CACHE_PATH'), $template);
+ $FQFN = generateCacheFqfn($template);
// And read from it
$GLOBALS['template_eval'][$template] = readFromFile($FQFN);
@@ -3743,16 +3625,13 @@ function sendModeMails ($mod, $modes) {
$salt = substr(getSession('u_hash'), 0, -40);
// Now let's compare passwords
- $hash = generatePassString(getUserData('password'));
+ $hash = encodeHashForCookie(getUserData('password'));
// Does the hash match or should we change it?
if (($hash == getSession('u_hash')) || (postRequestParameter('pass1') == postRequestParameter('pass2'))) {
// Load the data
$content = getUserDataArray();
- // Translate gender
- $content['gender'] = translateGender($content['gender']);
-
// Clear/init the content variable
$content['message'] = '';
@@ -3764,16 +3643,16 @@ function sendModeMails ($mod, $modes) {
switch ($mode) {
case 'normal': break; // Do not add any special lines
case 'email': // Email was changed!
- $content['message'] = getMessage('MEMBER_CHANGED_EMAIL').": ".postRequestParameter('old_email')."\n";
+ $content['message'] = '{--MEMBER_CHANGED_EMAIL--}' . ': ' . postRequestParameter('old_email') . "\n";
break;
case 'pass': // Password was changed
- $content['message'] = getMessage('MEMBER_CHANGED_PASS')."\n";
+ $content['message'] = '{--MEMBER_CHANGED_PASS--}' . "\n";
break;
default:
logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown mode %s detected.", $mode));
- $content['message'] = getMessage('MEMBER_UNKNOWN_MODE') . ': ' . $mode . "\n\n";
+ $content['message'] = '{--MEMBER_UNKNOWN_MODE--}' . ': ' . $mode . "\n\n";
break;
} // END - switch
} // END - foreach
@@ -3792,7 +3671,7 @@ function sendModeMails ($mod, $modes) {
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');
+ $sub_adm = '{--ADMIN_CHANGED_DATA--}';
} else {
// No mail to admin
$message_admin = '';
@@ -3800,24 +3679,24 @@ function sendModeMails ($mod, $modes) {
}
// Set subject lines
- $sub_mem = getMessage('MEMBER_CHANGED_DATA');
+ $sub_mem = '{--MEMBER_CHANGED_DATA--}';
// Output success message
- $content = "{--MYDATA_MAIL_SENT--} ";
+ $content = '{--MYDATA_MAIL_SENT--} ';
break;
default: // Unsupported module!
logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unsupported module %s detected.", $mod));
- $content = "{--UNKNOWN_MODULE--} ";
+ $content = '{--UNKNOWN_MODULE--} ';
break;
} // END - switch
} else {
// Passwords mismatch
- $content = "{--MEMBER_PASSWORD_ERROR--} ";
+ $content = '{--MEMBER_PASSWORD_ERROR--} ';
}
} else {
// Could not load profile
- $content = "{--MEMBER_CANNOT_LOAD_PROFILE--} ";
+ $content = '{--MEMBER_CANNOT_LOAD_PROFILE--} ';
}
// Send email to user if required
@@ -3833,10 +3712,10 @@ function sendModeMails ($mod, $modes) {
sendAdminNotification($sub_adm, $message_admin, $content, getMemberId());
} elseif (getConfig('admin_notify') == 'Y') {
// Cannot send mails to admin!
- $content = getMessage('CANNOT_SEND_ADMIN_MAILS');
+ $content = '{--CANNOT_SEND_ADMIN_MAILS--}';
} else {
// No mail to admin
- $content = "{--MYDATA_MAIL_SENT--} ";
+ $content = '{--MYDATA_MAIL_SENT--} ';
}
} // END - if
@@ -3845,7 +3724,7 @@ function sendModeMails ($mod, $modes) {
}
// Generates a 'selection box' from given array
-function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent) {
+function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent = '', $extraName = '') {
// Start the output
$OUT = '
{--PLEASE_SELECT--} ';
@@ -3853,7 +3732,13 @@ function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionCo
// Walk through all options
foreach ($options as $option) {
// Add the entry
- $OUT .= ' ' . $option[$optionContent] . ' ';
+ if (empty($optionContent)) {
+ // ... from template
+ $OUT .= loadTemplate('select_' . $name . $extraName . '_option', true, $option);
+ } else {
+ // Direct HTML code
+ $OUT .= '' . $option[$optionContent] . ' ';
+ }
} // END - foreach
// Finish selection box
@@ -3867,7 +3752,7 @@ function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionCo
);
// Load template and return it
- return loadTemplate('select_' . $name . '_box', true, $content);
+ return loadTemplate('select_' . $name . $extraName . '_box', true, $content);
}
// Get a module from filename and access level
@@ -3888,7 +3773,7 @@ function getModuleFromFileName ($file, $accessLevel) {
break;
default: // Unsupported file name / access level
- debug_report_bug('Unsupported file name=' . basename($file) . '/access level=' . $accessLevel);
+ debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported file name=' . basename($file) . '/access level=' . $accessLevel);
break;
}
@@ -3898,8 +3783,8 @@ function getModuleFromFileName ($file, $accessLevel) {
// 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 already have a PHPSESSID inside or view.php is called? Then abort here
+ if ((strpos($url, session_name()) !== false) || (getOutputMode() == -3)) return $url;
// Do we have a valid session?
if (((!isset($GLOBALS['valid_session'])) || ($GLOBALS['valid_session'] === false) || (!isset($_COOKIE[session_name()]))) && (isSpider() === false)) {
@@ -3939,37 +3824,23 @@ function isSpider () {
if (empty($userAgent)) return true;
// Is it a spider?
- return ((strpos($userAgent, 'spider') !== false) || (strpos($userAgent, 'slurp') !== false) || (strpos($userAgent, 'bot') !== false));
+ return ((strpos($userAgent, 'spider') !== false) || (strpos($userAgent, 'slurp') !== false) || (strpos($userAgent, 'bot') !== false) || (strpos($userAgent, 'archiver') !== false));
}
// Prepares the header for HTML output
function loadHtmlHeader () {
- // Determine the page title
- $content['header_title'] = determinePageTitle();
+ // Run two filters:
+ // 1.) pre_page_header (mainly loads the page_header template and includes
+ // meta description)
+ runFilterChain('pre_page_header');
- // Output page header code
- $GLOBALS['page_header'] = loadTemplate('page_header', true, $content);
-
- // Include meta data in 'guest' module
- if (getModule() == 'index') {
- // Load meta data template
- $GLOBALS['page_header'] .= loadTemplate('metadata', true);
-
- // Add meta description to header
- if ((isInstalled()) && (isAdminRegistered()) && (SQL_IS_LINK_UP())) {
- // Add meta description not in admin and login module and when the script is installed
- generateMetaDescriptionCode();
- } // END - if
- } // END - if
+ // Here can be something be added, but normally one of the two filters
+ // around this line should do the job for you.
+ // 2.) post_page_header (mainly to load stylesheet, extra JavaScripts and
+ // to close the head-tag)
// Include more header data here
- $GLOBALS['page_header'] .= loadTemplate('header', true);
-
- // Include stylesheet
- loadIncludeOnce('inc/stylesheet.php');
-
- // Closing HEAD tag
- $GLOBALS['page_header'] .= '';
+ runFilterChain('post_page_header');
}
// Adds page header and footer to output array element
@@ -3989,10 +3860,10 @@ function addPageHeaderFooter () {
// Generates meta description for current module and 'what' value
function generateMetaDescriptionCode () {
- // Only include from guest area
- if (getModule() == 'index') {
+ // Only include from guest area and if sql_patches has correct version
+ if ((getModule() == 'index') && (isExtensionInstalledAndNewer('sql_patches', '0.1.6'))) {
// Construct dynamic description
- $DESCR = '{?MAIN_TITLE?} '.trim(getConfig('title_middle')) . ' ' . getTitleFromMenu('guest', getWhat());
+ $DESCR = '{?MAIN_TITLE?} ' . trim(getConfig('title_middle')) . ' ' . getTitleFromMenu('guest', getWhat());
// Output it directly
$GLOBALS['page_header'] .= ' ';
@@ -4002,6 +3873,97 @@ function generateMetaDescriptionCode () {
unset($GLOBALS['ref_level']);
}
+// Generates an FQFN for template cache from the given template name
+function generateCacheFqfn ($template, $mode = 'html') {
+ // Is this cached?
+ if (!isset($GLOBALS['template_cache_fqfn'][$template])) {
+ // Generate the FQFN
+ $GLOBALS['template_cache_fqfn'][$template] = sprintf(
+ "%s_compiled/%s/%s.tpl.cache",
+ getConfig('CACHE_PATH'),
+ $mode,
+ $template
+ );
+ } // END - if
+
+ // Return it
+ return $GLOBALS['template_cache_fqfn'][$template];
+}
+
+// Function to search for the last modified file
+function searchDirsRecursive ($dir, &$last_changed, $lookFor = 'Date') {
+ // Get dir as array
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'dir=' . $dir);
+ // 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|\.svn|debug\.log|\.cache|config\.php)$@';
+
+ $ds = getArrayFromDirectory($dir, '', false, true, array(), '.php', $excludePattern);
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'count(ds)='.count($ds));
+
+ // 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: */ logDebugMessage(__FUNCTION__, __LINE__, 'dir=' . $dir . ',d=' . $d);
+ if (isFileReadable($FQFN)) {
+ // $FQFN is a readable file so extract the requested data from it
+ $check = extractRevisionInfoFromFile($FQFN, $lookFor);
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'File: ' . $d . ' found. check=' . $check);
+
+ // Is the file more recent?
+ if ((!isset($last_changed[$lookFor])) || ($last_changed[$lookFor] < $check)) {
+ // This file is newer as the file before
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'NEWER!');
+ $last_changed['path_name'] = $FQFN;
+ $last_changed[$lookFor] = $check;
+ } // END - if
+ } else {
+ // Not readable
+ /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'File: ' . $d . ' not readable or directory.');
+ }
+ } // END - foreach
+}
+
+// "Fixes" null or empty string to count of dashes
+function fixNullEmptyToDashes ($str, $num) {
+ // Use str as default
+ $return = $str;
+
+ // Is it empty?
+ if ((is_null($str)) || (trim($str) == '')) {
+ // Set it
+ $return = str_repeat('-', $num);
+ } // END - if
+
+ // Return final string
+ return $return;
+}
+
+// Handles the braces [] of a field (e.g. value of 'name' attribute)
+function handleFieldWithBraces ($field) {
+ // Are there braces [] at the end?
+ if (substr($field, -2, 2) == '[]') {
+ // Try to find one and replace it. I do it this way to allow easy
+ // extending of this code.
+ foreach (array('admin_list_builder_id_value') as $key) {
+ // Is the cache entry set?
+ if (isset($GLOBALS[$key])) {
+ // Insert it
+ $field = str_replace('[]', '[' . $GLOBALS[$key] . ']', $field);
+
+ // And abort
+ break;
+ } // END - if
+ } // END - foreach
+ } // END - if
+
+ // Return it
+ return $field;
+}
+
//////////////////////////////////////////////////
// AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //
//////////////////////////////////////////////////
@@ -4016,7 +3978,7 @@ if (!function_exists('html_entity_decode')) {
} // END - if
if (!function_exists('http_build_query')) {
- // Taken from documentation on www.php.net, credits to Marco K. (Germany)
+ // Taken from documentation on www.php.net, credits to Marco K. (Germany) and some light mods by R.Haeder
function http_build_query($data, $prefix = '', $sep = '', $key = '') {
$ret = array();
foreach ((array)$data as $k => $v) {
@@ -4024,7 +3986,7 @@ if (!function_exists('http_build_query')) {
$k = urlencode($prefix . $k);
} // END - if
- if ((!empty($key)) || ($key === 0)) $k = $key.'['.urlencode($k).']';
+ if ((!empty($key)) || ($key === 0)) $k = $key . '[' . urlencode($k) . ']';
if (is_array($v) || is_object($v)) {
array_push($ret, http_build_query($v, '', $sep, $k));