Commit 1cc56572 authored by Patrick Schmalstig's avatar Patrick Schmalstig
Browse files

Fixed MANTIS-5955 (Many fixes and improvements to List-Unsubscribe)

parent dad0fc46
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ class Module_admin_version
            'comcode_pages',
            'cached_comcode_pages',
            'email_bounces',
            'unsubscribed_emails',
            'sitemap_cache',
            'urls_checked',
            'content_regions',
@@ -1240,6 +1241,14 @@ class Module_admin_version

        if (($upgrade_from === null) || ($upgrade_from < 20)) {
            $GLOBALS['SITE_DB']->create_index('logged_mail_messages', 'm_as_member', ['m_as_member']);

            $GLOBALS['SITE_DB']->create_table('unsubscribed_emails', [
                'id' => '*AUTO',
                'b_email_address' => 'SHORT_TEXT',
                'b_time' => 'TIME',
            ]);
            $GLOBALS['SITE_DB']->create_index('unsubscribed_emails', 'b_email_address', ['b_email_address']);
            $GLOBALS['SITE_DB']->create_index('unsubscribed_emails', 'b_time', ['b_time']);
        }
    }

data/unsubscribe.php

0 → 100644
+58 −0
Original line number Diff line number Diff line
<?php /*

 Composr
 Copyright (c) Christopher Graham, 2004-2024

 See docs/LICENSE.md for full licensing information.


 NOTE TO PROGRAMMERS:
   Do not edit this file. If you need to make changes, save your changed file to the appropriate *_custom folder
   **** If you ignore this advice, then your website upgrades (e.g. for bug fixes) will likely kill your changes ****

*/

/**
 * @license    http://opensource.org/licenses/cpal_1.0 Common Public Attribution License
 * @copyright  Christopher Graham
 * @package    core
 */

// Fixup SCRIPT_FILENAME potentially being missing
$_SERVER['SCRIPT_FILENAME'] = __FILE__;

// Find Composr base directory, and chdir into it
global $FILE_BASE, $RELATIVE_PATH;
$FILE_BASE = (strpos(__FILE__, './') === false) ? __FILE__ : realpath(__FILE__);
$FILE_BASE = dirname($FILE_BASE);
if (!is_file($FILE_BASE . '/sources/global.php')) {
    $RELATIVE_PATH = basename($FILE_BASE);
    $FILE_BASE = dirname($FILE_BASE);
} else {
    $RELATIVE_PATH = '';
}
if (!is_file($FILE_BASE . '/sources/global.php')) {
    $FILE_BASE = $_SERVER['SCRIPT_FILENAME']; // this is with symlinks-unresolved (__FILE__ has them resolved); we need as we may want to allow zones to be symlinked into the base directory without getting path-resolved
    $FILE_BASE = dirname($FILE_BASE);
    if (!is_file($FILE_BASE . '/sources/global.php')) {
        $RELATIVE_PATH = basename($FILE_BASE);
        $FILE_BASE = dirname($FILE_BASE);
    } else {
        $RELATIVE_PATH = '';
    }
}
@chdir($FILE_BASE);

global $FORCE_INVISIBLE_GUEST;
$FORCE_INVISIBLE_GUEST = false;
global $EXTERNAL_CALL;
$EXTERNAL_CALL = false;
global $CSRF_TOKENS;
$CSRF_TOKENS = false;
if (!is_file($FILE_BASE . '/sources/global.php')) {
    exit('<!DOCTYPE html>' . "\n" . '<html lang="EN"><head><title>Critical startup error</title></head><body><h1>Composr startup error</h1><p>The second most basic Composr startup file, sources/global.php, could not be located. This is almost always due to an incomplete upload of the Composr system, so please check all files are uploaded correctly.</p><p>Once all Composr files are in place, Composr must actually be installed by running the installer. You must be seeing this message either because your system has become corrupt since installation, or because you have uploaded some but not all files from our manual installer package: the quick installer is easier, so you might consider using that instead.</p><p>The core developers maintain full documentation for all procedures and tools, especially those for installation. These may be found on the <a href="https://composr.app">Composr website</a>. If you are unable to easily solve this problem, we may be contacted from our website and can help resolve it for you.</p><hr /><p style="font-size: 0.8em">Composr is a website engine created by Christopher Graham.</p></body></html>');
}
require($FILE_BASE . '/sources/global.php');

