]> git.mxchange.org Git - mailer.git/blobdiff - inc/functions.php
Default wait time now 60 seconds, some fixes
[mailer.git] / inc / functions.php
index 1c22981c1c5c3fc3b1ce41c0b1e57ba86ea88597..e9eb6681020ff46b822479f1b51822ea084c3321 100644 (file)
@@ -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);
@@ -187,13 +196,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 +232,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 +346,10 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) {
 <br /><br />";
        }
 
+       // 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 +427,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')) {
@@ -428,10 +449,10 @@ Message : ".$MSG."
                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 +495,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 +504,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);
        }
 }
 //
@@ -591,7 +612,13 @@ function TRANSLATE_COMMA ($dotted, $cut=true) {
 
 //
 function DEREFERER ($URL) {
-       $URL = URL."/modules.php?module=loader&amp;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&amp;url=".urlencode(base64_encode(gzcompress($URL)));
+       } // END - if
+
+       // Return link
        return $URL;
 }
 
@@ -709,8 +736,8 @@ function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") {
        // No longer used: $MAIN_TITLE = MAIN_TITLE; $URL = URL; $WEBMASTER = WEBMASTER;
 
        // Prepare IP number and User Agent
-       $REMOTE_ADDR     = getenv('REMOTE_ADDR');
-       $HTTP_USER_AGENT = getenv('HTTP_USER_AGENT');
+       $REMOTE_ADDR     = GET_REMOTE_ADDR();
+       $HTTP_USER_AGENT = GET_USER_AGENT();
 
        // Default admin
        $ADMIN = MAIN_TITLE;
@@ -843,6 +870,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);
 }
