2 /************************************************************************
3 * MXChange v0.2.1 Start: 08/22/2004 *
4 * =============== Last change: 08/24/2004 *
6 * -------------------------------------------------------------------- *
7 * File : rallye_functions.php *
8 * -------------------------------------------------------------------- *
9 * Short description : Special functions for rallye extension *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Spezielle Funktion fuer rallye-Erweiterung *
12 * -------------------------------------------------------------------- *
15 * $Tag:: 0.2.1-FINAL $ *
17 * Needs to be in all Files and every File needs "svn propset *
18 * svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
19 * -------------------------------------------------------------------- *
20 * Copyright (c) 2003 - 2008 by Roland Haeder *
21 * For more information visit: http://www.mxchange.org *
23 * This program is free software; you can redistribute it and/or modify *
24 * it under the terms of the GNU General Public License as published by *
25 * the Free Software Foundation; either version 2 of the License, or *
26 * (at your option) any later version. *
28 * This program is distributed in the hope that it will be useful, *
29 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
31 * GNU General Public License for more details. *
33 * You should have received a copy of the GNU General Public License *
34 * along with this program; if not, write to the Free Software *
35 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
37 ************************************************************************/
39 // Some security stuff...
40 if (!defined('__SECURITY')) {
41 $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), '/inc') + 4) . '/security.php';
46 function RALLYE_AUTOSTART_RALLYES ($result) {
47 // Global data array for LOAD_EMAIL_TEMPLATE()
51 // Load all rallyes (usally we have only one rallye active per time!
52 list($id, $title, $start, $end, $notify, $min_users, $min_prices) = SQL_FETCHROW($result);
53 SQL_FREERESULT($result);
56 SQL_QUERY_ESC("UPDATE `{!_MYSQL_PREFIX!}_rallye_data` SET notified='Y' WHERE `id`=%s LIMIT 1",
57 array(bigintval($id)), __FUNCTION__, __LINE__);
59 // Do a snapshot off all user refs
60 $result_user = SQL_QUERY("SELECT userid FROM `{!_MYSQL_PREFIX!}_user_data` WHERE `status`='CONFIRMED' ORDER BY `userid` ASC", __FUNCTION__, __LINE__);
62 // Transfer all neccessary data to the global $DATA array
63 $DATA['uid_cnt'] = SQL_NUMROWS($result_user);
64 $DATA['start'] = generateDateTime($start, '2');
65 $DATA['end'] = generateDateTime($end , '2');
66 $DATA['now_t'] = generateDateTime(time(), '2');
67 $DATA['title'] = $title;
68 $DATA['id'] = $id; // ID for the rallye details link
70 // Determine min_users and min_prices
71 $DATA['min_users'] = RALLYE_DETERMINE_MIN_USERS($min_users);
72 $DATA['min_prices'] = RALLYE_DETERMINE_MIN_PRICES($min_prices);
75 $prices = RALLYE_ADD_PRICES($id);
77 // Let's begin with the userids...
78 while ($content = SQL_FETCHARRAY($result_user)) {
82 $cnt = RALLYE_GET_REFCOUNT($content['userid']);
83 if (empty($cnt)) $cnt = 0; // Added prevent some unknown troubles... :-?
85 // Check if line is already included...
86 $result_ref = SQL_QUERY_ESC("SELECT `id` FROM `{!_MYSQL_PREFIX!}_rallye_users` WHERE rallye_id=%s AND `userid`=%s LIMIT 1",
87 array(bigintval($id), bigintval($content['userid'])), __FUNCTION__, __LINE__);
88 if (SQL_NUMROWS($result_ref) == 0) {
90 SQL_FREERESULT($result_ref);
92 // Add userid and his ref count to table
93 $result_ref = SQL_QUERY_ESC("SELECT DISTINCT SUM(p.points)
94 FROM `{!_MYSQL_PREFIX!}_user_points` AS p
95 LEFT JOIN `{!_MYSQL_PREFIX!}_user_data` AS d
97 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=%s",
98 array(getConfig('ref_payout'), bigintval($content['userid'])), __FUNCTION__, __LINE__);
99 list($cpoints) = SQL_FETCHROW($result_ref);
100 SQL_FREERESULT($result_ref);
102 if (empty($cpoints)) $cpoints = "0.00000";
105 SQL_QUERY_ESC("INSERT INTO `{!_MYSQL_PREFIX!}_rallye_users` (rallye_id, userid, refs, curr_points)
106 VALUES ('%s','%s','%s','%s')",
107 array(bigintval($id), bigintval($content['userid']), bigintval($cnt), $cpoints), __FUNCTION__, __LINE__);
111 // Ignored but for the template required refs (made before start of rallye)
112 $DATA['refs'] = $cnt;
114 // Shall I notify this member?
115 if (($notify == 'Y') && ($un)) {
116 // Load email template and send it to the user
117 $message = LOAD_EMAIL_TEMPLATE("member_rallye_notify", array('prices' => $prices), $content['userid']);
118 sendEmail($content['userid'], sprintf(getMessage('RALLYE_MEMBER_NOTIFY'), $title), $message);
122 // Choose the right admin template
123 $templ = "admin_rallye_no_notify";
124 if ($notify == 'Y') $templ = "admin_rallye_notify";
126 // Send email to admin
127 sendAdminNotification(sprintf(getMessage('RALLYE_ADMIN_NOTIFY'), $title), $templ, $prices, '0');
130 SQL_FREERESULT($result_user);
133 function RALLYE_ADD_PRICES ($rallye, $mode='email') {
136 case 'email': $mode = "\n"; break;
137 case 'html' : $mode = "<br />\n"; break;
141 $result_prices = SQL_QUERY("SELECT price_level, points, info FROM `{!_MYSQL_PREFIX!}_rallye_prices` WHERE rallye_id='".$rallye."' ORDER BY price_level", __FUNCTION__, __LINE__);
142 if (SQL_NUMROWS($result_prices) > 0) {
144 if ($mode == "\n") $prices = "{--RALLYE_MEMBER_PRICES_ADDED--}:".$mode."------------------------------".$mode;
146 while ($content = SQL_FETCHARRAY($result_prices)) {
147 $prices .= $content['price_level'].getMessage('RALLYE_PRICE').": ";
148 if (!empty($content['info'])) {
149 $prices .= $content['info'];
151 $prices .= $content['points']." {!POINTS!}";
157 SQL_FREERESULT($result_prices);
160 $prices = sprintf(getMessage('RALLYE_MEMBER_NO_PRICES'), $mode);
163 // Add last line for email mode
164 if ($mode == "\n") $prices .= "------------------------------";
171 function RALLYE_ADD_TOPUSERS ($rallye, $default=0) {
172 // First check how many prices are set
173 $result = SQL_QUERY_ESC("SELECT `id` FROM `{!_MYSQL_PREFIX!}_rallye_prices` WHERE rallye_id=%s ORDER BY price_level",
174 array(bigintval($rallye)), __FUNCTION__, __LINE__);
175 $prices = SQL_NUMROWS($result);
176 SQL_FREERESULT($result);
178 // And load only limited users
179 $result = SQL_QUERY_ESC("SELECT DISTINCT u.userid, u.refs, u.curr_points FROM `{!_MYSQL_PREFIX!}_rallye_users` AS u
180 LEFT JOIN `{!_MYSQL_PREFIX!}_refsystem` AS r
182 WHERE u.rallye_id=%s AND r.counter > 0 ORDER BY u.refs DESC",
183 array(bigintval($rallye)), __FUNCTION__, __LINE__);
192 while ($content = SQL_FETCHARRAY($result)) {
194 $cnt = RALLYE_GET_REFCOUNT($content['userid'], $content['refs']);
197 $result_ref = SQL_QUERY_ESC("SELECT DISTINCT p.points FROM `{!_MYSQL_PREFIX!}_user_points` AS p
198 LEFT JOIN `{!_MYSQL_PREFIX!}_user_data` AS d
200 WHERE d.userid=%s AND d.`status`='CONFIRMED' AND p.ref_depth=1 AND d.max_mails > 0 AND d.mails_confirmed >= %s
201 LIMIT 1", array(bigintval($content['userid']), getConfig('ref_payout')), __FUNCTION__, __LINE__);
202 list($refpoints) = SQL_FETCHROW($result_ref);
203 SQL_FREERESULT($result_ref);
205 if (empty($refpoints)) $refpoints = 0;
207 // Init userid for list
209 // List only users with at least one ref!
210 //* DEBUG: */ echo "*".$cnt.'/'.$content['userid'].'/'.$content['curr_points'].'/'.$refpoints."*<br />\n";
211 if (($cnt > 0) && ($refpoints > $content['curr_points'])) { $_uid = $content['userid']; } else { $cnt = ''; }
213 // Save values to array
214 $DATA['uid'][] = $_uid;
215 $DATA['ref'][] = $cnt;
216 $DATA['cpoints'][] = $content['curr_points'];
220 SQL_FREERESULT($result);
223 array_pk_sort($DATA, array('ref', 'cpoints'), 0, 1, true);
226 $OUT = LOAD_TEMPLATE("guest_rallye_header", true);
228 for ($idx = 0; $idx < $prices; $idx++) {
229 if (empty($DATA['uid'][$idx])) $DATA['uid'][$idx] = '---';
230 if (empty($DATA['ref'][$idx])) $DATA['ref'][$idx] = '---';
233 <td class=\"switch_sw".$SW." bottom2\"> ".($idx+1).".</td>
234 <td align=\"center\" class=\"switch_sw".$SW." bottom2\">";
235 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<strong>";
236 $OUT .= $DATA['uid'][$idx];
237 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</strong>";
239 <td align=\"center\" class=\"switch_sw".$SW." bottom2\">";
240 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<strong>";
241 $OUT .= $DATA['ref'][$idx];
242 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</strong>";
249 $OUT .= LOAD_TEMPLATE("guest_rallye_footer", true);
251 // And finnally return the output
254 // Run this function only when a new member has confirmed his email address!
255 function RALLYE_AUTOADD_USER ($uid) {
259 // Updated extension?
260 if (GET_EXT_VERSION('rallye') >= '0.2.0') {
261 $add .= ", min_users, min_prices";
264 // Check for an auto-add rallye
265 $result = SQL_QUERY("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__);
266 if (SQL_NUMROWS($result) == 1) {
268 $min_users = 0; $min_prices = 0;
270 if (GET_EXT_VERSION('rallye') >= '0.2.0') {
271 list($id, $title, $start, $end, $notify, $min_users, $min_prices) = SQL_FETCHROW($result);
273 list($id, $title, $start, $end, $notify) = SQL_FETCHROW($result);
277 SQL_FREERESULT($result);
279 // Check if line is already included...
280 $result = SQL_QUERY_ESC("SELECT `id` FROM `{!_MYSQL_PREFIX!}_rallye_users` WHERE rallye_id=%s AND `userid`=%s LIMIT 1",
281 array(bigintval($id), bigintval($uid)), __FUNCTION__, __LINE__);
283 // Is this user added?
284 if (SQL_NUMROWS($result) == 0) {
285 // Add userid and his ref count to table
286 SQL_QUERY_ESC("INSERT INTO `{!_MYSQL_PREFIX!}_rallye_users` (rallye_id, userid, refs)
287 VALUES ('%s','%s','0')",
288 array(bigintval($id), bigintval($uid)), __FUNCTION__, __LINE__);
292 SQL_FREERESULT($result);
294 if ($notify == 'Y') {
295 // Transfer all neccessary data to the global $DATA array
296 $DATA['start'] = generateDateTime($start, '2');
297 $DATA['end'] = generateDateTime($end , '2');
298 $DATA['now_t'] = generateDateTime(time(), '2');
299 $DATA['title'] = $title;
300 $DATA['id'] = $id; // ID for the rallye details link
302 $DATA['refs'] = GET_TOTAL_DATA($uid, 'user_data', 'userid', "refid", true);
305 $prices = RALLYE_ADD_PRICES($id);
307 // Determine min_users/prices tring
308 $DATA['min_users'] = RALLYE_DETERMINE_MIN_USERS($min_users);
309 $DATA['min_prices'] = RALLYE_DETERMINE_MIN_PRICES($min_prices);
311 // Send notification to member
312 $message = LOAD_EMAIL_TEMPLATE("member_rallye_notify", array('prices' => $prices), $uid);
313 sendEmail($uid, sprintf(getMessage('RALLYE_MEMBER_NOTIFY'), $title), $message);
319 function RALLYE_EXPIRE_RALLYES ($result) {
323 list($id, $title, $start, $end, $notify, $min_users, $min_prices) = SQL_FETCHROW($result);
324 SQL_FREERESULT($result);
326 // Load users array (!) with assigned prices
327 $prices = RALLYE_LOAD_USERS_ARRAY($id);
330 $DATA = array(); $cnt = 0;
332 $DATA['title'] = $title;
333 $DATA['start'] = generateDateTime($start, '1');
334 $DATA['end'] = generateDateTime($end , '1');
335 $DATA['now_t'] = generateDateTime(time(), '1');
339 foreach($prices['uid'] as $key => $uid) {
341 // active = 1: account is still confirmed
342 // active = 0: account is deleted or locked
343 $result = SQL_QUERY_ESC("SELECT
344 COUNT(`userid`) AS active
346 `{!_MYSQL_PREFIX!}_user_data`
348 `userid`=%s AND `status`='CONFIRMED'
350 array(bigintval($uid)), __FUNCTION__, __LINE__);
351 list($active) = SQL_FETCHROW($result);
352 SQL_FREERESULT($result);
354 $prices['active'][$key] = $active;
356 // Allow valid and active users with at least one ref to get points
357 if (($uid > 0) && ($prices['ref'][$key] > 0) && ($active == 1) && ($prices['cpoints'][$key] > 0)) {
362 if (($total < $min_prices) || ($total == 0)) {
363 // Do not end this rallye!
369 SQL_QUERY_ESC("UPDATE `{!_MYSQL_PREFIX!}_rallye_data` SET `expired`='Y' WHERE `id`=%s LIMIT 1",
370 array(bigintval($id)), __FUNCTION__, __LINE__);
372 // Run array through (by uid is the most important 2nd-level-array)
373 foreach($prices['uid'] as $key => $uid) {
374 // Allow valid and active users with at least one ref to get points
375 if (($uid > 0) && ($prices['ref'][$key] > 0) && ($prices['active'][$key] == 1) && ($prices['cpoints'][$key] > 0)) {
376 // Transfer data to array for the mail template
377 $DATA['level'] = $prices['level'][$key];
378 $DATA['points'] = $prices['points'][$key];
379 $DATA['info'] = $prices['info'][$key];
380 $DATA['ref'] = $prices['ref'][$key];
383 $winnerLevel = 'other';
385 // Determine winner level
386 if ($DATA['level'] == 1) {
388 $winnerLevel = '_gold';
389 } elseif ($DATA['level'] == 2) {
391 $winnerLevel = '_silver';
392 } elseif ($DATA['level'] == 3) {
394 $winnerLevel = '_bronce';
397 if ($DATA['points'] > 0) {
398 // Add points directly to user's account
399 ADD_POINTS_REFSYSTEM_DIRECT('rallye_winner' . $winnerLevel, $uid, $DATA['points']);
402 if ($notify == 'Y') {
403 // Prepare infos for the mail template
404 if (!empty($DATA['info'])) {
406 $DATA['infos'] = $DATA['info'];
409 $DATA['infos'] = $DATA['points'] . ' {!POINTS!}';
412 // Add suffix to template name
413 $template = 'member_rallye_expired' . $winnerLevel;
416 $message = LOAD_EMAIL_TEMPLATE($template, $DATA, $uid);
417 sendEmail($uid, sprintf(getMessage('RALLYE_MEMBER_EXPIRED_SUBJ'), $DATA['level']), $message);
422 $users['uid'][$uid] = $uid;
423 $users['poi'][$uid] = $DATA['infos'];
427 // Select template depending on notfication is switch on / off
428 if ($notify == 'Y') {
429 $templ = "admin_rallye_expired";
430 } elseif (is_array($users['uid'])) {
431 $templ = "admin_rallye_expired_no";
432 $cnt = RALLYE_LOAD_USER_DATA($users);
435 // Send mail to admin
436 sendAdminNotification(sprintf(getMessage('RALLYE_ADMIN_EXPIRED_SUBJ'), $title), $templ, $cnt, 0);
439 createNewTask('{--RALLYE_ADMIN_EXPIRED--}: ' . $title, '{--RALLYE_ADMIN_EXPIRED_TEXT--}', 'RALLYE_EXPIRED');
443 function RALLYE_LOAD_USER_DATA ($uids_array) {
445 $uid_string = implode(',', $uids_array['uid']);
447 // Init result string
451 $result = SQL_QUERY_ESC("SELECT `userid`, `gender`, `surname`, `family`, `email` FROM `{!_MYSQL_PREFIX!}_user_data` WHERE `userid` IN(%s) AND `status`='CONFIRMED' ORDER BY `userid` ASC LIMIT %s",
452 array($uid_string, count($uids_array)), __FUNCTION__, __LINE__);
453 while ($content = SQL_FETCHARRAY($result)) {
454 // Construct the message masked and add it
455 $ret .= sprintf("%s %s %s (%s) - %s\n",
456 translateGender($content['gender']),
460 $uids_array['poi'][$content['userid']]
465 return substr($ret, 0, -1);
469 function RALLYE_LOAD_PRICES_ARRAY ($rallye) {
478 $result = SQL_QUERY_ESC("SELECT price_level, points, info FROM `{!_MYSQL_PREFIX!}_rallye_prices` WHERE rallye_id=%s ORDER BY price_level",
479 array(bigintval($rallye)), __FUNCTION__, __LINE__);
482 while ($content = SQL_FETCHARRAY($result)) {
483 $prices['level'][] = $content['price_level'];
484 $prices['points'][] = $content['points'];
485 $prices['info'][] = $content['info'];
489 SQL_FREERESULT($result);
496 function RALLYE_LOAD_USERS_ARRAY ($rallye) {
497 // Fix zero points to 0.00000
498 if (getConfig('ref_payout') == '0') setConfigEntry('ref_payout', "0.00000");
504 'cpoints' => array(),
507 // Load users uid old points earned
508 $result_user = SQL_QUERY_ESC("SELECT userid, refs, curr_points FROM `{!_MYSQL_PREFIX!}_rallye_users` WHERE rallye_id=%s ORDER BY `userid` ASC",
509 array(bigintval($rallye)), __FUNCTION__, __LINE__);
510 while ($content = SQL_FETCHARRAY($result_user)) {
511 // Load current ref count
512 $cnt = RALLYE_GET_REFCOUNT($content['userid'], $content['refs']);
515 $result_ref = SQL_QUERY_ESC("SELECT DISTINCT SUM(p.points)
516 FROM `{!_MYSQL_PREFIX!}_user_points` AS p
517 LEFT JOIN `{!_MYSQL_PREFIX!}_user_data` AS d
519 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=%s",
520 array(getConfig('ref_payout'), bigintval($content['userid'])), __FUNCTION__, __LINE__);
521 list($refpoints) = SQL_FETCHROW($result_ref);
522 SQL_FREERESULT($result_ref);
524 // Fix empty refpoints
525 if (empty($refpoints)) $refpoints = 0;
527 // Store calculated new refs to array
528 $users['uid'][] = $content['userid'];
529 $users['ref'][] = abs($cnt - $content['refs']);
530 $users['cpoints'][] = $refpoints - $content['curr_points'];
534 SQL_FREERESULT($result_user);
536 // Sort array for refs (descending)
537 array_pk_sort($users, array("ref", "cpoints"), 0, 1, true);
539 // Load prices array (!)
540 $prices = RALLYE_LOAD_PRICES_ARRAY($rallye);
542 // Merge users into prices
543 foreach ($prices['level'] as $k => $lvl) {
544 // We only need to check one element in $users, see above while() block
545 if (isset($users['uid'][$k])) {
546 $prices['uid'][$k] = $users['uid'][$k];
547 if (empty($prices['uid'][$k])) $prices['uid'][$k] = '---';
548 $prices['ref'][$k] = $users['ref'][$k];
549 if (empty($prices['ref'][$k])) $prices['ref'][$k] = '---';
550 $prices['cpoints'][$k] = $users['cpoints'][$k];
554 // Return completed array
559 function RALLYE_LIST_WINNERS ($rallye, $default=0) {
560 // First check how many prices are set
561 $result_prices = SQL_QUERY_ESC("SELECT `id` FROM `{!_MYSQL_PREFIX!}_rallye_prices` WHERE `rallye_id`=%s ORDER BY `price_level` ASC",
562 array(bigintval($rallye)), __FUNCTION__, __LINE__);
563 $prices = SQL_NUMROWS($result_prices);
564 SQL_FREERESULT($result_prices);
567 $DATA = RALLYE_LOAD_USERS_ARRAY($rallye);
570 $OUT = LOAD_TEMPLATE('guest_rallye_expired_header', true);
572 for ($idx = 0; $idx < $prices; $idx++) {
574 // active = 1: account is still confirmed
575 // active = 0: account is deleted or locked
576 $active = GET_TOTAL_DATA($DATA['uid'][$idx], 'user_data', 'userid', 'userid', true, " AND `status`='CONFIRMED'");
578 if (empty($DATA['uid'][$idx])) $DATA['uid'][$idx] = '---';
579 if ((empty($DATA['ref'][$idx])) || ($DATA['ref'][$idx] == 0) || ($active == 0) || ("".round($DATA['cpoints'][$idx])."" == '0') || (empty($DATA['cpoints'][$idx]))) {
580 // Allow valid and active users with at least one ref to get points
581 $DATA['ref'][$idx] = '---';
582 $DATA['uid'][$idx] = '---';
585 if (!empty($DATA['info'][$idx])) {
587 $DATA['infos'][$idx] = $DATA['info'][$idx];
590 $DATA['infos'][$idx] = $DATA['points'][$idx] . ' {!POINTS!}';
596 <td class=\"switch_sw".$SW." bottom2".$add."\"> ".($idx+1).".</td>
597 <td align=\"center\" class=\"switch_sw".$SW." bottom2".$add."\">";
598 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<strong>";
599 $OUT .= $DATA['uid'][$idx];
600 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</strong>";
602 <td align=\"center\" class=\"switch_sw".$SW." bottom2".$add."\">";
603 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<strong>";
604 $OUT .= $DATA['ref'][$idx];
605 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</strong>";
607 <td align=\"center\" class=\"switch_sw".$SW." bottom2".$add."\">";
608 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "<strong>";
609 $OUT .= $DATA['infos'][$idx];
610 if (($DATA['uid'][$idx] == $default) && ($default > 0)) $OUT .= "</strong>";
617 $OUT .= LOAD_TEMPLATE("guest_rallye_expired_footer", true);
619 // And finnally return the output
624 function RALLYE_DELETE_EXPIRED_RALLYES () {
627 // Check for expired rallyes
628 $EXPIRE = getConfig('one_day') * 3; // @TODO The hard-coded value...
629 $result_rallye = SQL_QUERY_ESC("SELECT id, title, start_time, end_time
630 FROM `{!_MYSQL_PREFIX!}_rallye_data`
631 WHERE end_time <= (UNIX_TIMESTAMP() - %s) AND expired='Y'",
632 array($EXPIRE), __FUNCTION__, __LINE__);
634 if (SQL_NUMROWS($result_rallye) > 0) {
638 // Expire found rallyes and notify admin
639 while ($content = SQL_FETCHARRAY($result_rallye)) {
640 // Prepare data for mail template
641 $DATA['title'] = $content['title'];
642 $DATA['start'] = generateDateTime($content['start_time'], '1');
643 $DATA['end'] = generateDateTime($content['end_time'] , '1');
644 $DATA['now_t'] = generateDateTime(time(), '1');
646 // Send mail to admin
647 sendAdminNotification(sprintf(getMessage('RALLYE_ADMIN_PURGED_SUBJ'), $content['title']), "admin_rallye_purged", '', 0);
649 // Purge whole rallye
650 ADD_SQL(SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{!_MYSQL_PREFIX!}_rallye_data` WHERE `id`=%s LIMIT 1",
651 array(bigintval($content['id'])), __FUNCTION__, __LINE__, false));
652 ADD_SQL(SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{!_MYSQL_PREFIX!}_rallye_prices` WHERE rallye_id=%s LIMIT 1",
653 array(bigintval($content['id'])), __FUNCTION__, __LINE__, false));
654 ADD_SQL(SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{!_MYSQL_PREFIX!}_rallye_users` WHERE rallye_id=%s LIMIT 1",
655 array(bigintval($content['id'])), __FUNCTION__, __LINE__, false));
658 createNewTask('{--RALLYE_ADMIN_PURGED--}: ' . $content['title'], '{--RALLYE_ADMIN_PURGED_TEXT--}', 'RALLYE_PURGED');
662 runFilterChain('run_sqls');
666 SQL_FREERESULT($result_rallye);
670 function RALLYE_TEMPLATE_SELECTION ($name = 'template', $default = '') {
675 // Check templates directory
676 $basePath = sprintf("templates/%s/html/rallye/", getLanguage());
678 // Read the directory
679 $templates = getArrayFromDirectory($basePath, 'rallye_', false, true, array(), '.tpl');
682 foreach ($templates as $read) {
683 // Cut prefix and extension away
684 $read = substr($read, 7, strpos($read, '.') - 7);
686 // Accept only template names between 1 and 255 chars length
687 if ((strlen($read) < 256) && (!empty($read))) $ral[] = $read;
690 // Do we have found templates which we can link with the new rallye?
691 if (!empty($ral[0])) {
692 // Generate selection box for all found templates
693 // @TODO Rewrite this to our API function
694 $OUT = "<select name=\"".$name."\" size=\"1\" class=\"admin_select\">
695 <option value=\"\">{--SELECT_NONE--}</option>\n";
696 foreach ($ral as $rallye) {
697 $OUT .= " <option value=\"".$rallye."\"";
698 if ($default == $rallye) $OUT .= ' selected="selected"';
699 $OUT .= ">".$rallye."</option>\n";
701 $OUT .= "</select>\n";
703 // No rallye templates found
704 $OUT = getMessage('RALLYE_NO_TEMPLATES_FOUND');
712 function RALLYE_GET_REFCOUNT ($uid, $old = 0) {
713 // Check current refs
714 if (GET_EXT_VERSION('cache') >= '0.1.2') {
715 // Get refs from cache
717 foreach ($GLOBALS['cache_array']['refsystem']['userid'] as $id => $uid) {
718 // Do we have a ref for this user?
719 //* DEBUG: */ echo "id={$id},uid={$uid},uid={$uid},old={$old},level={$GLOBALS['cache_array']['refsystem']['level'][$id]}<br />\n";
720 if (($uid == $uid) && ($GLOBALS['cache_array']['refsystem']['level'][$id] == 1)) {
721 //* DEBUG: */ echo "uid matches!<br />\n";
722 foreach ($GLOBALS['cache_array']['ref_depths']['level'] as $level) {
723 if (($level == $GLOBALS['cache_array']['refsystem']['level'][$id]) && ($level == 1)) {
724 // Level does exist so abort here
725 $cnt = $GLOBALS['cache_array']['refsystem']['counter'][$id];
726 //* DEBUG: */ echo "*".$uid.'/'.$cnt."*<br />";
728 } elseif ($level > 1) {
729 // Not interesting here...
739 //* DEBUG: */ echo "<pre>";
740 //* DEBUG: */ print_r($GLOBALS['cache_array']['refsystem']);
741 //* DEBUG: */ echo "</pre>";
746 incrementConfigEntry('cache_hits');
749 //* DEBUG: */ echo '+'.$cnt.'/'.$old."+<br />";
753 // Load current refs from database
754 $result_ref = SQL_QUERY_ESC("SELECT DISTINCT SUM(s.counter) AS cnt
755 FROM `{!_MYSQL_PREFIX!}_refsystem` AS s
756 LEFT JOIN `{!_MYSQL_PREFIX!}_refdepths` AS d
758 WHERE s.userid=%s AND s.level=1", array(bigintval($uid)), __FUNCTION__, __LINE__);
759 list($cnt) = SQL_FETCHROW($result_ref);
760 SQL_FREERESULT($result_ref);
769 //* DEBUG: */ echo "*".$uid.'/'.$old.'/'.$cnt."*<br />";
773 // Determines the right language string for min_users
774 function RALLYE_DETERMINE_MIN_USERS ($min_users) {
775 // Rallye ends without user limitation is the default
776 $return = getMessage('RALLYE_END_NO_USER_LIMITATION');
778 if ($min_users > 0) {
779 // Rallye ends when X members are totally in your exchange
780 $return = sprintf(getMessage('RALLYE_END_USERS'), $min_users);
787 // Determines the right language string for min_prices
788 function RALLYE_DETERMINE_MIN_PRICES ($min_prices) {
789 // Rallye ends without user limitation is the default
790 $return = getMessage('RALLYE_END_NO_PRICE_LIMITATION');
792 if ($min_prices > 0) {
793 // Rallye ends when X members are totally in your exchange
794 $return = sprintf(getMessage('RALLYE_END_PRICES'), $min_prices);
801 // Filter for extra-autpurge
802 function FILTER_RALLYE_EXTRA_AUTOPURGE () {
803 // Check expired rallyes (hard-coded 3 days limit for displaying expired rallyes!)
804 RALLYE_DELETE_EXPIRED_RALLYES();