+
+ // "Walk" back here
+ $cacheArray['ref_level'][$uid]--;
+
+ // Handle refback here
+ UPDATE_REFBACK_TABLE($uid);
+}
+// Update "refback table"
+function UPDATE_REFBACK_TABLE($uid)
+{
+ global $cacheArray, $cacheInstance;
+
+ // Make it sure referral level zero (member him-/herself) is at least selected
+ if (empty($cacheArray['back_level'])) $cacheArray['back_level'] = 1;
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},level={$cacheArray['back_level']}<br />\n";
+
+ // Init refid
+ $cacheArray['up_refid'][$cacheArray['back_level']] = 0;
+ $old = 0; $minus = 0;
+
+ // Check for his referral
+ $result_refid = SQL_QUERY_ESC("SELECT userid FROM "._MYSQL_PREFIX."_user_data WHERE refid=%s ORDER BY userid ASC",
+ array(bigintval($uid)), __FILE__, __LINE__);
+
+ // When no entry was updated then we have to create it here
+ //* DEBUG: */ echo __FUNCTION__.":found=".SQL_NUMROWS($result_refid)."<br />\n";
+ if (SQL_NUMROWS($result_refid) > 0) {
+ // Load all refids
+ while(list($cacheArray['up_refid'][$cacheArray['back_level']]) = SQL_FETCHROW($result_refid)) {
+ // Remmber userid
+ $cacheArray['up_userid'][$cacheArray['up_refid'][$cacheArray['back_level']]] = $uid;
+
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},ref={$cacheArray['up_refid'][$cacheArray['back_level']]}<br />\n";
+ // Refid set?
+ if (($cacheArray['up_refid'][$cacheArray['back_level']] > 0) && ($cacheArray['up_refid'][$cacheArray['back_level']] != $uid) && (!empty($cacheArray['up_refid'][$cacheArray['back_level']]))) {
+ // New userid?
+ if ((isset($cacheArray['up_refid'][$cacheArray['back_level']-1])) && (isset($cacheArray['up_userid'][$cacheArray['up_refid'][$cacheArray['back_level']-1]]))) {
+ // New userid!
+ $old = $uid;
+ $uid = $cacheArray['up_userid'][$cacheArray['up_refid'][$cacheArray['back_level']-1]];
+ $minus = 1;
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},old={$old},level={$cacheArray['back_level']},ref={$cacheArray['up_refid'][$cacheArray['back_level']]} - NEW UID!<br />\n";
+ } // END - if
+
+ // Check existence
+ $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_user_refs WHERE userid=%s AND level=%s AND refid=%s LIMIT 1",
+ array(bigintval($uid), $cacheArray['back_level'], bigintval($cacheArray['up_refid'][$cacheArray['back_level']])), __FILE__, __LINE__);
+
+ // Do we have no entry?
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},level={$cacheArray['back_level']},ref={$cacheArray['up_refid'][$cacheArray['back_level']]},minus={$minus},numRows=".SQL_NUMROWS($result)." - FOUND!<br />\n";
+ if (SQL_NUMROWS($result) == 0) {
+ // Insert this level
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},level={$cacheArray['back_level']},ref={$cacheArray['up_refid'][$cacheArray['back_level']]} - ADD!<br />\n";
+ $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_user_refs (userid, level, refid) VALUES (%s,%s,%s)",
+ array(bigintval($uid), $cacheArray['back_level'], bigintval($cacheArray['up_refid'][$cacheArray['back_level']])), __FILE__, __LINE__);
+
+ // Move to next referral level and count his counter one up!
+ $cacheArray['back_level']++; UPDATE_REFBACK_TABLE($cacheArray['up_refid'][($cacheArray['back_level'] - 1)]);
+ } // END - if
+
+ // Do we have another level here?
+ if ((($cacheArray['back_level']-$minus) > 0) && ($old > 0)) {
+ // Restore old one
+ $uid = $old;
+
+ // Shall we add this as well?
+ $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_user_refs WHERE userid=%s AND level=%s AND refid=%s LIMIT 1",
+ array(bigintval($uid), ($cacheArray['back_level']-$minus), bigintval($cacheArray['up_refid'][$cacheArray['back_level']])), __FILE__, __LINE__);
+
+ // Do we have no entry?
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},level=".($cacheArray['back_level']-$minus).",ref={$cacheArray['up_refid'][$cacheArray['back_level']]},numRows=".SQL_NUMROWS($result)." - BACK!<br />\n";
+ if (SQL_NUMROWS($result) == 0) {
+ // Insert this level
+ $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_user_refs (userid, level, refid) VALUES (%s,%s,%s)",
+ array(bigintval($uid), ($cacheArray['back_level']-$minus), bigintval($cacheArray['up_refid'][$cacheArray['back_level']])), __FILE__, __LINE__);
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},level=".($cacheArray['back_level']-$minus).",ref={$cacheArray['up_refid'][$cacheArray['back_level']]} - RETURNED!<br />\n";
+ } // END - if
+ } // END - if
+ } // END - if
+ } // END - while
+
+ // Free memory
+ SQL_FREERESULT($result_refid);
+ } // END - if
+
+ // When he has a referral...
+ if ((($cacheArray['up_refid'][$cacheArray['back_level']] == $uid) || ($cacheArray['up_refid'][$cacheArray['back_level']] == 0)) && (GET_EXT_VERSION("cache") >= "0.1.2") && (!isset($cacheArray['back_cached']))) {
+ // Remove cache here
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},ref={$cacheArray['up_refid'][$cacheArray['back_level']]} - CACHE!<br />\n";
+ if ($cacheInstance->cache_file("refback", true)) $cacheInstance->cache_destroy();
+ $cacheArray['back_cached'] = 1;
+ } // END - if
+
+ // "Walk" back here
+ $cacheArray['back_level']--;
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},level={$cacheArray['back_level']} - LEVEL!<br />\n";
+
+ // Fix empty refid
+ if (!isset($cacheArray['up_refid'][$cacheArray['back_level']-1])) $cacheArray['up_refid'][$cacheArray['back_level']-1] = 0;
+ //* DEBUG: */ echo __FUNCTION__.":uid={$uid},level={$cacheArray['back_level']},ref={$cacheArray['up_refid'][$cacheArray['back_level']-1]} - BACK!<br />\n";