X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ftemplate-functions.php;h=6e2e4730660d0f0e803575ab0fc29e97f4435cb1;hp=aea217a7fa08e9253dee6faa4c6086b48658f6af;hb=ed3a88c0334600c7d7246480008c79716aa3f80b;hpb=c72268213d4d4829d845d39c101bb08fbe4ed79a diff --git a/inc/template-functions.php b/inc/template-functions.php index aea217a7fa..6e2e473066 100644 --- a/inc/template-functions.php +++ b/inc/template-functions.php @@ -14,11 +14,9 @@ * $Date:: $ * * $Tag:: 0.2.1-FINAL $ * * $Author:: $ * - * Needs to be in all Files and every File needs "svn propset * - * svn:keywords Date Revision" (autoprobset!) at least!!!!!! * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009, 2010 by Mailer Developer Team * + * Copyright (c) 2009 - 2011 by Mailer Developer Team * * For more information visit: http://www.mxchange.org * * * * This program is free software; you can redistribute it and/or modify * @@ -56,7 +54,7 @@ function enableTemplateHtml ($enable = true) { // Default: true function isTemplateHtml () { // Is the output_mode other than 0 (HTML), then no comments are enabled - if (getScriptOutputMode() != 0) { + if (!isHtmlOutputMode()) { // No HTML return false; } else { @@ -76,31 +74,14 @@ function fixEmptyContentToDashes ($str) { $str = trim($str); // Is the string empty? - if (empty($str)) $str = '---'; + if (empty($str)) { + $str = '---'; + } // END - if // Return string return $str; } -// Color-switch helper function -function doTemplateColorSwitch ($template, $clear = false, $return = true) { - // Is it there? - if (!isset($GLOBALS['color_switch'][$template])) { - // Initialize it - initTemplateColorSwitch($template); - } elseif ($clear === false) { - // Switch color if called from loadTemplate() - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'SWITCH:' . $template); - $GLOBALS['color_switch'][$template] = 3 - $GLOBALS['color_switch'][$template]; - } // END - if - - // Return CSS class name - if ($return === true) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'RETURN:' . $template . '=' . $GLOBALS['color_switch'][$template]); - return 'switch_sw' . $GLOBALS['color_switch'][$template]; - } // END - if -} - // Init color switch function initTemplateColorSwitch ($template) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'INIT:' . $template); @@ -155,7 +136,7 @@ function outputHtml ($htmlCode, $newLine = true) { default: // Huh, something goes wrong or maybe you have edited config.php ??? - debug_report_bug(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--LANG_NO_RENDER_DIRECT--}'); + debug_report_bug(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--NO_RENDER_DIRECT--}'); break; } // END - switch } elseif ((getPhpCaching() == 'on') && ((!isset($GLOBALS['header'])) || (count($GLOBALS['header']) == 0))) { @@ -199,14 +180,16 @@ function compileFinalOutput () { $GLOBALS['output'] = doFinalCompilation($GLOBALS['output']); // Extension 'rewrite' installed? - if ((isExtensionActive('rewrite')) && (getScriptOutputMode() != 1)) { + if ((isExtensionActive('rewrite')) && (!isCssOutputMode())) { $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']); } // END - if // Compress it? + /** + * @TODO On some pages this is buggy if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos('gzip', $_SERVER['HTTP_ACCEPT_ENCODING']) !== null)) { // Compress it for HTTP gzip - $GLOBALS['output'] = gzencode($GLOBALS['output'], 9, true); + $GLOBALS['output'] = gzencode($GLOBALS['output'], 9); // Add header sendHeader('Content-Encoding: gzip'); @@ -217,6 +200,7 @@ function compileFinalOutput () { // Add header sendHeader('Content-Encoding: deflate'); } + */ // Add final length sendHeader('Content-Length: ' . strlen($GLOBALS['output'])); @@ -226,24 +210,25 @@ function compileFinalOutput () { } // Main compilation loop -function doFinalCompilation ($code, $insertComments = true) { +function doFinalCompilation ($code, $insertComments = true, $enableCodes = true) { // Insert comments? (Only valid with HTML templates, of course) enableTemplateHtml($insertComments); // Init counter - $cnt = 0; + $count = 0; // Compile all out - while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== false) || (strpos($code, '{?') !== false) || (strpos($code, '{%') !== false)) && ($cnt < 5)) { + while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== false) || (strpos($code, '{?') !== false) || (strpos($code, '{%') !== false)) && ($count < 7)) { // Init common variables $content = array(); $newContent = ''; // Compile it - //* DEBUG: */ debugOutput('
'.encodeEntities($code).'
'); - $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code))) . '";'; - //* DEBUG: */ if (!$insertComments) print('
'.linenumberCode($eval).'
'); + //* DEBUG: */ debugOutput('
'.linenumberCode($code).'
'); + $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code), false, true, $enableCodes)) . '";'; + //* DEBUG: */ if (!$insertComments) print('EVAL=
'.linenumberCode($eval).'
'); eval($eval); + //* DEBUG: */ if (!$insertComments) print('NEW=
'.linenumberCode($newContent).'
'); //* DEBUG: */ die('
'.encodeEntities($newContent).'
'); // Was that eval okay? @@ -255,10 +240,22 @@ function doFinalCompilation ($code, $insertComments = true) { // Use it again $code = $newContent; + // Compile the final code if insertComments is true + if ($insertComments == true) { + // ... because SQL queries shall keep OPEN_CONFIG and such in + $code = compileRawCode($code); + } // END - if + // Count round - $cnt++; + $count++; } // END - while + // Add debugging data in HTML code, if mode is enabled + if ((isDebugModeEnabled()) && ($insertComments === true)) { + // Add loop count + $code .= ''; + } // END - if + // Return the compiled code return $code; } @@ -276,15 +273,20 @@ function outputRawCode ($htmlCode) { } // 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(__FUNCTION__, __LINE__, 'return is not bool (' . gettype($return) . ')'); +function loadTemplate ($template, $return = false, $content = array(), $compileCode = true) { + if (!is_bool($return)) { + // @TODO Remove this sanity-check if all is fine + debug_report_bug(__FUNCTION__, __LINE__, 'return[] is not bool (' . gettype($return) . ')'); + } elseif (!is_string($template)) { + // $template has to be string + debug_report_bug(__FUNCTION__, __LINE__, 'template[] is not string (' . gettype($template) . ')'); + } // Set current template $GLOBALS['current_template'] = $template; // Do we have cache? - if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template))) { + if ((!isDebuggingTemplateCache()) && (isTemplateCached($template))) { // Evaluate the cache eval(readTemplateCache($template)); } elseif (!isset($GLOBALS['template_eval'][$template])) { @@ -293,15 +295,12 @@ function loadTemplate ($template, $return = false, $content = array()) { // Init some data $ret = ''; - if (empty($GLOBALS['refid'])) $GLOBALS['refid'] = '0'; // Base directory $basePath = sprintf("%stemplates/%s/html/", getPath(), getLanguage()); - $extraPath = detectExtraTemplatePath($template);; + $extraPath = detectExtraTemplatePath($template); - //////////////////////// - // Generate file name // - //////////////////////// + // Generate FQFN $FQFN = $basePath . $extraPath . $template . '.tpl'; // Does the special template exists? @@ -316,40 +315,43 @@ function loadTemplate ($template, $return = false, $content = array()) { incrementConfigEntry('num_templates'); // The local file does exists so we load it. :) - $GLOBALS['tpl_content'] = readFromFile($FQFN); + $GLOBALS['tpl_content'][$template] = readFromFile($FQFN); // 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)) { + if ((strpos($GLOBALS['tpl_content'][$template], '$') !== false) || (strpos($GLOBALS['tpl_content'][$template], '{--') !== false) || (strpos($GLOBALS['tpl_content'][$template], '{?') !== false) || (strpos($GLOBALS['tpl_content'][$template], '{%') !== false)) { // Normal HTML output? - if (getScriptOutputMode() == '0') { + if (isHtmlOutputMode()) { // Add surrounding HTML comments to help finding bugs faster - $ret = '' . $GLOBALS['tpl_content'] . ''; + $ret = '' . $GLOBALS['tpl_content'][$template] . ''; // Prepare eval() command - $GLOBALS['template_eval'][$template] = '$ret = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($ret)) . '";'; + $GLOBALS['template_eval'][$template] = '$ret = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($ret), false, true, true, $compileCode) . '";'; } elseif (substr($template, 0, 3) == 'js_') { // JavaScripts don't like entities and timings - $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['tpl_content'])) . '");'; + $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['tpl_content'][$template]), false, true, true, $compileCode) . '");'; } else { // Prepare eval() command, other output doesn't like entities, maybe - $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'])) . '");'; + $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'][$template]), false, true, true, $compileCode) . '");'; } - } else { + } elseif (isHtmlOutputMode()) { // Add surrounding HTML comments to help finding bugs faster - $ret = '' . $GLOBALS['tpl_content'] . ''; - $GLOBALS['template_eval'][$template] = '$ret = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($ret)) . '";'; + $ret = '' . $GLOBALS['tpl_content'][$template] . ''; + $GLOBALS['template_eval'][$template] = '$ret = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($ret), false, true, true, $compileCode) . '";'; + } else { + // JavaScript again + $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['tpl_content'][$template]), false, true, true, $compileCode) . '");'; } // END - if } elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) { // Only admins shall see this warning or when installation mode is active $ret = '
- {--TEMPLATE_404--} + {--TEMPLATE_404--}
(' . $template . ')
- {--TEMPLATE_CONTENT--} + {--TEMPLATE_CONTENT--}:
' . print_r($content, true) . '
'; } else { @@ -435,7 +437,8 @@ function detectExtraTemplatePath ($template) { } // Loads an email template and compiles it -function loadEmailTemplate ($template, $content = array(), $userid = '0') { +function loadEmailTemplate ($template, $content = array(), $userid = NULL, $loadUserData = true) { + // @TODO $DATA is deprecated and should be avoided and replaced with $content global $DATA; // Make sure all template names are lowercase! @@ -444,12 +447,12 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') { // Is content an array? if (is_array($content)) { // Add expiration to array - if ((isConfigEntrySet('auto_purge')) && (getConfig('auto_purge') == '0')) { + if ((isConfigEntrySet('auto_purge')) && (getAutoPurge() == '0')) { // Will never expire! $content['expiration'] = '{--MAIL_WILL_NEVER_EXPIRE--}'; } elseif (isConfigEntrySet('auto_purge')) { // Create nice date string - $content['expiration'] = createFancyTime(getConfig('auto_purge')); + $content['expiration'] = '{%config,createFancyTime=auto_purge%}'; } else { // Missing entry $content['expiration'] = '{--MAIL_NO_CONFIG_AUTO_PURGE--}'; @@ -457,25 +460,33 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') { } // END - if // Load user's data - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "UID={$userid},template={$template},content[]=".gettype($content)); - if (($userid > 0) && (is_array($content))) { + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'UID=' . $userid . ',template=' . $template . ',content[]=' . gettype($content)); + if ((isValidUserId($userid)) && (is_array($content))) { // If nickname extension is installed, fetch nickname as well if ((isExtensionActive('nickname')) && (isNicknameUsed($userid))) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "NICKNAME!
"); // Load by nickname + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - NICKNAME!'); fetchUserData($userid, 'nickname'); + } elseif (isNicknameUsed($userid)) { + // Non-number characters entered but no ext-nickname found + debug_report_bug(__FUNCTION__, __LINE__, 'userid=' . $userid . ': is no id number and ext-nickname is gone.'); } else { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "NO-NICK!
"); - /// Load by userid + // Load by userid + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - USERID!'); fetchUserData($userid); } // Merge data if valid - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - PRE
"); - if (isUserDataValid()) { + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'content()=' . count($content) . ' - PRE!'); + if ((isUserDataValid()) && ($loadUserData === true)) { + // It is valid $content = merge_array($content, getUserDataArray()); + + // But we don't like hashed passwords be mailed + unset($content['password']); } // END - if - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - AFTER
"); + + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'content()=' . count($content) . ' - AFTER!'); } // END - if // Base directory @@ -497,25 +508,28 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') { $newContent = ''; if (isFileReadable($FQFN)) { // The local file does exists so we load it. :) - $GLOBALS['tpl_content'] = readFromFile($FQFN); + $GLOBALS['tpl_content'][$template] = readFromFile($FQFN); // Run code - $GLOBALS['tpl_content'] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'])) . '");'; - eval($GLOBALS['tpl_content']); + $GLOBALS['tpl_content'][$template] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'][$template])) . '");'; + eval($GLOBALS['tpl_content'][$template]); } elseif (!empty($template)) { - // Template file not found! + // Template file not found $newContent = '
{--TEMPLATE_404--}: ' . $template . '
- {--TEMPLATE_CONTENT--} + {--TEMPLATE_CONTENT--}:
' . print_r($content, true) . '
- {--TEMPLATE_DATA--} + {--TEMPLATE_DATA--}:
' . print_r($DATA, true) . '
'; // Debug mode not active? Then remove the HTML tags - if (!isDebugModeEnabled()) $newContent = secureString($newContent); + if (!isDebugModeEnabled()) { + // Remove HTML tags + $newContent = secureString($newContent); + } // END - if } else { // No template name supplied! $newContent = '{--NO_TEMPLATE_SUPPLIED--}'; @@ -524,7 +538,7 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') { // Is there some content? if (empty($newContent)) { // Compiling failed - $newContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['tpl_content']; + $newContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['tpl_content'][$template]; // Add last error if the required function exists if (function_exists('error_get_last')) $newContent .= "\n--------------------------------------\nDebug:\n".print_r(error_get_last(), true)."--------------------------------------\nPlease don't alter these informations!\nThanx."; @@ -558,14 +572,14 @@ function getMenuCssClasses ($data) { } // Generate XHTML code for the CAPTCHA -function generateCaptchaCode ($code, $type, $DATA, $userid) { - return 'Code ' . $code . ''; +function generateCaptchaCode ($code, $type, $type, $userid) { + return 'Code ' . $code . ''; } // Compiles the given HTML/mail code -function compileCode ($code, $simple = false, $constants = true, $full = true) { - // Is the code a string? - if (!is_string($code)) { +function compileCode ($code, $simple = false, $constants = true, $full = true, $compileCode = true) { + // Is the code a string or should we not compile? + if ((!is_string($code)) || ($compileCode === false)) { // Silently return it return $code; } // END - if @@ -591,9 +605,9 @@ function compileCode ($code, $simple = false, $constants = true, $full = true) { // Compiles the code (use compileCode() only for HTML because of the comments) // @TODO $simple/$constants are deprecated -function compileRawCode ($code, $simple = false, $constants = true, $full = true) { - // Is the code a string? - if (!is_string($code)) { +function compileRawCode ($code, $simple = false, $constants = true, $full = true, $compileCode = true) { + // Is the code a string or shall we not compile? + if ((!is_string($code)) || ($compileCode === false)) { // Silently return it return $code; } // END - if @@ -602,7 +616,9 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true $secChars = $GLOBALS['url_chars']; // Select full set of chars to replace when we e.g. want to compile URLs - if ($full === true) $secChars = $GLOBALS['security_chars']; + if ($full === true) { + $secChars = $GLOBALS['security_chars']; + } // END - if // Compile more through a filter $code = runFilterChain('compile_code', $code); @@ -611,14 +627,11 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true $code = str_replace('{--', '{%message,', str_replace('--}', '%}', $code)); // Compile QUOT and other non-HTML codes - foreach ($secChars['to'] as $k => $to) { - // Do the reversed thing as in inc/libs/security_functions.php - $code = str_replace($to, $secChars['from'][$k], $code); - } // END - foreach + $code = str_replace($secChars['to'], $secChars['from'], $code); // Find $content[bla][blub] entries - // @TODO Do only use $content and deprecate $GLOBALS and $DATA in templates - preg_match_all('/\$(content|GLOBALS|DATA)((\[([a-zA-Z0-9-_]+)\])*)/', $code, $matches); + // @TODO Do only use $content and deprecate $DATA in templates + preg_match_all('/\$(content|DATA)((\[([a-zA-Z0-9-_]+)\])*)/', $code, $matches); // Are some matches found? if ((count($matches) > 0) && (count($matches[0]) > 0)) { @@ -634,31 +647,36 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true $test = substr($found, 0, strlen($match)); // Does this entry exist? - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "found={$found},match={$match},set={$set}
"); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'found=' . $found . ',match=' . $match . ',set=' . $set); if ($test == $match) { - // Match found! - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "fuzzyFound!
"); + // Match found + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'fuzzyFound!'); $fuzzyFound = true; break; } // END - if } // END - foreach // Skip this entry? - if ($fuzzyFound === true) continue; + if ($fuzzyFound === true) { + continue; + } // END - if // Take all string elements 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}
"); + //* 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; + $matchesFound[$match] = true; } elseif (!isset($matchesFound[$match])) { // Not yet replaced! - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "match={$match}
"); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'match=' . $match); $code = str_replace($match, '".' . $match . '."', $code); $matchesFound[$match] = 1; + } else { + // Everthing else should be a least logged + logDebugMessage(__FUNCTION__, __LINE__, 'match=' . $match . ',key=' . $key); } } // END - foreach } // END - if @@ -668,7 +686,7 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true } // -function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 'register_select') { +function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 'form_select') { $OUT = ''; if ($type == 'yn') { @@ -705,7 +723,7 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're $year = getYear(); // Use configured min age or fixed? - if (isExtensionInstalledAndNewer('order', '0.2.1')) { + if (isExtensionInstalledAndNewer('other', '0.2.1')) { // Configured $startYear = $year - getConfig('min_age'); } else { @@ -732,7 +750,7 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're // Get current year and subtract the configured minimum age $OUT .= ''; // Calculate earliest year depending on extension version - if (isExtensionInstalledAndNewer('order', '0.2.1')) { + if (isExtensionInstalledAndNewer('other', '0.2.1')) { // Use configured minimum age $year = getYear() - getConfig('min_age'); } else { @@ -783,9 +801,9 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're // Insert the code in $img_code into jpeg or PNG image function generateImageOrCode ($img_code, $headerSent = true) { // Is the code size oversized or shouldn't we display it? - if ((strlen($img_code) > 6) || (empty($img_code)) || (getConfig('code_length') == '0')) { + if ((strlen($img_code) > 6) || (empty($img_code)) || (getCodeLength() == '0')) { // Stop execution of function here because of over-sized code length - debug_report_bug(__FUNCTION__, __LINE__, '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=' . getCodeLength()); } elseif ($headerSent === false) { // Return an HTML code here return 'Image'; @@ -795,26 +813,24 @@ function generateImageOrCode ($img_code, $headerSent = true) { $img = sprintf("%s/theme/%s/images/code_bg.%s", getPath(), getCurrentTheme(), - getConfig('img_type') + getImgType() ); // Is it readable? if (isFileReadable($img)) { // Switch image type - switch (getConfig('img_type')) { - case 'jpg': - // Okay, load image and hide all errors + switch (getImgType()) { + case 'jpg': // Okay, load image and hide all errors $image = imagecreatefromjpeg($img); break; - case 'png': - // Okay, load image and hide all errors + case 'png': // 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'))); + // Silently log the error + logDebugMessage(__FUNCTION__, __LINE__, sprintf("File for image-type %s in theme %s not found.", getImgType(), getCurrentTheme())); return; } @@ -825,10 +841,10 @@ function generateImageOrCode ($img_code, $headerSent = true) { imagestring($image, 5, 14, 2, $img_code, $text_color); // Return to browser - sendHeader('Content-Type: image/' . getConfig('img_type')); + setContentType('image/' . getImgType()); // Output image with matching image factory - switch (getConfig('img_type')) { + switch (getImgType()) { case 'jpg': imagejpeg($image); break; case 'png': imagepng($image); break; } // END - switch @@ -836,6 +852,7 @@ function generateImageOrCode ($img_code, $headerSent = true) { // Remove image from memory imagedestroy($image); } + // Create selection box or array of splitted timestamp function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = 'center', $return_array=false) { // Do not continue if ONE_DAY is absend @@ -859,7 +876,9 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = $M2 = getMonth(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 = getOneDay(); + } // END - switch // First of all years... $Y = abs(floor($timestamp / (31536000 + $SWITCH))); @@ -868,19 +887,19 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = $M = abs(floor($timestamp / 2628000 - $Y * 12)); //* 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))); + $W = abs(floor($timestamp / 604800 - $Y * ((365 + $SWITCH / getOneDay()) / 7) - ($M / 12 * (365 + $SWITCH / getOneDay()) / 7))); //* 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)); + $D = abs(floor($timestamp / 86400 - $Y * (365 + $SWITCH / getOneDay()) - ($M / 12 * (365 + $SWITCH / getOneDay())) - $W * 7)); //* 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)); + $h = abs(floor($timestamp / 3600 - $Y * (365 + $SWITCH / getOneDay()) * 24 - ($M / 12 * (365 + $SWITCH / getOneDay()) * 24) - $W * 7 * 24 - $D * 24)); //* 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)); + $m = abs(floor($timestamp / 60 - $Y * (365 + $SWITCH / getOneDay()) * 24 * 60 - ($M / 12 * (365 + $SWITCH / getOneDay()) * 24 * 60) - $W * 7 * 24 * 60 - $D * 24 * 60 - $h * 60)); //* 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)); + $s = abs(floor($timestamp - $Y * (365 + $SWITCH / getOneDay()) * 24 * 3600 - ($M / 12 * (365 + $SWITCH / getOneDay()) * 24 * 3600) - $W * 7 * 24 * 3600 - $D * 24 * 3600 - $h * 3600 - $m * 60)); //* DEBUG: */ debugOutput('s=' . $s); // Is seconds zero and time is < 60 seconds? @@ -1042,7 +1061,9 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = // Generate a list of administrative links to a given userid function generateMemberAdminActionLinks ($userid) { // Make sure userid is a number - if ($userid != bigintval($userid)) debug_report_bug(__FUNCTION__, __LINE__, 'userid is not a number!'); + if ($userid != bigintval($userid)) { + debug_report_bug(__FUNCTION__, __LINE__, 'userid is not a number!'); + } // END - if // Define all main targets $targetArray = array('del_user', 'edit_user', 'lock_user', 'add_points', 'sub_points'); @@ -1054,19 +1075,25 @@ function generateMemberAdminActionLinks ($userid) { $OUT = '['; foreach ($targetArray as $tar) { - $OUT .= '{--ADMIN_'; + $OUT .= '_TITLE--}">{--ADMIN_USER_ACTION_LINK_'; if (($tar == 'lock_user') && ($status == 'LOCKED')) { // Locked accounts shall be unlocked $OUT .= 'UNLOCK_USER'; + } elseif ($tar == 'del_user') { + // @TODO Deprecate this thing + $OUT .= 'DELETE_USER'; } else { // All other status is fine $OUT .= strtoupper($tar); @@ -1074,6 +1101,12 @@ function generateMemberAdminActionLinks ($userid) { $OUT .= '--}|'; } // END - foreach + // Add special link, in case of the account is unconfirmed + if ($status == 'UNCONFIRMED') { + // Add it + $OUT .= '{--ADMIN_USER_ACTION_LINK_CONFIRM_ACCOUNT--}|'; + } // END - if + // Finish navigation link $OUT = substr($OUT, 0, -1) . ']'; @@ -1092,15 +1125,12 @@ function generateEmailLink ($email, $table = 'admins') { $EMAIL = generateAdminEmailLink($email); } elseif ((isExtensionInstalledAndNewer('user', '0.3.3')) && ($table == 'user_data')) { // Create email link for contacting a member within admin area (or later in other areas, too?) - $EMAIL = generateUserEmailLink($email, 'admin'); + $EMAIL = generateUserEmailLink($email); } elseif ((isExtensionActive('sponsor')) && ($table == 'sponsor_data')) { // Create email link to contact sponsor within admin area (or like the link above?) - $EMAIL = generateSponsorEmailLink($email, 'sponsor_data'); + $EMAIL = generateSponsorEmailLink($email); } - // Shall I close the link when there is no admin? - if ((!isAdmin()) && ($EMAIL == $email)) $EMAIL = '#'; // Closed! - // Return email link return $EMAIL; } @@ -1108,28 +1138,28 @@ function generateEmailLink ($email, $table = 'admins') { // Output error messages in a fasioned way and die... function app_die ($F, $L, $message) { // Check if Script is already dieing and not let it kill itself another 1000 times - if (!isset($GLOBALS['app_died'])) { - // Make sure, that the script realy realy diese here and now - $GLOBALS['app_died'] = true; + if (isset($GLOBALS['app_died'])) { + // Script tried to kill itself twice + die('[' . __FUNCTION__ . ':' . __LINE__ . ']: Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L); + } // END - if - // Set content type as text/html - setContentType('text/html'); + // Make sure, that the script realy realy diese here and now + $GLOBALS['app_died'] = true; - // Load header - loadIncludeOnce('inc/header.php'); + // Set content type as text/html + setContentType('text/html'); - // Rewrite message for output - $message = sprintf(getMessage('MAILER_HAS_DIED'), basename($F), $L, $message); + // Load header + loadIncludeOnce('inc/header.php'); - // Load the message template - loadTemplate('app_die_message', false, $message); + // Rewrite message for output + $message = sprintf(getMessage('MAILER_HAS_DIED'), basename($F), $L, $message); - // Load footer - loadIncludeOnce('inc/footer.php'); - } else { - // Script tried to kill itself twice - die('['.__FUNCTION__.':'.__LINE__.']: Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L); - } + // Load the message template + loadTemplate('app_die_message', false, $message); + + // Load footer + loadIncludeOnce('inc/footer.php'); } // Display parsing time and number of SQL queries in footer @@ -1147,7 +1177,9 @@ function displayParsingTime () { $start = explode(' ', $GLOBALS['startTime']); $end = explode(' ', $endTime); $runTime = $end[0] - $start[0]; - if ($runTime < 0) $runTime = '0'; + if ($runTime < 0) { + $runTime = '0'; + } // END - if // Prepare output // @TODO This can be easily moved out after the merge from EL branch to this is complete @@ -1165,7 +1197,7 @@ function debug_report_bug ($F, $L, $message = '', $sendEmail = true) { // Is this already called? if (isset($GLOBALS[__FUNCTION__])) { // Other backtrace - print 'Message:'.$message.'
Backtrace:
';
+		print 'Message:' . $message . '
Backtrace:
';
 		debug_print_backtrace();
 		die('
'); } // END - if @@ -1191,8 +1223,8 @@ function debug_report_bug ($F, $L, $message = '', $sendEmail = true) { $debug .= 'Please report this bug at http://bugs.mxchange.org and include the logfile from ' . str_replace(getPath(), '', getCachePath()) . 'debug.log in your report (you can now attach files):
';
 	$debug .= debug_get_printable_backtrace();
 	$debug .= '
'; - $debug .= '
Request-URI: ' . getRequestUri() . '
'; - $debug .= '
Thank you for finding bugs.
'; + $debug .= '
Request-URI: ' . getRequestUri() . '
'; + $debug .= '
Thank you for finding bugs.
'; // Send an email? (e.g. not wanted for evaluation errors) if (($sendEmail === true) && (!isInstallationPhase())) { @@ -1239,7 +1271,9 @@ function handleCodeMessage () { $ext = 'unknown'; // Is extension given? - if (isGetRequestParameterSet('ext')) $ext = getRequestParameter('ext'); + if (isGetRequestParameterSet('ext')) { + $ext = getRequestParameter('ext'); + } // END - if // Convert the 'code' parameter from URL to a human-readable message $message = getMessageFromErrorCode(getRequestParameter('code')); @@ -1249,6 +1283,27 @@ function handleCodeMessage () { } // END - if } +// Generates a 'extension foo out-dated' message +function generateExtensionOutdatedMessage ($ext_name, $ext_ver) { + // Is the extension empty? + if (empty($ext_name)) { + // This should not happen + debug_report_bug(__FUNCTION__, __LINE__, 'Parameter ext is empty. This should not happen.'); + } // END - if + + // Default message + $message = '{%message,EXTENSION_PROBLEM_EXTENSION_OUTDATED=' . $ext_name . '%}'; + + // Is an admin logged in? + if (isAdmin()) { + // Then output admin message + $message = sprintf(getMessage('ADMIN_EXTENSION_PROBLEM_EXTENSION_INACTIVE'), $ext_name, $ext_name, $ext_ver); + } // END - if + + // Return prepared message + return $message; +} + // Generates a 'extension foo inactive' message function generateExtensionInactiveMessage ($ext_name) { // Is the extension empty? @@ -1258,12 +1313,12 @@ function generateExtensionInactiveMessage ($ext_name) { } // END - if // Default message - $message = getMaskedMessage('EXTENSION_PROBLEM_EXT_INACTIVE', $ext_name); + $message = '{%message,EXTENSION_PROBLEM_EXTENSION_INACTIVE=' . $ext_name . '%}'; // Is an admin logged in? if (isAdmin()) { // Then output admin message - $message = getMaskedMessage('ADMIN_EXTENSION_PROBLEM_EXT_INACTIVE', $ext_name); + $message = '{%message,ADMIN_EXTENSION_PROBLEM_EXTENSION_INACTIVE=' . $ext_name . '%}'; } // END - if // Return prepared message @@ -1279,12 +1334,12 @@ function generateExtensionNotInstalledMessage ($ext_name) { } // END - if // Default message - $message = getMaskedMessage('EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', $ext_name); + $message = '{%message,EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED=' . $ext_name . '%}'; // Is an admin logged in? if (isAdmin()) { // Then output admin message - $message = getMaskedMessage('ADMIN_EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', $ext_name); + $message = '{%message,ADMIN_EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED=' . $ext_name . '%}'; } // END - if // Return prepared message @@ -1323,18 +1378,18 @@ function linenumberCode ($code) { $count_lines = count($codeE); $r = 'Line | Code:
'; - foreach($codeE as $line => $c) { + foreach ($codeE as $line => $c) { $r .= '
'; if ($count_lines == 1) { $r .= 1; } else { - $r .= ($line == ($count_lines - 1)) ? '' : ($line+1); + $r .= ($line == ($count_lines - 1)) ? '' : ($line+1); } $r .= '|'; // Add code $r .= '' . encodeEntities($c) . '
'; - } + } // END - foreach return '
' . $r . '
'; } @@ -1360,7 +1415,7 @@ function determinePageTitle () { // Add title of module? (middle decoration will also be added!) if ((isModuleTitleEnabled()) || ((!isWhatSet()) && (!isActionSet())) || (getModule() == 'admin')) { - $TITLE .= ' ' . trim(getConfig('title_middle')) . ' ' . getModuleTitle(getModule()); + $TITLE .= ' ' . trim(getConfig('title_middle')) . ' {DQUOTE} . getModuleTitle(getModule()) . {DQUOTE}'; } // END - if // Add title from what file @@ -1379,16 +1434,19 @@ function determinePageTitle () { $pageTitle = '[-- ' . getMainTitle() . ' - ' . getModuleTitle(getModule()) . ' --]'; } elseif ((isInstalled()) && (!isAdminRegistered())) { // Installed but no admin registered - $pageTitle = '{--SETUP_OF_MAILER--}'; + $pageTitle = '{--INSTALLER_OF_MAILER_NO_ADMIN--}'; } elseif ((!isInstalled()) || (!isAdminRegistered())) { // Installation mode - $pageTitle = '{--INSTALLATION_OF_MAILER--}'; + $pageTitle = '{--INSTALLER_OF_MAILER--}'; } else { - // Configuration not found! + // Configuration not found $pageTitle = '{--NO_CONFIG_FOUND_TITLE--}'; // Do not add the fatal message in installation mode - if ((!isInstalling()) && (!isConfigurationLoaded())) addFatalMessage(__FUNCTION__, __LINE__, '{--NO_CONFIG_FOUND--}'); + if ((!isInstalling()) && (!isConfigurationLoaded())) { + // Please report this + debug_report_bug(__FUNCTION__, __LINE__, 'No configuration data found!'); + } // END - if } // Return title @@ -1451,7 +1509,7 @@ function escapeQuotes ($str, $single = false) { $str = addslashes($str); } else { // Remove escaping of single quotes - $str = str_replace("\'", "'", $str); + $str = str_replace("\\'", "'", $str); // Escape only double-quotes but prevent double-quoting $str = str_replace("\\\\", "\\", str_replace('"', "\\\"", $str)); @@ -1473,6 +1531,9 @@ function escapeJavaScriptQuotes ($str) { // Send out mails depending on the 'mod/modes' combination // @TODO Lame description for this function function sendModeMails ($mod, $modes) { + // Init user data + $content = array (); + // Load hash if (fetchUserData(getMemberId())) { // Extract salt from cookie @@ -1500,7 +1561,7 @@ function sendModeMails ($mod, $modes) { $content['message'] = '{--MEMBER_CHANGED_EMAIL--}' . ': ' . postRequestParameter('old_email') . "\n"; break; - case 'pass': // Password was changed + case 'password': // Password was changed $content['message'] = '{--MEMBER_CHANGED_PASS--}' . "\n"; break; @@ -1536,61 +1597,59 @@ function sendModeMails ($mod, $modes) { $sub_mem = '{--MEMBER_CHANGED_DATA--}'; // Output success message - $content = '{--MYDATA_MAIL_SENT--}'; + $content['message'] = '{--MEMBER_MYDATA_MAIL_SENT--}'; break; default: // Unsupported module! logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unsupported module %s detected.", $mod)); - $content = '{--UNKNOWN_MODULE--}'; + $content['message'] = '{--UNKNOWN_MODULE--}'; break; } // END - switch } else { // Passwords mismatch - $content = '{--MEMBER_PASSWORD_ERROR--}'; + $content['message'] = '{--MEMBER_PASSWORD_ERROR--}'; } } else { // Could not load profile - $content = '{--MEMBER_CANNOT_LOAD_PROFILE--}'; + $content['message'] = '{--MEMBER_CANNOT_LOAD_PROFILE--}'; } // Send email to user if required - if ((!empty($sub_mem)) && (!empty($message))) { + if ((!empty($sub_mem)) && (!empty($message)) && (!empty($content['userid']))) { // Send member mail - sendEmail($content['email'], $sub_mem, $message); + sendEmail($content['userid'], $sub_mem, $message); } // END - if // Send only if no other error has occured - if (empty($content)) { - if ((!empty($sub_adm)) && (!empty($message_admin))) { - // Send admin mail - sendAdminNotification($sub_adm, $message_admin, $content, getMemberId()); - } elseif (isAdminNotificationEnabled()) { - // Cannot send mails to admin! - $content = '{--CANNOT_SEND_ADMIN_MAILS--}'; - } else { - // No mail to admin - $content = '{--MYDATA_MAIL_SENT--}'; - } - } // END - if + if ((!empty($sub_adm)) && (!empty($message_admin)) && (isAdminNotificationEnabled())) { + // Send admin mail + sendAdminNotification($sub_adm, $message_admin, $content, getMemberId()); + } elseif (isAdminNotificationEnabled()) { + // Cannot send mails to admin! + $content['message'] = '{--CANNOT_SEND_ADMIN_MAILS--}'; + } else { + // No mail to admin + $content['message'] = '{--MEMBER_MYDATA_MAIL_SENT--}'; + } // Load template - loadTemplate('admin_settings_saved', false, $content); + displayMessage($content['message']); } // Generates a 'selection box' from given array function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent = '', $extraName = '') { // Start the output - $OUT = ' '; // Walk through all options foreach ($options as $option) { - // Add the '; } } // END - foreach @@ -1649,8 +1708,8 @@ function generateMetaDescriptionCode () { $GLOBALS['page_header'] .= ''; } // END - if - // Remove depth - unset($GLOBALS['ref_level']); + // Initialize referal system + initReferalSystem(); } // Generates an FQFN for template cache from the given template name @@ -1685,5 +1744,82 @@ function fixNullEmptyToDashes ($str, $num) { return $return; } +// Translates the "pool type" into human-readable +function translatePoolType ($type) { + // Return "translation" + return sprintf("{--POOL_TYPE_%s--}", strtoupper($type)); +} + +// Displays given message in admin_settings_saved template +function displayMessage ($message, $return = false) { + // Load the template + return loadTemplate('admin_settings_saved', $return, $message); +} + +// Generates a selection box for (maybe) given gender +function generateGenderSelectionBox ($selectedGender = '') { + // Start the HTML code + $out = ''; + + // Return the code + return $out; +} + +//----------------------------------------------------------------------------- +// Template helper functions for EL +//----------------------------------------------------------------------------- + +// Color-switch helper function +function doTemplateColorSwitch ($template, $clear = false, $return = true) { + // Is it there? + if (!isset($GLOBALS['color_switch'][$template])) { + // Initialize it + initTemplateColorSwitch($template); + } elseif ($clear === false) { + // Switch color if called from loadTemplate() + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'SWITCH:' . $template); + $GLOBALS['color_switch'][$template] = 3 - $GLOBALS['color_switch'][$template]; + } + + // Return CSS class name + if ($return === true) { + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'RETURN:' . $template . '=' . $GLOBALS['color_switch'][$template]); + return 'switch_sw' . $GLOBALS['color_switch'][$template]; + } // END - if +} + +// Helper function for extension registration link +function doTemplateExtensionRegistrationLink ($template, $dummy, $ext_name) { + // Default is all non-productive + $OUT = '{--ADMIN_EXTENSION_IS_NON_PRODUCTIVE_LINK--}'; + + // Is the given extension non-productive? + if (isExtensionProductive($ext_name)) { + // Productive code + $OUT = '{--ADMIN_REGISTER_EXTENSION--}'; + } // END - if + + // Return code + return $OUT; +} + +// Helper function to create bonus mail admin links +function doTemplateAdminBonusMailLinks ($template, $dummy, $bonusId) { + // Call the inner function + return generateAdminMailLinks('bid', $bonusId); +} + +// Helper function to create member mail admin links +function doTemplateAdminMemberMailLinks ($template, $dummy, $mailId) { + // Call the inner function + return generateAdminMailLinks('mid', $mailId); +} + // [EOF] ?>