Re-added
[mailer.git] / inc / autopurge.php
index 0871b6ce80aa14ae21a16ebaa91ba513e28d7248..b312634738900081d372ac212bc97127dbd1a128 100644 (file)
  ************************************************************************/
 
 // 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, "");
-       }
-
-       // Free memory
-       SQL_FREERESULT($result_inactive);
+} // END - if
 
-       // 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 = "";
+// Load all includes
+$INC_POOL = GET_DIR_AS_ARRAY(PATH."inc/autopurge/", "purge-");
 
-               // Delete inactive accounts
-               while (list($uid, $email, $last) = SQL_FETCHROW($result_inactive))
-               {
-                       // Remember userids for the admin
-                       $UIDs .= $uid.", ";
+// Include them all
+foreach ($INC_POOL as $fqfn) {
+       // Load them only once
+       require_once($fqfn);
+} // END - foreach
 
-                       // Get date/time from timestamp
-                       $last = MAKE_DATETIME($last, "0");
+// Remove array
+unset($INC_POOL);
 
-                       // 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, "");
-       }
-}
-
-if (EXT_IS_ACTIVE("rallye"))
-{
+if (EXT_IS_ACTIVE("rallye")) {
        // Check expired rallyes (hard-coded 3 days limit for displaying expired rallyes!)
        require_once(PATH."inc/libs/rallye_functions.php");
        RALLYE_DELETE_EXPIRED_RALLYES();
 }
-//
-if (EXT_IS_ACTIVE("bonus"))
-{
+
+if (EXT_IS_ACTIVE("bonus")) {
        // Check for expired turbo bonus lines
        require_once(PATH."inc/libs/bonus_functions.php");
        BONUS_PURGE_EXPIRED_TURBO_BONUS();
 }
+
 //
 ?>