X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Flibs%2Frefback_functions.php;h=82746fe51dc5e5d6d03c8e0de926f16604682f87;hb=f2edf32502b2774dc17ef419a2e6a1c60e361c0a;hp=e97e063fecf43478a86c19cc26dcd096b8eb94f8;hpb=d866d7874e4cb8a94550c246d98b8c769d4f255f;p=mailer.git diff --git a/inc/libs/refback_functions.php b/inc/libs/refback_functions.php index e97e063fec..82746fe51d 100644 --- a/inc/libs/refback_functions.php +++ b/inc/libs/refback_functions.php @@ -16,8 +16,8 @@ * $Author:: $ * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009 - 2011 by Mailer Developer Team * - * For more information visit: http://www.mxchange.org * + * Copyright (c) 2009 - 2012 by Mailer Developer Team * + * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -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(); + initReferralSystem(); - // "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=' . convertNullToZero($refid) . ' - CALLING getRefbackPercents()'); + $content['refback_percents'] = getRefbackPercents($refid, $userid); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',refid=' . convertNullToZero($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); + reportBug(__FUNCTION__, __LINE__, 'Nothing has been updated in user_refs,userid=' . $userid . ',refid=' . convertNullToZero($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=' . convertNullToZero($refid) . ' - REFBACK-UPDATE! (' . SQL_AFFECTEDROWS() . ')'); + addPointsThroughReferralSystem(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 referral + * @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 + reportBug(__FUNCTION__, __LINE__, 'userid=' . convertNullToZero($userid) . ', refid=' . convertNullToZero($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 + reportBug(__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=' . convertNullToZero($refid) . ',level=' . $level . ' - ENTERED!'); // Init userids $userIds = array(); @@ -181,8 +195,8 @@ ORDER BY if (!SQL_HASZERONUMS($result)) { // Add all while ($content = SQL_FETCHARRAY($result)) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . $refid . ',level=' . $level . ',userid=' . $content['userid']); - $userIds[] = $content['userid']; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . convertNullToZero($refid) . ',level=' . $level . ',userid=' . $content['userid']); + array_push($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=' . convertNullToZero($refid) . ',userIds()=' . count($userIds) . ' - EXIT!'); return $userIds; } @@ -278,7 +292,7 @@ function getArrayFromUserRefbackData ($id) { } // Update refback percents (but with some sanity-checks! -function updateMemberRefbackPercents ($id, $percents) { +function updateMemberRefbackPercents ($id, $percents, $note) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $id . ',percents=' . $percents . ' - ENTERED!'); // Default status is failed $status['message'] = 'MEMBER_REFBACK_ERROR_GENERAL'; @@ -299,10 +313,10 @@ function updateMemberRefbackPercents ($id, $percents) { } // Get ref entry - $dummy = getArrayFromUserRefbackData($id); + $content = getArrayFromUserRefbackData($id); // Is this valid? - if (count($dummy) == 0) { + if (count($content) == 0) { // id does not belong to user! $status['message'] = 'MEMBER_REFBACK_ERROR_ID_MISMATCH'; return $status; @@ -327,28 +341,29 @@ function updateMemberRefbackPercents ($id, $percents) { } // END - if // Prepare email content - $dummy['refback_percents'] = $percents; + $content['refback_percents'] = $percents; + $content['refback_notice'] = $note; // Load member email template - $mail = loadEmailTemplate('member_refback', $dummy, $dummy['refid']); + $mail = loadEmailTemplate('member_refback', $content, $content['refid']); // Send email to user - sendEmail($dummy['refid'], '{--MEMBER_REFBACK_SUBJECT--}', $mail); + sendEmail($content['refid'], '{--MEMBER_REFBACK_SUBJECT--}', $mail); // Send admin notification - sendAdminNotification('{--ADMIN_REFBACK_SUBJECT--}', 'admin_refback', $dummy, getMemberId()); + sendAdminNotification('{--ADMIN_REFBACK_SUBJECT--}', 'admin_refback', $content, $content['refid']); // All fine! - $status['ok'] = true; + $status['ok'] = TRUE; // Return status array //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $id . ',percents=' . $percents . ' - EXIT!'); return $status; } -// Checks wether refback is enabled +// Checks whether refback is enabled function isRefbackEnabled () { - // Do we have cache? + // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Determine it $GLOBALS[__FUNCTION__] = (getConfig('refback_enabled') == 'Y');