]> git.mxchange.org Git - mailer.git/blobdiff - inc/functions.php
A lot while() conditions rewritten to SQL_FETCHARRAY(), see bug #107, @TODO tags...
[mailer.git] / inc / functions.php
index fded480114527ad38c572b4d9d1da18aeafb0243..dcdfdc6ea03845940ec3fa110573bb0b6d0564b3 100644 (file)
@@ -38,25 +38,17 @@ if (!defined('__SECURITY')) {
 }
 
 // Check if our config file is writeable or not
-function IS_INC_WRITEABLE($inc) {
+function IS_INC_WRITEABLE ($inc) {
        // Generate FQFN
-       $fqfn = sprintf("%sinc/%s.php", constant('PATH'), $inc);
+       $FQFN = sprintf("%sinc/%s.php", constant('PATH'), $inc);
 
        // Abort by simple test
-       if ((FILE_READABLE($fqfn)) && (!is_writeable($fqfn))) {
+       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($fqfn);
-       } else {
-               // Close all other files
-               return fclose($fp);
-       }
+       // Test write-access
+       return is_writeable($FQFN);
 }
 
 // Output HTML code directly or "render" it. You addionally switch the new-line character off
@@ -101,7 +93,7 @@ function OUTPUT_HTML ($HTML, $newLine = true) {
                        mxchange_die("<strong>{--FATAL_ERROR--}:</strong> {--LANG_NO_RENDER_DIRECT--}");
                        break;
                }
-       } elseif ((constant('_OB_CACHING') == "on") && ($GLOBALS['footer_sent'] == 1)) {
+       } elseif ((constant('_OB_CACHING') == "on") && (isset($GLOBALS['footer_sent'])) && ($GLOBALS['footer_sent'] == 1)) {
                // Headers already sent?
                if (headers_sent()) {
                        // Log this error
@@ -141,7 +133,7 @@ function OUTPUT_HTML ($HTML, $newLine = true) {
                while (strpos($OUTPUT, '{!') > 0) {
                        // Prepare the content and eval() it...
                        $newContent = "";
-                       $eval = "\$newContent = \"".COMPILE_CODE(smartAddSlashes($OUTPUT, false, false))."\";";
+                       $eval = "\$newContent = \"".COMPILE_CODE(smartAddSlashes($OUTPUT))."\";";
                        eval($eval);
 
                        // Was that eval okay?
@@ -162,7 +154,7 @@ function OUTPUT_HTML ($HTML, $newLine = true) {
 
                // Compile and run finished rendered HTML code
                while (strpos($OUTPUT, '{!') > 0) {
-                       $eval = "\$OUTPUT = \"".COMPILE_CODE(smartAddSlashes($OUTPUT, false, false))."\";";
+                       $eval = "\$OUTPUT = \"".COMPILE_CODE(smartAddSlashes($OUTPUT))."\";";
                        eval($eval);
                } // END - while
 
@@ -194,7 +186,7 @@ function getFatalArray () {
 }
 
 // Add a fatal error message to the queue array
-function addFatalMessage ($message, $extra="") {
+function addFatalMessage ($F, $L, $message, $extra="") {
        if (is_array($extra)) {
                // Multiple extras for a message with masks
                $message = call_user_func_array('sprintf', $extra);
@@ -207,7 +199,7 @@ function addFatalMessage ($message, $extra="") {
        $GLOBALS['fatal_messages'][] = $message;
 
        // Log fatal messages away
-       DEBUG_LOG(__FUNCTION__, __LINE__, " message={$message}");
+       DEBUG_LOG($F, $L, " message={$message}");
 }
 
 // Getter for total fatal message count
@@ -249,7 +241,7 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) {
        if ($template == "member_support_form") {
                // Support request of a member
                $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__);
+                       array($GLOBALS['userid']), __FUNCTION__, __LINE__);
 
                // Is content an array?
                if (is_array($content)) {
@@ -356,7 +348,7 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) {
 
                // Add surrounding HTML comments to help finding bugs faster
                $ret = "<!-- Template ".$template." - Start -->\n".$ret."<!-- Template ".$template." - End -->\n";
-       } elseif ((IS_ADMIN()) || ((isInstalling()) && (!isBooleanConstantAndTrue('mxchange_installed')))) {
+       } elseif ((IS_ADMIN()) || ((isInstalling()) && (!isInstalled()))) {
                // Only admins shall see this warning or when installation mode is active
                $ret = "<br /><span class=\"guest_failed\">".TEMPLATE_404."</span><br />
 (".basename($FQFN).")<br />
@@ -375,14 +367,14 @@ function LOAD_TEMPLATE ($template, $return=false, $content=array()) {
        // Do we have some content to output or return?
        if (!empty($ret)) {
                // Not empty so let's put it out! ;)
-               if ($return) {
+               if ($return === true) {
                        // Return the HTML code
                        return $ret;
                } else {
                        // Output direct
                        OUTPUT_HTML($ret);
                }
-       } elseif (isBooleanConstantAndTrue('DEBUG_MODE')) {
+       } elseif (isDebugModeEnabled()) {
                // Warning, empty output!
                return "E:".$template."<br />\n";
        }
@@ -404,7 +396,7 @@ function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") {
                        return;
                } else {
                        // Load email address
-                       $result_email = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1", array(bigintval($TO)), __FILE__, __LINE__);
+                       $result_email = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1", array(bigintval($TO)), __FUNCTION__, __LINE__);
                        //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):numRows=".SQL_NUMROWS($result_email)."<br />\n";
 
                        // Does the user exist?
@@ -435,7 +427,7 @@ function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") {
                        // Append header
                        $FROM .= LOAD_EMAIL_TEMPLATE("header");
                }
-       } elseif (isBooleanConstantAndTrue('DEBUG_MODE')) {
+       } elseif (isDebugModeEnabled()) {
                if (empty($FROM)) {
                        // Load email header template
                        $FROM = LOAD_EMAIL_TEMPLATE("header");
@@ -455,7 +447,7 @@ function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") {
 
        // Fix HTML parameter (default is no!)
        if (empty($HTML)) $HTML = "N";
-       if (isBooleanConstantAndTrue('DEBUG_MODE')) {
+       if (isDebugModeEnabled()) {
                // In debug mode we want to display the mail instead of sending it away so we can debug this part
                print("<pre>
 ".htmlentities(trim($FROM))."
@@ -476,9 +468,10 @@ Message : ".$MSG."
 }
 
 // Check if legacy or PHPMailer command
+// @TODO Rewrite this to an extension 'smtp'
 // @private
 function CHECK_PHPMAILER_USAGE() {
-       return ((defined('SMTP_HOSTNAME')) && (defined('SMTP_USER')) && (defined('SMTP_PASSWORD')) && (SMTP_HOSTNAME != "") && (SMTP_USER != ""));
+       return ((defined('SMTP_HOSTNAME')) && (defined('SMTP_USER')) && (defined('SMTP_PASSWORD')) && (constant('SMTP_HOSTNAME') != "") && (constant('SMTP_USER') != ""));
 }
 
 /*
@@ -539,7 +532,7 @@ function GEN_PASS ($LEN = 0) {
        // Start creating password
        $PASS = "";
        for ($i = 0; $i < $LEN; $i++) {
-               $PASS .= $ABC[mt_rand(0, sizeof($ABC) -1)];
+               $PASS .= $ABC[mt_rand(0, count($ABC) -1)];
        } // END - for
 
        // When the size is below 40 we can also add additional security by scrambling it
@@ -675,8 +668,8 @@ function FRAMETESTER ($URL) {
 function SELECTION_COUNT ($array) {
        $ret = 0;
        if (is_array($array)) {
-               foreach ($array as $key => $sel) {
-                       if (!empty($sel)) $ret++;
+               foreach ($array as $key => $selected) {
+                       if (!empty($selected)) $ret++;
                }
        }
        return $ret;
@@ -804,12 +797,12 @@ function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") {
                        //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):NICKNAME!<br />\n";
                        // Load nickname
                        $result = SQL_QUERY_ESC("SELECT surname, family, gender, email, nickname FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1",
-                               array(bigintval($UID)), __FILE__, __LINE__);
+                               array(bigintval($UID)), __FUNCTION__, __LINE__);
                } else {
                        //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):NO-NICK!<br />\n";
                        /// Load normal data
                        $result = SQL_QUERY_ESC("SELECT surname, family, gender, email FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1",
-                               array(bigintval($UID)), __FILE__, __LINE__);
+                               array(bigintval($UID)), __FUNCTION__, __LINE__);
                }
 
                // Fetch and merge data
@@ -881,7 +874,7 @@ function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") {
 <br /><br />";
 
                // Debug mode not active? Then remove the HTML tags
-               if (!isBooleanConstantAndTrue('DEBUG_MODE')) $newContent = strip_tags($newContent);
+               if (!isDebugModeEnabled()) $newContent = strip_tags($newContent);
        } else {
                // No template name supplied!
                $newContent = getMessage('NO_TEMPLATE_SUPPLIED');
@@ -924,7 +917,8 @@ function LOAD_URL ($URL, $addUrlData=true) {
        }
 
        // Get output buffer
-       /* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
+       //* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, $URL);
        $OUTPUT = ob_get_contents();
 
        // Clear it only if there is content
@@ -952,7 +946,7 @@ function LOAD_URL ($URL, $addUrlData=true) {
                LOAD_TEMPLATE("redirect_url", false, str_replace("&amp;", "&", $URL));
                LOAD_INC("inc/footer.php");
        }
-       exit();
+       exit;
 }
 
 // Wrapper for LOAD_URL but URL comes from a configuration entry
@@ -1106,7 +1100,6 @@ function array_pk_sort (&$array, $a_sort, $primary_key = 0, $order = -1, $nums =
 
 //
 function ADD_SELECTION ($type, $DEFAULT, $prefix="", $id="0") {
-       global $MONTH_DESCR;
        $OUT = "";
 
        if ($type == "yn") {
@@ -1131,7 +1124,7 @@ function ADD_SELECTION ($type, $DEFAULT, $prefix="", $id="0") {
                break;
 
        case "month": // Month
-               foreach ($MONTH_DESCR as $month => $descr) {
+               foreach ($GLOBALS['month_descr'] as $month => $descr) {
                        $OUT .= "<option value=\"".$month."\"";
                        if ($DEFAULT == $month) $OUT .= " selected=\"selected\"";
                        $OUT .= ">".$descr."</option>\n";
@@ -1220,12 +1213,12 @@ function ADD_SELECTION ($type, $DEFAULT, $prefix="", $id="0") {
 }
 
 //
-function TRANSLATE_YESNO($yn) {
+function TRANSLATE_YESNO ($yn) {
        // Default
-       $yn = "??? (".$yn.")";
+       $translated = "??? (".$yn.")";
        switch ($yn) {
-               case "Y": $yn = getMessage('YES'); break;
-               case "N": $yn = getMessage('NO'); break;
+               case "Y": $translated = getMessage('YES'); break;
+               case "N": $translated = getMessage('NO'); break;
                default:
                        // Log unknown value
                        DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected Y/N!", $yn));
@@ -1233,15 +1226,16 @@ function TRANSLATE_YESNO($yn) {
        }
 
        // Return it
-       return $yn;
+       return $translated;
 }
 
 //
 // Deprecated : $length
 // Optional   : $DATA
 //
-function GEN_RANDOM_CODE ($length, $code, $uid, $DATA="") {
+function generateRandomCodde ($length, $code, $uid, $DATA="") {
        // Fix missing _MAX constant
+       // @TODO Rewrite this unnice code
        if (!defined('_MAX')) define('_MAX', 15235);
 
        // Build server string
@@ -1251,7 +1245,7 @@ function GEN_RANDOM_CODE ($length, $code, $uid, $DATA="") {
        $keys   = constant('SITE_KEY').":".constant('DATE_KEY');
        if (isConfigEntrySet('secret_key'))  $keys .= ":".getConfig('secret_key');
        if (isConfigEntrySet('file_hash'))   $keys .= ":".getConfig('file_hash');
-       $keys .= ":".date("d-m-Y (l-F-T)", bigintval(getConfig('patch_ctime')));
+       $keys .= ":".date("d-m-Y (l-F-T)", getConfig(('patch_ctime')));
        if (isConfigEntrySet('master_salt')) $keys .= ":".getConfig('master_salt');
 
        // Build string from misc data
@@ -1260,9 +1254,9 @@ function GEN_RANDOM_CODE ($length, $code, $uid, $DATA="") {
        // Add more additional data
        if (isSessionVariableSet('u_hash'))                     $data .= ":".get_session('u_hash');
        if (isset($GLOBALS['userid']))                          $data .= ":".$GLOBALS['userid'];
-       if (isSessionVariableSet('mxchange_theme'))     $data .= ":".get_session('mxchange_theme');
-       if (isSessionVariableSet('mx_lang'))            $data .= ":".GET_LANGUAGE();
-       if (isset($GLOBALS['refid']))                           $data .= ":".$GLOBALS['refid'];
+       if (isSessionVariableSet('mxchange_theme'))             $data .= ":".get_session('mxchange_theme');
+       if (isSessionVariableSet('mx_lang'))                    $data .= ":".GET_LANGUAGE();
+       if (isset($GLOBALS['refid']))                                   $data .= ":".$GLOBALS['refid'];
 
        // Calculate number for generating the code
        $a = $code + constant('_ADD') - 1;
@@ -1275,7 +1269,7 @@ function GEN_RANDOM_CODE ($length, $code, $uid, $DATA="") {
                $rcode = hexdec(substr($saltedHash, strlen(getConfig('master_salt')), 9)) / abs(constant('_MAX') - $a + sqrt(constant('_ADD'))) / pi();
        } else {
                // Generate hash with "hash of site key" from modula of number with the prime number and other data
-               $saltedHash = generateHash(($a % constant('_PRIME')).":".$server.":".$keys.":".$data.":".date("d-m-Y (l-F-T)", time()).":".$a, substr(sha1(SITE_KEY), 0, 8));
+               $saltedHash = generateHash(($a % constant('_PRIME')).":".$server.":".$keys.":".$data.":".date("d-m-Y (l-F-T)", time()).":".$a, substr(sha1(constant('SITE_KEY')), 0, 8));
 
                // Create number from hash
                $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(constant('_MAX') - $a + sqrt(constant('_ADD'))) / pi();
@@ -1593,23 +1587,19 @@ function SEND_ADMIN_EMAILS_PRO ($subj, $template, $content, $UID) {
        // Load email template
        $msg = LOAD_EMAIL_TEMPLATE($template, $content, $UID);
 
-       if (EXT_VERSION_IS_OLDER("admins", "0.4.0")) {
-               // Older version detected!
-               return SEND_ADMIN_EMAILS($subj, $msg);
-       } // END - if
-
        // Check which admin shall receive this mail
        $result = SQL_QUERY_ESC("SELECT DISTINCT admin_id FROM `{!_MYSQL_PREFIX!}_admins_mails` WHERE mail_template='%s' ORDER BY admin_id",
-               array($template), __FILE__, __LINE__);
+               array($template), __FUNCTION__, __LINE__);
        if (SQL_NUMROWS($result) == 0) {
                // Create new entry (to all admins)
                SQL_QUERY_ESC("INSERT INTO `{!_MYSQL_PREFIX!}_admins_mails` (admin_id, mail_template) VALUES (0, '%s')",
-                       array($template), __FILE__, __LINE__);
+                       array($template), __FUNCTION__, __LINE__);
        } else {
                // Load admin IDs...
-               $aids = array();
-               while (list($aid) = SQL_FETCHROW($result)) {
-                       $aids[] = $aid;
+               // @TODO This can be, somehow, rewritten
+               $adminIds = array();
+               while ($content = SQL_FETCHARRAY($result)) {
+                       $adminIds[] = $content['admin_id'];
                } // END - while
 
                // Free memory
@@ -1619,7 +1609,7 @@ function SEND_ADMIN_EMAILS_PRO ($subj, $template, $content, $UID) {
                $result = false;
 
                // "implode" IDs and query string
-               $aid = implode(",", $aids);
+               $aid = implode(",", $adminIds);
                if ($aid == "-1") {
                        if (EXT_IS_ACTIVE("events")) {
                                // Add line to user events
@@ -1634,16 +1624,18 @@ function SEND_ADMIN_EMAILS_PRO ($subj, $template, $content, $UID) {
                        }
                } elseif ($aid == "0") {
                        // Select all email adresses
-                       $result = SQL_QUERY("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` ORDER BY `id`", __FILE__, __LINE__);
+                       $result = SQL_QUERY("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` ORDER BY `id`",
+                               __FUNCTION__, __LINE__);
                } else {
                        // If Admin-ID is not "to-all" select
-                       $result = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` WHERE id IN (%s) ORDER BY `id`", array($aid), __FILE__, __LINE__);
+                       $result = SQL_QUERY_ESC("SELECT email FROM `{!_MYSQL_PREFIX!}_admins` WHERE id IN (%s) ORDER BY `id`",
+                               array($aid), __FUNCTION__, __LINE__);
                }
        }
 
        // Load email addresses and send away
-       while (list($email) = SQL_FETCHROW($result)) {
-               SEND_EMAIL($email, $subj, $msg);
+       while ($content = SQL_FETCHARRAY($result)) {
+               SEND_EMAIL($content['email'], $subj, $msg);
        } // END - while
 
        // Free memory
@@ -1725,7 +1717,7 @@ function ADD_EMAIL_NAV ($PAGES, $offset, $show_form, $colspan, $return=false) {
        // Load navigation template
        $OUT = LOAD_TEMPLATE("admin_email_nav_row", true);
 
-       if ($return) {
+       if ($return === true) {
                // Return generated HTML-Code
                return $OUT;
        } else {
@@ -1896,7 +1888,7 @@ function SEND_RAW_REQUEST ($host, $request) {
        fputs($fp, $request);
 
        // Read response
-       while(!feof($fp)) {
+       while (!feof($fp)) {
                $response[] = trim(fgets($fp, 1024));
        } // END - while
 
@@ -1939,7 +1931,7 @@ function SEND_RAW_REQUEST ($host, $request) {
 }
 
 // Taken from www.php.net eregi() user comments
-function VALIDATE_EMAIL($email) {
+function VALIDATE_EMAIL ($email) {
        // Compile email
        $email = COMPILE_CODE($email);
 
@@ -1977,7 +1969,7 @@ function VALIDATE_URL ($URL, $compile=true) {
        return isUrlValid($URL);
 }
 
-//
+// Generate a list of administrative links to a given userid
 function MEMBER_ACTION_LINKS ($uid, $status = "") {
        // Define all main targets
        $TARGETS = array("del_user", "edit_user", "lock_user", "add_points", "sub_points");
@@ -2014,13 +2006,6 @@ function MEMBER_ACTION_LINKS ($uid, $status = "") {
        return $OUT;
 }
 
-// Function for backward-compatiblity
-// @TODO Can this function be deprecated?
-function ADD_CATEGORY_TABLE ($MODE, $return=false) {
-       // Load it from the register extension
-       return REGISTER_ADD_CATEGORY_TABLE ($MODE, $return);
-}
-
 // Generate an email link
 function CREATE_EMAIL_LINK ($email, $table = "admins") {
        // Default email link (INSECURE! Spammer can read this by harvester programs)
@@ -2044,6 +2029,7 @@ function CREATE_EMAIL_LINK ($email, $table = "admins") {
        // Return email link
        return $EMAIL;
 }
+
 // Generate a hash for extra-security for all passwords
 function generateHash ($plainText, $salt = "") {
        global $_SERVER;
@@ -2066,7 +2052,7 @@ function generateHash ($plainText, $salt = "") {
                $server = $_SERVER['PHP_SELF'].":".GET_USER_AGENT().":".getenv('SERVER_SOFTWARE').":".GET_REMOTE_ADDR().":".":".filemtime(constant('PATH')."inc/databases.php");
 
                // Build key string
-               $keys   = constant('SITE_KEY').":".constant('DATE_KEY').":".getConfig('secret_key').":".getConfig('file_hash').":".date("d-m-Y (l-F-T)", bigintval(getConfig('patch_ctime'))).":".getConfig('master_salt');
+               $keys   = constant('SITE_KEY').":".constant('DATE_KEY').":".getConfig('secret_key').":".getConfig('file_hash').":".date("d-m-Y (l-F-T)", getConfig(('patch_ctime'))).":".getConfig('master_salt');
 
                // Additional data
                $data = $plainText.":".uniqid(mt_rand(), true).":".time();
@@ -2094,7 +2080,8 @@ function generateHash ($plainText, $salt = "") {
        // Return hash
        return $salt.sha1($salt.$plainText);
 }
-//
+
+// Scramble a string
 function scrambleString($str) {
        // Init
        $scrambled = "";
@@ -2125,7 +2112,8 @@ function scrambleString($str) {
        //* DEBUG: */ echo "***Scrambled=".$scrambled."***<br />";
        return $scrambled;
 }
-//
+
+// De-scramble a string scrambled by scrambleString()
 function descrambleString($str) {
        // Scramble only 40 chars long strings
        if (strlen($str) != 40) return $str;
@@ -2148,7 +2136,8 @@ function descrambleString($str) {
        //* DEBUG: */ echo "+++Original=".$orig."+++<br />";
        return $orig;
 }
-//
+
+// Generated a "string" for scrambling
 function genScrambleString ($len) {
        // Prepare array for the numbers
        $scrambleNumbers = array();
@@ -2377,7 +2366,7 @@ function GET_CURR_THEME() {
                        // Fix it to default
                        $ret = "default";
                } // END - if
-       } elseif ((!isBooleanConstantAndTrue('mxchange_installed')) && ((isInstalling()) || ($GLOBALS['output_mode'] == true)) && ((REQUEST_ISSET_GET(('theme'))) || (REQUEST_ISSET_POST(('theme'))))) {
+       } elseif ((!isInstalled()) && ((isInstalling()) || ($GLOBALS['output_mode'] == true)) && ((REQUEST_ISSET_GET(('theme'))) || (REQUEST_ISSET_POST(('theme'))))) {
                // Prepare FQFN for checking
                $theme = sprintf("%stheme/%s/theme.php", constant('PATH'), REQUEST_GET(('theme')));
 
@@ -2428,7 +2417,7 @@ function THEME_GET_ID ($name) {
        } elseif (GET_EXT_VERSION("cache") != "0.1.8") {
                // Check if current theme is already imported or not
                $result = SQL_QUERY_ESC("SELECT id FROM `{!_MYSQL_PREFIX!}_themes` WHERE theme_path='%s' LIMIT 1",
-                       array($name), __FILE__, __LINE__);
+                       array($name), __FUNCTION__, __LINE__);
 
                // Entry found?
                if (SQL_NUMROWS($result) == 1) {
@@ -2574,24 +2563,13 @@ function getActualVersion ($type = 0) {
 
 // Loads an include file and logs any missing files for debug purposes
 function LOAD_INC ($INC) {
-       // Get constant path
-       $PATH = constant('PATH');
-
-       // Use the include file name directly
-       // @TODO Try to find all locations where an FQFN is given to these two
-       // @TODO functions and avoid it.
-       $FQFN = $INC;
-
-       // Check if PATH is in $INC
-       if (substr($INC, 0, $PATH) != $PATH) {
-               // Add it. This is why we need a trailing slash in config.php
-               $FQFN = $PATH . $INC;
-       } // END - if
+       // Add the path. This is why we need a trailing slash in config.php
+       $FQFN = constant('PATH') . $INC;
 
        // Is the include file there?
        if (!FILE_READABLE($FQFN)) {
                // Not there so log it
-               DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Include file %s not found.", basename($INC)));
+               debug_report_bug(sprintf("Include file %s not found.", $INC));
                return false;
        } // END - if
 
@@ -2602,12 +2580,12 @@ function LOAD_INC ($INC) {
 // Loads an include file once
 function LOAD_INC_ONCE ($INC) {
        // Is it not loaded?
-       if (!isset($GLOBALS['cache_array']['load_once'][$INC])) {
+       if (!isset($GLOBALS['load_once'][$INC])) {
                // Then try to load it
                LOAD_INC($INC);
 
                // And mark it as loaded
-               $GLOBALS['cache_array']['load_once'][$INC] = "loaded";
+               $GLOBALS['load_once'][$INC] = "loaded";
        } // END - if
 }
 
@@ -2619,7 +2597,7 @@ function debug_get_printable_backtrace () {
        // Get and prepare backtrace for output
        $backtraceArray = debug_backtrace();
        foreach ($backtraceArray as $key => $trace) {
-               if (!isset($trace['file'])) $trace['file'] = __FILE__;
+               if (!isset($trace['file'])) $trace['file'] = __FUNCTION__;
                if (!isset($trace['line'])) $trace['line'] = __LINE__;
                if (!isset($trace['args'])) $trace['args'] = array();
                $backtrace .= "<li class=\"debug_list\"><span class=\"backtrace_file\">".basename($trace['file'])."</span>:".$trace['line'].", <span class=\"backtrace_function\">".$trace['function']."(".count($trace['args']).")</span></li>\n";
@@ -2714,7 +2692,7 @@ function REDIRCT_ON_UNINSTALLED_EXTENSION ($ext_name) {
 // Generate a "link" for the given admin id (aid)
 function GENERATE_AID_LINK ($aid) {
        // No assigned admin is default
-       $admin = "<div class=\"admin_note\">{--ADMIN_NO_ADMIN_ASSIGNED--}</div>";
+       $admin = "<span class=\"admin_note\">{--ADMIN_NO_ADMIN_ASSIGNED--}</span>";
 
        // Zero? = Not assigned
        if ($aid == "0") {
@@ -2881,12 +2859,12 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) {
                $tmp = $FQFN.".tmp";
 
                // Open the source file
-               $fp = @fopen($FQFN, 'r') or OUTPUT_HTML("<strong>READ:</strong> ".$FQFN."<br />");
+               $fp = fopen($FQFN, 'r') or OUTPUT_HTML("<strong>READ:</strong> ".$FQFN."<br />");
 
                // Is the resource valid?
                if (is_resource($fp)) {
                        // Open temporary file
-                       $fp_tmp = @fopen($tmp, 'w') or OUTPUT_HTML("<strong>WRITE:</strong> ".$tmp."<br />");
+                       $fp_tmp = fopen($tmp, 'w') or OUTPUT_HTML("<strong>WRITE:</strong> ".$tmp."<br />");
 
                        // Is the resource again valid?
                        if (is_resource($fp_tmp)) {
@@ -2921,29 +2899,29 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) {
 
                        if (($done) && ($found)) {
                                // Copy back tmp file and delete tmp :-)
-                               @copy($tmp, $FQFN);
-                               @unlink($tmp);
-                               define('_FATAL', false);
+                               copy($tmp, $FQFN);
+                               return unlink($tmp);
                        } elseif (!$found) {
                                OUTPUT_HTML("<strong>CHANGE:</strong> 404!");
-                               define('_FATAL', true);
                        } else {
                                OUTPUT_HTML("<strong>TMP:</strong> UNDONE!");
-                               define('_FATAL', true);
                        }
                }
        } else {
                // File not found, not readable or writeable
                OUTPUT_HTML("<strong>404:</strong> ".$FQFN."<br />");
        }
+
+       // An error was detected!
+       return false;
 }
 // Send notification to admin
-function SEND_ADMIN_NOTIFICATION($subject, $templateName, $content=array(), $uid="0") {
+function SEND_ADMIN_NOTIFICATION ($subject, $templateName, $content=array(), $uid="0") {
        if (GET_EXT_VERSION("admins") >= "0.4.1") {
                // Send new way
                SEND_ADMIN_EMAILS_PRO($subject, $templateName, $content, $uid);
        } else {
-               // Send outdated way
+               // Send out out-dated way
                $msg = LOAD_EMAIL_TEMPLATE($templateName, $content, $uid);
                SEND_ADMIN_EMAILS($subject, $msg);
        }
@@ -2972,7 +2950,7 @@ function merge_array ($array1, $array2) {
 // Debug message logger
 function DEBUG_LOG ($funcFile, $line, $message, $force=true) {
        // Is debug mode enabled?
-       if ((isBooleanConstantAndTrue('DEBUG_MODE')) || ($force === true)) {
+       if ((isDebugModeEnabled()) || ($force === true)) {
                // Log this message away
                $fp = fopen(constant('PATH')."inc/cache/debug.log", 'a') or mxchange_die("Cannot write logfile debug.log!");
                fwrite($fp, date("d.m.Y|H:i:s", time())."|".basename($funcFile)."|".$line."|".strip_tags($message)."\n");
@@ -2985,13 +2963,13 @@ function GET_DIR_AS_ARRAY ($baseDir, $prefix) {
        $INCs = array();
 
        // Open directory
-       $dirPointer = opendir($baseDir) or mxchange_die("Cannot read ".basename($baseDir)." path!");
+       $dirPointer = opendir(constant('PATH') . $baseDir) or mxchange_die("Cannot read ".basename($baseDir)." path!");
 
        // Read all entries
        while ($baseFile = readdir($dirPointer)) {
                // Load file only if extension is active
-               // Make full path
-               $FQFN = $baseDir.$baseFile;
+               $INC = $baseDir.$baseFile;
+               $FQFN = constant('PATH') . $INC;
 
                // Is this a valid reset file?
                //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):baseDir={$baseDir},prefix={$prefix},baseFile={$baseFile}<br />\n";
@@ -3005,10 +2983,10 @@ function GET_DIR_AS_ARRAY ($baseDir, $prefix) {
                        // Is the extension valid and active?
                        if (($extId > 0) && (EXT_IS_ACTIVE($extName))) {
                                // Then add this file
-                               $INCs[] = $FQFN;
+                               $INCs[] = $INC;
                        } elseif ($extId == 0) {
                                // Add non-extension files as well
-                               $INCs[] = $FQFN;
+                               $INCs[] = $INC;
                        }
                } // END - if
        } // END - while
@@ -3024,45 +3002,48 @@ function GET_DIR_AS_ARRAY ($baseDir, $prefix) {
 }
 
 // Load more reset scripts
-function RESET_ADD_INCLUDES () {
+function runResetIncludes () {
        // Is the reset set or old sql_patches?
-       if ((!defined('__DAILY_RESET')) || (EXT_VERSION_IS_OLDER("sql_patches", "0.4.5"))) {
+       if ((!isResetModeEnabled()) || (EXT_VERSION_IS_OLDER("sql_patches", "0.4.5"))) {
                // Then abort here
-               return array();
+               DEBUG_LOG(__FUNCTION__, __LINE__, "Cannot run reset! Please report this bug. Thanks");
        } // END - if
 
        // Get more daily reset scripts
-       $INC_POOL = GET_DIR_AS_ARRAY(constant('PATH')."inc/reset/", "reset_");
+       $INC_POOL = GET_DIR_AS_ARRAY("inc/reset/", "reset_");
 
        // Update database
        if (!defined('DEBUG_RESET')) UPDATE_CONFIG("last_update", time());
 
-       // Create current week mark
-       $currWeek = date("W", time());
+       // Is the config entry set?
+       if (GET_EXT_VERSION("sql_patches") >= "0.4.2") {
+               // Create current week mark
+               $currWeek = date("W", time());
 
-       // Has it changed?
-       if (getConfig('last_week') != $currWeek) {
-               // Include weekly reset scripts
-               $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY(constant('PATH')."inc/weekly/", "weekly_"));
+               // Has it changed?
+               if (getConfig('last_week') != $currWeek) {
+                       // Include weekly reset scripts
+                       $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY("inc/weekly/", "weekly_"));
 
-               // Update config
-               if (!defined('DEBUG_WEEKLY')) UPDATE_CONFIG("last_week", $currWeek);
-       } // END - if
+                       // Update config
+                       if (!defined('DEBUG_WEEKLY')) UPDATE_CONFIG("last_week", $currWeek);
+               } // END - if
 
-       // Create current month mark
-       $currMonth = date("m", time());
+               // Create current month mark
+               $currMonth = date("m", time());
 
-       // Has it changed?
-       if (getConfig('last_month') != $currMonth) {
-               // Include monthly reset scripts
-               $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY(constant('PATH')."inc/monthly/", "monthly_"));
+               // Has it changed?
+               if (getConfig('last_month') != $currMonth) {
+                       // Include monthly reset scripts
+                       $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY("inc/monthly/", "monthly_"));
 
-               // Update config
-               if (!defined('DEBUG_MONTHLY')) UPDATE_CONFIG("last_month", $currMonth);
+                       // Update config
+                       if (!defined('DEBUG_MONTHLY')) UPDATE_CONFIG("last_month", $currMonth);
+               } // END - if
        } // END - if
 
-       // Return array
-       return $INC_POOL;
+       // Run the filter
+       runFilterChain('load_includes', $INC_POOL);
 }
 
 // Handle extra values
@@ -3099,13 +3080,13 @@ function HANDLE_EXTRA_VALUES ($filterFunction, $value, $extraValue) {
 }
 
 // Check if given FQFN is a readable file
-function FILE_READABLE($fqfn) {
+function FILE_READABLE ($FQFN) {
        // Check all...
-       return ((file_exists($fqfn)) && (is_file($fqfn)) && (is_readable($fqfn)));
+       return ((file_exists($FQFN)) && (is_file($FQFN)) && (is_readable($FQFN)));
 }
 
 // Converts timestamp selections into a timestamp
-function CONVERT_SELECTIONS_TO_TIMESTAMP(&$POST, &$DATA, &$id, &$skip) {
+function CONVERT_SELECTIONS_TO_TIMESTAMP (&$POST, &$DATA, &$id, &$skip) {
        // Init test variable
        $test2 = "";
 
@@ -3131,7 +3112,8 @@ function CONVERT_SELECTIONS_TO_TIMESTAMP(&$POST, &$DATA, &$id, &$skip) {
                } // END - if
        } else {
                // Process this entry
-               $skip = false; $test2 = "";
+               $skip = false;
+               $test2 = "";
        }
 }
 
@@ -3190,9 +3172,9 @@ function HANDLE_LOGIN_FAILTURES ($accessLevel) {
 }
 
 // Rebuild cache
-function REBUILD_CACHE ($cache, $inc="") {
+function rebuildCacheFiles ($cache, $inc="") {
        // Shall I remove the cache file?
-       if ((EXT_IS_ACTIVE("cache")) && (is_object($GLOBALS['cache_instance']))) {
+       if ((EXT_IS_ACTIVE("cache")) && (isCacheInstanceValid())) {
                // Rebuild cache
                if ($GLOBALS['cache_instance']->loadCacheFile($cache)) {
                        // Destroy it
@@ -3223,7 +3205,7 @@ function CACHE_PURGE_ADMIN_MENU ($id=0, $action="", $what="", $str="") {
        if (!EXT_IS_ACTIVE("cache")) {
                // Cache extension not active
                return false;
-       } elseif (!is_object($GLOBALS['cache_instance'])) {
+       } elseif (!isCacheInstanceValid()) {
                // No cache instance!
                DEBUG_LOG(__FUNCTION__, __LINE__, " No cache instance found.");
                return false;
@@ -3371,7 +3353,7 @@ function DETERMINE_REFID () {
                $GLOBALS['refid'] = bigintval(get_session('refid'));
        } elseif ((GET_EXT_VERSION("sql_patches") != "") && (getConfig('def_refid') > 0)) {
                // Set default refid as refid in URL
-               $GLOBALS['refid'] = bigintval(getConfig('def_refid'));
+               $GLOBALS['refid'] = getConfig(('def_refid'));
        } elseif ((GET_EXT_VERSION("user") >= "0.3.4") && (getConfig('select_user_zero_refid')) == "Y") {
                // Select a random user which has confirmed enougth mails
                $GLOBALS['refid'] = SELECT_RANDOM_REFID();
@@ -3395,6 +3377,43 @@ function isInstalling () {
        return (isset($GLOBALS['mxchange_installing']));
 }
 
+// Check wether this script is installed
+function isInstalled () {
+       return isBooleanConstantAndTrue('mxchange_installed');
+}
+
+// Check wether an admin is registered
+function isAdminRegistered () {
+       return isBooleanConstantAndTrue('admin_registered');
+}
+
+// Enables the reset mode. Only call this function if you really want the
+// reset to be run!
+function enableResetMode () {
+       // Enable the reset mode
+       $GLOBALS['reset_enabled'] = true;
+
+       // Run filters
+       runFilterChain('reset_enabled');
+}
+
+// Checks wether the reset mode is active
+function isResetModeEnabled () {
+       // Now simply check it
+       return ((isset($GLOBALS['reset_enabled'])) && ($GLOBALS['reset_enabled'] === true));
+}
+
+// Checks wether the debug mode is enabled
+function isDebugModeEnabled () {
+       // Simply check it
+       return isBooleanConstantAndTrue('DEBUG_MODE');
+}
+
+// Checks wether the cache instance is valid
+function isCacheInstanceValid () {
+       return ((isset($GLOBALS['cache_instance'])) && (is_object($GLOBALS['cache_instance'])));
+}
+
 //////////////////////////////////////////////////
 // AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //
 //////////////////////////////////////////////////