";
OUTPUT_HTML($OUT);
}
// Close a table (you may want to add some footer stuff here)
function CLOSE_TABLE($ADD="") {
OUTPUT_HTML("
\n
");
if (!empty($ADD)) OUTPUT_HTML($ADD);
OUTPUT_HTML("");
}
// Output HTML code directly or "render" it. You addionally switch the new-line character off
function OUTPUT_HTML($HTML, $NEW_LINE = true) {
// Some global variables
global $OUTPUT, $footer, $CSS;
// Do we have HTML-Code here?
if (!empty($HTML)) {
// Yes, so we handle it as you have configured
switch (OUTPUT_MODE)
{
case "render":
// That's why you don't need any \n at the end of your HTML code... :-)
if (_OB_CACHING == "on") {
// Output into PHP's internal buffer
OUTPUT_RAW($HTML);
// That's why you don't need any \n at the end of your HTML code... :-)
if ($NEW_LINE) echo "\n";
} else {
// Render mode for old or lame servers...
$OUTPUT .= $HTML;
// That's why you don't need any \n at the end of your HTML code... :-)
if ($NEW_LINE) $OUTPUT .= "\n";
}
break;
case "direct":
// If we are switching from render to direct output rendered code
if ((!empty($OUTPUT)) && (_OB_CACHING != "on")) { OUTPUT_RAW($OUTPUT); $OUTPUT = ""; }
// The same as above... ^
OUTPUT_RAW($HTML);
if ($NEW_LINE) echo "\n";
break;
default:
// Huh, something goes wrong or maybe you have edited config.php ???
die ("".FATAL_ERROR.": ".LANG_NO_RENDER_DIRECT);
break;
}
} elseif ((_OB_CACHING == "on") && ($footer == 1)) {
// Output cached HTML code
$OUTPUT = ob_get_contents();
// Clear output buffer for later output
ob_end_clean();
// Extension "rewrite" installed?
if ((EXT_IS_ACTIVE("rewrite")) && (function_exists('REWRITE_LINKS')) && ($CSS != "1") && ($CSS != "-1")) {
$OUTPUT = REWRITE_LINKS($OUTPUT);
} // END - if
// Compile and run finished rendered HTML code
while (strpos($OUTPUT, '{!') > 0) {
// Prepare the content and eval() it...
$newContent = "";
$eval = "\$newContent = \"".COMPILE_CODE(addslashes($OUTPUT))."\";";
@eval($eval);
// Was that eval okay?
if (empty($newContent)) {
// Something went wrong!
die("Evaluation error:
".htmlentities($eval)."
");
} // END - if
$OUTPUT = $newContent;
} // END - while
// Output code here, DO NOT REMOVE! ;-)
OUTPUT_RAW($OUTPUT);
} elseif ((OUTPUT_MODE == "render") && (!empty($OUTPUT))) {
// Rewrite links when rewrite extension is active
if ((EXT_IS_ACTIVE("rewrite")) && (function_exists('REWRITE_LINKS')) && ($CSS != "1") && ($CSS != "-1")) {
$OUTPUT = REWRITE_LINKS($OUTPUT);
} // END - if
// Compile and run finished rendered HTML code
while (strpos($OUTPUT, '{!') > 0) {
$eval = "\$OUTPUT = \"".COMPILE_CODE(addslashes($OUTPUT))."\";";
eval($eval);
} // END - while
// Output code here, DO NOT REMOVE! ;-)
OUTPUT_RAW($OUTPUT);
}
}
// Output the raw HTML code
function OUTPUT_RAW ($HTML) {
// Output stripped HTML code to avoid broken JavaScript code, etc.
echo stripslashes(stripslashes($HTML));
// Flush the output if only _OB_CACHING is not "on"
if (_OB_CACHING != "on") {
// Flush it
flush();
} // END - if
}
// Add a fatal error message to the queue array
function ADD_FATAL ($message, $extra="") {
global $FATAL;
if (empty($extra)) {
// Regular text message to add to $FATAL
$FATAL[] = $message;
} else {
// $message is text with a mask plus extras to insert into the text
$FATAL[] = sprintf($message, $extra);
}
}
// Load a template file and return it's content (only it's name; do not use ' or ")
function LOAD_TEMPLATE($template, $return=false, $content=array()) {
// Add more variables which you want to use in your template files
global $DATA, $_CONFIG, $username;
// Make all template names lowercase
$template = strtolower($template);
// Count the template load
if (!isset($_CONFIG['num_templates'])) $_CONFIG['num_templates'] = 0;
$_CONFIG['num_templates']++;
// Init some data
$ret = "";
if (empty($GLOBALS['refid'])) $GLOBALS['refid'] = 0;
// @DEPRECATED Try to remove this if() block
if ($template == "member_support_form") {
// Support request of a member
$result = SQL_QUERY_ESC("SELECT gender, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1",
array($GLOBALS['userid']), __FILE__, __LINE__);
// @TODO Merge this data into $content
list($gender, $surname, $family, $email) = SQL_FETCHROW($result);
// Translate gender
$gender = TRANSLATE_GENDER($gender);
// Insert data if content is an array
if (is_array($content)) {
// Please switch to $content[bla] in all your templates! Direct
// variables are deprecated as of 09/13/2008.
$content['gender'] = $gender;
$content['surname'] = $surname;
$content['family'] = $family;
$content['email'] = $email;
} // END - if
// Free result
SQL_FREERESULT($result);
} // END - if
// Generate date/time string
$date_time = MAKE_DATETIME(time(), "1");
// Base directory
$BASE = sprintf("%stemplates/%s/html/", PATH, GET_LANGUAGE());
$MODE = "";
// Check for admin/guest/member templates
if (strpos($template, "admin_") > -1) {
// Admin template found
$MODE = "admin/";
} elseif (strpos($template, "guest_") > -1) {
// Guest template found
$MODE = "guest/";
} elseif (strpos($template, "member_") > -1) {
// Member template found
$MODE = "member/";
} elseif (strpos($template, "install_") > -1) {
// Installation template found
$MODE = "install/";
} elseif (strpos($template, "ext_") > -1) {
// Extension template found
$MODE = "ext/";
} elseif (strpos($template, "la_") > -1) {
// "Logical-area" template found
$MODE = "la/";
} else {
// Test for extension
$test = substr($template, 0, strpos($template, "_"));
if (EXT_IS_ACTIVE($test)) {
// Set extra path to extension's name
$MODE = $test."/";
}
}
////////////////////////
// Generate file name //
////////////////////////
$file = $BASE.$MODE.$template.".tpl";
if ((!empty($GLOBALS['what'])) && ((strpos($template, "_header") > 0) || (strpos($template, "_footer") > 0)) && (($MODE == "guest/") || ($MODE == "member/") || ($MODE == "admin/"))) {
// Select what depended header/footer template file for admin/guest/member area
$file2 = sprintf("%s%s%s_%s.tpl",
$BASE,
$MODE,
$template,
SQL_ESCAPE($GLOBALS['what'])
);
// Probe for it...
if (FILE_READABLE($file2)) $file = $file2;
// Remove variable from memory
unset($file2);
}
// Does the special template exists?
if (!FILE_READABLE($file)) {
// Reset to default template
$file = $BASE.$template.".tpl";
} // END - if
// Now does the final template exists?
if (FILE_READABLE($file)) {
// The local file does exists so we load it. :)
$tmpl_file = implode("", file($file));
// Replace ' to our own chars to preventing them being quoted
while (strpos($tmpl_file, "\'") !== false) { $tmpl_file = str_replace("\'", '{QUOT}', $tmpl_file); }
// Do we have to compile the code?
$ret = "";
if ((strpos($tmpl_file, "\$") !== false) || (strpos($tmpl_file, '{--') !== false) || (strpos($tmpl_file, '--}') > 0)) {
// Okay, compile it!
$tmpl_file = "\$ret=\"".COMPILE_CODE(addslashes($tmpl_file))."\";";
eval($tmpl_file);
} else {
// Simply return loaded code
$ret = $tmpl_file;
}
// Add surrounding HTML comments to help finding bugs faster
$ret = "\n".$ret."\n";
} elseif ((IS_ADMIN()) || ((isBooleanConstantAndTrue('mxchange_installing')) && (!isBooleanConstantAndTrue('mxchange_installed')))) {
// Only admins shall see this warning or when installation mode is active
$ret = " ".TEMPLATE_404."
(".basename($file).")
".TEMPLATE_CONTENT."
".print_r($content, true)."
".TEMPLATE_DATA."
".print_r($DATA, true)."
";
}
// Do we have some content to output or return?
if (!empty($ret)) {
// Not empty so let's put it out! ;)
if ($return) {
// Return the HTML code
return $ret;
} else {
// Output direct
OUTPUT_HTML($ret);
}
} elseif (isBooleanConstantAndTrue('DEBUG_MODE')) {
// Warning, empty output!
return "E:".$template." \n";
}
}
// Send mail out to an email address
function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") {
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):TO={$TO},SUBJECT={$SUBJECT} \n";
// Compile subject line (for POINTS constant etc.)
$eval = "\$SUBJECT = html_entity_decode(\"".COMPILE_CODE(addslashes($SUBJECT))."\");";
eval($eval);
// Set from header
if ((!eregi("@", $TO)) && ($TO > 0)) {
// Value detected, is the message extension installed?
if (EXT_IS_ACTIVE("msg")) {
ADD_MESSAGE_TO_BOX($TO, $SUBJECT, $MSG, $HTML);
return;
} else {
// Load email address
$result_email = SQL_QUERY_ESC("SELECT email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1", array(bigintval($TO)), __FILE__, __LINE__);
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):numRows=".SQL_NUMROWS($result_email)." \n";
// Does the user exist?
if (SQL_NUMROWS($result_email)) {
// Load email address
list($TO) = SQL_FETCHROW($result_email);
} else {
// Set webmaster
$TO = WEBMASTER;
}
// Free result
SQL_FREERESULT($result_email);
}
} elseif ("$TO" == "0") {
// Is the webmaster!
$TO = WEBMASTER;
}
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):TO={$TO} \n";
// Check for PHPMailer or debug-mode
if (!CHECK_PHPMAILER_USAGE()) {
// Not in PHPMailer-Mode
if (empty($FROM)) {
// Load email header template
$FROM = LOAD_EMAIL_TEMPLATE("header");
} else {
// Append header
$FROM .= LOAD_EMAIL_TEMPLATE("header");
}
} elseif (isBooleanConstantAndTrue('DEBUG_MODE')) {
if (empty($FROM)) {
// Load email header template
$FROM = LOAD_EMAIL_TEMPLATE("header");
} else {
// Append header
$FROM .= LOAD_EMAIL_TEMPLATE("header");
}
}
// Compile "TO"
$eval = "\$TO = \"".COMPILE_CODE(addslashes($TO))."\";";
eval($eval);
// Fix HTML parameter (default is no!)
if (empty($HTML)) $HTML = "N";
if (isBooleanConstantAndTrue('DEBUG_MODE')) {
// In debug mode we want to display the mail instead of sending it away so we can debug this part
echo "
".htmlentities(trim($FROM))."
To : ".$TO."
Subject : ".$SUBJECT."
Message : ".$MSG."
\n";
// Log the mail away
if (defined('DEBUG_MAIL')) DEBUG_LOG(__FUNCTION__.":to={$TO},subject={$SUBJECT},msg={$MSG}");
} elseif (($HTML == "Y") && (EXT_IS_ACTIVE("html_mail"))) {
// Send mail as HTML away
SEND_HTML_EMAIL($TO, $SUBJECT, $MSG, $FROM);
} elseif (!empty($TO)) {
// Send Mail away
SEND_RAW_EMAIL($TO, COMPILE_CODE($SUBJECT), COMPILE_CODE($MSG), $FROM);
} elseif ($HTML == "N") {
// Problem found!
SEND_RAW_EMAIL(WEBMASTER, COMPILE_CODE($SUBJECT), COMPILE_CODE($MSG), $FROM);
}
}
// Check if legacy or PHPMailer command
// @private
function CHECK_PHPMAILER_USAGE() {
return ((defined('SMTP_HOSTNAME')) && (defined('SMTP_USER')) && (defined('SMTP_PASSWORD')) && (SMTP_HOSTNAME != "") && (SMTP_USER != ""));
}
/*
* Send out a raw email with PHPMailer class or legacy mail() command
*/
function SEND_RAW_EMAIL ($to, $subject, $msg, $from) {
// Shall we use PHPMailer class or legacy mode?
if (CHECK_PHPMAILER_USAGE()) {
// Use PHPMailer class with SMTP enabled
require_once(PATH."inc/phpmailer/class.phpmailer.php");
require_once(PATH."inc/phpmailer/class.smtp.php");
// get new instance
$mail = new PHPMailer();
$mail->PluginDir = sprintf("%sinc/phpmailer/", PATH);
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = SMTP_HOSTNAME;
$mail->Port = 25;
$mail->Username = SMTP_USER;
$mail->Password = SMTP_PASSWORD;
if (empty($from)) {
$mail->From = WEBMASTER;
} else {
$mail->From = $from;
}
$mail->FromName = MAIN_TITLE;
$mail->Subject = $subject;
if ((EXT_IS_ACTIVE("html_mail")) && (strip_tags($msg) != $msg)) {
$mail->Body = $msg;
$mail->AltBody = "Your mail program required HTML support to read this mail!";
$mail->WordWrap = 70;
$mail->IsHTML(true);
} else {
$mail->Body = html_entity_decode($msg);
}
$mail->AddAddress($to, "");
$mail->AddReplyTo(WEBMASTER,MAIN_TITLE);
$mail->AddCustomHeader("Errors-To:".WEBMASTER);
$mail->AddCustomHeader("X-Loop:".WEBMASTER);
$mail->Send();
} else {
// Use legacy mail() command
@mail($to, $subject, html_entity_decode($msg), $from);
}
}
//
// Generate a password in a specified length or use default password length
function GEN_PASS($LEN = 0) {
global $_CONFIG;
if ($LEN == 0) $LEN = $_CONFIG['pass_len'];
// Initialize array with all allowed chars
$ABC = explode(",", "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9,-,+,_,/");
// Initialize randomizer
mt_srand((double) microtime() * 1000000);
// Start creating password
$PASS = "";
for ($i = 0; $i < $LEN; $i++) {
$PASS .= $ABC[mt_rand(0, sizeof($ABC) -1)];
}
// When the size is below 40 we can also add additional security by scrambling it
if (strlen($PASS) <= 40) {
// Also scramble the password
$PASS = scrambleString($PASS);
}
// Return the password
return $PASS;
}
//
function MAKE_DATETIME ($time, $mode="0")
{
if ($time == 0) {
// Never happend
return NEVER_HAPPENED;
} else {
// Filter out numbers
$time = bigintval($time);
}
switch (GET_LANGUAGE())
{
case "de": // German date / time format
switch ($mode) {
case "0": $ret = date("d.m.Y \u\m H:i \U\h\\r", $time); break;
case "1": $ret = strtolower(date("d.m.Y - H:i", $time)); break;
case "2": $ret = date("d.m.Y|H:i", $time); break;
case "3": $ret = date("d.m.Y", $time); break;
}
break;
default: // Default is the US date / time format!
switch ($mode) {
case "0": $ret = date("r", $time); break;
case "1": $ret = date("Y-m-d - g:i A", $time); break;
case "2": $ret = date("y-m-d|H:i", $time); break;
case "3": $ret = date("y-m-d", $time); break;
}
}
return $ret;
}
// Translates the american decimal dot into a german comma
function TRANSLATE_COMMA ($dotted, $cut=true) {
global $_CONFIG;
// Default is 3 you can change this in admin area "Misc -> Misc Options"
if (empty($_CONFIG['max_comma'])) $_CONFIG['max_comma'] = "3";
$maxComma = $_CONFIG['max_comma'];
// Cut zeros off?
if ($cut) {
// Test for commata if in cut-mode
$com = explode(".", $dotted);
if (count($com) > 1) {
// Commata found, so only zeros?
if ($com[1] == str_repeat("0", strlen($com[1]))) {
// Only zeros, so display only one
$maxComma = 1;
} // END - if
} else {
// Don't display commatas even if there are none... ;-)
$maxComma = 0;
}
} // END - if
// Debug log
//DEBUG_LOG(__FUNCTION__.":dotted={$dotted},maxComma={$maxComma}");
// Translate it now
switch (GET_LANGUAGE()) {
case "de":
$dotted = number_format($dotted, $maxComma, ",", ".");
break;
default:
$dotted = number_format($dotted, $maxComma, ".", ",");
break;
}
// Return translated value
return $dotted;
}
//
function DEREFERER ($URL) {
// Don't de-refer our own links!
if (substr($URL, 0, strlen(URL)) != URL) {
// De-refer this link
$URL = URL."/modules.php?module=loader&url=".urlencode(base64_encode(gzcompress($URL)));
} // END - if
// Return link
return $URL;
}
//
function TRANSLATE_GENDER ($gender) {
switch ($gender)
{
case "M": $ret = GENDER_M; break;
case "F": $ret = GENDER_F; break;
case "C": $ret = GENDER_C; break;
default : $ret = $gender; break;
}
return $ret;
}
//
function FRAMETESTER($URL) {
// Prepare frametester URL
$frametesterUrl = sprintf("%s/modules.php?module=frametester&url=%s",
URL,
urlencode(base64_encode(gzcompress(COMPILE_CODE($URL))))
);
return $frametesterUrl;
}
//
function SELECTION_COUNT($array) {
$ret = 0;
if (is_array($array)) {
foreach ($array as $key => $sel) {
if (!empty($sel)) $ret++;
}
}
return $ret;
}
//
function IMG_CODE ($code, $type, $DATA, $uid) {
return "";
}
//
function TRANSLATE_STATUS($status) {
switch ($status)
{
case "UNCONFIRMED":
$ret = ACCOUNT_UNCONFIRMED;
break;
case "CONFIRMED":
$ret = ACCOUNT_CONFIRMED;
break;
case "LOCKED":
$ret = ACCOUNT_LOCKED;
break;
case "":
case null:
$ret = ACCOUNT_DELETED;
break;
default:
$ret = UNKNOWN_STATUS_1.$status.UNKNOWN_STATUS_2;
break;
}
return $ret;
}
//
function GET_LANGUAGE() {
if (!empty($_GET['mx_lang'])) {
// Accept only first 2 chars
$lang = substr($_GET['mx_lang'], 0, 2);
} else {
// Do nothing
$lang = "";
}
// Set default return value to default language from config
$ret = DEFAULT_LANG;
// Check GET variable and cookie
if (!empty($lang)) {
// Check if main language file does exist
if (FILE_READABLE(PATH."inc/language/".$lang.".php")) {
// Okay found, so let's update cookies
SET_LANGUAGE($lang);
}
} elseif (!isSessionVariableSet('mx_lang')) {
// Return stored value from cookie
$ret = get_session('mx_lang');
// Fixes a warning before the session has the mx_lang constant
if (empty($ret)) $ret = DEFAULT_LANG;
}
return $ret;
}
//
function SET_LANGUAGE($lang) {
global $_CONFIG;
// Accept only first 2 chars!
$lang = substr(SQL_ESCAPE(strip_tags($lang)), 0, 2);
// Set cookie
set_session("mx_lang", $lang);
}
//
function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") {
global $DATA, $_CONFIG, $REPLACER;
// Make sure all template names are lowercase!
$template = strtolower($template);
// Default "nickname" if extension is not installed
$nick = "---";
// Keept for backward-compatiblity (please replace these variables against our new {!CONST!} syntax!)
// No longer used: $MAIN_TITLE = MAIN_TITLE; $URL = URL; $WEBMASTER = WEBMASTER;
// Prepare IP number and User Agent
$REMOTE_ADDR = GET_REMOTE_ADDR();
$HTTP_USER_AGENT = GET_USER_AGENT();
// Default admin
$ADMIN = MAIN_TITLE;
// Is the admin logged in?
if (IS_ADMIN()) {
// Load Admin data
$ADMIN = GET_ADMIN_EMAIL(get_session('admin_login'));
} // END - if
// Neutral email address is default
$email = WEBMASTER;
// Expiration in a nice output format
if ($_CONFIG['auto_purge'] == 0) {
// Will never expire!
$EXPIRATION = MAIL_WILL_NEVER_EXPIRE;
} elseif (function_exists('CREATE_FANCY_TIME')) {
// Create nice date string
$EXPIRATION = CREATE_FANCY_TIME($_CONFIG['auto_purge']);
} else {
// Display days only
$EXPIRATION = round($_CONFIG['auto_purge']/60/60/24)." "._DAYS;
}
// Is content an array?
if (is_array($content)) {
// Add expiration to array, $EXPIRATION is now deprecated!
$content['expiration'] = $EXPIRATION;
} // END - if
// Load user's data
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):UID={$UID},template={$template} \n";
if ($UID > 0) {
if (EXT_IS_ACTIVE("nickname")) {
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):NICKNAME! \n";
// Load nickname
$result = SQL_QUERY_ESC("SELECT surname, family, gender, email, nickname FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1",
array(bigintval($UID)), __FILE__, __LINE__);
} else {
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):NO-NICK! \n";
/// Load normal data
$result = SQL_QUERY_ESC("SELECT surname, family, gender, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1",
array(bigintval($UID)), __FILE__, __LINE__);
}
// Is content an array?
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):content[]=".gettype($content)." \n";
if (is_array($content)) {
// Fetch and migrate data
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):content()=".count($content)." - PRE \n";
$content = array_merge($content, SQL_FETCHARRAY($result));
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):content()=".count($content)." - AFTER \n";
} // END - if
// Free result
SQL_FREERESULT($result);
} // END - if
// Translate M to male or F to female if present
if (isset($content['gender'])) $content['gender'] = TRANSLATE_GENDER($content['gender']);
// Overwrite email from data if present
if (isset($content['email'])) $email = $content['email'];
// Store email for some functions in global data array
$DATA['email'] = $email;
// Base directory
$BASE = sprintf("%stemplates/%s/emails/", PATH, GET_LANGUAGE());
// Check for admin/guest/member templates
if (strpos($template, "admin_") > -1) {
// Admin template found
$file = $BASE."admin/".$template.".tpl";
} elseif (strpos($template, "guest_") > -1) {
// Guest template found
$file = $BASE."guest/".$template.".tpl";
} elseif (strpos($template, "member_") > -1) {
// Member template found
$file = $BASE."member/".$template.".tpl";
} else {
// Test for extension
$test = substr($template, 0, strpos($template, "_"));
if (EXT_IS_ACTIVE($test)) {
// Set extra path to extension's name
$file = $BASE.$test."/".$template.".tpl";
} else {
// No special filename
$file = $BASE.$template.".tpl";
}
}
// Does the special template exists?
if (!FILE_READABLE($file)) {
// Reset to default template
$file = $BASE.$template.".tpl";
} // END - if
// Now does the final template exists?
$newContent = "";
if (FILE_READABLE($file)) {
// The local file does exists so we load it. :)
$tmpl_file = implode("", file($file));
$tmpl_file = addslashes($tmpl_file);
// Run code
$tmpl_file = "\$newContent=html_entity_decode(\"".COMPILE_CODE($tmpl_file)."\");";
@eval($tmpl_file);
} elseif (!empty($template)) {
// Template file not found!
$newContent = TEMPLATE_404.": ".$template."
".TEMPLATE_CONTENT."
".print_r($content, true)."
".TEMPLATE_DATA."
".print_r($DATA, true)."
";
// Debug mode not active? Then remove the HTML tags
if (!DEBUG_MODE) $newContent = strip_tags($newContent);
} else {
// No template name supplied!
$newContent = NO_TEMPLATE_SUPPLIED;
}
// Is there some content?
if (empty($newContent)) {
// Compiling failed
$newContent = "Compiler error for template {$template}!\nUncompiled content:\n".$tmpl_file;
if (function_exists('error_get_last')) $newContent .= "\n--------------------------------------\nDebug:\n".print_r(error_get_last(), true)."--------------------------------------\nPlease don't alter these informations!\nThanx.";
} // END - if
// Return compiled content
return COMPILE_CODE($newContent);
}
//
function MAKE_TIME($H, $M, $S, $stamp) {
// Extract day, month and year from given timestamp
$DAY = date("d", $stamp);
$MONTH = date("m", $stamp);
$YEAR = date('Y', $stamp);
// Create timestamp for wished time which depends on extracted date
return mktime($H, $M, $S, $MONTH, $DAY, $YEAR);
}
//
function LOAD_URL($URL, $addUrlData=true) {
global $CSS, $_CONFIG, $footer;
// Check if http(s):// is there
if ((substr($URL, 0, 7) != "http://") && (substr($URL, 0, 8) != "https://")) {
// Make all URLs full-qualified
$URL = URL."/".$URL;
}
// Compile out URI codes
$URL = COMPILE_CODE($URL);
// Get output buffer
$OUTPUT = ob_get_contents();
// Clear it only if there is content
if (!empty($OUTPUT)) {
ob_end_clean();
} // END - if
// Add some data to URL if cookies are not accepted
if (((!defined('__COOKIES')) || (!__COOKIES)) && ($addUrlData)) $URL = ADD_URL_DATA($URL);
// Probe for bot from search engine
if ((eregi("spider", GET_USER_AGENT())) || (eregi("bot", GET_USER_AGENT())) || (eregi("spider", GET_USER_AGENT()))) {
// Search engine bot detected so let's rewrite many chars for the link
$URL = htmlentities(strip_tags($URL), ENT_QUOTES);
// Output new location link as anchor
OUTPUT_HTML("".$URL."");
} elseif (!headers_sent()) {
// Load URL when headers are not sent
/*
print("
");
debug_print_backtrace();
die("
URL={$URL}");
*/
@header ("Location: ".str_replace("&", "&", $URL));
} else {
// Output error message
include(PATH."inc/header.php");
LOAD_TEMPLATE("redirect_url", false, str_replace("&", "&", $URL));
include(PATH."inc/footer.php");
}
exit();
}
//
function COMPILE_CODE($code, $simple = false, $constants = true, $full = true) {
global $SEC_CHARS, $URL_CHARS;
// Is the code a string?
if (!is_string($code)) {
// Silently return it
return $code;
} // END - if
$ARRAY = $SEC_CHARS;
// Select smaller set of chars to replace when we e.g. want to compile URLs
if (!$full) $ARRAY = $URL_CHARS;
// Compile constants
if ($constants) {
// BEFORE 0.2.1 : Language and data constants
// WITH 0.2.1+ : Only language constants
$code = str_replace('{--','".', str_replace('--}','."', $code));
// BEFORE 0.2.1 : Not used
// WITH 0.2.1+ : Data constants
$code = str_replace('{!','".', str_replace("!}", '."', $code));
} // END - if
// Compile QUOT and other non-HTML codes
foreach ($ARRAY['to'] as $k => $to) {
// Do the reversed thing as in inc/libs/security_functions.php
$code = str_replace($to, $ARRAY['from'][$k], $code);
} // END - foreach
// But shall I keep simple quotes for later use?
if ($simple) $code = str_replace("\'", '{QUOT}', $code);
// Find $content[bla][blub] entries
@preg_match_all('/\$(content|DATA)((\[([a-zA-Z0-9-_]+)\])*)/', $code, $matches);
// Are some matches found?
if ((count($matches) > 0) && (count($matches[0]) > 0)) {
// Replace all matches
$matchesFound = array();
foreach ($matches[0] as $key => $match) {
// Fuzzy look has failed by default
$fuzzyFound = false;
// Fuzzy look on match if already found
foreach ($matchesFound as $found => $set) {
// Get test part
$test = substr($found, 0, strlen($match));
// Does this entry exist?
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):found={$found},match={$match},set={$set} \n";
if ($test == $match) {
// Match found!
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):fuzzyFound! \n";
$fuzzyFound = true;
break;
} // END - if
} // END - foreach
// Skip this entry?
if ($fuzzyFound) continue;
// 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: */ print __FUNCTION__."(".__LINE__."):key={$key},match={$match} \n";
$newMatch = str_replace("[".$matches[4][$key]."]", "['".$matches[4][$key]."']", $match);
$code = str_replace($match, "\".".$newMatch.".\"", $code);
$matchesFound[$key."_".$matches[4][$key]] = 1;
$matchesFound[$match] = 1;
} elseif (!isset($matchesFound[$match])) {
// Not yet replaced!
//* DEBUG: */ print __FUNCTION__."(".__LINE__."):match={$match} \n";
$code = str_replace($match, "\".".$match.".\"", $code);
$matchesFound[$match] = 1;
}
} // END - foreach
} // END - if
// Return compiled code
return $code;
}
//
/************************************************************************
* *
* Gaenderter Sortier-Algorythmus, $array wird nach dem Array (!) *
* $a_sort sortiert: *
* *
* $array - Das 3-dimensionale Array, das paralell sortiert werden soll *
* $a_sort - Array, das die Sortiereihenfolge der ersten Elementeben *
* $primary_key - Prim.rschl.ssel aus $a_sort, nach dem sortiert wird *
* $order - Sortiereihenfolge: -1 = A-Z, 0 = keine, 1 = Z-A *
* $nums - true = Als Zahlen sortieren, false = Als Zeichen sortieren *
* *
* $a_sort muss Elemente enthalten, deren Wert Schluessel von $array *
* sind... Klingt kompliziert, suchen Sie mal mein Beispiel, dann sehen *
* Sie, dass es doch nicht so schwer ist! :-) *
* *
************************************************************************/
function array_pk_sort(&$array, $a_sort, $primary_key = 0, $order = -1, $nums = false)
{
$dummy = $array;
while ($primary_key < count($a_sort)) {
foreach ($dummy[$a_sort[$primary_key]] as $key => $value) {
foreach ($dummy[$a_sort[$primary_key]] as $key2 => $value2) {
$match = false;
if (!$nums) {
// Sort byte-by-byte (also numbers will be interpreted as chars! E.g.: "9" > "10")
if (($key != $key2) && (strcmp(strtolower($dummy[$a_sort[$primary_key]][$key]), strtolower($dummy[$a_sort[$primary_key]][$key2])) == $order)) $match = true;
} elseif ($key != $key2) {
// Sort numbers (E.g.: 9 < 10)
if (($dummy[$a_sort[$primary_key]][$key] < $dummy[$a_sort[$primary_key]][$key2]) && ($order == -1)) $match = true;
if (($dummy[$a_sort[$primary_key]][$key] > $dummy[$a_sort[$primary_key]][$key2]) && ($order == 1)) $match = true;
}
if ($match) {
// We have found two different values, so let's sort whole array
foreach ($dummy as $sort_key => $sort_val) {
$t = $dummy[$sort_key][$key];
$dummy[$sort_key][$key] = $dummy[$sort_key][$key2];
$dummy[$sort_key][$key2] = $t;
unset($t);
} // END - foreach
} // END - if
} // END - foreach
} // END - foreach
// Count one up
$primary_key++;
} // END - while
// Write back sorted array
$array = $dummy;
}
//
function ADD_SELECTION($type, $DEFAULT, $prefix="", $id="0")
{
global $MONTH_DESCR; $OUT = "";
if ($type == "yn")
{
// This is a yes/no selection only!
if ($id > 0) $prefix .= "[".$id."]";
$OUT .= "