Cache class rewritten to better convention
[mailer.git] / inc / functions.php
index 73b15f55152c5c57495f721568788e44541d8a60..d5a4f20347509cd0f2b2833ad90ad51290228827 100644 (file)
@@ -132,7 +132,8 @@ function OUTPUT_HTML($HTML, $NEW_LINE = true) {
 
                default:
                        // Huh, something goes wrong or maybe you have edited config.php ???
-                       die ("<STRONG>".FATAL_ERROR.":</STRONG> ".LANG_NO_RENDER_DIRECT);
+                       DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid renderer %s detected.", OUTPUT_MODE));
+                       MXCHANGE_DIE("<STRONG>".FATAL_ERROR.":</STRONG> ".LANG_NO_RENDER_DIRECT);
                        break;
                }
        } elseif ((_OB_CACHING == "on") && ($footer == 1)) {
@@ -142,6 +143,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);
@@ -207,7 +221,7 @@ function ADD_FATAL ($message, $extra="") {
        }
 
        // Log fatal messages away
-       DEBUG_LOG(__FUNCTION__."(".__LINE__."): message={$message}");
+       DEBUG_LOG(__FUNCTION__, __LINE__, " message={$message}");
 }
 
 // Load a template file and return it's content (only it's name; do not use ' or ")
@@ -226,11 +240,11 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) {
        $ret = "";
        if (empty($GLOBALS['refid'])) $GLOBALS['refid'] = 0;
 
-       // @DEPRECATED Try to remove this if() block
+       // @DEPRECATED Try to rewrite the if() condition
        if ($template == "member_support_form") {
                // Support request of a member
-               $result = SQL_QUERY_ESC("SELECT gender, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1",
-                array($GLOBALS['userid']), __FILE__, __LINE__);
+               $result = SQL_QUERY_ESC("SELECT userid, gender, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1",
+                       array($GLOBALS['userid']), __FILE__, __LINE__);
 
                // Is content an array?
                if (is_array($content)) {
@@ -245,6 +259,7 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) {
 
                        // Translate gender
                        $gender = TRANSLATE_GENDER($gender);
+                       DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("DEPRECATION-WARNING: content is not array (%s).", gettype($content)));
                }
 
                // Free result
@@ -443,7 +458,7 @@ Message : ".$MSG."
 </pre>\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);
@@ -524,13 +539,13 @@ function GEN_PASS($LEN = 0) {
        $PASS = "";
        for ($i = 0; $i < $LEN; $i++) {
                $PASS .= $ABC[mt_rand(0, sizeof($ABC) -1)];
-       }
+       } // END - for
 
        // When the size is below 40 we can also add additional security by scrambling it
        if (strlen($PASS) <= 40) {
                // Also scramble the password
                $PASS = scrambleString($PASS);
-       }
+       } // END - if
 
        // Return the password
        return $PASS;
@@ -554,6 +569,9 @@ function MAKE_DATETIME ($time, $mode="0")
                        case "1": $ret = strtolower(date("d.m.Y - H:i", $time)); break;
                        case "2": $ret = date("d.m.Y|H:i", $time); break;
                        case "3": $ret = date("d.m.Y", $time); break;
+                       default:
+                               DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid date mode %s detected.", $mode));
+                               break;
                }
                break;
 
@@ -563,6 +581,9 @@ function MAKE_DATETIME ($time, $mode="0")
                        case "1": $ret = date("Y-m-d - g:i A", $time); break;
                        case "2": $ret = date("y-m-d|H:i", $time); break;
                        case "3": $ret = date("y-m-d", $time); break;
+                       default:
+                               DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid date mode %s detected.", $mode));
+                               break;
                }
        }
        return $ret;
