Flarum: Faithfully reproduce post replies
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 17 Jun 2022 08:08:12 +0000 (10:08 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 17 Jun 2022 08:08:12 +0000 (10:08 +0200)
Flarum supports a mention with an attached Post ID to indicate a reply. This
pattern does not directly translate into WoltLab Suite, without creating very
odd-looking posts. Import those as a simple link with an arrow as the link
text.

files/lib/system/exporter/Flarum1xExporter.class.php

index 23861dfbcb9b43e7fc5b835df4f0683fa057a5e6..b703a4350c66b5a6a2e3b0b456014cbe1112fbb9 100644 (file)
@@ -8,6 +8,7 @@ use wcf\data\object\type\ObjectTypeCache;
 use wcf\data\user\group\UserGroup;
 use wcf\system\database\util\PreparedStatementConditionBuilder;
 use wcf\system\importer\ImportHandler;
+use wcf\system\request\LinkHandler;
 use wcf\system\WCF;
 use wcf\util\ArrayUtil;
 use wcf\util\UserRegistrationUtil;
@@ -730,6 +731,24 @@ final class Flarum1xExporter extends AbstractExporter
 
         $message = \preg_replace("/\r?\n/", '  \\0', $message);
 
+        $message = \preg_replace_callback('/@"([^"]+)"#p([0-9]+)/', static function (array $matches): string {
+            $username = $matches[1];
+            $postID = $matches[2];
+
+            $postLink = LinkHandler::getInstance()->getLink('Thread', [
+                'application' => 'wbb',
+                'postID' => $postID,
+                'forceFrontend' => true,
+            ]) . '#post' . $postID;
+
+            return \sprintf(
+                "[%s](%s) @'%s'",
+                "\u{21A9}",
+                $postLink,
+                \str_replace("'", "''", $username)
+            );
+        }, $message);
+
         $out = $parsedown->text($message);
 
         $out = \preg_replace(