-<?php\r
-/************************************************************************\r
- * MXChange v0.2.1 Start: 11/08/2003 *\r
- * =============== Last change: 07/01/2005 *\r
- * *\r
- * -------------------------------------------------------------------- *\r
- * File : pool-update.php *\r
- * -------------------------------------------------------------------- *\r
- * Short description : Sends queued mails from the pool *\r
- * -------------------------------------------------------------------- *\r
- * Kurzbeschreibung : Sendet freigegebene Mails aus den Pool *\r
- * -------------------------------------------------------------------- *\r
- * *\r
- * -------------------------------------------------------------------- *\r
- * Copyright (c) 2003 - 2008 by Roland Haeder *\r
- * For more information visit: http://www.mxchange.org *\r
- * *\r
- * This program is free software; you can redistribute it and/or modify *\r
- * it under the terms of the GNU General Public License as published by *\r
- * the Free Software Foundation; either version 2 of the License, or *\r
- * (at your option) any later version. *\r
- * *\r
- * This program is distributed in the hope that it will be useful, *\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *\r
- * GNU General Public License for more details. *\r
- * *\r
- * You should have received a copy of the GNU General Public License *\r
- * along with this program; if not, write to the Free Software *\r
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *\r
- * MA 02110-1301 USA *\r
- ************************************************************************/\r
-\r
-// Some security stuff...\r
-if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))\r
-{\r
- $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4)."/security.php";\r
- require($INC);\r
-}\r
-\r
-// Test html extensions once\r
-$HTML_EXT = EXT_IS_ACTIVE("html_mail", true);\r
-\r
-// Check for freed mail orders to send out\r
-if ($HTML_EXT)\r
-{\r
- // 0 1 2 3 4 5 6 7 8 9 10\r
- $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
-}\r
- else\r
-{\r
- // 0 1 2 3 4 5 6 7 8 9 10\r
- $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
-}\r
-\r
-// Reset variables\r
-$cnt = "0"; $cnt2 = "0"; $LAST_SENT_ID = "0"; $cnt_back = array("0"); $POINTS_BACK = array("0");\r
-if (SQL_NUMROWS($result_main) > 0)\r
-{\r
- while ($DATA = SQL_FETCHROW($result_main))\r
- {\r
- // Check fetched data for HTML\r
- $HTML = $DATA[10]; if ($HTML == $DATA[0]) $HTML = "N";\r
-\r
- // Compile URL and subject line\r
- $DATA[7] = COMPILE_CODE($DATA[7]);\r
-\r
- // Set mail order as "active". That means it will be sent out\r
- $result_active = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='ACTIVE' WHERE id=%d AND data_type='NEW' LIMIT 1",\r
- array($DATA[0]), __FILE__, __LINE__);\r
- if (SQL_AFFECTEDROWS($result_active) == 1)\r
- {\r
- // "Explode" all receivers into an array\r
- if (ereg(";", $DATA[4]))\r
- {\r
- // There's more than one receiver in the list...\r
- $RECEIVERS = explode(";", $DATA[4]);\r
- }\r
- elseif (!empty($DATA[4]))\r
- {\r
- // Only one user left\r
- $RECEIVERS = array($DATA[4]);\r
- }\r
- else\r
- {\r
- // No users left\r
- $RECEIVERS = array("0");\r
- }\r
- $DUMMY = $RECEIVERS;\r
-\r
- // Now, if we are good little boys and girls Santa left us some user-ids.\r
- // We can now send mails to them...\r
- foreach ($RECEIVERS as $key=>$uid)\r
- {\r
- // Lookup user ID\r
- $result_user = SQL_QUERY_ESC("SELECT sex, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",\r
- array(bigintval($uid)), __FILE__, __LINE__);\r
-\r
- // Is his data available?\r
- //* DEBUG: */ echo "*L:".__LINE__."/".SQL_NUMROWS($result_user)."*<BR>";\r
- if (SQL_NUMROWS($result_user) == 1)\r
- {\r
- // The final receiver does exists so we can continue...\r
- list($salut, $sname, $fname, $email) = SQL_FETCHROW($result_user);\r
-\r
- // Free memory\r
- SQL_FREERESULT($result_user);\r
-\r
- // Do we have a stats entry?\r
- $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
- array($DATA[0], $DATA[1], $DATA[6]), __FILE__, __LINE__);\r
-\r
- // If there's no stats entry add it!\r
- //* DEBUG: */ echo "!L:".__LINE__."/".SQL_NUMROWS($result_stats)."!<BR>";\r
- if (SQL_NUMROWS($result_stats) == 0)\r
- {\r
- // No entry was found, so we add him!\r
- $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
- 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
-\r
- // Receive it's ID for the links table\r
- $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
- array(bigintval($DATA[0]), bigintval($DATA[1]), bigintval($DATA[6])), __FILE__, __LINE__);\r
- }\r
-\r
- //* DEBUG: */ echo "!L:".__LINE__."/".SQL_NUMROWS($result_stats)."!<BR>";\r
- if (SQL_NUMROWS($result_stats) == 1)\r
- {\r
- // We got one!\r
- list($stats_id) = SQL_FETCHROW($result_stats);\r
- SQL_FREERESULT($result_stats);\r
-\r
- // Mark this user as "spammed" ;-) And place a line for him...\r
- //* DEBUG: */ echo "?L:".__LINE__."/".$DUMMY."/".$key."/".$uid."(".$DATA[1].")/".$DATA[0]."/".$stats_id."?<BR>";\r
- switch (REMOVE_RECEIVER($DUMMY, $key, bigintval($uid), bigintval($DATA[0]), bigintval($stats_id)))\r
- {\r
- case "done":\r
- // Prepare the mail\r
- $DATA[11] = bigintval($stats_id);\r
- $DATA[12] = $sname;\r
- $DATA[13] = $fname;\r
- $DATA[14] = TRANSLATE_SEX($salut);\r
-\r
- // Load message template\r
- $msg = LOAD_EMAIL_TEMPLATE("normal-mail", $DATA[3], bigintval($uid));\r
-\r
- // Send mail away\r
- SEND_EMAIL($email, $DATA[2], $msg, $HTML);\r
-\r
- // Count sent mails...\r
- $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_sent=emails_sent+1 WHERE userid=%d LIMIT 1",\r
- array(bigintval($DATA[1])), __FILE__, __LINE__);\r
-\r
- if (GET_EXT_VERSION("user") >= "0.1.4")\r
- {\r
- // Update mails received for receiver\r
- $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_received=emails_received+1 WHERE userid=%d LIMIT 1",\r
- array(bigintval($uid)), __FILE__, __LINE__);\r
- }\r
-\r
- // Update mediadata if version is 0.0.4 or higher\r
- if (GET_EXT_VERSION("mediadata") >= "0.0.4")\r
- {\r
- // Update entry (or add missing)\r
- //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";\r
- MEDIA_UPDATE_ENTRY(array("total_send", "normal_send"), "add", 1);\r
- }\r
-\r
- // And count up the mail\r
- $cnt++;\r
- //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$cnt."*<BR>";\r
- break;\r
-\r
- case "already":\r
- // Entry already found, but we still count one up!\r
- $cnt++;\r
- //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$cnt."<BR>";\r
- break;\r
- }\r
- }\r
-\r
- // Do we have reached the maximum to send mails? || ($CONFIG['max_send'] >= $cnt)\r
- //* DEBUG: */ echo "*L:".__LINE__."/".$cnt.">=".$DATA[8]."/".$CONFIG['max_send'].">=".$cnt."/".$LAST_SENT_ID."!=".$DATA[0]."*<BR>";\r
- if ((($cnt >= $DATA[8])) && ($LAST_SENT_ID != $DATA[0]))\r
- {\r
- // Yes we do, so we notify admin and sender about fully sent mail!\r
- if (GET_EXT_VERSION("admins") >= "0.4.1")\r
- {\r
- // New method\r
- SEND_ADMIN_EMAILS_PRO(ADMIN_SUBJ_SEND_DONE, "done-admin", $DATA[3], $uid);\r
- }\r
- else\r
- {\r
- // Old method\r
- SEND_ADMIN_EMAILS(ADMIN_SUBJ_SEND_DONE, LOAD_EMAIL_TEMPLATE("done-admin", $DATA[3], $uid));\r
- }\r
-\r
- // Get sender's data\r
- $result_sender = SQL_QUERY_ESC("SELECT surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",\r
- array(bigintval($DATA[1])), __FILE__, __LINE__);\r
- if (SQL_NUMROWS($result_sender) == 1)\r
- {\r
- // Load data and prepare mail\r
- list($sname, $fname, $email) = SQL_FETCHROW($result_sender);\r
- SQL_FREERESULT($result_sender);\r
- $msg = LOAD_EMAIL_TEMPLATE("done-member", $DATA[3], $DATA[1]);\r
-\r
- // Send it also waway\r
- SEND_EMAIL($email, MEMBER_SUBJ_SEND_DONE, $msg);\r
- }\r
-\r
- // Set status to SEND because we completely send it away\r
- $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='SEND', target_send='0', receivers='' WHERE id=%d LIMIT 1",\r
- array(bigintval($DATA[0])), __FILE__, __LINE__);\r
-\r
- // Update send-completed-time\r
- $result_user = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_stats SET timestamp_send=UNIX_TIMESTAMP() WHERE pool_id=%d LIMIT 1",\r
- array(bigintval($DATA[0])), __FILE__, __LINE__);\r
-\r
- $LAST_SENT_ID = $DATA[0]; $cnt = "0";\r
- $cnt2 += $cnt;\r
-\r
- // Update mediadata if version is 0.0.4 or higher\r
- if (GET_EXT_VERSION("mediadata") >= "0.0.4")\r
- {\r
- // Update entry (or add missing)\r
- //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";\r
- MEDIA_UPDATE_ENTRY(array("total_orders", "normal_orders"), "add", 1);\r
- }\r
-\r
- //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$P."<BR>";\r
- break;\r
- }\r
- // Do we have send maximum mails?\r
- elseif (($cnt >= $CONFIG['max_send']) || ($cnt2 >= $CONFIG['max_send']))\r
- {\r
- // There are some mails left to send for next round, so we reset the status back to NEW (=still not fully delivered)\r
- $ADD = "";\r
- if ($cnt <= $DATA[8]) $ADD = ", target_send=target_send-".$cnt;\r
- $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='NEW', receivers='%s'".$ADD." WHERE id=%d LIMIT 1",\r
- array(implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);\r
-\r
- //* DEBUG: */ echo"*EXIT/L:".__LINE__."*<BR>";\r
- break;\r
- }\r
- }\r
- else\r
- {\r
- // User does not exists so we have add the sender's points back to sender's account\r
- if (($RECEIVERS[0] == "0") || (empty($RECEIVERS[0])))\r
- {\r
- // List was empty\r
- $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='SEND' WHERE id=%d LIMIT 1",\r
- array(bigintval($DATA[0])), __FILE__, __LINE__);\r
- }\r
- else\r
- {\r
- if ($uid > 0)\r
- {\r
- // User does not exists, pay points back\r
- $POINTS = GET_PAY_POINTS($DATA[5]);\r
- $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_points SET points=points+%s WHERE userid=%d AND ref_depth='0' LIMIT 1",\r
- array($POINTS, bigintval($DATA[1])), __FILE__, __LINE__);\r
-\r
- // Update mediadata as well\r
- if (GET_EXT_VERSION("mediadata") >= "0.0.4")\r
- {\r
- // Update database\r
- //* DEBUG: */ echo "*MEDIA/L:".__LINE__."/".$POINTS."*<BR>";\r
- MEDIA_UPDATE_ENTRY(array("total_points"), "add", $POINTS);\r
- }\r
-\r
- // Add points together and remove user\r
- $POINTS_BACK[$DATA[1]] += $POINTS;\r
- }\r
- $cnt_back[$DATA[1]]++;\r
- }\r
- // Remove entry from list\r
- unset($DUMMY[$key]);\r
-\r
- // Update receivers\r
- $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET receivers='%s' WHERE id=%d LIMIT 1",\r
- array(implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);\r
- }\r
- }\r
- }\r
- }\r
- if ((sizeof($POINTS_BACK) > 0) && (!empty($POINTS_BACK[0])))\r
- {\r
- foreach ($POINTS_BACK as $uid=>$PB)\r
- {\r
- // Add points only when we have points left to add and a valid user ID\r
- if (($PB > 0) && ($uid > 0))\r
- {\r
- // We have to pay back some points to the sender (we add them directly :-P)\r
- $result = SQL_QUERY_ESC("SELECT email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d AND status='CONFIRMED' LIMIT 1",\r
- array(bigintval($uid)), __FILE__, __LINE__);\r
- $DATA[10] = $PB; $DATA[11] = $cnt_back[$uid];\r
- if (SQL_NUMROWS($result) == 1)\r
- {\r
- list($email) = SQL_FETCHROW($result);\r
- SQL_FREERESULT($result);\r
-\r
- // User account does exists, so we can safely pay back!\r
- $msg = LOAD_EMAIL_TEMPLATE("back-member", "", bigintval($uid));\r
-\r
- // Send mail out to member\r
- SEND_EMAIL($email, MEMBER_BACK_JACKPOT." (".$uid.")", $msg);\r
- }\r
- else\r
- {\r
- // Add to jackpot\r
- ADD_JACKPOT($PB);\r
-\r
- // Send mail out to admin\r
- if (GET_EXT_VERSION("admins") >= "0.4.1")\r
- {\r
- SEND_ADMIN_EMAILS_PRO(ADMIN_BACK_JACKPOT." (".$uid.")", "back-admin", "", "admin");\r
- }\r
- else\r
- {\r
- SEND_ADMIN_EMAILS(ADMIN_BACK_JACKPOT." (".$uid.")", LOAD_TEMPLATE("back-admin", "", "admin"));\r
- }\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-// Free memory\r
-SQL_FREERESULT($result_main);\r
-\r
-// Only send bonus mail when bonus extension is active and maximum send-mails is not reached\r
-if ((EXT_IS_ACTIVE("bonus") && ($cnt < $CONFIG['max_send'])))\r
-{\r
- // Do we need to send out bonus mails?\r
- if ($HTML_EXT)\r
- {\r
- // 0 1 2 3 4 5 6 7 8 9 10 11\r
- $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
- }\r
- else\r
- {\r
- // 0 1 2 3 4 5 6 7 8 9 10 11\r
- $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
- }\r
-\r
- if (SQL_NUMROWS($result_bonus) > 0)\r
- {\r
- // Send these mails away...\r
- $cnt2 = "";\r
- while ($DATA = SQL_FETCHROW($result_bonus))\r
- {\r
- // Compile URL\r
- $DATA[8] = COMPILE_CODE($DATA[8]);\r
-\r
- // Message is active in queue\r
- $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='QUEUE' WHERE id=%d LIMIT 1",\r
- array(bigintval($DATA[0])), __FILE__, __LINE__);\r
-\r
- // "Explode" all receivers into an array\r
- if (ereg(";", $DATA[3]))\r
- {\r
- // There's more than one receiver in the list...\r
- $RECEIVERS = explode(";", $DATA[3]);\r
- }\r
- elseif (!empty($DATA[4]))\r
- {\r
- // Only one user left\r
- $RECEIVERS = array($DATA[3]);\r
- }\r
- else\r
- {\r
- // No users left\r
- $RECEIVERS = array("0");\r
- }\r
- $DUMMY = $RECEIVERS;\r
-\r
- // Now, if we are good little boys and girls Santa left us some user-ids.\r
- // We can now send mails to them...\r
- foreach ($RECEIVERS as $key=>$uid)\r
- {\r
- // Load personal data\r
- //* DEBUG: */ echo "*L:".__LINE__."/".$uid."*<BR>";\r
- $result_user = SQL_QUERY_ESC("SELECT surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",\r
- array(bigintval($uid)), __FILE__, __LINE__);\r
-\r
- // Is his data available?\r
- if (SQL_NUMROWS($result_user) == 1)\r
- {\r
- // The final receiver does exists so we can continue...\r
- list($sname, $fname, $email) = SQL_FETCHROW($result_user);\r
- //* DEBUG: */ echo "OK!/L:".__LINE__."<BR>";\r
-\r
- // Mark this user as "spammed" ;-) And place a line for him...\r
- if (REMOVE_RECEIVER($DUMMY, $key, $uid, $DATA[0], $DATA[0], true) == "done")\r
- {\r
- // Prepare the mail\r
- $msg = LOAD_EMAIL_TEMPLATE("bonus-mail", $DATA[2], $uid);\r
-\r
- // Send mail away\r
- SEND_EMAIL($email, $DATA[1], $msg, $DATA[11]);\r
-\r
- // Count one up and remove entry from dummy array\r
- $cnt++; unset($DUMMY[$key]);\r
-\r
- if (GET_EXT_VERSION("user") >= "0.1.4")\r
- {\r
- // Update mails received for receiver\r
- $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_received=emails_received+1 WHERE userid=%d LIMIT 1",\r
- array(bigintval($uid)), __FILE__, __LINE__);\r
- }\r
-\r
- // Do we have send maximum mails?\r
- if (($cnt >= $CONFIG['max_send']) || (SELECTION_COUNT($DUMMY) == 0))\r
- {\r
- // Yes, we have\r
- //* DEBUG: */ echo "*EXIT/L:".__LINE__."<BR>";\r
- break;\r
- }\r
- }\r
- }\r
-\r
- // Free some memory\r
- SQL_FREERESULT($result_user);\r
- }\r
-\r
- // Update mediadata if version is 0.0.4 or higher\r
- if (GET_EXT_VERSION("mediadata") >= "0.0.4")\r
- {\r
- // Update entry (or add missing\r
- $P = $cnt;\r
- if (!empty($cnt2) && empty($cnt)) $P = $cnt2;\r
- //* DEBUG: */ echo "+MEDIA/L:".__LINE__."/".$P."+<BR>";\r
- MEDIA_UPDATE_ENTRY(array("total_send", "bonus_send"), "add", $P);\r
- }\r
-\r
- // Close sending system\r
- //* DEBUG: */ echo "-L:".__LINE__."/".SELECTION_COUNT($DUMMY)."-<BR>";\r
- if (SELECTION_COUNT($DUMMY) == 0)\r
- {\r
- // Queue reached!\r
- $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='SEND', target_send='0', receivers='' WHERE id=%d LIMIT 1",\r
- array(bigintval($DATA[0])), __FILE__, __LINE__);\r
- //* DEBUG: */ echo "*L:".__LINE__."*<BR>";\r
-\r
- // Update mediadata if version is 0.0.4 or higher\r
- if (GET_EXT_VERSION("mediadata") >= "0.0.4")\r
- {\r
- // Update entry (or add missing)\r
- //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";\r
- MEDIA_UPDATE_ENTRY(array("total_orders", "bonus_orders"), "add", 1);\r
- }\r
- }\r
- elseif ($cnt >= $CONFIG['max_send'])\r
- {\r
- // Update bonus pool\r
- $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='NEW', target_send=%d, receivers='%s' WHERE id=%d LIMIT 1",\r
- array(SELECTION_COUNT($DUMMY), implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);\r
- //* DEBUG: */ echo "*L:".__LINE__."<PRE>";\r
- //* DEBUG: */ print_r($DUMMY);\r
- //* DEBUG: */ echo "</PRE>\n!!!<BR>";\r
- break;\r
- }\r
- }\r
- }\r
-\r
- // Free memory\r
- SQL_FREERESULT($result_bonus);\r
-}\r
-\r
-// Remove message (IMPORTANT!)\r
-unset($msg);\r
-\r
-//\r
-?>\r
+<?php
+/************************************************************************
+ * MXChange v0.2.1 Start: 11/08/2003 *
+ * =============== Last change: 07/01/2005 *
+ * *
+ * -------------------------------------------------------------------- *
+ * File : pool-update.php *
+ * -------------------------------------------------------------------- *
+ * Short description : Sends queued mails from the pool *
+ * -------------------------------------------------------------------- *
+ * Kurzbeschreibung : Sendet freigegebene Mails aus den Pool *
+ * -------------------------------------------------------------------- *
+ * *
+ * -------------------------------------------------------------------- *
+ * Copyright (c) 2003 - 2008 by Roland Haeder *
+ * For more information visit: http://www.mxchange.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
+ * MA 02110-1301 USA *
+ ************************************************************************/
+
+// Some security stuff...
+if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))
+{
+ $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";
+ require($INC);
+}
+
+// Test html extensions once
+$HTML_EXT = EXT_IS_ACTIVE("html_mail", true);
+
+// Check for freed mail orders to send out
+if ($HTML_EXT)
+{
+ // 0 1 2 3 4 5 6 7 8 9 10
+ $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__);
+}
+ else
+{
+ // 0 1 2 3 4 5 6 7 8 9 10
+ $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__);
+}
+
+// Reset variables
+$cnt = "0"; $cnt2 = "0"; $LAST_SENT_ID = "0"; $cnt_back = array("0"); $POINTS_BACK = array("0");
+if (SQL_NUMROWS($result_main) > 0)
+{
+ while ($DATA = SQL_FETCHROW($result_main))
+ {
+ // Check fetched data for HTML
+ $HTML = $DATA[10]; if ($HTML == $DATA[0]) $HTML = "N";
+
+ // Compile URL and subject line
+ $DATA[7] = COMPILE_CODE($DATA[7]);
+
+ // Set mail order as "active". That means it will be sent out
+ $result_active = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='ACTIVE' WHERE id=%d AND data_type='NEW' LIMIT 1",
+ array($DATA[0]), __FILE__, __LINE__);
+ if (SQL_AFFECTEDROWS($result_active) == 1)
+ {
+ // "Explode" all receivers into an array
+ if (ereg(";", $DATA[4]))
+ {
+ // There's more than one receiver in the list...
+ $RECEIVERS = explode(";", $DATA[4]);
+ }
+ elseif (!empty($DATA[4]))
+ {
+ // Only one user left
+ $RECEIVERS = array($DATA[4]);
+ }
+ else
+ {
+ // No users left
+ $RECEIVERS = array("0");
+ }
+ $DUMMY = $RECEIVERS;
+
+ // Now, if we are good little boys and girls Santa left us some user-ids.
+ // We can now send mails to them...
+ foreach ($RECEIVERS as $key=>$uid)
+ {
+ // Lookup user ID
+ $result_user = SQL_QUERY_ESC("SELECT sex, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",
+ array(bigintval($uid)), __FILE__, __LINE__);
+
+ // Is his data available?
+ //* DEBUG: */ echo "*L:".__LINE__."/".SQL_NUMROWS($result_user)."*<BR>";
+ if (SQL_NUMROWS($result_user) == 1)
+ {
+ // The final receiver does exists so we can continue...
+ list($salut, $sname, $fname, $email) = SQL_FETCHROW($result_user);
+
+ // Free memory
+ SQL_FREERESULT($result_user);
+
+ // Do we have a stats entry?
+ $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",
+ array($DATA[0], $DATA[1], $DATA[6]), __FILE__, __LINE__);
+
+ // If there's no stats entry add it!
+ //* DEBUG: */ echo "!L:".__LINE__."/".SQL_NUMROWS($result_stats)."!<BR>";
+ if (SQL_NUMROWS($result_stats) == 0)
+ {
+ // No entry was found, so we add him!
+ $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())",
+ array(bigintval($DATA[0]), bigintval($DATA[1]), bigintval($DATA[9]), bigintval($DATA[5]), $DATA[2], $DATA[7], $DATA[8], bigintval($DATA[6])), __FILE__, __LINE__);
+
+ // Receive it's ID for the links table
+ $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",
+ array(bigintval($DATA[0]), bigintval($DATA[1]), bigintval($DATA[6])), __FILE__, __LINE__);
+ }
+
+ //* DEBUG: */ echo "!L:".__LINE__."/".SQL_NUMROWS($result_stats)."!<BR>";
+ if (SQL_NUMROWS($result_stats) == 1)
+ {
+ // We got one!
+ list($stats_id) = SQL_FETCHROW($result_stats);
+ SQL_FREERESULT($result_stats);
+
+ // Mark this user as "spammed" ;-) And place a line for him...
+ //* DEBUG: */ echo "?L:".__LINE__."/".$DUMMY."/".$key."/".$uid."(".$DATA[1].")/".$DATA[0]."/".$stats_id."?<BR>";
+ switch (REMOVE_RECEIVER($DUMMY, $key, bigintval($uid), bigintval($DATA[0]), bigintval($stats_id)))
+ {
+ case "done":
+ // Prepare the mail
+ $DATA[11] = bigintval($stats_id);
+ $DATA[12] = $sname;
+ $DATA[13] = $fname;
+ $DATA[14] = TRANSLATE_SEX($salut);
+
+ // Load message template
+ $msg = LOAD_EMAIL_TEMPLATE("normal-mail", $DATA[3], bigintval($uid));
+
+ // Send mail away
+ SEND_EMAIL($email, $DATA[2], $msg, $HTML);
+
+ // Count sent mails...
+ $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_sent=emails_sent+1 WHERE userid=%d LIMIT 1",
+ array(bigintval($DATA[1])), __FILE__, __LINE__);
+
+ if (GET_EXT_VERSION("user") >= "0.1.4")
+ {
+ // Update mails received for receiver
+ $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_received=emails_received+1 WHERE userid=%d LIMIT 1",
+ array(bigintval($uid)), __FILE__, __LINE__);
+ }
+
+ // Update mediadata if version is 0.0.4 or higher
+ if (GET_EXT_VERSION("mediadata") >= "0.0.4")
+ {
+ // Update entry (or add missing)
+ //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";
+ MEDIA_UPDATE_ENTRY(array("total_send", "normal_send"), "add", 1);
+ }
+
+ // And count up the mail
+ $cnt++;
+ //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$cnt."*<BR>";
+ break;
+
+ case "already":
+ // Entry already found, but we still count one up!
+ $cnt++;
+ //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$cnt."<BR>";
+ break;
+ }
+ }
+
+ // Do we have reached the maximum to send mails? || ($CONFIG['max_send'] >= $cnt)
+ //* DEBUG: */ echo "*L:".__LINE__."/".$cnt.">=".$DATA[8]."/".$CONFIG['max_send'].">=".$cnt."/".$LAST_SENT_ID."!=".$DATA[0]."*<BR>";
+ if ((($cnt >= $DATA[8])) && ($LAST_SENT_ID != $DATA[0]))
+ {
+ // Yes we do, so we notify admin and sender about fully sent mail!
+ if (GET_EXT_VERSION("admins") >= "0.4.1")
+ {
+ // New method
+ SEND_ADMIN_EMAILS_PRO(ADMIN_SUBJ_SEND_DONE, "done-admin", $DATA[3], $uid);
+ }
+ else
+ {
+ // Old method
+ SEND_ADMIN_EMAILS(ADMIN_SUBJ_SEND_DONE, LOAD_EMAIL_TEMPLATE("done-admin", $DATA[3], $uid));
+ }
+
+ // Get sender's data
+ $result_sender = SQL_QUERY_ESC("SELECT surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",
+ array(bigintval($DATA[1])), __FILE__, __LINE__);
+ if (SQL_NUMROWS($result_sender) == 1)
+ {
+ // Load data and prepare mail
+ list($sname, $fname, $email) = SQL_FETCHROW($result_sender);
+ SQL_FREERESULT($result_sender);
+ $msg = LOAD_EMAIL_TEMPLATE("done-member", $DATA[3], $DATA[1]);
+
+ // Send it also waway
+ SEND_EMAIL($email, MEMBER_SUBJ_SEND_DONE, $msg);
+ }
+
+ // Set status to SEND because we completely send it away
+ $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='SEND', target_send='0', receivers='' WHERE id=%d LIMIT 1",
+ array(bigintval($DATA[0])), __FILE__, __LINE__);
+
+ // Update send-completed-time
+ $result_user = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_stats SET timestamp_send=UNIX_TIMESTAMP() WHERE pool_id=%d LIMIT 1",
+ array(bigintval($DATA[0])), __FILE__, __LINE__);
+
+ $LAST_SENT_ID = $DATA[0]; $cnt = "0";
+ $cnt2 += $cnt;
+
+ // Update mediadata if version is 0.0.4 or higher
+ if (GET_EXT_VERSION("mediadata") >= "0.0.4")
+ {
+ // Update entry (or add missing)
+ //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";
+ MEDIA_UPDATE_ENTRY(array("total_orders", "normal_orders"), "add", 1);
+ }
+
+ //* DEBUG: */ echo"*EXIT/L:".__LINE__."/".$P."<BR>";
+ break;
+ }
+ // Do we have send maximum mails?
+ elseif (($cnt >= $CONFIG['max_send']) || ($cnt2 >= $CONFIG['max_send']))
+ {
+ // There are some mails left to send for next round, so we reset the status back to NEW (=still not fully delivered)
+ $ADD = "";
+ if ($cnt <= $DATA[8]) $ADD = ", target_send=target_send-".$cnt;
+ $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='NEW', receivers='%s'".$ADD." WHERE id=%d LIMIT 1",
+ array(implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);
+
+ //* DEBUG: */ echo"*EXIT/L:".__LINE__."*<BR>";
+ break;
+ }
+ }
+ else
+ {
+ // User does not exists so we have add the sender's points back to sender's account
+ if (($RECEIVERS[0] == "0") || (empty($RECEIVERS[0])))
+ {
+ // List was empty
+ $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='SEND' WHERE id=%d LIMIT 1",
+ array(bigintval($DATA[0])), __FILE__, __LINE__);
+ }
+ else
+ {
+ if ($uid > 0)
+ {
+ // User does not exists, pay points back
+ $POINTS = GET_PAY_POINTS($DATA[5]);
+ $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_points SET points=points+%s WHERE userid=%d AND ref_depth='0' LIMIT 1",
+ array($POINTS, bigintval($DATA[1])), __FILE__, __LINE__);
+
+ // Update mediadata as well
+ if (GET_EXT_VERSION("mediadata") >= "0.0.4")
+ {
+ // Update database
+ //* DEBUG: */ echo "*MEDIA/L:".__LINE__."/".$POINTS."*<BR>";
+ MEDIA_UPDATE_ENTRY(array("total_points"), "add", $POINTS);
+ }
+
+ // Add points together and remove user
+ $POINTS_BACK[$DATA[1]] += $POINTS;
+ }
+ $cnt_back[$DATA[1]]++;
+ }
+ // Remove entry from list
+ unset($DUMMY[$key]);
+
+ // Update receivers
+ $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET receivers='%s' WHERE id=%d LIMIT 1",
+ array(implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);
+ }
+ }
+ }
+ }
+ if ((sizeof($POINTS_BACK) > 0) && (!empty($POINTS_BACK[0])))
+ {
+ foreach ($POINTS_BACK as $uid=>$PB)
+ {
+ // Add points only when we have points left to add and a valid user ID
+ if (($PB > 0) && ($uid > 0))
+ {
+ // We have to pay back some points to the sender (we add them directly :-P)
+ $result = SQL_QUERY_ESC("SELECT email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d AND status='CONFIRMED' LIMIT 1",
+ array(bigintval($uid)), __FILE__, __LINE__);
+ $DATA[10] = $PB; $DATA[11] = $cnt_back[$uid];
+ if (SQL_NUMROWS($result) == 1)
+ {
+ list($email) = SQL_FETCHROW($result);
+ SQL_FREERESULT($result);
+
+ // User account does exists, so we can safely pay back!
+ $msg = LOAD_EMAIL_TEMPLATE("back-member", "", bigintval($uid));
+
+ // Send mail out to member
+ SEND_EMAIL($email, MEMBER_BACK_JACKPOT." (".$uid.")", $msg);
+ }
+ else
+ {
+ // Add to jackpot
+ ADD_JACKPOT($PB);
+
+ // Send mail out to admin
+ if (GET_EXT_VERSION("admins") >= "0.4.1")
+ {
+ SEND_ADMIN_EMAILS_PRO(ADMIN_BACK_JACKPOT." (".$uid.")", "back-admin", "", "admin");
+ }
+ else
+ {
+ SEND_ADMIN_EMAILS(ADMIN_BACK_JACKPOT." (".$uid.")", LOAD_TEMPLATE("back-admin", "", "admin"));
+ }
+ }
+ }
+ }
+ }
+}
+
+// Free memory
+SQL_FREERESULT($result_main);
+
+// Only send bonus mail when bonus extension is active and maximum send-mails is not reached
+if ((EXT_IS_ACTIVE("bonus") && ($cnt < $CONFIG['max_send'])))
+{
+ // Do we need to send out bonus mails?
+ if ($HTML_EXT)
+ {
+ // 0 1 2 3 4 5 6 7 8 9 10 11
+ $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__);
+ }
+ else
+ {
+ // 0 1 2 3 4 5 6 7 8 9 10 11
+ $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__);
+ }
+
+ if (SQL_NUMROWS($result_bonus) > 0)
+ {
+ // Send these mails away...
+ $cnt2 = "";
+ while ($DATA = SQL_FETCHROW($result_bonus))
+ {
+ // Compile URL
+ $DATA[8] = COMPILE_CODE($DATA[8]);
+
+ // Message is active in queue
+ $result_queue = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='QUEUE' WHERE id=%d LIMIT 1",
+ array(bigintval($DATA[0])), __FILE__, __LINE__);
+
+ // "Explode" all receivers into an array
+ if (ereg(";", $DATA[3]))
+ {
+ // There's more than one receiver in the list...
+ $RECEIVERS = explode(";", $DATA[3]);
+ }
+ elseif (!empty($DATA[4]))
+ {
+ // Only one user left
+ $RECEIVERS = array($DATA[3]);
+ }
+ else
+ {
+ // No users left
+ $RECEIVERS = array("0");
+ }
+ $DUMMY = $RECEIVERS;
+
+ // Now, if we are good little boys and girls Santa left us some user-ids.
+ // We can now send mails to them...
+ foreach ($RECEIVERS as $key=>$uid)
+ {
+ // Load personal data
+ //* DEBUG: */ echo "*L:".__LINE__."/".$uid."*<BR>";
+ $result_user = SQL_QUERY_ESC("SELECT surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%d LIMIT 1",
+ array(bigintval($uid)), __FILE__, __LINE__);
+
+ // Is his data available?
+ if (SQL_NUMROWS($result_user) == 1)
+ {
+ // The final receiver does exists so we can continue...
+ list($sname, $fname, $email) = SQL_FETCHROW($result_user);
+ //* DEBUG: */ echo "OK!/L:".__LINE__."<BR>";
+
+ // Mark this user as "spammed" ;-) And place a line for him...
+ if (REMOVE_RECEIVER($DUMMY, $key, $uid, $DATA[0], $DATA[0], true) == "done")
+ {
+ // Prepare the mail
+ $msg = LOAD_EMAIL_TEMPLATE("bonus-mail", $DATA[2], $uid);
+
+ // Send mail away
+ SEND_EMAIL($email, $DATA[1], $msg, $DATA[11]);
+
+ // Count one up and remove entry from dummy array
+ $cnt++; unset($DUMMY[$key]);
+
+ if (GET_EXT_VERSION("user") >= "0.1.4")
+ {
+ // Update mails received for receiver
+ $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET emails_received=emails_received+1 WHERE userid=%d LIMIT 1",
+ array(bigintval($uid)), __FILE__, __LINE__);
+ }
+
+ // Do we have send maximum mails?
+ if (($cnt >= $CONFIG['max_send']) || (SELECTION_COUNT($DUMMY) == 0))
+ {
+ // Yes, we have
+ //* DEBUG: */ echo "*EXIT/L:".__LINE__."<BR>";
+ break;
+ }
+ }
+ }
+
+ // Free some memory
+ SQL_FREERESULT($result_user);
+ }
+
+ // Update mediadata if version is 0.0.4 or higher
+ if (GET_EXT_VERSION("mediadata") >= "0.0.4")
+ {
+ // Update entry (or add missing
+ $P = $cnt;
+ if (!empty($cnt2) && empty($cnt)) $P = $cnt2;
+ //* DEBUG: */ echo "+MEDIA/L:".__LINE__."/".$P."+<BR>";
+ MEDIA_UPDATE_ENTRY(array("total_send", "bonus_send"), "add", $P);
+ }
+
+ // Close sending system
+ //* DEBUG: */ echo "-L:".__LINE__."/".SELECTION_COUNT($DUMMY)."-<BR>";
+ if (SELECTION_COUNT($DUMMY) == 0)
+ {
+ // Queue reached!
+ $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='SEND', target_send='0', receivers='' WHERE id=%d LIMIT 1",
+ array(bigintval($DATA[0])), __FILE__, __LINE__);
+ //* DEBUG: */ echo "*L:".__LINE__."*<BR>";
+
+ // Update mediadata if version is 0.0.4 or higher
+ if (GET_EXT_VERSION("mediadata") >= "0.0.4")
+ {
+ // Update entry (or add missing)
+ //* DEBUG: */ echo "*MEDIA/L:".__LINE__."*<BR>";
+ MEDIA_UPDATE_ENTRY(array("total_orders", "bonus_orders"), "add", 1);
+ }
+ }
+ elseif ($cnt >= $CONFIG['max_send'])
+ {
+ // Update bonus pool
+ $result_done = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='NEW', target_send=%d, receivers='%s' WHERE id=%d LIMIT 1",
+ array(SELECTION_COUNT($DUMMY), implode(";", $DUMMY), bigintval($DATA[0])), __FILE__, __LINE__);
+ //* DEBUG: */ echo "*L:".__LINE__."<PRE>";
+ //* DEBUG: */ print_r($DUMMY);
+ //* DEBUG: */ echo "</PRE>\n!!!<BR>";
+ break;
+ }
+ }
+ }
+
+ // Free memory
+ SQL_FREERESULT($result_bonus);
+}
+
+// Remove message (IMPORTANT!)
+unset($msg);
+
+//
+?>