X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fautopurge.php;h=f3b1af8477fb5d2ab76add04b6475032c1e8e782;hp=a0896be2c32a52c8911a8af81318a8ada6c813bd;hb=254afbdb1fa4699a98667bad4e792ad803a0d535;hpb=0369c36aaab5af6ed44da1e13a53baef285f79b4 diff --git a/inc/autopurge.php b/inc/autopurge.php index a0896be2c3..f3b1af8477 100644 --- a/inc/autopurge.php +++ b/inc/autopurge.php @@ -32,350 +32,19 @@ ************************************************************************/ // Some security stuff... -if (ereg(basename(__FILE__), $_SERVER['PHP_SELF'])) -{ +if (!defined('__SECURITY')) { $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php"; require($INC); -} - -if (($_CONFIG['auto_purge_active'] == "Y") && ($_CONFIG['auto_purge'] > 0)) -{ - // First calculate the timestamp - if (function_exists('CREATE_TIME_SELECTIONS')) - { - $PURGE = time() - $_CONFIG['auto_purge']; - } - else - { - $PURGE = time() - $_CONFIG['auto_purge'] * 24 * 60 * 60; - } - - // Init variables - $admin_points = 0; - - // Then check for outdated mail order. We don't delete them just the confirmation links will be deleted. - $result = SQL_QUERY_ESC("SELECT s.id, s.userid, s.pool_id, t.price -FROM "._MYSQL_PREFIX."_user_stats AS s -LEFT JOIN "._MYSQL_PREFIX."_payments AS t -ON s.payment_id=t.id -WHERE s.timestamp_ordered <= %s ORDER BY s.userid", - array(bigintval($PURGE)), __FILE__, __LINE__); - if (SQL_NUMROWS($result) > 0) - { - // Start deleting procedure - $uid = 0; $points = 0; - while(list($mid, $sender, $pool, $price) = SQL_FETCHROW($result)) - { - // Check if confirmation links are purged or not - $result_links = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_user_links WHERE stats_id=%s LIMIT 1", - array(bigintval($mid)), __FILE__, __LINE__); - if (SQL_NUMROWS($result_links) == 1) - { - // Free memory - SQL_FREERESULT($result_links); - - // At least one link was found, enougth to pay back the points - if (($uid != $sender) && ($uid > 0) && ($points > 0)) - { - // Directly add points back to senders account - AUTOPURGE_ADD_POINTS($uid, $points); - $points = 0; - } - // Add points - $uid = $sender; $points += $price; $admin_points += $price; - - // Remove confirmation links from queue - $result_del = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_links WHERE stats_id=%s", - array(bigintval($mid)), __FILE__, __LINE__); - - // Update status of order - $result_update = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_pool SET data_type='DELETED' WHERE id=%s LIMIT 1", - array(bigintval($pool)), __FILE__, __LINE__); - } - } - - // Add last points to last user account - if ($points > 0) AUTOPURGE_ADD_POINTS($uid, $points); - } - - // Free memory - SQL_FREERESULT($result); - - // Is the 'bonus' extension installed and activated? - if (EXT_IS_ACTIVE("bonus", true)) - { - // Check for bonus campaigns - $result = SQL_QUERY_ESC("SELECT id, points FROM "._MYSQL_PREFIX."_bonus WHERE data_type='SEND' AND timestamp <= %s ORDER BY id", - array(bigintval($PURGE)), __FILE__, __LINE__); - if (SQL_NUMROWS($result) > 0) - { - // Start deleting procedure - $points = 0; - while (list($bid, $price) = SQL_FETCHROW($result)) - { - // Check if confirmation links are purged or not - $result_links = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_user_links WHERE bonus_id=%s", - array(bigintval($bid)), __FILE__, __LINE__); - if (SQL_NUMROWS($result_links) > 0) - { - // At least one link was found, enougth to pay back the points - $points += $price * SQL_NUMROWS($result_links); - - // Free memory - SQL_FREERESULT($result_links); - - // Remove confirmation links from queue - $result_del = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_links WHERE bonus_id=%s", - array(bigintval($bid)), __FILE__, __LINE__); - - // Update status of order - $result_update = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_bonus SET data_type='DELETED' WHERE id=%s LIMIT 1", - array(bigintval($bid)), __FILE__, __LINE__); - } - } - - // Add points to jackpot - ADD_JACKPOT($points); - - // Add points for the admin - $admin_points += $points; - } - - // Free memory - SQL_FREERESULT($result); - } - - // Add points from deleted accounts to jackpot, but here just add to notify mail - if ($admin_points > 0) - { - // Send mail to admin - SEND_ADMIN_NOTIFICATION(AUTOPURGE_ADMIN_SUBJECT, "admin_autopurge_points", TRANSLATE_COMMA($points), "0"); - } -} - -// Shall I look for inactive accounts and autopurge inactive accounts? -if ($_CONFIG['ap_inactive'] == "Y") -{ - // Ok, let's have a look... - $since = bigintval(time() - $_CONFIG['ap_in_since']); - $EXCLUDE_LIST = " AND d.userid != c.def_refid"; - - // Check for more extensions - if (EXT_IS_ACTIVE("beg")) $EXCLUDE_LIST .= " AND d.userid != c.beg_uid"; - if (EXT_IS_ACTIVE("bonus")) $EXCLUDE_LIST .= " AND d.userid != c.bonus_uid"; - if (EXT_IS_ACTIVE("doubler")) $EXCLUDE_LIST .= " AND d.userid != c.doubler_uid"; - - // Check for new holiday extension - if (GET_EXT_VERSION("holiday") >= "0.1.3") - { - $EXCLUDE_LIST .= " AND d.holiday_active = 'N'"; - } - - // Check for all accounts - $result_inactive = SQL_QUERY_ESC("SELECT DISTINCT d.userid, d.email, d.last_online -FROM "._MYSQL_PREFIX."_user_data AS d, "._MYSQL_PREFIX."_config AS c -WHERE d.status='CONFIRMED' AND d.joined < %s AND d.last_online < %s AND d.ap_notified < %s -".$EXCLUDE_LIST." -ORDER BY d.userid", array($since, $since, $since), __FILE__, __LINE__); - - if (SQL_NUMROWS($result_inactive) > 0) - { - // Prepare variables and constants... - $UIDs = ""; - define('__INACTIVE_SINCE', ($_CONFIG['ap_in_since'] / 60 / 60)); - define('__INACTIVE_TIME' , ($_CONFIG['ap_in_time'] / 60 / 60)); - - // Mark found accounts as inactive and send an email - while(list($uid, $email, $last) = SQL_FETCHROW($result_inactive)) - { - // Remember userids for the admin - $UIDs .= $uid.", "; - - // Get date/time from timestamp - $last = MAKE_DATETIME($last, "0"); - - // Load mail template - $msg = LOAD_EMAIL_TEMPLATE("member_autopurge_inactive", $last, bigintval($uid)); - SEND_EMAIL($email, AUTOPURGE_MEMBER_INACTIVE_SUBJECT, $msg); - - // Update this account - $result_update = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_user_data SET ap_notified=UNIX_TIMESTAMP() WHERE userid=%s LIMIT 1", - array(bigintval($uid)), __FILE__, __LINE__); - } - - // Remove last comma - $UIDs = str_replace(", ", "\n", substr($UIDs, 0, -2)); - - // Send mail notification to admin - SEND_ADMIN_NOTIFICATION(AUTOPURGE_ADMIN_INACTIVE_SUBJECT, "admin_autopurge_inactive", $UIDs, ""); - } +} // END - if - // Free memory - SQL_FREERESULT($result_inactive); +// Load all includes +$INC_POOL = GET_DIR_AS_ARRAY(PATH."inc/autopurge/", "purge-"); - // Now let's have a look for inactive accounts we want to delete we newly use the same exclude list - // here for e.g. excluding holiday users - $time = bigintval(time() - $_CONFIG['ap_in_time']); - $result_inactive = SQL_QUERY_ESC("SELECT d.userid, d.email, d.last_online -FROM "._MYSQL_PREFIX."_user_data AS d, "._MYSQL_PREFIX."_config AS c -WHERE status='CONFIRMED' AND joined < %s AND last_online< %s AND ap_notified < %s -".$EXCLUDE_LIST." -ORDER BY userid", - array($since, $since, $time), __FILE__, __LINE__); - if (SQL_NUMROWS($result_inactive) > 0) - { - // Prepare variable... - $UIDs = ""; - - // Delete inactive accounts - while (list($uid, $email, $last) = SQL_FETCHROW($result_inactive)) - { - // Remember userids for the admin - $UIDs .= $uid.", "; - - // Get date/time from timestamp - $last = MAKE_DATETIME($last, "0"); - - // Finnaly delete this inactive account - DELETE_USER_ACCOUNT(bigintval($uid), LOAD_EMAIL_TEMPLATE("member_autopurge_delete", $last, "")); - } - - // Remove last comma - $UIDs = str_replace(", ", "\n", substr($UIDs, 0, -2)); - - // Send mail notification to admin - if ($_CONFIG['ap_un_mail'] == "Y") - { - SEND_ADMIN_NOTIFICATION(AUTOPURGE_ADMIN_DELETE_SUBJECT, "admin_autopurge_delete", $UIDs, ""); - } - } - - // Free memory - SQL_FREERESULT($result_inactive); -} - -// Shall I auto-purge unconfirmed accounts? -if ($_CONFIG['ap_unconfirmed'] == "Y") -{ - // Init variables and find unconfirmed accounts which I shall auto-purge - $time = bigintval(time() - $_CONFIG['ap_un_time']); - $result_uncon = SQL_QUERY_ESC("SELECT userid, email, joined FROM "._MYSQL_PREFIX."_user_data WHERE status='UNCONFIRMED' AND joined < %s ORDER BY userid", - array($time), __FILE__, __LINE__); - if (SQL_NUMROWS($result_uncon) > 0) - { - // Prepare variable... - $UIDs = ""; - define('__UNCONFIRMED_TIME' , ($_CONFIG['ap_un_time'] / 60 / 60)); - - // Delete inactive accounts - while (list($uid, $email, $joined) = SQL_FETCHROW($result_uncon)) - { - // Remember userids for the admin - $UIDs .= $uid.", "; - - // Get date/time from timestamp - $joined = MAKE_DATETIME($joined, "0"); - - // Finnaly delete this inactive account - DELETE_USER_ACCOUNT($uid, LOAD_EMAIL_TEMPLATE("member_autopurge_unconfirmed", $joined, "")); - } - - // Remove last comma - $UIDs = str_replace(", ", "\n", substr($UIDs, 0, -2)); - - // Send mail notification to admin - if ($_CONFIG['ap_un_mail'] == "Y") - { - SEND_ADMIN_NOTIFICATION(AUTOPURGE_ADMIN_UNCONFIRMED_SUBJECT, "admin_autopurge_unconfirmed", $UIDs, ""); - } - } - - // Free memory - SQL_FREERESULT($result_uncon); -} - -// Check version (must be > 0.0) -if ((GET_EXT_VERSION("task") > "0.0") && ($_CONFIG['ap_tasks'] == "Y")) -{ - // Purge deleted tasks (no notification to admin) - $since = bigintval(time() - $_CONFIG['ap_tasks_time']); - $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_task_system WHERE status='DELETED' AND task_created <= %s", - array($since), __FILE__, __LINE__); - $DELETED = SQL_AFFECTEDROWS(); - - if (($DELETED > 0) && ($_CONFIG['ap_tasks_mail'] == "Y")) - { - // Send out email to admin - SEND_ADMIN_NOTIFICATION(AUTOPURGE_ADMIN_TASKS_SUBJECT, "admin_autopurge_tsks", $DELETED, ""); - } -} - -// Search for mails from deleted members? -if ($_CONFIG['ap_del_mails']) { - // Okay, let's check for them... - $since = bigintval(time() - $_CONFIG['ap_dm_timeout']); - $result_mails = SQL_QUERY_ESC("SELECT sender FROM "._MYSQL_PREFIX."_pool WHERE data_type='DELETED' AND timestamp <= %s ORDER BY sender", - array($since), __FILE__, __LINE__); - - // Reset counter... - $DELETED = 0; - - // Do we have "purged" mails? - if (SQL_NUMROWS($result_mails) > 0) { - // Okay, check for their sender's - while(list($sender) = SQL_FETCHROW($result_mails)) { - // Check now... - $fount = SQL_NUMROWS(SQL_QUERY_ESC("SELECT userid FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1", array(bigintval($sender)), __FILE__, __LINE__)); - if ($found == 0) { - // Okay we found some mails! - $result_remove = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_pool WHERE sender=%s", - array(bigintval($sender)), __FILE__, __LINE__); - $DELETED += SQL_AFFECTEDROWS(); - - // Reset query (to prevent possible errors) ... - $since = bigintval(time() - $_CONFIG['ap_dm_timeout']); - $result_mails = SQL_QUERY_ESC("SELECT sender FROM "._MYSQL_PREFIX."_pool WHERE data_type='DELETED' AND timestamp <= %s ORDER BY sender", - array($since), __FILE__, __LINE__); - } - } - } - - // Free memory - SQL_FREERESULT($result_mails); - - // Now let's check for stats entries as well - $since = bigintval(time() - $_CONFIG['ap_dm_timeout']); - $result_mails = SQL_QUERY_ESC("SELECT sender FROM "._MYSQL_PREFIX."_pool WHERE data_type='DELETED' AND timestamp <= %s ORDER BY sender", - array($since), __FILE__, __LINE__); - - // Do we have "purged" mails? - if (SQL_NUMROWS($result_mails) > 0) { - // Okay, check for their sender's - while(list($sender) = SQL_FETCHROW($result_mails)) { - // Check now... - $found = SQL_NUMROWS(SQL_QUERY_ESC("SELECT userid FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1", array(bigintval($sender)), __FILE__, __LINE__)); - if ($found == 0) { - // Okay we found some mails! - $result_remove = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_user_stats WHERE sender=%s", array(bigintval($sender)), __FILE__, __LINE__); - $DELETED += SQL_AFFECTEDROWS(); - - // Reset query (to prevent possible errors) ... - $since = bigintval(time() - $_CONFIG['ap_dm_timeout']); - $result_mails = SQL_QUERY_ESC("SELECT sender FROM "._MYSQL_PREFIX."_user_stats WHERE data_type='DELETED' AND timestamp_send <= %s ORDER BY sender", - array($since), __FILE__, __LINE__); - } - } - } - - // Free memory - SQL_FREERESULT($result_mails); - - // Do we have deleted mails and the admin want's to receive a notification - if (($DELETED > 0) && ($_CONFIG['ap_dm_notify'] == "Y")) { - // Send out email to admin - SEND_ADMIN_NOTIFICATION(AUTOPURGE_ADMIN_DEL_MAILS_SUBJECT, "admin_autopurge_del_mails", $DELETED, ""); - } -} +// Include them all +foreach ($INC_POOL as $fqfn) { + // Load them only once + require_once($fqfn); +} // END - foreach if (EXT_IS_ACTIVE("rallye")) { // Check expired rallyes (hard-coded 3 days limit for displaying expired rallyes!)