X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffunctions.php;h=c32fbdc0fa0c27ebaa66483fa9847efee4bd3a23;hp=d356add7d7f8d942edaad8693aad4c6faa212514;hb=a84801467693b6adc9e9a984a30c79ccbc6622db;hpb=dbeb4ef1dc2e59d0c6bfab9d9666cdfa515f58e7
diff --git a/inc/functions.php b/inc/functions.php
index d356add7d7..c32fbdc0fa 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -39,11 +39,20 @@ if (!defined('__SECURITY')) {
// Check if our config file is writeable or not
function is_INCWritable($inc) {
- $fp = @fopen(PATH."inc/".$inc.".php", 'a');
+ // Generate FQFN
+ $fqfn = sprintf("%sinc/%s.php", PATH, $inc);
+
+ // Abort by simple test
+ if ((FILE_READABLE($fqfn)) && (!is_writeable($fqfn))) {
+ return false;
+ } // END - if
+
+ // Test if we can append data
+ $fp = @fopen($fqfn, 'a');
if ($inc == "dummy") {
// Remove dummy file
@fclose($fp);
- return @unlink(PATH."inc/dummy.php");
+ return @unlink($fqfn);
} else {
// Close all other files
return @fclose($fp);
@@ -133,6 +142,19 @@ function OUTPUT_HTML($HTML, $NEW_LINE = true) {
// Clear output buffer for later output
ob_end_clean();
+ // Send HTTP header
+ header("HTTP/1.1 200");
+
+ // Used later
+ $now = gmdate('D, d M Y H:i:s') . ' GMT';
+
+ // General headers for no caching
+ header("Expired: " . $now); // RFC2616 - Section 14.21
+ header("Last-Modified: " . $now);
+ header("Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0"); // HTTP/1.1
+ header("Pragma: no-cache"); // HTTP/1.0
+ header("Connection: Close");
+
// Extension "rewrite" installed?
if ((EXT_IS_ACTIVE("rewrite")) && (function_exists('REWRITE_LINKS')) && ($CSS != "1") && ($CSS != "-1")) {
$OUTPUT = REWRITE_LINKS($OUTPUT);
@@ -187,13 +209,18 @@ function OUTPUT_RAW ($HTML) {
// Add a fatal error message to the queue array
function ADD_FATAL ($message, $extra="") {
global $FATAL;
+
if (empty($extra)) {
// Regular text message to add to $FATAL
$FATAL[] = $message;
} else {
// $message is text with a mask plus extras to insert into the text
- $FATAL[] = sprintf($message, $extra);
+ $message = sprintf($message, $extra);
+ $FATAL[] = $message;
}
+
+ // Log fatal messages away
+ DEBUG_LOG(__FUNCTION__, __LINE__, " message={$message}");
}
// Load a template file and return it's content (only it's name; do not use ' or ")
@@ -218,21 +245,20 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) {
$result = SQL_QUERY_ESC("SELECT gender, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1",
array($GLOBALS['userid']), __FILE__, __LINE__);
- // @TODO Merge this data into $content
- list($gender, $surname, $family, $email) = SQL_FETCHROW($result);
+ // Is content an array?
+ if (is_array($content)) {
+ // Merge data
+ $content = array_merge($content, SQL_FETCHARRAY($result));
- // Translate gender
- $gender = TRANSLATE_GENDER($gender);
+ // Translate gender
+ $content['gender'] = TRANSLATE_GENDER($content['gender']);
+ } else {
+ // DEPRECATED: Load data in direct variables
+ list($gender, $surname, $family, $email) = SQL_FETCHROW($result);
- // Insert data if content is an array
- if (is_array($content)) {
- // Please switch to $content[bla] in all your templates! Direct
- // variables are deprecated as of 09/13/2008.
- $content['gender'] = $gender;
- $content['surname'] = $surname;
- $content['family'] = $family;
- $content['email'] = $email;
- } // END - if
+ // Translate gender
+ $gender = TRANSLATE_GENDER($gender);
+ }
// Free result
SQL_FREERESULT($result);
@@ -333,6 +359,10 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) {
";
}
+ // Remove content and data
+ unset($content);
+ unset($DATA);
+
// Do we have some content to output or return?
if (!empty($ret)) {
// Not empty so let's put it out! ;)
@@ -410,6 +440,10 @@ function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") {
$eval = "\$TO = \"".COMPILE_CODE(addslashes($TO))."\";";
eval($eval);
+ // Compile "MSG"
+ $eval = "\$MSG = \"".COMPILE_CODE(addslashes($MSG))."\";";
+ eval($eval);
+
// Fix HTML parameter (default is no!)
if (empty($HTML)) $HTML = "N";
if (isBooleanConstantAndTrue('DEBUG_MODE')) {
@@ -422,16 +456,16 @@ Message : ".$MSG."
\n";
// Log the mail away
- if (defined('DEBUG_MAIL')) DEBUG_LOG(__FUNCTION__.":to={$TO},subject={$SUBJECT},msg={$MSG}");
+ if (defined('DEBUG_MAIL')) DEBUG_LOG(__FUNCTION__, __LINE__, "to={$TO},subject={$SUBJECT},msg={$MSG}");
} elseif (($HTML == "Y") && (EXT_IS_ACTIVE("html_mail"))) {
// Send mail as HTML away
SEND_HTML_EMAIL($TO, $SUBJECT, $MSG, $FROM);
} elseif (!empty($TO)) {
// Send Mail away
- SEND_RAW_EMAIL($TO, COMPILE_CODE($SUBJECT), COMPILE_CODE($MSG), $FROM);
+ SEND_RAW_EMAIL($TO, $SUBJECT, $MSG, $FROM);
} elseif ($HTML == "N") {
// Problem found!
- SEND_RAW_EMAIL(WEBMASTER, COMPILE_CODE($SUBJECT), COMPILE_CODE($MSG), $FROM);
+ SEND_RAW_EMAIL(WEBMASTER, "[PROBLEM:]".$SUBJECT, $MSG, $FROM);
}
}
@@ -474,7 +508,7 @@ function SEND_RAW_EMAIL ($to, $subject, $msg, $from) {
$mail->WordWrap = 70;
$mail->IsHTML(true);
} else {
- $mail->Body = $msg;
+ $mail->Body = html_entity_decode($msg);
}
$mail->AddAddress($to, "");
$mail->AddReplyTo(WEBMASTER,MAIN_TITLE);
@@ -483,7 +517,7 @@ function SEND_RAW_EMAIL ($to, $subject, $msg, $from) {
$mail->Send();
} else {
// Use legacy mail() command
- @mail($to, $subject, $msg, $from);
+ @mail($to, $subject, html_entity_decode($msg), $from);
}
}
//
@@ -548,13 +582,18 @@ function MAKE_DATETIME ($time, $mode="0")
}
// Translates the american decimal dot into a german comma
-function TRANSLATE_COMMA ($dotted, $cut=true) {
+function TRANSLATE_COMMA ($dotted, $cut=true, $max=0) {
global $_CONFIG;
// Default is 3 you can change this in admin area "Misc -> Misc Options"
if (empty($_CONFIG['max_comma'])) $_CONFIG['max_comma'] = "3";
+
+ // Use from config is default
$maxComma = $_CONFIG['max_comma'];
+ // Use from parameter?
+ if ($max > 0) $maxComma = $max;
+
// Cut zeros off?
if ($cut) {
// Test for commata if in cut-mode
@@ -572,7 +611,7 @@ function TRANSLATE_COMMA ($dotted, $cut=true) {
} // END - if
// Debug log
- //DEBUG_LOG(__FUNCTION__.":dotted={$dotted},maxComma={$maxComma}");
+ //DEBUG_LOG(__FUNCTION__, __LINE__, "dotted={$dotted},maxComma={$maxComma}");
// Translate it now
switch (GET_LANGUAGE()) {
@@ -591,7 +630,13 @@ function TRANSLATE_COMMA ($dotted, $cut=true) {
//
function DEREFERER ($URL) {
- $URL = URL."/modules.php?module=loader&url=".urlencode(base64_encode(gzcompress($URL)));
+ // Don't de-refer our own links!
+ if (substr($URL, 0, strlen(URL)) != URL) {
+ // De-refer this link
+ $URL = URL."/modules.php?module=loader&url=".urlencode(base64_encode(gzcompress($URL)));
+ } // END - if
+
+ // Return link
return $URL;
}
@@ -717,8 +762,11 @@ function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") {
// Is the admin logged in?
if (IS_ADMIN()) {
+ // Get admin id
+ $aid = GET_ADMIN_ID(get_session('admin_login'));
+
// Load Admin data
- $ADMIN = GET_ADMIN_EMAIL(get_session('admin_login'));
+ $ADMIN = GET_ADMIN_EMAIL($aid);
} // END - if
// Neutral email address is default
@@ -843,6 +891,10 @@ function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") {
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
+ // Remove content and data
+ unset($content);
+ unset($DATA);
+
// Return compiled content
return COMPILE_CODE($newContent);
}
@@ -908,11 +960,8 @@ function COMPILE_CODE($code, $simple = false, $constants = true, $full = true) {
global $SEC_CHARS, $URL_CHARS;
// Is the code a string?
if (!is_string($code)) {
- // Abort here with backtrace
- DEBUG_LOG(__FUNCTION__.": code is not string!");
- print "
"; - debug_print_backtrace(); - die(""); + // Silently return it + return $code; } // END - if $ARRAY = $SEC_CHARS; @@ -1226,7 +1275,7 @@ function bigintval($num, $castValue = true) { // Has the whole value changed? if ("".$ret."" != "".$num."") { // Log the values - DEBUG_LOG(__FUNCTION__.": num={$num},ret={$ret}"); + DEBUG_LOG(__FUNCTION__, __LINE__, " num={$num},ret={$ret}"); } // END - if // Return result @@ -1288,7 +1337,7 @@ function CREATE_TIME_SELECTIONS($timestamp, $prefix="", $display="", $align="cen global $_CONFIG; // Calculate 2-seconds timestamp - $stamp = round($timestamp / 2) * 2; + $stamp = round($timestamp); // Do we have a leap year? $SWITCH = 0; @@ -1945,8 +1994,8 @@ function generateHash ($plainText, $salt = "") { // Is the required extension "sql_patches" there and a salt is not given? if (((EXT_VERSION_IS_OLDER("sql_patches", "0.3.6")) || (!EXT_IS_ACTIVE("sql_patches"))) && (empty($salt))) { - // Extension sql_patches is missing/outdated so we return the plain text - return $plainText; + // Extension sql_patches is missing/outdated so we hash the plain text with MD5 + return md5($plainText); } // END - if // Do we miss an arry element here? @@ -1966,7 +2015,7 @@ function generateHash ($plainText, $salt = "") { $keys = SITE_KEY.":".DATE_KEY.":".$_CONFIG['secret_key'].":".$_CONFIG['file_hash'].":".date("d-m-Y (l-F-T)", bigintval($_CONFIG['patch_ctime'])).":".$_CONFIG['master_salt']; // Additional data - $data = $plainText.":".uniqid(rand(), true).":".time(); + $data = $plainText.":".uniqid(mt_rand(), true).":".time(); // Calculate number for generating the code $a = time() + _ADD - 1; @@ -2072,7 +2121,7 @@ function genScrambleString($len) { $scrambleString = implode(":", $scrambleNumbers); return $scrambleString; } -// Append data like session ID referral ID to the given URL which would +// Append data like session ID or referal ID to the given URL which would // normally be stored in cookies function ADD_URL_DATA($URL) { global $_CONFIG; @@ -2326,12 +2375,12 @@ function merge_array ($array1, $array2) { die(""); } // Debug message logger -function DEBUG_LOG ($message, $force=false) { +function DEBUG_LOG ($file, $line, $message, $force=false) { // Is debug mode enabled? if ((isBooleanConstantAndTrue('DEBUG_MODE')) || ($force)) { // Log this message away $fp = fopen(PATH."inc/cache/debug.log", 'a') or mxchange_die("Cannot write logfile debug.log!"); - fwrite($fp, date("d.m.Y|H:i:s", time())."|".strip_tags($message)."\n"); + fwrite($fp, date("d.m.Y|H:i:s", time())."|".basename(__FILE__)."|".__LINE__."|".strip_tags($message)."\n"); fclose($fp); } // END - if } @@ -2371,6 +2420,9 @@ function GET_DIR_AS_ARRAY ($baseDir, $prefix) { // Close directory closedir($dirPointer); + // Sort array + asort($INCs); + // Return array with include files return $INCs; } @@ -2387,6 +2439,9 @@ function RESET_ADD_INCLUDES () { // Get more daily reset scripts $INC_POOL = GET_DIR_AS_ARRAY(PATH."inc/reset/", "reset_"); + // Update database + if (!defined('DEBUG_RESET')) UPDATE_CONFIG("last_update", time()); + // Create current week mark $currWeek = date("W", time()); @@ -2396,7 +2451,7 @@ function RESET_ADD_INCLUDES () { $INC_POOL = array_merge($INC_POOL, GET_DIR_AS_ARRAY(PATH."inc/weekly/", "weekly_")); // Update config - UPDATE_CONFIG("last_week", $currWeek); + if (!defined('DEBUG_WEEKLY')) UPDATE_CONFIG("last_week", $currWeek); } // END - if // Create current month mark @@ -2408,7 +2463,7 @@ function RESET_ADD_INCLUDES () { $INC_POOL = array_merge($INC_POOL, GET_DIR_AS_ARRAY(PATH."inc/monthly/", "monthly_")); // Update config - UPDATE_CONFIG("last_month", $currMonth); + if (!defined('DEBUG_MONTHLY')) UPDATE_CONFIG("last_month", $currMonth); } // END - if // Return array @@ -2556,7 +2611,7 @@ function REBUILD_CACHE ($cache, $inc="") { require($fqfn); } else { // Include not found! - DEBUG_LOG(__FUNCTION__.":Include {$inc} not found. cache={$cache}"); + DEBUG_LOG(__FUNCTION__, __LINE__, "Include {$inc} not found. cache={$cache}"); } } // END - if } // END - if @@ -2571,7 +2626,7 @@ function CACHE_PURGE_ADMIN_MENU ($id=0, $action="", $what="", $str="") { return false; } elseif (!is_object($cacheInstance)) { // No cache instance! - DEBUG_LOG(__FUNCTION__.": No cache instance found."); + DEBUG_LOG(__FUNCTION__, __LINE__, " No cache instance found."); return false; } elseif ((!isset($_CONFIG['cache_admin_menu'])) || ($_CONFIG['cache_admin_menu'] == "N")) { // Caching disabled (currently experiemental!) @@ -2654,7 +2709,79 @@ function GET_REFERER () { // Return it return $referer; } -// + +// Adds a bonus mail to the queue +// This is a high-level function! +function ADD_NEW_BONUS_MAIL ($data, $mode="", $output=true) { + // Use mode from data if not set and availble ;-) + if ((empty($mode)) && (isset($data['mode']))) $mode = $data['mode']; + + // Generate receiver list + $RECEIVER = GENERATE_RECEIVER_LIST($data['cat'], $data['receiver'], $mode); + + // Receivers added? + if (!empty($RECEIVER)) { + // Add bonus mail to queue + ADD_BONUS_MAIL_TO_QUEUE( + $data['subject'], + $data['text'], + $RECEIVER, + $data['points'], + $data['seconds'], + $data['url'], + $data['cat'], + $mode, + $data['receiver'] + ); + + // Mail inserted into bonus pool + if ($output) LOAD_TEMPLATE("admin_settings_saved", false, ADMIN_BONUS_SEND); + } elseif ($output) { + // More entered than can be reached! + LOAD_TEMPLATE("admin_settings_saved", false, 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!"); + } +} +// Determines referal id and sets it +function DETERMINE_REFID () { + global $_CONFIG, $CLICK, $_SERVER; + + // Check if refid is set + if ((!empty($_GET['user'])) && ($CLICK == 1) && (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'])) { + // 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'])) { + // 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'])) { + // Set refid=ref (the referal link uses such variable) + $GLOBALS['refid'] = SQL_ESCAPE(strip_tags($_GET['ref'])); + } elseif ((isSessionVariableSet('refid')) && (get_session('refid') != 0)) { + // Set session refid als global + $GLOBALS['refid'] = bigintval(get_session('refid')); + } elseif ((GET_EXT_VERSION("sql_patches") != "") && ($_CONFIG['def_refid'] > 0)) { + // Set default refid as refid in URL + $GLOBALS['refid'] = bigintval($_CONFIG['def_refid']); + } elseif ((GET_EXT_VERSION("user") >= "0.3.4") && ($_CONFIG['select_user_zero_refid']) == "Y") { + // Select a random user which has confirmed enougth mails + $GLOBALS['refid'] = SELECT_RANDOM_REFID(); + } else { + // No default ID when sql_patches is not installed or none set + $GLOBALS['refid'] = 0; + } + + // Set cookie when default refid > 0 + if (!isSessionVariableSet('refid') || (!empty($GLOBALS['refid'])) || ((get_session('refid') == "0") && (isset($_CONFIG['def_refid'])) && ($_CONFIG['def_refid'] > 0))) { + // Set cookie + set_session('refid', $GLOBALS['refid']); + } // END - if +} + ////////////////////////////////////////////////// // // // AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //