use Exception;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Cache\Enum\Duration;
-use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\DI;
+use Friendica\Event\ArrayFilterEvent;
use Friendica\Network\HTTPClient\Client\HttpClientAccept;
use Friendica\Network\HTTPClient\Client\HttpClientOptions;
use Friendica\Network\HTTPClient\Client\HttpClientRequest;
$oembed->thumbnail_height = $data['images'][0]['height'];
}
- Hook::callAll('oembed_fetch_url', $embedurl);
+ $eventDispatcher = DI::eventDispatcher();
- return $oembed;
+ $oembed_data = ['url' => $embedurl];
+
+ $oembed_data = $eventDispatcher->dispatch(
+ new ArrayFilterEvent(ArrayFilterEvent::OEMBED_FETCH_END, $oembed_data),
+ )->getArray();
+
+ return $oembed_data['url'] ?? $embedurl;
}
/**
ArrayFilterEvent::DISPLAY_ITEM => 'display_item',
ArrayFilterEvent::RENDER_LOCATION => 'render_location',
ArrayFilterEvent::ITEM_PHOTO_MENU => 'item_photo_menu',
+ ArrayFilterEvent::OEMBED_FETCH_END => 'oembed_fetch_url',
HtmlFilterEvent::HEAD => 'head',
HtmlFilterEvent::FOOTER => 'footer',
HtmlFilterEvent::PAGE_HEADER => 'page_header',
ArrayFilterEvent::DISPLAY_ITEM => 'onArrayFilterEvent',
ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent',
ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent',
+ ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent',
HtmlFilterEvent::HEAD => 'onHtmlFilterEvent',
HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent',
HtmlFilterEvent::PAGE_HEADER => 'onHtmlFilterEvent',
);
}
+ /**
+ * Map the OEMBED_FETCH_END event to `oembed_fetch_url` hook
+ */
+ public static function onOembedFetchEndEvent(ArrayFilterEvent $event): void
+ {
+ $data = $event->getArray();
+
+ $url = (string) $data['url'] ?? '';
+
+ $data['url'] = static::callHook($event->getName(), $url);
+
+ $event->setArray($data);
+ }
+
public static function onArrayFilterEvent(ArrayFilterEvent $event): void
{
$event->setArray(
public const ITEM_PHOTO_MENU = 'friendica.data.item_photo_menu';
+ public const OEMBED_FETCH_END = 'friendica.data.oembed_fetch_end';
+
private array $array;
public function __construct(string $name, array $array)
ArrayFilterEvent::DISPLAY_ITEM => 'onArrayFilterEvent',
ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent',
ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent',
+ ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent',
HtmlFilterEvent::HEAD => 'onHtmlFilterEvent',
HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent',
HtmlFilterEvent::PAGE_HEADER => 'onHtmlFilterEvent',
HookEventBridge::onCollectRoutesEvent($event);
}
+ public function testOnOembedFetchEndEventCallsHookWithCorrectValue(): void
+ {
+ $event = new ArrayFilterEvent(ArrayFilterEvent::OEMBED_FETCH_END, ['url' => 'original_url']);
+
+ $reflectionProperty = new \ReflectionProperty(HookEventBridge::class, 'mockedCallHook');
+ $reflectionProperty->setAccessible(true);
+
+ $reflectionProperty->setValue(null, function (string $name, $data): string {
+ $this->assertSame('oembed_fetch_url', $name);
+ $this->assertSame('original_url', $data);
+
+ return 'changed_url';
+ });
+
+ HookEventBridge::onOembedFetchEndEvent($event);
+
+ $this->assertSame(
+ ['url' => 'changed_url'],
+ $event->getArray(),
+ );
+ }
+
public static function getArrayFilterEventData(): array
{
return [
[ArrayFilterEvent::DISPLAY_ITEM, 'friendica.data.display_item'],
[ArrayFilterEvent::RENDER_LOCATION, 'friendica.data.render_location'],
[ArrayFilterEvent::ITEM_PHOTO_MENU, 'friendica.data.item_photo_menu'],
+ [ArrayFilterEvent::OEMBED_FETCH_END, 'friendica.data.oembed_fetch_end'],
];
}