]> git.mxchange.org Git - mailer.git/blobdiff - inc/libs/refback_functions.php
Refback and referal points hopefully fixed:
[mailer.git] / inc / libs / refback_functions.php
index 59336045ee583af438905b60294043ed5c979e9d..5938bd79bf606dc7c665036ac70e95576c11ccb8 100644 (file)
@@ -55,38 +55,42 @@ function addRefbackPoints ($userid, $ref, $points, $ref_points) {
 
        // "Walk" through all level
        while ($content = SQL_FETCHARRAY($result_refs)) {
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'level=' . $content['level'] . ',percents=' . $content['percents'] . ' - LOOP START!');
                // Reset ref depths
                initReferalSystem();
 
-               // "Walk" through all refids
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',level=' . $content['level'] . ',percents=' . $content['refback_percents'] . ',points=' . $points . ' - LOOP START!');
-               foreach (getArrayFromRefbackLevel($userid, $content['level']) as $refid) {
-                       // Skip level zero or if both are the same
-                       if ($userid == $refid) {
-                               continue;
-                       } // END - if
+               // Init array
+               $refids = getArrayFromRefbackLevel($userid, $content['level']);
 
-                       // Get refback percents
-                       $percents = getRefbackPercents($userid, $refid);
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',refid=' . $refid . ',points=' . $points . ',percents=' . $percents);
+               // "Walk" through all refids
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',level=' . $content['level'] . ',percents=' . $content['percents'] . ',points=' . $points . ' - LOOP START!');
+               foreach ($refids as $refid) {
+                       /*
+                        * Get refback percents, do not swap $refid and $userid by the next
+                        * call. If you do so, you will check the wrong direction, $userid
+                        * is always bigger than $refid.
+                        */
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . makeNullToZero($refid) . ' - CALLING getRefbackPercents()');
+                       $content['refback_percents'] = getRefbackPercents($refid, $userid);
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . makeNullToZero($refid) . ',refback_percents=' . $content['refback_percents']);
 
                        // Some percents given?
-                       if ($percents > 0) {
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'points=' . $points . ',refback_percents=' . $content['refback_percents'] . ',percents=' . $percents . ',level=' . $content['level']);
+                       if ($content['refback_percents'] > 0) {
                                // Calculate points for refback
-                               $refback = $points * ($content['refback_percents'] / 100) * ($percents / 100);
+                               $refbackPoints = $points * ($content['percents'] / 100) * ($content['refback_percents'] / 100);
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'points=' . $points . ',percents=' . $content['percents'] . ',refback_percents=' . $content['refback_percents'] . ',level=' . $content['level'] . ',refback_points=' . $refbackPoints);
 
                                // Update refback table ('refid' and 'userid' must be exchanged!)
-                               SQL_QUERY_ESC("UPDATE
+                               SQL_QUERY_ESC('UPDATE
        `{?_MYSQL_PREFIX?}_user_refs`
 SET
        `refback_points`=`refback_points`+%s
 WHERE
        `userid`=%s AND
        `refid`=%s
-LIMIT 1",
+LIMIT 1',
                                        array(
-                                               $refback,
+                                               $refbackPoints,
                                                $refid,
                                                $userid
                                        ), __FUNCTION__, __LINE__);
@@ -94,17 +98,18 @@ LIMIT 1",
                                // Something must have been updated
                                if (SQL_HASZEROAFFECTED()) {
                                        // Please report this bug
-                                       debug_report_bug(__FUNCTION__, __LINE__, 'Nothing has been updated in user_refs,userid=' . $userid . ',refid=' . $refid . ',refback=' . $refback);
+                                       debug_report_bug(__FUNCTION__, __LINE__, 'Nothing has been updated in user_refs,userid=' . $userid . ',refid=' . makeNullToZero($refid) . ',refbackPoints=' . $refbackPoints);
                                } // END - if
 
                                // Add points again, but only directly
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refback=' . $refback . ',userid=' . $userid . ',ref=' . $ref . ',refid=' . $refid . ' - UPDATE! (' . SQL_AFFECTEDROWS() . ')');
-                               addPointsThroughReferalSystem(sprintf("refback:%s", $refid), $userid, $refback);
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refbackPoints=' . $refbackPoints . ',userid=' . $userid . ',ref=' . $ref . ',refid=' . makeNullToZero($refid) . ' - REFBACK-UPDATE! (' . SQL_AFFECTEDROWS() . ')');
+                               addPointsThroughReferalSystem(sprintf("refback:%s", $refid), $userid, $refbackPoints);
 
                                // Reduce points if refid is found
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . $refid . ',ref=' . $ref . ' - REDUCING?');
                                if ($refid == $ref) {
                                        // Reduce points here!
-                                       $return = $points * ($content['refback_percents'] / 100) - $refback;
+                                       $return = $points * ($content['percents'] / 100) - $refbackPoints;
                                        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'return=' . $return . ' - REDUCED!');
                                } // END - if
                        } // END - if
