X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ffunctions.php;h=4b25ba977704ed82f709b48713f0e574d5c634f6;hb=ebb5d93c1d0234fff9cf3c46690904174b3fd15d;hp=944d0281ee1c328c72142c28e21758554711eb7c;hpb=2e04164985cae54359663633a8796567d71082a7;p=mailer.git
diff --git a/inc/functions.php b/inc/functions.php
index 944d0281ee..4b25ba9777 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -6,19 +6,17 @@
* -------------------------------------------------------------------- *
* File : functions.php *
* -------------------------------------------------------------------- *
- * Short description : Many non-MySQL functions (also file access) *
+ * Short description : Many non-database functions (also file access) *
* -------------------------------------------------------------------- *
- * Kurzbeschreibung : Viele Nicht-MySQL-Funktionen (auch Dateizugriff) *
+ * Kurzbeschreibung : Viele Nicht-Datenbank-Funktionen *
* -------------------------------------------------------------------- *
* $Revision:: $ *
* $Date:: $ *
* $Tag:: 0.2.1-FINAL $ *
* $Author:: $ *
- * Needs to be in all Files and every File needs "svn propset *
- * svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
- * Copyright (c) 2009, 2010 by Mailer Developer Team *
+ * Copyright (c) 2009 - 2011 by Mailer Developer Team *
* For more information visit: http://www.mxchange.org *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -104,10 +102,7 @@ function getTotalFatalErrors () {
// Send mail out to an email address
function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '') {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail},SUBJECT={$subject}
");
-
- // Compile subject line (for POINTS constant etc.)
- eval('$subject = decodeEntities("' . compileRawCode(escapeQuotes($subject)) . '");');
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'toEmail=' . $toEmail . ',subject=' . $subject . ',isHtml=' . $isHtml);
// Set from header
if ((!isInStringIgnoreCase('@', $toEmail)) && ($toEmail > 0)) {
@@ -134,39 +129,47 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '
// Check for PHPMailer or debug-mode
if ((!checkPhpMailerUsage()) || (isDebugModeEnabled())) {
+ // Prefix is '' for text mails
+ $prefix = '';
+
+ // Is HTML?
+ if ($isHtml == 'Y') {
+ // Set prefix
+ $prefix = 'html_';
+ } // END - if
+
// Not in PHPMailer-Mode
if (empty($mailHeader)) {
// Load email header template
- $mailHeader = loadEmailTemplate('header');
+ $mailHeader = loadEmailTemplate($prefix . 'header');
} else {
// Append header
- $mailHeader .= loadEmailTemplate('header');
+ $mailHeader .= loadEmailTemplate($prefix . 'header');
}
} // END - if
// Fix HTML parameter (default is no!)
- if (empty($isHtml)) $isHtml = 'N';
+ if (empty($isHtml)) {
+ $isHtml = 'N';
+ } // END - if
// Debug mode enabled?
if (isDebugModeEnabled()) {
// In debug mode we want to display the mail instead of sending it away so we can debug this part
outputHtml('
-Headers : ' . encodeEntities(utf8_decode(trim($mailHeader))) . ' -To : ' . encodeEntities(utf8_decode($toEmail)) . ' -Subject : ' . encodeEntities(utf8_decode($subject)) . ' -Message : ' . encodeEntities(utf8_decode($message)) . ' +Headers : ' . htmlentities(utf8_decode(trim($mailHeader))) . ' +To : ' . htmlentities(utf8_decode($toEmail)) . ' +Subject : ' . htmlentities(utf8_decode($subject)) . ' +Message : ' . htmlentities(utf8_decode($message)) . ''); // This is always fine return true; - } elseif (($isHtml == 'Y') && (isExtensionActive('html_mail'))) { - // Send mail as HTML away - return sendHtmlEmail($toEmail, $subject, $message, $mailHeader); } elseif (!empty($toEmail)) { // Send Mail away return sendRawEmail($toEmail, $subject, $message, $mailHeader); } elseif ($isHtml != 'Y') { - // Problem found! + // Problem detected while sending a mail, forward it to admin return sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader); } @@ -182,12 +185,17 @@ function checkPhpMailerUsage() { } // Send out a raw email with PHPMailer class or legacy mail() command -function sendRawEmail ($toEmail, $subject, $message, $from) { - // Just compile all again, to put out all configs, etc. - eval('$toEmail = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($toEmail)), false) . '");'); - eval('$subject = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($subject)), false) . '");'); - eval('$message = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($message)), false) . '");'); - eval('$from = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($from)) , false) . '");'); +function sendRawEmail ($toEmail, $subject, $message, $headers) { + // Just compile all to put out all configs, etc. + $eval = '$toEmail = decodeEntities("' . escapeQuotes(doFinalCompilation(compileRawCode($toEmail), false)) . '"); '; + $eval .= '$subject = decodeEntities("' . escapeQuotes(doFinalCompilation(compileRawCode($subject), false)) . '"); '; + $eval .= '$headers = decodeEntities("' . escapeQuotes(doFinalCompilation(compileRawCode($headers), false)) . '"); '; + + // Do not decode entities in the message because we also send HTML mails through this function + $eval .= '$message = "' . escapeQuotes(doFinalCompilation(compileRawCode($message), false)) . '";'; + + // Run the final eval() command + eval($eval); // Shall we use PHPMailer class or legacy mode? if (checkPhpMailerUsage()) { @@ -210,10 +218,10 @@ function sendRawEmail ($toEmail, $subject, $message, $from) { $mail->Port = 25; $mail->Username = getConfig('SMTP_USER'); $mail->Password = getConfig('SMTP_PASSWORD'); - if (empty($from)) { + if (empty($headers)) { $mail->From = getConfig('WEBMASTER'); } else { - $mail->From = $from; + $mail->From = $headers; } $mail->FromName = getMainTitle(); $mail->Subject = $subject; @@ -225,10 +233,12 @@ function sendRawEmail ($toEmail, $subject, $message, $from) { } else { $mail->Body = decodeEntities($message); } + $mail->AddAddress($toEmail, ''); $mail->AddReplyTo(getConfig('WEBMASTER'), getMainTitle()); $mail->AddCustomHeader('Errors-To:' . getConfig('WEBMASTER')); $mail->AddCustomHeader('X-Loop:' . getConfig('WEBMASTER')); + $mail->AddCustomHeader('Bounces-To:' . getConfig('WEBMASTER')); $mail->Send(); // Has an error occured? @@ -244,14 +254,14 @@ function sendRawEmail ($toEmail, $subject, $message, $from) { } } else { // Use legacy mail() command - return mail($toEmail, $subject, decodeEntities($message), $from); + return mail($toEmail, $subject, decodeEntities($message), $headers); } } // Generate a password in a specified length or use default password length function generatePassword ($length = '0') { // Auto-fix invalid length of zero - if ($length == '0') $length = getConfig('pass_len'); + if ($length == '0') $length = getPassLen(); // 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,-,+,_,/,.'); @@ -349,12 +359,6 @@ function translateYesNo ($yn) { return $GLOBALS[__FUNCTION__][$yn]; } -// Translates the "pool type" into human-readable -function translatePoolType ($type) { - // Return "translation" - return sprintf("{--POOL_TYPE_%s--}", $type); -} - // Translates the american decimal dot into a german comma function translateComma ($dotted, $cut = true, $max = '0') { // First, cast all to double, due to PHP changes @@ -423,6 +427,9 @@ function translateGender ($gender) { // "Translates" the user status function translateUserStatus ($status) { + // Default status is unknown if something goes through + $ret = '{--ACCOUNT_STATUS_UNKNOWN--}'; + // Generate message depending on status switch ($status) { case 'UNCONFIRMED': @@ -448,6 +455,9 @@ function translateUserStatus ($status) { // "Translates" 'visible' and 'locked' to a CSS class function translateMenuVisibleLocked ($content, $prefix = '') { + // Default is 'menu_unknown' + $content['visible_css'] = $prefix . 'menu_unknown'; + // Translate 'visible' and keep an eye on the prefix switch ($content['visible']) { // Should be visible @@ -554,7 +564,7 @@ function redirectToUrl ($URL, $allowSpider = true) { } // END - if // Three different ways to debug... - //* DEBUG: */ debug_report_bug(__FUNCTION__, __LINE__, sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL)); + //* DEBUG: */ debug_report_bug(__FUNCTION__, __LINE__, 'URL=' . $URL); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'URL=' . $URL); //* DEBUG: */ die($URL); @@ -575,9 +585,6 @@ function redirectToUrl ($URL, $allowSpider = true) { // Clear own output buffer $GLOBALS['output'] = ''; - // Set header - setHttpStatus('302 Found'); - // Load URL when headers are not sent sendRawRedirect(doFinalCompilation(str_replace('&', '&', $URL), false)); } else { @@ -644,25 +651,33 @@ function array_pk_sort (&$array, $a_sort, $primary_key = '0', $order = -1, $nums // -// Deprecated : $length +// Deprecated : $length (still has one reference in this function) // Optional : $DATA // function generateRandomCode ($length, $code, $userid, $DATA = '') { // Build server string - $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRemoteAddr(); + $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRealIpAddress() . getEncryptSeperator() . detectRemoteAddr(); // Build key string $keys = getConfig('SITE_KEY') . getEncryptSeperator() . getConfig('DATE_KEY'); - if (isConfigEntrySet('secret_key')) $keys .= getEncryptSeperator().getSecretKey(); - if (isConfigEntrySet('file_hash')) $keys .= getEncryptSeperator().getFileHash(); + if (isConfigEntrySet('secret_key')) { + $keys .= getEncryptSeperator().getSecretKey(); + } // END - if + if (isConfigEntrySet('file_hash')) { + $keys .= getEncryptSeperator().getFileHash(); + } // END - if $keys .= getEncryptSeperator() . getDateFromPatchTime(); - if (isConfigEntrySet('master_salt')) $keys .= getEncryptSeperator().getMasterSalt(); + if (isConfigEntrySet('master_salt')) { + $keys .= getEncryptSeperator().getMasterSalt(); + } // END - if // Build string from misc data $data = $code . getEncryptSeperator() . $userid . getEncryptSeperator() . $DATA; // Add more additional data - if (isSessionVariableSet('u_hash')) $data .= getEncryptSeperator() . getSession('u_hash'); + if (isSessionVariableSet('u_hash')) { + $data .= getEncryptSeperator() . getSession('u_hash'); + } // END - if // Add referal id, language, theme and userid $data .= getEncryptSeperator() . determineReferalId(); @@ -688,7 +703,7 @@ function generateRandomCode ($length, $code, $userid, $DATA = '') { } // At least 10 numbers shall be secure enought! - $len = getConfig('code_length'); + $len = getCodeLength(); if ($len == '0') $len = $length; if ($len == '0') $len = 10; @@ -705,12 +720,15 @@ function bigintval ($num, $castValue = true, $abortOnMismatch = true) { $ret = preg_replace('/[^0123456789]/', '', $num); // Shall we cast? - if ($castValue === true) $ret = (double)$ret; + if ($castValue === true) { + // Cast to biggest numeric type + $ret = (double) $ret; + } // END - if // Has the whole value changed? - if (('' . $ret . '' != '' . $num . '') && ($abortOnMismatch === true)) { + if (('' . $ret . '' != '' . $num . '') && ($abortOnMismatch === true) && (!is_null($num))) { // Log the values - debug_report_bug(__FUNCTION__, __LINE__, 'Problem with number found. ret=' . $ret . ', num='. $num); + debug_report_bug(__FUNCTION__, __LINE__, 'Problem with number found. ret[' . gettype($ret) . ']=' . $ret . ', num[' . gettype($num) . ']='. $num); } // END - if // Return result @@ -728,7 +746,7 @@ function createTimestampFromSelections ($prefix, $postData) { $M1 = getMonth(); // If so and if current time is before 02/29 and estimated time is after 02/29 then add 86400 seconds (one day) - if ((floor($TEST) == $TEST) && ($M1 == '02') && ($postData[$prefix . '_mo'] > '02')) $SWITCH = getConfig('ONE_DAY'); + if ((floor($TEST) == $TEST) && ($M1 == '02') && ($postData[$prefix . '_mo'] > '02')) $SWITCH = getOneDay(); // First add years... $ret += $postData[$prefix . '_ye'] * (31536000 + $SWITCH); @@ -760,10 +778,10 @@ function createFancyTime ($stamp) { // Get data array with years/months/weeks/days/... $data = createTimeSelections($stamp, '', '', '', true); $ret = ''; - foreach($data as $k => $v) { + foreach ($data as $k => $v) { if ($v > 0) { // Value is greater than 0 "eval" data to return string - eval('$ret .= ", ".$v." {--_' . strtoupper($k) . '--}";'); + $ret .= ', ' . $v . ' {--_' . strtoupper($k) . '--}'; break; } // END - if } // END - foreach @@ -824,20 +842,23 @@ function sendGetRequest ($script, $data = array()) { // Add data $body = http_build_query($data, '', '&'); - // Do we have a question-mark in the script? - if (strpos($script, '?') === false) { - // No, so first char must be question mark - $body = '?' . $body; - } else { - // Ok, add & - $body = '&' . $body; - } + // There should be data, else we don't need to extend $script with $body + if (empty($body)) { + // Do we have a question-mark in the script? + if (strpos($script, '?') === false) { + // No, so first char must be question mark + $body = '?' . $body; + } else { + // Ok, add & + $body = '&' . $body; + } - // Add script data - $script .= $body; + // Add script data + $script .= $body; - // Remove trailed & to make it more conform - if (substr($script, -1, 1) == '&') $script = substr($script, 0, -1); + // Remove trailed & to make it more conform + if (substr($script, -1, 1) == '&') $script = substr($script, 0, -1); + } // END - if // Generate GET request header $request = 'GET /' . trim($script) . ' HTTP/1.1' . getConfig('HTTP_EOL'); @@ -1152,7 +1173,7 @@ function generateHash ($plainText, $salt = '', $hash = true) { // When the salt is empty build a new one, else use the first x configured characters as the salt if (empty($salt)) { // Build server string for more entropy - $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRemoteAddr(); + $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRealIpAddress() . getEncryptSeperator() . detectRemoteAddr(); // Build key string $keys = getConfig('SITE_KEY') . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromPatchTime() . getEncryptSeperator() . getMasterSalt(); @@ -1264,11 +1285,11 @@ function genScrambleString ($len) { // First we need to setup randomized numbers from 0 to 31 for ($idx = 0; $idx < $len; $idx++) { // Generate number - $rand = mt_rand(0, ($len -1)); + $rand = mt_rand(0, ($len - 1)); // Check for it by creating more numbers while (array_key_exists($rand, $scrambleNumbers)) { - $rand = mt_rand(0, ($len -1)); + $rand = mt_rand(0, ($len - 1)); } // END - while // Add number @@ -1398,7 +1419,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 .= '
'.print_r($content, true).''); + } // END - if + + // Free result + SQL_FREERESULT($result); + } // END - if + + // Return generated HTML code + return $OUT; +} + +//----------------------------------------------------------------------------- +// Automatically re-created functions, all taken from user comments on www.php.net +//----------------------------------------------------------------------------- // if (!function_exists('html_entity_decode')) { // Taken from documentation on www.php.net @@ -2403,7 +2508,7 @@ if (!function_exists('http_build_query')) { // Taken from documentation on www.php.net, credits to Marco K. (Germany) and some light mods by R.Haeder function http_build_query($data, $prefix = '', $sep = '', $key = '') { $ret = array(); - foreach ((array)$data as $k => $v) { + foreach ((array) $data as $k => $v) { if (is_int($k) && $prefix != null) { $k = urlencode($prefix . $k); } // END - if