0 AND `d`.`mails_confirmed` >= {?ref_payout?} AND `p`.`ref_depth`=1 AND `p`.`points` > 0 AND `d`.`userid`=%s", array(bigintval($content['userid'])), __FUNCTION__, __LINE__); // Get points list($cpoints) = sqlFetchRow($result_ref); // Free result sqlFreeResult($result_ref); if (empty($cpoints)) $cpoints = '0.00000'; // Add info line sqlQueryEscaped("INSERT INTO `{?_MYSQL_PREFIX?}_rallye_users` ( `rallye_id`, `userid`, `refs`, `curr_points` ) VALUES ( %s, %s, %s, %s )", array( bigintval($content['id']), bigintval($content['userid']), bigintval($count), $cpoints ), __FUNCTION__, __LINE__); $un = TRUE; } // END - if // Free memory sqlFreeResult($result_ref); // Ignored but for the template required refs (made before start of rallye) $content['refs'] = $count; // Shall I notify this member? if (($content['send_notify'] == 'Y') && ($un === TRUE)) { // Load email template and send it to the user $message = loadEmailTemplate('member_rallye_notify', $content, $content['userid']); sendEmail($content['userid'], '{%message,MEMBER_RALLYE_NOTIFY_SUBJECT=' . $content['title'] . '%}', $message); } // END - if } // END - while // Choose the right admin template $templ = 'admin_rallye_no_notify'; if ($content['send_notify'] == 'Y') { $templ = 'admin_rallye_notify'; } // END - if // Send email to admin sendAdminNotification('{%message,ADMIN_RALLYE_NOTIFY_SUBJECT=' . $content['title'] . '%}', $templ, $content); // Free memory sqlFreeResult($result_user); } // function addReferralRallyePrices ($rallye, $mode = 'email') { // Output mode switch($mode) { case 'email': $mode = PHP_EOL; break; case 'html' : $mode = '
'; break; } // END - switch // Load prices $result_prices = sqlQueryEscaped("SELECT `price_level`, `points`, `info` FROM `{?_MYSQL_PREFIX?}_rallye_prices` WHERE `rallye_id`=%s ORDER BY `price_level` ASC", array($rallye), __FUNCTION__, __LINE__); // Entries found? if (!ifSqlHasZeroNumRows($result_prices)) { // Load prices $prices = ''; if ($mode == PHP_EOL) { $prices = '{--RALLYE_MEMBER_PRICES_ADDED--}:' . $mode . '------------------------------' . $mode; } // END - if while ($content = sqlFetchArray($result_prices)) { $prices .= $content['price_level']. '{--RALLYE_PRICE--}:'; if (!empty($content['info'])) { $prices .= $content['info']; } else { $prices .= '{%pipe,translateComma=' . $content['points'] . '%} {?POINTS?}'; } $prices .= '' . $mode; } // END - if // Free memory sqlFreeResult($result_prices); } else { // No prices??? $prices = '{%message,RALLYE_MEMBER_NO_PRICES=' . $mode . '%}'; } // Add last line for email mode if ($mode == PHP_EOL) { $prices .= '------------------------------'; } // END - if // Return price list return $prices; } // function addReferralRallyeTopUsers ($mode, $rallye, $default=0) { // Init variables $min_users = 0; $min_prices = 0; // First check how many prices are set $prices = getTotalRallyePrices($rallye); // And load only limited users $result = sqlQueryEscaped("SELECT DISTINCT `u`.`userid`, `u`.`refs`, `u`.`curr_points`, `rd`.`min_users`, `rd`.`min_prices` FROM `{?_MYSQL_PREFIX?}_rallye_users` AS `u` INNER JOIN `{?_MYSQL_PREFIX?}_refsystem` AS `r` ON u.userid=r.userid INNER JOIN `{?_MYSQL_PREFIX?}_rallye_data` AS `rd` ON `u`.`rallye_id`=r`d`.`id` WHERE `u`.`rallye_id`=%s AND `r`.`counter` > 0 ORDER BY u.refs DESC", array(bigintval($rallye)), __FUNCTION__, __LINE__); // Load users $content = array( 'userid' => array(), 'ref' => array(), 'cpoints' => array() ); // Load all users while ($row = sqlFetchArray($result)) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $row['userid'] . ',refs=' . $row['refs']); // Get current refs $count = getReferralRallyeRefsCount($row['userid'], $row['refs']); // Points of ref's $result_ref = sqlQueryEscaped("SELECT `p`.`points` FROM `{?_MYSQL_PREFIX?}_user_points` AS `p` LEFT JOIN `{?_MYSQL_PREFIX?}_user_data` AS `d` ON `p`.`userid`=`d`.`userid` WHERE `d`.`userid`=%s AND `d`.`status`='CONFIRMED' " . runFilterChain('user_exclusion_sql', ' ') . " AND `p`.`ref_depth`=1 AND `d`.`max_mails` > 0 AND `d`.`mails_confirmed` >= {?ref_payout?} LIMIT 1", array(bigintval($row['userid'])), __FUNCTION__, __LINE__); // Get points list($refpoints) = sqlFetchRow($result_ref); // Free result sqlFreeResult($result_ref); // Fix empty values (ugly code again) if (empty($refpoints)) { $refpoints = '0'; } // END - if // Init userid for list $userid = '---'; // List only users with at least one ref! //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'count=' . $count . ',userid=' . $userid . ',refpoints=' . $refpoints . ',curr_points=' . $row['curr_points']); if (($count > 0) && ($refpoints > $row['curr_points'])) { $userid = $row['userid']; } else { $count = ''; } // Save values to array $content['userid'][] = $userid; $content['ref'][] = $count; $content['cpoints'][] = $row['curr_points']; $min_users = $row['min_users']; $min_prices = $row['min_prices']; } // END - while // Free memory sqlFreeResult($result); // Sort whole array array_pk_sort($content, array('cpoints', 'ref'), 0, 1, TRUE); // Generate table $OUT = ''; for ($idx = 0; $idx < $prices; $idx++) { // Prepare marking of default (maybe current user's) id $start = ''; $end = ''; if (($default > 0) && (isset($content['userid'][$idx])) && ($content['userid'][$idx] == $default)) { $start = ''; $end = ''; } // END - if // Prepare content $row = array( 'idx' => ($idx + 1), 'start' => $start, 'end' => $end, 'userid' => (isset($content['userid'][$idx])) ? $content['userid'][$idx] : '---', 'ref' => (isset($content['ref'][$idx])) ? $content['ref'][$idx] : '---' ); // Load row template and switch color $OUT .= loadTemplate($mode . '_list_rallye_row', TRUE, $row); } // END - for // Add min_prices/users $content['rows'] = $OUT; $content['min_prices'] = bigintval($min_prices); $content['min_users'] = bigintval($min_users); // And finnally return the output return loadTemplate($mode . '_list_rallye', TRUE, $content); } // Sends out a notification about the rallye function sendRallyeNotification ($userid, $content) { // Translate more data $content['start_time'] = generateDateTime($content['start_time'], 2); $content['end_time'] = generateDateTime($content['end_time'] , 2); $content['now_time'] = generateDateTime(time(), 2); $content['ref'] = '0'; $content['refs'] = getUsersTotalReferrals($userid); // Send notification to member $message = loadEmailTemplate('member_rallye_notify', $content, $userid); sendEmail($userid, '{%message,MEMBER_RALLYE_NOTIFY_SUBJECT=' . $content['title'] . '%}', $message); } // Run this function only when a new member has confirmed his email address! function addUserToReferralRallye ($userid, $content = array()) { $add = ''; // Updated extension? if (isExtensionInstalledAndNewer('rallye', '0.2.0')) { $add .= ',`min_users`, `min_prices`'; } // END - if // Check for an auto-add rallye $result = sqlQuery("SELECT `id`, `title`, `start_time`, `end_time`, `send_notify` ".$add." FROM `{?_MYSQL_PREFIX?}_rallye_data` WHERE `is_active`='Y' AND `notified`='Y' AND `auto_add_new_user`='Y' AND `expired`='N' LIMIT 1", __FUNCTION__, __LINE__); if (sqlNumRows($result) == 1) { // Init variables $min_users = '0'; $min_prices = '0'; // Load and merge data $content = merge_array($content, sqlFetchArray($result)); // Free result sqlFreeResult($result); // Notify the user? if ($content['send_notify'] == 'Y') { // Transfer all neccessary data to $content array sendRallyeNotification($userid, $content); } // END - if // Check if line is already included... $result = sqlQueryEscaped("SELECT `id` FROM `{?_MYSQL_PREFIX?}_rallye_users` WHERE `rallye_id`=%s AND `userid`=%s LIMIT 1", array( bigintval($content['id']), bigintval($userid) ), __FUNCTION__, __LINE__); // Is this user added? if (ifSqlHasZeroNumRows($result)) { // Add userid and his ref count to table sqlQueryEscaped("INSERT INTO `{?_MYSQL_PREFIX?}_rallye_users` ( `rallye_id`, `userid`, `refs` ) VALUES ( %s, %s, 0 )", array( bigintval($content['id']), bigintval($userid) ), __FUNCTION__, __LINE__); } // END - if // Free memory sqlFreeResult($result); } // END - if } // "Getter" for total rallye winners function getTotalRallyeWinners ($rallyeId) { // Is cache set? if (!isset($GLOBALS[__FUNCTION__][$rallyeId])) { // Default total is zero $GLOBALS[__FUNCTION__][$rallyeId] = '0'; // Get prices $prices = getArrayFromReferralRallyeUsers($rallyeId); // "Walk" through all entries foreach ($prices['userid'] as $key => $userid) { // Check for userid $active = countSumTotalData($userid, 'user_data', 'userid', 'userid', TRUE, runFilterChain('user_exclusion_sql', " AND `status`='CONFIRMED'")); // Allow valid and active users with at least one ref //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'rallyeId=' . $rallyeId . ',userid=' . $userid . ',ref=' . $prices['ref'][$key] . ',cpoints=' . $prices['cpoints'][$key]); if ((isValidId($userid)) && ($prices['ref'][$key] > 0) && ($active == 1) && ($prices['cpoints'][$key] > 0)) { $GLOBALS[__FUNCTION__][$rallyeId]++; } // END - if } // END - foreach } // END - if // Return it return $GLOBALS[__FUNCTION__][$rallyeId]; } // Stops the given rallye result (from SQL layer) by marking it as expirced function stopRallyeByResult ($result) { // Load rallye data $content = sqlFetchArray($result); // Free result sqlFreeResult($result); // Init array $count = '0'; $users = array(); $content['start_time'] = generateDateTime($content['start_time'], 1); $content['end_time'] = generateDateTime($content['end_time'] , 1); $content['now_time'] = generateDateTime(time(), 1); // Load users array (!) with assigned prices $prices = getArrayFromReferralRallyeUsers($content['id']); // Just count... $total = '0'; foreach ($prices['userid'] as $key => $userid) { /* * Check status * active = 1: account is still confirmed * active = 0: account is deleted or locked */ $active = countSumTotalData($userid, 'user_data', 'userid', 'userid', TRUE, runFilterChain('user_exclusion_sql', " AND `status`='CONFIRMED'")); $prices['active'][$key] = $active; // Allow valid and active users with at least one ref to get points if ((isValidId($userid)) && ($prices['ref'][$key] > 0) && ($active == 1) && ($prices['cpoints'][$key] > 0)) { $total++; } // END - if } // END - foreach // Check on 'min_prices' condition if (($total < $content['min_prices']) || (getTotalConfirmedUser() < $content['min_users'])) { // Do not end this rallye! return; } // END - if // Expire rallye sqlQueryEscaped("UPDATE `{?_MYSQL_PREFIX?}_rallye_data` SET `expired`='Y' WHERE `id`=%s LIMIT 1", array(bigintval($content['id'])), __FUNCTION__, __LINE__); // Run array through (by userid is the most important 2nd-level-array) foreach ($prices['userid'] as $key => $userid) { // Allow valid and active users with at least one ref to get points if ((isValidId($userid)) && ($prices['ref'][$key] > 0) && ($prices['active'][$key] == 1) && ($prices['cpoints'][$key] > 0)) { // Transfer data to array for the mail template $content['level'] = $prices['level'][$key]; $content['points'] = $prices['points'][$key]; $content['info'] = $prices['info'][$key]; $content['ref'] = $prices['ref'][$key]; // Default is other $winnerLevel = 'other'; // Determine winner level if ($content['level'] == 1) { // The winner! $winnerLevel = 'gold'; } elseif ($content['level'] == 2) { // The vice winner! $winnerLevel = 'silver'; } elseif ($content['level'] == 3) { // The bronce winner $winnerLevel = 'bronce'; } if ($content['points'] > 0) { // Add points directly to user's account initReferralSystem(); addPointsThroughReferralSystem('rallye_winner:' . $winnerLevel, $userid, $content['points']); } // END - if if ($content['send_notify'] == 'Y') { // Prepare infos for the mail template if (!empty($content['info'])) { // Take direct infos $content['infos'] = $content['info']; } else { // Take points $content['infos'] = $content['points'] . ' {?POINTS?}'; } // Add suffix to template name $template = 'member_rallye_expired_' . $winnerLevel; // Load template $message = loadEmailTemplate($template, $content, $userid); sendEmail($userid, '{%message,RALLYE_MEMBER_EXPIRED_SUBJECT=' . $content['level'] . '%}', $message); } // END - if // Count userid $count++; $users['userid'][$userid] = $userid; $users['poi'][$userid] = $content['infos']; } // END - if } // END - foreach // Select template depending on notfication is switch on / off if ($content['send_notify'] == 'Y') { $templ = 'admin_rallye_expired'; } elseif (is_array($users['userid'])) { $templ = 'admin_rallye_expired_no'; $count = getReferralRallyeUserDataFromArray($users); } // Add count $content['count'] = $count; // Send mail to admin sendAdminNotification('{%message,ADMIN_RALLYE_EXPIRED_SUBJECT=' . $content['title'] . '%}', $templ, $content); // Add task (we ignore the task id here) createNewTask('{--ADMIN_RALLYE_EXPIRED_TASK--}: ' . $content['title'], '{--ADMIN_RALLYE_EXPIRED_TEXT--}', 'RALLYE_EXPIRED'); } // function getReferralRallyeUserDataFromArray ($userIds) { // Implode user ids $userid_string = implode(',', $userIds['userid']); // Init result string $ret = ''; // Load users $result = sqlQueryEscaped("SELECT `userid`, `gender`, `surname`, `family`, `email` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid` IN(%s) AND `status`='CONFIRMED' " . runFilterChain('user_exclusion_sql', ' ' ) . " ORDER BY `userid` ASC LIMIT %s", array( $userid_string, count($userIds) ), __FUNCTION__, __LINE__); while ($content = sqlFetchArray($result)) { // Construct the message masked and add it $ret .= sprintf("{%%pipe,translateGender=%s%} %s %s (%s) - %s\n", $content['gender'], $content['surname'], $content['family'], $content['email'], $userIds['poi'][$content['userid']] ); } // END - while // Return result return substr($ret, 0, -1); } // function getArrayFromReferralRallyePrices ($rallye) { // Init multi array $prices = array( 'level' => array(), 'points' => array(), 'info' => array() ); // Load prices $result = sqlQueryEscaped("SELECT `price_level`, `points`, `info` FROM `{?_MYSQL_PREFIX?}_rallye_prices` WHERE `rallye_id`=%s ORDER BY `price_level` ASC", array(bigintval($rallye)), __FUNCTION__, __LINE__); // Transfer elements while ($content = sqlFetchArray($result)) { $prices['level'][] = $content['price_level']; array_push($prices['points'], $content['points']); array_push($prices['info'], $content['info']); } // END - while // Free memory sqlFreeResult($result); // Return array return $prices; } // function getArrayFromReferralRallyeUsers ($rallye) { // Fix zero points to 0.00000 if (getRefPayout() == '0') { setConfigEntry('ref_payout', '0.00000'); } // END - if // Init multi array $users = array( 'userid' => array(), 'ref' => array(), 'cpoints' => array(), ); /* * Load users: * - userid = User's id number * - refs = Old amount of referrals (before the rallye has started) * - curr_points = Current amount of total points */ $result_user = sqlQueryEscaped("SELECT `userid`, `refs`, `curr_points` FROM `{?_MYSQL_PREFIX?}_rallye_users` WHERE `rallye_id`=%s ORDER BY `userid` ASC", array(bigintval($rallye)), __FUNCTION__, __LINE__); while ($content = sqlFetchArray($result_user)) { // Load current ref count $count = getReferralRallyeRefsCount($content['userid'], $content['refs']); // Points of ref's $result_ref = sqlQueryEscaped("SELECT SUM(`p`.`points`) AS `points` FROM `{?_MYSQL_PREFIX?}_user_points` AS `p` LEFT JOIN `{?_MYSQL_PREFIX?}_user_data` AS `d` ON `p`.`userid`=`d`.`userid` WHERE `d`.`status`='CONFIRMED' " . runFilterChain('user_exclusion_sql', ' ' ) . " AND `d`.`max_mails` > 0 AND `d`.`mails_confirmed` >= {?ref_payout?} AND `p`.`ref_depth`=1 AND `p`.`points` > 0 AND `d`.`userid`=%s LIMIT 1", array(bigintval($content['userid'])), __FUNCTION__, __LINE__); // Get points list($refpoints) = sqlFetchRow($result_ref); // Free result sqlFreeResult($result_ref); // Fix empty refpoints if (empty($refpoints)) $refpoints = '0'; // Store calculated new refs to array array_push($users['userid'], $content['userid']); array_push($users['ref'], abs($count - $content['refs'])); array_push($users['cpoints'], $refpoints - $content['curr_points']); } // END - while // Free memory sqlFreeResult($result_user); // Sort array for refs (descending) array_pk_sort($users, array('cpoints', 'ref'), 0, 1, TRUE); // Load prices array (!) $prices = getArrayFromReferralRallyePrices($rallye); // Merge users into prices foreach ($prices['level'] as $k => $level) { // We only need to check one element in $users, see above while() block if (isset($users['userid'][$k])) { $prices['userid'][$k] = $users['userid'][$k]; $prices['ref'][$k] = $users['ref'][$k]; $prices['cpoints'][$k] = $users['cpoints'][$k]; } // END - if } // END - foreach // Return completed array return $prices; } // @TODO This function does not load min_users, min_prices, please encapsulate loading rallye data with e.g. getRallyeDataFromId() function addReferralRallyeWinners ($mode, $rallye, $default=0) { // First check how many prices are set $prices = getTotalRallyePrices($rallye); // Load data $content = getArrayFromReferralRallyeUsers($rallye); // Generate table $OUT = ''; for ($idx = 0; $idx < $prices; $idx++) { /* * Check status * active = 1: account is still confirmed * active = 0: account is deleted or locked */ $active = countSumTotalData($content['userid'][$idx], 'user_data', 'userid', 'userid', TRUE, runFilterChain('user_exclusion_sql', " AND `status`='CONFIRMED'")); if ((empty($content['ref'][$idx])) || ($content['ref'][$idx] == '0') || ($active == '0') || ('' . round($content['cpoints'][$idx]) . '' == '0') || (empty($content['cpoints'][$idx]))) { // Allow valid and active users with at least one ref to get points $content['ref'][$idx] = '---'; $content['userid'][$idx] = '---'; } // END - if if (!empty($content['info'][$idx])) { // Take direct infos $content['infos'][$idx] = $content['info'][$idx]; } else { // Take ppints $content['infos'][$idx] = $content['points'][$idx] . ' {?POINTS?}'; } // Prepare marking of default (maybe current user's) id $start = ''; $end = ''; if (($content['userid'][$idx] == $default) && ($default > 0)) { $start = ''; $end = ''; } // END - if // Prepare content $row = array( 'idx' => ($idx + 1), 'userid' => $content['userid'][$idx], 'ref' => $content['ref'][$idx], 'infos' => $content['infos'][$idx], 'start' => $start, 'end' => $end ); // Load row template $OUT .= loadTemplate($mode . '_list_rallye_row', TRUE, $row); } // END - for // Prepare content $content = array( 'rows' => $OUT, 'min_users' => '???', 'min_prices' => '???' ); // Load main template and finnally return the output return loadTemplate($mode . '_list_rallye', TRUE, $content); } // function purgeExpiredReferralRallyes () { // Check for expired rallyes $EXPIRE = 3; // @TODO The hard-coded value... $result_rallye = sqlQueryEscaped("SELECT `id`, `title`, `start_time`, `end_time` FROM `{?_MYSQL_PREFIX?}_rallye_data` WHERE (UNIX_TIMESTAMP() - `end_time`) > ({?ONE_DAY?} * %s) AND `expired`='Y'", array($EXPIRE), __FUNCTION__, __LINE__); if (!ifSqlHasZeroNumRows($result_rallye)) { // Init SQLs initSqls(); // Expire found rallyes and notify admin while ($content = sqlFetchArray($result_rallye)) { // Prepare data for mail template $content['start_time'] = generateDateTime($content['start_time'], 1); $content['end_time'] = generateDateTime($content['end_time'] , 1); $content['now_time'] = generateDateTime(time(), 1); // Send mail to admin sendAdminNotification('{%message,ADMIN_RALLYE_PURGED_SUBJECT=' . $content['title'] . '%}', 'admin_rallye_purged', $content); // Purge whole rallye addSql(sqlQueryEscaped("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_rallye_data` WHERE `id`=%s LIMIT 1", array(bigintval($content['id'])), __FUNCTION__, __LINE__, FALSE)); addSql(sqlQueryEscaped("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_rallye_prices` WHERE `rallye_id`=%s LIMIT 1", array(bigintval($content['id'])), __FUNCTION__, __LINE__, FALSE)); addSql(sqlQueryEscaped("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_rallye_users` WHERE `rallye_id`=%s LIMIT 1", array(bigintval($content['id'])), __FUNCTION__, __LINE__, FALSE)); // Add task (we ignore the task id here createNewTask('{--ADMIN_RALLYE_PURGED_TASK--}: ' . $content['title'], '{--ADMIN_RALLYE_PURGED_TEXT--}', 'RALLYE_PURGED'); } // END - while // Run all SQLs runFilterChain('run_sqls'); } // END - if // Free memory sqlFreeResult($result_rallye); } // function addReferralRallyeTemplateSelection ($name = 'template', $default = '') { // Init variables $OUT = ''; $ral = array(); // Check templates directory $basePath = sprintf('templates/%s/html/rallye/', getLanguage()); // Read the directory $templates = getArrayFromDirectory($basePath, 'rallye_', FALSE, TRUE, array(), '.tpl'); // And walk through foreach ($templates as $read) { // Cut prefix and extension away $read = substr($read, 7, strpos($read, '.') - 7); // Accept only template names between 1 and 255 chars length if ((strlen($read) < 256) && (!empty($read))) { // Valid entry found $ral[$read] = $read; } else { // Log invalid logDebugMessage(__FUNCTION__, __LINE__, sprintf('WARNING: Template %s not used.', $read)); } } // END - foreach // Is there found templates which we can link with the new rallye? if (!empty($ral[0])) { // Generate selection box for all found templates $OUT = ''; } else { // No rallye templates found $OUT = '{--ADMIN_RALLYE_TEMPLATES_404--}'; } // Return selection return $OUT; } // @TODO Please document this function function getReferralRallyeRefsCount ($currUserid, $oldReferralCount = '0') { // Check current refs if (isExtensionInstalledAndNewer('cache', '0.1.2')) { // Get refs from cache $count = '0'; foreach ($GLOBALS['cache_array']['refsystem']['userid'] as $id => $userid) { // Is there a ref for this user? //* DEBUG: */ debugOutput('id='.$id.',userid='.$userid.',userid='.$userid.',oldReferralCount='.$oldReferralCount.',level='.$GLOBALS['cache_array']['refsystem']['level'][$id]); if (($currUserid == $userid) && ($GLOBALS['cache_array']['refsystem']['level'][$id] == 1)) { //* DEBUG: */ debugOutput('userid matches!'); foreach ($GLOBALS['cache_array']['refdepths']['level'] as $level) { if (($level == $GLOBALS['cache_array']['refsystem']['level'][$id]) && ($level == 1)) { // Level does exist so abort here $count = $GLOBALS['cache_array']['refsystem']['counter'][$id]; //* DEBUG: */ debugOutput('*'.$userid.'/'.$count.'*'); break; } elseif ($level > 1) { // Not interesting here... break; } } // END - foreach // Abort also here! if ($count > 0) break; } // END - if } // END - foreach //* DEBUG: */ debugOutput('
'.print_r($GLOBALS['cache_array']['refsystem'], TRUE).'
'); //* DEBUG: */ doShutdown(); if ($count > 0) { // Count cache hits incrementStatsEntry('cache_hits'); // Remove old refs //* DEBUG: */ debugOutput('+'.$count.'/'.$oldReferralCount.'+'); $count -= $oldReferralCount; } // END - if } else { // Load current refs from database $result_ref = sqlQueryEscaped("SELECT SUM(s.counter) AS `cnt` FROM `{?_MYSQL_PREFIX?}_refsystem` AS `s` LEFT JOIN `{?_MYSQL_PREFIX?}_refdepths` AS `d` ON `s`.`level`=`d`.`level` WHERE `s`.`userid`=%s AND `s`.`level`=1", array( bigintval($userid) ), __FUNCTION__, __LINE__); // Load count @TODO Can't we rewrite this to our API? list($count) = sqlFetchRow($result_ref); // Free result sqlFreeResult($result_ref); if (empty($count)) { $count = '0'; } else { $count -= $oldReferralCount; } } // Return count //* DEBUG: */ debugOutput('*'.$userid.'/'.$oldReferralCount.'/'.$count.'*'); return $count; } // Determines the right language string for min_users function determineReferralRallyeMinimumUsers ($min_users) { // Rallye ends without user limitation is the default $return = '{--RALLYE_END_NO_USER_LIMITATION--}'; if ($min_users > 0) { // Rallye ends when X members are totally in your exchange $return = '{%message,RALLYE_END_USERS=' . $min_users . '%}'; } // END - if // Return return $return; } // Determines the right language string for min_prices function determineReferralRallyeMinimumPrices ($min_prices) { // Rallye ends without user limitation is the default $return = '{--RALLYE_END_NO_PRICE_LIMITATION--}'; if ($min_prices > 0) { // Rallye ends when X members are totally in your exchange $return = '{%message,RALLYE_END_PRICES=' . $min_prices . '%}'; } // END - if // Return return $return; } // "Getter" for total rallye prices by given id function getTotalRallyePrices ($rallyeId) { // Is there cache? if (!isset($GLOBALS[__FUNCTION__][$rallyeId])) { // Determine it $GLOBALS[__FUNCTION__][$rallyeId] = countSumTotalData($rallyeId, 'rallye_prices', 'id', 'rallye_id', TRUE); } // END - if // Return it return $GLOBALS[__FUNCTION__][$rallyeId]; } // [EOF] ?>