-// Getter fro ref level percents
-function getReferalLevelPercents ($level) {
- // Default is zero
- $data['percents'] = '0';
-
- // Do we have cache?
- if ((isset($GLOBALS['cache_array']['refdepths']['level'])) && (isExtensionActive('cache'))) {
- // First look for level
- $key = array_search($level, $GLOBALS['cache_array']['refdepths']['level']);
- if ($key !== false) {
- // Entry found!
- $data['percents'] = $GLOBALS['cache_array']['refdepths']['percents'][$key];
-
- // Count cache hit
- incrementStatsEntry('cache_hits');
- } // END - if
- } elseif (!isExtensionActive('cache')) {
- // Get referal data
- $result_level = SQL_QUERY_ESC("SELECT `percents` FROM `{?_MYSQL_PREFIX?}_refdepths` WHERE `level`='%s' LIMIT 1",
- array(bigintval($level)), __FUNCTION__, __LINE__);
-
- // Entry found?
- if (SQL_NUMROWS($result_level) == 1) {
- // Get percents
- $data = SQL_FETCHARRAY($result_level);
- } // END - if
-
- // Free result
- SQL_FREERESULT($result_level);
- }
-
- // Return percent
- return $data['percents'];
-}
-
-/**
- *
- * Dynamic referal system, can also send mails!
- *
- * subject = Subject line, write in lower-case letters and underscore is allowed
- * userid = Referal id wich should receive...
- * points = ... xxx points
- * sendNotify = shall I send the referal an email or not?
- * rid = inc/modules/guest/what-confirm.php need this
- * locked = Shall I pay it to normal (false) or locked (true) points ammount?
- * add_mode = Add points only to $userid or also refs? (WARNING! Changing 'ref' to 'direct'
- * for default value will cause no referal will get points ever!!!)
- */
-function addPointsThroughReferalSystem ($subject, $userid, $points, $sendNotify = false, $rid = '0', $locked = false, $add_mode = 'ref') {
- //* DEBUG: */ print("----------------------- <font color=\"#00aa00\">".__FUNCTION__." - ENTRY</font> ------------------------<ul><li>\n");
- // Convert mode to lower-case
- $add_mode = strtolower($add_mode);
-
- // When $userid = '0' add points to jackpot
- if (($userid == '0') && (isExtensionActive('jackpot'))) {
- // Add points to jackpot
- addPointsToJackpot($points);
- return;
- } // END - if
-
- // Prepare data for the filter
- $filterData = array(
- 'subject' => $subject,
- 'userid' => $userid,
- 'points' => $points,
- 'notify' => $sendNotify,
- 'rid' => $rid,
- 'locked' => $locked,
- 'mode' => 'add',
- 'sub_mode' => $add_mode,
- );
-
- // Filter it now
- runFilterChain('add_points', $filterData);
-
- // Count up referal depth
- if (!isset($GLOBALS['ref_level'])) {
- // Initialialize referal system
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>): Referal system initialized!<br />");
- $GLOBALS['ref_level'] = '0';
- } else {
- // Increase referal level
- $GLOBALS['ref_level']++;
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>): Referal level increased. DEPTH={$GLOBALS['ref_level']}<br />");
- }
-
- // Default is 'normal' points
- $data = 'points';
-
- // Which points, locked or normal?
- if ($locked === true) $data = 'locked_points';
-
- // Check user account
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},points={$points}<br />");
- if (fetchUserData($userid)) {
- // This is the user and his ref
- $GLOBALS['cache_array']['add_userid'][getUserData('refid')] = $userid;
-
- // Get percents
- $per = getReferalLevelPercents($GLOBALS['ref_level']);
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},points={$points},depth={$GLOBALS['ref_level']},per={$per},mode={$add_mode}<br />");
-
- // Some percents found?
- if ($per > 0) {
- // Calculate new points
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},points={$points},per={$per},depth={$GLOBALS['ref_level']}<br />");
- $ref_points = $points * $per / 100;
-
- // Pay refback here if level > 0 and in ref-mode
- if ((isExtensionActive('refback')) && ($GLOBALS['ref_level'] > 0) && ($per < 100) && ($add_mode == "ref") && (isset($GLOBALS['cache_array']['add_userid'][$userid]))) {
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},data={$GLOBALS['cache_array']['add_userid'][$userid]},ref_points={$ref_points},depth={$GLOBALS['ref_level']} - BEFORE!<br />");
- $ref_points = addRefbackPoints($GLOBALS['cache_array']['add_userid'][$userid], $userid, $points, $ref_points);
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},data={$GLOBALS['cache_array']['add_userid'][$userid]},ref_points={$ref_points},depth={$GLOBALS['ref_level']} - AFTER!<br />");
- } // END - if
-
- // Update points...
- SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_user_points` SET `%s`=`%s`+%s WHERE `userid`=%s AND `ref_depth`='%s' LIMIT 1",
- array($data, $data, $ref_points, bigintval($userid), bigintval($GLOBALS['ref_level'])), __FUNCTION__, __LINE__);
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):data={$data},ref_points={$ref_points},userid={$userid},depth={$GLOBALS['ref_level']},mode={$add_mode} - UPDATE! (".SQL_AFFECTEDROWS().")<br />");
-
- // No entry updated?
- if (SQL_AFFECTEDROWS() < 1) {
- // First ref in this level! :-)
- SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_user_points` (`userid`,`ref_depth`,`%s`) VALUES (%s,'%s',%s)",
- array($data, bigintval($userid), bigintval($GLOBALS['ref_level']), $ref_points), __FUNCTION__, __LINE__);
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):data={$data},ref_points={$ref_points},userid={$userid},depth={$GLOBALS['ref_level']},mode={$add_mode} - INSERTED! (".SQL_AFFECTEDROWS().")<br />");
- } // END - if
-
- // Points updated, maybe I shall send him an email?
- if (($sendNotify === true) && (getUserData('refid') > 0) && ($locked === false)) {
- // Prepare content
- $content = array(
- 'percents' => $per,
- 'level' => bigintval($GLOBALS['ref_level']),
- 'points' => $ref_points,
- 'refid' => getUserData('refid')
- );
-
- // Load email template
- $message = loadEmailTemplate('confirm-referal', $content, bigintval($userid));
-
- // Send email
- sendEmail($userid, getMessage('THANX_REFERAL_ONE_SUBJECT'), $message);
- } elseif (($sendNotify === true) && (getUserData('refid') == '0') && ($locked === false) && ($add_mode == 'direct')) {
- // Prepare content
- $content = array(
- 'text' => getMessage('REASON_DIRECT_PAYMENT'),
- 'points' => $ref_points
- );
-
- // Load message
- $message = loadEmailTemplate('add-points', $content, $userid);
-
- // And sent it away
- sendEmail($userid, getMessage('SUBJECT_DIRECT_PAYMENT'), $message);
- if (!isGetRequestParameterSet('mid')) loadTemplate('admin_settings_saved', false, getMessage('ADMIN_POINTS_ADDED'));
- }
-
- // Maybe there's another ref?
- if ((getUserData('refid') > 0) && ($points > 0) && (getUserData('refid') != $userid) && ($add_mode == 'ref')) {
- // Then let's credit him here...
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},ref=".getUserData('refid').",points={$points} - ADVANCE!<br />");
- addPointsThroughReferalSystem(sprintf("%s_ref:%s", $subject, $GLOBALS['ref_level']), getUserData('refid'), $points, $sendNotify, getUserData('refid'), $locked);
- } // END - if
- } // END - if
- } // END - if
-
- //* DEBUG: */ print("</li></ul>----------------------- <font color=\"#aa0000\">".__FUNCTION__." - EXIT</font> ------------------------<br />");
-}
-
-// Updates the referal counter
-function updateReferalCounter ($userid) {
- // Make it sure referal level zero (member him-/herself) is at least selected
- if (empty($GLOBALS['cache_array']['ref_level'][$userid])) $GLOBALS['cache_array']['ref_level'][$userid] = 1;
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},level={$GLOBALS['cache_array']['ref_level'][$userid]}<br />");
-
- // Update counter
- SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_refsystem` SET `counter`=`counter`+1 WHERE `userid`=%s AND `level`='%s' LIMIT 1",
- array(bigintval($userid), $GLOBALS['cache_array']['ref_level'][$userid]), __FUNCTION__, __LINE__);
-
- // When no entry was updated then we have to create it here
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):updated=".SQL_AFFECTEDROWS().'<br />');
- if (SQL_AFFECTEDROWS() < 1) {
- // First count!
- SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_refsystem` (`userid`, `level`, `counter`) VALUES (%s,%s,1)",
- array(bigintval($userid), $GLOBALS['cache_array']['ref_level'][$userid]), __FUNCTION__, __LINE__);
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid}<br />");
- } // END - if
-
- // Init referal id
- $ref = '0';
-
- // Check for his referal
- if (fetchUserData($userid)) {
- // Get it
- $ref = getUserData('refid');
- } // END - if
-
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):userid={$userid},ref={$ref}<br />");
-
- // When he has a referal...
- if (($ref > 0) && ($ref != $userid)) {
- // Move to next referal level and count his counter one up!
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):ref={$ref} - ADVANCE!<br />");
- $GLOBALS['cache_array']['ref_level'][$userid]++;
- updateReferalCounter($ref);
- } elseif ((($ref == $userid) || ($ref == '0')) && (isExtensionInstalledAndNewer('cache', '0.1.2'))) {
- // Remove cache here
- //* DEBUG: */ print(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__."</font>):ref={$ref} - CACHE!<br />");
- rebuildCache('refsystem', 'refsystem');
- }
-
- // "Walk" back here
- $GLOBALS['cache_array']['ref_level'][$userid]--;
-
- // Handle refback here if extension is installed
- if (isExtensionActive('refback')) {
- updateRefbackTable($userid);
- } // END - if
-}