From: Roland Häder Date: Sat, 10 Nov 2012 20:29:55 +0000 (+0000) Subject: Added purging of subid and server_name logs X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=32f930539d6b5cb5e603bece41277f3e5cca8fa9;p=mailer.git Added purging of subid and server_name logs --- diff --git a/.gitattributes b/.gitattributes index 08acc8d1bf..1feadf9868 100644 --- a/.gitattributes +++ b/.gitattributes @@ -118,6 +118,7 @@ inc/daily/daily_order.php svneol=native#text/plain inc/daily/daily_profile.php svneol=native#text/plain inc/daily/daily_surfbar.php svneol=native#text/plain inc/daily/daily_user.php svneol=native#text/plain +inc/daily/daily_user_subids.php svneol=native#text/plain inc/daily/daily_yoomedia.php svneol=native#text/plain inc/databases.php svneol=native#text/plain inc/db/.htaccess svneol=native#text/plain @@ -527,6 +528,7 @@ inc/modules/admin/what-config_title.php svneol=native#text/plain inc/modules/admin/what-config_top10.php svneol=native#text/plain inc/modules/admin/what-config_transfer.php svneol=native#text/plain inc/modules/admin/what-config_user.php svneol=native#text/plain +inc/modules/admin/what-config_user_subid.php svneol=native#text/plain inc/modules/admin/what-config_validator.php svneol=native#text/plain inc/modules/admin/what-config_wernis.php svneol=native#text/plain inc/modules/admin/what-config_yoomedia.php svneol=native#text/plain @@ -915,6 +917,8 @@ templates/de/emails/admin/admin_newsletter_reset.tpl svneol=native#text/plain templates/de/emails/admin/admin_order_normal.tpl svneol=native#text/plain templates/de/emails/admin/admin_payout_request.tpl svneol=native#text/plain templates/de/emails/admin/admin_payout_request_banner.tpl svneol=native#text/plain +templates/de/emails/admin/admin_purge_user_server_name_log.tpl svneol=native#text/plain +templates/de/emails/admin/admin_purge_user_subid_log.tpl svneol=native#text/plain templates/de/emails/admin/admin_rallye_expired.tpl svneol=native#text/plain templates/de/emails/admin/admin_rallye_expired_no.tpl svneol=native#text/plain templates/de/emails/admin/admin_rallye_no_notify.tpl svneol=native#text/plain @@ -1220,6 +1224,7 @@ templates/de/html/admin/admin_config_top10.tpl svneol=native#text/plain templates/de/html/admin/admin_config_transfer.tpl svneol=native#text/plain templates/de/html/admin/admin_config_transfer_pro.tpl -text templates/de/html/admin/admin_config_user.tpl svneol=native#text/plain +templates/de/html/admin/admin_config_user_subid.tpl svneol=native#text/plain templates/de/html/admin/admin_config_validator.tpl svneol=native#text/plain templates/de/html/admin/admin_config_wernis.tpl svneol=native#text/plain templates/de/html/admin/admin_config_yoomedia.tpl svneol=native#text/plain diff --git a/doubler.php b/doubler.php index b640d54d79..a9ab0c8ac9 100644 --- a/doubler.php +++ b/doubler.php @@ -85,7 +85,7 @@ if (isFormSent()) { setPostRequestElement('points', bigintval(round(convertCommaToDot(postRequestElement('points'))))); // Probe for enough points - $probe_points = ((postRequestElement('points') >= getConfig('doubler_min')) && (postRequestElement('points') <= getConfig('doubler_max'))); + $probe_points = ((postRequestElement('points') >= getDoublerMin()) && (postRequestElement('points') <= getDoublerMax())); // Check all together if ((isUserDataValid()) && (getUserData('password') == generateHash(postRequestElement('password'), substr(getUserData('password'), 0, -40))) && (getUserData('status') == 'CONFIRMED') && ($probe_points)) { @@ -96,7 +96,7 @@ if (isFormSent()) { $points = getTotalPoints(getUserData('userid')); // So let's continue with probing his points amount - if (($points - getConfig('doubler_left') - postRequestElement('points') * getConfig('doubler_charge') / 100) >= 0) { + if (($points - getConfig('doubler_left') - postRequestElement('points') * getDoublerCharge() / 100) >= 0) { // Enough points are left so let's continue with the doubling process // Create doubling "account" with *DOUBLED* points SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_doubler` (`userid`, `refid`, `points`, `remote_ip`, `timemark`, `completed`, `is_ref`) VALUES (%s,%s,%s,'%s', UNIX_TIMESTAMP(), 'N','N')", @@ -111,7 +111,7 @@ if (isFormSent()) { subtractPoints('doubler', getUserData('userid'), postRequestElement('points')); // Add points to "total payed" including charge - $points = postRequestElement('points') - postRequestElement('points') * getConfig('doubler_charge') / 100; + $points = postRequestElement('points') - postRequestElement('points') * getDoublerCharge() / 100; updateConfiguration('doubler_points', $points, '+'); incrementConfigEntry('doubler_points', $points); @@ -121,7 +121,7 @@ if (isFormSent()) { SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_doubler` (`userid`, `refid`, `points`, `remote_ip`, `timemark`, `completed`, `is_ref`) VALUES (%s,0,%s,'%s',UNIX_TIMESTAMP(),'N','Y')", array( convertZeroToNull(determineReferralId()), - (postRequestElement('points') * 2 * getConfig('doubler_ref') / 100), + (postRequestElement('points') * 2 * getDoublerRef() / 100), detectRemoteAddr() ), __FILE__, __LINE__); @@ -146,10 +146,10 @@ if (isFormSent()) { } elseif (getUserData('status') == 'LOCKED') { // Account is locked by admin / holiday! $content['message'] = '{--DOUBLER_FORM_STATUS_LOCKED--}'; - } elseif (postRequestElement('points') < getConfig('doubler_min')) { + } elseif (postRequestElement('points') < getDoublerMin()) { // Not enougth points entered $content['message'] = '{--DOUBLER_FORM_POINTS_MIN--}'; - } elseif (postRequestElement('points') > getConfig('doubler_max')) { + } elseif (postRequestElement('points') > getDoublerMax()) { // Too much points entered $content['message'] = '{--DOUBLER_FORM_POINTS_MAX--}'; } elseif (isNicknameUsed(postRequestElement('userid'))) { @@ -172,7 +172,7 @@ if (isFormSent()) { } // END - if (isFormSet()) // Shall I check for points immediately? -if (getConfig('doubler_send_mode') == 'DIRECT') { +if (getDoublerSendMode() == 'DIRECT') { loadInclude('inc/mails/doubler_mails.php'); } // END - if @@ -204,7 +204,7 @@ if (isExtensionActive('nickname')) { } // Which mail-send-mode did the admin setup? -$content['payout_time'] = '{--DOUBLER_PAYOUT_TIME_' . getConfig('doubler_send_mode') . '--}'; +$content['payout_time'] = '{--DOUBLER_PAYOUT_TIME_' . getDoublerSendMode() . '--}'; // Generate table with already payed out doubles $content['payout_history'] = generateDoublerTable(0, 'Y', 'N', 'DESC'); diff --git a/inc/daily/daily_100_bonus.php b/inc/daily/daily_100_bonus.php index c32db5f509..dcca9cb084 100644 --- a/inc/daily/daily_100_bonus.php +++ b/inc/daily/daily_100_bonus.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('bonus')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-bonus disabled.'); return; } diff --git a/inc/daily/daily_autopurge.php b/inc/daily/daily_autopurge.php index 0dd607299e..f2c4d689a1 100644 --- a/inc/daily/daily_autopurge.php +++ b/inc/daily/daily_autopurge.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('autopurge')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-autopurge disabled.'); return; } diff --git a/inc/daily/daily_beg.php b/inc/daily/daily_beg.php index 300f3c2ff1..a1eef8d7d2 100644 --- a/inc/daily/daily_beg.php +++ b/inc/daily/daily_beg.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif ((!isExtensionActive('beg')) || (!isBegRallyeEnabled())) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-beg disabled.'); return; } diff --git a/inc/daily/daily_birthday.php b/inc/daily/daily_birthday.php index ae3b57134a..b44250769c 100644 --- a/inc/daily/daily_birthday.php +++ b/inc/daily/daily_birthday.php @@ -43,7 +43,7 @@ if (!defined('__SECURITY')) { return; } elseif (!isExtensionActive('birthday')) { // Extension not active/installed - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-birthday disabled.'); return; } diff --git a/inc/daily/daily_bonus.php b/inc/daily/daily_bonus.php index 56a72bb728..4faf7a0f6e 100644 --- a/inc/daily/daily_bonus.php +++ b/inc/daily/daily_bonus.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('bonus')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-bonus disabled.'); return; } diff --git a/inc/daily/daily_doubler.php b/inc/daily/daily_doubler.php index 836e747ffb..d170f7f5bc 100644 --- a/inc/daily/daily_doubler.php +++ b/inc/daily/daily_doubler.php @@ -41,8 +41,8 @@ if (!defined('__SECURITY')) { } elseif ((!isHtmlOutputMode()) || (!isResetModeEnabled())) { // Do not execute when script is in CSS mode or no daily reset return; -} elseif ((!isExtensionActive('doubler')) || (getConfig('doubler_send_mode') != 'RESET')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); +} elseif ((!isExtensionActive('doubler')) || (getDoublerSendMode() != 'RESET')) { + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-doubler disabled.'); return; } diff --git a/inc/daily/daily_earning.php b/inc/daily/daily_earning.php index 93028cd788..de4a03e82e 100644 --- a/inc/daily/daily_earning.php +++ b/inc/daily/daily_earning.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('earning')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-earning disabled.'); return; } diff --git a/inc/daily/daily_holiday.php b/inc/daily/daily_holiday.php index 2f8ffb2963..e1488dd0bf 100644 --- a/inc/daily/daily_holiday.php +++ b/inc/daily/daily_holiday.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('holiday')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-holiday disabled.'); return; } diff --git a/inc/daily/daily_order.php b/inc/daily/daily_order.php index 029687ec84..39b5f64e19 100644 --- a/inc/daily/daily_order.php +++ b/inc/daily/daily_order.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('order')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-order disabled.'); return; } diff --git a/inc/daily/daily_profile.php b/inc/daily/daily_profile.php index 97a34f5ab5..70b0eb96b5 100644 --- a/inc/daily/daily_profile.php +++ b/inc/daily/daily_profile.php @@ -43,7 +43,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('profile')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-profile disabled.'); return; } diff --git a/inc/daily/daily_surfbar.php b/inc/daily/daily_surfbar.php index 495f0b0fb7..b1d1db4cec 100644 --- a/inc/daily/daily_surfbar.php +++ b/inc/daily/daily_surfbar.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif (!isExtensionActive('surfbar')) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension ext-surfbar disabled.'); return; } diff --git a/inc/daily/daily_user.php b/inc/daily/daily_user.php index fa5e28e189..591ba21b76 100644 --- a/inc/daily/daily_user.php +++ b/inc/daily/daily_user.php @@ -42,7 +42,7 @@ if (!defined('__SECURITY')) { // Do not execute when script is in CSS mode or no daily reset return; } elseif ((!isExtensionActive('sql_patches')) || (!isExtensionActive('user'))) { - logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension(s) disabled.'); + logDebugMessage(__FILE__, __LINE__, 'Not resetting, needed extension(s) ext-sql_patches/ext-user disabled.'); return; } diff --git a/inc/daily/daily_user_subids.php b/inc/daily/daily_user_subids.php new file mode 100644 index 0000000000..9a3ebee597 --- /dev/null +++ b/inc/daily/daily_user_subids.php @@ -0,0 +1,72 @@ + 0)) { + // Start purging + SQL_QUERY('DELETE LOW_PRIORITY FROM + `{?_MYSQL_PREFIX?}_subid_log` +WHERE + (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`entry_added`)) >= {?ap_subids_since?}', + __FILE__, __LINE__); + + // Are some entries deleted? + if (SQL_AFFECTEDROWS() > 0) { + // Okay, then send an email to the admin + sendAdminNotification('{--ADMIN_PURGE_USER_SUBID_LOG_SUBJECT--}', 'admin_purge_user_subid_log', SQL_AFFECTEDROWS()); + } // END - if +} // END - if + +// Debug line +//* DEBUG: */ logDebugMessage(__FILE__, __LINE__, 'Daily reset ended.'); + +// [EOF] +?> diff --git a/inc/extensions/ext-sql_patches.php b/inc/extensions/ext-sql_patches.php index d0e26dd18c..5c02468c3c 100644 --- a/inc/extensions/ext-sql_patches.php +++ b/inc/extensions/ext-sql_patches.php @@ -41,10 +41,10 @@ if (!defined('__SECURITY')) { } // END - if // Version number -setThisExtensionVersion('0.9.2'); +setThisExtensionVersion('0.9.3'); // Version history array (add more with , '0.0.1' and so on) -setExtensionVersionHistory(array('0.0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0.5', '0.0.6', '0.0.7', '0.0.8', '0.0.9', '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1.4', '0.1.5', '0.1.6', '0.1.7', '0.1.8', '0.1.9', '0.2.0', '0.2.1', '0.2.2', '0.2.3', '0.2.4', '0.2.5', '0.2.6', '0.2.7', '0.2.8', '0.2.9', '0.3.0', '0.3.1', '0.3.2', '0.3.3', '0.3.4', '0.3.5', '0.3.6', '0.3.7', '0.3.8', '0.3.9', '0.4.0', '0.4.1', '0.4.2', '0.4.3', '0.4.4', '0.4.5', '0.4.6', '0.4.7', '0.4.8', '0.4.9', '0.5.0', '0.5.1', '0.5.2', '0.5.3', '0.5.4', '0.5.5', '0.5.6', '0.5.7', '0.5.8', '0.5.9', '0.6.0', '0.6.1', '0.6.2', '0.6.3', '0.6.4', '0.6.4', '0.6.5', '0.6.6', '0.6.7', '0.6.8', '0.6.9', '0.7.0', '0.7.1', '0.7.2', '0.7.3', '0.7.4', '0.7.5', '0.7.6', '0.7.7', '0.7.8', '0.7.9', '0.8.0', '0.8.1', '0.8.2', '0.8.3', '0.8.4', '0.8.5', '0.8.6', '0.8.7', '0.8.8', '0.8.9', '0.9.0', '0.9.1', '0.9.2')); +setExtensionVersionHistory(array('0.0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0.5', '0.0.6', '0.0.7', '0.0.8', '0.0.9', '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1.4', '0.1.5', '0.1.6', '0.1.7', '0.1.8', '0.1.9', '0.2.0', '0.2.1', '0.2.2', '0.2.3', '0.2.4', '0.2.5', '0.2.6', '0.2.7', '0.2.8', '0.2.9', '0.3.0', '0.3.1', '0.3.2', '0.3.3', '0.3.4', '0.3.5', '0.3.6', '0.3.7', '0.3.8', '0.3.9', '0.4.0', '0.4.1', '0.4.2', '0.4.3', '0.4.4', '0.4.5', '0.4.6', '0.4.7', '0.4.8', '0.4.9', '0.5.0', '0.5.1', '0.5.2', '0.5.3', '0.5.4', '0.5.5', '0.5.6', '0.5.7', '0.5.8', '0.5.9', '0.6.0', '0.6.1', '0.6.2', '0.6.3', '0.6.4', '0.6.4', '0.6.5', '0.6.6', '0.6.7', '0.6.8', '0.6.9', '0.7.0', '0.7.1', '0.7.2', '0.7.3', '0.7.4', '0.7.5', '0.7.6', '0.7.7', '0.7.8', '0.7.9', '0.8.0', '0.8.1', '0.8.2', '0.8.3', '0.8.4', '0.8.5', '0.8.6', '0.8.7', '0.8.8', '0.8.9', '0.9.0', '0.9.1', '0.9.2', '0.9.3')); // Keep this extension always active! setExtensionAlwaysActive('Y'); @@ -108,6 +108,7 @@ IN ( unregisterFilter(__FILE__, __LINE__, 'member_login_check', 'RESET_USER_LOGIN_FAILURE', TRUE, isExtensionDryRun()); unregisterFilter(__FILE__, __LINE__, 'add_history_entry', 'ADD_HISTORY_ENTRY', TRUE, isExtensionDryRun()); unregisterFilter(__FILE__, __LINE__, 'init', 'GENERATE_FILE_SECRET_HASH', TRUE, isExtensionDryRun()); + unregisterFilter(__FILE__, __LINE__, 'extra_autopurge', 'SERVER_NAME_EXTRA_AUTOPURGE', TRUE, isExtensionDryRun()); break; case 'activate': // Do stuff when admin activates this extension @@ -963,6 +964,17 @@ PRIMARY KEY (`server_name_id`) // Update notes (these will be set as task text!) setExtensionUpdateNotes("Sorry, hatte noch IP-Nummer, User-Agent, aufrufende Seite und Zähler vergessen."); break; + + case '0.9.3': // SQL queries for v0.9.3 + addConfigAddSql('ap_server_name', "ENUM('Y','N') NOT NULL DEFAULT 'Y'"); + addConfigAddSql('ap_server_name_since', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT ' . (getOneDay() * 7)); + + // Register filter + registerFilter(__FILE__, __LINE__, 'extra_autopurge', 'SERVER_NAME_EXTRA_AUTOPURGE', FALSE, TRUE, isExtensionDryRun()); + + // Update notes (these will be set as task text!) + setExtensionUpdateNotes("Bereinigung von verkehrten SERVER_NAME Einträgen hinzugefügt."); + break; } // END - switch break; diff --git a/inc/extensions/ext-user.php b/inc/extensions/ext-user.php index 1e4d7215e1..994b40b929 100644 --- a/inc/extensions/ext-user.php +++ b/inc/extensions/ext-user.php @@ -41,10 +41,10 @@ if (!defined('__SECURITY')) { } // END - if // Version number -setThisExtensionVersion('0.5.7'); +setThisExtensionVersion('0.5.8'); // Version history array (add more with , '0.0.1' and so on) -setExtensionVersionHistory(array('0.0.0', '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1.4', '0.1.5', '0.1.6', '0.1.7', '0.1.8', '0.1.9', '0.2.0', '0.2.1', '0.2.2', '0.2.3', '0.2.4', '0.2.5', '0.2.6', '0.2.7', '0.2.8', '0.2.9', '0.3.0', '0.3.1', '0.3.2', '0.3.3', '0.3.4', '0.3.5', '0.3.6', '0.3.7', '0.3.8', '0.3.9', '0.4.0', '0.4.1', '0.4.2', '0.4.3', '0.4.4', '0.4.5', '0.4.6', '0.4.7', '0.4.8', '0.4.9', '0.5.0', '0.5.1', '0.5.2', '0.5.3', '0.5.4', '0.5.5', '0.5.6', '0.5.7')); +setExtensionVersionHistory(array('0.0.0', '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1.4', '0.1.5', '0.1.6', '0.1.7', '0.1.8', '0.1.9', '0.2.0', '0.2.1', '0.2.2', '0.2.3', '0.2.4', '0.2.5', '0.2.6', '0.2.7', '0.2.8', '0.2.9', '0.3.0', '0.3.1', '0.3.2', '0.3.3', '0.3.4', '0.3.5', '0.3.6', '0.3.7', '0.3.8', '0.3.9', '0.4.0', '0.4.1', '0.4.2', '0.4.3', '0.4.4', '0.4.5', '0.4.6', '0.4.7', '0.4.8', '0.4.9', '0.5.0', '0.5.1', '0.5.2', '0.5.3', '0.5.4', '0.5.5', '0.5.6', '0.5.7', '0.5.8')); // Keep this extension always active! setExtensionAlwaysActive('Y'); @@ -663,6 +663,17 @@ INDEX (`subid`)", // Update notes (these will be set as task text!) setExtensionUpdateNotes("Menü zum Auflisten des Guthabens hinzugefügt. Diese Daten sollen noch später weiter verarbeitet werden. Zum Beispiel soll dann schnell feststellbar sein, welche Verdienstgruppe das meiste und wenigste {?POINTS?}-Volumen besitzt."); break; + + case '0.5.8': // SQL queries for v0.5.8 + addConfigAddSql('ap_subids', "ENUM('Y', 'N') NOT NULL DEFAULT 'Y'"); + addConfigAddSql('ap_subids_since', 'BIGINT(20) UNSIGNED NOT NULL DEFAULT ' . (getOneDay() * 7)); + + // Admin menu + addAdminMenuSql('setup', 'config_user_subid', 'Sub-Id Tracking', 'Ändern Sie hier alle Einstellungen zu den Sub-Ids.', 10); + + // Update notes (these will be set as task text!) + setExtensionUpdateNotes("Bereinigung von Sub-Ids und deren Einstellungen hinzugefügt."); + break; } // END - switch break; diff --git a/inc/filters.php b/inc/filters.php index 5f2dc52d18..38193a2059 100644 --- a/inc/filters.php +++ b/inc/filters.php @@ -1352,5 +1352,27 @@ function FILTER_ADD_INPUT_HIDDEN_SESSION_ID ($filterData) { return $filterData; } +// Filter for purging old SERVER_NAME entries +function FILTER_SERVER_NAME_EXTRA_AUTOPURGE ($filterData) { + // Is purging configured? + if ((isApServerNameEnabled()) && (getApServerNameSince() > 0)) { + // Then start purging + SQL_QUERY('DELETE LOW_PRIORITY FROM + `{?_MYSQL_PREFIX?}_server_name_log` +WHERE + (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`server_name_added`)) >= {?ap_server_name_since?}', + __FILE__, __LINE__); + + // Are some entries deleted? + if (SQL_AFFECTEDROWS() > 0) { + // Okay, then send an email to the admin + sendAdminNotification('{--ADMIN_PURGE_USER_SERVER_NAME_LOG_SUBJECT--}', 'admin_purge_user_server_name_log', SQL_AFFECTEDROWS()); + } // END - if + } // END - if + + // Return filter data + return $filterData; +} + // [EOF] ?> diff --git a/inc/language/autopurge_de.php b/inc/language/autopurge_de.php index bf51d393b8..fb8fa8386d 100644 --- a/inc/language/autopurge_de.php +++ b/inc/language/autopurge_de.php @@ -45,27 +45,22 @@ addMessages(array( // Admin lines 'ADMIN_CONFIG_AUTOPURGE_TITLE' => "Konfiguration der automatischen Löschungen", 'ADMIN_CONFIG_AUTOPURGE_INACTIVE' => "Sollten inaktive Accounts erkannt und gelöscht werden?", - 'ADMIN_CONFIG_AUTOPURGE_INACTIVE_SINCE' => "Dauer bis bestätigtes Account als inaktiv markiert wird", - 'ADMIN_CONFIG_AUTOPURGE_INACTIVE_TIME' => "Dauer bis inaktives Account gelöscht wird", + 'ADMIN_CONFIG_AUTOPURGE_INACTIVE_SINCE' => "Dauer bis bestätigtes Account als inaktiv markiert wird:", + 'ADMIN_CONFIG_AUTOPURGE_INACTIVE_TIME' => "Dauer bis inaktives Account gelöscht wird:", 'ADMIN_CONFIG_AUTOPURGE_UNCONFIRMED' => "Sollen unbestätigte Accounts gelöscht werden?", - 'ADMIN_CONFIG_AUTOPURGE_UNCONFIRMED_TIME' => "Dauer bis unbestätigte Accounts gelöscht werden", + 'ADMIN_CONFIG_AUTOPURGE_UNCONFIRMED_TIME' => "Dauer bis unbestätigte Accounts gelöscht werden:", 'ADMIN_AUTOPURGE_ALL_ACTIVE' => "Alle Ihre Mitlieder sind aktiv.", 'ADMIN_CONFIG_AUTOPURGE_TASKS' => "Löschen von veralteten zu Löschen markierten Aufgaben?", - 'ADMIN_CONFIG_AUTOPURGE_TASKS_TIME' => "Dauer bis zu löschen marktierte Aufgaben gelöscht werden", - 'ADMIN_CONFIG_AUTOPURGE_INACTIVE_TITLE' => "Inaktive Accounts löschen", - 'ADMIN_CONFIG_AUTOPURGE_UNCONFIRMED_TITLE' => "Unbestätigte Accounts löschen", - 'ADMIN_CONFIG_AUTOPURGE_TASKS_TITLE' => "Veraltete Aufgaben löschen", - 'ADMIN_CONFIG_AUTOPURGE_NOTIFICATION_TITLE' => "Benachtigung an Admin bei Auto-Löschung", - 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_INACTIVE' => "Benachrichtigung bei inaktive Accounts löschen", - 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_UNCONFIRMED' => "Benachrichtigung bei unbestätigte Accounts löschen", - 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_TASKS' => "Benachrichtigung bei veraltete Aufgaben löschen", + 'ADMIN_CONFIG_AUTOPURGE_TASKS_TIME' => "Dauer bis zu löschen marktierte Aufgaben gelöscht werden:", + 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_INACTIVE' => "Benachrichtigung bei inaktive Accounts löschen?", + 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_UNCONFIRMED' => "Benachrichtigung bei unbestätigte Accounts löschen?", + 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_TASKS' => "Benachrichtigung bei veraltete Aufgaben löschen?", 'ADMIN_LIST_AUTOPURGE_TITLE' => "Automatisch zu löschende Mitglieder", 'ADMIN_LIST_AUTOPURGE_FOOTER' => "Hier sollte ein Hinweis kommen.", 'ADMIN_AUTOPURGE_NOTIFIED' => "Benachrichtigt", - 'ADMIN_CONFIG_AUTOPURGE_DELETE_MAILS_TITLE' => "Mails von gelöschten Mitgliedern löschen", 'ADMIN_CONFIG_AUTOPURGE_DELETE_MAILS' => "Sollen die Mailbuchungen von bereits gelöschten Mitgliedern gelöscht werden?", - 'ADMIN_CONFIG_AUTOPURGE_DELETE_MAILS_TIME' => "Dauer bis Mails gelöscht werden", - 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_DELETE_MAILS' => "Benachrichtigen bei Löschung von Mails", + 'ADMIN_CONFIG_AUTOPURGE_DELETE_MAILS_TIME' => "Dauer bis Mails gelöscht werden:", + 'ADMIN_CONFIG_AUTOPURGE_NOTIFY_DELETE_MAILS' => "Benachrichtigen bei Löschung von Mails?", // Subject lines 'MEMBER_AUTOPURGE_SUBJECT' => "{?POINTS?}-Gutschrift bei Auto-Löschung", @@ -79,10 +74,17 @@ addMessages(array( 'ADMIN_AUTOPURGE_TURBO_SUBJECT' => "[Auto-Purge:] Veraltete Bonus-Einträge", 'ADMIN_AUTOPURGE_DELETE_MAILS_SUBJECT' => "[Auto-Purge:] Mailbuchungen bereits gel. Mitglieder", + // Admin - legends + 'ADMIN_CONFIG_AUTOPURGE_INACTIVE_LEGEND' => "Inaktive Accounts löschen", + 'ADMIN_CONFIG_AUTOPURGE_UNCONFIRMED_LEGEND' => "Unbestätigte Accounts löschen", + 'ADMIN_CONFIG_AUTOPURGE_TASKS_LEGEND' => "Veraltete Aufgaben löschen", + 'ADMIN_CONFIG_AUTOPURGE_NOTIFICATION_LEGEND' => "Benachtigung an Admin bei Auto-Löschung", + 'ADMIN_CONFIG_AUTOPURGE_DELETE_MAILS_LEGEND' => "Mails von gelöschten Mitgliedern löschen", + 'ADMIN_CONFIG_AUTOPURGE_MAILID_LEGEND' => "Mailbestätigungslinks löschen", + // Moved from other extensions 'ADMIN_CONFIG_AUTOPURGE_ACTIVE' => "Auto-Löschung von Bestätigungslink ist aktiviert?", 'ADMIN_CONFIG_MAIL_LIFETIME' => "Gütigkeitsdauer der Bestätigungslinks (0 = Bestätigungslinks laufen nie ab)", - 'ADMIN_CONFIG_AUTOPURGE_MAILID_TITLE' => "Mailbestätigungslinks löschen", // Points accounts - subject 'POINTS_SUBJECT_AUTOPURGE_ADD' => "Mailrückvergütung durch Autolöschung", diff --git a/inc/language/de.php b/inc/language/de.php index 87d8da2537..6fe926b9db 100644 --- a/inc/language/de.php +++ b/inc/language/de.php @@ -1375,6 +1375,14 @@ addMessages(array( 'ADMIN_TASK_LIST_SERVER_NAME_LOG_TITLE' => "Es sind geloggte SERVER_NAME-Logbucheinträge vorhanden.", 'ADMIN_SERVER_NAME' => "Host-Kopfzeile", + // Admin - server_name_log - config + 'ADMIN_CONFIG_AUTOPURGE_SERVER_NAME_LOG_LEGEND' => "Bereinigung von SERVER_NAME-Einträgen", + 'ADMIN_CONFIG_AUTOPURGE_SERVER_NAME_LOG' => "Sollen verkehrte SERVER_NAME-Einträge bereinigt werden?", + 'ADMIN_CONFIG_AUTOPURGE_SERVER_NAME_LOG_TIME' => "Dauer bis SERVER_NAME-Einträge gelöscht werden:", + + // Admin - server_name_log - subject lines + 'ADMIN_PURGE_USER_SERVER_NAME_LOG_SUBJECT' => "Es wurden verkehrte SERVER_NAME-Einträge bereinigt", + // Admin - user's points amount 'ADMIN_LIST_USER_AMOUNTS_TITLE' => "Verteilung des {?POINTS?}-Gesamtvolumens", 'ADMIN_TOTAL_POINTS' => "Gesamtguthaben", diff --git a/inc/language/user_de.php b/inc/language/user_de.php index 376d583a1c..1b70bd183c 100644 --- a/inc/language/user_de.php +++ b/inc/language/user_de.php @@ -169,6 +169,7 @@ addMessages(array( 'ADMIN_MEM_EDIT_USER_SUBIDS_SUBJECT' => "Mitglied hat eine Sub-Id geändert", 'ADMIN_DELETE_USER_SUBIDS_SUBJECT' => "Eine Sub-Id wurde gelöscht", 'ADMIN_MEM_DELETE_USER_SUBIDS_SUBJECT' => "Mitglied hat eine Sub-Id gelöscht", + 'ADMIN_PURGE_USER_SUBID_LOG_SUBJECT' => "Bereinigung des Sub-Id-Logbuchs", 'MEMBER_ADD_USER_SUBIDS_SUBJECT' => "Neue Sub-Id hinzugefügt", 'MEMBER_EDIT_USER_SUBIDS_SUBJECT' => "Änderung Ihrer Sub-Id", 'MEMBER_MEM_EDIT_USER_SUBIDS_SUBJECT' => "Änderung Ihrer Sub-Id", @@ -189,6 +190,12 @@ addMessages(array( 'ADMIN_USER_SUBID_NO_SELECTIONS' => "Sie haben keine Einträge ausgewählt oder es liegt ein Fehler vor. Bitte melden Sie dies im Bug-Tracker (auch wie es dazu gekommen ist).", 'ADMIN_CHANGE_USER_SUBID' => "Sub-Id ändern:", + // Admin - config subids + 'ADMIN_CONFIG_USER_SUBID_TITLE' => "Einstellungen zu Sub-Id-Tracking", + 'ADMIN_CONFIG_USER_SUBID_AUTOPURGE_LEGEND' => "Bereinigung des Sub-Id-Logbuchs:", + 'ADMIN_CONFIG_USER_SUBID_STUFF_AUTOPURGE' => "Soll das Logbuch für Sub-Id-Tracking bereinigt werden?", + 'ADMIN_CONFIG_USER_SUBID_STUFF_AUTOPURGE_SINCE' => "Wie lange sollen alte Logbucheinträge bestehen bleiben?", + // Generic - subids 'SUBID_VALUE' => "Sub-Id:", 'SUBID_ADDED' => "Hinzugefügt:", diff --git a/inc/libs/doubler_functions.php b/inc/libs/doubler_functions.php index 4d8b7cf5c8..fc13a2f44c 100644 --- a/inc/libs/doubler_functions.php +++ b/inc/libs/doubler_functions.php @@ -133,7 +133,7 @@ function getDoublerTotalPointsLeft() { if (getConfig('doubler_own') == 'Y') { // Take points from doubler's own account - $points += getConfig('doubler_points') - getConfig('doubler_used'); + $points += getDoublerPoints() - getConfig('doubler_used'); } // END - if if ((getConfig('doubler_jackpot') == 'Y') && (isExtensionActive('jackpot'))) { @@ -143,9 +143,9 @@ function getDoublerTotalPointsLeft() { if (!empty($jackpot)) $points += $jackpot; } // END - if - if (isValidUserId(getConfig('doubler_userid'))) { + if (isValidUserId(getDoublerUserid())) { // Get user's points - $user = getTotalPoints(getConfig('doubler_userid')); + $user = getTotalPoints(getDoublerUserid()); $points += $user; } // END - if diff --git a/inc/libs/user_functions.php b/inc/libs/user_functions.php index 189f3f782f..64e03f1a5c 100644 --- a/inc/libs/user_functions.php +++ b/inc/libs/user_functions.php @@ -1169,5 +1169,41 @@ function getTesterUserEmail () { return $GLOBALS[__FUNCTION__]; } +// Getter for 'ap_subids' config entry +function getApSubids () { + // Is there cache? + if (!isset($GLOBALS[__FUNCTION__])) { + // Determine it + $GLOBALS[__FUNCTION__] = getConfig('ap_subids'); + } // END - if + + // Return cache + return $GLOBALS[__FUNCTION__]; +} + +// Determines whether 'ap_subids' is set to 'Y' +function isApSubidsEnabled () { + // Is there cache? + if (!isset($GLOBALS[__FUNCTION__])) { + // Determine it + $GLOBALS[__FUNCTION__] = (getApSubids() == 'Y'); + } // END - if + + // Return cache + return $GLOBALS[__FUNCTION__]; +} + +// Getter for 'ap_subids_since' config entry +function getApSubidsSince () { + // Is there cache? + if (!isset($GLOBALS[__FUNCTION__])) { + // Determine it + $GLOBALS[__FUNCTION__] = getConfig('ap_subids_since'); + } // END - if + + // Return cache + return $GLOBALS[__FUNCTION__]; +} + // [EOF] ?> diff --git a/inc/mails/doubler_mails.php b/inc/mails/doubler_mails.php index 6babb35b18..e1620270bb 100644 --- a/inc/mails/doubler_mails.php +++ b/inc/mails/doubler_mails.php @@ -148,10 +148,10 @@ if (((!SQL_HASZERONUMS($result_total)) && (getConfig('doubler_sent_all') == 'Y') } // Exclude webmaster from doubling... - if ($content['userid'] != getConfig('doubler_userid')) { + if ($content['userid'] != getDoublerUserid()) { // Add points initReferralSystem(); - addPointsThroughReferralSystem(sprintf("doubler_%s", strtolower(getConfig('doubler_send_mode'))), $content['userid'], $content['points']); + addPointsThroughReferralSystem(sprintf("doubler_%s", strtolower(getDoublerSendMode())), $content['userid'], $content['points']); } // END - if // Set entry as "payed" @@ -168,9 +168,9 @@ if (((!SQL_HASZERONUMS($result_total)) && (getConfig('doubler_sent_all') == 'Y') } // END - if // Exclude also webmaster's id in taking points from webmaster's account - if (($userPoints > 0) && ($userPoints >= $content['points']) && ($okay === FALSE) && (getConfig('doubler_userid') > 0) && ($content['userid'] != getConfig('doubler_userid'))) { + if (($userPoints > 0) && ($userPoints >= $content['points']) && ($okay === FALSE) && (getDoublerUserid() > 0) && ($content['userid'] != getDoublerUserid())) { // Subtract points - $okay = subtractPoints('doubler_payout', getConfig('doubler_userid'), $content['points']); + $okay = subtractPoints('doubler_payout', getDoublerUserid(), $content['points']); } // END - if // Update doubler's account only when others are not updated diff --git a/inc/modules/admin/what-config_autopurge.php b/inc/modules/admin/what-config_autopurge.php index 0beaf4ddbb..c06ffecd89 100644 --- a/inc/modules/admin/what-config_autopurge.php +++ b/inc/modules/admin/what-config_autopurge.php @@ -60,11 +60,12 @@ if (isFormSent()) { $content['ap_notify_del_mails'] = addSelectionBox('yn', getConfig('ap_dm_notify') , 'ap_dm_notify'); // Output time selection boxes - $content['ap_in_since'] = createConfigurationTimeSelections('ap_inactive_since' , 'MWDh'); - $content['ap_in_time'] = createConfigurationTimeSelections('ap_inactive_time' , 'MWDh'); - $content['ap_un_time'] = createConfigurationTimeSelections('ap_unconfirmed_time', 'MWDh'); - $content['ap_task_time'] = createConfigurationTimeSelections('ap_tasks_time' , 'MWDh'); - $content['ap_del_mails_time'] = createConfigurationTimeSelections('ap_dm_timeout' , 'MWDh'); + $content['ap_in_since'] = createConfigurationTimeSelections('ap_inactive_since' , 'MWDh'); + $content['ap_in_time'] = createConfigurationTimeSelections('ap_inactive_time' , 'MWDh'); + $content['ap_un_time'] = createConfigurationTimeSelections('ap_unconfirmed_time' , 'MWDh'); + $content['ap_task_time'] = createConfigurationTimeSelections('ap_tasks_time' , 'MWDh'); + $content['ap_del_mails_time'] = createConfigurationTimeSelections('ap_dm_timeout' , 'MWDh'); + $content['ap_server_name_since'] = createConfigurationTimeSelections('ap_server_name_since', 'MWDh'); // Mail confirmation links $content['auto_purge'] = createConfigurationTimeSelections('auto_purge', 'MWD'); diff --git a/inc/modules/admin/what-config_doubler.php b/inc/modules/admin/what-config_doubler.php index ae143e0142..fee6cfea01 100644 --- a/inc/modules/admin/what-config_doubler.php +++ b/inc/modules/admin/what-config_doubler.php @@ -61,7 +61,7 @@ if (isFormSent()) { } // END - foreach // Transfer options - $content['doubler_userid'] = addMemberSelectionBox(getConfig('doubler_userid'), FALSE, TRUE, TRUE, 'doubler_userid'); + $content['doubler_userid'] = addMemberSelectionBox(getDoublerUserid(), FALSE, TRUE, TRUE, 'doubler_userid'); // Number of rows to display (option lines!!!) foreach (array('new','pay','old') as $entry) { diff --git a/inc/modules/admin/what-config_user_subid.php b/inc/modules/admin/what-config_user_subid.php new file mode 100644 index 0000000000..bcc6051844 --- /dev/null +++ b/inc/modules/admin/what-config_user_subid.php @@ -0,0 +1,58 @@ + diff --git a/inc/modules/member/what-doubler.php b/inc/modules/member/what-doubler.php index 3e25234b8b..6e0f92faaa 100644 --- a/inc/modules/member/what-doubler.php +++ b/inc/modules/member/what-doubler.php @@ -51,7 +51,7 @@ if ((!isExtensionActive('doubler')) && (!isAdmin())) { } // END - if // Which mail-send-mode did the admin setup? -$content['payout_time'] = '{--DOUBLER_PAYOUT_TIME_' . getConfig('doubler_send_mode') . '--}'; +$content['payout_time'] = '{--DOUBLER_PAYOUT_TIME_' . getDoublerSendMode() . '--}'; // Generate table with already payed out doubles $content['payout_history'] = generateDoublerTable(getMemberId(), 'Y', 'N', 'DESC'); diff --git a/inc/wrapper-functions.php b/inc/wrapper-functions.php index da71a257df..65ac9da294 100644 --- a/inc/wrapper-functions.php +++ b/inc/wrapper-functions.php @@ -2474,6 +2474,42 @@ function isDisplayHomeInIndexEnabled () { return $GLOBALS[__FUNCTION__]; } +// Getter for 'ap_server_name_since' +function getApServerNameSince () { + // Is the cache entry set? + if (!isset($GLOBALS[__FUNCTION__])) { + // No, so determine it + $GLOBALS[__FUNCTION__] = getConfig('ap_server_name_since'); + } // END - if + + // Return cached entry + return $GLOBALS[__FUNCTION__]; +} + +// Getter for 'ap_server_name' +function getApServerName () { + // Is the cache entry set? + if (!isset($GLOBALS[__FUNCTION__])) { + // No, so determine it + $GLOBALS[__FUNCTION__] = getConfig('ap_server_name'); + } // END - if + + // Return cached entry + return $GLOBALS[__FUNCTION__]; +} + +// Checks whether 'ap_server_name' is 'Y' +function isApServerNameEnabled () { + // Is the cache entry set? + if (!isset($GLOBALS[__FUNCTION__])) { + // No, so determine it + $GLOBALS[__FUNCTION__] = (getApServerName() == 'Y'); + } // END - if + + // Return cached entry + return $GLOBALS[__FUNCTION__]; +} + // Getter for 'admin_menu_javascript' function getAdminMenuJavascript () { // Is the cache entry set? diff --git a/templates/de/emails/admin/admin_purge_user_server_name_log.tpl b/templates/de/emails/admin/admin_purge_user_server_name_log.tpl new file mode 100644 index 0000000000..6d0a1013ae --- /dev/null +++ b/templates/de/emails/admin/admin_purge_user_server_name_log.tpl @@ -0,0 +1,8 @@ +Hallo Administrator, + +es wurden soeben {%pipe,translateComma=$content%} Logbucheinträge aus der Tabelle {?_MYSQL_PREFIX?}_server_name_log bereinigt, die mehr als {%config,createFancyTime=ap_server_name_since%} noch gespeichert waren. + +Mit freundlichen Grüßen, + Ihr {?MAIN_TITLE?} Script + +{?URL?}/admin.php diff --git a/templates/de/emails/admin/admin_purge_user_subid_log.tpl b/templates/de/emails/admin/admin_purge_user_subid_log.tpl new file mode 100644 index 0000000000..c42ed927d4 --- /dev/null +++ b/templates/de/emails/admin/admin_purge_user_subid_log.tpl @@ -0,0 +1,8 @@ +Hallo Administrator, + +es wurden soeben {%pipe,translateComma=$content%} Logbucheinträge aus der Tabelle {?_MYSQL_PREFIX?}_subid_log bereinigt, die mehr als {%config,createFancyTime=ap_subids_since%} noch gespeichert waren. + +Mit freundlichen Grüßen, + Ihr {?MAIN_TITLE?} Script + +{?URL?}/admin.php diff --git a/templates/de/html/admin/admin_config_autopurge.tpl b/templates/de/html/admin/admin_config_autopurge.tpl index f7d6778271..3850941828 100644 --- a/templates/de/html/admin/admin_config_autopurge.tpl +++ b/templates/de/html/admin/admin_config_autopurge.tpl @@ -6,7 +6,7 @@
- {--ADMIN_CONFIG_AUTOPURGE_INACTIVE_TITLE--} + {--ADMIN_CONFIG_AUTOPURGE_INACTIVE_LEGEND--}
@@ -25,7 +25,7 @@
- {--ADMIN_CONFIG_AUTOPURGE_UNCONFIRMED_TITLE--} + {--ADMIN_CONFIG_AUTOPURGE_UNCONFIRMED_LEGEND--}
@@ -33,13 +33,13 @@
- +
$content[ap_un_time]
- {--ADMIN_CONFIG_AUTOPURGE_TASKS_TITLE--} + {--ADMIN_CONFIG_AUTOPURGE_TASKS_LEGEND--}
@@ -53,7 +53,7 @@
- {--ADMIN_CONFIG_AUTOPURGE_MAILID_TITLE--} + {--ADMIN_CONFIG_AUTOPURGE_MAILID_LEGEND--}
@@ -72,7 +72,7 @@
- {--ADMIN_CONFIG_AUTOPURGE_DELETE_MAILS_TITLE--} + {--ADMIN_CONFIG_AUTOPURGE_DELETE_MAILS_LEGEND--}
@@ -85,8 +85,22 @@
+
+ {--ADMIN_CONFIG_AUTOPURGE_SERVER_NAME_LOG_LEGEND--} + +
+ +
{%template,ConfigurationYesNoSelectionBox=ap_server_name%}
+
+ +
+ +
$content[ap_server_name_since]
+
+
+
- {--ADMIN_CONFIG_AUTOPURGE_NOTIFICATION_TITLE--} + {--ADMIN_CONFIG_AUTOPURGE_NOTIFICATION_LEGEND--}
diff --git a/templates/de/html/admin/admin_config_user_subid.tpl b/templates/de/html/admin/admin_config_user_subid.tpl new file mode 100644 index 0000000000..fac41130ec --- /dev/null +++ b/templates/de/html/admin/admin_config_user_subid.tpl @@ -0,0 +1,32 @@ +
+{%form,formMethodPost=modules.php?module=admin&what=config_user_subid%} +
+
+ {--ADMIN_CONFIG_USER_SUBID_TITLE--} +
+ +
+ {--ADMIN_CONFIG_USER_SUBID_AUTOPURGE_LEGEND--} + +
+ +
+ {%template,ConfigurationYesNoSelectionBox=ap_subids%} +
+
+ +
+ +
+ $content[ap_subids_since] +
+
+
+ + +
+{%form_close%} +