]> git.mxchange.org Git - mailer.git/blobdiff - inc/referal-functions.php
No die() here
[mailer.git] / inc / referal-functions.php
index 89142bf61c6119e806dad9cb6aec97d99699945d..8868904eaddc30140d39e89c31f45f0dfbe77ccb 100644 (file)
@@ -92,7 +92,7 @@ function getReferalLevelPercents ($level) {
  * refid         = inc/modules/guest/what-confirm.php need this
  * locked        = Shall I pay it to normal (false) or locked (true) points ammount?
  */
-function addPointsThroughReferalSystem ($subject, $userid, $points, $refid = '0') {
+function addPointsThroughReferalSystem ($subject, $userid, $points, $refid = NULL) {
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'subject=' . $subject . ',userid=' . $userid . ',points=' . $points . ',refid=' . $refid . ' - ENTERED!');
        // By default nothing has been added
        $added = false;
@@ -304,11 +304,9 @@ function updateReferalCounter ($userid) {
                rebuildCache('refsystem', 'refsystem');
        }
 
-       // Handle refback here if extension is installed
-       // @TODO Rewrite this to a filter
-       if (isExtensionActive('refback')) {
-               updateRefbackTable($userid);
-       } // END - if
+       // Update the referal table
+       updateReferalTable($userid);
+
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . makeZeroToNull($ref) . ',level=' . makeZeroToNull($GLOBALS['cache_array']['ref_level'][$ref]) . ' - EXIT!');
 }
 
@@ -346,14 +344,14 @@ function getUserReferalPoints ($userid, $level) {
        $result = SQL_QUERY_ESC("SELECT
        ur.`id`, ur.`refid`, ud.`status`, ud.`last_online`, ud.`mails_confirmed`, ud.`emails_received`
 FROM
-       `{?_MYSQL_PREFIX?}_user_refs` AS ur
+       `{?_MYSQL_PREFIX?}_user_refs` AS `ur`
 LEFT JOIN
-       `{?_MYSQL_PREFIX?}_user_points` AS up
+       `{?_MYSQL_PREFIX?}_user_points` AS `up`
 ON
-       ur.refid=up.userid AND
-       (ur.level=0 OR ur.level IS NULL)
+       ur.`refid`=up.`userid` AND
+       (ur.`level`=0 OR ur.`level` IS NULL)
 LEFT JOIN
-       `{?_MYSQL_PREFIX?}_user_data` AS ud
+       `{?_MYSQL_PREFIX?}_user_data` AS `ud`
 ON
        ur.`refid`=ud.`userid`
 WHERE
@@ -374,7 +372,7 @@ ORDER BY
                        $row['points'] = getTotalPoints($row['refid']);
 
                        // Get unconfirmed mails
-                       $row['unconfirmed']  = countSumTotalData($row['refid'], 'user_links', 'id', 'userid', true);
+                       $row['unconfirmed'] = getTotalUnconfirmedMails($row['refid']);
 
                        // Init click rate with zero
                        $row['click_rate'] = '0';
@@ -502,5 +500,171 @@ function isPaymentRecipientNotificationEnabled ($subject) {
        return $isEnabled;
 }
 
+// Update "referal table"
+function updateReferalTable ($userid) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
+       // Load all referals
+       loadReferalTable($userid);
+
+       // Add missing level > 1
+       addMissingReferalLevels($userid);
+
+       // The last step is to flush all userid's entries to the database
+       flushReferalTableToDatabase($userid);
+
+       // Rebuild cache
+       rebuildCache('refsystem', 'refsystem');
+
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - EXIT!');
+}
+
+// Loads all referals for given userid
+function loadReferalTable ($userid) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
+       // Init array
+       $GLOBALS['referal_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['referal_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['referal_refid'][$userid][$level][] = $refid;
+                                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid);
+                                               // Load the refid's array as well
+                                               loadReferalTable($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 referal levels to the array
+function addMissingReferalLevels ($userid) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
+       // If the array is gone, you have called this function without calling loadReferalTable()
+       if (!isset($GLOBALS['referal_refid'][$userid])) {
+               // Please fix your code
+               debug_report_bug(__FUNCTION__, __LINE__, 'Called without calling loadReferalTable() before! userid=' . $userid);
+       } // END - if
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',count()=' . count($GLOBALS['referal_refid'][$userid]));
+
+       // Now walk through the array, first levels
+       foreach ($GLOBALS['referal_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['referal_refid'][$refid])) {
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refid=' . $refid . ',count()=' . count($GLOBALS['referal_refid'][$refid]));
+                               // Okay, then walk through here, too
+                               foreach ($GLOBALS['referal_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['referal_refid'][$userid][$newLevel])) || (!in_array($refRefid, $GLOBALS['referal_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['referal_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 flushReferalTableToDatabase ($userid) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - ENTERED!');
+       // If the array is gone, you have called this function without calling loadReferalTable()
+       if (!isset($GLOBALS['referal_refid'][$userid])) {
+               // Please fix your code
+               debug_report_bug(__FUNCTION__, __LINE__, 'Called without calling loadReferalTable() before! userid=' . $userid);
+       } // END - if
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',count()=' . count($GLOBALS['referal_refid'][$userid]));
+
+       // If no entries are there, skip this whole step
+       if (count($GLOBALS['referal_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 ';
+       $executeSql = false;
+
+       // Now walk through the array, first levels
+       foreach ($GLOBALS['referal_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 . '),';
+
+                               // Some has been added, so execute the query
+                               $executeSql = true;
+                       } // 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);
+       if ($executeSql === true) {
+               SQL_QUERY($SQL, __FUNCTION__, __LINE__);
+       } // END - if
+
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ' - EXIT!');
+}
+
 // [EOF]
 ?>