]> git.mxchange.org Git - friendica.git/commitdiff
Create event for html2bbcode hook
authorArt4 <art4@wlabs.de>
Mon, 17 Feb 2025 10:55:05 +0000 (10:55 +0000)
committerArt4 <art4@wlabs.de>
Mon, 17 Feb 2025 10:55:05 +0000 (10:55 +0000)
src/Content/OEmbed.php
src/Content/Text/HTML.php
src/Core/Hooks/HookEventBridge.php
src/Event/ArrayFilterEvent.php
tests/Unit/Core/Hooks/HookEventBridgeTest.php

index 93833630124fa74f26b3a77eba2945a82dd7557b..a42b8378822dc01f02536fb8804aa5dbe28e0a65 100644 (file)
@@ -282,11 +282,13 @@ class OEmbed
                                }
                        }
                } elseif (!strpos($oembed->html, $oembed->embed_url)) {
-                       // add <a> for html2bbcode conversion
+                       // add <a> for html to bbcode conversion
                        $ret .= '<a href="' . $oembed->embed_url . '" rel="oembed">' . $oembed->title . '</a>';
                }
 
                $ret .= '</div>';
+
+               // FIXME: Why is $test unused?
                $test = Proxy::proxifyHtml($ret, $uriid);
 
                return str_replace("\n", "", $ret);
index ba992e4a8fdada5b52a076c2b2e572475ee5bc70..dcec024cf05b5dadfe31a1c9688363606a436904 100644 (file)
@@ -10,10 +10,10 @@ namespace Friendica\Content\Text;
 use DOMDocument;
 use DOMXPath;
 use Friendica\Protocol\HTTP\MediaType;
-use Friendica\Core\Hook;
 use Friendica\Core\Renderer;
 use Friendica\Core\Search;
 use Friendica\DI;
+use Friendica\Event\ArrayFilterEvent;
 use Friendica\Model\Contact;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
@@ -141,7 +141,9 @@ class HTML
                DI::profiler()->startRecording('rendering');
                $message = str_replace("\r", "", $message);
 
