Typo 'referral'->'referal' fixed, more 'empty version' fixed
[mailer.git] / inc / mysql-manager.php
index 754ca58d903baf831c74568228c15f7b0462d87e..90c8d83eb01ce56ccd44682df6b67583904a6459 100644 (file)
@@ -134,10 +134,10 @@ function checkModulePermissions ($mod = '') {
        // Check for prefix is a extension...
        $modSplit = explode('_', $mod);
        $extension = ''; $mod_chk = $mod;
-       //* DEBUG: */ outputHtml(__LINE__."*".count($modSplit)."*/".$mod."*<br />");
+       //* DEBUG: */ print(__LINE__."*".count($modSplit)."*/".$mod."*<br />");
        if (count($modSplit) == 2) {
                // Okay, there is a seperator (_) in the name so is the first part a module?
-               //* DEBUG: */ outputHtml(__LINE__."*".$modSplit[0]."*<br />");
+               //* DEBUG: */ print(__LINE__."*".$modSplit[0]."*<br />");
                if (isExtensionActive($modSplit[0])) {
                        // The prefix is an extension's name, so let's set it
                        $extension = $modSplit[0]; $mod = $modSplit[1];
@@ -253,7 +253,7 @@ function checkModulePermissions ($mod = '') {
 
                        // Destroy cache here
                        // @TODO Rewrite this to a filter
-                       if (getOutputMode() == '0') rebuildCacheFile('modreg', 'modreg');
+                       if ((getOutputMode() == 0) || (getOutputMode() == -1)) rebuildCacheFile('modules', 'modules');
 
                        // And reload data
                        unset($GLOBALS['module_status'][$mod]);
@@ -264,7 +264,7 @@ function checkModulePermissions ($mod = '') {
                }
        } elseif (($ret == 'cache_miss') && (getOutputMode() == 0)) {
                // Rebuild the cache files
-               rebuildCacheFile('modreg', 'modreg');
+               rebuildCacheFile('modules', 'modules');
        } elseif ($found === false) {
                // Problem with module detected
                logDebugMessage(__FUNCTION__, __LINE__, sprintf("Problem in module %s detected. ret=%s, locked=%s, hidden=%s, mem=%s, admin=%s, output_mode=%s",
@@ -381,12 +381,12 @@ function addMenuDescription ($accessLevel, $FQFN, $return = false, $output = tru
                        $OUT = $prefix . "<strong><a class=\"you_are_here\" href=\"{?URL?}/modules.php?module=" . $modCheck . '&amp;' . $type . '=' . $search.$LINK_ADD . "\">" . $ret . "</a></strong>\n";
 
                        // Can we close the you-are-here navigation?
-                       //* DEBUG: */ outputHtml(__LINE__."*".$type.'/'.getWhat()."*<br />");
+                       //* DEBUG: */ print(__LINE__."*".$type.'/'.getWhat()."*<br />");
                        if (($type == 'what') || (($type == 'action') && ((!isWhatSet()) || (getWhat() == 'overview')))) {
-                               //* DEBUG: */ outputHtml(__LINE__.'+'.$type."+<br />");
+                               //* DEBUG: */ print(__LINE__.'+'.$type."+<br />");
                                // Add closing div and br-tag
                                $OUT .= "</div><br />\n";
-                               $GLOBALS['nav_depth'] = '0';
+                               $GLOBALS['nav_depth'] = 0;
 
                                // Run the filter chain
                                $ret = runFilterChain('post_youhere_line', array('access_level' => $accessLevel, 'type' => $type, 'content' => ""));
@@ -428,12 +428,12 @@ function addMenu ($mode, $action, $what) {
        $result_main = SQL_QUERY_ESC("SELECT `title`, `action` FROM `{?_MYSQL_PREFIX?}_%s_menu` WHERE (`what`='' OR `what` IS NULL)".$AND." ORDER BY `sort` ASC",
                array($mode), __FUNCTION__, __LINE__);
 
-       //* DEBUG: */ outputHtml(__LINE__.'/'.$main_cnt.':'.getWhat()."*<br />");
+       //* DEBUG: */ print(__LINE__.'/'.$main_cnt.':'.getWhat()."*<br />");
        if (SQL_NUMROWS($result_main) > 0) {
                // There are menus available, so we simply display them... :)
                $GLOBALS['rows'] = '';
                while ($content = SQL_FETCHARRAY($result_main)) {
-                       //* DEBUG: */ outputHtml(__LINE__.'/'.$main_cnt.'/'.$content['action'].':'.getWhat()."*<br />");
+                       //* DEBUG: */ print(__LINE__.'/'.$main_cnt.'/'.$content['action'].':'.getWhat()."*<br />");
                        // Init variables
                        enableBlockMode(false);
                        $action = $content['action'];
@@ -462,7 +462,7 @@ function addMenu ($mode, $action, $what) {
                                        $OUT = '';
 
                                        // Full file name for checking menu
-                                       //* DEBUG: */ outputHtml(__LINE__.":!!!!".$content['sub_what']."!!!<br />");
+                                       //* DEBUG: */ print(__LINE__.":!!!!".$content['sub_what']."!!!<br />");
                                        $inc = sprintf("inc/modules/%s/what-%s.php", $mode, $content['sub_what']);
                                        if (isIncludeReadable($inc)) {
                                                // Mark currently selected menu - open
@@ -513,21 +513,21 @@ function addMenu ($mode, $action, $what) {
                                enableBlockMode();
 
                                // Load menu block
-                               $inc_BLOCK = sprintf("inc/modules/%s/action-%s.php", $mode, $content['action']);
-                               if (isFileReadable($inc_BLOCK)) {
+                               $INC = sprintf("inc/modules/%s/action-%s.php", $mode, $content['action']);
+                               if (isFileReadable($INC)) {
                                        // Load include file
                                        if ((!isExtensionActive($content['action'])) || ($content['action'] == 'online')) $GLOBALS['rows'] .= loadTemplate('menu_what_begin', true, $mode);
-                                       //* DEBUG: */ outputHtml(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.$content['sub_what'].':'.getWhat()."*<br />");
-                                       loadInclude($inc_BLOCK);
-                                       //* DEBUG: */ outputHtml(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.$content['sub_what'].':'.getWhat()."*<br />");
-                                       if ((!isExtensionActive($content['action'])) || ($content['action'] == 'online')) $GLOBALS['rows'] .= loadTemplate('menu_what_end', true);
+                                       //* DEBUG: */ print(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.getWhat()."*<br />");
+                                       loadInclude($INC);
+                                       //* DEBUG: */ print(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.getWhat()."*<br />");
+                                       if ((!isExtensionActive($content['action'])) || ($content['action'] == 'online')) $GLOBALS['rows'] .= loadTemplate('menu_what_end', true, $mode);
                                }
-                               //* DEBUG: */ outputHtml(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.$content['sub_what'].':'.getWhat()."*<br />");
+                               //* DEBUG: */ print(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.$content['sub_what'].':'.getWhat()."*<br />");
                        }
 
                        $main_cnt++;
 
-                       //* DEBUG: */ outputHtml(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.$content['sub_what'].':'.getWhat()."*<br />");
+                       //* DEBUG: */ print(__LINE__.'/'.$main_cnt.':'.getWhat()."*<br />");
                        if (SQL_NUMROWS($result_main) > $main_cnt) {
                                // Add seperator
                                $GLOBALS['rows'] .= loadTemplate('menu_seperator', true, $mode);
@@ -562,7 +562,7 @@ function addMenu ($mode, $action, $what) {
                );
 
                // Load main template
-               //* DEBUG: */ outputHtml(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.$content['sub_what'].':'.getWhat()."*<br />");
+               //* DEBUG: */ print(__LINE__.'/'.$main_cnt.'/'.$content['action'].'/'.$content['sub_what'].':'.getWhat()."*<br />");
                loadTemplate('menu_table', false, $content);
        } // END - if
 }
@@ -580,10 +580,13 @@ function isMember () {
        if (isset($GLOBALS['is_member'])) {
                // Then return it
                return $GLOBALS['is_member'];
-       } // END - if
+       } elseif (getUserId() == 0) {
+               // No member
+               return false;
+       }
 
-       // Init global 'status'
-       $GLOBALS['status'] = false;
+       // Init global user data array
+       initUserData();
 
        // Fix "deleted" cookies first
        fixDeletedCookies(array('userid', 'u_hash'));
@@ -591,42 +594,31 @@ function isMember () {
        // Are cookies set?
        if ((isUserIdSet()) && (isSessionVariableSet('u_hash'))) {
                // Cookies are set with values, but are they valid?
-               $result = SQL_QUERY_ESC("SELECT `password`, `status`, `last_module`, `last_online` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid`=%s LIMIT 1",
-                       array(getUserId()), __FUNCTION__, __LINE__);
-               if (SQL_NUMROWS($result) == 1) {
-                       // Load data from cookies
-                       list($password, $GLOBALS['status'], $mod, $onl) = SQL_FETCHROW($result);
-
+               if (fetchUserData(getUserId()) === true) {
                        // Validate password by created the difference of it and the secret key
-                       $valPass = generatePassString($password);
+                       $valPass = generatePassString(getUserData('password'));
 
                        // Transfer last module and online time
-                       if ((!empty($mod)) && (empty($GLOBALS['last_online']['module']))) {
-                               // @TODO Try to rewrite this to one or more functions
-                               $GLOBALS['last_online']['module'] = $mod;
-                               $GLOBALS['last_online']['online'] = $onl;
-                       } // END - if
+                       $GLOBALS['last_online']['module'] = getUserData('last_module');
+                       $GLOBALS['last_online']['online'] = getUserData('last_online');
 
                        // So did we now have valid data and an unlocked user?
-                       if (($GLOBALS['status'] == 'CONFIRMED') && ($valPass == getSession('u_hash'))) {
+                       if ((getUserData('status') == 'CONFIRMED') && ($valPass == getSession('u_hash'))) {
                                // Account is confirmed and all cookie data is valid so he is definely logged in! :-)
                                $ret = true;
                        } else {
                                // Maybe got locked etc.
-                               //* DEBUG: */ outputHtml(__LINE__."!!!<br />");
+                               //* DEBUG: */ print(__LINE__."!!!<br />");
                                destroyUserSession();
                        }
                } else {
                        // Cookie data is invalid!
-                       //* DEBUG: */ outputHtml(__LINE__."***<br />");
+                       //* DEBUG: */ print(__LINE__."***<br />");
                        destroyUserSession();
                }
-
-               // Free memory
-               SQL_FREERESULT($result);
        } else {
                // Cookie data is invalid!
-               //* DEBUG: */ outputHtml(__LINE__."///<br />");
+               //* DEBUG: */ print(__LINE__."///<br />");
                destroyUserSession();
        }
 
@@ -637,63 +629,140 @@ function isMember () {
        return $ret;
 }
 
+// Fetch user data for given user id
+function fetchUserData ($userid, $column='userid') {
+       // Don't look for invalid userids...
+       if ($userid < 1) {
+               // Invalid, so abort here
+               debug_report_bug('User id ' . $userid . ' is invalid.');
+       } elseif (isset($GLOBALS['user_data'][$userid])) {
+               // Use cache, so it is fine
+               return true;
+       }
+
+       // By default none was found
+       $found = false;
+
+       // Do we have userid/refid?
+       if (($column == 'userid') || ($column == 'refid')) {
+               // Then secure the id
+               $userid = bigintval($userid);
+       } // END - if
+
+       // Query for the user
+       $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `%s`='%s' LIMIT 1",
+               array($column, $userid), __FUNCTION__, __LINE__);
+
+       // Do we have a record?
+       if (SQL_NUMROWS($result) == 1) {
+               // Load data from cookies
+               $data = SQL_FETCHARRAY($result);
+
+               // Set the userid for later use
+               setCurrentUserId($data['userid']);
+               $GLOBALS['user_data'][getCurrentUserId()] = $data;
+
+               // Rewrite 'last_failure' if found
+               if (isset($GLOBALS['user_data'][getCurrentUserId()]['last_failure'])) {
+                       // Backup the raw one and zero it
+                       $GLOBALS['user_data'][getCurrentUserId()]['last_failure_raw'] = $GLOBALS['user_data'][getCurrentUserId()]['last_failure'];
+                       $GLOBALS['user_data'][getCurrentUserId()]['last_failure'] = 0;
+
+                       // Is it not zero?
+                       if ($GLOBALS['user_data'][getCurrentUserId()]['last_failure_raw'] != '0000-00-00 00:00:00') {
+                               // Seperate data/time
+                               $array = explode(' ', $GLOBALS['user_data'][getCurrentUserId()]['last_failure']);
+
+                               // Seperate data and time again
+                               $array['date'] = explode('-', $array[0]);
+                               $array['time'] = explode(':', $array[1]);
+
+                               // Now pass it to mktime()
+                               $GLOBALS['user_data'][getCurrentUserId()]['last_failure'] = mktime(
+                                       $array['time'][0],
+                                       $array['time'][1],
+                                       $array['time'][2],
+                                       $array['date'][1],
+                                       $array['date'][2],
+                                       $array['date'][0]
+                               );
+                       } // END - if
+               } // END - if
+
+               // Found, but valid?
+               $found = isUserDataValid();
+       } // END - if
+
+       // Free memory
+       SQL_FREERESULT($result);
+
+       // Return result
+       return $found;
+}
+
 // This patched function will reduce many SELECT queries for the specified or current admin login
 function isAdmin ($admin = '') {
        // Init variables
        $ret = false; $passCookie = ''; $valPass = '';
-       //* DEBUG: */ outputHtml(__LINE__."ADMIN:".$admin."<br />");
+       //* DEBUG: */ print(__FUNCTION__.':'.$admin.'<br />');
 
        // If admin login is not given take current from cookies...
        if ((empty($admin)) && (isSessionVariableSet('admin_login')) && (isSessionVariableSet('admin_md5'))) {
                // Get admin login and password from session/cookies
                $admin = getSession('admin_login');
                $passCookie = getSession('admin_md5');
-       }
-       //* DEBUG: */ outputHtml(__LINE__."ADMIN:".$admin.'/'.$passCookie."<br />");
+       } // END - if
+       //* DEBUG: */ print(__FUNCTION__.':'.$admin.'/'.$passCookie.'<br />');
 
-       // Search in array for entry
-       if (isset($GLOBALS['admin_hash'])) {
-               // Use cached string
-               $valPass = $GLOBALS['admin_hash'];
-       } elseif ((!empty($passCookie)) && (isset($GLOBALS['cache_array']['admins']['password'][$admin])) && (!empty($admin))) {
-               // Login data is valid or not?
-               $valPass = generatePassString($GLOBALS['cache_array']['admins']['password'][$admin]);
+       // Do we have cache?
+       if (!isset($GLOBALS['is_admin'][$admin])) {
+               // Init it with failed
+               $GLOBALS['is_admin'][$admin] = false;
+
+               // Search in array for entry
+               if (isset($GLOBALS['admin_hash'])) {
+                       // Use cached string
+                       $valPass = $GLOBALS['admin_hash'];
+               } elseif ((!empty($passCookie)) && (isAdminHashSet($admin) === true) && (!empty($admin))) {
+                       // Login data is valid or not?
+                       $valPass = generatePassString(getAdminHash($admin));
+
+                       // Cache it away
+                       $GLOBALS['admin_hash'] = $valPass;
+
+                       // Count cache hits
+                       incrementStatsEntry('cache_hits');
+               } elseif ((!empty($admin)) && ((!isExtensionActive('cache'))) || (isAdminHashSet($admin) === false)) {
+                       // Search for admin
+                       $result = SQL_QUERY_ESC("SELECT HIGH_PRIORITY `password` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `login`='%s' LIMIT 1",
+                               array($admin), __FUNCTION__, __LINE__);
 
-               // Cache it away
-               $GLOBALS['admin_hash'] = $valPass;
+                       // Is he admin?
+                       $passDB = '';
+                       if (SQL_NUMROWS($result) == 1) {
+                               // Admin login was found so let's load password from DB
+                               list($passDB) = SQL_FETCHROW($result);
 
-               // Count cache hits
-               incrementStatsEntry('cache_hits');
-       } elseif ((!empty($admin)) && ((!isExtensionActive('cache'))) || (!isset($GLOBALS['cache_array']['admins']['password'][$admin]))) {
-               // Search for admin
-               $result = SQL_QUERY_ESC("SELECT HIGH_PRIORITY `password` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `login`='%s' LIMIT 1",
-                       array($admin), __FUNCTION__, __LINE__);
+                               // Temporary cache it
+                               setAdminHash($admin, $passDB);
 
-               // Is he admin?
-               $passDB = '';
-               if (SQL_NUMROWS($result) == 1) {
-                       // Admin login was found so let's load password from DB
-                       list($passDB) = SQL_FETCHROW($result);
+                               // Generate password hash
+                               $valPass = generatePassString($passDB);
+                       } // END - if
 
-                       // Temporary cache it
-                       $GLOBALS['cache_array']['admins']['password'][$admin] = $passDB;
+                       // Free memory
+                       SQL_FREERESULT($result);
+               }
 
-                       // Generate password hash
-                       $valPass = generatePassString($passDB);
+               if (!empty($valPass)) {
+                       // Check if password is valid
+                       //* DEBUG: */ print(__FUNCTION__ . ':(' . $valPass . '==' . $passCookie . ')='.intval($valPass == $passCookie).'<br />');
+                       $GLOBALS['is_admin'][$admin] = (($valPass == $passCookie) || ((strlen($valPass) == 32) && ($valPass == md5($passCookie))) || (($valPass == '*FAILED*') && (!isExtensionActive('cache'))));
                } // END - if
-
-               // Free memory
-               SQL_FREERESULT($result);
-       }
-
-       if (!empty($valPass)) {
-               // Check if password is valid
-               //* DEBUG: */ outputHtml(__FUNCTION__."*".$valPass.'/'.$passCookie."*<br />");
-               $ret = (($valPass == $passCookie) || ((strlen($valPass) == 32) && ($valPass == md5($passCookie))) || (($valPass == "*FAILED*") && (!isExtensionActive('cache'))));
        } // END - if
 
        // Return result of comparision
-       return $ret;
+       return $GLOBALS['is_admin'][$admin];
 }
 
 // Generates a list of "max receiveable emails per day"
@@ -766,9 +835,9 @@ function isEmailTaken ($email) {
 }
 
 // Validate the given menu action
-function isMenuActionValid ($mode, $action, $what, $UPDATE=false) {
+function isMenuActionValid ($mode, $action, $what, $updateEntry=false) {
        // Is the cache entry there and we shall not update?
-       if ((isset($GLOBALS['action_valid'][$mode][$action][$what])) && ($UPDATE === false)) {
+       if ((isset($GLOBALS['action_valid'][$mode][$action][$what])) && ($updateEntry === false)) {
                // Count cache hit
                incrementStatsEntry('cache_hits');
 
@@ -783,8 +852,8 @@ function isMenuActionValid ($mode, $action, $what, $UPDATE=false) {
        $add = '';
        if ((!isAdmin()) && ($mode != 'admin')) $add = " AND `locked`='N'";
 
-       //* DEBUG: */ outputHtml(__LINE__.':'.$mode.'/'.$action.'/'.$what."*<br />");
-       if (($mode != 'admin') && ($UPDATE === true)) {
+       //* DEBUG: */ print(__LINE__.':'.$mode.'/'.$action.'/'.$what."*<br />");
+       if (($mode != 'admin') && ($updateEntry === true)) {
                // Update guest or member menu
                $sql = SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_%s_menu` SET counter=counter+1 WHERE `action`='%s' AND `what`='%s'".$add." LIMIT 1",
                        array($mode, $action, $what), __FUNCTION__, __LINE__, false);
@@ -800,7 +869,7 @@ function isMenuActionValid ($mode, $action, $what, $UPDATE=false) {
 
        // Run SQL command
        $result = SQL_QUERY($sql, __FUNCTION__, __LINE__);
-       if ($UPDATE === true) {
+       if ($updateEntry === true) {
                // Check updated/affected rows
                $ret = (SQL_AFFECTEDROWS() == 1);
        } else {
@@ -818,24 +887,22 @@ function isMenuActionValid ($mode, $action, $what, $UPDATE=false) {
        return $ret;
 }
 
-//
+// Send out mails depending on the 'mod/modes' combination
+// @TODO Lame description for this function
 function sendModeMails ($mod, $modes) {
        // Load hash
-       $result_main = SQL_QUERY_ESC("SELECT `password` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid`=%s AND `status`='CONFIRMED' LIMIT 1",
-               array(getUserId()), __FUNCTION__, __LINE__);
-       if (SQL_NUMROWS($result_main) == 1) {
-               // Load hash from database
-               list($hashDB) = SQL_FETCHROW($result_main);
-
+       if (fetchUserData(getUserId())) {
                // Extract salt from cookie
                $salt = substr(getSession('u_hash'), 0, -40);
 
                // Now let's compare passwords
-               $hash = generatePassString($hashDB);
+               $hash = generatePassString(getUserData('password'));
+
+               // Does the hash match or should we change it?
                if (($hash == getSession('u_hash')) || (postRequestElement('pass1') == postRequestElement('pass2'))) {
                        // Load user's data               0        1        2         3        4      5    6      7
                        $result = SQL_QUERY_ESC("SELECT gender, surname, family, street_nr, country, zip, city, email FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid`=%s AND password='%s' LIMIT 1",
-                               array(getUserId(), $hashDB), __FUNCTION__, __LINE__);
+                               array(getUserId(), getUserData('password')), __FUNCTION__, __LINE__);
                        if (SQL_NUMROWS($result) == 1) {
                                // Load the data
                                $content = SQL_FETCHARRAY($result, 0, false);
@@ -847,7 +914,7 @@ function sendModeMails ($mod, $modes) {
                                $content['gender'] = translateGender($content['gender']);
 
                                // Clear/init the content variable
-                               $content['info'] = '';
+                               $content['message'] = '';
 
                                switch ($mod) {
                                        case 'mydata':
@@ -864,10 +931,10 @@ function sendModeMails ($mod, $modes) {
 
                                                                default:
                                                                        logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown mode %s detected.", $mode));
-                                                                       $content['message'] = getMessage('MEMBER_UNKNOWN_MODE').": ".$mode."\n\n";
+                                                                       $content['message'] = getMessage('MEMBER_UNKNOWN_MODE') . ': ' . $mode . "\n\n";
                                                                        break;
                                                        } // END - switch
-                                               } // END - if
+                                               } // END - foreach
 
                                                if (isExtensionActive('country')) {
                                                        // Replace code with description
@@ -939,19 +1006,12 @@ function sendModeMails ($mod, $modes) {
        loadTemplate('admin_settings_saved', false, $content);
 }
 
-// Update module counter
-function countModuleHit($mod) {
-       // Do count all other modules but not accesses on CSS file css.php!
-       SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_mod_reg` SET `clicks`=`clicks`+1 WHERE `module`='%s' LIMIT 1",
-               array($mod), __FUNCTION__, __LINE__);
-}
-
 // Get action value from mode (admin/guest/member) and what-value
 function getModeAction ($mode, $what) {
        // Init status
        $ret = '';
 
-       //* DEBUG: */ outputHtml(__LINE__.'='.$mode.'/'.$what.'/'.getAction()."=<br />");
+       //* DEBUG: */ print(__LINE__.'='.$mode.'/'.$what.'/'.getAction()."=<br />");
        if ((empty($what)) && ($mode != 'admin')) {
                $what = getConfig('index_home');
        } // END - if
@@ -972,7 +1032,7 @@ function getModeAction ($mode, $what) {
                // Get it directly from URL
                return getAction();
        }
-       //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ret=".$ret."<br />");
+       //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): ret=".$ret.'<br />');
 
        // Does the module have a menu?
        if (ifModuleHasMenu($mode)) {
@@ -995,9 +1055,8 @@ function getModeAction ($mode, $what) {
        } elseif ((!isExtensionInstalled('sql_patches')) && ($mode != 'admin')) {
                // No sql_patches installed, but maybe we need to register an admin?
                if (isAdminRegistered()) {
-                       // Redirect
-                       // @TODO Why does this lead into an endless loop but we still need it???
-                       // @TODO Commented out redirectToUrl('admin.php');
+                       // Redirect to admin area
+                       redirectToUrl('admin.php');
                } // END - if
        }
 
@@ -1011,7 +1070,7 @@ function getCategory ($cid) {
        $ret = getMessage('_CATEGORY_404');
 
        // Is the category id set?
-       if ($cid == '0') {
+       if ($cid == 0) {
                // No category
                $ret = getMessage('_CATEGORY_NONE');
        } elseif ($cid > 0) {
@@ -1080,7 +1139,7 @@ function getPaymentPoints ($pid, $lookFor = 'price') {
        return $ret;
 }
 
-// Remove a receiver's ID from $receivers and add a link for him to confirm
+// Remove a receiver's id from $receivers and add a link for him to confirm
 function removeReceiver (&$receivers, $key, $userid, $pool_id, $stats_id = '', $bonus = false) {
        // Default is not removed
        $ret = 'failed';
@@ -1092,7 +1151,7 @@ function removeReceiver (&$receivers, $key, $userid, $pool_id, $stats_id = '', $
 
                // Is there already a line for this user available?
                if ($stats_id > 0) {
-                       // Only when we got a real stats ID continue searching for the entry
+                       // Only when we got a real stats id continue searching for the entry
                        $type = 'NORMAL'; $rowName = 'stats_id';
                        if ($bonus) { $type = 'BONUS'; $rowName = 'bonus_id'; }
 
@@ -1123,7 +1182,7 @@ function removeReceiver (&$receivers, $key, $userid, $pool_id, $stats_id = '', $
 // Calculate sum (default) or count records of given criteria
 function countSumTotalData ($search, $tableName, $lookFor = 'id', $whereStatement = 'userid', $countRows = false, $add = '') {
        $ret = 0;
-       //* DEBUG: */ outputHtml($search.'/'.$tableName.'/'.$lookFor.'/'.$whereStatement.'/'.$add.'<br />');
+       //* DEBUG: */ print($search.'/'.$tableName.'/'.$lookFor.'/'.$whereStatement.'/'.$add.'<br />');
        if ((empty($search)) && ($search != '0')) {
                // Count or sum whole table?
                if ($countRows === true) {
@@ -1137,12 +1196,12 @@ function countSumTotalData ($search, $tableName, $lookFor = 'id', $whereStatemen
                }
        } elseif (($countRows === true) || ($lookFor == 'userid')) {
                // Count rows
-               //* DEBUG: */ outputHtml("COUNT!<br />");
+               //* DEBUG: */ print("COUNT!<br />");
                $result = SQL_QUERY_ESC("SELECT COUNT(`%s`) FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s'".$add,
                        array($lookFor, $tableName, $whereStatement, $search), __FUNCTION__, __LINE__);
        } else {
                // Add all rows
-               //* DEBUG: */ outputHtml("SUM!<br />");
+               //* DEBUG: */ print("SUM!<br />");
                $result = SQL_QUERY_ESC("SELECT SUM(`%s`) FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s'".$add,
                        array($lookFor, $tableName, $whereStatement, $search), __FUNCTION__, __LINE__);
        }
@@ -1159,10 +1218,11 @@ function countSumTotalData ($search, $tableName, $lookFor = 'id', $whereStatemen
                $ret = '0.00000';
        } elseif (''.$ret.'' == '') {
                // Fix empty result
-               $ret = '0';
+               $ret = 0;
        }
 
        // Return value
+       //* DEBUG: */ print 'ret='.$ret.'<br />';
        return $ret;
 }
 // Getter fro ref level percents
@@ -1171,19 +1231,19 @@ function getReferalLevelPercents ($level) {
        $per = 0;
 
        // Do we have cache?
-       if ((isset($GLOBALS['cache_array']['ref_depths']['level'])) && (isExtensionActive('cache'))) {
+       if ((isset($GLOBALS['cache_array']['refdepths']['level'])) && (isExtensionActive('cache'))) {
                // First look for level
-               $key = array_search($level, $GLOBALS['cache_array']['ref_depths']['level']);
+               $key = array_search($level, $GLOBALS['cache_array']['refdepths']['level']);
                if ($key !== false) {
                        // Entry found!
-                       $per = $GLOBALS['cache_array']['ref_depths']['percents'][$key];
+                       $per = $GLOBALS['cache_array']['refdepths']['percents'][$key];
 
                        // Count cache hit
                        incrementStatsEntry('cache_hits');
-               }
+               } // END - if
        } elseif (!isExtensionActive('cache')) {
                // Get referal data
-               $result_level = SQL_QUERY_ESC("SELECT percents FROM `{?_MYSQL_PREFIX?}_refdepths` WHERE level='%s' LIMIT 1",
+               $result_level = SQL_QUERY_ESC("SELECT `percents` FROM `{?_MYSQL_PREFIX?}_refdepths` WHERE `level`='%s' LIMIT 1",
                        array(bigintval($level)), __FUNCTION__, __LINE__);
 
                // Entry found?
@@ -1205,7 +1265,7 @@ function getReferalLevelPercents ($level) {
  * Dynamic referal system, can also send mails!
  *
  * subject     = Subject line, write in lower-case letters and underscore is allowed
- * userid         = Referal ID wich should receive...
+ * userid         = Referal id wich should receive...
  * points      = ... xxx points
  * sendNotify  = shall I send the referal an email or not?
  * rid         = inc/modules/guest/what-confirm.php need this
@@ -1213,13 +1273,13 @@ function getReferalLevelPercents ($level) {
  * add_mode    = Add points only to $userid or also refs? (WARNING! Changing 'ref' to 'direct'
  *               for default value will cause no referal will get points ever!!!)
  */
-function addPointsThroughReferalSystem ($subject, $userid, $points, $sendNotify = false, $rid = '0', $locked = false, $add_mode = 'ref') {
-       //* DEBUG: */ outputHtml("----------------------- <font color=\"#00aa00\">".__FUNCTION__." - ENTRY</font> ------------------------<ul><li>\n");
+function addPointsThroughReferalSystem ($subject, $userid, $points, $sendNotify = false, $rid = 0, $locked = false, $add_mode = 'ref') {
+       //* DEBUG: */ print("----------------------- <font color=\"#00aa00\">".__FUNCTION__." - ENTRY</font> ------------------------<ul><li>\n");
        // Convert mode to lower-case
        $add_mode = strtolower($add_mode);
 
        // When $userid = 0 add points to jackpot
-       if (($userid == '0') && (isExtensionActive('jackpot'))) {
+       if (($userid == 0) && (isExtensionActive('jackpot'))) {
                // Add points to jackpot
                addPointsToJackpot($points);
                return;
@@ -1230,7 +1290,7 @@ function addPointsThroughReferalSystem ($subject, $userid, $points, $sendNotify
                'subject'  => $subject,
                'userid'   => $userid,
                'points'   => $points,
-               'notify'   => $notify,
+               'notify'   => $sendNotify,
                'rid'      => $rid,
                'locked'   => $locked,
                'mode'     => 'add',
@@ -1243,12 +1303,12 @@ function addPointsThroughReferalSystem ($subject, $userid, $points, $sendNotify
        // Count up referal depth
        if (!isset($GLOBALS['ref_level'])) {
                // Initialialize referal system
-               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): Referal system initialized!<br />");
+               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): Referal system initialized!<br />");
                $GLOBALS['ref_level'] = 0;
        } else {
                // Increase referal level
                $GLOBALS['ref_level']++;
-               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): Referal level increased. DEPTH={$GLOBALS['ref_level']}<br />");
+               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>): Referal level increased. DEPTH={$GLOBALS['ref_level']}<br />");
        }
 
        // Default is 'normal' points
@@ -1258,60 +1318,56 @@ function addPointsThroughReferalSystem ($subject, $userid, $points, $sendNotify
        if ($locked === true) $data = 'locked_points';
 
        // Check user account
-       $result_user = SQL_QUERY_ESC("SELECT `refid`, `email` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid`=%s AND `status`='CONFIRMED' LIMIT 1",
-               array(bigintval($userid)), __FUNCTION__, __LINE__);
-
-       //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},numRows=".SQL_NUMROWS($result_user).",points={$points}<br />");
-       if (SQL_NUMROWS($result_user) == 1) {
+       //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},points={$points}<br />");
+       if (fetchUserData($userid)) {
                // This is the user and his ref
-               list($ref, $email) = SQL_FETCHROW($result_user);
-               $GLOBALS['cache_array']['add_userid'][$ref] = $userid;
+               $GLOBALS['cache_array']['add_userid'][getUserData('refid')] = $userid;
 
                // Get percents
                $per = getReferalLevelPercents($GLOBALS['ref_level']);
-               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},points={$points},depth={$GLOBALS['ref_level']},per={$per},mode={$add_mode}<br />");
+               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},points={$points},depth={$GLOBALS['ref_level']},per={$per},mode={$add_mode}<br />");
 
                // Some percents found?
                if ($per > 0) {
                        // Calculate new points
-                       //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},points={$points},per={$per},depth={$GLOBALS['ref_level']}<br />");
+                       //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},points={$points},per={$per},depth={$GLOBALS['ref_level']}<br />");
                        $ref_points = $points * $per / 100;
 
                        // Pay refback here if level > 0 and in ref-mode
                        if ((isExtensionActive('refback')) && ($GLOBALS['ref_level'] > 0) && ($per < 100) && ($add_mode == "ref") && (isset($GLOBALS['cache_array']['add_userid'][$userid]))) {
-                               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},data={$GLOBALS['cache_array']['add_userid'][$userid]},ref_points={$ref_points},depth={$GLOBALS['ref_level']} - BEFORE!<br />");
+                               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},data={$GLOBALS['cache_array']['add_userid'][$userid]},ref_points={$ref_points},depth={$GLOBALS['ref_level']} - BEFORE!<br />");
                                $ref_points = addRefbackPoints($GLOBALS['cache_array']['add_userid'][$userid], $userid, $points, $ref_points);
-                               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},data={$GLOBALS['cache_array']['add_userid'][$userid]},ref_points={$ref_points},depth={$GLOBALS['ref_level']} - AFTER!<br />");
+                               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},data={$GLOBALS['cache_array']['add_userid'][$userid]},ref_points={$ref_points},depth={$GLOBALS['ref_level']} - AFTER!<br />");
                        } // END - if
 
                        // Update points...
                        SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_user_points` SET `%s`=`%s`+%s WHERE `userid`=%s AND `ref_depth`='%s' LIMIT 1",
                                array($data, $data, $ref_points, bigintval($userid), bigintval($GLOBALS['ref_level'])), __FUNCTION__, __LINE__);
-                       //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):data={$data},ref_points={$ref_points},userid={$userid},depth={$GLOBALS['ref_level']},mode={$add_mode} - UPDATE! (".SQL_AFFECTEDROWS().")<br />");
+                       //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):data={$data},ref_points={$ref_points},userid={$userid},depth={$GLOBALS['ref_level']},mode={$add_mode} - UPDATE! (".SQL_AFFECTEDROWS().")<br />");
 
                        // No entry updated?
                        if (SQL_AFFECTEDROWS() < 1) {
                                // First ref in this level! :-)
                                SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_user_points` (`userid`,`ref_depth`,`%s`) VALUES (%s,'%s',%s)",
                                        array($data, bigintval($userid), bigintval($GLOBALS['ref_level']), $ref_points), __FUNCTION__, __LINE__);
-                               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):data={$data},ref_points={$ref_points},userid={$userid},depth={$GLOBALS['ref_level']},mode={$add_mode} - INSERTED! (".SQL_AFFECTEDROWS().")<br />");
+                               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):data={$data},ref_points={$ref_points},userid={$userid},depth={$GLOBALS['ref_level']},mode={$add_mode} - INSERTED! (".SQL_AFFECTEDROWS().")<br />");
                        } // END - if
 
                        // Points updated, maybe I shall send him an email?
-                       if (($sendNotify === true) && ($ref > 0) && ($locked === false)) {
+                       if (($sendNotify === true) && (getUserData('refid') > 0) && ($locked === false)) {
                                // Prepare content
                                $content = array(
                                        'percents' => $per,
                                        'level'    => bigintval($GLOBALS['ref_level']),
                                        'points'   => $ref_points,
-                                       'refid'    => bigintval($ref)
+                                       'refid'    => getUserData('refid')
                                );
 
                                // Load email template
                                $message = loadEmailTemplate('confirm-referal', $content, bigintval($userid));
 
-                               sendEmail($email, THANX_REFERRAL_ONE, $message);
-                       } elseif (($sendNotify) && ($ref == 0) && ($locked === false) && ($add_mode == 'direct')) {
+                               sendEmail(getUserData('email'), THANX_REFERAL_ONE, $message);
+                       } elseif (($sendNotify) && (getUserData('refid') == 0) && ($locked === false) && ($add_mode == 'direct')) {
                                // Prepare content
                                $content = array(
                                        'text'   => getMessage('REASON_DIRECT_PAYMENT'),
@@ -1322,62 +1378,61 @@ function addPointsThroughReferalSystem ($subject, $userid, $points, $sendNotify
                                $message = loadEmailTemplate('add-points', $content, $userid);
 
                                // And sent it away
-                               sendEmail($email, getMessage('SUBJECT_DIRECT_PAYMENT'), $message);
+                               sendEmail(getUserData('email'), getMessage('SUBJECT_DIRECT_PAYMENT'), $message);
                                if (!isGetRequestElementSet('mid')) loadTemplate('admin_settings_saved', false, getMessage('ADMIN_POINTS_ADDED'));
                        }
 
                        // Maybe there's another ref?
-                       if (($ref > 0) && ($points > 0) && ($ref != $userid) && ($add_mode == 'ref')) {
+                       if ((getUserData('refid') > 0) && ($points > 0) && (getUserData('refid') != $userid) && ($add_mode == 'ref')) {
                                // Then let's credit him here...
-                               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},ref={$ref},points={$points} - ADVANCE!<br />");
-                               addPointsThroughReferalSystem(sprintf("%s_ref:%s", $subject, $GLOBALS['ref_level']), $ref, $points, $sendNotify, $ref, $locked);
+                               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},ref=".getUserData('refid').",points={$points} - ADVANCE!<br />");
+                               addPointsThroughReferalSystem(sprintf("%s_ref:%s", $subject, $GLOBALS['ref_level']), getUserData('refid'), $points, $sendNotify, getUserData('refid'), $locked);
                        } // END - if
                } // END - if
        } // END - if
 
-       // Free result
-       SQL_FREERESULT($result_user);
-       //* DEBUG: */ outputHtml("</li></ul>----------------------- <font color=\"#aa0000\">".__FUNCTION__." - EXIT</font> ------------------------<br />");
+       //* DEBUG: */ print("</li></ul>----------------------- <font color=\"#aa0000\">".__FUNCTION__." - EXIT</font> ------------------------<br />");
 }
 
 // Updates the referal counter
 function updateReferalCounter ($userid) {
        // Make it sure referal level zero (member him-/herself) is at least selected
        if (empty($GLOBALS['cache_array']['ref_level'][$userid])) $GLOBALS['cache_array']['ref_level'][$userid] = 1;
-       //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},level={$GLOBALS['cache_array']['ref_level'][$userid]}<br />");
+       //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},level={$GLOBALS['cache_array']['ref_level'][$userid]}<br />");
 
        // Update counter
        SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_refsystem` SET `counter`=`counter`+1 WHERE `userid`=%s AND `level`='%s' LIMIT 1",
                array(bigintval($userid), $GLOBALS['cache_array']['ref_level'][$userid]), __FUNCTION__, __LINE__);
 
        // When no entry was updated then we have to create it here
-       //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):updated=".SQL_AFFECTEDROWS()."<br />");
+       //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):updated=".SQL_AFFECTEDROWS().'<br />');
        if (SQL_AFFECTEDROWS() < 1) {
                // First count!
                SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_refsystem` (`userid`, `level`, `counter`) VALUES (%s,%s,1)",
                        array(bigintval($userid), $GLOBALS['cache_array']['ref_level'][$userid]), __FUNCTION__, __LINE__);
-               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid}<br />");
+               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid}<br />");
        } // END - if
 
-       // Check for his referal
-       $result = SQL_QUERY_ESC("SELECT `refid` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid`=%s LIMIT 1",
-               array(bigintval($userid)), __FUNCTION__, __LINE__);
+       // Init referal id
+       $ref = 0;
 
-       // Load refid
-       list($ref) = SQL_FETCHROW($result);
+       // Check for his referal
+       if (fetchUserData($userid)) {
+               // Get it
+               $ref = getUserData('refid');
+       } // END - if
 
-       // Free memory
-       SQL_FREERESULT($result);
-       //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},ref={$ref}<br />");
+       //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):userid={$userid},ref={$ref}<br />");
 
        // When he has a referal...
        if (($ref > 0) && ($ref != $userid)) {
                // Move to next referal level and count his counter one up!
-               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):ref={$ref} - ADVANCE!<br />");
-               $GLOBALS['cache_array']['ref_level'][$userid]++; updateReferalCounter($ref);
-       } elseif ((($ref == $userid) || ($ref == 0)) && (getExtensionVersion('cache') >= '0.1.2')) {
+               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):ref={$ref} - ADVANCE!<br />");
+               $GLOBALS['cache_array']['ref_level'][$userid]++;
+               updateReferalCounter($ref);
+       } elseif ((($ref == $userid) || ($ref == 0)) && (isExtensionInstalledAndNewer('cache', '0.1.2'))) {
                // Remove cache here
-               //* DEBUG: */ outputHtml(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):ref={$ref} - CACHE!<br />");
+               //* DEBUG: */ print(__FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):ref={$ref} - CACHE!<br />");
                rebuildCacheFile('refsystem', 'refsystem');
        }
 
@@ -1406,15 +1461,15 @@ function sendAdminEmails ($subj, $message) {
        // Really simple... ;-)
 }
 
-// Get ID number from administrator's login name
+// Get id number from administrator's login name
 function getAdminId ($login) {
        // By default no admin is found
        $ret = '-1';
 
        // Check cache
-       if (isset($GLOBALS['cache_array']['admins']['admin_id'][$login])) {
+       if (isset($GLOBALS['cache_array']['admin']['admin_id'][$login])) {
                // Use it if found to save SQL queries
-               $ret = $GLOBALS['cache_array']['admins']['admin_id'][$login];
+               $ret = $GLOBALS['cache_array']['admin']['admin_id'][$login];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
@@ -1451,26 +1506,26 @@ function getCurrentAdminId () {
 }
 
 // Get password hash from administrator's login name
-function getAdminHash ($adminId) {
+function getAdminHash ($admin) {
        // By default an invalid hash is returned
        $ret = '-1';
 
-       if (isset($GLOBALS['cache_array']['admins']['password'][$adminId])) {
+       if (isAdminHashSet($admin)) {
                // Check cache
-               $ret = $GLOBALS['cache_array']['admins']['password'][$adminId];
+               $ret = $GLOBALS['cache_array']['admin']['password'][$admin];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
        } elseif (!isExtensionActive('cache')) {
                // Load from database
                $result = SQL_QUERY_ESC("SELECT password FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1",
-               array($adminId), __FUNCTION__, __LINE__);
+                       array($admin), __FUNCTION__, __LINE__);
                if (SQL_NUMROWS($result) == 1) {
                        // Fetch data
                        list($ret) = SQL_FETCHROW($result);
 
                        // Set cache
-                       $GLOBALS['cache_array']['admins']['password'][$adminId] = $ret;
+                       setAdminHash($admin, $ret);
                } // END - if
 
                // Free result
@@ -1484,9 +1539,9 @@ function getAdminLogin ($adminId) {
        // By default a non-existent login is returned (other functions react on this!)
        $ret = '***';
 
-       if (isset($GLOBALS['cache_array']['admins']['login'][$adminId])) {
+       if (isset($GLOBALS['cache_array']['admin']['login'][$adminId])) {
                // Get cache
-               $ret = $GLOBALS['cache_array']['admins']['login'][$adminId];
+               $ret = $GLOBALS['cache_array']['admin']['login'][$adminId];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
@@ -1499,7 +1554,7 @@ function getAdminLogin ($adminId) {
                        list($ret) = SQL_FETCHROW($result);
 
                        // Set cache
-                       $GLOBALS['cache_array']['admins']['login'][$adminId] = $ret;
+                       $GLOBALS['cache_array']['admin']['login'][$adminId] = $ret;
                } // END - if
 
                // Free memory
@@ -1513,9 +1568,9 @@ function getAdminEmail ($adminId) {
        // By default an invalid emails is returned
        $ret = '***';
 
-       if (isset($GLOBALS['cache_array']['admins']['email'][$adminId])) {
+       if (isset($GLOBALS['cache_array']['admin']['email'][$adminId])) {
                // Get cache
-               $ret = $GLOBALS['cache_array']['admins']['email'][$adminId];
+               $ret = $GLOBALS['cache_array']['admin']['email'][$adminId];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
@@ -1528,7 +1583,7 @@ function getAdminEmail ($adminId) {
                        list($ret) = SQL_FETCHROW($result_admin_id);
 
                        // Set cache
-                       $GLOBALS['cache_array']['admins']['email'][$adminId] = $ret;
+                       $GLOBALS['cache_array']['admin']['email'][$adminId] = $ret;
                } // END - if
 
                // Free result
@@ -1548,9 +1603,9 @@ function getAdminDefaultAcl ($adminId) {
        if (!isExtensionActive('sql_patches')) {
                // Not found, which is bad, so we need to allow all
                $ret =  'allow';
-       } elseif (isset($GLOBALS['cache_array']['admins']['def_acl'][$adminId])) {
+       } elseif (isset($GLOBALS['cache_array']['admin']['def_acl'][$adminId])) {
                // Use cache
-               $ret = $GLOBALS['cache_array']['admins']['def_acl'][$adminId];
+               $ret = $GLOBALS['cache_array']['admin']['def_acl'][$adminId];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
@@ -1563,7 +1618,7 @@ function getAdminDefaultAcl ($adminId) {
                        list($ret) = SQL_FETCHROW($result_admin_id);
 
                        // Set cache
-                       $GLOBALS['cache_array']['admins']['def_acl'][$adminId] = $ret;
+                       $GLOBALS['cache_array']['admin']['def_acl'][$adminId] = $ret;
                }
 
                // Free result
@@ -1642,18 +1697,24 @@ function FILTER_ACTIVATE_EXCHANGE () {
                updateConfiguration('activate_xchange' ,0);
 
                // Rebuild cache
-               rebuildCacheFile('modreg', 'modreg');
+               rebuildCacheFile('modules', 'modules');
        } // END - if
 }
 
 // Deletes a user account with given reason
 function deleteUserAccount ($userid, $reason) {
        $points = 0;
-       $result = SQL_QUERY_ESC("SELECT (SUM(p.points) - d.used_points) AS points
-FROM `{?_MYSQL_PREFIX?}_user_points` AS p
-LEFT JOIN `{?_MYSQL_PREFIX?}_user_data` AS d
-ON p.userid=d.userid
-WHERE p.userid=%s", array(bigintval($userid)), __FUNCTION__, __LINE__);
+       $result = SQL_QUERY_ESC("SELECT
+       (SUM(p.points) - d.used_points) AS points
+FROM
+       `{?_MYSQL_PREFIX?}_user_points` AS p
+LEFT JOIN
+       `{?_MYSQL_PREFIX?}_user_data` AS d
+ON
+       p.userid=d.userid
+WHERE
+       p.userid=%s",
+               array(bigintval($userid)), __FUNCTION__, __LINE__);
        if (SQL_NUMROWS($result) == 1) {
                // Save his points to add them to the jackpot
                list($points) = SQL_FETCHROW($result);
@@ -1718,7 +1779,7 @@ function getWhatFromModule ($modCheck) {
        // Default is empty
        $what = '';
 
-       //* DEBUG: */ outputHtml(__LINE__.'!'.$modCheck."!<br />");
+       //* DEBUG: */ print(__LINE__.'!'.$modCheck."!<br />");
        switch ($modCheck) {
                case 'admin':
                        $what = 'overview';
@@ -1726,7 +1787,14 @@ function getWhatFromModule ($modCheck) {
 
                case 'login':
                case 'index':
-                       $what = getConfig('index_home');
+                       // Is ext-sql_patches installed and newer than 0.0.5?
+                       if (isExtensionInstalledAndNewer('sql_patches', '0.0.5')) {
+                               // Use it from config
+                               $what = getConfig('index_home');
+                       } else {
+                               // Use default 'welcome'
+                               $what = 'welcome';
+                       }
                        break;
 
                default:
@@ -1914,7 +1982,7 @@ VALUES ('%s','%s','%s','%s','%s','NEW', UNIX_TIMESTAMP(),'%s','%s','%s','%s')",
 // Generate a receiver list for given category and maximum receivers
 function generateReceiverList ($cat, $receiver, $mode = '') {
        // Init variables
-       $CAT_TABS     = "%s";
+       $CAT_TABS     = '';
        $CAT_WHERE    = '';
        $receiverList = '';
        $result       = false;
@@ -1933,7 +2001,7 @@ function generateReceiverList ($cat, $receiver, $mode = '') {
        if ($cat > 0) {
                // Select category
                $CAT_TABS  = "LEFT JOIN `{?_MYSQL_PREFIX?}_user_cats` AS c ON d.userid=c.userid";
-               $CAT_WHERE = " AND c.cat_id=%s";
+               $CAT_WHERE = sprintf(" AND c.cat_id=%s", $cat);
        } // END - if
 
        // Exclude users in holiday?
@@ -1944,12 +2012,16 @@ function generateReceiverList ($cat, $receiver, $mode = '') {
 
        if ((isExtensionActive('html_mail')) && ($mode == 'html')) {
                // Only include HTML receivers
-               $result = SQL_QUERY_ESC("SELECT d.userid FROM `{?_MYSQL_PREFIX?}_user_data` AS d ".$CAT_TABS." WHERE d.`status`='CONFIRMED' AND d.`html`='Y'".$CAT_WHERE." ORDER BY d.%s %s LIMIT %s",
-               array($cat, getConfig('order_select'), getConfig('order_mode'), $receiver), __FUNCTION__, __LINE__);
+               $result = SQL_QUERY_ESC("SELECT d.userid FROM `{?_MYSQL_PREFIX?}_user_data` AS d ".$CAT_TABS." WHERE d.`status`='CONFIRMED' AND d.`html`='Y'".$CAT_WHERE." ORDER BY d.{?order_select?} {?order_mode?} LIMIT %s",
+                       array(
+                               $receiver
+                       ), __FUNCTION__, __LINE__);
        } else {
                // Include all
-               $result = SQL_QUERY_ESC("SELECT d.userid FROM `{?_MYSQL_PREFIX?}_user_data` AS d ".$CAT_TABS." WHERE d.`status`='CONFIRMED'".$CAT_WHERE." ORDER BY d.%s %s LIMIT %s",
-               array($cat, getConfig('order_select'), getConfig('order_mode'), $receiver), __FUNCTION__, __LINE__);
+               $result = SQL_QUERY_ESC("SELECT d.userid FROM `{?_MYSQL_PREFIX?}_user_data` AS d ".$CAT_TABS." WHERE d.`status`='CONFIRMED'".$CAT_WHERE." ORDER BY d.{?order_select?} {?order_mode?} LIMIT %s",
+                       array(
+                               $receiver
+                       ), __FUNCTION__, __LINE__);
        }
 
        // Entries found?
@@ -2035,7 +2107,7 @@ function insertUserStatsRecord ($userid, $type, $data) {
 
 // "Getter" for array for user refs and points in given level
 function getUserReferalPoints ($userid, $level) {
-       //* DEBUG: */ outputHtml("----------------------- <font color=\"#00aa00\">".__FUNCTION__." - ENTRY</font> ------------------------<ul><li>\n");
+       //* DEBUG: */ print("----------------------- <font color=\"#00aa00\">".__FUNCTION__." - ENTRY</font> ------------------------<ul><li>\n");
        // Default is no refs and no nickname
        $add = '';
        $refs = array();
@@ -2108,7 +2180,7 @@ ORDER BY ur.refid ASC",
        SQL_FREERESULT($result);
 
        // Return result
-       //* DEBUG: */ outputHtml("</li></ul>----------------------- <font color=\"#aa0000\">".__FUNCTION__." - EXIT</font> ------------------------<br />");
+       //* DEBUG: */ print("</li></ul>----------------------- <font color=\"#aa0000\">".__FUNCTION__." - EXIT</font> ------------------------<br />");
        return $refs;
 }