]> git.mxchange.org Git - mailer.git/blob - inc/libs/refback_functions.php
Some words rewritten
[mailer.git] / inc / libs / refback_functions.php
1 <?php
2 /************************************************************************
3  * Mailer v0.2.1-FINAL                                Start: 09/28/2008 *
4  * ===================                          Last change: 09/28/2008 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : refback_functions.php                            *
8  * -------------------------------------------------------------------- *
9  * Short description : Functions for refback extension                  *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Funktionen fuer Refback-Erweiterung              *
12  * -------------------------------------------------------------------- *
13  * $Revision::                                                        $ *
14  * $Date::                                                            $ *
15  * $Tag:: 0.2.1-FINAL                                                 $ *
16  * $Author::                                                          $ *
17  * -------------------------------------------------------------------- *
18  * Copyright (c) 2003 - 2009 by Roland Haeder                           *
19  * Copyright (c) 2009 - 2011 by Mailer Developer Team                   *
20  * For more information visit: http://www.mxchange.org                  *
21  *                                                                      *
22  * This program is free software; you can redistribute it and/or modify *
23  * it under the terms of the GNU General Public License as published by *
24  * the Free Software Foundation; either version 2 of the License, or    *
25  * (at your option) any later version.                                  *
26  *                                                                      *
27  * This program is distributed in the hope that it will be useful,      *
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
30  * GNU General Public License for more details.                         *
31  *                                                                      *
32  * You should have received a copy of the GNU General Public License    *
33  * along with this program; if not, write to the Free Software          *
34  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
35  * MA  02110-1301  USA                                                  *
36  ************************************************************************/
37
38 // Some security stuff...
39 if (!defined('__SECURITY')) {
40         die();
41 } // END - if
42
43 // Payback refback for refid and reduce it for current user
44 function addRefbackPoints ($userid, $ref, $points, $ref_points) {
45         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',points=' . $points . ',ref_points=' . $ref_points . ' - ENTERED!');
46         // Back ref depths
47         $GLOBALS['refback_depth'][$userid][$ref] = $GLOBALS['ref_level'];
48
49         // Init points
50         $return = $ref_points;
51
52         // Get all ref levels
53         $result_refs = SQL_QUERY('SELECT `level`, `percents` FROM `{?_MYSQL_PREFIX?}_refdepths` WHERE `level` > 0 ORDER BY `level` ASC',
54                 __FUNCTION__, __LINE__);
55
56         // "Walk" through all level
57         while ($content = SQL_FETCHARRAY($result_refs)) {
58                 // Reset ref depths
59                 initReferalSystem();
60
61                 // "Walk" through all refids
62                 //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',level=' . $content['level'] . ',percents=' . $content['refback_percents'] . ',points=' . $points . ' - LOOP START!');
63                 foreach (getArrayFromRefbackLevel($userid, $content['level']) as $refid) {
64                         // Skip level zero or if both are the same
65                         if ($userid == $refid) {
66                                 continue;
67                         } // END - if
68
69                         // Get refback percents
70                         $percents = getRefbackPercents($userid, $refid);
71                         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',refid=' . $refid . ',points=' . $points . ',percents=' . $percents);
72
73                         // Some percents given?
74                         if ($percents > 0) {
75                                 //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'points=' . $points . ',[percents]=' . $content['refback_percents'] . ',percents=' . $percents . ',level=' . $content['level']);
76                                 // Calculate points for refback
77                                 $refback = $points * ($content['refback_percents'] / 100) * ($percents / 100);
78
79                                 // Update refback table ('refid' and 'userid' must be exchanged!)
80                                 SQL_QUERY_ESC("UPDATE
81         `{?_MYSQL_PREFIX?}_user_refs`
82 SET
83         `refback_points`=`refback_points`+%s
84 WHERE
85         `userid`=%s AND
86         `refid`=%s
87 LIMIT 1",
88                                         array(
89                                                 $refback,
90                                                 $refid,
91                                                 $userid
92                                         ), __FUNCTION__, __LINE__);
93
94                                 // Something must have been updated
95                                 if (SQL_HASZEROAFFECTED()) {
96                                         // Please report this bug
97                                         debug_report_bug(__FUNCTION__, __LINE__, 'Nothing has been updated in user_refs,userid=' . $userid . ',refid=' . $refid . ',refback=' . $refback);
98                                 } // END - if
99
100                                 // Add points again, but only directly
101                                 //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refback=' . $refback . ',userid=' . $userid . ',ref=' . $ref . ',refid=' . $refid . ' - UPDATE! (' . SQL_AFFECTEDROWS() . ')');
102                                 addPointsThroughReferalSystem(sprintf("refback:%s", $refid), $userid, $refback);
103
104                                 // Reduce points if refid is found
105                                 if ($refid == $ref) {
106                                         // Reduce points here!
107                                         $return = $points * ($content['refback_percents'] / 100) - $refback;
108                                         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'return=' . $return . ' - REDUCED!');
109                                 } // END - if
110                         } // END - if
111                 } // END foreach
112         } // END - while
113
114         // Free result
115         SQL_FREERESULT($result_refs);
116
117         // Restore ref depth
118         $GLOBALS['ref_level'] = $GLOBALS['refback_depth'][$userid][$ref];
119
120         // Return them
121         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',points=' . $points . ',ref_points=' . $ref_points . ',return=' . $return . ' - EXIT!');
122         return $return;
123 }
124
125 // "Getter" for refback percents
126 function getRefbackPercents ($userid, $ref) {
127         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ' - ENTERED!');
128         // Skip identical ids
129         if ($userid == $ref) {
130                 return 0;
131         } // END - if
132
133         // Is it cached?
134         if (!isset($GLOBALS['refback_percents'][$userid][$ref])) {
135                 // Default is zero
136                 $GLOBALS['refback_percents'][$userid][$ref] = '0';
137
138                 // Get percents from database
139                 $result = SQL_QUERY_ESC("SELECT `refback_percents` FROM `{?_MYSQL_PREFIX?}_user_refs` WHERE `userid`=%s AND `refid`=%s LIMIT 1",
140                         array($ref, $userid), __FUNCTION__, __LINE__);
141
142                 // Entry found? (Should be!)
143                 if (SQL_NUMROWS($result) == 1) {
144                         // Fetch percents
145                         list($GLOBALS['refback_percents'][$userid][$ref]) = SQL_FETCHROW($result);
146                         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',percents=' . $GLOBALS['refback_percents'][$userid][$ref]);
147                 } else {
148                         // Debug log
149                         logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ' - No entry found. :-(');
150                 }
151
152                 // Free result
153                 SQL_FREERESULT($result);
154         } // END - if
155
156         // Return percents
157         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',ref=' . $ref . ',refback_percents=' . $GLOBALS['refback_percents'][$userid][$ref] . ' - EXIT!');
158         return $GLOBALS['refback_percents'][$userid][$ref];
159 }
160
161 // "Getter" for userid array which will return only one entry
162 function getArrayFromRefbackLevel ($refid, $level) {
163         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . $refid . ',level=' . $level);
164         // Init userids
165         $userIds = array();
166
167         // Look for all
168         $result = SQL_QUERY_ESC("SELECT
169         `userid`
170 FROM
171         `{?_MYSQL_PREFIX?}_user_refs`
172 WHERE
173         `refid`=%s AND
174         `level`=%s
175 ORDER BY
176         `userid` ASC",
177                 array($refid, $level), __FUNCTION__, __LINE__);
178
179         // Entries found?
180         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'numRows=' . SQL_NUMROWS($result));
181         if (!SQL_HASZERONUMS($result)) {
182                 // Add all
183                 while ($content = SQL_FETCHARRAY($result)) {
184                         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . $refid . ',level=' . $level . ',userid=' . $content['userid']);
185                         $userIds[] = $content['userid'];
186                 } // END - while
187         } // END - if
188
189         // Free result
190         SQL_FREERESULT($result);
191
192         // Return array
193         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'refid=' . $refid . ',userIds()=' . count($userIds) . ' - EXIT!');
194         return $userIds;
195 }
196
197 // "Getter" for array for user refs in given level
198 function getArrayFromRefbackUserRefs ($userid, $level) {
199         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ' - ENTERED!');
200         // Default is no refs and no nickname
201         $refs = array();
202
203         // Get refs from database
204         $result = SQL_QUERY_ESC("SELECT
205         r.`id`,
206         r.`refid`,
207         r.`refback_percents`,
208         r.`refback_points`,
209         d.`status`,
210         d.`joined`,
211         d.`mails_confirmed`,
212         d.`emails_received`,
213         d.`refid` AS `level_refid`
214 FROM
215         `{?_MYSQL_PREFIX?}_user_refs` AS r
216 LEFT JOIN
217         `{?_MYSQL_PREFIX?}_user_data` AS d
218 ON
219         r.`refid`=d.`userid`
220 WHERE
221         r.`userid`=%s AND
222         r.`level`=%s
223 ORDER BY
224         r.`refid` ASC",
225                 array(bigintval($userid), bigintval($level)), __FUNCTION__, __LINE__);
226
227         // Are there some entries?
228         if (!SQL_HASZERONUMS($result)) {
229                 // Fetch all entries
230                 while ($row = SQL_FETCHARRAY($result)) {
231                         // Init click rate
232                         $row['click_rate'] = '0';
233
234                         // Does he have received some mails?
235                         if ($row['emails_received'] > 0) {
236                                 // Calculate click rate
237                                 $row['click_rate'] = ($row['mails_confirmed'] / $row['emails_received'] * 100);
238                         } // END - if
239
240                         // Add row
241                         $refs[$row['id']] = $row;
242                 } // END - while
243         } // END - if
244
245         // Free result
246         SQL_FREERESULT($result);
247
248         // Return result
249         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . $userid . ',level=' . $level . ',refs()=' . count($refs) . ' - EXIT!');
250         return $refs;
251 }
252
253 // "Getter" for refback entry
254 function getArrayFromUserRefbackData ($id) {
255         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $id . ' - ENTERED!');
256         // Default data is nothing
257         $data = array();
258
259         // Secure id number
260         $id = bigintval($id);
261
262         // Get entry from database
263         $result = SQL_QUERY_ESC("SELECT `id`, `userid`, `refid`, `refback_percents`, `level`, `refback_points` FROM `{?_MYSQL_PREFIX?}_user_refs` WHERE `id`=%s AND `userid`=%s LIMIT 1",
264                 array($id, getMemberId()), __FUNCTION__, __LINE__);
265
266         // Is there an entry?
267         if (SQL_NUMROWS($result) == 1) {
268                 // Fetch data
269                 $data = SQL_FETCHARRAY($result);
270         } // END - if
271
272         // Free result
273         SQL_FREERESULT($result);
274
275         // Return entry
276         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $id . ',data()=' . count($data) . ' - EXIT!');
277         return $data;
278 }
279
280 // Update refback percents (but with some sanity-checks!
281 function updateMemberRefbackPercents ($id, $percents) {
282         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $id . ',percents=' . $percents . ' - ENTERED!');
283         // Default status is failed
284         $status['message'] = 'MEMBER_REFBACK_ERROR_GENERAL';
285
286         // Do some sanity-checks
287         if (!isMember()) {
288                 // No member!
289                 $status['message'] = 'MEMBER_REFBACK_ERROR_NO_MEMBER';
290                 return $status;
291         } elseif (''.$id.'' != ''.($id + 0).'') {
292                 // No number!
293                 $status['message'] = 'MEMBER_REFBACK_ERROR_INVALID_ID_NUMBER';
294                 return $status;
295         } elseif (($percents < 0) || ($percents > 100)) {
296                 // Percentage is not valid!
297                 $status['message'] = 'MEMBER_REFBACK_ERROR_INVALID_PERCENTAGE';
298                 return $status;
299         }
300
301         // Get ref entry
302         $dummy = getArrayFromUserRefbackData($id);
303
304         // Is this valid?
305         if (count($dummy) == 0) {
306                 // id does not belong to user!
307                 $status['message'] = 'MEMBER_REFBACK_ERROR_ID_MISMATCH';
308                 return $status;
309         } // END - if
310
311         // Revert german commata
312         $percents = convertCommaToDot($percents);
313
314         // Update entry
315         SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_user_refs` SET `refback_percents`='%s' WHERE `id`=%s AND `userid`=%s LIMIT 1",
316                 array(
317                         $percents,
318                         $id,
319                         getMemberId()
320                 ), __FUNCTION__, __LINE__);
321
322         // Entry updated?
323         if (SQL_HASZEROAFFECTED()) {
324                 // Entry not updated!
325                 $status['message'] = 'MEMBER_REFBACK_ERROR_NOT_UPDATED';
326                 return $status;
327         } // END - if
328
329         // Prepare email content
330         $dummy['refback_percents'] = $percents;
331
332         // Load member email template
333         $mail = loadEmailTemplate('member_refback', $dummy, $dummy['refid']);
334
335         // Send email to user
336         sendEmail($dummy['refid'], '{--MEMBER_REFBACK_SUBJECT--}', $mail);
337
338         // Send admin notification
339         sendAdminNotification('{--ADMIN_REFBACK_SUBJECT--}', 'admin_refback', $dummy, getMemberId());
340
341         // All fine!
342         $status['ok'] = true;
343
344         // Return status array
345         //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $id . ',percents=' . $percents . ' - EXIT!');
346         return $status;
347 }
348
349 // Checks wether refback is enabled
350 function isRefbackEnabled () {
351         // Do we have cache?
352         if (!isset($GLOBALS[__FUNCTION__])) {
353                 // Determine it
354                 $GLOBALS[__FUNCTION__] = (getConfig('refback_enabled') == 'Y');
355         } // END - if
356
357         // Return cache
358         return $GLOBALS[__FUNCTION__];
359 }
360
361 // [EOF]
362 ?>