-               $message = Strings::performWithEscapedBlocks($message, '#<pre><code.*</code></pre>#iUs', function ($message) {
+               $eventDispatcher = DI::eventDispatcher();
+
+               $message = Strings::performWithEscapedBlocks($message, '#<pre><code.*</code></pre>#iUs', function ($message) use($eventDispatcher) {
                        $message = str_replace(
                                [
                                        "<li><p>",
@@ -314,7 +316,13 @@ class HTML
                        $message = preg_replace('=\r *\r=i', "\n", $message);
                        $message = str_replace("\r", "\n", $message);
 
-                       Hook::callAll('html2bbcode', $message);
+                       $message_data = ['html2bbcode' => $message];
+
+                       $message_data = $eventDispatcher->dispatch(
+                               new ArrayFilterEvent(ArrayFilterEvent::HTML_TO_BBCODE_END, $message_data),
+                       )->getArray();
+
+                       $message = $message_data['html2bbcode'] ?? $message;
 
                        $message = strip_tags($message);
 
index 9b3265130e996f0feaf311fa3de650ff5a8cdccb..bc0615f368343af7c91fbf422ae946e3f519e056 100644 (file)
@@ -56,6 +56,7 @@ final class HookEventBridge
                ArrayFilterEvent::PAGE_INFO              => 'page_info_data',
                ArrayFilterEvent::SMILEY_LIST            => 'smilie',
                ArrayFilterEvent::BBCODE_TO_HTML_START   => 'bbcode',
+               ArrayFilterEvent::HTML_TO_BBCODE_END     => 'html2bbcode',
                ArrayFilterEvent::BBCODE_TO_MARKDOWN_END => 'bb2diaspora',
                HtmlFilterEvent::HEAD                    => 'head',
                HtmlFilterEvent::FOOTER                  => 'footer',
@@ -92,6 +93,7 @@ final class HookEventBridge
                        ArrayFilterEvent::PAGE_INFO              => 'onArrayFilterEvent',
                        ArrayFilterEvent::SMILEY_LIST            => 'onArrayFilterEvent',
                        ArrayFilterEvent::BBCODE_TO_HTML_START   => 'onBbcodeToHtmlEvent',
+                       ArrayFilterEvent::HTML_TO_BBCODE_END     => 'onHtmlToBbcodeEvent',
                        ArrayFilterEvent::BBCODE_TO_MARKDOWN_END => 'onBbcodeToMarkdownEvent',
                        HtmlFilterEvent::HEAD                    => 'onHtmlFilterEvent',
                        HtmlFilterEvent::FOOTER                  => 'onHtmlFilterEvent',
@@ -147,6 +149,20 @@ final class HookEventBridge
                $event->setArray($data);
        }
 
+       /**
+        * Map the HTML_TO_BBCODE_END event to `html2bbcode` hook
+        */
+       public static function onHtmlToBbcodeEvent(ArrayFilterEvent $event): void
+       {
+               $data = $event->getArray();
+
+               $html2bbcode = (string) $data['html2bbcode'] ?? '';
+
+               $data['html2bbcode'] = static::callHook($event->getName(), $html2bbcode);
+
+               $event->setArray($data);
+       }
+
        /**
         * Map the BBCODE_TO_MARKDOWN_END event to `bb2diaspora` hook
         */
index 2541940802692b4a15a11a23c9ca8ffb0e8d64ae..94cc07e874b670d0da1f63b4c980439ebcba80e7 100644 (file)
@@ -50,6 +50,8 @@ final class ArrayFilterEvent extends Event
 
        public const BBCODE_TO_HTML_START = 'friendica.data.bbcode_to_html_start';
 
+       public const HTML_TO_BBCODE_END = 'friendica.data.html_to_bbcode_end';
+
        public const BBCODE_TO_MARKDOWN_END = 'friendica.data.bbcode_to_markdown_end';
 
        private array $array;
index 9e76cebcf233f54a1b2e3d4fea332b1decadebf0..e7d7aba55e5957f652e5cef0edf81ba4ad8e5f7a 100644 (file)
@@ -45,6 +45,7 @@ class HookEventBridgeTest extends TestCase
                        ArrayFilterEvent::PAGE_INFO              => 'onArrayFilterEvent',
                        ArrayFilterEvent::SMILEY_LIST            => 'onArrayFilterEvent',
                        ArrayFilterEvent::BBCODE_TO_HTML_START   => 'onBbcodeToHtmlEvent',
+                       ArrayFilterEvent::HTML_TO_BBCODE_END     => 'onHtmlToBbcodeEvent',
                        ArrayFilterEvent::BBCODE_TO_MARKDOWN_END => 'onBbcodeToMarkdownEvent',
                        HtmlFilterEvent::HEAD                    => 'onHtmlFilterEvent',
                        HtmlFilterEvent::FOOTER                  => 'onHtmlFilterEvent',
@@ -205,6 +206,28 @@ class HookEventBridgeTest extends TestCase
                );
        }
 
+       public function testOnHtmlToBbcodeEventCallsHookWithCorrectValue(): void
+       {
+               $event = new ArrayFilterEvent(ArrayFilterEvent::HTML_TO_BBCODE_END, ['html2bbcode' => '<b>original</b>']);
+
+               $reflectionProperty = new \ReflectionProperty(HookEventBridge::class, 'mockedCallHook');
+               $reflectionProperty->setAccessible(true);
+
+               $reflectionProperty->setValue(null, function (string $name, string $data): string {
+                       $this->assertSame('html2bbcode', $name);
+                       $this->assertSame('<b>original</b>', $data);
+
+                       return '[b]changed[/b]';
+               });
+
+               HookEventBridge::onHtmlToBbcodeEvent($event);
+
+               $this->assertSame(
+                       ['html2bbcode' => '[b]changed[/b]'],
+                       $event->getArray(),
+               );
+       }
+
        public function testOnBbcodeToMarkdownEventCallsHookWithCorrectValue(): void
        {
                $event = new ArrayFilterEvent(ArrayFilterEvent::BBCODE_TO_MARKDOWN_END, ['bbcode2markdown' => '[b]original[/b]']);