}
}
} 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);
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;
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>",
$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);
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',
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',
$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
*/
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;
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',
);
}
+ 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]']);