require_code('misc_scripts');
unsubscribe_script();
+1 −0
Original line number Diff line number Diff line
@@ -842,6 +842,7 @@ DESCRIPTION_PRIVACY_ACCOUNT_FORUMS=Handle data pertaining to your member account
SILENCED_FROM_TOPIC=You are silenced from this topic (or its forum) and cannot make a post in it at this time.
SILENCED_FROM_FORUM=You are silenced from this forum and cannot make a topic in it at this time.
_MEMBER_BANNED=The requested member has been banned from the site.
CANNOT_RECEIVE_MAIL_MEMBER=You are not receiving e-mails from our site.<br /><ul><li>If you do not have an e-mail address set, please set one to receive e-mails.</li><li>If you unsubscribed from e-mails through your mail client (e.g. you clicked unsubscribe), then you will not receive e-mails at the configured address anymore. Please change your e-mail address if you want to receive e-mails again.</li><li>Otherwise, the likely cause is we received a bounce-back in the last 8 weeks. Double-check you typed your e-mail address correctly. It may be your mail domain or server is faulty or is blocking our site. Try an e-mail address from a different domain.</li></ul>

SMART_TOPIC_NOTIFICATION=Smart topic notification
DESCRIPTION_SMART_TOPIC_NOTIFICATION=Only send one new-post notification for a topic up until you've viewed it again.
+3 −1
Original line number Diff line number Diff line
@@ -752,7 +752,9 @@ CONFIG_OPTION_spam_heuristic_user_agents=A comma-separated list of suspicious us
SEPARATE_BLOGS=Separate blogs
CONFIG_OPTION_separate_blogs=Whether a separate CMS blogs module should be provided. This is a stripped down version of the CMS news module, designed for creation of simple blog posts tied to a member's own blog.
LIST_UNSUBSCRIBE_TARGET=List-Unsubscribe target
CONFIG_OPTION_list_unsubscribe_target=Set to a URL for a <kbd>List-Unsubscribe</kbd> header to be attached to e-mails with that URL, e.g. <kbd>mailto:you@example.com?subject=Unsubscribe&body=Please%20unsubscribe%20me</kbd>. You should of course then make sure said URL functions properly. If it is a <kbd>mailto</kbd> URL then this implies you'll manually listen on this URL and deactivate member accounts (for example) if people complain.
CONFIG_OPTION_list_unsubscribe_target=Set to a URL for a <kbd>List-Unsubscribe</kbd> header to be attached to e-mails with that URL. You should of course then make sure said URL functions properly. It is not recommended changing this from the default unless you want to use the <kbd>mailto</kbd> method or if you use something other than the software for sending out e-mails. <br /><br />If this is a <kbd>mailto</kbd> URL then this implies you'll manually listen on this URL and promptly deactivate member accounts (for example) if people complain. <br /><br />Note that some mail clients do not accept the <kbd>mailto</kbd> List-Unsubscribe method as they expect unsubscribing yields immediate action. <br /><br />Set to '1' to use the software's built-in List-Unsubscribe URL.
LIST_UNSUBSCRIBE_POST=List-Unsubscribe POST data
CONFIG_OPTION_list_unsubscribe_post=If your List-Unsubscribe target is a URL that requires POST data, include the post data here (e.g. key=value&key2=value2). Make sure the values are properly URL-encoded. Note that <kbd>email_address</kbd> is passed in automatically. Also note this is ignored if List-Unsubscribe target is set to '1'.
MAX_QUEUED_MAILS_PER_CRON_CYCLE=Maximum e-mails to send per scheduler cycle
CONFIG_OPTION_max_queued_mails_per_cron_cycle=The maximum e-mails to send per system scheduler cycle. You may want to reduce this if you have a low limit on the number of e-mails you can send.
STAFF_EMAIL_ADDRESSES=E-mail addresses for staff
+1 −0
Original line number Diff line number Diff line
@@ -353,6 +353,7 @@ _MISSING_PUBLIC_KEY=The public key for version {1} of the software (<kbd>data_cu
_CORRUPT_PUBLIC_KEY=The public key for version {1} of the software (<kbd>data_custom/keys/telemetry-{1}.pub</kbd>) is corrupt.
INVALID_TELEMETRY_DATA=Invalid telemetry data passed for decryption.
INTEGER_OVERFLOW_TIME=An integer overflow was encountered with a provided date/time. The date/time was changed to the maximum supported value.
COULD_NOT_UNSUBSCRIBE=Could not unsubscribe you; the provided checksum is invalid. If this is an error, please contact the site staff to manually unsubscribe you.

HTTP_REDIRECT_PROBLEM=A problem has been detected with your web server (HTTP code of &ldquo;{3}&rdquo;) that may cause your forms to fail. Some servers are poorly configured, and invisibly redirect traffic from one URL to another, and this invisible redirection results in lost submitted form data. Try changing your base URL{1} so that it {2}.
_WITH_WWW=doesn't contain &ldquo;<kbd>www.</kbd>&rdquo;
Loading