-// Update "refback table"
-function updateRefbackTable ($userid) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
- // Load all referals
- loadRefbackTable($userid);
-
- // Add missing level > 1
- addMissingRefbackLevels($userid);
-
- // The last step is to flush all userid's entries to the database
- flushRefbackTableToDatabase($userid);
-
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - EXIT!');
-}
-
-// Loads all referals for given userid
-function loadRefbackTable ($userid) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
- // Init array
- $GLOBALS['refback_refid'][$userid] = array();
-
- // Get all level entries from the refsystem table
- $result = SQL_QUERY_ESC('SELECT `level` FROM `{?_MYSQL_PREFIX?}_refsystem` WHERE `userid`=%s ORDER BY `level` ASC',
- array($userid), __FUNCTION__, __LINE__);
-
- // Do we have entries?
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',SQL_NUMROWS()=' . SQL_NUMROWS($result));
- if (SQL_NUMROWS($result) > 0) {
- // Then walk through all levels
- while (list($level) = SQL_FETCHROW($result)) {
- // Init array
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level);
- $GLOBALS['refback_refid'][$userid][$level] = array();
-
- // Level is = 1?
- if ($level == 1) {
- // Load all referals of this user
- $result_refs = SQL_QUERY_ESC('SELECT `userid` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `refid`=%s ORDER BY `userid` ASC',
- array($userid), __FUNCTION__, __LINE__);
-
- // Do we have entries?
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',SQL_NUMROWS()=' . SQL_NUMROWS($result_refs));
- if (SQL_NUMROWS($result_refs) > 0) {
- // Then again walk through all
- while (list($refid) = SQL_FETCHROW($result_refs)) {
- // Add this refid
- $GLOBALS['refback_refid'][$userid][$level][] = $refid;
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid);
- // Load the refid's array as well
- loadRefbackTable($refid);
- } // END - while
- } // END - if
-
- // Free result
- SQL_FREERESULT($result_refs);
- } // END - if
- } // END - while
- } // END - if
-
- // Free result
- SQL_FREERESULT($result);
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - EXIT!');
-}
-
-// Adds missing refback levels to the array
-function addMissingRefbackLevels ($userid) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
- // If the array is gone, you have called this function without calling loadRefbackTable()
- if (!isset($GLOBALS['refback_refid'][$userid])) {
- // Please fix your code
- debug_report_bug(__FUNCTION__, __LINE__, 'Called without calling loadRefbackTable() before! userid=' . $userid);
- } // END - if
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',count()=' . count($GLOBALS['refback_refid'][$userid]));
-
- // Now walk through the array, first levels
- foreach ($GLOBALS['refback_refid'][$userid] as $level=>$levelArray) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',count()=' . count($levelArray));
- // Next are the users
- foreach ($levelArray as $refid) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid);
- // Does the refid have an array?
- if (isset($GLOBALS['refback_refid'][$refid])) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid . ',count()=' . count($GLOBALS['refback_refid'][$refid]));
- // Okay, then walk through here, too
- foreach ($GLOBALS['refback_refid'][$refid] as $refLevel=>$refArray) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid . ',refLevel=' . $refLevel . ',count()=' . count($refArray));
- // Also walk through this one
- foreach ($refArray as $refRefid) {
- // Calculate new level
- $newLevel = $level + $refLevel;
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid . ',refLevel=' . $refLevel . ',refRefid=' . $refRefid . ',newLevel=' . $newLevel);
- // Is the refRefid not in?
- if ((!isset($GLOBALS['refback_refid'][$userid][$newLevel])) || (!in_array($refRefid, $GLOBALS['refback_refid'][$userid][$newLevel]))) {
- // Then we must add this ref's refid to the userid's next level
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',newLevel=' . $newLevel . ',refRefid=' . $refRefid . ' - ADDED!');
- $GLOBALS['refback_refid'][$userid][$newLevel][] = $refRefid;
- } // END - if
- } // END - foreach
- } // END - foreach
- } // END - foreach
- } // END - foreach
- } // END - foreach
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - EXIT!');
-}
-
-// Flush all entries for given userid to database
-function flushRefbackTableToDatabase ($userid) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
- // If the array is gone, you have called this function without calling loadRefbackTable()
- if (!isset($GLOBALS['refback_refid'][$userid])) {
- // Please fix your code
- debug_report_bug(__FUNCTION__, __LINE__, 'Called without calling loadRefbackTable() before! userid=' . $userid);
- } // END - if
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',count()=' . count($GLOBALS['refback_refid'][$userid]));
-
- // If no entries are there, skip this whole step
- if (count($GLOBALS['refback_refid'][$userid]) == 0) {
- // No entries found
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ABORTING...');
- return;
- } // END - if
-
- // Prepare SQL
- $SQL = 'INSERT INTO `{?_MYSQL_PREFIX?}_user_refs` (`userid`,`level`,`refid`) VALUES ';
-
- // Now walk through the array, first levels
- foreach ($GLOBALS['refback_refid'][$userid] as $level=>$levelArray) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',count()=' . count($levelArray));
- // Next are the users
- foreach ($levelArray as $refid) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid);
- // Query the user_refs table
- list($count) = SQL_FETCHROW(SQL_QUERY_ESC('SELECT COUNT(`id`) AS `count` FROM `{?_MYSQL_PREFIX?}_user_refs` WHERE `userid`=%s AND `level`=%s AND `refid`=%s LIMIT 1',
- array(
- $userid,
- $level,
- $refid
- ), __FUNCTION__, __LINE__));
-
- // Do we have no entry?
- if ($count == 0) {
- // Then add it to the SQL
- $SQL .= '(' . $userid . ',' . $level . ',' . $refid . '),';
- } // END - if
- } // END - foreach
- } // END - foreach
-
- // Remove last comma from SQL
- $SQL = substr($SQL, 0, -1);
-
- // And run it
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',SQL=' . $SQL);
- SQL_QUERY($SQL, __FUNCTION__, __LINE__);
-
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - EXIT!');
-}
-