I've been thinking for a while now that rule #32 violations (unnecessary consecutive posts) are handled pretty poorly... As I understand it, when posts like that are reported and moderators merge them together, the author gets notified that one (or more) of their posts were deleted, but they're not given a specific reason why, so they're unlikely to learn anything from the interaction. I remember when I had an early post of mine deleted by a moderator, it was a pretty confusing/deflating experience, and I was kind of left guessing at what was wrong with my post... I think that especially when it's for something that amounts to a very minor posting misbehavior, being left to figure out on your own what you did wrong is even worse. In fact, in this case, I think overzealous reporting might actually do more harm than good (that is, it's probably counterproductive in terms of the forum's health: for minor violations, the benefit of having a superficially cleaner forum is probably more than matched by the damage caused in making this place feel inhospitable).
Long-term, I'll make a patch to let moderators leave an optional reason for post deletion, which will hopefully make the general being-moderated experience less confusing/deflating (especially for newbies), but, for now, all I really have in mind are rule #32 violations (because I've been reporting quite a few of those lately, and I'm starting to feel like a douchecanoe for doing that, especially when you consider what I said in the previous paragraph). I think adding a
warning against consecutive posts is a good thing to do (both to hopefully curb multi-posting, and to maybe reduce moderation busywork, along with providing users with at least
some context for when they get notified that their posts are getting deleted/merged: after all, if they've been seeing and ignoring warnings given to them before they post, then they'll probably be able to correctly guess at what they've been doing wrong).
So, this patch adds the following warning when you're about to add another post to a topic that you're already the latest, recent (<24 hours) poster in:
(There's even a handy dandy link that takes you directly to the appropriate "Edit message" page.)
Here are the diffs for @theymos:
--- baseline/Sources/Post.php 2011-02-07 16:45:09.000000000 +0000
+++ modified/Sources/Post.php 2024-05-12 23:43:54.000000000 +0000
@@ -1080,24 +1080,40 @@
));
if (!empty($topic))
getTopic();
$context['back_to_topic'] = isset($_REQUEST['goback']) || (isset($_REQUEST['msg']) && !isset($_REQUEST['subject']));
$context['show_additional_options'] = !empty($_POST['additional_options']) || !empty($_SESSION['temp_attachments']) || !empty($deleted_attachments);
$context['is_new_topic'] = empty($topic);
$context['is_new_post'] = !isset($_REQUEST['msg']);
$context['is_first_post'] = $context['is_new_topic'] || (isset($_REQUEST['msg']) && $_REQUEST['msg'] == $ID_FIRST_MSG);
+ // Add a warning against consecutive posts. This logic is placed where it is (near the end of this function) mostly because it expects getTopic() to have already been called (when applicable).
+ if (isset($context['previous_posts']) && count($context['previous_posts']) > 0)
+ {
+ $previous_post = $context['previous_posts'][0];
+ $is_consecutive_post = $context['is_new_post'] && $previous_post['poster'] == $context['user']['name'];
+ $is_previous_post_recent = time() - $previous_post['timestamp'] < 86400;
+ $no_serious_error = empty($context['error_type']) || $context['error_type'] != 'serious';
+
+ if ($is_consecutive_post && $is_previous_post_recent && $no_serious_error)
+ {
+ $edit_post_url = $scripturl . '?action=post;msg=' . $previous_post['id'] . ';topic=' . $topic . '.0;sesc=' . $sc;
+ $context['post_error']['messages'][] = sprintf($txt['error_consecutive_post'], $edit_post_url);
+ $context['error_type'] = 'minor';
+ }
+ }
+
// Register this form in the session variables.
checkSubmitOnce('register');
// Finally, load the template.
if (WIRELESS)
$context['sub_template'] = WIRELESS_PROTOCOL . '_post';
elseif (!isset($_REQUEST['xml']))
loadTemplate('Post');
}
function Post2()
{
--- baseline/Themes/default/languages/Post.english.php
2011-02-07 16:45:09.000000000 +0000
+++ modified/Themes/default/languages/Post.english.php
2024-05-12 23:47:12.000000000 +0000
@@ -148,10 +148,11 @@
$txt['error_new_reply'] = 'Warning - while you were typing a new reply has been posted. You may wish to review your post.';
$txt['error_new_replies'] = 'Warning - while you were typing %d new replies have been posted. You may wish to review your post.';
$txt['error_new_reply_reading'] = 'Warning - while you were reading a new reply has been posted. You may wish to review your post.';
$txt['error_new_replies_reading'] = 'Warning - while you were reading %d new replies have been posted. You may wish to review your post.';
$txt['error_old_topic'] = 'Warning: this topic has not been posted in for at least ' . $modSettings['oldTopicDays'] . ' days.
Unless you\'re sure you want to reply, please consider starting a new topic.';
+$txt['error_consecutive_post'] = 'Warning: a recent post of yours is already the latest one in this topic.
Unless you\'re sure that a new post is necessary, please
add to your recent post instead.';
// Use numeric entities in the below sixteen strings.
$txt['notification_reply_subject'] = 'Topic reply: %s';
$txt['notification_reply'] = 'A reply has been posted to a topic you are watching by %s.' . "\n\n" . 'View the reply at: ';
$txt['notification_sticky_subject'] = 'Topic stickied: %s';