// 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)) {
default:
// Huh, something goes wrong or maybe you have edited config.php ???
- app_die(__FUNCTION__, __LINE__, '<strong>{--FATAL_ERROR--}:</strong> {--LANG_NO_RENDER_DIRECT--}');
+ debug_report_bug(__FUNCTION__, __LINE__, '<strong>{--FATAL_ERROR--}:</strong> {--LANG_NO_RENDER_DIRECT--}');
break;
} // END - switch
} elseif ((getPhpCaching() == 'on') && ((!isset($GLOBALS['header'])) || (count($GLOBALS['header']) == 0))) {
clearOutputBuffer();
} // END - if
- // Extension 'rewrite' installed?
- if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
- $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
- } // END - if
-
// Send all HTTP headers
sendHttpHeaders();
// 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();
$now = gmdate('D, d M Y H:i:s') . ' GMT';
// Send HTTP header
- sendHeader('HTTP/1.1 200 OK');
+ sendHeader('HTTP/1.1 ' . getHttpStatus());
// General headers for no caching
sendHeader('Expires: ' . $now); // RFC2616 - Section 14.21
// Compiles the final output
function compileFinalOutput () {
- // Init counter
- $cnt = 0;
-
// Add page header and footer
addPageHeaderFooter();
- // Compile all out
- while (((strpos($GLOBALS['output'], '{--') !== false) || (strpos($GLOBALS['output'], '{!') !== false) || (strpos($GLOBALS['output'], '{?') !== false) || (strpos($GLOBALS['output'], '{%') !== false)) && ($cnt < 3)) {
- // Init common variables
- $content = array();
- $newContent = '';
-
- // Compile it
- //* DEBUG: */ print '<pre>'.htmlentities($GLOBALS['output']).'</pre>';
- $eval = '$newContent = "' . compileCode(escapeQuotes($GLOBALS['output'])) . '";';
- //* DEBUG: */ die('<pre>'.htmlentities($eval).'</pre>');
- eval($eval);
-
- // Was that eval okay?
- if (empty($newContent)) {
- // Something went wrong!
- debug_report_bug('Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', false);
- } // END - if
-
- // Use it again
- $GLOBALS['output'] = $newContent;
+ // Do the final compilation
+ $GLOBALS['output'] = doFinalCompilation($GLOBALS['output']);
- // 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)) {
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 < 3)) {
+ // Init common variables
+ $content = array();
+ $newContent = '';
+
+ // Compile it
+ //* DEBUG: */ debugOutput('<pre>'.htmlentities($code).'</pre>');
+ $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code))) . '";';
+ //* DEBUG: */ if ($insertComments) die('<pre>'.linenumberCode($eval).'</pre>');
+ eval($eval);
+ //* DEBUG: */ die('<pre>'.htmlentities($newContent).'</pre>');
+
+ // Was that eval okay?
+ if (empty($newContent)) {
+ // Something went wrong!
+ debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', 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.
// 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;
// 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);
// 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
// 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 = '<br /><span class="guest_failed">{--TEMPLATE_404--}</span><br />
-(' . $template . ')<br />
-<br />
-{--TEMPLATE_CONTENT--}
-<pre>' . print_r($content, true) . '</pre>
-{--TEMPLATE_DATA--}
-<pre>' . print_r($DATA, true) . '</pre>
-<br /><br />';
+ $ret = '<div class="para">
+ <span class="guest_failed">{--TEMPLATE_404--}</span>
+</div>
+<div class="para">
+ (' . $template . ')
+</div>
+<div class="para">
+ {--TEMPLATE_CONTENT--}
+ <pre>' . print_r($content, true) . '</pre>
+ {--TEMPLATE_DATA--}
+ <pre>' . print_r($DATA, true) . '</pre>
+</div>';
} 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)) {
} // END - if
// Load user's data
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "UID={$userid},template={$template},content[]=".gettype($content).'<br />');
+ //* 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: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - AFTER<br />");
} // 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'];
eval($GLOBALS['tpl_content']);
} elseif (!empty($template)) {
// Template file not found!
- $newContent = '{--TEMPLATE_404--}: ' . $template . '<br />
-{--TEMPLATE_CONTENT--}
-<pre>' . print_r($content, true) . '</pre>
-{--TEMPLATE_DATA--}
-<pre>' . print_r($DATA, true) . '</pre>
-<br /><br />';
+ $newContent = '<div class="para">
+ {--TEMPLATE_404--}: ' . $template . '
+</div>
+<div class="para">
+ {--TEMPLATE_CONTENT--}
+ <pre>' . print_r($content, true) . '</pre>
+ {--TEMPLATE_DATA--}
+ <pre>' . print_r($DATA, true) . '</pre>
+</div>';
// Debug mode not active? Then remove the HTML tags
if (!isDebugModeEnabled()) $newContent = secureString($newContent);
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail}<br />");
// Check for PHPMailer or debug-mode
- if (!checkPhpMailerUsage()) {
+ if ((!checkPhpMailerUsage()) || (isDebugModeEnabled())) {
// Not in PHPMailer-Mode
if (empty($mailHeader)) {
// Load email header template
// 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('<pre>
Subject : ' . htmlentities(utf8_decode($subject)) . '
Message : ' . htmlentities(utf8_decode($message)) . '
</pre>');
+
+ // This is always fine
+ return true;
} elseif (($isHtml == 'Y') && (isExtensionActive('html_mail'))) {
// Send mail as HTML away
return sendHtmlEmail($toEmail, $subject, $message, $mailHeader);
// Problem found!
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
// 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()) {
// Log unknown value
logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected Y/N!", $yn));
break;
- }
+ } // END - switch
// Return it
return $translated;
default: // All others
$dotted = number_format($dotted, $maxComma, '.', ',');
break;
- }
+ } // END - switch
// Return translated value
return $dotted;
case 'C': $ret = getMessage('GENDER_C'); break;
default:
// Please report bugs on unknown genders
- debug_report_bug(sprintf("Unknown gender %s detected.", $gender));
+ debug_report_bug(__FUNCTION__, __LINE__, sprintf("Unknown gender %s detected.", $gender));
break;
} // END - switch
default:
// Please report all unknown status
- debug_report_bug(sprintf("Unknown status %s detected.", $status));
+ debug_report_bug(__FUNCTION__, __LINE__, sprintf("Unknown status %s detected.", $status));
break;
} // END - switch
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=<pre>' . print_r($content, true) . '</pre>');
+ 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=<pre>' . print_r($content, true) . '</pre>');
+ 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!
} // 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()) && ($allowSpider === true)) {
- // Secure the URL against bad things such als HTML insertions and so on...
- $URL = secureString($URL);
+ // 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('<a href="' . $URL . '"' . $rel . '>' . $URL . '</a>');
+ outputHtml('<a href="' . $URL . '"' . $rel . '>' . secureString($URL) . '</a>');
} 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');
// 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
// Get timing
$compiled = microtime(true);
- // Add timing
- $code .= '<!-- Compilation time: ' . (($compiled - $startCompile) * 1000). 'ms //-->';
+ // Add timing if enabled
+ if (isTemplateHtml()) {
+ // Add timing, this should be disabled in
+ $code .= '<!-- Compilation time: ' . (($compiled - $startCompile) * 1000). 'ms //-->';
+ } // 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)) {
// 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) {
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: */ logDebugMessage(__FUNCTION__, __LINE__, "key={$key},match={$match}<br />");
$newMatch = str_replace('[', "['", str_replace(']', "']", $match));
if ($type == 'yn') {
// This is a yes/no selection only!
- if ($id > 0) $prefix .= "[" . $id."]";
- $OUT .= " <select name=\"" . $prefix."\" class=\"" . $class . "\" size=\"1\">\n";
+ if ($id > 0) $prefix .= '[' . $id . ']';
+ $OUT .= '<select name="' . $prefix . '" class="' . $class . '" size="1">';
} else {
// Begin with regular selection box here
- if (!empty($prefix)) $prefix .= "_";
+ if (!empty($prefix)) $prefix .= '_';
$type2 = $type;
- if ($id > 0) $type2 .= "[" . $id."]";
- $OUT .= " <select name=\"".strtolower($prefix . $type2)."\" class=\"" . $class . "\" size=\"1\">\n";
+ if ($id > 0) $type2 .= '[' . $id . ']';
+ $OUT .= '<select name="' . strtolower($prefix . $type2) . '" class="' . $class . '" size="1">';
}
switch ($type) {
case 'day': // Day
for ($idx = 1; $idx < 32; $idx++) {
- $OUT .= "<option value=\"" . $idx."\"";
+ $OUT .= '<option value="' . $idx . '"';
if ($default == $idx) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
+ $OUT .= '>' . $idx . '</option>';
} // END - for
break;
case 'month': // Month
- foreach ($GLOBALS['month_descr'] as $month => $descr) {
- $OUT .= "<option value=\"" . $month."\"";
- if ($default == $month) $OUT .= ' selected="selected"';
- $OUT .= ">" . $descr."</option>\n";
+ foreach ($GLOBALS['month_descr'] as $idx => $descr) {
+ $OUT .= '<option value="' . $idx . '"';
+ if ($default == $idx) $OUT .= ' selected="selected"';
+ $OUT .= '>' . $descr . '</option>';
} // END - for
break;
// 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 .= "<option value=\"" . $idx."\"";
+ $OUT .= '<option value="' . $idx . '"';
if ($default == $idx) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
+ $OUT .= '>' . $idx . '</option>';
} // END - for
} elseif ($default == -1) {
// Current year minus 1
- for ($idx = $startYear; $idx <= ($year + 1); $idx++)
- {
- $OUT .= "<option value=\"" . $idx."\">" . $idx."</option>\n";
- }
+ for ($idx = $startYear; $idx <= ($year + 1); $idx++) {
+ $OUT .= '<option value="' . $idx . '">' . $idx . '</option>';
+ } // END - for
} else {
// Get current year and subtract the configured minimum age
- $OUT .= "<option value=\"".($minYear - 1)."\"><" . $minYear."</option>\n";
+ $OUT .= '<option value="' . ($minYear - 1) . '"><' . $minYear . '</option>';
// Calculate earliest year depending on extension version
if (isExtensionInstalledAndNewer('order', '0.2.1')) {
// Use configured minimum age
// Construct year selection list
for ($idx = $minYear; $idx <= $year; $idx++) {
- $OUT .= "<option value=\"" . $idx."\"";
+ $OUT .= '<option value="' . $idx . '"';
if ($default == $idx) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
+ $OUT .= '>' . $idx . '</option>';
} // 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 .= "<option value=\"" . $idx."\"";
+ $OUT .= '<option value="' . $idx . '"';
if ($default == $idx) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
+ $OUT .= '>' . $idx . '</option>';
} // 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 .= "<option value=\"" . $idx."\"";
+ $OUT .= '<option value="' . $idx . '"';
if ($default == $idx) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
+ $OUT .= '>' . $idx . '</option>';
} // END - for
break;
case 'yn':
- $OUT .= "<option value=\"Y\"";
+ $OUT .= '<option value="Y"';
if ($default == 'Y') $OUT .= ' selected="selected"';
- $OUT .= ">{--YES--}</option>\n<option value=\"N\"";
+ $OUT .= '>{--YES--}</option><option value="N"';
if ($default != 'Y') $OUT .= ' selected="selected"';
- $OUT .= ">{--NO--}</option>\n";
+ $OUT .= '>{--NO--}</option>';
break;
}
- $OUT .= " </select>\n";
+ $OUT .= '</select>';
return $OUT;
}
// Has the whole value changed?
if (('' . $ret . '' != '' . $num . '') && ($abortOnMismatch === true)) {
// Log the values
- debug_report_bug('Problem with number found. ret=' . $ret . ', num='. $num);
+ debug_report_bug(__FUNCTION__, __LINE__, 'Problem with number found. ret=' . $ret . ', num='. $num);
} // END - if
// Return result
// Is the code size oversized or shouldn't we display it?
if ((strlen($img_code) > 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 "<img src=\"{%url=img.php?code=" . $img_code."%}\" alt=\"Image\" />\n";
+ return '<img src="{%url=img.php?code=' . $img_code . '%}" alt="Image" />';
}
// Load image
// 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);
// 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')));
switch (getConfig('img_type')) {
case 'jpg': imagejpeg($image); break;
case 'png': imagepng($image); break;
- }
+ } // END - switch
// Remove image from memory
imagedestroy($image);
// Calculate 2-seconds timestamp
$stamp = round($timestamp);
- //* DEBUG: */ print("*" . $stamp.'/' . $timestamp."*<br />");
+ //* DEBUG: */ debugOutput('*' . $stamp .'/' . $timestamp . '*');
// Do we have a leap year?
$SWITCH = '0';
$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}<br />");
+ //* DEBUG: */ debugOutput('Y=' . $Y);
// Next months...
$M = abs(floor($timestamp / 2628000 - $Y * 12));
- //* DEBUG: */ print("M={$M}<br />");
+ //* 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}<br />");
+ //* 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}<br />");
+ //* 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}<br />");
+ //* 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}<br />");
+ //* 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}<br />");
+ //* DEBUG: */ debugOutput('s=' . $s);
// Is seconds zero and time is < 60 seconds?
if (($s == '0') && ($timestamp < 60)) {
);
} else {
// Generate table
- $OUT = "<div align=\"" . $align."\">\n";
- $OUT .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"timebox_table dashed\">\n";
- $OUT .= "<tr>\n";
+ $OUT = '<div align="' . $align . '">';
+ $OUT .= '<table border="0" cellspacing="0" cellpadding="0" class="timebox_table dashed">';
+ $OUT .= '<tr>';
if (isInString('Y', $display) || (empty($display))) {
- $OUT .= " <td align=\"center\" class=\"timebox_column bottom\"><div class=\"tiny\">{--_YEARS--}</strong></td>\n";
- }
+ $OUT .= '<td align="center" class="timebox_column bottom"><div class="tiny">{--_YEARS--}</strong></td>';
+ } // END - if
if (isInString('M', $display) || (empty($display))) {
- $OUT .= " <td align=\"center\" class=\"timebox_column bottom\"><div class=\"tiny\">{--_MONTHS--}</strong></td>\n";
- }
+ $OUT .= '<td align="center" class="timebox_column bottom"><div class="tiny">{--_MONTHS--}</strong></td>';
+ } // END - if
if (isInString('W', $display) || (empty($display))) {
- $OUT .= " <td align=\"center\" class=\"timebox_column bottom\"><div class=\"tiny\">{--_WEEKS--}</strong></td>\n";
- }
+ $OUT .= '<td align="center" class="timebox_column bottom"><div class="tiny">{--_WEEKS--}</strong></td>';
+ } // END - if
if (isInString('D', $display) || (empty($display))) {
- $OUT .= " <td align=\"center\" class=\"timebox_column bottom\"><div class=\"tiny\">{--_DAYS--}</strong></td>\n";
- }
+ $OUT .= '<td align="center" class="timebox_column bottom"><div class="tiny">{--_DAYS--}</strong></td>';
+ } // END - if
if (isInString('h', $display) || (empty($display))) {
- $OUT .= " <td align=\"center\" class=\"timebox_column bottom\"><div class=\"tiny\">{--_HOURS--}</strong></td>\n";
- }
+ $OUT .= '<td align="center" class="timebox_column bottom"><div class="tiny">{--_HOURS--}</strong></td>';
+ } // END - if
if (isInString('m', $display) || (empty($display))) {
- $OUT .= " <td align=\"center\" class=\"timebox_column bottom\"><div class=\"tiny\">{--_MINUTES--}</strong></td>\n";
- }
+ $OUT .= '<td align="center" class="timebox_column bottom"><div class="tiny">{--_MINUTES--}</strong></td>';
+ } // END - if
if (isInString('s', $display) || (empty($display))) {
- $OUT .= " <td align=\"center\" class=\"timebox_column bottom\"><div class=\"tiny\">{--_SECONDS--}</strong></td>\n";
- }
+ $OUT .= '<td align="center" class="timebox_column bottom"><div class="tiny">{--_SECONDS--}</strong></td>';
+ } // END - if
- $OUT .= "</tr>\n";
- $OUT .= "<tr>\n";
+ $OUT .= '</tr>';
+ $OUT .= '<tr>';
if (isInString('Y', $display) || (empty($display))) {
// Generate year selection
- $OUT .= " <td align=\"center\"><select class=\"mini_select\" name=\"" . $prefix . "_ye\" size=\"1\">\n";
- for ($idx = '0'; $idx <= 10; $idx++) {
- $OUT .= " <option class=\"mini_select\" value=\"" . $idx."\"";
+ $OUT .= '<td align="center"><select class="mini_select" name="' . $prefix . '_ye" size="1">';
+ for ($idx = 0; $idx <= 10; $idx++) {
+ $OUT .= '<option class="mini_select" value="' . $idx . '"';
if ($idx == $Y) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
- }
- $OUT .= " </select></td>\n";
+ $OUT .= '>' . $idx . '</option>';
+ } // END - for
+ $OUT .= '</select></td>';
} else {
$OUT .= '<input type="hidden" name="' . $prefix . '_ye" value="0" />';
}
if (isInString('M', $display) || (empty($display))) {
// Generate month selection
- $OUT .= " <td align=\"center\"><select class=\"mini_select\" name=\"" . $prefix . "_mo\" size=\"1\">\n";
- for ($idx = '0'; $idx <= 11; $idx++)
- {
- $OUT .= " <option class=\"mini_select\" value=\"" . $idx."\"";
+ $OUT .= '<td align="center"><select class="mini_select" name="' . $prefix . '_mo" size="1">';
+ for ($idx = 0; $idx <= 11; $idx++) {
+ $OUT .= ' <option class="mini_select" value="' . $idx . '"';
if ($idx == $M) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
- }
- $OUT .= " </select></td>\n";
+ $OUT .= '>' . $idx . '</option>';
+ } // END - for
+ $OUT .= '</select></td>';
} else {
$OUT .= '<input type="hidden" name="' . $prefix . '_mo" value="0" />';
}
if (isInString('W', $display) || (empty($display))) {
// Generate week selection
- $OUT .= " <td align=\"center\"><select class=\"mini_select\" name=\"" . $prefix . "_we\" size=\"1\">\n";
- for ($idx = '0'; $idx <= 4; $idx++) {
- $OUT .= " <option class=\"mini_select\" value=\"" . $idx."\"";
+ $OUT .= '<td align="center"><select class="mini_select" name="' . $prefix . '_we" size="1">';
+ for ($idx = 0; $idx <= 4; $idx++) {
+ $OUT .= ' <option class="mini_select" value="' . $idx . '"';
if ($idx == $W) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
- }
- $OUT .= " </select></td>\n";
+ $OUT .= '>' . $idx . '</option>';
+ } // END - for
+ $OUT .= '</select></td>';
} else {
$OUT .= '<input type="hidden" name="' . $prefix . '_we" value="0" />';
}
if (isInString('D', $display) || (empty($display))) {
// Generate day selection
- $OUT .= " <td align=\"center\"><select class=\"mini_select\" name=\"" . $prefix . "_da\" size=\"1\">\n";
- for ($idx = '0'; $idx <= 31; $idx++) {
- $OUT .= " <option class=\"mini_select\" value=\"" . $idx."\"";
+ $OUT .= '<td align="center"><select class="mini_select" name="' . $prefix . '_da" size="1">';
+ for ($idx = 0; $idx <= 31; $idx++) {
+ $OUT .= ' <option class="mini_select" value="' . $idx . '"';
if ($idx == $D) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
- }
- $OUT .= " </select></td>\n";
+ $OUT .= '>' . $idx . '</option>';
+ } // END - for
+ $OUT .= '</select></td>';
} else {
$OUT .= '<input type="hidden" name="' . $prefix . '_da" value="0" />';
}
if (isInString('h', $display) || (empty($display))) {
// Generate hour selection
- $OUT .= " <td align=\"center\"><select class=\"mini_select\" name=\"" . $prefix . "_ho\" size=\"1\">\n";
- for ($idx = '0'; $idx <= 23; $idx++) {
- $OUT .= " <option class=\"mini_select\" value=\"" . $idx."\"";
+ $OUT .= '<td align="center"><select class="mini_select" name="' . $prefix . '_ho" size="1">';
+ for ($idx = 0; $idx <= 23; $idx++) {
+ $OUT .= ' <option class="mini_select" value="' . $idx . '"';
if ($idx == $h) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
- }
- $OUT .= " </select></td>\n";
+ $OUT .= '>' . $idx . '</option>';
+ } // END - for
+ $OUT .= '</select></td>';
} else {
$OUT .= '<input type="hidden" name="' . $prefix . '_ho" value="0" />';
}
if (isInString('m', $display) || (empty($display))) {
// Generate minute selection
- $OUT .= " <td align=\"center\"><select class=\"mini_select\" name=\"" . $prefix . "_mi\" size=\"1\">\n";
- for ($idx = '0'; $idx <= 59; $idx++) {
- $OUT .= " <option class=\"mini_select\" value=\"" . $idx."\"";
+ $OUT .= '<td align="center"><select class="mini_select" name="' . $prefix . '_mi" size="1">';
+ for ($idx = 0; $idx <= 59; $idx++) {
+ $OUT .= ' <option class="mini_select" value="' . $idx . '"';
if ($idx == $m) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
- }
- $OUT .= " </select></td>\n";
+ $OUT .= '>' . $idx . '</option>';
+ } // END - for
+ $OUT .= '</select></td>';
} else {
$OUT .= '<input type="hidden" name="' . $prefix . '_mi" value="0" />';
}
if (isInString('s', $display) || (empty($display))) {
// Generate second selection
- $OUT .= " <td align=\"center\"><select class=\"mini_select\" name=\"" . $prefix . "_se\" size=\"1\">\n";
- for ($idx = '0'; $idx <= 59; $idx++) {
- $OUT .= " <option class=\"mini_select\" value=\"" . $idx."\"";
+ $OUT .= '<td align="center"><select class="mini_select" name="' . $prefix . '_se" size="1">';
+ for ($idx = 0; $idx <= 59; $idx++) {
+ $OUT .= ' <option class="mini_select" value="' . $idx . '"';
if ($idx == $s) $OUT .= ' selected="selected"';
- $OUT .= ">" . $idx."</option>\n";
- }
- $OUT .= " </select></td>\n";
+ $OUT .= '>' . $idx . '</option>';
+ } // END - for
+ $OUT .= '</select></td>';
} else {
$OUT .= '<input type="hidden" name="' . $prefix . '_se" value="0" />';
}
- $OUT .= "</tr>\n";
- $OUT .= "</table>\n";
- $OUT .= "</div>\n";
- // Return generated HTML code
+ $OUT .= '</tr>';
+ $OUT .= '</table>';
+ $OUT .= '</div>';
}
+
+ // Return generated HTML code
return $OUT;
}
$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;
}
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
$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) {
- $TOP = '';
- if ($show_form === false) {
- $TOP = " top";
- }
-
- $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 .= '<strong>-';
- } else {
- // Open anchor tag and add base URL
- $NAV .= '<a href="{%url=modules.php?module=admin&what=' . getWhat() . '&page=' . $page . '&offset=' . $offset;
-
- // Add userid when we shall show all mails from a single member
- if ((isGetRequestParameterSet('userid')) && (bigintval(getRequestParameter('userid')) > 0)) $NAV .= '&userid=' . bigintval(getRequestParameter('userid'));
-
- // Close open anchor tag
- $NAV .= '%}">';
- }
- $NAV .= $page;
- if (($page == getRequestParameter('page')) || ((!isGetRequestParameterSet('page')) && ($page == 1))) {
- // Is currently selected, so only highlight it
- $NAV .= '-</strong>';
- } else {
- // Close anchor tag
- $NAV .= '</a>';
- }
-
- // 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;
-
- // 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?
if (isInString('/', $host)) $host = substr($host, 0, strpos($host, '/'));
// Generate relative URL
- //* DEBUG: */ print("SCRIPT=" . $script.'<br />');
+ //* DEBUG: */ debugOutput('SCRIPT=' . $script);
if (substr(strtolower($script), 0, 7) == 'http://') {
// But only if http:// is in front!
$script = substr($script, (strlen($url) + 7));
$script = substr($script, (strlen($url) + 8));
}
- //* DEBUG: */ print("SCRIPT=" . $script.'<br />');
+ //* DEBUG: */ debugOutput('SCRIPT=' . $script);
if (substr($script, 0, 1) == '/') $script = substr($script, 1);
// Return host name
$resolver = new HostnameResolver();
// Open connection
- //* DEBUG: */ die("SCRIPT=" . $script.'<br />');
+ //* DEBUG: */ die('SCRIPT=' . $script);
if ($useProxy === true) {
// Resolve hostname into IP address
$ip = $resolver->resolveHostname(compileRawCode(getConfig('proxy_host')));
}
} // END - foreach
- //* DEBUG: */ print('<strong>Request:</strong><pre>'.print_r($request, true).'</pre>');
- //* DEBUG: */ print('<strong>Response:</strong><pre>'.print_r($response, true).'</pre>');
+ //* DEBUG: */ debugOutput('<strong>Request:</strong><pre>'.print_r($request, true).'</pre>');
+ //* DEBUG: */ debugOutput('<strong>Response:</strong><pre>'.print_r($response, true).'</pre>');
// Proxy agent found or something went wrong?
if (!isset($response[0])) {
// Add last new-line
$proxyTunnel .= getConfig('HTTP_EOL');
- //* DEBUG: */ print('<strong>proxyTunnel=</strong><pre>' . $proxyTunnel.'</pre>');
+ //* DEBUG: */ debugOutput('<strong>proxyTunnel=</strong><pre>' . $proxyTunnel.'</pre>');
// Write request
fwrite($fp, $proxyTunnel);
function isUrlValid ($URL, $compile=true) {
// Trim URL a little
$URL = trim(urldecode($URL));
- //* DEBUG: */ outputHtml($URL.'<br />');
+ //* DEBUG: */ debugOutput($URL);
// Compile some chars out...
if ($compile === true) $URL = compileUriCode($URL, false, false, false);
- //* DEBUG: */ outputHtml($URL.'<br />');
+ //* DEBUG: */ debugOutput($URL);
// Check for the extension filter
if (isExtensionActive('filter')) {
// Generate a list of administrative links to a given userid
function generateMemberAdminActionLinks ($userid, $status = '') {
// 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');
// Begin of navigation links
- $OUT = '[ ';
+ $OUT = '[';
foreach ($targetArray as $tar) {
$OUT .= '<span class="admin_user_link"><a href="{%url=modules.php?module=admin&what=' . $tar . '&userid=' . $userid . '%}" title="{--ADMIN_LINK_';
- //* DEBUG: */ outputHtml('*' . $tar.'/' . $status.'*<br />');
+ //* DEBUG: */ debugOutput('*' . $tar.'/' . $status.'*');
if (($tar == 'lock_user') && ($status == 'LOCKED')) {
// Locked accounts shall be unlocked
$OUT .= 'UNLOCK_USER';
// All other status is fine
$OUT .= strtoupper($tar);
}
- $OUT .= '--}</a></span> | ';
+ $OUT .= '--}</a></span>|';
}
// Finish navigation link
// Generate a hash for extra-security for all passwords
function generateHash ($plainText, $salt = '', $hash = true) {
// Debug output
- //* DEBUG: */ outputHtml('plainText=' . $plainText . ',salt=' . $salt . ',hash='.intval($hash).'<br />');
+ //* DEBUG: */ debugOutput('plainText=' . $plainText . ',salt=' . $salt . ',hash='.intval($hash));
// Is the required extension 'sql_patches' there and a salt is not given?
// 0123 4 43 3 4 432 2 3 32 2 3 3210
// Do we miss an arry element here?
if (!isConfigEntrySet('file_hash')) {
// Stop here
- debug_report_bug('Missing file_hash in ' . __FUNCTION__ . '.');
+ debug_report_bug(__FUNCTION__, __LINE__, 'Missing file_hash in ' . __FUNCTION__ . '.');
} // END - if
// When the salt is empty build a new one, else use the first x configured characters as the salt
// Generate SHA1 sum from modula of number and the prime number
$sha1 = sha1(($a % getConfig('_PRIME')) . $server . getConfig('ENCRYPT_SEPERATOR') . $keys . getConfig('ENCRYPT_SEPERATOR') . $data . getConfig('ENCRYPT_SEPERATOR') . getConfig('DATE_KEY') . getConfig('ENCRYPT_SEPERATOR') . $a);
- //* DEBUG: */ outputHtml('SHA1=' . $sha1.' ('.strlen($sha1).')<br />');
+ //* DEBUG: */ debugOutput('SHA1=' . $sha1.' ('.strlen($sha1).')<br />');
$sha1 = scrambleString($sha1);
- //* DEBUG: */ outputHtml('Scrambled=' . $sha1.' ('.strlen($sha1).')<br />');
+ //* DEBUG: */ debugOutput('Scrambled=' . $sha1.' ('.strlen($sha1).')<br />');
//* DEBUG: */ $sha1b = descrambleString($sha1);
- //* DEBUG: */ outputHtml('Descrambled=' . $sha1b.' ('.strlen($sha1b).')<br />');
+ //* DEBUG: */ debugOutput('Descrambled=' . $sha1b.' ('.strlen($sha1b).')<br />');
// Generate the password salt string
$salt = substr($sha1, 0, getConfig('salt_length'));
- //* DEBUG: */ outputHtml($salt.' ('.strlen($salt).')<br />');
+ //* DEBUG: */ debugOutput($salt.' ('.strlen($salt).')<br />');
} else {
// Use given salt
- //* DEBUG: */ outputHtml('salt=' . $salt . '<br />');
+ //* DEBUG: */ debugOutput('salt=' . $salt);
$salt = substr($salt, 0, getConfig('salt_length'));
- //* DEBUG: */ outputHtml('salt=' . $salt . '(' . strlen($salt) . '/' . getConfig('salt_length') . ')<br />');
+ //* DEBUG: */ debugOutput('salt=' . $salt . '(' . strlen($salt) . '/' . getConfig('salt_length') . ')<br />');
// Sanity check on salt
if (strlen($salt) != getConfig('salt_length')) {
$finalHash = $salt . sha1($salt . $plainText);
// Debug output
- //* DEBUG: */ outputHtml('finalHash=' . $finalHash);
+ //* DEBUG: */ debugOutput('finalHash=' . $finalHash);
// Return hash
return $finalHash;
if (strlen($str) != count($scrambleNums)) return $str;
// Scramble string here
- //* DEBUG: */ outputHtml('***Original=' . $str.'***<br />');
- for ($idx = '0'; $idx < strlen($str); $idx++) {
+ //* DEBUG: */ debugOutput('***Original=' . $str.'***<br />');
+ for ($idx = 0; $idx < strlen($str); $idx++) {
// Get char on scrambled position
$char = substr($str, $scrambleNums[$idx], 1);
} // END - for
// Return scrambled string
- //* DEBUG: */ outputHtml('***Scrambled=' . $scrambled.'***<br />');
+ //* DEBUG: */ debugOutput('***Scrambled=' . $scrambled.'***<br />');
return $scrambled;
}
// Begin descrambling
$orig = str_repeat(' ', 40);
- //* DEBUG: */ outputHtml('+++Scrambled=' . $str.'+++<br />');
- for ($idx = '0'; $idx < 40; $idx++) {
+ //* DEBUG: */ debugOutput('+++Scrambled=' . $str.'+++<br />');
+ for ($idx = 0; $idx < 40; $idx++) {
$char = substr($str, $idx, 1);
$orig = substr_replace($orig, $char, $scrambleNums[$idx], 1);
} // END - for
// Return scrambled string
- //* DEBUG: */ outputHtml('+++Original=' . $orig.'+++<br />');
+ //* DEBUG: */ debugOutput('+++Original=' . $orig.'+++<br />');
return $orig;
}
$scrambleNumbers = array();
// First we need to setup randomized numbers from 0 to 31
- for ($idx = '0'; $idx < $len; $idx++) {
+ for ($idx = 0; $idx < $len; $idx++) {
// Generate number
$rand = mt_rand(0, ($len -1));
loadIncludeOnce('inc/header.php');
// Rewrite message for output
- $message = sprintf(getMessage('MXCHANGE_HAS_DIED'), basename($F), $L, $message);
-
- // Better log this message away
- if ($F != 'debug_report_bug') logDebugMessage($F, $L, $message);
+ $message = sprintf(getMessage('MAILER_HAS_DIED'), basename($F), $L, $message);
// Load the message template
loadTemplate('app_die_message', false, $message);
loadIncludeOnce('inc/footer.php');
} else {
// Script tried to kill itself twice
- debug_report_bug('Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L);
+ die('['.__FUNCTION__.':'.__LINE__.']: Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L);
}
}
// Display parsing time and number of SQL queries in footer
-function displayParsingTime() {
+function displayParsingTime () {
// Is the timer started?
if (!isset($GLOBALS['startTime'])) {
// Abort here
if ($runTime < 0) $runTime = '0';
// Prepare output
+ // @TODO This can be easily moved out after the merge from EL branch to this is complete
$content = array(
- 'runtime' => translateComma($runTime),
- 'timeSQLs' => translateComma(getConfig('sql_time') * 1000),
+ 'run_time' => $runTime,
+ 'sql_time' => translateComma(getConfig('sql_time') * 1000),
);
// Load the template
// In cache?
if (isset($GLOBALS['cache_array']['const'][$constName])) {
// Use cache
- //* DEBUG: */ outputHtml(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-CACHE!<br />");
+ //* DEBUG: */ debugOutput(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-CACHE!<br />");
$res = ($GLOBALS['cache_array']['const'][$constName] === true);
} else {
// Check constant
- //* DEBUG: */ outputHtml(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-RESOLVE!<br />");
+ //* DEBUG: */ debugOutput(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-RESOLVE!<br />");
if (defined($constName)) {
// Found!
- //* DEBUG: */ outputHtml(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-FOUND!<br />");
+ //* DEBUG: */ debugOutput(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-FOUND!<br />");
$res = (constant($constName) === true);
} // END - if
// Back-ported from the new ship-simu engine. :-)
function debug_get_printable_backtrace () {
// Init variable
- $backtrace = "<ol>\n";
+ $backtrace = '<ol>';
// Get and prepare backtrace for output
$backtraceArray = debug_backtrace();
if (!isset($trace['file'])) $trace['file'] = __FUNCTION__;
if (!isset($trace['line'])) $trace['line'] = __LINE__;
if (!isset($trace['args'])) $trace['args'] = array();
- $backtrace .= "<li class=\"debug_list\"><span class=\"backtrace_file\">".basename($trace['file'])."</span>:" . $trace['line'].", <span class=\"backtrace_function\">" . $trace['function'].'('.count($trace['args']).")</span></li>\n";
+ $backtrace .= '<li class="debug_list"><span class="backtrace_file">' . basename($trace['file']) . '</span>:' . $trace['line'].", <span class=\"backtrace_function\">" . $trace['function'] . '(' . count($trace['args']) . ')</span></li>';
} // END - foreach
// Close it
- $backtrace .= "</ol>\n";
+ $backtrace .= '</ol>';
// Return the backtrace
return $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
);
// @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 <a title=\"Direct link to the bug-tracker\" href=\"http://bugs.mxchange.org\" rel=\"external\" target=\"_blank\">http://bugs.mxchange.org</a> and include the logfile from <strong>" . str_replace(getConfig('PATH'), '', getConfig('CACHE_PATH')) . "debug.log</strong> in your report (you can now attach files):<pre>";
+ $debug .= 'Please report this bug at <a title="Direct link to the bug-tracker" href="http://bugs.mxchange.org" rel="external" target="_blank">http://bugs.mxchange.org</a> and include the logfile from <strong>' . str_replace(getConfig('PATH'), '', getConfig('CACHE_PATH')) . 'debug.log</strong> in your report (you can now attach files):<pre>';
$debug .= debug_get_printable_backtrace();
- $debug .= "</pre>\nRequest-URI: " . getRequestUri()."<br />\n";
- $debug .= "Thank you for finding bugs.";
+ $debug .= '</pre>';
+ $debug .= '<div>Request-URI: ' . getRequestUri() . '</div>';
+ $debug .= '<div>Thank you for finding bugs.</div>';
// 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
} // END - if
// And abort here
- app_die(__FUNCTION__, __LINE__, $debug);
+ app_die($F, $L, $debug);
}
// Generates a ***weak*** seed
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('MODULE_MEMBER_ONLY') : $message = getMaskedMessage('MODULE_MEMBER_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--}<br />\n{--MEMBER_BLIST_TIME--}: ".generateDateTime(getRequestParameter('blist'), 0); break;
+ case getCode('BLIST_URL') : $message = '{--MEMBER_URL_BLACK_LISTED--}<br />{--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;
if (isExtensionActive('mailid', true)) {
$message = getMessage('ERROR_CONFIRMING_MAIL');
} else {
- $message = getMaskedMessage('EXTENSION_PROBLEM_NOT_INSTALLED', 'mailid');
+ $message = getMaskedMessage('EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', 'mailid');
}
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);
// @TODO Are these convertions still required?
$pat = str_replace('.', "\.", $pat);
$pat = str_replace('@', "\@", $pat);
- //* DEBUG: */ outputHtml($key."= " . $pat . '<br />');
+ //* DEBUG: */ debugOutput($key."= " . $pat);
} // END - if
// Check if expression matches
$tmp = $FQFN . '.tmp';
// Open the source file
- $fp = fopen($FQFN, 'r') or outputHtml('<strong>READ:</strong> ' . $FQFN . '<br />');
+ $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('<strong>WRITE:</strong> ' . $tmp . '<br />');
+ $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)) {
}
} else {
// File not found, not readable or writeable
- outputHtml('<strong>404:</strong> ' . $FQFN . '<br />');
+ debug_report_bug(__FUNCTION__, __LINE__, 'File not readable/writeable. file=' . basename($FQFN));
}
// An error was detected!
// 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
// 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__, getMessage('NO_DB_LINK_SHUTDOWN'));
}
// Stop executing here
// 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);
// 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
// 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
// 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
$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 . '<br />');
+ //* DEBUG: */ debugOutput('excluded=' . $baseFile);
continue;
} // END - if
// 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 . '<br />');
- //* DEBUG: */ outputHtml('baseFile:' . $baseFile . '<br />');
- //* DEBUG: */ outputHtml('FQFN:' . $FQFN . '<br />');
+ //* DEBUG: */ debugOutput('baseDir:' . $baseDir);
+ //* DEBUG: */ debugOutput('baseFile:' . $baseFile);
+ //* DEBUG: */ debugOutput('FQFN:' . $FQFN);
// Exclude this one
continue;
}
} 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
$GLOBALS['cache_instance'] = new CacheSystem();
if ($GLOBALS['cache_instance']->getStatus() != 'done') {
// Failed to initialize cache sustem
- addFatalMessage(__FILE__, __LINE__, '(<font color="#0000aa">' . __LINE__ . '</font>): ' . getMessage('CACHE_CANNOT_INITIALIZE'));
+ addFatalMessage(__FUNCTION__, __LINE__, '(<font color="#0000aa">' . __LINE__ . '</font>): {--CACHE_CANNOT_INITIALIZE--}');
} // END - if
}
$pageTitle = '[-- ' . getConfig('MAIN_TITLE') . ' - ' . getModuleTitle(getModule()) . ' --]';
} elseif ((isInstalled()) && (!isAdminRegistered())) {
// Installed but no admin registered
- $pageTitle = getMessage('SETUP_OF_MXCHANGE');
+ $pageTitle = getMessage('SETUP_OF_MAILER');
} elseif ((!isInstalled()) || (!isAdminRegistered())) {
// Installation mode
- $pageTitle = getMessage('INSTALLATION_OF_MXCHANGE');
+ $pageTitle = getMessage('INSTALLATION_OF_MAILER');
} else {
// Configuration not found!
$pageTitle = getMessage('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__, getMessage('NO_CONFIG_FOUND'));
}
// Return title
// Generate FQFN
$FQFN = generateCacheFqfn($template);
- // Replace username with a call
- $eval = str_replace('$username', '".getUsername()."', $eval);
-
// And flush it
writeToFile($FQFN, $eval, true);
} // END - if
// Load the data
$content = getUserDataArray();
- // Translate gender
- $content['gender'] = translateGender($content['gender']);
-
// Clear/init the content variable
$content['message'] = '';
}
// Generates a 'selection box' from given array
-function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent='') {
+function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent = '', $extraName = '') {
// Start the output
$OUT = '<select name="' . $name . '" size="1" class="admin_select">
<option value="X" disabled="disabled">{--PLEASE_SELECT--}</option>';
// Add the <option> entry
if (empty($optionContent)) {
// ... from template
- $OUT .= loadTemplate('select_' . $name . '_option', true, $option);
+ $OUT .= loadTemplate('select_' . $name . $extraName . '_option', true, $option);
} else {
// Direct HTML code
$OUT .= '<option value="' . $option[$optionValue] . '">' . $option[$optionContent] . '</option>';
);
// 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
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;
}
// 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'] .= '<meta name="description" content="' . $DESCR . '" />';
}
// Generates an FQFN for template cache from the given template name
-function generateCacheFqfn ($template) {
+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/html/%s.tpl.cache", getConfig('CACHE_PATH'), $template);
+ $GLOBALS['template_cache_fqfn'][$template] = sprintf(
+ "%s_compiled/%s/%s.tpl.cache",
+ getConfig('CACHE_PATH'),
+ $mode,
+ $template
+ );
} // END - if
// Return it