From d8d658a7caf033022cc9beff7d7fdf92c98ebc64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Ca=C5=82ka?= <25438601+rafaucau@users.noreply.github.com> Date: Wed, 17 Jun 2026 00:32:58 +0200 Subject: [PATCH 1/3] feat: add auto-merge divider option --- extend.php | 1 + .../admin/components/FilterSettingsPage.tsx | 6 ++++++ resources/locale/en.yml | 5 +++++ src/Handler/AutoMergePostReplyHandler.php | 20 ++++++++++++++++--- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/extend.php b/extend.php index d715e0e..1eb1dbf 100644 --- a/extend.php +++ b/extend.php @@ -46,6 +46,7 @@ (new Extend\Settings()) ->default('fof-filter.autoDeletePosts', false) ->default('fof-filter.autoMergePosts', false) + ->default('fof-filter.autoMergeDivider', false) ->default('fof-filter.cooldown', 15) ->default('fof-filter.emailWhenFlagged', false), ]; diff --git a/js/src/admin/components/FilterSettingsPage.tsx b/js/src/admin/components/FilterSettingsPage.tsx index 69deae5..126e436 100644 --- a/js/src/admin/components/FilterSettingsPage.tsx +++ b/js/src/admin/components/FilterSettingsPage.tsx @@ -40,6 +40,12 @@ export default class FilterSettingsPage extends ExtensionPage { help: app.translator.trans('fof-filter.admin.help2'), min: 0, })} + {this.buildSettingComponent({ + type: 'boolean', + setting: 'fof-filter.autoMergeDivider', + label: app.translator.trans('fof-filter.admin.input.switch.merge_divider'), + help: app.translator.trans('fof-filter.admin.merge_divider_help'), + })}

{app.translator.trans('fof-filter.admin.input.email_label')}

{app.translator.trans('fof-filter.admin.input.email_help')}

diff --git a/resources/locale/en.yml b/resources/locale/en.yml index 5711417..ef35681 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -12,6 +12,7 @@ fof-filter: countLabel: Censor Tolorance cooldownLabel: Merge Post Cooldown auto_merge_title: Auto merge + merge_divider_help: A divider will be inserted between the existing post content and the newly merged content. input: placeholder: Strings to be filtered filter_title: Strings to filter @@ -20,6 +21,7 @@ fof-filter: switch: email: Email user when post is filtered merge: Auto merge double posts + merge_divider: Add a divider when posts are automatically merged delete: Auto delete filtered posts email_subject: Subject email_body: Body @@ -38,3 +40,6 @@ fof-filter: If you believe this was an error, you are in luck, each removed post is reviewed by our moderators. If they find that this was wrongfully removed, they will restore it. Thank you for your understanding. + views: + auto_merged_divider: 'Posts merged automatically: {datetime}' + auto_merged_datetime_format: 'M j, Y, H:i' diff --git a/src/Handler/AutoMergePostReplyHandler.php b/src/Handler/AutoMergePostReplyHandler.php index 240567b..9160d6e 100644 --- a/src/Handler/AutoMergePostReplyHandler.php +++ b/src/Handler/AutoMergePostReplyHandler.php @@ -13,6 +13,7 @@ use Flarum\Discussion\DiscussionRepository; use Flarum\Foundation\DispatchEventsTrait; +use Flarum\Locale\Translator; use Flarum\Post\Command\PostReply; use Flarum\Post\Command\PostReplyHandler; use Flarum\Post\CommentPost; @@ -32,19 +33,22 @@ class AutoMergePostReplyHandler protected SettingsRepositoryInterface $settings; protected PostRepository $posts; protected DiscussionRepository $discussions; + protected Translator $translator; public function __construct( PostReplyHandler $original, SettingsRepositoryInterface $settings, PostRepository $posts, DiscussionRepository $discussions, - Dispatcher $events + Dispatcher $events, + Translator $translator ) { $this->original = $original; $this->settings = $settings; $this->posts = $posts; $this->discussions = $discussions; $this->events = $events; + $this->translator = $translator; } /** @@ -85,8 +89,18 @@ public function handle(PostReply $command): CommentPost $actor->assertCan('reply', $discussion); - $newContent = Arr::get($command->data, 'attributes.content', ''); - $mergedContent = $lastPost->content."\n\n".$newContent; + $parts = [$lastPost->content]; + + if ($this->settings->get('fof-filter.autoMergeDivider')) { + $label = $this->translator->trans( + 'fof-filter.views.auto_merged_divider', + ['{datetime}' => Carbon::now()->format( $this->translator->trans('fof-filter.views.auto_merged_datetime_format'))] + ); + $parts[] = "---\n\n_{$label}_\n\n---"; + } + + $parts[] = Arr::get($command->data, 'attributes.content', ''); + $mergedContent = implode("\n\n", $parts); $lastPost->revise($mergedContent, $actor); From e225e9c3e28d7cd2f0ba34cadab25e1e801da999 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Tue, 16 Jun 2026 22:33:19 +0000 Subject: [PATCH 2/3] Apply fixes from StyleCI [ci skip] [skip ci] --- src/Handler/AutoMergePostReplyHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Handler/AutoMergePostReplyHandler.php b/src/Handler/AutoMergePostReplyHandler.php index 9160d6e..4c7fb16 100644 --- a/src/Handler/AutoMergePostReplyHandler.php +++ b/src/Handler/AutoMergePostReplyHandler.php @@ -94,7 +94,7 @@ public function handle(PostReply $command): CommentPost if ($this->settings->get('fof-filter.autoMergeDivider')) { $label = $this->translator->trans( 'fof-filter.views.auto_merged_divider', - ['{datetime}' => Carbon::now()->format( $this->translator->trans('fof-filter.views.auto_merged_datetime_format'))] + ['{datetime}' => Carbon::now()->format($this->translator->trans('fof-filter.views.auto_merged_datetime_format'))] ); $parts[] = "---\n\n_{$label}_\n\n---"; } From 985a0c83a07551f85ab1d81a03b9dd34dd145f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Ca=C5=82ka?= <25438601+rafaucau@users.noreply.github.com> Date: Wed, 17 Jun 2026 00:53:29 +0200 Subject: [PATCH 3/3] fix: translate datetime --- src/Handler/AutoMergePostReplyHandler.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Handler/AutoMergePostReplyHandler.php b/src/Handler/AutoMergePostReplyHandler.php index 4c7fb16..4e19438 100644 --- a/src/Handler/AutoMergePostReplyHandler.php +++ b/src/Handler/AutoMergePostReplyHandler.php @@ -92,9 +92,13 @@ public function handle(PostReply $command): CommentPost $parts = [$lastPost->content]; if ($this->settings->get('fof-filter.autoMergeDivider')) { + $locale = $actor->getPreference('locale') + ?? $this->settings->get('default_locale') + ?? 'en'; + $label = $this->translator->trans( 'fof-filter.views.auto_merged_divider', - ['{datetime}' => Carbon::now()->format($this->translator->trans('fof-filter.views.auto_merged_datetime_format'))] + ['{datetime}' => Carbon::now()->locale($locale)->translatedFormat($this->translator->trans('fof-filter.views.auto_merged_datetime_format'))] ); $parts[] = "---\n\n_{$label}_\n\n---"; }