@@ -881,7 +912,7 @@ function LOAD_URL($URL, $addUrlData=true) {
        if (((!defined('__COOKIES')) || (!__COOKIES)) && ($addUrlData)) $URL = ADD_URL_DATA($URL);
 
        // Probe for bot from search engine
-       if ((eregi("spider", getenv('HTTP_USER_AGENT'))) || (eregi("bot", getenv('HTTP_USER_AGENT'))) || (eregi("spider", getenv('HTTP_USER_AGENT')))) {
+       if ((eregi("spider", GET_USER_AGENT())) || (eregi("bot", GET_USER_AGENT())) || (eregi("spider", GET_USER_AGENT()))) {
                // Search engine bot detected so let's rewrite many chars for the link
                $URL = htmlentities(strip_tags($URL), ENT_QUOTES);
 
@@ -908,11 +939,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 "<pre>";
-               debug_print_backtrace();
-               die("</pre>");
+               // Silently return it
+               return $code;
        } // END - if
 
        $ARRAY = $SEC_CHARS;
@@ -1167,7 +1195,7 @@ function GEN_RANDOM_CODE($length, $code, $uid, $DATA="") {
        if (!defined('_MAX')) define('_MAX', 15235);
 
        // Build server string
-       $server = $_SERVER['PHP_SELF'].":".getenv('HTTP_USER_AGENT').":".getenv('SERVER_SOFTWARE').":".getenv('REMOTE_ADDR').":".":".filemtime(PATH."inc/databases.php");
+       $server = $_SERVER['PHP_SELF'].":".GET_USER_AGENT().":".getenv('SERVER_SOFTWARE').":".GET_REMOTE_ADDR().":".":".filemtime(PATH."inc/databases.php");
 
        // Build key string
        $keys   = SITE_KEY.":".DATE_KEY;
@@ -1288,7 +1316,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;
@@ -1960,7 +1988,7 @@ function generateHash ($plainText, $salt = "") {
        // 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
-               $server = $_SERVER['PHP_SELF'].":".getenv('HTTP_USER_AGENT').":".getenv('SERVER_SOFTWARE').":".getenv('REMOTE_ADDR').":".":".filemtime(PATH."inc/databases.php");
+               $server = $_SERVER['PHP_SELF'].":".GET_USER_AGENT().":".getenv('SERVER_SOFTWARE').":".GET_REMOTE_ADDR().":".":".filemtime(PATH."inc/databases.php");
 
                // Build key string
                $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'];
@@ -2072,7 +2100,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;
@@ -2371,6 +2399,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 +2418,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 +2430,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 +2442,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
@@ -2535,7 +2569,7 @@ function HANDLE_LOGIN_FAILTURES ($accessLevel) {
 }
 // Rebuild cache
 function REBUILD_CACHE ($cache, $inc="") {
-       global $cacheInstance;
+       global $cacheInstance, $_CONFIG, $CSS;
 
        // Shall I remove the cache file?
        if ((EXT_IS_ACTIVE("cache")) && (is_object($cacheInstance))) {
@@ -2543,21 +2577,21 @@ function REBUILD_CACHE ($cache, $inc="") {
                if ($cacheInstance->cache_file($cache, true)) {
                        // Destroy it
                        $cacheInstance->cache_destroy();
+               } // END - if
 
-                       // Include file given?
-                       if (!empty($inc)) {
-                               // Construct FQFN
-                               $fqfn = sprintf("%sinc/loader/load_cache-%s.php", PATH, $inc);
-
-                               // Is the include there?
-                               if (FILE_READABLE($fqfn)) {
-                                       // And rebuild it from scratch
-                                       require_once($fqfn);
-                               } else {
-                                       // Include not found!
-                                       DEBUG_LOG(__FUNCTION__.":Include {$inc} not found. cache={$cache}");
-                               }
-                       } // END - if
+               // Include file given?
+               if (!empty($inc)) {
+                       // Construct FQFN
+                       $fqfn = sprintf("%sinc/loader/load_cache-%s.php", PATH, $inc);
+
+                       // Is the include there?
+                       if (FILE_READABLE($fqfn)) {
+                               // And rebuild it from scratch
+                               require($fqfn);
+                       } else {
+                               // Include not found!
+                               DEBUG_LOG(__FUNCTION__.":Include {$inc} not found. cache={$cache}");
+                       }
                } // END - if
        } // END - if
 }
@@ -2598,7 +2632,98 @@ function TRANSLATE_POOL_TYPE ($type) {
        // Return "translation"
        return $translated;
 }
-//
+// "Getter" for remote IP number
+function GET_REMOTE_ADDR () {
+       // Get remote ip from environment
+       $remoteAddr = getenv('REMOTE_ADDR');
+
+       // Is removeip installed?
+       if (EXT_IS_ACTIVE("removeip")) {
+               // Then anonymize it
+               $remoteAddr = GET_ANONYMOUS_REMOTE_ADDR($remoteAddr);
+       } // END - if
+
+       // Return it
+       return $remoteAddr;
+}
+// "Getter" for remote hostname
+function GET_REMOTE_HOST () {
+       // Get remote ip from environment
+       $remoteHost = getenv('REMOTE_HOST');
+
+       // Is removeip installed?
+       if (EXT_IS_ACTIVE("removeip")) {
+               // Then anonymize it
+               $remoteHost = GET_ANONYMOUS_REMOTE_HOST($remoteHost);
+       } // END - if
+
+       // Return it
+       return $remoteHost;
+}
+// "Getter" for user agent
+function GET_USER_AGENT () {
+       // Get remote ip from environment
+       $userAgent = getenv('HTTP_USER_AGENT');
+
+       // Is removeip installed?
+       if (EXT_IS_ACTIVE("removeip")) {
+               // Then anonymize it
+               $userAgent = GET_ANONYMOUS_USER_AGENT($userAgent);
+       } // END - if
+
+       // Return it
+       return $userAgent;
+}
+// "Getter" for referer
+function GET_REFERER () {
+       // Get remote ip from environment
+       $referer = getenv('HTTP_REFERER');
+
+       // Is removeip installed?
+       if (EXT_IS_ACTIVE("removeip")) {
+               // Then anonymize it
+               $referer = GET_ANONYMOUS_REFERER($referer);
+       } // END - if
+
+       // 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!");
+       }
+}
+
 //////////////////////////////////////////////////
 //                                              //
 // AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //