X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ffunctions.php;h=bf192a5fb7917c2681401374ed201350e49e8383;hb=ac44d82d5d014d6eb388813e51c34497214d76dd;hp=bccca8bca0c4d10721abab9fc45fae73727d7bdd;hpb=6bb119cb426a2ab3998a5c3dfe250d748f786a1c;p=mailer.git
diff --git a/inc/functions.php b/inc/functions.php
index bccca8bca0..bf192a5fb7 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 *
@@ -106,9 +104,6 @@ function getTotalFatalErrors () {
function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '') {
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'toEmail=' . $toEmail . ',subject=' . $subject . ',isHtml=' . $isHtml);
- // Compile subject line (for POINTS constant etc.)
- eval('$subject = decodeEntities("' . compileRawCode(escapeQuotes($subject)) . '");');
-
// Set from header
if ((!isInStringIgnoreCase('@', $toEmail)) && ($toEmail > 0)) {
// Value detected, is the message extension installed?
@@ -123,29 +118,40 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '
$toEmail = getUserData('email');
} else {
// Set webmaster
- $toEmail = getConfig('WEBMASTER');
+ $toEmail = getWebmaster();
}
}
} elseif ($toEmail == '0') {
// Is the webmaster!
- $toEmail = getConfig('WEBMASTER');
+ $toEmail = getWebmaster();
}
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail}
");
// 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()) {
@@ -159,15 +165,12 @@ 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!
- return sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader);
+ // Problem detected while sending a mail, forward it to admin
+ return sendRawEmail(getWebmaster(), '[PROBLEM:]' . $subject, $message, $mailHeader);
}
// Why did we end up here? This should not happen
@@ -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)) {
- $mail->From = getConfig('WEBMASTER');
+ if (empty($headers)) {
+ $mail->From = getWebmaster();
} 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->AddReplyTo(getWebmaster(), getMainTitle());
+ $mail->AddCustomHeader('Errors-To:' . getWebmaster());
+ $mail->AddCustomHeader('X-Loop:' . getWebmaster());
+ $mail->AddCustomHeader('Bounces-To:' . getWebmaster());
$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();
+ $keys = getSiteKey() . getEncryptSeperator() . getDateKey();
+ 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();
@@ -675,22 +690,26 @@ function generateRandomCode ($length, $code, $userid, $DATA = '') {
if (isConfigEntrySet('master_salt')) {
// Generate hash with master salt from modula of number with the prime number and other data
- $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a, getMasterSalt());
+ $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a, getMasterSalt());
// Create number from hash
- $rcode = hexdec(substr($saltedHash, strlen(getMasterSalt()), 9)) / abs(getConfig('rand_no') - $a + sqrt(getConfig('_ADD'))) / pi();
+ $rcode = hexdec(substr($saltedHash, strlen(getMasterSalt()), 9)) / abs(getRandNo() - $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 % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a, substr(sha1(getConfig('SITE_KEY')), 0, getSaltLength()));
+ $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a, substr(sha1(getSiteKey()), 0, getSaltLength()));
// Create number from hash
- $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(getConfig('rand_no') - $a + sqrt(getConfig('_ADD'))) / pi();
+ $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(getRandNo() - $a + sqrt(getConfig('_ADD'))) / pi();
}
// At least 10 numbers shall be secure enought!
- $len = getConfig('code_length');
- if ($len == '0') $len = $length;
- if ($len == '0') $len = 10;
+ $len = getCodeLength();
+ if ($len == '0') {
+ $len = $length;
+ } // END - if
+ if ($len == '0') {
+ $len = 10;
+ } // END - if
// Cut off requested counts of number
$return = substr(str_replace('.', '', $rcode), 0, $len);
@@ -705,12 +724,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 +750,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 +782,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 +846,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');
@@ -926,10 +951,10 @@ function sendRawRequest ($host, $request) {
//* DEBUG: */ die('SCRIPT=' . $script);
if ($useProxy === true) {
// Resolve hostname into IP address
- $ip = $resolver->resolveHostname(compileRawCode(getConfig('proxy_host')));
+ $ip = $resolver->resolveHostname(compileRawCode(getProxyHost()));
// Connect to host through proxy connection
- $fp = fsockopen($ip, bigintval(getConfig('proxy_port')), $errno, $errdesc, 30);
+ $fp = fsockopen($ip, bigintval(getProxyPort()), $errno, $errdesc, 30);
} else {
// Resolve hostname into IP address
$ip = $resolver->resolveHostname($host);
@@ -1058,9 +1083,9 @@ function setupProxyTunnel ($host, $resource) {
$proxyTunnel .= 'Host: ' . $host . getConfig('HTTP_EOL');
// Use login data to proxy? (username at least!)
- if (getConfig('proxy_username') != '') {
+ if (getProxyUsername() != '') {
// Add it as well
- $encodedAuth = base64_encode(compileRawCode(getConfig('proxy_username')) . ':' . compileRawCode(getConfig('proxy_password')));
+ $encodedAuth = base64_encode(compileRawCode(getProxyUsername()) . ':' . compileRawCode(getProxyPassword()));
$proxyTunnel .= 'Proxy-Authorization: Basic ' . $encodedAuth . getConfig('HTTP_EOL');
} // END - if
@@ -1152,10 +1177,10 @@ 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();
+ $keys = getSiteKey() . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromPatchTime() . getEncryptSeperator() . getMasterSalt();
// Additional data
$data = $plainText . getEncryptSeperator() . uniqid(mt_rand(), true) . getEncryptSeperator() . time();
@@ -1164,7 +1189,7 @@ function generateHash ($plainText, $salt = '', $hash = true) {
$a = time() + getConfig('_ADD') - 1;
// Generate SHA1 sum from modula of number and the prime number
- $sha1 = sha1(($a % getPrime()) . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a);
+ $sha1 = sha1(($a % getPrime()) . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a);
//* DEBUG: */ debugOutput('SHA1=' . $sha1.' ('.strlen($sha1).')
');
$sha1 = scrambleString($sha1);
//* DEBUG: */ debugOutput('Scrambled=' . $sha1.' ('.strlen($sha1).')
');
@@ -1264,11 +1289,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 +1423,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 //----------------------------------------------------------------------------- @@ -2406,7 +2535,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