@@ -582,23 +603,17 @@ function TRANSLATE_COMMA ($dotted, $cut=true, $max=0) {
        if ($max > 0) $maxComma = $max;
 
        // Cut zeros off?
-       if ($cut) {
+       if (($cut) && ($max == 0)) {
                // Test for commata if in cut-mode
                $com = explode(".", $dotted);
-               if (count($com) > 1) {
-                       // Commata found, so only zeros?
-                       if ($com[1] == str_repeat("0", strlen($com[1]))) {
-                               // Only zeros, so display only one
-                               $maxComma = 1;
-                       } // END - if
-               } else {
+               if (count($com) < 2) {
                        // Don't display commatas even if there are none... ;-)
                        $maxComma = 0;
                }
        } // END - if
 
        // Debug log
-       //DEBUG_LOG(__FUNCTION__.":dotted={$dotted},maxComma={$maxComma}");
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "dotted={$dotted},maxComma={$maxComma}");
 
        // Translate it now
        switch (GET_LANGUAGE()) {
@@ -683,6 +698,7 @@ function TRANSLATE_STATUS($status) {
                break;
 
        default:
+               DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Unknown status %s detected.", $status));
                $ret = UNKNOWN_STATUS_1.$status.UNKNOWN_STATUS_2;
                break;
        }
@@ -690,19 +706,22 @@ function TRANSLATE_STATUS($status) {
 }
 //
 function GET_LANGUAGE() {
-       if (!empty($_GET['mx_lang'])) {
-               // Accept only first 2 chars
-               $lang = substr($_GET['mx_lang'], 0, 2);
-       } else {
-               // Do nothing
-               $lang = "";
-       }
+       global $cacheArray;
 
        // Set default return value to default language from config
        $ret = DEFAULT_LANG;
 
-       // Check GET variable and cookie
-       if (!empty($lang)) {
+       // Init variable
+       $lang = "";
+
+       // Is the variable set
+       if (!empty($_GET['mx_lang'])) {
+               // Accept only first 2 chars
+               $lang = substr($_GET['mx_lang'], 0, 2);
+       } elseif (isset($cacheArray['language'])) {
+               // Use cached
+               $ret = $cacheArray['language'];
+       } elseif (!empty($lang)) {
                // Check if main language file does exist
                if (FILE_READABLE(PATH."inc/language/".$lang.".php")) {
                        // Okay found, so let's update cookies
@@ -715,6 +734,11 @@ function GET_LANGUAGE() {
                // Fixes a warning before the session has the mx_lang constant
                if (empty($ret)) $ret = DEFAULT_LANG;
        }
+
+       // Cache entry
+       $cacheArray['language'] = $ret;
+
+       // Return value
        return $ret;
 }
 //
@@ -899,15 +923,15 @@ function MAKE_TIME($H, $M, $S, $stamp) {
 function LOAD_URL($URL, $addUrlData=true) {
        global $CSS, $_CONFIG, $footer;
 
+       // Compile out URI codes
+       $URL = COMPILE_CODE($URL);
+
        // Check if http(s):// is there
        if ((substr($URL, 0, 7) != "http://") && (substr($URL, 0, 8) != "https://")) {
                // Make all URLs full-qualified
                $URL = URL."/".$URL;
        }
 
-       // Compile out URI codes
-       $URL = COMPILE_CODE($URL);
-
        // Get output buffer
        $OUTPUT = ob_get_contents();
 
@@ -1078,76 +1102,86 @@ function array_pk_sort(&$array, $a_sort, $primary_key = 0, $order = -1, $nums =
        $array = $dummy;
 }
 //
-function ADD_SELECTION($type, $DEFAULT, $prefix="", $id="0")
-{
-       global $MONTH_DESCR; $OUT = "";
-       if ($type == "yn")
-       {
+function ADD_SELECTION($type, $DEFAULT, $prefix="", $id="0") {
+       global $MONTH_DESCR, $_CONFIG;
+       $OUT = "";
+
+       if ($type == "yn") {
                // This is a yes/no selection only!
                if ($id > 0) $prefix .= "[".$id."]";
                $OUT .= "    <SELECT name=\"".$prefix."\" class=\"register_select\" size=\"1\">\n";
-       }
-        else
-       {
+       } else {
                // Begin with regular selection box here
                if (!empty($prefix)) $prefix .= "_";
                $type2 = $type;
                if ($id > 0) $type2 .= "[".$id."]";
                $OUT .= "    <SELECT name=\"".strtolower($prefix.$type2)."\" class=\"register_select\" size=\"1\">\n";
        }
-       switch ($type)
-       {
+
+       switch ($type) {
        case "day": // Day
-               for ($idx = 1; $idx < 32; $idx++)
-               {
+               for ($idx = 1; $idx < 32; $idx++) {
                        $OUT .= "<OPTION value=\"".$idx."\"";
                        if ($DEFAULT == $idx) $OUT .= " selected=\"selected\"";
                        $OUT .= ">".$idx."</OPTION>\n";
-               }
+               } // END - for
                break;
 
        case "month": // Month
-               foreach ($MONTH_DESCR as $month => $descr)
-               {
+               foreach ($MONTH_DESCR as $month => $descr) {
                        $OUT .= "<OPTION value=\"".$month."\"";
                        if ($DEFAULT == $month) $OUT .= " selected=\"selected\"";
                        $OUT .= ">".$descr."</OPTION>\n";
-               }
+               } // END - for
                break;
 
        case "year": // Year
                // Get current year
                $YEAR = date('Y', time());
 
+               // Use configured min age or fixed?
+               if (GET_EXT_VERSION("other") >= "0.2.1") {
+                       // Configured
+                       $startYear = $YEAR - $_CONFIG['min_age'];
+               } else {
+                       // Fixed 16 years
+                       $startYear = $YEAR - 16;
+               }
+
+               // Calculate earliest year (100 years old people can still enter Internet???)
+               $minYear = $YEAR - 100;
+
                // Check if the default value is larger than minimum and bigger than actual year
-               if (($DEFAULT > 1930) && ($DEFAULT >= $YEAR))
-               {
-                       for ($idx = $YEAR; $idx < ($YEAR + 11); $idx++)
-                       {
+               if (($DEFAULT > $minYear) && ($DEFAULT >= $YEAR)) {
+                       for ($idx = $YEAR; $idx < ($YEAR + 11); $idx++) {
                                $OUT .= "<OPTION value=\"".$idx."\"";
                                if ($DEFAULT == $idx) $OUT .= " selected=\"selected\"";
                                $OUT .= ">".$idx."</OPTION>\n";
-                       }
-               }
-                elseif ($DEFAULT == -1)
-               {
+                       } // END - for
+               } elseif ($DEFAULT == -1) {
                        // Current year minus 1
-                       for ($idx = 2003; $idx <= ($YEAR + 1); $idx++)
+                       for ($idx = $startYear; $idx <= ($YEAR + 1); $idx++)
                        {
                                $OUT .= "<OPTION value=\"".$idx."\">".$idx."</OPTION>\n";
                        }
-               }
-                else
-               {
-                       // Get current year and subtract 16 (for erotic content)
-                       $OUT .= "<OPTION value=\"1929\">&lt;1930</OPTION>\n";
-                       $YEAR = date('Y', time()) - 16;
-                       for ($idx = 1930; $idx <= $YEAR; $idx++)
-                       {
+               } else {
+                       // Get current year and subtract the configured minimum age
+                       $OUT .= "<OPTION value=\"".($minYear - 1)."\">&lt;".$minYear."</OPTION>\n";
+                       // Calculate earliest year depending on extension version
+                       if (GET_EXT_VERSION("other") >= "0.2.1") {
+                               // Use configured minimum age
+                               $YEAR = date('Y', time()) - $_CONFIG['min_age'];
+                       } else {
+                               // Use fixed 16 years age
+                               $YEAR = date('Y', time()) - 16;
+                       }
+
+                       // Construct year selection list
+                       for ($idx = $minYear; $idx <= $YEAR; $idx++) {
                                $OUT .= "<OPTION value=\"".$idx."\"";
                                if ($DEFAULT == $idx) $OUT .= " selected=\"selected\"";
                                $OUT .= ">".$idx."</OPTION>\n";
-                       }
+                       } // END - for
                }
                break;
 
@@ -1158,7 +1192,7 @@ function ADD_SELECTION($type, $DEFAULT, $prefix="", $id="0")
                        $OUT .= "<OPTION value=\"".$idx."\"";
                        if ($DEFAULT == $idx) $OUT .= " selected=\"selected\"";
                        $OUT .= ">".$idx."</OPTION>\n";
-               }
+               } // END - for
                break;
 
        case "hour":
@@ -1167,7 +1201,7 @@ function ADD_SELECTION($type, $DEFAULT, $prefix="", $id="0")
                        $OUT .= "<OPTION value=\"".$idx."\"";
                        if ($DEFAULT == $idx) $OUT .= " selected=\"selected\"";
                        $OUT .= ">".$idx."</OPTION>\n";
-               }
+               } // END - for
                break;
 
        case "yn":
@@ -1262,7 +1296,10 @@ function bigintval($num, $castValue = true) {
        // Has the whole value changed?
        if ("".$ret."" != "".$num."") {
                // Log the values
-               DEBUG_LOG(__FUNCTION__.": num={$num},ret={$ret}");
+               print("<pre>");
+               debug_print_backtrace();
+               die("</pre>");
+               DEBUG_LOG(__FUNCTION__, __LINE__, " num={$num},ret={$ret}");
        } // END - if
 
        // Return result
@@ -1734,6 +1771,7 @@ function POST_URL ($script, $postData) {
        // Is postData an array?
        if (!is_array($postData)) {
                // Abort here
+               DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("postData is not an array. Type: %s", gettype($postData)));
                return array("", "", "");
        } // END - if
 
@@ -1981,8 +2019,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?
@@ -2002,7 +2040,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;
@@ -2215,7 +2253,7 @@ function mxchange_die ($msg) {
 
 // Display parsing time and number of SQL queries in footer
 function DISPLAY_PARSING_TIME_FOOTER() {
-       global $startTime, $_CONFIG;
+       global $_CONFIG;
        $endTime = microtime(true);
 
        // Is the timer started?
@@ -2278,23 +2316,23 @@ function set_session ($var, $value) {
 // Check wether a boolean constant is set
 // Taken from user comments in PHP documentation for function constant()
 function isBooleanConstantAndTrue($constName) { // : Boolean
-       global $constCache;
+       global $cacheArray;
 
        // Failed by default
        $res = false;
 
        // In cache?
-       if (isset($constCache[$constName])) {
+       if (isset($cacheArray['const'][$constName])) {
                // Use cache
                //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ".$constName."-CACHE!<br />\n";
-               $res = $constCache[$constName];
+               $res = $cacheArray['const'][$constName];
        } else {
                // Check constant
                //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ".$constName."-RESOLVE!<br />\n";
                if (defined($constName)) $res = (constant($constName) === true);
 
                // Set cache
-               $constCache[$constName] = $res;
+               $cacheArray['const'][$constName] = $res;
        }
        //* DEBUG: */ var_dump($res);
 
@@ -2303,12 +2341,12 @@ function isBooleanConstantAndTrue($constName) { // : Boolean
 }
 
 // Check wether a session variable is set
-function isSessionVariableSet($var) {
+function isSessionVariableSet ($var) {
        //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):var={$var}<br />\n";
        return (isset($_SESSION[$var]));
 }
 // Returns wether the value of the session variable or NULL if not set
-function get_session($var) {
+function get_session ($var) {
        global $cacheArray;
 
        // Default is not found! ;-)
@@ -2317,9 +2355,11 @@ function get_session($var) {
        // Is the variable there or cached values?
        if (isset($cacheArray['session'][$var])) {
                // Get cached value (skips a lot SQL_ESCAPE() calles!
+               //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ".$var."-CACHE!<br />\n";
                $value = $cacheArray['session'][$var];
        } elseif (isSessionVariableSet($var)) {
                // Then  get it secured!
+               //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ".$var."-RESOLVE!<br />\n";
                $value = SQL_ESCAPE($_SESSION[$var]);
 
                // Cache the value
@@ -2362,12 +2402,12 @@ function merge_array ($array1, $array2) {
        die("</pre>");
 }
 // Debug message logger
-function DEBUG_LOG ($message, $force=false) {
+function DEBUG_LOG ($file, $line, $message, $force=true) {
        // 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
 }
@@ -2496,31 +2536,31 @@ function FILE_READABLE($fqfn) {
 // Converts timestamp selections into a timestamp
 function CONVERT_SELECTIONS_TO_TIMESTAMP(&$POST, &$DATA, &$id, &$skip) {
        // Init test variable
-       $TEST2 = "";
+       $test2 = "";
 
        // Get last three chars
-       $TEST = substr($id, -3);
+       $test = substr($id, -3);
 
        // Improved way of checking! :-)
-       if (in_array($TEST, array("_ye", "_mo", "_we", "_da", "_ho", "_mi", "_se"))) {
+       if (in_array($test, array("_ye", "_mo", "_we", "_da", "_ho", "_mi", "_se"))) {
                // Found a multi-selection for timings?
-               $TEST = substr($id, 0, -3);
-               if ((isset($POST[$TEST."_ye"])) && (isset($POST[$TEST."_mo"])) && (isset($POST[$TEST."_we"])) && (isset($POST[$TEST."_da"])) && (isset($POST[$TEST."_ho"])) && (isset($POST[$TEST."_mi"])) && (isset($POST[$TEST."_se"])) && ($TEST != $TEST2)) {
+               $test = substr($id, 0, -3);
+               if ((isset($POST[$test."_ye"])) && (isset($POST[$test."_mo"])) && (isset($POST[$test."_we"])) && (isset($POST[$test."_da"])) && (isset($POST[$test."_ho"])) && (isset($POST[$test."_mi"])) && (isset($POST[$test."_se"])) && ($test != $test2)) {
                        // Generate timestamp
-                       $POST[$TEST] = CREATE_TIMESTAMP_FROM_SELECTIONS($TEST, $POST);
-                       $DATA[] = "$TEST='".$POST[$TEST]."'";
+                       $POST[$test] = CREATE_TIMESTAMP_FROM_SELECTIONS($test, $POST);
+                       $DATA[] = sprintf("%s='%s'", $test, $POST[$test]);
 
                        // 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
-                       unset($id); $skip = true; $TEST2 = $TEST;
+                       unset($id); $skip = true; $test2 = $test;
                } // END - if
        } else {
                // Process this entry
-               $skip = false; $TEST2 = "";
+               $skip = false; $test2 = "";
        }
 }
 // Reverts the german decimal comma into Computer decimal dot
@@ -2582,9 +2622,9 @@ function REBUILD_CACHE ($cache, $inc="") {
        // Shall I remove the cache file?
        if ((EXT_IS_ACTIVE("cache")) && (is_object($cacheInstance))) {
                // Rebuild cache
-               if ($cacheInstance->cache_file($cache, true)) {
+               if ($cacheInstance->loadCacheFile($cache)) {
                        // Destroy it
-                       $cacheInstance->cache_destroy();
+                       $cacheInstance->destroyCacheFile();
                } // END - if
 
                // Include file given?
@@ -2598,7 +2638,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
@@ -2613,7 +2653,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!)
@@ -2728,9 +2768,64 @@ function ADD_NEW_BONUS_MAIL ($data, $mode="", $output=true) {
                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!");
+               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
+}
+
+// Destroys the admin session
+function DESTROY_ADMIN_SESSION () {
+       // Kill maybe existing session variables including array elements
+       set_session('admin_login'       , "");
+       set_session('admin_md5'         , "");
+       set_session('admin_last'        , "");
+       set_session('admin_to'          , "");
+
+       // Destroy session and return status
+       return @session_destroy();
+}
+
+// Checks if a given apache module is loaded
+function IF_APACHE_MODULE_LOADED ($apacheModule) {
+       // Check it and return result
+       return (((function_exists('apache_get_modules')) && (in_array($apacheModule, apache_get_modules()))) || (!function_exists('apache_get_modules')));
+}
 
 //////////////////////////////////////////////////
 //                                              //