List active/inactive extensions
[mailer.git] / 0.2.1 / inc / libs / rallye_functions.php
1 <?php\r
2 /************************************************************************\r
3  * MXChange v0.2.1                                    Start: 08/22/2004 *\r
4  * ===============                              Last change: 08/24/2004 *\r
5  *                                                                      *\r
6  * -------------------------------------------------------------------- *\r
7  * File              : rallye_functions.php                             *\r
8  * -------------------------------------------------------------------- *\r
9  * Short description : Special functions for rallye extension           *\r
10  * -------------------------------------------------------------------- *\r
11  * Kurzbeschreibung  : Spezielle Funktion fuer rallye-Erweiterung       *\r
12  * -------------------------------------------------------------------- *\r
13  *                                                                      *\r
14  * -------------------------------------------------------------------- *\r
15  * Copyright (c) 2003 - 2008 by Roland Haeder                           *\r
16  * For more information visit: http://www.mxchange.org                  *\r
17  *                                                                      *\r
18  * This program is free software; you can redistribute it and/or modify *\r
19  * it under the terms of the GNU General Public License as published by *\r
20  * the Free Software Foundation; either version 2 of the License, or    *\r
21  * (at your option) any later version.                                  *\r
22  *                                                                      *\r
23  * This program is distributed in the hope that it will be useful,      *\r
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *\r
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *\r
26  * GNU General Public License for more details.                         *\r
27  *                                                                      *\r
28  * You should have received a copy of the GNU General Public License    *\r
29  * along with this program; if not, write to the Free Software          *\r
30  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *\r
31  * MA  02110-1301  USA                                                  *\r
32  ************************************************************************/\r
33 \r
34 // Some security stuff...\r
35 if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))\r
36 {\r
37         $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4)."/security.php";\r
38         require($INC);\r
39 }\r
40 //\r
41 function RALLYE_AUTOSTART_RALLYES($result)\r
42 {\r
43         // Global data array for LOAD_EMAIL_TEMPLATE()\r
44         $DATA = array();\r
45         global $DATA, $CONFIG;\r
46 \r
47         // Load all rallyes (usally we have only one rallye active per time!\r
48         list($id, $title, $start, $end, $notify, $min_users, $min_prices) = SQL_FETCHROW($result);\r
49         SQL_FREERESULT($result);\r
50 \r
51         // Set notified to Y\r
52         $result_notified = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_rallye_data SET notified='Y' WHERE id=%d LIMIT 1",\r
53          array(bigintval($id)), __FILE__, __LINE__);\r
54 \r
55         // Do a snapshot off all user refs\r
56         $result_user = SQL_QUERY("SELECT userid FROM "._MYSQL_PREFIX."_user_data WHERE status='CONFIRMED' ORDER BY userid", __FILE__, __LINE__);\r
57 \r
58         // Transfer all neccessary data to the global $DATA array\r
59         $DATA['uid_cnt']    = SQL_NUMROWS($result_user);\r
60         $DATA['start']      = MAKE_DATETIME($start, "2");\r
61         $DATA['end']        = MAKE_DATETIME($end  , "2");\r
62         $DATA['now_t']      = MAKE_DATETIME(time(), "2");\r
63         $DATA['title']      = $title;\r
64         $DATA['id']         = $id;  // ID for the rallye details link\r
65 \r
66         if ($min_users == 0)\r
67         {\r
68                 // Rallye ends without user limitation\r
69                 $DATA['min_users'] = RALLYE_END_NO_USER_LIMITATION;\r
70         }\r
71          else\r
72         {\r
73                 // Rallye ends when X members are totally in your exchange\r
74                 $DATA['min_users'] = RALLYE_END_USERS_1." ".$min_users." ".RALLYE_END_USERS_2;\r
75         }\r
76         if ($min_prices == 0)\r
77         {\r
78                 // Rallye ends without user limitation\r
79                 $DATA['min_prices'] = RALLYE_END_NO_PRICE_LIMITATION;\r
80         }\r
81          else\r
82         {\r
83                 // Rallye ends when X members are totally in your exchange\r
84                 $DATA['min_prices'] = RALLYE_END_PRICES_1." ".$min_prices." ".RALLYE_END_PRICES_2;\r
85         }\r
86 \r
87         // Load prices\r
88         $prices = RALLYE_ADD_PRICES($id);\r
89 \r
90         // Let's begin with the userids...\r
91         while (list($uid) = SQL_FETCHROW($result_user))\r
92         {\r
93                 $un = false;\r
94 \r
95                 // Get refs by userid\r
96                 $cnt = RALLYE_GET_REFCOUNT($uid);\r
97                 if (empty($cnt)) $cnt = "0"; // Added prevent some unknown troubles... :-?\r
98 \r
99                 // Check if line is already included...\r
100                 $result_ref = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_rallye_users WHERE rallye_id=%d AND userid=%d LIMIT 1",\r
101                  array(bigintval($id), bigintval($uid)), __FILE__, __LINE__);\r
102                 if (SQL_NUMROWS($result_ref) == 0)\r
103                 {\r
104                         // Free memory\r
105                         SQL_FREERESULT($result_ref);\r
106 \r
107                         // Add userid and his ref count to table\r
108                         $result_ref = SQL_QUERY_ESC("SELECT DISTINCT SUM(p.points)\r
109 FROM "._MYSQL_PREFIX."_user_points AS p\r
110 LEFT JOIN "._MYSQL_PREFIX."_user_data AS d\r
111 ON p.userid=d.userid\r
112 WHERE d.status='CONFIRMED' AND d.max_mails > 0 AND d.mails_confirmed >= %s AND p.ref_depth='1' AND p.points > 0 AND d.userid=%d",\r
113  array($CONFIG['ref_payout'], bigintval($uid)), __FILE__, __LINE__);\r
114                         list($cpoints) = SQL_FETCHROW($result_ref);\r
115                         SQL_FREERESULT($result_ref);\r
116 \r
117                         if (empty($cpoints)) $cpoints = "0.00000";\r
118 \r
119                         // Add info line\r
120                         $result_ref = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_rallye_users (rallye_id, userid, refs, curr_points)\r
121 VALUES ('%s', '%s', '%s', '%s')",\r
122  array(bigintval($id), bigintval($uid), bigintval($cnt), $cpoints), __FILE__, __LINE__);\r
123                         $un = true;\r
124                 }\r
125 \r
126                 // Ignored but for the template required refs (made before start of rallye)\r
127                 $DATA['refs']  = $cnt;\r
128 \r
129                 // Shall I notify this member?\r
130                 if (($notify == "Y") && ($un))\r
131                 {\r
132                         // Load email template and send it to the user\r
133                         $msg = LOAD_EMAIL_TEMPLATE("member_rallye_notify", $prices, $uid);\r
134                         SEND_EMAIL($uid, RALLYE_MEMBER_NOTIFY.$title, $msg);\r
135                 }\r
136         }\r
137 \r
138         // Send email to admin\r
139         $templ = "admin_rallye_no_notify";\r
140         if ($notify == "Y") $templ = "admin_rallye_notify";\r
141         if (GET_EXT_VERSION("admins") < "0.4.1")\r
142         {\r
143                 // Use old method to send out\r
144                 $msg = LOAD_EMAIL_TEMPLATE($templ, $prices, 0);\r
145                 SEND_ADMIN_EMAILS(RALLYE_ADMIN_NOTIFY.$title, $msg);\r
146         }\r
147          else\r
148         {\r
149                 // Use new system to send out\r
150                 SEND_ADMIN_EMAILS_PRO(RALLYE_ADMIN_NOTIFY.$title, $templ, $prices, "0");\r
151         }\r
152 \r
153         // Free memory\r
154         SQL_FREERESULT($result_user);\r
155 }\r
156 //\r
157 function RALLYE_ADD_PRICES($rallye,$mode="email")\r
158 {\r
159         // Output mode\r
160         switch($mode)\r
161         {\r
162                 case "email": $mode = "\n";     break;\r
163                 case "html" : $mode = "<BR>\n"; break;\r
164         }\r
165 \r
166         // Load prices\r
167         $result_prices = SQL_QUERY("SELECT price_level, points, info FROM "._MYSQL_PREFIX."_rallye_prices WHERE rallye_id='".$rallye."' ORDER BY price_level", __FILE__, __LINE__);\r
168         if (SQL_NUMROWS($result_prices) > 0)\r
169         {\r
170                 // Load prices\r
171                 if ($mode == "\n") $prices = RALLYE_MEMBER_PRICES_ADDED.":".$mode."------------------------------".$mode;\r
172                 $prices = "";\r
173                 while (list($level, $points, $info) = SQL_FETCHROW($result_prices))\r
174                 {\r
175                         $prices .= $level.RALLYE_PRICE.": ";\r
176                         if (!empty($info))\r
177                         {\r
178                                 $prices .= $info;\r
179                         }\r
180                          else\r
181                         {\r
182                                 $prices .= $points." ".POINTS;\r
183                         }\r
184                         $prices .= "".$mode;\r
185                 }\r
186 \r
187                 // Free memory\r
188                 SQL_FREERESULT($result_prices);\r
189         }\r
190          else\r
191         {\r
192                 // No prices???\r
193                 $prices = RALLYE_MEMBER_NO_PRICES.$mode;\r
194         }\r
195         // Add last line for email mode\r
196         if ($mode == "\n") $prices .= "------------------------------";\r
197 \r
198         // Return price list\r
199         return $prices;\r
200 }\r
201 //\r
202 function RALLYE_ADD_TOPUSERS($rallye,$default=0)\r
203 {\r
204         global $CONFIG;\r
205         $since = (time() - $CONFIG['ap_in_since']);\r
206 \r
207         // First check how many prices are set\r
208         $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_rallye_prices WHERE rallye_id=%d ORDER BY price_level",\r
209          array(bigintval($rallye)), __FILE__, __LINE__);\r
210         $prices = SQL_NUMROWS($result);\r
211         SQL_FREERESULT($result);\r
212 \r
213         // And load only limited users\r
214         $result = SQL_QUERY_ESC("SELECT DISTINCT u.userid, u.refs, u.curr_points FROM "._MYSQL_PREFIX."_rallye_users AS u\r
215 LEFT JOIN "._MYSQL_PREFIX."_refsystem AS r\r
216 ON u.userid=r.userid\r
217 WHERE u.rallye_id=%d AND r.counter > 0 ORDER BY u.refs DESC",\r
218  array(bigintval($rallye)), __FILE__, __LINE__);\r
219 \r
220         // Load users\r
221         $DATA = array(\r
222                 'uid'      => array(),\r
223                 'ref'      => array(),\r
224                 'cpoints'  => array()\r
225         );\r
226 \r
227         while(list($uid, $refs, $cpoints) = SQL_FETCHROW($result))\r
228         {\r
229                 // Get current refs\r
230                 $cnt = RALLYE_GET_REFCOUNT($uid, $refs);\r
231 \r
232                 // Points of ref's\r
233                 $result_ref = SQL_QUERY_ESC("SELECT DISTINCT p.points FROM "._MYSQL_PREFIX."_user_points AS p\r
234 LEFT JOIN "._MYSQL_PREFIX."_user_data AS d\r
235 ON p.userid=d.userid\r
236 WHERE d.userid=%d AND d.status='CONFIRMED' AND p.ref_depth='1' AND d.max_mails > 0 AND d.mails_confirmed >= %s AND d.last_online >= %s\r
237 LIMIT 1", array(bigintval($uid), $CONFIG['ref_payout'], $since), __FILE__, __LINE__);\r
238                 list($refpoints) = SQL_FETCHROW($result_ref);\r
239                 SQL_FREERESULT($result_ref);\r
240 \r
241                 if (empty($refpoints)) $refpoints = "0";\r
242 \r
243                 // And subtract start refs\r
244                 $cnt -= $refs;\r
245 \r
246                 $_uid = "---";\r
247                 // List only users with at least one ref!\r
248                 if (($cnt > 0) && ($refpoints > $cpoints)) { $_uid = $uid; } else { $cnt = ""; }\r
249 \r
250                 // Save values to array\r
251                 $DATA['uid'][]     = $_uid;\r
252                 $DATA['ref'][]     = $cnt;\r
253                 $DATA['cpoints'][] = $cpoints;\r
254         }\r
255 \r
256         // Free memory\r
257         SQL_FREERESULT($result);\r
258 \r
259         // Sort whole array\r
260         array_pk_sort($DATA, array("ref", "cpoints"), 0, 1, true);\r
261 \r
262         // Generate table\r
263         $OUT = LOAD_TEMPLATE("guest_rallye_header", true);\r
264         $SW = 2;\r
265         for ($idx = 0; $idx < $prices; $idx++)\r
266         {\r
267                 if (empty($DATA['uid'][$idx])) $DATA['uid'][$idx] = "---";\r
268                 if (empty($DATA['ref'][$idx])) $DATA['ref'][$idx] = "---";\r
269                 // Add row\r
270                 $OUT .= "<TR>\r
271   <TD class=\"switch_sw".$SW." bottom2\">&nbsp;&nbsp;".($idx+1).".</TD>\r
272   <TD align=\"center\" class=\"switch_sw".$SW." bottom2\">";\r
273                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<STRONG>";\r
274                 $OUT .= $DATA['uid'][$idx];\r
275                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</STRONG>";\r
276                 $OUT .= "</TD>\r
277   <TD align=\"center\" class=\"switch_sw".$SW." bottom2\">";\r
278                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<STRONG>";\r
279                 $OUT .= $DATA['ref'][$idx];\r
280                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</STRONG>";\r
281                 $OUT .= "</TD>\r
282 </TR>\n";\r
283                 $SW = 3 - $SW;\r
284         }\r
285         // Add footer\r
286         $OUT .= LOAD_TEMPLATE("guest_rallye_footer", true);\r
287 \r
288         // And finnally return the output\r
289         return $OUT;\r
290 }\r
291 // Run this function only when a new member has confirmed his email address!\r
292 function RALLYE_AUTOADD_USER($uid)\r
293 {\r
294         global $DATA;\r
295         // Check for an auto-add rallye\r
296         $result = SQL_QUERY("SELECT id, title, start_time, end_time, send_notify FROM "._MYSQL_PREFIX."_rallye_data WHERE is_active='Y' AND notified='Y' AND auto_add_new_user='Y' AND expired='N' LIMIT 1", __FILE__, __LINE__);\r
297         if (SQL_NUMROWS($result) == 1)\r
298         {\r
299                 // Load data\r
300                 list($id, $title, $start, $end, $notify) = SQL_FETCHROW($result);\r
301                 SQL_FREERESULT($result);\r
302 \r
303                 // Check if line is already included...\r
304                 $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_rallye_users WHERE rallye_id=%d AND userid=%d LIMIT 1",\r
305                  array(bigintval($id), bigintval($uid)), __FILE__, __LINE__);\r
306                 if (SQL_NUMROWS($result) == 0)\r
307                 {\r
308                         // Add userid and his ref count to table\r
309                         $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_rallye_users (rallye_id, userid, refs)\r
310 VALUES ('%s', '%s', '0')",\r
311  array(bigintval($id), bigintval($uid)), __FILE__, __LINE__);\r
312                 }\r
313                  else\r
314                 {\r
315                         // Free memory\r
316                         SQL_FREERESULT($result);\r
317                 }\r
318 \r
319                 if ($notify == "Y")\r
320                 {\r
321                         // Transfer all neccessary data to the global $DATA array\r
322                         $DATA['start'] = MAKE_DATETIME($start, "2");\r
323                         $DATA['end']   = MAKE_DATETIME($end  , "2");\r
324                         $DATA['now_t'] = MAKE_DATETIME(time(), "2");\r
325                         $DATA['title'] = $title;\r
326                         $DATA['id']    = $id;  // ID for the rallye details link\r
327                         $DATA['ref']   = "0";\r
328 \r
329                         // Load prices\r
330                         $prices = RALLYE_ADD_PRICES($id);\r
331 \r
332                         // Send notification to member\r
333                         $msg = LOAD_EMAIL_TEMPLATE("member_rallye_notify", $prices, $uid);\r
334                         SEND_EMAIL($uid, RALLYE_MEMBER_NOTIFY.$title, $msg);\r
335                 }\r
336         }\r
337 }\r
338 //\r
339 function RALLYE_EXPIRE_RALLYES($result)\r
340 {\r
341         global $DATA, $CONFIG;\r
342 \r
343         // Latest online time\r
344         $since = (time() - $CONFIG['ap_in_since']);\r
345 \r
346         // Load rallye data\r
347         list($id, $title, $start, $end, $notify, $min_users, $min_prices) = SQL_FETCHROW($result);\r
348         SQL_FREERESULT($result);\r
349 \r
350         // Load users array (!) with assigned prices\r
351         $prices = RALLYE_LOAD_USERS_ARRAY($id);\r
352 \r
353         // Init array\r
354         $DATA = array(); $cnt = 0;\r
355         $users = array();\r
356         $DATA['title']  = $title;\r
357         $DATA['start']  = MAKE_DATETIME($start, "1");\r
358         $DATA['end']    = MAKE_DATETIME($end  , "1");\r
359         $DATA['now_t']  = MAKE_DATETIME(time(), "1");\r
360 \r
361         // Just count...\r
362         $TOTAL = 0;\r
363         foreach($prices['uid'] as $key=>$uid)\r
364         {\r
365                 // Check status\r
366                 //   active = 1: account is still confirmed\r
367                 //   active = 0: account is deleted or locked\r
368                 $result = SQL_QUERY_ESC("SELECT COUNT(userid) AS active\r
369 FROM "._MYSQL_PREFIX."_user_data\r
370 WHERE userid=%d AND status='CONFIRMED' AND last_online >= %s\r
371 LIMIT 1", array(bigintval($uid), $since), __FILE__, __LINE__);\r
372                 list($active) = SQL_FETCHROW($result);\r
373                 SQL_FREERESULT($result);\r
374 \r
375                 $prices['active'][$key] = $active;\r
376 \r
377                 // Allow valid and active users with at least one ref to get points\r
378                 if (($uid > 0) && ($prices['ref'][$key] > 0) && ($active == 1) && ($prices['cpoints'][$key] > 0))\r
379                 {\r
380                         $TOTAL++;\r
381                 }\r
382         }\r
383 \r
384         if (($TOTAL < $min_prices) || ($TOTAL == 0))\r
385         {\r
386                 // Do not end this rallye!\r
387                 return;\r
388         }\r
389 \r
390         // Expire rallye\r
391         $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_rallye_data SET expired='Y' WHERE id=%d LIMIT 1",\r
392          array(bigintval($id)), __FILE__, __LINE__);\r
393 \r
394         // Run array through (by uid is the most important 2nd-level-array)\r
395         foreach($prices['uid'] as $key=>$uid)\r
396         {\r
397                 // Allow valid and active users with at least one ref to get points\r
398                 if (($uid > 0) && ($prices['ref'][$key] > 0) && ($prices['active'][$key] == 1) && ($prices['cpoints'][$key] > 0))\r
399                 {\r
400                         // Transfer data to array for the mail template\r
401                         $DATA['level']  = $prices['level'][$key];\r
402                         $DATA['points'] = $prices['points'][$key];\r
403                         $DATA['info']   = $prices['info'][$key];\r
404                         $DATA['ref']    = $prices['ref'][$key];\r
405 \r
406                         if ($DATA['points'] > 0)\r
407                         {\r
408                                 // Add points directly to user's account\r
409                                 $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_points SET points=points+%s WHERE userid=%d AND ref_depth='0' LIMIT 1",\r
410                                  array($DATA['points'], bigintval($uid)), __FILE__, __LINE__);\r
411 \r
412                                 // Update mediadata as well\r
413                                 if (GET_EXT_VERSION("mediadata") >= "0.0.4")\r
414                                 {\r
415                                         // Update database\r
416                                         MEDIA_UPDATE_ENTRY(array("total_points"), "add", $DATA['points']);\r
417                                 }\r
418                         }\r
419 \r
420                         if ($notify == "Y")\r
421                         {\r
422                                 // Prepare infos for the mail template\r
423                                 if (!empty($DATA['info']))\r
424                                 {\r
425                                         // Take direct infos\r
426                                         $DATA['infos'] = $DATA['info'];\r
427                                 }\r
428                                  else\r
429                                 {\r
430                                         // Take points\r
431                                         $DATA['infos'] = $DATA['points']." ".POINTS;\r
432                                 }\r
433 \r
434                                 // Add suffix to template name\r
435                                 $template = "member_rallye_expired";\r
436                                 if ($DATA['level'] == 1)\r
437                                 {\r
438                                         // The winner!\r
439                                         $template .= "_gold";\r
440                                 }\r
441                                  elseif ($DATA['level'] == 2)\r
442                                 {\r
443                                         // The vice winner!\r
444                                         $template .= "_silver";\r
445                                 }\r
446                                  elseif ($DATA['level'] == 3)\r
447                                 {\r
448                                         // The bronce winner\r
449                                         $template .= "_bronce";\r
450                                 }\r
451 \r
452                                 // Load template\r
453                                 $msg = LOAD_EMAIL_TEMPLATE($template, $DATA, $uid);\r
454                                 SEND_EMAIL($uid, RALLYE_MEMBER_EXPIRED.": ".$DATA['level']." "._RALLYE_PRICE, $msg);\r
455                         }\r
456 \r
457                         // Count userid\r
458                         $cnt++;\r
459                         $users['uid'][$uid] = $uid;\r
460                         $users['poi'][$uid] = $DATA['infos'];\r
461                 }\r
462         }\r
463 \r
464         // Select template depending on notfication is switch on / off\r
465         if ($notify == "Y")\r
466         {\r
467                 $templ = "admin_rallye_expired";\r
468         }\r
469          elseif (is_array($users['uid']))\r
470         {\r
471                 $templ = "admin_rallye_expired_no";\r
472                 $cnt = RALLYE_LOAD_USER_DATA($users);\r
473         }\r
474 \r
475         // Send mail to admin\r
476         if (GET_EXT_VERSION("admins") < "0.4.1")\r
477         {\r
478                 // Use old method to send out\r
479                 $msg = LOAD_EMAIL_TEMPLATE($templ, $cnt, 0);\r
480                 SEND_ADMIN_EMAILS(RALLYE_ADMIN_EXPIRED.": ".$title, $msg);\r
481         }\r
482          else\r
483         {\r
484                 // Use new system to send out\r
485                 SEND_ADMIN_EMAILS_PRO(RALLYE_ADMIN_EXPIRED.": ".$title, $templ, $cnt, 0);\r
486         }\r
487 \r
488         // Add task\r
489         $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_task_system (status, task_type, subject, text, task_created)\r
490 VALUES ('NEW', 'RALLYE_EXPIRED', '".RALLYE_ADMIN_EXPIRED.": %s', '".RALLYE_ADMIN_EXPIRED_TEXT."', UNIX_TIMESTAMP())",\r
491  array($title), __FILE__, __LINE__);\r
492 \r
493         // All work done here...\r
494 }\r
495 //\r
496 function RALLYE_LOAD_USER_DATA($uids_array)\r
497 {\r
498         // Implode user ids\r
499         $uid_string = implode(",", $uids_array['uid']);\r
500 \r
501         // Load users\r
502         $result = SQL_QUERY_ESC("SELECT userid, sex, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid IN(%s) AND status='CONFIRMED' ORDER BY userid LIMIT %s",\r
503          array($uid_string, count($uids_array)), __FILE__, __LINE__);\r
504         $ret = "";\r
505         while (list($u, $sex, $surname, $family, $email) = SQL_FETCHROW($result))\r
506         {\r
507                 $ret .= TRANSLATE_SEX($sex)." ".$surname." ".$family." (".$email.") - ".$uids_array['poi'][$u]."\n";\r
508         }\r
509 \r
510         // Return result\r
511         return substr($ret, 0, -1);\r
512 }\r
513 //\r
514 function RALLYE_LOAD_PRICES_ARRAY($rallye)\r
515 {\r
516         // Init multi array\r
517         $prices = array(\r
518                 'level'  => array(),\r
519                 'points' => array(),\r
520                 'info'   => array()\r
521         );\r
522 \r
523         // Load prices\r
524         $result = SQL_QUERY_ESC("SELECT price_level, points, info FROM "._MYSQL_PREFIX."_rallye_prices WHERE rallye_id=%d ORDER BY price_level",\r
525          array(bigintval($rallye)), __FILE__, __LINE__);\r
526         while(list($level, $points, $info) = SQL_FETCHROW($result))\r
527         {\r
528                 $prices['level'][]  = $level;\r
529                 $prices['points'][] = $points;\r
530                 $prices['info'][]   = $info;\r
531         }\r
532 \r
533         // Free memory\r
534         SQL_FREERESULT($result);\r
535 \r
536         // Return array\r
537         return $prices;\r
538 }\r
539 //\r
540 function RALLYE_LOAD_USERS_ARRAY($rallye)\r
541 {\r
542         global $CONFIG;\r
543 \r
544         // Fix zero points to 0.00000\r
545         if ($CONFIG['ref_payout'] == "0") $CONFIG['ref_payout'] = "0.00000";\r
546 \r
547         // Init multi array\r
548         $users = array(\r
549                 'uid'     => array(),\r
550                 'ref'     => array(),\r
551                 'cpoints' => array(),\r
552         );\r
553 \r
554         // Load users                    uid    old   points earned\r
555         $result_user = SQL_QUERY_ESC("SELECT userid, refs, curr_points FROM "._MYSQL_PREFIX."_rallye_users WHERE rallye_id=%d ORDER BY userid",\r
556          array(bigintval($rallye)), __FILE__, __LINE__);\r
557         while(list($uid, $refs, $cpoints) = SQL_FETCHROW($result_user))\r
558         {\r
559                 // Load current ref count\r
560                 $cnt = RALLYE_GET_REFCOUNT($uid, $refs);\r
561 \r
562                 // Points of ref's\r
563                 $result_ref = SQL_QUERY_ESC("SELECT DISTINCT SUM(p.points)\r
564 FROM "._MYSQL_PREFIX."_user_points AS p\r
565 LEFT JOIN "._MYSQL_PREFIX."_user_data AS d\r
566 ON p.userid=d.userid\r
567 WHERE d.status='CONFIRMED' AND d.max_mails > 0 AND d.mails_confirmed >= %s AND p.ref_depth='1' AND p.points > 0 AND d.userid=%d",\r
568  array($CONFIG['ref_payout'], bigintval($uid)), __FILE__, __LINE__);\r
569                 list($refpoints) = SQL_FETCHROW($result_ref);\r
570                 SQL_FREERESULT($result_ref);\r
571 \r
572                 if (empty($refpoints)) $refpoints = "0";\r
573 \r
574                 // Store calculated new refs to array\r
575                 $users['uid'][]     = $uid;\r
576                 $users['ref'][]     = abs($cnt - $refs);\r
577                 $users['cpoints'][] = $refpoints - $cpoints;\r
578         }\r
579 \r
580         // Free memory\r
581         SQL_FREERESULT($result_user);\r
582 \r
583         // Sort array for refs (descending)\r
584         array_pk_sort($users, array("ref", "cpoints"), 0, 1, true);\r
585 \r
586         // Load prices array (!)\r
587         $prices = RALLYE_LOAD_PRICES_ARRAY($rallye);\r
588 \r
589         // Merge users into prices\r
590         foreach ($prices['level'] as $k=>$lvl)\r
591         {\r
592                 $prices['uid'][$k]  = $users['uid'][$k];\r
593                 if (empty($prices['uid'][$k])) $prices['uid'][$k]  = "---";\r
594                 $prices['ref'][$k] = $users['ref'][$k];\r
595                 if (empty($prices['ref'][$k])) $prices['ref'][$k] = "---";\r
596                 $prices['cpoints'][$k] = $users['cpoints'][$k];\r
597         }\r
598 \r
599         // Return completed array\r
600         return $prices;\r
601 }\r
602 //\r
603 function RALLYE_LIST_WINNERS($rallye,$default=0)\r
604 {\r
605         // First check how many prices are set\r
606         $result_prices = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_rallye_prices WHERE rallye_id=%d ORDER BY price_level",\r
607          array(bigintval($rallye)), __FILE__, __LINE__);\r
608         $prices = SQL_NUMROWS($result_prices);\r
609         SQL_FREERESULT($result_prices);\r
610 \r
611         // Load data\r
612         $DATA = RALLYE_LOAD_USERS_ARRAY($rallye);\r
613 \r
614         // Generate table\r
615         $OUT = LOAD_TEMPLATE("guest_rallye_expired_header", true);\r
616         $SW = 2;\r
617         for ($idx = 0; $idx < $prices; $idx++)\r
618         {\r
619                 // Check status\r
620                 //   active = 1: account is still confirmed\r
621                 //   active = 0: account is deleted or locked\r
622                 $result_active = SQL_QUERY_ESC("SELECT COUNT(userid) FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d AND status='CONFIRMED' LIMIT 1",\r
623                  array(bigintval($DATA['uid'][$idx])), __FILE__, __LINE__);\r
624                 list($active) = SQL_FETCHROW($result_active);\r
625                 SQL_FREERESULT($result_active);\r
626 \r
627                 if (empty($DATA['uid'][$idx])) $DATA['uid'][$idx] = "---";\r
628                 if ((empty($DATA['ref'][$idx])) || ($DATA['ref'][$idx] == 0) || ($active == 0) || ("".round($DATA['cpoints'][$idx])."" == "0") || (empty($DATA['cpoints'][$idx])))\r
629                 {\r
630                         // Allow valid and active users with at least one ref to get points\r
631                         $DATA['ref'][$idx]   = "---";\r
632                         $DATA['uid'][$idx]   = "---";\r
633                 }\r
634                 if (!empty($DATA['info'][$idx]))\r
635                 {\r
636                         // Take direct infos\r
637                         $DATA['infos'][$idx] = $DATA['info'][$idx];\r
638                 }\r
639                  else\r
640                 {\r
641                         // Take ppints\r
642                         $DATA['infos'][$idx] = $DATA['points'][$idx]." ".POINTS;\r
643                 }\r
644 \r
645                 // Add row\r
646                 $ADD = "";\r
647                 $OUT .= "<TR>\r
648   <TD class=\"switch_sw".$SW." bottom2".$ADD."\">&nbsp;&nbsp;".($idx+1).".</TD>\r
649   <TD align=\"center\" class=\"switch_sw".$SW." bottom2".$ADD."\">";\r
650                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<STRONG>";\r
651                 $OUT .= $DATA['uid'][$idx];\r
652                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</STRONG>";\r
653                 $OUT .= "</TD>\r
654   <TD align=\"center\" class=\"switch_sw".$SW." bottom2".$ADD."\">";\r
655                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<STRONG>";\r
656                 $OUT .= $DATA['ref'][$idx];\r
657                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</STRONG>";\r
658                 $OUT .= "</TD>\r
659   <TD align=\"center\" class=\"switch_sw".$SW." bottom2".$ADD."\">";\r
660                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<STRONG>";\r
661                 $OUT .= $DATA['infos'][$idx];\r
662                 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</STRONG>";\r
663                 $OUT .= "</TD>\r
664 </TR>\n";\r
665                 $SW = 3 - $SW;\r
666         }\r
667         // Add footer\r
668         $OUT .= LOAD_TEMPLATE("guest_rallye_expired_footer", true);\r
669 \r
670         // And finnally return the output\r
671         return $OUT;\r
672 }\r
673 //\r
674 function RALLYE_DELETE_EXPIRED_RALLYES()\r
675 {\r
676         global $DATA, $CONFIG;\r
677         // Check for expired rallyes\r
678         $EXPIRE = time() - ONE_DAY * 3; // The hard-coded value...\r
679         $result_rallye = SQL_QUERY_ESC("SELECT id, title, start_time, end_time FROM "._MYSQL_PREFIX."_rallye_data WHERE end_time <= %s AND expired='Y'",\r
680          array($EXPIRE), __FILE__, __LINE__);\r
681 \r
682         if (SQL_NUMROWS($result_rallye) > 0)\r
683         {\r
684                 // Expire found rallyes and notify admin\r
685                 while(list($id, $title, $start, $end) = SQL_FETCHROW($result_rallye))\r
686                 {\r
687                         // Prepare data for mail template\r
688                         $DATA['title']  = $title;\r
689                         $DATA['start']  = MAKE_DATETIME($start, "1");\r
690                         $DATA['end']    = MAKE_DATETIME($end  , "1");\r
691                         $DATA['now_t']  = MAKE_DATETIME(time(), "1");\r
692 \r
693                         // Send mail to admin\r
694                         if (GET_EXT_VERSION("admins") < "0.4.1")\r
695                         {\r
696                                 // Use old method to send out\r
697                                 $msg = LOAD_EMAIL_TEMPLATE("admin_rallye_purged", "", 0);\r
698                                 SEND_ADMIN_EMAILS(RALLYE_ADMIN_PURGED.": ".$title, $msg);\r
699                         }\r
700                          else\r
701                         {\r
702                                 // Use new system to send out\r
703                                 SEND_ADMIN_EMAILS_PRO(RALLYE_ADMIN_PURGED.": ".$title, "admin_rallye_purged", "", 0);\r
704                         }\r
705 \r
706                         // Purge whole rallye\r
707                         $result_purge = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_rallye_data WHERE id=%d LIMIT 1",\r
708                          array(bigintval($id)), __FILE__, __LINE__);\r
709                         $result_purge = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_rallye_prices WHERE rallye_id=%d LIMIT 1",\r
710                          array(bigintval($id)), __FILE__, __LINE__);\r
711                         $result_purge = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_rallye_users WHERE rallye_id=%d LIMIT 1",\r
712                          array(bigintval($id)), __FILE__, __LINE__);\r
713                 }\r
714 \r
715                 // Add task\r
716                 $result_task = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_task_system (status, task_type, subject, text, task_created)\r
717 VALUES ('NEW', 'RALLYE_PURGED', '".RALLYE_ADMIN_PURGED.": %s', '".RALLYE_ADMIN_PURGED_TEXT."', UNIX_TIMESTAMP())",\r
718  array($title), __FILE__, __LINE__);\r
719         }\r
720 \r
721         // Free memory\r
722         SQL_FREERESULT($result_rallye);\r
723 }\r
724 //\r
725 function RALLYE_TEMPLATE_SELECTION($name="template", $default="")\r
726 {\r
727         // Check templates directory\r
728         $OUT = ""; $ral = array();\r
729         $BASE = PATH."templates/".GET_LANGUAGE()."/html";\r
730         $dir = opendir($BASE);\r
731         while ($read = readdir($dir))\r
732         {\r
733                 // If it is no dir (so a file)\r
734                 if (!is_dir($BASE.$read))\r
735                 {\r
736                         // Accept only templates matching with rallye_????.tpl.xx\r
737                         if (eregi("^rallye_.*\.tpl", $read))\r
738                         {\r
739                                 $read = substr($read, 7, strpos($read, ".") - 7);\r
740                                 // Accept only template names between 1 and 255 chars length\r
741                                 if ((strlen($read) < 256) && (!empty($read))) $ral[] = $read;\r
742                         }\r
743                 }\r
744         }\r
745         closedir($dir);\r
746 \r
747         // Do we have found templates which we can link with the new rallye?\r
748         if (!empty($ral[0]))\r
749         {\r
750                 // Generate selection box for all found templates\r
751                 $OUT  = "<SELECT name=\"".$name."\" size=\"1\" class=\"admin_select\">\r
752   <OPTION value=\"\">".SELECT_NONE."</OPTION>\n";\r
753                 foreach ($ral as $rallye)\r
754                 {\r
755                      $OUT .= "  <OPTION value=\"".$rallye."\"";\r
756                         if ($default == $rallye) $OUT .= " selected default";\r
757                         $OUT .= ">".$rallye."</OPTION>\n";\r
758                 }\r
759                 $OUT .= "</SELECT>\n";\r
760         }\r
761          else\r
762         {\r
763                 // No rallye templates found\r
764                 $OUT = RALLYE_NO_TEMPLATES_FOUND;\r
765         }\r
766 \r
767         // Return selection\r
768         return $OUT;\r
769 }\r
770 //\r
771 function RALLYE_GET_REFCOUNT($uid, $old=0)\r
772 {\r
773         global $REF_SYSTEM, $REF_DEPTHS, $CONFIG;\r
774         // Check current refs\r
775         if (GET_EXT_VERSION("cache") >= "0.1.2")\r
776         {\r
777                 // Get refs from cache\r
778                 $cnt = 0;\r
779                 foreach ($REF_SYSTEM['userid'] as $id=>$u_id)\r
780                 {\r
781                         if (($u_id == $uid) && ($REF_SYSTEM['level'][$id] == 0))\r
782                         {\r
783                                 foreach ($REF_DEPTHS['level'] as $level)\r
784                                 {\r
785                                         if (($level == $REF_SYSTEM['level'][$id]) && ($level == 0))\r
786                                         {\r
787                                                 // Level does exist so abort here\r
788                                                 $cnt = $REF_SYSTEM['counter'][$id];\r
789                                                 //* DEBUG: */ echo "*".$uid."/".$cnt."*<BR>";\r
790                                                 break;\r
791                                         }\r
792                                          elseif ($level > 0)\r
793                                         {\r
794                                                 // Not interesting here...\r
795                                                 break;\r
796                                         }\r
797                                 }\r
798                                 // Abort also here!\r
799                                 if ($cnt > 0) break;\r
800                         }\r
801                 }\r
802                 //* DEBUG: */ echo "<PRE>";\r
803                 //* DEBUG: */ print_r($REF_SYSTEM);\r
804                 //* DEBUG: */ echo "</PRE>";\r
805                 //* DEBUG: */ die();\r
806 \r
807                 if ($cnt > 0)\r
808                 {\r
809                         // Count cache hits\r
810                         $CONFIG['cache_hits']++;\r
811 \r
812                         // Remove old refs\r
813                         //* DEBUG: */ echo "+".$cnt."/".$old."+<BR>";\r
814                         $cnt -= $old;\r
815                 }\r
816         }\r
817          else\r
818         {\r
819                 // Load current refs from database\r
820                 $result_ref = SQL_QUERY_ESC("SELECT DISTINCT SUM(s.counter) AS cnt\r
821 FROM "._MYSQL_PREFIX."_refsystem AS s\r
822 LEFT JOIN "._MYSQL_PREFIX."_refdepths AS d\r
823 ON s.level=d.level\r
824 WHERE s.userid=%d AND s.level=0", array(bigintval($uid)), __FILE__, __LINE__);\r
825                 list($cnt) = SQL_FETCHROW($result_ref);\r
826                 SQL_FREERESULT($result_ref);\r
827                 if (empty($cnt))\r
828                 {\r
829                         $cnt = "0";\r
830                 }\r
831                  else\r
832                 {\r
833                         $cnt -= $old;\r
834                 }\r
835         }\r
836 \r
837         // Return count\r
838         //* DEBUG: */ echo "*".$uid."/".$old."/".$cnt."*<BR>";\r
839         return $cnt;\r
840 }\r
841 //\r
842 ?>\r