X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ftemplate-functions.php;h=d4bd6354fa62f3d7c80f39cbfb730bdb743c35b8;hp=3bd31a9dc458cbed32febd25ceb3b0817d81507e;hb=82c5c7d37ee00f628b4fdd445f7fc453523ed1dd;hpb=b0dabab25084e67689015614bd2a9f91b608b27a diff --git a/inc/template-functions.php b/inc/template-functions.php index 3bd31a9dc4..d4bd6354fa 100644 --- a/inc/template-functions.php +++ b/inc/template-functions.php @@ -10,13 +10,8 @@ * -------------------------------------------------------------------- * * Kurzbeschreibung : Template-Funktionen * * -------------------------------------------------------------------- * - * $Revision:: $ * - * $Date:: $ * - * $Tag:: 0.2.1-FINAL $ * - * $Author:: $ * - * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009 - 2012 by Mailer Developer Team * + * Copyright (c) 2009 - 2015 by Mailer Developer Team * * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * @@ -144,7 +139,7 @@ function outputHtml ($htmlCode = NULL, $newLine = TRUE) { reportBug(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--NO_RENDER_DIRECT--}'); break; } // END - switch - } elseif ((getPhpCaching() == 'on') && ((!isset($GLOBALS['http_header'])) || (count($GLOBALS['http_header']) == 0)) && (!isRawOutputMode())) { + } elseif ((getPhpCaching() == 'on') && (!isFilledArray($GLOBALS['http_header'])) && (!isRawOutputMode())) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'getPhpCaching()=' . getPhpCaching() . ',isset(http_header)=' . intval(isset($GLOBALS['http_header'])) . ',getScriptOutputMode()=' . getScriptOutputMode() . ''); // Output cached HTML code $GLOBALS['__output'] = ob_get_contents(); @@ -231,30 +226,34 @@ function compileFinalOutput () { // Main compilation loop function doFinalCompilation ($code, $insertComments = TRUE, $enableCodes = TRUE) { + // Code must not be an array (happens in installer) + assert(!is_array($code)); + // Insert comments? (Only valid with HTML templates, of course) enableTemplateHtml($insertComments); // Init counter - $count = 0; + $totalCompilations = 0; // Compile all out - while (((isInString('{--', $code)) || (isInString('{DQUOTE}', $code)) || (isInString('{?', $code)) || (isInString('{%', $code) !== FALSE)) && ($count < 7)) { + while (((isInString('{--', $code)) || (isInString('{DQUOTE}', $code)) || (isInString('{?', $code)) || (isInString('{%', $code) !== FALSE)) && ($totalCompilations < 7)) { // Init common variables $content = array(); $newContent = ''; // Compile it - //* DEBUG: */ debugOutput('
'.linenumberCode($code).'
'); + //* DEBUG: */ debugOutput('
'.lineNumberCode($code).'
'); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code[]=' . gettype($code) . ',enableCodes[]=' . gettype($enableCodes)); $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code), $enableCodes)) . '";'; - //* DEBUG: */ if (!$insertComments) print('EVAL=
'.linenumberCode($eval).'
'); + //* DEBUG: */ if (!$insertComments) print('EVAL=
'.lineNumberCode($eval).'
'); eval($eval); - //* DEBUG: */ if (!$insertComments) print('NEW=
'.linenumberCode($newContent).'
'); + //* DEBUG: */ if (!$insertComments) print('NEW=
'.lineNumberCode($newContent).'
'); //* DEBUG: */ die('
'.encodeEntities($newContent).'
'); // Was that eval okay? if (empty($newContent)) { // Something went wrong! - reportBug(__FUNCTION__, __LINE__, 'Evaluation error:
' . linenumberCode($eval) . '
', FALSE); + reportBug(__FUNCTION__, __LINE__, 'Evaluation error:
' . lineNumberCode($eval) . '
', FALSE); } // END - if // Use it again @@ -267,14 +266,14 @@ function doFinalCompilation ($code, $insertComments = TRUE, $enableCodes = TRUE) } // END - if // Count round - $count++; + $totalCompilations++; } // END - while // Add debugging data in HTML code, if mode is enabled if ((isDebugModeEnabled()) && ($insertComments === TRUE) && (isHtmlOutputMode())) { // Add loop count //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'isDebugModeEnabled()=' . intval(isDebugModeEnabled()) . ',insertComments=' . intval($insertComments) . ',isHtmlOutputMode()=' . intval(isHtmlOutputMode())); - $code .= ''; + $code .= ''; } // END - if // Return the compiled code @@ -305,7 +304,7 @@ function loadTemplate ($template, $return = FALSE, $content = array(), $compileC } // Init returned content - $ret = ''; + $templateContent = ''; // Set current template $GLOBALS['current_template'] = $template; @@ -322,17 +321,17 @@ function loadTemplate ($template, $return = FALSE, $content = array(), $compileC $template = strtolower($template); // Base directory - $basePath = sprintf("%stemplates/%s/html/", getPath(), getLanguage()); + $basePath = getTemplateBasePath('html'); $extraPath = detectExtraTemplatePath('html', $template); // Generate FQFN - $FQFN = $basePath . $extraPath . $template . '.tpl'; + $FQFN = $basePath . '/' . $extraPath . $template . '.tpl'; //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Template ' . $template . ' is solved to FQFN=' . $FQFN); // Does the special template exists? if (!isFileReadable($FQFN)) { // Reset to default template - $FQFN = $basePath . $template . '.tpl'; + $FQFN = $basePath . '/' . $template . '.tpl'; } // END - if // Now does the final template exists? @@ -356,11 +355,11 @@ function loadTemplate ($template, $return = FALSE, $content = array(), $compileC } elseif (substr($template, 0, 3) == 'js_') { // JavaScripts don't like entities, dollar signs and timings //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]) . '");'; } elseif (isAjaxOutputMode()) { // AJAX (JSON content) //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '";'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]) . '";'; } else { // Prepare eval() command, other output doesn't like entities, maybe //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); @@ -374,11 +373,11 @@ function loadTemplate ($template, $return = FALSE, $content = array(), $compileC } elseif (isAjaxOutputMode()) { // AJAX (JSON content) //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '";'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]) . '";'; } else { // JavaScript again //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]) . '");'; } // END - if } elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) { // Only admins shall see this warning or when installation mode is active @@ -509,18 +508,18 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load unset($GLOBALS['template_eval']['email'][$template]); } elseif (!isset($GLOBALS['template_eval']['email'][$template])) { // Base directory - $basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage()); + $basePath = getTemplateBasePath('emails'); // Detect extra path $extraPath = detectExtraTemplatePath('email', $template); // Generate full FQFN - $FQFN = $basePath . $extraPath . $template . '.tpl'; + $FQFN = $basePath . '/' . $extraPath . $template . '.tpl'; // Does the special template exists? if (!isFileReadable($FQFN)) { // Reset to default template - $FQFN = $basePath . $template . '.tpl'; + $FQFN = $basePath . '/' . $template . '.tpl'; } // END - if // Now does the final template exists? @@ -562,6 +561,7 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load // Eval the code //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - BEFORE EVAL'); //* DEBUG: */ print('
'.htmlentities($GLOBALS['template_eval']['email'][$template]).'
'); + //* DEBUG: */ die('
'.print_r($content, TRUE).'
'.htmlentities($GLOBALS['template_eval']['email'][$template]).'
'); eval($GLOBALS['template_eval']['email'][$template]); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - AFTER EVAL'); } // END - if @@ -648,9 +648,13 @@ function compileCode ($code, $full = TRUE, $compileCode = TRUE) { // Compiles the code function compileRawCode ($code, $full = TRUE, $compileCode = TRUE) { + //* DIE: */ reportBug(__FUNCTION__, __LINE__, 'Called with ' . strlen($code) . ' code length.'); + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Called with code()=' . strlen($code) . ',full=' . intval($full) . ',compileCode=' . intval($compileCode)); + // Is the code a string or shall we not compile? if ((!is_string($code)) || ($compileCode === FALSE)) { // Silently return it + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code[]= ' . gettype($code) . ' is not a string or compileCode(' . intval($compileCode) . ') is FALSE.'); return $code; } // END - if @@ -662,32 +666,37 @@ function compileRawCode ($code, $full = TRUE, $compileCode = TRUE) { $secChars = $GLOBALS['security_chars']; } // END - if - // Compile more through a filter - $code = runFilterChain('compile_code', $code); - // First compile these chars array_unshift($secChars['to'] , '{--' , '--}'); array_unshift($secChars['from'], '{%message,', '%}' ); - // Compile QUOT and other non-HTML codes + // Replace QUOT and other non-HTML codes + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code()=' . strlen($code) . ' - before str_replace() ...'); $code = str_replace($secChars['to'], $secChars['from'], $code); + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code()=' . strlen($code) . ' - after str_replace() ...'); - // Find $content[bla][blub] entries + // Compile the prepared code through a filter chain + $code = runFilterChain('compile_code', $code); + + // Find all $content[bla][blub] entries preg_match_all('/\$content((\[([a-zA-Z0-9-_]+)\])*)/', $code, $matches); //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Second regex gave ' . count($matches[0]) . ' matches.'); // Are some matches found? - if ((count($matches) > 0) && (count($matches[0]) > 0)) { + if ((isFilledArray($matches)) && (isFilledArray($matches[0]))) { // Replace all matches $matchesFound = array(); foreach ($matches[0] as $key => $match) { // Fuzzy look has failed by default $fuzzyFound = FALSE; + // "Cache" match length + $matchLength = strlen($match); + // Fuzzy look on match if already found foreach ($matchesFound as $found => $set) { // Get test part - $test = substr($found, 0, strlen($match)); + $test = substr($found, 0, $matchLength); // Does this entry exist? //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'found=' . $found . ',match=' . $match . ',set=' . $set); @@ -734,7 +743,7 @@ function compileRawCode ($code, $full = TRUE, $compileCode = TRUE) { preg_match_all('/\$([a-z_A-Z\[\]]){0,}/', $code, $matches); // Are some matches found? - if ((count($matches) > 0) && (count($matches[0]) > 0)) { + if ((isFilledArray($matches)) && (isFilledArray($matches[0]))) { // Scan all matches for not $content foreach ($matches[0] as $match) { // Trim match @@ -756,10 +765,17 @@ function compileRawCode ($code, $full = TRUE, $compileCode = TRUE) { } // END - if } // END - if - // Replace {COMPILE_DOLLAR} back to dollar sign - $code = str_replace('{COMPILE_DOLLAR}', '$', $code); + // Add 'COMPILE_DOLLAR' again + array_push($secChars['to'] , '{COMPILE_DOLLAR}'); + array_push($secChars['from'], '$'); + + // Replace QUOT and other non-HTML codes + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code()=' . strlen($code) . ' - before str_replace() ...'); + $code = str_replace($secChars['to'], $secChars['from'], $code); + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code()=' . strlen($code) . ' - after str_replace() ...'); // Finally return it + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Exiting with code()=' . strlen($code)); return $code; } @@ -787,7 +803,7 @@ function addSelectionBox ($type, $default, $prefix = '', $id = NULL, $class = 'f // Use configured min age or fixed? if (isExtensionInstalledAndNewer('other', '0.2.1')) { // Configured - $startYear = $year - getConfig('min_age'); + $startYear = $year - getMinAge(); } else { // Fixed 16 years $startYear = $year - 16; @@ -829,6 +845,14 @@ function addSelectionBox ($type, $default, $prefix = '', $id = NULL, $class = 'f } // END - for break; + case 'mn': // Months, numeric + for ($idx = 0; $idx <= 12; $idx++) { + $OUT .= ''; } // END - for break; case 'ho': // Hours - for ($idx = 0; $idx < 24; $idx++) { - if (strlen($idx) == 1) $idx = 0 . $idx; - $OUT .= '