+// "Getter" for array for user refs and points in given level
+function getUserReferalPoints ($userid, $level) {
+ //* DEBUG: */ debugOutput('----------------------- <font color="#00aa00">'.__FUNCTION__.' - ENTRY</font> ------------------------<ul><li>');
+ // Default is no refs and no nickname
+ $add = '';
+ $refs = array();
+
+ // Do we have nickname extension installed?
+ if (isExtensionActive('nickname')) {
+ $add = ', ud.nickname';
+ } // END - if
+
+ // Get refs from database
+ $result = SQL_QUERY_ESC("SELECT
+ ur.id, ur.refid, ud.status, ud.last_online, ud.mails_confirmed, ud.emails_received".$add."
+FROM
+ `{?_MYSQL_PREFIX?}_user_refs` AS ur
+LEFT JOIN
+ `{?_MYSQL_PREFIX?}_user_points` AS up
+ON
+ ur.refid=up.userid AND ur.level=0
+LEFT JOIN
+ `{?_MYSQL_PREFIX?}_user_data` AS ud
+ON
+ ur.refid=ud.userid
+WHERE
+ ur.userid=%s AND ur.level=%s
+ORDER BY
+ ur.refid ASC",
+ array(
+ bigintval($userid),
+ bigintval($level)
+ ), __FUNCTION__, __LINE__);
+
+ // Are there some entries?
+ if (!SQL_HASZERONUMS($result)) {
+ // Fetch all entries
+ while ($row = SQL_FETCHARRAY($result)) {
+ // Get total points of this user
+ $row['points'] = getTotalPoints($row['refid']);
+
+ // Get unconfirmed mails
+ $row['unconfirmed'] = countSumTotalData($row['refid'], 'user_links', 'id', 'userid', true);
+
+ // Init clickrate with zero
+ $row['clickrate'] = '0';
+
+ // Is at least one mail received?
+ if ($row['emails_received'] > 0) {
+ // Calculate clickrate
+ $row['clickrate'] = ($row['mails_confirmed'] / $row['emails_received'] * 100);
+ } // END - if
+
+ // Activity is 'active' by default because if autopurge is not installed
+ $row['activity'] = '{--MEMBER_ACTIVITY_ACTIVE--}';
+
+ // Is autopurge installed and the user inactive?
+ if ((isExtensionActive('autopurge')) && ((time() - getApInactiveSince()) >= $row['last_online'])) {
+ // Inactive user!
+ $row['activity'] = '{--MEMBER_ACTIVITY_INACTIVE--}';
+ } // END - if
+
+ // Remove some entries
+ unset($row['mails_confirmed']);
+ unset($row['emails_received']);
+ unset($row['last_online']);
+
+ // Add row
+ $refs[$row['id']] = $row;
+ } // END - while
+ } // END - if
+
+ // Free result
+ SQL_FREERESULT($result);
+
+ // Return result
+ //* DEBUG: */ debugOutput('</li></ul>----------------------- <font color="#aa0000">'.__FUNCTION__.' - EXIT</font> ------------------------<br />');
+ return $refs;
+}
+
+// Recuce the amount of received emails for the receipients for given email
+function reduceRecipientReceivedMails ($column, $id, $count) {
+ // Search for mail in database
+ $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_user_links` WHERE `%s`=%s ORDER BY `userid` ASC LIMIT %s",
+ array($column, bigintval($id), $count), __FUNCTION__, __LINE__);
+
+ // Are there entries?
+ if (!SQL_HASZERONUMS($result)) {
+ // Now load all userids for one big query!
+ $userids = array();
+ while ($data = SQL_FETCHARRAY($result)) {
+ // By default we want to reduce and have no mails found
+ $num = 0;
+
+ // We must now look if he has already confirmed this mail, so might sound double, but it may resolve problems
+ // @TODO Rewrite this to a filter
+ if ((isset($data['stats_id'])) && ($data['stats_id'] > 0)) {
+ // User email
+ $num = countSumTotalData($data['userid'], 'user_stats_data', 'id', 'userid', true, sprintf(" AND `stats_type`='mailid' AND `stats_data`=%s", bigintval($data['stats_id'])));
+ } elseif ((isset($data['bonus_id'])) && ($data['bonus_id'] > 0)) {
+ // Bonus mail
+ $num = countSumTotalData($data['userid'], 'user_stats_data', 'id', 'userid', true, sprintf(" AND `stats_type`='bonusid' AND `stats_data`=%s", bigintval($data['bonus_id'])));
+ }
+
+ // Reduce this users total received emails?
+ if ($num === 0) $userids[$data['userid']] = $data['userid'];
+ } // END - while
+
+ if (count($userids) > 0) {
+ // Now update all user accounts
+ SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_user_data` SET `emails_received`=`emails_received`-1 WHERE `userid` IN (%s) LIMIT %s",
+ array(implode(',', $userids), count($userids)), __FUNCTION__, __LINE__);
+ } else {
+ // Nothing deleted
+ loadTemplate('admin_settings_saved', false, getMaskedMessage('ADMIN_MAIL_NOTHING_DELETED', $id));
+ }
+ } // END - if
+
+ // Free result
+ SQL_FREERESULT($result);
+}
+
+// Creates a new task
+function createNewTask ($subject, $notes, $taskType, $userid = '0', $adminId = '0', $strip = true) {
+ // Insert the task data into the database
+ SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_task_system` (`assigned_admin`, `userid`, `status`, `task_type`, `subject`, `text`, `task_created`) VALUES (%s,%s,'NEW','%s','%s','%s', UNIX_TIMESTAMP())",
+ array(
+ $adminId,
+ $userid,
+ $taskType,
+ $subject,
+ $notes
+ ), __FUNCTION__, __LINE__, true, $strip);
+
+ // Return insert id which is the task id
+ return SQL_INSERTID();
+}
+
+// Updates last module / online time
+// @TODO Fix inconsistency between last_module and getWhat()
+function updateLastActivity($userid) {
+ // Run the update query
+ SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_user_data` SET `last_module`='%s', `last_online`=UNIX_TIMESTAMP(), `REMOTE_ADDR`='%s' WHERE `userid`=%s LIMIT 1",
+ array(
+ getWhat(),
+ detectRemoteAddr(),
+ bigintval($userid)
+ ), __FUNCTION__, __LINE__);
+}
+
+// [EOF]