@@ -122,31 +127,40 @@ LIMIT 1",
        return $return;
 }
 
-// "Getter" for refback percents
-function getRefbackPercents ($userid, $ref) {
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ' - ENTERED!');
-       // Skip identical ids
-       if ($userid == $ref) {
+/**
+ * "Getter" for refback percents
+ *
+ * @param      $userid         "Current" user's userid
+ * @param      $refid          $userid has this userid as referal
+ * @return     $percents       Refback percents $userid has given to $refid
+ */
+function getRefbackPercents ($userid, $refid) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . $refid . ' - ENTERED!');
+       if ((!isValidUserId($userid)) || (!isValidUserId($refid))) {
+               // userid and/or refid is invalid
+               debug_report_bug(__FUNCTION__, __LINE__, 'userid=' . makeNullToZero($userid) . ', refid=' . makeNullToZero($refid) . ' - Both must be > 0');
+       } elseif ($userid == $refid) {
+               // Skip identical ids
                return 0;
        } // END - if
 
        // Is it cached?
-       if (!isset($GLOBALS['refback_percents'][$userid][$ref])) {
+       if (!isset($GLOBALS['refback_percents'][$userid][$refid])) {
                // Default is zero
-               $GLOBALS['refback_percents'][$userid][$ref] = '0';
+               $GLOBALS['refback_percents'][$userid][$refid] = '0';
 
                // Get percents from database
                $result = SQL_QUERY_ESC("SELECT `refback_percents` FROM `{?_MYSQL_PREFIX?}_user_refs` WHERE `userid`=%s AND `refid`=%s LIMIT 1",
-                       array($ref, $userid), __FUNCTION__, __LINE__);
+                       array($userid, $refid), __FUNCTION__, __LINE__);
 
                // Entry found? (Should be!)
                if (SQL_NUMROWS($result) == 1) {
                        // Fetch percents
-                       list($GLOBALS['refback_percents'][$userid][$ref]) = SQL_FETCHROW($result);
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',percents=' . $GLOBALS['refback_percents'][$userid][$ref]);
+                       list($GLOBALS['refback_percents'][$userid][$refid]) = SQL_FETCHROW($result);
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . $refid . ',percents=' . $GLOBALS['refback_percents'][$userid][$refid]);
                } else {
-                       // Debug log
-                       logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ' - No entry found. :-(');
+                       // Please report all findings
+                       debug_report_bug(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . $refid . ' - No entry found. :-(');
                }
 
                // Free result
@@ -154,13 +168,13 @@ function getRefbackPercents ($userid, $ref) {
        } // END - if
 
        // Return percents
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',refback_percents=' . $GLOBALS['refback_percents'][$userid][$ref] . ' - EXIT!');
-       return $GLOBALS['refback_percents'][$userid][$ref];
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . $refid . ',refback_percents=' . $GLOBALS['refback_percents'][$userid][$refid] . ' - EXIT!');
+       return $GLOBALS['refback_percents'][$userid][$refid];
 }
 
 // "Getter" for userid array which will return only one entry
 function getArrayFromRefbackLevel ($refid, $level) {
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . $refid . ',level=' . $level);
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . makeNullToZero($refid) . ',level=' . $level . ' - ENTERED!');
        // Init userids
        $userIds = array();
 
@@ -181,7 +195,7 @@ ORDER BY
        if (!SQL_HASZERONUMS($result)) {
                // Add all
                while ($content = SQL_FETCHARRAY($result)) {
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . $refid . ',level=' . $level . ',userid=' . $content['userid']);
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . makeNullToZero($refid) . ',level=' . $level . ',userid=' . $content['userid']);
                        $userIds[] = $content['userid'];
                } // END - while
        } // END - if
@@ -190,7 +204,7 @@ ORDER BY
        SQL_FREERESULT($result);
 
        // Return array
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . $refid . ',userIds()=' . count($userIds) . ' - EXIT!');
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . makeNullToZero($refid) . ',userIds()=' . count($userIds) . ' - EXIT!');
        return $userIds;
 }