X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffunctions.php;h=010cad850080d80485c4f72b0e44db0ca4d2ecc9;hp=637412fc66ae8626244eebb5df5c42150225fc59;hb=f928ad2bed60fa256d0641eaf6d2c027a2944688;hpb=3203112d9be14c2df49bd6b3b618b17fd950cc09 diff --git a/inc/functions.php b/inc/functions.php index 637412fc66..010cad8500 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -114,12 +114,15 @@ function OUTPUT_HTML ($HTML, $newLine = true) { sendHeader('Connection: Close'); // Extension 'rewrite' installed? - if ((EXT_IS_ACTIVE('rewrite')) && ($GLOBALS['output_mode'] != '1') && ($GLOBALS['output_mode'] != '-1')) { + if ((EXT_IS_ACTIVE('rewrite')) && (getOutputMode() != '1') && (getOutputMode() != '-1')) { $OUTPUT = rewriteLinksInCode($OUTPUT); } // END - if // Compile and run finished rendered HTML code while (strpos($OUTPUT, '{!') > 0) { + // Replace _MYSQL_PREFIX + $OUTPUT = str_replace("{!_MYSQL_PREFIX!}", getConfig('_MYSQL_PREFIX'), $OUTPUT); + // Prepare the content and eval() it... $newContent = ''; $eval = "\$newContent = \"".COMPILE_CODE(smartAddSlashes($OUTPUT))."\";"; @@ -128,7 +131,7 @@ function OUTPUT_HTML ($HTML, $newLine = true) { // Was that eval okay? if (empty($newContent)) { // Something went wrong! - app_die(__FUNCTION__, __LINE__, "Evaluation error:
".htmlentities($eval)."
"); + app_die(__FUNCTION__, __LINE__, 'Evaluation error:
' . htmlentities($eval) . '
'); } // END - if $OUTPUT = $newContent; } // END - while @@ -137,7 +140,7 @@ function OUTPUT_HTML ($HTML, $newLine = true) { outputRawCode($OUTPUT); } elseif ((getConfig('OUTPUT_MODE') == 'render') && (!empty($OUTPUT))) { // Rewrite links when rewrite extension is active - if ((EXT_IS_ACTIVE('rewrite')) && ($GLOBALS['output_mode'] != '1') && ($GLOBALS['output_mode'] != '-1')) { + if ((EXT_IS_ACTIVE('rewrite')) && (getOutputMode() != '1') && (getOutputMode() != '-1')) { $OUTPUT = rewriteLinksInCode($OUTPUT); } // END - if @@ -208,6 +211,9 @@ function getTotalFatalErrors () { // 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()) { + // @TODO Remove this sanity-check if all is fine + if (!is_bool($return)) debug_report_bug('return is not bool (' . gettype($return) . ')'); + // Add more variables which you want to use in your template files global $DATA, $username; @@ -230,10 +236,10 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) { if (empty($GLOBALS['refid'])) $GLOBALS['refid'] = 0; // @DEPRECATED Try to rewrite the if() condition - if ($template == "member_support_form") { + if ($template == 'member_support_form') { // Support request of a member - $result = SQL_QUERY_ESC("SELECT userid, gender, surname, family, email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1", - array(getUserId()), __FUNCTION__, __LINE__); + $result = SQL_QUERY_ESC("SELECT `userid`, `gender`, `surname`, `family`, `email` FROM `{!_MYSQL_PREFIX!}_user_data` WHERE `userid`=%s LIMIT 1", + array(getUserId()), __FUNCTION__, __LINE__); // Is content an array? if (is_array($content)) { @@ -244,13 +250,13 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) { $content['gender'] = translateGender($content['gender']); } else { // @DEPRECATED - // @TODO Fine all templates which are using these direct variables and rewrite them. + // @TODO Find all templates which are using these direct variables and rewrite them. // @TODO After this step is done, this else-block is history list($gender, $surname, $family, $email) = SQL_FETCHROW($result); // Translate gender $gender = translateGender($gender); - DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("DEPRECATION-WARNING: content is not array (%s).", gettype($content))); + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("DEPRECATION-WARNING: content is not array [%s], template=%s.", gettype($content), $template)); } // Free result @@ -265,45 +271,48 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) { $mode = ''; // Check for admin/guest/member templates - if (strpos($template, "admin_") > -1) { + if (strpos($template, 'admin_') > -1) { // Admin template found - $mode = "admin/"; - } elseif (strpos($template, "guest_") > -1) { + $mode = 'admin/'; + } elseif (strpos($template, 'guest_') > -1) { // Guest template found - $mode = "guest/"; - } elseif (strpos($template, "member_") > -1) { + $mode = 'guest/'; + } elseif (strpos($template, 'member_') > -1) { // Member template found - $mode = "member/"; - } elseif (strpos($template, "install_") > -1) { + $mode = 'member/'; + } elseif (strpos($template, 'install_') > -1) { // Installation template found - $mode = "install/"; - } elseif (strpos($template, "ext_") > -1) { + $mode = 'install/'; + } elseif (strpos($template, 'ext_') > -1) { // Extension template found - $mode = "ext/"; - } elseif (strpos($template, "la_") > -1) { - // "Logical-area" template found - $mode = "la/"; + $mode = 'ext/'; + } elseif (strpos($template, 'la_') > -1) { + // 'Logical-area' template found + $mode = 'la/'; + } elseif (strpos($template, 'js_') > -1) { + // JavaScript template found + $mode = 'js/'; } else { // Test for extension - $test = substr($template, 0, strpos($template, "_")); + $test = substr($template, 0, strpos($template, '_')); if (EXT_IS_ACTIVE($test)) { // Set extra path to extension's name - $mode = $test.'/'; - } + $mode = $test . '/'; + } // END - if } //////////////////////// // Generate file name // //////////////////////// - $FQFN = $basePath.$mode.$template.".tpl"; + $FQFN = $basePath . $mode . $template . '.tpl'; - if ((!empty($GLOBALS['what'])) && ((strpos($template, "_header") > 0) || (strpos($template, "_footer") > 0)) && (($mode == "guest/") || ($mode == "member/") || ($mode == "admin/"))) { + if ((isWhatSet()) && ((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", - $basePath, - $mode, - $template, - SQL_ESCAPE($GLOBALS['what']) + $basePath, + $mode, + $template, + getWhat() ); // Probe for it... @@ -311,12 +320,12 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) { // Remove variable from memory unset($file2); - } + } // END - if // 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? @@ -338,8 +347,11 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) { $ret = $tmpl_file; } - // Add surrounding HTML comments to help finding bugs faster - $ret = "\n".$ret."\n"; + // Normal HTML output? + if ($GLOBALS['output_mode'] == 0) { + // Add surrounding HTML comments to help finding bugs faster + $ret = "\n" . $ret . "\n"; + } // END - if } elseif ((IS_ADMIN()) || ((isInstalling()) && (!isInstalled()))) { // Only admins shall see this warning or when installation mode is active $ret = "
{--TEMPLATE_404--}
@@ -368,12 +380,12 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) { } } elseif (isDebugModeEnabled()) { // Warning, empty output! - return "E:".$template."
\n"; + return "E:" . $template."
\n"; } } // Send mail out to an email address -function sendEmail($toEmail, $subject, $message, $HTML = 'N', $mailHeader = '') { +function sendEmail ($toEmail, $subject, $message, $HTML = 'N', $mailHeader = '') { //* DEBUG: */ print __FUNCTION__."(".__LINE__."):TO={$toEmail},SUBJECT={$subject}
\n"; // Compile subject line (for POINTS constant etc.) @@ -381,14 +393,16 @@ function sendEmail($toEmail, $subject, $message, $HTML = 'N', $mailHeader = '') eval($eval); // Set from header - if ((!eregi("@", $toEmail)) && ($toEmail > 0)) { + if ((!eregi('@', $toEmail)) && ($toEmail > 0)) { // Value detected, is the message extension installed? - if (EXT_IS_ACTIVE("msg")) { + // @TODO Extension 'msg' does not exist + if (EXT_IS_ACTIVE('msg')) { ADD_MESSAGE_TO_BOX($toEmail, $subject, $message, $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($toEmail)), __FUNCTION__, __LINE__); + $result_email = SQL_QUERY_ESC("SELECT `email` FROM `{!_MYSQL_PREFIX!}_user_data` WHERE `userid`=%s LIMIT 1", + array(bigintval($toEmail)), __FUNCTION__, __LINE__); //* DEBUG: */ print __FUNCTION__."(".__LINE__."):numRows=".SQL_NUMROWS($result_email)."
\n"; // Does the user exist? @@ -403,7 +417,7 @@ function sendEmail($toEmail, $subject, $message, $HTML = 'N', $mailHeader = '') // Free result SQL_FREERESULT($result_email); } - } elseif ("$toEmail" == '0') { + } elseif ($toEmail == '0') { // Is the webmaster! $toEmail = constant('WEBMASTER'); } @@ -414,18 +428,18 @@ function sendEmail($toEmail, $subject, $message, $HTML = 'N', $mailHeader = '') // Not in PHPMailer-Mode if (empty($mailHeader)) { // Load email header template - $mailHeader = LOAD_EMAIL_TEMPLATE("header"); + $mailHeader = LOAD_EMAIL_TEMPLATE('header'); } else { // Append header - $mailHeader .= LOAD_EMAIL_TEMPLATE("header"); + $mailHeader .= LOAD_EMAIL_TEMPLATE('header'); } } elseif (isDebugModeEnabled()) { if (empty($mailHeader)) { // Load email header template - $mailHeader = LOAD_EMAIL_TEMPLATE("header"); + $mailHeader = LOAD_EMAIL_TEMPLATE('header'); } else { // Append header - $mailHeader .= LOAD_EMAIL_TEMPLATE("header"); + $mailHeader .= LOAD_EMAIL_TEMPLATE('header'); } } @@ -441,11 +455,11 @@ function sendEmail($toEmail, $subject, $message, $HTML = 'N', $mailHeader = '') if (empty($HTML)) $HTML = 'N'; if (isDebugModeEnabled()) { // In debug mode we want to display the mail instead of sending it away so we can debug this part - print("
+		OUTPUT_HTML("
 ".htmlentities(trim($mailHeader))."
-To      : ".$toEmail."
-Subject : ".$subject."
-Message : ".$message."
+To      : " . $toEmail."
+Subject : " . $subject."
+Message : " . $message."
 
\n"); } elseif (($HTML == 'Y') && (EXT_IS_ACTIVE('html_mail'))) { // Send mail as HTML away @@ -467,7 +481,7 @@ function checkPhpMailerUsage() { } // Send out a raw email with PHPMailer class or legacy mail() command -function sendRawEmail ($toEmail, $subject, $msg, $from) { +function sendRawEmail ($toEmail, $subject, $message, $from) { // Shall we use PHPMailer class or legacy mode? if (checkPhpMailerUsage()) { // Use PHPMailer class with SMTP enabled @@ -491,13 +505,13 @@ function sendRawEmail ($toEmail, $subject, $msg, $from) { } $mail->FromName = constant('MAIN_TITLE'); $mail->Subject = $subject; - if ((EXT_IS_ACTIVE('html_mail')) && (strip_tags($msg) != $msg)) { - $mail->Body = $msg; + if ((EXT_IS_ACTIVE('html_mail')) && (strip_tags($message) != $message)) { + $mail->Body = $message; $mail->AltBody = 'Your mail program required HTML support to read this mail!'; $mail->WordWrap = 70; $mail->IsHTML(true); } else { - $mail->Body = decodeEntities($msg); + $mail->Body = decodeEntities($message); } $mail->AddAddress($toEmail, ''); $mail->AddReplyTo(constant('WEBMASTER'), constant('MAIN_TITLE')); @@ -506,21 +520,21 @@ function sendRawEmail ($toEmail, $subject, $msg, $from) { $mail->Send(); } else { // Use legacy mail() command - @mail($toEmail, $subject, decodeEntities($msg), $from); + mail($toEmail, $subject, decodeEntities($message), $from); } } // Generate a password in a specified length or use default password length -function generatePassword ($LEN = 0) { +function generatePassword ($length = 0) { // Auto-fix invalid length of zero - if ($LEN == 0) $LEN = getConfig('pass_len'); + if ($length == 0) $length = getConfig('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,-,+,_,/'); + $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,-,+,_,/,.'); // Start creating password $PASS = ''; - for ($i = 0; $i < $LEN; $i++) { + for ($i = 0; $i < $length; $i++) { $PASS .= $ABC[mt_rand(0, count($ABC) -1)]; } // END - for @@ -577,7 +591,7 @@ function generateDateTime ($time, $mode = '0') { // Translates Y/N to yes/no function translateYesNo ($yn) { // Default - $translated = "??? (".$yn.')'; + $translated = "??? (" . $yn.')'; switch ($yn) { case 'Y': $translated = getMessage('YES'); break; case 'N': $translated = getMessage('NO'); break; @@ -732,7 +746,10 @@ function generateCaptchaCode ($code, $type, $DATA, $uid) { // Loads an email template and compiles it function LOAD_EMAIL_TEMPLATE ($template, $content = array(), $UID = '0') { - global $DATA, $_CONFIG; + global $DATA; + + // Our configuration is kept non-global here + $_CONFIG = getConfigArray(); // Make sure all template names are lowercase! $template = strtolower($template); @@ -782,13 +799,13 @@ function LOAD_EMAIL_TEMPLATE ($template, $content = array(), $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)), __FUNCTION__, __LINE__); + $result = SQL_QUERY_ESC("SELECT `surname`, `family`, `gender`, `email`, `nickname` FROM `{!_MYSQL_PREFIX!}_user_data` WHERE `userid`=%s LIMIT 1", + array(bigintval($UID)), __FUNCTION__, __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)), __FUNCTION__, __LINE__); + $result = SQL_QUERY_ESC("SELECT `surname`, `family`, `gender`, `email` FROM `{!_MYSQL_PREFIX!}_user_data` WHERE `userid`=%s LIMIT 1", + array(bigintval($UID)), __FUNCTION__, __LINE__); } // Fetch and merge data @@ -815,29 +832,29 @@ function LOAD_EMAIL_TEMPLATE ($template, $content = array(), $UID = '0') { // Check for admin/guest/member templates if (strpos($template, 'admin_') > -1) { // Admin template found - $FQFN = $basePath.'admin/'.$template.'.tpl'; + $FQFN = $basePath.'admin/' . $template.'.tpl'; } elseif (strpos($template, 'guest_') > -1) { // Guest template found - $FQFN = $basePath.'guest/'.$template.'.tpl'; + $FQFN = $basePath.'guest/' . $template.'.tpl'; } elseif (strpos($template, 'member_') > -1) { // Member template found - $FQFN = $basePath.'member/'.$template.'.tpl'; + $FQFN = $basePath.'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 - $FQFN = $basePath.$test.'/'.$template.'.tpl'; + $FQFN = $basePath . $test.'/' . $template.'.tpl'; } else { // No special filename - $FQFN = $basePath.$template.'.tpl'; + $FQFN = $basePath . $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? @@ -852,7 +869,7 @@ function LOAD_EMAIL_TEMPLATE ($template, $content = array(), $UID = '0') { eval($tmpl_file); } elseif (!empty($template)) { // Template file not found! - $newContent = "{--TEMPLATE_404--}: ".$template."
+ $newContent = "{--TEMPLATE_404--}: " . $template."
{--TEMPLATE_CONTENT--}
".print_r($content, true)."
{--TEMPLATE_DATA--} @@ -869,7 +886,7 @@ function LOAD_EMAIL_TEMPLATE ($template, $content = array(), $UID = '0') { // Is there some content? if (empty($newContent)) { // Compiling failed - $newContent = "Compiler error for template {$template}!\nUncompiled content:\n".$tmpl_file; + $newContent = "Compiler error for template {$template}!\nUncompiled content:\n" . $tmpl_file; // 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."; } // END - if @@ -905,7 +922,7 @@ function redirectToUrl ($URL) { } // END - if // Three different debug ways... - //* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL)); + /* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL)); //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, $URL); //* DEBUG: */ die($URL); @@ -926,11 +943,11 @@ function redirectToUrl ($URL) { clearOutputBuffer(); } // END - if - // Secure the URL against bad things such als HTML insertions and so on... - $URL = htmlentities(strip_tags($URL), ENT_QUOTES); - // Simple probe for bots/spiders from search engines if ((strpos(detectUserAgent(), 'spider') !== false) || (strpos(detectUserAgent(), 'bot') !== false)) { + // Secure the URL against bad things such als HTML insertions and so on... + $URL = htmlentities(strip_tags($URL), ENT_QUOTES); + // Output new location link as anchor OUTPUT_HTML('' . $URL . ''); } elseif (!headers_sent()) { @@ -1027,17 +1044,17 @@ function COMPILE_CODE ($code, $simple = false, $constants = true, $full = true) if ($fuzzyFound) 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: */ 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; + $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); + $code = str_replace($match, "\"." . $match.".\"", $code); $matchesFound[$match] = 1; } } // END - foreach @@ -1104,30 +1121,30 @@ function ADD_SELECTION ($type, $default, $prefix = '', $id = '0') { if ($type == 'yn') { // This is a yes/no selection only! - if ($id > 0) $prefix .= "[".$id."]"; - $OUT .= " \n"; } else { // Begin with regular selection box here if (!empty($prefix)) $prefix .= "_"; $type2 = $type; - if ($id > 0) $type2 .= "[".$id."]"; - $OUT .= " \n"; } switch ($type) { case "day": // Day for ($idx = 1; $idx < 32; $idx++) { - $OUT .= "\n"; } // END - for break; case "month": // Month foreach ($GLOBALS['month_descr'] as $month => $descr) { - $OUT .= "\n"; } // END - for break; @@ -1150,19 +1167,19 @@ function ADD_SELECTION ($type, $default, $prefix = '', $id = '0') { // Check if the default value is larger than minimum and bigger than actual year if (($default > $minYear) && ($default >= $year)) { for ($idx = $year; $idx < ($year + 11); $idx++) { - $OUT .= "\n"; } // END - for } elseif ($default == -1) { // Current year minus 1 for ($idx = $startYear; $idx <= ($year + 1); $idx++) { - $OUT .= "\n"; + $OUT .= "\n"; } } else { // Get current year and subtract the configured minimum age - $OUT .= "\n"; + $OUT .= "\n"; // Calculate earliest year depending on extension version if (GET_EXT_VERSION('other') >= '0.2.1') { // Use configured minimum age @@ -1174,9 +1191,9 @@ function ADD_SELECTION ($type, $default, $prefix = '', $id = '0') { // Construct year selection list for ($idx = $minYear; $idx <= $year; $idx++) { - $OUT .= "\n"; } // END - for } break; @@ -1184,19 +1201,19 @@ function ADD_SELECTION ($type, $default, $prefix = '', $id = '0') { case "sec": case "min": for ($idx = 0; $idx < 60; $idx+=5) { - if (strlen($idx) == 1) $idx = '0'.$idx; - $OUT .= "\n"; } // END - for break; case "hour": for ($idx = 0; $idx < 24; $idx++) { - if (strlen($idx) == 1) $idx = '0'.$idx; - $OUT .= "\n"; } // END - for break; @@ -1216,7 +1233,7 @@ function ADD_SELECTION ($type, $default, $prefix = '', $id = '0') { // Deprecated : $length // Optional : $DATA // -function generateRandomCodde ($length, $code, $uid, $DATA = '') { +function generateRandomCode ($length, $code, $uid, $DATA = '') { // Fix missing _MAX constant // @TODO Rewrite this unnice code if (!defined('_MAX')) define('_MAX', 15235); @@ -1228,31 +1245,31 @@ function generateRandomCodde ($length, $code, $uid, $DATA = '') { $keys = getConfig('SITE_KEY').getConfig('ENCRYPT_SEPERATOR').getConfig('DATE_KEY'); if (isConfigEntrySet('secret_key')) $keys .= getConfig('ENCRYPT_SEPERATOR').getConfig('secret_key'); if (isConfigEntrySet('file_hash')) $keys .= getConfig('ENCRYPT_SEPERATOR').getConfig('file_hash'); - $keys .= getConfig('ENCRYPT_SEPERATOR').date("d-m-Y (l-F-T)", getConfig(('patch_ctime'))); + $keys .= getConfig('ENCRYPT_SEPERATOR') . date("d-m-Y (l-F-T)", getConfig('patch_ctime')); if (isConfigEntrySet('master_salt')) $keys .= getConfig('ENCRYPT_SEPERATOR').getConfig('master_salt'); // Build string from misc data - $data = $code.getConfig('ENCRYPT_SEPERATOR').$uid.getConfig('ENCRYPT_SEPERATOR').$DATA; + $data = $code.getConfig('ENCRYPT_SEPERATOR') . $uid.getConfig('ENCRYPT_SEPERATOR') . $DATA; // Add more additional data if (isSessionVariableSet('u_hash')) $data .= getConfig('ENCRYPT_SEPERATOR').getSession('u_hash'); if (isUserIdSet()) $data .= getConfig('ENCRYPT_SEPERATOR').getUserId(); if (isSessionVariableSet('mxchange_theme')) $data .= getConfig('ENCRYPT_SEPERATOR').getSession('mxchange_theme'); if (isSessionVariableSet('mx_lang')) $data .= getConfig('ENCRYPT_SEPERATOR').getLanguage(); - if (isset($GLOBALS['refid'])) $data .= getConfig('ENCRYPT_SEPERATOR').$GLOBALS['refid']; + if (isset($GLOBALS['refid'])) $data .= getConfig('ENCRYPT_SEPERATOR') . $GLOBALS['refid']; // Calculate number for generating the code $a = $code + getConfig('_ADD') - 1; if (isConfigEntrySet('master_hash')) { // Generate hash with master salt from modula of number with the prime number and other data - $saltedHash = generateHash(($a % getConfig('_PRIME')).getConfig('ENCRYPT_SEPERATOR').$server.getConfig('ENCRYPT_SEPERATOR').$keys.getConfig('ENCRYPT_SEPERATOR').$data.getConfig('ENCRYPT_SEPERATOR').getConfig('DATE_KEY').getConfig('ENCRYPT_SEPERATOR').$a, getConfig('master_salt')); + $saltedHash = generateHash(($a % getConfig('_PRIME')).getConfig('ENCRYPT_SEPERATOR') . $server.getConfig('ENCRYPT_SEPERATOR') . $keys.getConfig('ENCRYPT_SEPERATOR') . $data.getConfig('ENCRYPT_SEPERATOR').getConfig('DATE_KEY').getConfig('ENCRYPT_SEPERATOR') . $a, getConfig('master_salt')); // Create number from hash $rcode = hexdec(substr($saltedHash, strlen(getConfig('master_salt')), 9)) / abs(constant('_MAX') - $a + sqrt(getConfig('_ADD'))) / pi(); } else { // Generate hash with "hash of site key" from modula of number with the prime number and other data - $saltedHash = generateHash(($a % getConfig('_PRIME')).getConfig('ENCRYPT_SEPERATOR').$server.getConfig('ENCRYPT_SEPERATOR').$keys.getConfig('ENCRYPT_SEPERATOR').$data.getConfig('ENCRYPT_SEPERATOR').getConfig('DATE_KEY').getConfig('ENCRYPT_SEPERATOR').$a, substr(sha1(getConfig('SITE_KEY')), 0, 8)); + $saltedHash = generateHash(($a % getConfig('_PRIME')).getConfig('ENCRYPT_SEPERATOR') . $server.getConfig('ENCRYPT_SEPERATOR') . $keys.getConfig('ENCRYPT_SEPERATOR') . $data.getConfig('ENCRYPT_SEPERATOR').getConfig('DATE_KEY').getConfig('ENCRYPT_SEPERATOR') . $a, substr(sha1(getConfig('SITE_KEY')), 0, 8)); // Create number from hash $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(constant('_MAX') - $a + sqrt(getConfig('_ADD'))) / pi(); @@ -1280,9 +1297,9 @@ function bigintval ($num, $castValue = true) { // Has the whole value changed? // @TODO Remove this if() block if all is working fine - if ("".$ret."" != ''.$num."") { + if ('' . $ret . '' != '' . $num . '') { // Log the values - debug_report_bug("{$ret}<>{$num}"); + //debug_report_bug("{$ret}<>{$num}"); } // END - if // Return result @@ -1296,7 +1313,7 @@ function GENERATE_IMAGE ($img_code, $headerSent=true) { return; } elseif (!$headerSent) { // Return in an HTML code code - return "\"Image\"\n"; + return "\"Image\"\n"; } // Load image @@ -1343,7 +1360,7 @@ function GENERATE_IMAGE ($img_code, $headerSent=true) { function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = 'center', $return_array=false) { // Calculate 2-seconds timestamp $stamp = round($timestamp); - //* DEBUG: */ print("*".$stamp.'/'.$timestamp."*
"); + //* DEBUG: */ print("*" . $stamp.'/' . $timestamp."*
"); // Do we have a leap year? $SWITCH = 0; @@ -1398,7 +1415,7 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = ); } else { // Generate table - $OUT = "
\n"; + $OUT = "
\n"; $OUT .= "\n"; $OUT .= "\n"; @@ -1406,7 +1423,7 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = $OUT .= " \n"; } - if (ereg("M", $display) || (empty($display))) { + if (ereg('M', $display) || (empty($display))) { $OUT .= " \n"; } @@ -1435,94 +1452,94 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align = if (ereg('Y', $display) || (empty($display))) { // Generate year selection - $OUT .= " \n"; } else { - $OUT .= "\n"; + $OUT .= "\n"; } - if (ereg("M", $display) || (empty($display))) { + if (ereg('M', $display) || (empty($display))) { // Generate month selection - $OUT .= " \n"; } else { - $OUT .= "\n"; + $OUT .= "\n"; } if (ereg("W", $display) || (empty($display))) { // Generate week selection - $OUT .= " \n"; } else { - $OUT .= "\n"; + $OUT .= "\n"; } if (ereg("D", $display) || (empty($display))) { // Generate day selection - $OUT .= " \n"; } else { - $OUT .= "\n"; + $OUT .= "\n"; } if (ereg("h", $display) || (empty($display))) { // Generate hour selection - $OUT .= " \n"; } else { - $OUT .= "\n"; + $OUT .= "\n"; } if (ereg('m', $display) || (empty($display))) { // Generate minute selection - $OUT .= " \n"; } else { - $OUT .= "\n"; + $OUT .= "\n"; } if (ereg("s", $display) || (empty($display))) { // Generate second selection - $OUT .= " \n"; } else { - $OUT .= "\n"; + $OUT .= "\n"; } $OUT .= "\n"; $OUT .= "
{--_YEARS--}
{--_MONTHS--}
\n"; @@ -1568,7 +1585,7 @@ function SEND_ADMIN_EMAILS_PRO ($subj, $template, $content, $UID) { $template = trim($template); // Load email template - $msg = LOAD_EMAIL_TEMPLATE($template, $content, $UID); + $message = LOAD_EMAIL_TEMPLATE($template, $content, $UID); // Check which admin shall receive this mail $result = SQL_QUERY_ESC("SELECT DISTINCT admin_id FROM `{!_MYSQL_PREFIX!}_admins_mails` WHERE mail_template='%s' ORDER BY admin_id", @@ -1596,7 +1613,7 @@ function SEND_ADMIN_EMAILS_PRO ($subj, $template, $content, $UID) { if ($aid == '-1') { if (EXT_IS_ACTIVE('events')) { // Add line to user events - EVENTS_ADD_LINE($subj, $msg, $UID); + EVENTS_ADD_LINE($subj, $message, $UID); } else { // Log error for debug DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Extension 'events' missing: tpl=%s,subj=%s,UID=%s", @@ -1618,7 +1635,7 @@ function SEND_ADMIN_EMAILS_PRO ($subj, $template, $content, $UID) { // Load email addresses and send away while ($content = SQL_FETCHARRAY($result)) { - sendEmail($content['email'], $subj, $msg); + sendEmail($content['email'], $subj, $message); } // END - while // Free memory @@ -1657,7 +1674,7 @@ function ADD_EMAIL_NAV ($PAGES, $offset, $show_form, $colspan, $return=false) { $SEP = ''; $TOP = ''; if (!$show_form) { $TOP = " top2"; - $SEP = " "; + $SEP = " "; } $NAV = ''; @@ -1668,7 +1685,7 @@ function ADD_EMAIL_NAV ($PAGES, $offset, $show_form, $colspan, $return=false) { $NAV .= "-"; } else { // Open anchor tag and add base URL - $NAV .= "\n"); - if (substr(strtolower($script), 0, 7) == "http://") { + //* DEBUG: */ print("SCRIPT=" . $script."
\n"); + if (substr(strtolower($script), 0, 7) == 'http://') { // But only if http:// is in front! $script = substr($script, (strlen($url) + 7)); } elseif (substr(strtolower($script), 0, 8) == "https://") { @@ -1737,7 +1754,7 @@ function extractHostnameFromUrl (&$script) { $script = substr($script, (strlen($url) + 8)); } - //* DEBUG: */ print("SCRIPT=".$script."
\n"); + //* DEBUG: */ print("SCRIPT=" . $script."
\n"); if (substr($script, 0, 1) == '/') $script = substr($script, 1); // Return host name @@ -1826,10 +1843,12 @@ function sendRawRequest ($host, $request) { } // END - if // Open connection - //* DEBUG: */ die("SCRIPT=".$script."
\n"); - if ($useProxy) { - $fp = @fsockopen(COMPILE_CODE(getConfig('proxy_host')), getConfig('proxy_port'), $errno, $errdesc, 30); + //* DEBUG: */ die("SCRIPT=" . $script."
\n"); + if ($useProxy === true) { + // Connect to host through proxy connection + $fp = @fsockopen(COMPILE_CODE(getConfig('proxy_host')), bigintval(getConfig('proxy_port')), $errno, $errdesc, 30); } else { + // Connect to host directly $fp = @fsockopen($host, 80, $errno, $errdesc, 30); } @@ -1840,7 +1859,7 @@ function sendRawRequest ($host, $request) { } // END - if // Do we use proxy? - if ($useProxy) { + if ($useProxy === true) { // Generate CONNECT request header $proxyTunnel = "CONNECT " . $host . ":80 HTTP/1.1" . getConfig('HTTP_EOL'); $proxyTunnel .= "Host: " . $host . getConfig('HTTP_EOL'); @@ -1848,13 +1867,13 @@ function sendRawRequest ($host, $request) { // Use login data to proxy? (username at least!) if (getConfig('proxy_username') != '') { // Add it as well - $encodedAuth = base64_encode(COMPILE_CODE(getConfig('proxy_username')).getConfig('ENCRYPT_SEPERATOR').COMPILE_CODE(getConfig('proxy_password'))); + $encodedAuth = base64_encode(COMPILE_CODE(getConfig('proxy_username')) . getConfig('ENCRYPT_SEPERATOR') . COMPILE_CODE(getConfig('proxy_password'))); $proxyTunnel .= "Proxy-Authorization: Basic " . $encodedAuth . getConfig('HTTP_EOL'); } // END - if // Add last new-line $proxyTunnel .= getConfig('HTTP_EOL'); - //* DEBUG: */ print("proxyTunnel=
".$proxyTunnel."
"); + //* DEBUG: */ print("proxyTunnel=
" . $proxyTunnel."
"); // Write request fputs($fp, $proxyTunnel); @@ -1904,7 +1923,7 @@ function sendRawRequest ($host, $request) { //* DEBUG: */ print("Response:
".print_r($response, true)."
"); // Proxy agent found? - if ((substr(strtolower($response[0]), 0, 11) == 'proxy-agent') && ($useProxy)) { + if ((substr(strtolower($response[0]), 0, 11) == 'proxy-agent') && ($useProxy === true)) { // Proxy header detected, so remove two lines array_shift($response); array_shift($response); @@ -1935,7 +1954,6 @@ function isEmailValid ($email) { $regex = '@^' . $first . '\@' . $domain . '$@iU'; // Return check result - // @NOTE altered the regex-pattern and added modificator i (match both upper and lower case letters) and U (PCRE_UNGREEDY) to work with preg_match the same way as eregi return preg_match($regex, $email); } @@ -1946,13 +1964,13 @@ function isUrlValid ($URL, $compile=true) { //* DEBUG: */ echo $URL."
"; // Compile some chars out... - if ($compile) $URL = compileUriCode($URL, false, false, false); + if ($compile === true) $URL = compileUriCode($URL, false, false, false); //* DEBUG: */ echo $URL."
"; // Check for the extension filter if (EXT_IS_ACTIVE('filter')) { // Use the extension's filter set - return FILTER_isUrlValid($URL, false); + return FILTER_VALIDATE_URL($URL, false); } // END - if // If not installed, perform a simple test. Just make it sure there is always a http:// or @@ -1969,8 +1987,8 @@ function generateMemberAdminActionLinks ($uid, $status = '') { $eval = "\$OUT = \"[ "; foreach ($TARGETS as $tar) { - $eval .= "
\n"; + $eval .= "\n"; if (($tar == "lock_user") && ($status == 'LOCKED')) { // Locked accounts shall be unlocked $eval .= "UNLOCK_USER"; @@ -1998,20 +2016,20 @@ function generateMemberAdminActionLinks ($uid, $status = '') { } // Generate an email link -function generateMemberEmailLink ($email, $table = 'admins') { +function generateEmailLink ($email, $table = 'admins') { // Default email link (INSECURE! Spammer can read this by harvester programs) $EMAIL = 'mailto:' . $email; // Check for several extensions if ((EXT_IS_ACTIVE('admins')) && ($table == 'admins')) { // Create email link for contacting admin in guest area - $EMAIL = adminsCreateEmailLink($email); + $EMAIL = generateAdminEmailLink($email); } elseif ((EXT_IS_ACTIVE('user')) && (GET_EXT_VERSION('user') >= '0.3.3') && ($table == 'user_data')) { // Create email link for contacting a member within admin area (or later in other areas, too?) - $EMAIL = USER_generateMemberEmailLink($email); + $EMAIL = generateUserEmailLink($email, 'admin'); } elseif ((EXT_IS_ACTIVE('sponsor')) && ($table == 'sponsor_data')) { // Create email link to contact sponsor within admin area (or like the link above?) - $EMAIL = SPONSOR_generateMemberEmailLink($email); + $EMAIL = generateSponsorEmailLink($email, 'sponsor_data'); } // Shall I close the link when there is no admin? @@ -2041,7 +2059,7 @@ function generateHash ($plainText, $salt = '') { $server = $_SERVER['PHP_SELF'].getConfig('ENCRYPT_SEPERATOR').detectUserAgent().getConfig('ENCRYPT_SEPERATOR').getenv('SERVER_SOFTWARE').getConfig('ENCRYPT_SEPERATOR').detectRemoteAddr(); // Build key string - $keys = getConfig('SITE_KEY').getConfig('ENCRYPT_SEPERATOR').getConfig('DATE_KEY').getConfig('ENCRYPT_SEPERATOR').getConfig('secret_key').getConfig('ENCRYPT_SEPERATOR').getConfig('file_hash').getConfig('ENCRYPT_SEPERATOR').date("d-m-Y (l-F-T)", getConfig(('patch_ctime'))).getConfig('ENCRYPT_SEPERATOR').getConfig('master_salt'); + $keys = getConfig('SITE_KEY').getConfig('ENCRYPT_SEPERATOR').getConfig('DATE_KEY').getConfig('ENCRYPT_SEPERATOR').getConfig('secret_key').getConfig('ENCRYPT_SEPERATOR').getConfig('file_hash').getConfig('ENCRYPT_SEPERATOR').date("d-m-Y (l-F-T)", getConfig('patch_ctime')).getConfig('ENCRYPT_SEPERATOR').getConfig('master_salt'); // Additional data $data = $plainText.getConfig('ENCRYPT_SEPERATOR').uniqid(mt_rand(), true).getConfig('ENCRYPT_SEPERATOR').time(); @@ -2050,12 +2068,12 @@ function generateHash ($plainText, $salt = '') { $a = time() + getConfig('_ADD') - 1; // 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: */ echo "SHA1=".$sha1." (".strlen($sha1).")
"; + $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: */ echo "SHA1=" . $sha1." (".strlen($sha1).")
"; $sha1 = scrambleString($sha1); - //* DEBUG: */ echo "Scrambled=".$sha1." (".strlen($sha1).")
"; + //* DEBUG: */ echo "Scrambled=" . $sha1." (".strlen($sha1).")
"; //* DEBUG: */ $sha1b = descrambleString($sha1); - //* DEBUG: */ echo "Descrambled=".$sha1b." (".strlen($sha1b).")
"; + //* DEBUG: */ echo "Descrambled=" . $sha1b." (".strlen($sha1b).")
"; // Generate the password salt string $salt = substr($sha1, 0, getConfig('salt_length')); @@ -2067,7 +2085,7 @@ function generateHash ($plainText, $salt = '') { } // Return hash - return $salt.sha1($salt.$plainText); + return $salt.sha1($salt . $plainText); } // Scramble a string @@ -2088,7 +2106,7 @@ function scrambleString($str) { } // Scramble string here - //* DEBUG: */ echo "***Original=".$str."***
"; + //* DEBUG: */ echo "***Original=" . $str."***
"; for ($idx = 0; $idx < strlen($str); $idx++) { // Get char on scrambled position $char = substr($str, $scrambleNums[$idx], 1); @@ -2098,7 +2116,7 @@ function scrambleString($str) { } // END - for // Return scrambled string - //* DEBUG: */ echo "***Scrambled=".$scrambled."***
"; + //* DEBUG: */ echo "***Scrambled=" . $scrambled."***
"; return $scrambled; } @@ -2115,14 +2133,14 @@ function descrambleString($str) { // Begin descrambling $orig = str_repeat(" ", 40); - //* DEBUG: */ echo "+++Scrambled=".$str."+++
"; + //* DEBUG: */ echo "+++Scrambled=" . $str."+++
"; 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: */ echo "+++Original=".$orig."+++
"; + //* DEBUG: */ echo "+++Original=" . $orig."+++
"; return $orig; } @@ -2169,20 +2187,20 @@ function generatePassString ($passHash) { $mod = dechex(sqrt(($part2 - $part1) * getConfig('_PRIME') / pi())); } $mod = substr(round($mod), 0, 4); - $mod = str_repeat('0', 4-strlen($mod)).$mod; - //* DEBUG: */ echo "*".$start.'='.$mod."*
"; + $mod = str_repeat('0', 4-strlen($mod)) . $mod; + //* DEBUG: */ echo "*" . $start.'=' . $mod."*
"; $start += 4; $newHash .= $mod; } // END - for - //* DEBUG: */ print($passHash."
".$newHash." (".strlen($newHash).')'); + //* DEBUG: */ print($passHash."
" . $newHash." (".strlen($newHash).')'); $ret = generateHash($newHash, getConfig('master_salt')); //* DEBUG: */ print($ret."
\n"); } else { // Hash it simple - //* DEBUG: */ echo "--".$passHash."--
\n"; + //* DEBUG: */ echo "--" . $passHash."--
\n"; $ret = md5($passHash); - //* DEBUG: */ echo "++".$ret."++
\n"; + //* DEBUG: */ echo "++" . $ret."++
\n"; } // Return result @@ -2204,7 +2222,7 @@ function fixDeletedCookies ($cookies) { } // Output error messages in a fasioned way and die... -function app_die ($F, $L, $msg) { +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 @@ -2213,17 +2231,20 @@ function app_die ($F, $L, $msg) { // Load header loadIncludeOnce('inc/header.php'); - // Prepare message for output - $msg = sprintf(getMessage('MXCHANGE_HAS_DIED'), basename($F), $L, $msg); + // Rewrite message for output + $message = sprintf(getMessage('MXCHANGE_HAS_DIED'), basename($F), $L, $message); + + // Better log this message away + DEBUG_LOG($F, $L, $message); // Load the message template - LOAD_TEMPLATE('admin_settings_saved', false, $msg); + LOAD_TEMPLATE('admin_settings_saved', false, $message); // Load footer loadIncludeOnce('inc/footer.php'); } else { // Script tried to kill itself twice - debug_report_bug('Script wanted to kill itself more than once! Raw message=' . $msg . ', file/function=' . $F . ', line=' . $L); + debug_report_bug('Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L); } } @@ -2265,14 +2286,14 @@ function isBooleanConstantAndTrue ($constName) { // : Boolean // In cache? if (isset($GLOBALS['cache_array']['const'][$constName])) { // Use cache - //* DEBUG: */ print __FUNCTION__."(".__LINE__."): ".$constName."-CACHE!
\n"; + //* DEBUG: */ print __FUNCTION__."(".__LINE__."): " . $constName."-CACHE!
\n"; $res = ($GLOBALS['cache_array']['const'][$constName] === true); } else { // Check constant - //* DEBUG: */ print __FUNCTION__."(".__LINE__."): ".$constName."-RESOLVE!
\n"; + //* DEBUG: */ print __FUNCTION__."(".__LINE__."): " . $constName."-RESOLVE!
\n"; if (defined($constName)) { // Found! - //* DEBUG: */ print __FUNCTION__."(".__LINE__."): ".$constName."-FOUND!
\n"; + //* DEBUG: */ print __FUNCTION__."(".__LINE__."): " . $constName."-FOUND!
\n"; $res = (constant($constName) === true); } // END - if @@ -2312,7 +2333,7 @@ function getCurrentTheme() { // Fix it to default $ret = 'default'; } // END - if - } elseif ((!isInstalled()) && ((isInstalling()) || ($GLOBALS['output_mode'] == true)) && ((REQUEST_ISSET_GET('theme')) || (REQUEST_ISSET_POST('theme')))) { + } elseif ((!isInstalled()) && ((isInstalling()) || (getOutputMode() == true)) && ((REQUEST_ISSET_GET('theme')) || (REQUEST_ISSET_POST('theme')))) { // Prepare FQFN for checking $theme = sprintf("%stheme/%s/theme.php", constant('PATH'), REQUEST_GET('theme')); @@ -2381,6 +2402,12 @@ function getThemeId ($name) { // Generates an error code from given account status function generateErrorCodeFromUserStatus ($status) { + // @TODO The status should never be empty + if (empty($status)) { + // Something really bad happend here + debug_report_bug(__FUNCTION__ . ': status is empty.'); + } // END - if + // Default error code if unknown account status $errorCode = getCode('UNKNOWN_STATUS'); @@ -2403,17 +2430,17 @@ function generateErrorCodeFromUserStatus ($status) { // Function to search for the last modifified file function searchDirsRecursive ($dir, &$last_changed) { // Get dir as array - //* DEBUG: */ print __FUNCTION__."(".__LINE__."):dir=".$dir."
\n"; + //* DEBUG: */ print __FUNCTION__."(".__LINE__."):dir=" . $dir."
\n"; // Does it match what we are looking for? (We skip a lot files already!) // RegexPattern to exclude ., .., .revision, .svn, debug.log or .cache in the filenames - $excludePattern = '@(\.|\.\.|\.revision|\.svn|debug\.log|\.cache|config\.php)$@'; - $ds = getArrayFromDirectory($dir, '', true, false, $excludePattern); + $excludePattern = '@(\.revision|debug\.log|\.cache|config\.php)$@'; + $ds = getArrayFromDirectory($dir, '', true, false, array(), '.php', $excludePattern); //* DEBUG: */ print __FUNCTION__."(".__LINE__."):ds[]=".count($ds)."
\n"; // Walk through all entries foreach ($ds as $d) { // Generate proper FQFN - $FQFN = str_replace("//", '/', constant('PATH') . $dir. '/'. $d); + $FQFN = str_replace('//', '/', constant('PATH') . $dir. '/'. $d); // Is it a file and readable? //* DEBUG: */ print __FUNCTION__."(".__LINE__."):FQFN={$FQFN}
\n"; @@ -2421,12 +2448,12 @@ function searchDirsRecursive ($dir, &$last_changed) { // $FQFN is a directory so also crawl into this directory $newDir = $d; if (!empty($dir)) $newDir = $dir . '/'. $d; - //* DEBUG: */ print __FUNCTION__."(".__LINE__."):DESCENT: ".$newDir."
\n"; + //* DEBUG: */ print __FUNCTION__."(".__LINE__."):DESCENT: " . $newDir."
\n"; searchDirsRecursive($newDir, $last_changed); } elseif (isFileReadable($FQFN)) { // $FQFN is a filename and no directory $time = filemtime($FQFN); - //* DEBUG: */ print __FUNCTION__."(".__LINE__."):File: ".$d." found. (".($last_changed['time'] - $time).")
\n"; + //* DEBUG: */ print __FUNCTION__."(".__LINE__."):File: " . $d." found. (".($last_changed['time'] - $time).")
\n"; if ($last_changed['time'] < $time) { // This file is newer as the file before //* DEBUG: */ print __FUNCTION__."(".__LINE__.") - NEWER!
\n"; @@ -2444,25 +2471,40 @@ function getActualVersion ($type = 'Revision') { if (EXT_IS_ACTIVE('cache')) { // Check if REQUEST_GET('check_revision_data') is setted (switch for manually rewrite the .revision-File) - if (REQUEST_ISSET_GET('check_revision_data') && REQUEST_GET('check_revision_data') == 'yes') $new = true; - if (!isset($GLOBALS['cache_array']['revision'][$type]) - || count($GLOBALS['cache_array']['revision']) < 3 - || !$GLOBALS['cache_instance']->loadCacheFile('revision')) $new = true; + if (REQUEST_ISSET_GET('check_revision_data') && REQUEST_GET('check_revision_data') == 'yes') { + // Force rebuild by URL parameter + $new = true; + } elseif (( + !isset($GLOBALS['cache_array']['revision'][$type]) + ) || ( + count($GLOBALS['cache_array']['revision']) < 3 + ) || ( + !$GLOBALS['cache_instance']->loadCacheFile('revision') + )) { + // Out-dated cache + $new = true; + } // END - if // Is the cache file outdated/invalid? - if ($new === true){ - $GLOBALS['cache_instance']->destroyCacheFile(); // @TODO isn't it better to do $GLOBALS['cache_instance']->destroyCacheFile('revision')? + if ($new === true) { + // Reload the cache file + $GLOBALS['cache_instance']->loadCacheFile('revision'); + + // Destroy cache file + $GLOBALS['cache_instance']->destroyCacheFile(false, true); // @TODO shouldn't do the unset and the reloading $GLOBALS['cache_instance']->destroyCacheFile() Or a new methode like forceCacheReload('revision')? unset($GLOBALS['cache_array']['revision']); // Reload load_cach-revison.php loadInclude('inc/loader/load_cache-revision.php'); + + // Abort here + return; } // END - if // Return found value return $GLOBALS['cache_array']['revision'][$type][0]; - } else { // Old Version without ext-cache active (deprecated ?) @@ -2471,7 +2513,7 @@ function getActualVersion ($type = 'Revision') { // Check if REQUEST_GET('check_revision_data') is setted (switch for manually rewrite the .revision-File) if ((REQUEST_ISSET_GET('check_revision_data')) && (REQUEST_GET('check_revision_data') == 'yes')) { - // Has changed! + // Forced rebuild of .revision file $new = true; } else { // Check for revision file @@ -2517,13 +2559,19 @@ function getSearchFor () { // @TODO Please describe this function function getArrayFromActualVersion () { // Init variables - $next_dir = ''; // Directory to start with search + $next_dir = ''; + + // Directory to start with search $last_changed = array( 'path_name' => '', 'time' => 0 ); - $akt_vers = array(); // Init return array - $res = 0; // Init value for counting the founded keywords + + // Init return array + $akt_vers = array(); + + // Init value for counting the founded keywords + $res = 0; // Searches all Files and there date of the last modifikation and puts the newest File in $last_changed. searchDirsRecursive($next_dir, $last_changed); // @TODO small change to API to $last_changed = searchDirsRecursive($next_dir, $time); @@ -2537,7 +2585,7 @@ function getArrayFromActualVersion () { // This foreach loops the $searchFor-Tags (array('Revision', 'Date', 'Tag', 'Author') --> could easaly extended in the future) foreach ($searchFor as $search) { // Searches for "$search-tag:VALUE$" or "$search-tag::VALUE$"(the stylish keywordversion ;-)) in the lates modified file - $res += preg_match('@\$'.$search.'(:|::) (.*) \$@U', $last_file, $t); + $res += preg_match('@\$' . $search.'(:|::) (.*) \$@U', $last_file, $t); // This trimms the search-result and puts it in the $akt_vers-return array if (isset($t[2])) $akt_vers[$search] = trim($t[2]); } // END - foreach @@ -2588,7 +2636,7 @@ function debug_get_printable_backtrace () { if (!isset($trace['file'])) $trace['file'] = __FUNCTION__; if (!isset($trace['line'])) $trace['line'] = __LINE__; if (!isset($trace['args'])) $trace['args'] = array(); - $backtrace .= "
  • ".basename($trace['file']).":".$trace['line'].", ".$trace['function'].'('.count($trace['args']).")
  • \n"; + $backtrace .= "
  • ".basename($trace['file']).":" . $trace['line'].", " . $trace['function'].'('.count($trace['args']).")
  • \n"; } // END - foreach // Close it @@ -2614,9 +2662,9 @@ function debug_report_bug ($message = '') { } // END - if // Add output - $debug .= "Please report this bug at
    bugs.mxchange.org and include the logfile from inc/cache/debug.log in your report (you cannot attach files!):
    ";
    +	$debug .= "Please report this bug at bugs.mxchange.org and include the logfile from inc/cache/debug.log in your report (you can now attach files):
    ";
     	$debug .= debug_get_printable_backtrace();
    -	$debug .= "
    \nRequest-URI: ".$_SERVER['REQUEST_URI']."
    \n"; + $debug .= "
    \nRequest-URI: " . $_SERVER['REQUEST_URI']."
    \n"; $debug .= "Thank you for finding bugs."; // And abort here @@ -2626,55 +2674,56 @@ function debug_report_bug ($message = '') { // Generates a ***weak*** seed (taken from de.php.net/mt_srand) function generateSeed () { - list($usec, $sec) = explode(" ", microtime()); - return ((float)$sec + (float)$usec); + list($usec, $sec) = explode(' ', microtime()); + $microTime = (((float)$sec + (float)$usec)) * 100000; + return $microTime; } // Converts a message code to a human-readable message function convertCodeToMessage ($code) { - $msg = ''; + $message = ''; switch ($code) { - case getCode('LOGOUT_DONE') : $msg = getMessage('LOGOUT_DONE'); break; - case getCode('LOGOUT_FAILED') : $msg = "{--LOGOUT_FAILED--}"; break; - case getCode('DATA_INVALID') : $msg = getMessage('MAIL_DATA_INVALID'); break; - case getCode('POSSIBLE_INVALID') : $msg = getMessage('MAIL_POSSIBLE_INVALID'); break; - case getCode('ACCOUNT_LOCKED') : $msg = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break; - case getCode('USER_404') : $msg = getMessage('USER_NOT_FOUND'); break; - case getCode('STATS_404') : $msg = getMessage('MAIL_STATS_404'); break; - case getCode('ALREADY_CONFIRMED'): $msg = getMessage('MAIL_ALREADY_CONFIRMED'); break; + case getCode('LOGOUT_DONE') : $message = getMessage('LOGOUT_DONE'); break; + case getCode('LOGOUT_FAILED') : $message = "{--LOGOUT_FAILED--}"; break; + case getCode('DATA_INVALID') : $message = getMessage('MAIL_DATA_INVALID'); break; + case getCode('POSSIBLE_INVALID') : $message = getMessage('MAIL_POSSIBLE_INVALID'); break; + case getCode('ACCOUNT_LOCKED') : $message = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break; + case getCode('USER_404') : $message = getMessage('USER_NOT_FOUND'); break; + case getCode('STATS_404') : $message = getMessage('MAIL_STATS_404'); break; + case getCode('ALREADY_CONFIRMED'): $message = getMessage('MAIL_ALREADY_CONFIRMED'); break; case getCode('ERROR_MAILID'): if (EXT_IS_ACTIVE($ext, true)) { - $msg = getMessage('ERROR_CONFIRMING_MAIL'); + $message = getMessage('ERROR_CONFIRMING_MAIL'); } else { - $msg = sprintf(getMessage('EXTENSION_PROBLEM_NOT_INSTALLED'), 'mailid'); + $message = sprintf(getMessage('EXTENSION_PROBLEM_NOT_INSTALLED'), 'mailid'); } break; case getCode('EXTENSION_PROBLEM'): if (REQUEST_ISSET_GET('ext')) { - $msg = sprintf(getMessage('EXTENSION_PROBLEM_EXT_INACTIVE'), REQUEST_GET('ext')); + $message = generateExtensionInactiveNotInstalledMessage(REQUEST_GET('ext')); } else { - $msg = getMessage('EXTENSION_PROBLEM_UNSET_EXT'); + $message = getMessage('EXTENSION_PROBLEM_UNSET_EXT'); } break; - case getCode('COOKIES_DISABLED') : $msg = getMessage('LOGIN_NO_COOKIES'); break; - case getCode('BEG_SAME_AS_OWN') : $msg = getMessage('BEG_SAME_UID_AS_OWN'); break; - case getCode('LOGIN_FAILED') : $msg = getMessage('LOGIN_FAILED_GENERAL'); break; - case getCode('MODULE_MEM_ONLY') : $msg = sprintf(getMessage('MODULE_MEM_ONLY'), REQUEST_GET('mod')); break; + case getCode('COOKIES_DISABLED') : $message = getMessage('LOGIN_NO_COOKIES'); 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 = sprintf(getMessage('MODULE_MEM_ONLY'), REQUEST_GET('mod')); break; default: // Missing/invalid code - $msg = sprintf(getMessage('UNKNOWN_MAILID_CODE'), $code); + $message = sprintf(getMessage('UNKNOWN_MAILID_CODE'), $code); // Log it - DEBUG_LOG(__FUNCTION__, __LINE__, $msg); + DEBUG_LOG(__FUNCTION__, __LINE__, $message); break; } // END - switch // Return the message - return $msg; + return $message; } // Generate a "link" for the given admin id (aid) @@ -2692,7 +2741,7 @@ function generateAdminLink ($aid) { // Is the extension there? if (EXT_IS_ACTIVE('admins')) { // Admin found - $admin = "".$login.""; + $admin = "" . $login.""; } else { // Extension not found $admin = sprintf(getMessage('EXTENSION_PROBLEM_NOT_INSTALLED'), 'admins'); @@ -2708,21 +2757,21 @@ function generateAdminLink ($aid) { } // Compile characters which are allowed in URLs -function compileUriCode ($code, $simple=true) { +function compileUriCode ($code, $simple = true) { // Compile constants - if (!$simple) $code = str_replace("{--", '".', str_replace("--}", '."', $code)); + if (!$simple) $code = str_replace('{--', '".', str_replace('--}', '."', $code)); // Compile QUOT and other non-HTML codes $code = str_replace('{DOT}', '.', - str_replace('{SLASH}', '/', - str_replace('{QUOT}', "'", - str_replace('{DOLLAR}', '$', - str_replace('{OPEN_ANCHOR}', '(', - str_replace('{CLOSE_ANCHOR}', ')', - str_replace('{OPEN_SQR}', '[', - str_replace('{CLOSE_SQR}', ']', - str_replace('{PER}', '%', - $code + str_replace('{SLASH}', '/', + str_replace('{QUOT}', "'", + str_replace('{DOLLAR}', '$', + str_replace('{OPEN_ANCHOR}', '(', + str_replace('{CLOSE_ANCHOR}', ')', + str_replace('{OPEN_SQR}', '[', + str_replace('{CLOSE_SQR}', ']', + str_replace('{PER}', '%', + $code ))))))))); // Return compiled code @@ -2732,7 +2781,7 @@ function compileUriCode ($code, $simple=true) { // Function taken from user comments on www.php.net / function eregi() function isUrlValidSimple ($url) { // Prepare URL - $url = strip_tags(str_replace("\\", '', compileUriCode(urldecode($url)))); + $url = strip_tags(str_replace("\\", '', COMPILE_CODE(urldecode($url)))); // Allows http and https $http = "(http|https)+(:\/\/)"; @@ -2749,44 +2798,42 @@ function isUrlValidSimple ($url) { // ... and the string after and including question character $getstring1 = "([\?/]([[:alnum:]][-\._%[:alnum:]]*(=)?([-\@\._:%[:alnum:]])+)(&([[:alnum:]]([-_%[:alnum:]])*(=)?([-\@\[\._:%[:alnum:]])+(\])*))*)?"; // Pattern for URLs like http://url/dir/doc.html?var=value - $pattern['d1dpg1'] = $http.$domain1.$dir.$page.$getstring1; - $pattern['d2dpg1'] = $http.$domain2.$dir.$page.$getstring1; - $pattern['ipdpg1'] = $http.$ip.$dir.$page.$getstring1; + $pattern['d1dpg1'] = $http . $domain1 . $dir . $page . $getstring1; + $pattern['d2dpg1'] = $http . $domain2 . $dir . $page . $getstring1; + $pattern['ipdpg1'] = $http . $ip . $dir . $page . $getstring1; // Pattern for URLs like http://url/dir/?var=value - $pattern['d1dg1'] = $http.$domain1.$dir.'/'.$getstring1; - $pattern['d2dg1'] = $http.$domain2.$dir.'/'.$getstring1; - $pattern['ipdg1'] = $http.$ip.$dir.'/'.$getstring1; + $pattern['d1dg1'] = $http . $domain1 . $dir.'/' . $getstring1; + $pattern['d2dg1'] = $http . $domain2 . $dir.'/' . $getstring1; + $pattern['ipdg1'] = $http . $ip . $dir.'/' . $getstring1; // Pattern for URLs like http://url/dir/page.ext - $pattern['d1dp'] = $http.$domain1.$dir.$page; - $pattern['d1dp'] = $http.$domain2.$dir.$page; - $pattern['ipdp'] = $http.$ip.$dir.$page; + $pattern['d1dp'] = $http . $domain1 . $dir . $page; + $pattern['d1dp'] = $http . $domain2 . $dir . $page; + $pattern['ipdp'] = $http . $ip . $dir . $page; // Pattern for URLs like http://url/dir - $pattern['d1d'] = $http.$domain1.$dir; - $pattern['d2d'] = $http.$domain2.$dir; - $pattern['ipd'] = $http.$ip.$dir; + $pattern['d1d'] = $http . $domain1 . $dir; + $pattern['d2d'] = $http . $domain2 . $dir; + $pattern['ipd'] = $http . $ip . $dir; // Pattern for URLs like http://url/?var=value - $pattern['d1g1'] = $http.$domain1.'/'.$getstring1; - $pattern['d2g1'] = $http.$domain2.'/'.$getstring1; - $pattern['ipg1'] = $http.$ip.'/'.$getstring1; + $pattern['d1g1'] = $http . $domain1 . '/' . $getstring1; + $pattern['d2g1'] = $http . $domain2 . '/' . $getstring1; + $pattern['ipg1'] = $http . $ip . '/' . $getstring1; // Pattern for URLs like http://url?var=value - $pattern['d1g12'] = $http.$domain1.$getstring1; - $pattern['d2g12'] = $http.$domain2.$getstring1; - $pattern['ipg12'] = $http.$ip.$getstring1; + $pattern['d1g12'] = $http . $domain1 . $getstring1; + $pattern['d2g12'] = $http . $domain2 . $getstring1; + $pattern['ipg12'] = $http . $ip . $getstring1; // Test all patterns $reg = false; - foreach ($pattern as $key=>$pat) { + foreach ($pattern as $key => $pat) { // Debug regex? - if (defined('DEBUG_REGEX')) { - $pat = str_replace("[:alnum:]", "0-9a-zA-Z", $pat); - $pat = str_replace("[:alpha:]", "a-zA-Z", $pat); - $pat = str_replace("[:digit:]", "0-9", $pat); - $pat = str_replace('.', "\.", $pat); - $pat = str_replace("@", "\@", $pat); - echo $key."= ".$pat."
    "; - } + if (isDebugRegExpressionEnabled()) { + // @TODO Are these convertions still required? + $pat = str_replace('.', "\.", $pat); + $pat = str_replace('@', "\@", $pat); + echo $key."= " . $pat . "
    "; + } // END - if // Check if expression matches - $reg = ($reg || preg_match(("^".$pat."^"), $url)); + $reg = ($reg || preg_match(('^' . $pat.'^'), $url)); // Does it match? if ($reg === true) break; @@ -2811,12 +2858,12 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) { $tmp = $FQFN . '.tmp'; // Open the source file - $fp = fopen($FQFN, 'r') or OUTPUT_HTML('READ: ' . $FQFN . "
    \n"); + $fp = fopen($FQFN, 'r') or OUTPUT_HTML('READ: ' . $FQFN . '
    '); // Is the resource valid? if (is_resource($fp)) { // Open temporary file - $fp_tmp = fopen($tmp, 'w') or OUTPUT_HTML('WRITE: ' . $tmp . "
    \n"); + $fp_tmp = fopen($tmp, 'w') or OUTPUT_HTML('WRITE: ' . $tmp . '
    '); // Is the resource again valid? if (is_resource($fp_tmp)) { @@ -2833,7 +2880,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) { } else { $next++; } - } + } // END - if // Write to temp file fputs($fp_tmp, $line); @@ -2874,8 +2921,8 @@ function sendAdminNotification ($subject, $templateName, $content=array(), $uid SEND_ADMIN_EMAILS_PRO($subject, $templateName, $content, $uid); } else { // Send out out-dated way - $msg = LOAD_EMAIL_TEMPLATE($templateName, $content, $uid); - SEND_ADMIN_EMAILS($subject, $msg); + $message = LOAD_EMAIL_TEMPLATE($templateName, $content, $uid); + SEND_ADMIN_EMAILS($subject, $message); } } @@ -2886,9 +2933,9 @@ function DEBUG_LOG ($funcFile, $line, $message, $force=true) { // Remove CRLF $message = str_replace("\r", '', str_replace("\n", '', $message)); - // Log this message away - $fp = fopen(constant('PATH')."inc/cache/debug.log", 'a') or app_die(__FUNCTION__, __LINE__, "Cannot write logfile debug.log!"); - fwrite($fp, date("d.m.Y|H:i:s", time())."|".$GLOBALS['module']."|".basename($funcFile)."|".$line."|".strip_tags($message)."\n"); + // Log this message away, we better don't call app_die() here to prevent an endless loop + $fp = fopen(constant('PATH') . 'inc/cache/debug.log', 'a') or die(__FUNCTION__.'['.__LINE__.']: Cannot write logfile debug.log!'); + fwrite($fp, date('d.m.Y|H:i:s', time()) . '|' . getModule() . '|' . basename($funcFile) . '|' . $line . '|' . strip_tags($message) . "\n"); fclose($fp); } // END - if } @@ -2898,7 +2945,7 @@ function runResetIncludes () { // Is the reset set or old sql_patches? if ((!isResetModeEnabled()) || (EXT_VERSION_IS_OLDER('sql_patches', '0.4.5'))) { // Then abort here - DEBUG_LOG(__FUNCTION__, __LINE__, "Cannot run reset! Please report this bug. Thanks"); + DEBUG_LOG(__FUNCTION__, __LINE__, 'Cannot run reset! Please report this bug. Thanks'); } // END - if // Get more daily reset scripts @@ -2990,7 +3037,7 @@ function convertSelectionsToTimestamp (&$POST, &$DATA, &$id, &$skip) { // Remove data from array foreach (array('ye', 'mo', 'we', 'da', 'ho', 'mi', 'se') as $rem) { - unset($POST[$test.'_'.$rem]); + unset($POST[$test.'_' . $rem]); } // END - foreach // Skip adding @@ -3034,14 +3081,14 @@ function HANDLE_LOGIN_FAILTURES ($accessLevel) { $OUT = ''; // Is the session data set? - if ((isSessionVariableSet('mxchange_'.$accessLevel.'_failures')) && (isSessionVariableSet('mxchange_'.$accessLevel.'_last_fail'))) { + if ((isSessionVariableSet('mxchange_' . $accessLevel.'_failures')) && (isSessionVariableSet('mxchange_' . $accessLevel.'_last_fail'))) { // Ignore zero values - if (getSession('mxchange_'.$accessLevel.'_failures') > 0) { + if (getSession('mxchange_' . $accessLevel.'_failures') > 0) { // Non-guest has login failures found, get both data and prepare it for template //* DEBUG: */ print __FUNCTION__."(".__LINE__."):accessLevel={$accessLevel}
    \n"; $content = array( - 'login_failures' => getSession('mxchange_'.$accessLevel.'_failures'), - 'last_failure' => generateDateTime(getSession('mxchange_'.$accessLevel.'_last_fail'), '2') + 'login_failures' => getSession('mxchange_' . $accessLevel.'_failures'), + 'last_failure' => generateDateTime(getSession('mxchange_' . $accessLevel.'_last_fail'), '2') ); // Load template @@ -3049,8 +3096,8 @@ function HANDLE_LOGIN_FAILTURES ($accessLevel) { } // END - if // Reset session data - setSession('mxchange_'.$accessLevel.'_failures', ''); - setSession('mxchange_'.$accessLevel.'_last_fail', ''); + setSession('mxchange_' . $accessLevel.'_failures', ''); + setSession('mxchange_' . $accessLevel.'_last_fail', ''); } // END - if // Return rendered content @@ -3093,7 +3140,7 @@ function cachePurgeAdminMenu ($id=0, $action = '', $what = '', $str = '') { return false; } elseif (!isCacheInstanceValid()) { // No cache instance! - DEBUG_LOG(__FUNCTION__, __LINE__, " No cache instance found."); + DEBUG_LOG(__FUNCTION__, __LINE__, 'No cache instance found.'); return false; } elseif ((!isConfigEntrySet('cache_admin_menu')) || (getConfig('cache_admin_menu') != 'Y')) { // Caching disabled (currently experiemental!) @@ -3159,31 +3206,31 @@ function addNewBonusMail ($data, $mode = '', $output=true) { LOAD_TEMPLATE('admin_settings_saved', false, getMessage('ADMIN_MORE_SELECTED')); } else { // Debug log - DEBUG_LOG(__FUNCTION__, __LINE__, " cat={$data['cat']},receiver={$data['receiver']},data=".base64_encode(serialize($data))." More selected, than available!"); + DEBUG_LOG(__FUNCTION__, __LINE__, "cat={$data['cat']},receiver={$data['receiver']},data=".base64_encode(serialize($data))." More selected, than available!"); } } // Determines referal id and sets it function DETERMINE_REFID () { // Check if refid is set - if ((!empty($_GET['user'])) && (basename($_SERVER['PHP_SELF']) == "click.php")) { + if ((REQUEST_ISSET_GET('user')) && (basename($_SERVER['PHP_SELF']) == 'click.php')) { // The variable user comes from the click-counter script click.php and we only accept this here - $GLOBALS['refid'] = bigintval($_GET['user']); - } elseif (!empty($_POST['refid'])) { + $GLOBALS['refid'] = bigintval(REQUEST_GET('user')); + } elseif (REQUEST_ISSET_POST('refid')) { // Get referal id from variable refid (so I hope this makes my script more compatible to other scripts) - $GLOBALS['refid'] = SQL_ESCAPE(strip_tags($_POST['refid'])); - } elseif (!empty($_GET['refid'])) { + $GLOBALS['refid'] = strip_tags(REQUEST_POST('refid')); + } elseif (REQUEST_ISSET_GET('refid')) { // Get referal id from variable refid (so I hope this makes my script more compatible to other scripts) - $GLOBALS['refid'] = SQL_ESCAPE(strip_tags($_GET['refid'])); - } elseif (!empty($_GET['ref'])) { + $GLOBALS['refid'] = strip_tags(REQUEST_GET('refid')); + } elseif (REQUEST_ISSET_GET('ref')) { // Set refid=ref (the referal link uses such variable) - $GLOBALS['refid'] = SQL_ESCAPE(strip_tags($_GET['ref'])); + $GLOBALS['refid'] = strip_tags(REQUEST_GET('ref')); } elseif ((isSessionVariableSet('refid')) && (getSession('refid') != 0)) { // Set session refid als global $GLOBALS['refid'] = bigintval(getSession('refid')); } elseif ((GET_EXT_VERSION('sql_patches') != '') && (getConfig('def_refid') > 0)) { // Set default refid as refid in URL - $GLOBALS['refid'] = getConfig(('def_refid')); + $GLOBALS['refid'] = getConfig('def_refid'); } elseif ((GET_EXT_VERSION('user') >= '0.3.4') && (getConfig('select_user_zero_refid')) == 'Y') { // Select a random user which has confirmed enougth mails $GLOBALS['refid'] = determineRandomReferalId(); @@ -3257,17 +3304,17 @@ function isUserIdSet () { // Handle message codes from URL function handleCodeMessage () { if (REQUEST_ISSET_GET('msg')) { - // Default extension is "unknown" + // Default extension is 'unknown' $ext = 'unknown'; // Is extension given? if (REQUEST_ISSET_GET('ext')) $ext = REQUEST_GET('ext'); // Convert the 'msg' parameter from URL to a human-readable message - $msg = convertCodeToMessage(REQUEST_GET('msg')); + $message = convertCodeToMessage(REQUEST_GET('msg')); // Load message template - LOAD_TEMPLATE('message', false, $msg); + LOAD_TEMPLATE('message', false, $message); } // END - if } @@ -3293,6 +3340,181 @@ function isExtraTitleSet () { return ((isset($GLOBALS['extra_title'])) && (!empty($GLOBALS['extra_title']))); } +// Generates a 'extension foo inactive' message +function generateExtensionInactiveMessage ($ext_name) { + // Is the extension empty? + if (empty($ext_name)) { + // This should not happen + trigger_error(__FUNCTION__ . ': Parameter ext is empty. This should not happen.'); + } // END - if + + // Default message + $message = sprintf(getMessage('EXTENSION_PROBLEM_EXT_INACTIVE'), $ext_name); + + // Is an admin logged in? + if (IS_ADMIN()) { + // Then output admin message + $message = sprintf(getMessage('ADMIN_EXTENSION_PROBLEM_EXT_INACTIVE'), $ext_name); + } // END - if + + // Return prepared message + return $message; +} + +// Generates a 'extension foo not installed' message +function generateExtensionNotInstalledMessage ($ext_name) { + // Is the extension empty? + if (empty($ext_name)) { + // This should not happen + trigger_error(__FUNCTION__ . ': Parameter ext is empty. This should not happen.'); + } // END - if + + // Default message + $message = sprintf(getMessage('EXTENSION_PROBLEM_EXT_NOT_INSTALLED'), $ext_name); + + // Is an admin logged in? + if (IS_ADMIN()) { + // Then output admin message + $message = sprintf(getMessage('ADMIN_EXTENSION_PROBLEM_EXT_NOT_INSTALLED'), $ext_name); + } // END - if + + // Return prepared message + return $message; +} + +// Generates a message depending on if the extension is not installed or not +// just activated +function generateExtensionInactiveNotInstalledMessage ($ext_name) { + // Init message + $message = ''; + + // Is the extension not installed or just deactivated? + switch (isExtensionInstalled($ext_name)) { + case true; // Deactivated! + $message = generateExtensionInactiveMessage($ext_name); + break; + + case false; // Not installed! + $message = generateExtensionNotInstalledMessage($ext_name); + break; + + default: // Should not happen! + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid state of extension %s detected.", $ext_name)); + $message = sprintf("Invalid state of extension %s detected.", $ext_name); + break; + } // END - switch + + // Return the message + return $message; +} + +// Reads a directory recursively by default and searches for files not matching +// an exclusion pattern. You can now keep the exclusion pattern empty for reading +// a whole directory. +function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $addBaseDir = true, $excludeArray = array(), $extension = '.php', $excludePattern = '@(\.|\.\.)$@', $recursive = true) { + // Add default entries we should exclude + $excludeArray[] = '.'; + $excludeArray[] = '..'; + $excludeArray[] = '.svn'; + $excludeArray[] = '.htaccess'; + + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "baseDir={$baseDir},prefix={$prefix} - Entered!"); + // Init includes + $files = array(); + + // Open directory + $dirPointer = opendir(constant('PATH') . $baseDir) or app_die(__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: */ print 'excluded=' . $baseFile . '
    '; + continue; + } // END - if + + // Construct include filename and FQFN + $fileName = $baseDir . '/' . $baseFile; + $FQFN = constant('PATH') . $fileName; + + // Remove double slashes + $FQFN = str_replace('//', '/', $FQFN); + + // Check if the base filename 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: */ print 'baseDir:' . $baseDir . '
    '; + //* DEBUG: */ print 'baseFile:' . $baseFile . '
    '; + //* DEBUG: */ print 'FQFN:' . $FQFN . '
    '; + + // Exclude this one + continue; + } // END - if + + // Skip also files with non-matching prefix genericly + if (($recursive === true) && (isDirectory($FQFN))) { + // Is a redirectory so read it as well + $files = merge_array($files, getArrayFromDirectory ($baseDir . $baseFile . '/', $prefix, $fileIncludeDirs, $addBaseDir, $excludeArray, $extension, $excludePattern, $recursive)); + + // And skip further processing + continue; + } elseif (substr($baseFile, 0, strlen($prefix)) != $prefix) { + // Skip this file + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "Invalid prefix in file " . $baseFile . ", prefix=" . $prefix); + continue; + } elseif (!isFileReadable($FQFN)) { + // Not readable so skip it + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "File " . $FQFN . " is not readable!"); + continue; + } + + // Is the file a PHP script or other? + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "baseDir={$baseDir},prefix={$prefix},baseFile={$baseFile}"); + if ((substr($baseFile, -4, 4) == '.php') || (($fileIncludeDirs === true) && (isDirectory($FQFN)))) { + // Is this a valid include file? + if ($extension == '.php') { + // Remove both for extension name + $extName = substr($baseFile, strlen($prefix), -4); + + // Try to find it + $extId = GET_EXT_ID($extName); + + // Is the extension valid and active? + if (($extId > 0) && (EXT_IS_ACTIVE($extName))) { + // Then add this file + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, 'Extension entry ' . $baseFile . ' added.'); + $files[] = $fileName; + } elseif ($extId == 0) { + // Add non-extension files as well + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, 'Regular entry ' . $baseFile . ' added.'); + if ($addBaseDir === true) { + $files[] = $fileName; + } else { + $files[] = $baseFile; + } + } + } 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.'); + } + } else { + // Other, generic file found + $files[] = $fileName; + } + } // END - while + + // Close directory + closedir($dirPointer); + + // Sort array + asort($files); + + // Return array with include files + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, '- Left!'); + return $files; +} + ////////////////////////////////////////////////// // AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS // //////////////////////////////////////////////////