2 /************************************************************************
\r
3 * MXChange v0.2.1 Start: 11/08/2003 *
\r
4 * =============== Last change: 07/01/2005 *
\r
6 * -------------------------------------------------------------------- *
\r
7 * File : pool-update.php *
\r
8 * -------------------------------------------------------------------- *
\r
9 * Short description : Sends queued mails from the pool *
\r
10 * -------------------------------------------------------------------- *
\r
11 * Kurzbeschreibung : Sendet freigegebene Mails aus den Pool *
\r
12 * -------------------------------------------------------------------- *
\r
14 * -------------------------------------------------------------------- *
\r
15 * Copyright (c) 2003 - 2008 by Roland Haeder *
\r
16 * For more information visit: http://www.mxchange.org *
\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
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
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
34 // Some security stuff...
\r
35 if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))
\r
37 $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4)."/security.php";
\r
41 // Test html extensions once
\r
42 $HTML_EXT = EXT_IS_ACTIVE("html_mail", true);
\r
44 // Check for freed mail orders to send out
\r
47 // 0 1 2 3 4 5 6 7 8 9 10
\r
48 $result_main = SQL_QUERY("SELECT id, sender, subject, text, receivers, payment_id, timestamp, url, target_send, cat_id, html_msg FROM "._MYSQL_PREFIX."_pool WHERE data_type='NEW' ORDER BY timestamp DESC", __FILE__, __LINE__);
\r
52 // 0 1 2 3 4 5 6 7 8 9 10
\r
53 $result_main = SQL_QUERY("SELECT id, sender, subject, text, receivers, payment_id, timestamp, url, target_send, cat_id, id FROM "._MYSQL_PREFIX."_pool WHERE data_type='NEW' ORDER BY timestamp DESC", __FILE__, __LINE__);
\r
57 $cnt = "0"; $cnt2 = "0"; $LAST_SENT_ID = "0"; $cnt_back = array("0"); $POINTS_BACK = array("0");
\r
58 if (SQL_NUMROWS($result_main) > 0)
\r
60 while ($DATA = SQL_FETCHROW($result_main))
\r
62 // Check fetched data for HTML
\r
63 $HTML = $DATA[10]; if ($HTML == $DATA[0]) $HTML = "N";
\r
65 // Compile URL and subject line
\r
66 $DATA[7] = COMPILE_CODE($DATA[7]);
\r
68 // Set mail order as "active". That means it will be sent out
\r
69 $result_active = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='ACTIVE' WHERE id=%d AND data_type='NEW' LIMIT 1",
\r
70 array($DATA[0]), __FILE__, __LINE__);
\r
71 if (SQL_AFFECTEDROWS($result_active) == 1)
\r
73 // "Explode" all receivers into an array
\r
74 if (ereg(";", $DATA[4]))
\r
76 // There's more than one receiver in the list...
\r
77 $RECEIVERS = explode(";", $DATA[4]);
\r
79 elseif (!empty($DATA[4]))
\r
81 // Only one user left
\r
82 $RECEIVERS = array($DATA[4]);
\r
87 $RECEIVERS = array("0");
\r
89 $DUMMY = $RECEIVERS;
\r
91 // Now, if we are good little boys and girls Santa left us some user-ids.
\r
92 // We can now send mails to them...
\r
93 foreach ($RECEIVERS as $key=>$uid)
\r
96 $result_user = SQL_QUERY_ESC("SELECT sex, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",
\r
97 array(bigintval($uid)), __FILE__, __LINE__);
\r
99 // Is his data available?
\r
100 //* DEBUG: */ echo "*L:".__LINE__."/".SQL_NUMROWS($result_user)."*<BR>";
\r
101 if (SQL_NUMROWS($result_user) == 1)
\r
103 // The final receiver does exists so we can continue...
\r
104 list($salut, $sname, $fname, $email) = SQL_FETCHROW($result_user);
\r
107 SQL_FREERESULT($result_user);
\r
109 // Do we have a stats entry?
\r
110 $result_stats = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_user_stats WHERE pool_id=%d AND userid=%d AND timestamp_ordered='%s' LIMIT 1",
\r
111 array($DATA[0], $DATA[1], $DATA[6]), __FILE__, __LINE__);
\r
113 // If there's no stats entry add it!
\r
114 //* DEBUG: */ echo "!L:".__LINE__."/".SQL_NUMROWS($result_stats)."!<BR>";
\r
115 if (SQL_NUMROWS($result_stats) == 0)
\r
117 // No entry was found, so we add him!
\r
118 $result_stats = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_user_stats (pool_id , userid, cat_id, payment_id, subject, url , max_rec , timestamp_ordered, timestamp_sstart) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' , UNIX_TIMESTAMP())",
\r
119 array(bigintval($DATA[0]), bigintval($DATA[1]), bigintval($DATA[9]), bigintval($DATA[5]), $DATA[2], $DATA[7], $DATA[8], bigintval($DATA[6])), __FILE__, __LINE__);
\r
121 // Receive it's ID for the links table
\r
122 $result_stats = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_user_stats WHERE pool_id=%d AND userid=%d AND timestamp_ordered='%s' LIMIT 1",
\r
123 array(bigintval($DATA[0]), bigintval($DATA[1]), bigintval($DATA[6])), __FILE__, __LINE__);
\r
126 //* DEBUG: */ echo "!L:".__LINE__."/".SQL_NUMROWS($result_stats)."!<BR>";
\r
127 if (SQL_NUMROWS($result_stats) == 1)
\r
130 list($stats_id) = SQL_FETCHROW($result_stats);
\r
131 SQL_FREERESULT($result_stats);
\r
133 // Mark this user as "spammed" ;-) And place a line for him...
\r
134 //* DEBUG: */ echo "?L:".__LINE__."/".$DUMMY."/".$key."/".$uid."(".$DATA[1].")/".$DATA[0]."/".$stats_id."?<BR>";
\r
135 switch (REMOVE_RECEIVER($DUMMY, $key, bigintval($uid), bigintval($DATA[0]), bigintval($stats_id)))
\r
138 // Prepare the mail
\r
139 $DATA[11] = bigintval($stats_id);
\r
140 $DATA[12] = $sname;
\r
141 $DATA[13] = $fname;
\r
142 $DATA[14] = TRANSLATE_SEX($salut);
\r
144 // Load message template
\r
145 $msg = LOAD_EMAIL_TEMPLATE("normal-mail", $DATA[3], bigintval($uid));
\r
148 SEND_EMAIL($email, $DATA[2], $msg, $HTML);
\r
150 // Count sent mails...
\r
151 $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_sent=emails_sent+1 WHERE userid=%d LIMIT 1",
\r
152 array(bigintval($DATA[1])), __FILE__, __LINE__);
\r
154 if (GET_EXT_VERSION("user") >= "0.1.4")
\r
156 // Update mails received for receiver
\r
157 $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_received=emails_received+1 WHERE userid=%d LIMIT 1",
\r
158 array(bigintval($uid)), __FILE__, __LINE__);
\r
161 // Update mediadata if version is 0.0.4 or higher
\r
162 if (GET_EXT_VERSION("mediadata") >= "0.0.4")
\r
164 // Update entry (or add missing)
\r
165 //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";
\r
166 MEDIA_UPDATE_ENTRY(array("total_send", "normal_send"), "add", 1);
\r
169 // And count up the mail
\r
171 //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$cnt."*<BR>";
\r
175 // Entry already found, but we still count one up!
\r
177 //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$cnt."<BR>";
\r
182 // Do we have reached the maximum to send mails? || ($CONFIG['max_send'] >= $cnt)
\r
183 //* DEBUG: */ echo "*L:".__LINE__."/".$cnt.">=".$DATA[8]."/".$CONFIG['max_send'].">=".$cnt."/".$LAST_SENT_ID."!=".$DATA[0]."*<BR>";
\r
184 if ((($cnt >= $DATA[8])) && ($LAST_SENT_ID != $DATA[0]))
\r
186 // Yes we do, so we notify admin and sender about fully sent mail!
\r
187 if (GET_EXT_VERSION("admins") >= "0.4.1")
\r
190 SEND_ADMIN_EMAILS_PRO(ADMIN_SUBJ_SEND_DONE, "done-admin", $DATA[3], $uid);
\r
195 SEND_ADMIN_EMAILS(ADMIN_SUBJ_SEND_DONE, LOAD_EMAIL_TEMPLATE("done-admin", $DATA[3], $uid));
\r
198 // Get sender's data
\r
199 $result_sender = SQL_QUERY_ESC("SELECT surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",
\r
200 array(bigintval($DATA[1])), __FILE__, __LINE__);
\r
201 if (SQL_NUMROWS($result_sender) == 1)
\r
203 // Load data and prepare mail
\r
204 list($sname, $fname, $email) = SQL_FETCHROW($result_sender);
\r
205 SQL_FREERESULT($result_sender);
\r
206 $msg = LOAD_EMAIL_TEMPLATE("done-member", $DATA[3], $DATA[1]);
\r
208 // Send it also waway
\r
209 SEND_EMAIL($email, MEMBER_SUBJ_SEND_DONE, $msg);
\r
212 // Set status to SEND because we completely send it away
\r
213 $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='SEND', target_send='0', receivers='' WHERE id=%d LIMIT 1",
\r
214 array(bigintval($DATA[0])), __FILE__, __LINE__);
\r
216 // Update send-completed-time
\r
217 $result_user = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_stats SET timestamp_send=UNIX_TIMESTAMP() WHERE pool_id=%d LIMIT 1",
\r
218 array(bigintval($DATA[0])), __FILE__, __LINE__);
\r
220 $LAST_SENT_ID = $DATA[0]; $cnt = "0";
\r
223 // Update mediadata if version is 0.0.4 or higher
\r
224 if (GET_EXT_VERSION("mediadata") >= "0.0.4")
\r
226 // Update entry (or add missing)
\r
227 //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";
\r
228 MEDIA_UPDATE_ENTRY(array("total_orders", "normal_orders"), "add", 1);
\r
231 //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$P."<BR>";
\r
234 // Do we have send maximum mails?
\r
235 elseif (($cnt >= $CONFIG['max_send']) || ($cnt2 >= $CONFIG['max_send']))
\r
237 // There are some mails left to send for next round, so we reset the status back to NEW (=still not fully delivered)
\r
239 if ($cnt <= $DATA[8]) $ADD = ", target_send=target_send-".$cnt;
\r
240 $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='NEW', receivers='%s'".$ADD." WHERE id=%d LIMIT 1",
\r
241 array(implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);
\r
243 //* DEBUG: */ echo"*EXIT/L:".__LINE__."*<BR>";
\r
249 // User does not exists so we have add the sender's points back to sender's account
\r
250 if (($RECEIVERS[0] == "0") || (empty($RECEIVERS[0])))
\r
253 $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='SEND' WHERE id=%d LIMIT 1",
\r
254 array(bigintval($DATA[0])), __FILE__, __LINE__);
\r
260 // User does not exists, pay points back
\r
261 $POINTS = GET_PAY_POINTS($DATA[5]);
\r
262 $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_points SET points=points+%s WHERE userid=%d AND ref_depth='0' LIMIT 1",
\r
263 array($POINTS, bigintval($DATA[1])), __FILE__, __LINE__);
\r
265 // Update mediadata as well
\r
266 if (GET_EXT_VERSION("mediadata") >= "0.0.4")
\r
269 //* DEBUG: */ echo "*MEDIA/L:".__LINE__."/".$POINTS."*<BR>";
\r
270 MEDIA_UPDATE_ENTRY(array("total_points"), "add", $POINTS);
\r
273 // Add points together and remove user
\r
274 $POINTS_BACK[$DATA[1]] += $POINTS;
\r
276 $cnt_back[$DATA[1]]++;
\r
278 // Remove entry from list
\r
279 unset($DUMMY[$key]);
\r
281 // Update receivers
\r
282 $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET receivers='%s' WHERE id=%d LIMIT 1",
\r
283 array(implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);
\r
288 if ((sizeof($POINTS_BACK) > 0) && (!empty($POINTS_BACK[0])))
\r
290 foreach ($POINTS_BACK as $uid=>$PB)
\r
292 // Add points only when we have points left to add and a valid user ID
\r
293 if (($PB > 0) && ($uid > 0))
\r
295 // We have to pay back some points to the sender (we add them directly :-P)
\r
296 $result = SQL_QUERY_ESC("SELECT email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d AND status='CONFIRMED' LIMIT 1",
\r
297 array(bigintval($uid)), __FILE__, __LINE__);
\r
298 $DATA[10] = $PB; $DATA[11] = $cnt_back[$uid];
\r
299 if (SQL_NUMROWS($result) == 1)
\r
301 list($email) = SQL_FETCHROW($result);
\r
302 SQL_FREERESULT($result);
\r
304 // User account does exists, so we can safely pay back!
\r
305 $msg = LOAD_EMAIL_TEMPLATE("back-member", "", bigintval($uid));
\r
307 // Send mail out to member
\r
308 SEND_EMAIL($email, MEMBER_BACK_JACKPOT." (".$uid.")", $msg);
\r
315 // Send mail out to admin
\r
316 if (GET_EXT_VERSION("admins") >= "0.4.1")
\r
318 SEND_ADMIN_EMAILS_PRO(ADMIN_BACK_JACKPOT." (".$uid.")", "back-admin", "", "admin");
\r
322 SEND_ADMIN_EMAILS(ADMIN_BACK_JACKPOT." (".$uid.")", LOAD_TEMPLATE("back-admin", "", "admin"));
\r
331 SQL_FREERESULT($result_main);
\r
333 // Only send bonus mail when bonus extension is active and maximum send-mails is not reached
\r
334 if ((EXT_IS_ACTIVE("bonus") && ($cnt < $CONFIG['max_send'])))
\r
336 // Do we need to send out bonus mails?
\r
339 // 0 1 2 3 4 5 6 7 8 9 10 11
\r
340 $result_bonus = SQL_QUERY("SELECT id, subject, text, receivers, points, time, data_type, timestamp, url, cat_id, target_send, html_msg FROM "._MYSQL_PREFIX."_bonus WHERE data_type='NEW' ORDER BY timestamp DESC", __FILE__, __LINE__);
\r
344 // 0 1 2 3 4 5 6 7 8 9 10 11
\r
345 $result_bonus = SQL_QUERY("SELECT id, subject, text, receivers, points, time, data_type, timestamp, url, cat_id, target_send, 'N' FROM "._MYSQL_PREFIX."_bonus WHERE data_type='NEW' ORDER BY timestamp DESC", __FILE__, __LINE__);
\r
348 if (SQL_NUMROWS($result_bonus) > 0)
\r
350 // Send these mails away...
\r
352 while ($DATA = SQL_FETCHROW($result_bonus))
\r
355 $DATA[8] = COMPILE_CODE($DATA[8]);
\r
357 // Message is active in queue
\r
358 $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='QUEUE' WHERE id=%d LIMIT 1",
\r
359 array(bigintval($DATA[0])), __FILE__, __LINE__);
\r
361 // "Explode" all receivers into an array
\r
362 if (ereg(";", $DATA[3]))
\r
364 // There's more than one receiver in the list...
\r
365 $RECEIVERS = explode(";", $DATA[3]);
\r
367 elseif (!empty($DATA[4]))
\r
369 // Only one user left
\r
370 $RECEIVERS = array($DATA[3]);
\r
375 $RECEIVERS = array("0");
\r
377 $DUMMY = $RECEIVERS;
\r
379 // Now, if we are good little boys and girls Santa left us some user-ids.
\r
380 // We can now send mails to them...
\r
381 foreach ($RECEIVERS as $key=>$uid)
\r
383 // Load personal data
\r
384 //* DEBUG: */ echo "*L:".__LINE__."/".$uid."*<BR>";
\r
385 $result_user = SQL_QUERY_ESC("SELECT surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",
\r
386 array(bigintval($uid)), __FILE__, __LINE__);
\r
388 // Is his data available?
\r
389 if (SQL_NUMROWS($result_user) == 1)
\r
391 // The final receiver does exists so we can continue...
\r
392 list($sname, $fname, $email) = SQL_FETCHROW($result_user);
\r
393 //* DEBUG: */ echo "OK!/L:".__LINE__."<BR>";
\r
395 // Mark this user as "spammed" ;-) And place a line for him...
\r
396 if (REMOVE_RECEIVER($DUMMY, $key, $uid, $DATA[0], $DATA[0], true) == "done")
\r
398 // Prepare the mail
\r
399 $msg = LOAD_EMAIL_TEMPLATE("bonus-mail", $DATA[2], $uid);
\r
402 SEND_EMAIL($email, $DATA[1], $msg, $DATA[11]);
\r
404 // Count one up and remove entry from dummy array
\r
405 $cnt++; unset($DUMMY[$key]);
\r
407 if (GET_EXT_VERSION("user") >= "0.1.4")
\r
409 // Update mails received for receiver
\r
410 $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_received=emails_received+1 WHERE userid=%d LIMIT 1",
\r
411 array(bigintval($uid)), __FILE__, __LINE__);
\r
414 // Do we have send maximum mails?
\r
415 if (($cnt >= $CONFIG['max_send']) || (SELECTION_COUNT($DUMMY) == 0))
\r
418 //* DEBUG: */ echo "*EXIT/L:".__LINE__."<BR>";
\r
424 // Free some memory
\r
425 SQL_FREERESULT($result_user);
\r
428 // Update mediadata if version is 0.0.4 or higher
\r
429 if (GET_EXT_VERSION("mediadata") >= "0.0.4")
\r
431 // Update entry (or add missing
\r
433 if (!empty($cnt2) && empty($cnt)) $P = $cnt2;
\r
434 //* DEBUG: */ echo "+MEDIA/L:".__LINE__."/".$P."+<BR>";
\r
435 MEDIA_UPDATE_ENTRY(array("total_send", "bonus_send"), "add", $P);
\r
438 // Close sending system
\r
439 //* DEBUG: */ echo "-L:".__LINE__."/".SELECTION_COUNT($DUMMY)."-<BR>";
\r
440 if (SELECTION_COUNT($DUMMY) == 0)
\r
443 $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='SEND', target_send='0', receivers='' WHERE id=%d LIMIT 1",
\r
444 array(bigintval($DATA[0])), __FILE__, __LINE__);
\r
445 //* DEBUG: */ echo "*L:".__LINE__."*<BR>";
\r
447 // Update mediadata if version is 0.0.4 or higher
\r
448 if (GET_EXT_VERSION("mediadata") >= "0.0.4")
\r
450 // Update entry (or add missing)
\r
451 //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";
\r
452 MEDIA_UPDATE_ENTRY(array("total_orders", "bonus_orders"), "add", 1);
\r
455 elseif ($cnt >= $CONFIG['max_send'])
\r
457 // Update bonus pool
\r
458 $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='NEW', target_send=%d, receivers='%s' WHERE id=%d LIMIT 1",
\r
459 array(SELECTION_COUNT($DUMMY), implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);
\r
460 //* DEBUG: */ echo "*L:".__LINE__."<PRE>";
\r
461 //* DEBUG: */ print_r($DUMMY);
\r
462 //* DEBUG: */ echo "</PRE>\n!!!<BR>";
\r
469 SQL_FREERESULT($result_bonus);
\r
472 // Remove message (IMPORTANT!)
\r