$eventDispatcher = DI::eventDispatcher();
- $post = $eventDispatcher->dispatch(
- new ArrayFilterEvent(ArrayFilterEvent::INSERT_POST_LOCAL, $post)
+ $hook_data = [
+ 'item' => $post,
+ ];
+
+ $hook_data = $eventDispatcher->dispatch(
+ new ArrayFilterEvent(ArrayFilterEvent::INSERT_POST_LOCAL, $hook_data)
)->getArray();
+ $post = $hook_data['item'] ?? $post;
+
unset($post['edit']);
unset($post['self']);
unset($post['api_source']);
ArrayFilterEvent::FEATURE_ENABLED => 'onArrayFilterEvent',
ArrayFilterEvent::FEATURE_GET => 'onArrayFilterEvent',
ArrayFilterEvent::INSERT_POST_LOCAL_START => 'onArrayFilterEvent',
- ArrayFilterEvent::INSERT_POST_LOCAL => 'onArrayFilterEvent',
+ ArrayFilterEvent::INSERT_POST_LOCAL => 'onInsertPostLocalEvent',
ArrayFilterEvent::INSERT_POST_LOCAL_END => 'onArrayFilterEvent',
ArrayFilterEvent::INSERT_POST_REMOTE => 'onArrayFilterEvent',
ArrayFilterEvent::INSERT_POST_REMOTE_END => 'onArrayFilterEvent',
);
}
+ /**
+ * Map the INSERT_POST_LOCAL event to `post_local` hook
+ */
+ public static function onInsertPostLocalEvent(ArrayFilterEvent $event): void
+ {
+ $data = $event->getArray();
+
+ $item = (array) $data['item'] ?? [];
+
+ $data['item'] = static::callHook($event->getName(), $item);
+
+ $event->setArray($data);
+ }
+
/**
* Map the PREPARE_POST_START event to `prepare_body_init` hook
*/
$dummy_session = false;
}
- $item = $eventDispatcher->dispatch(
- new ArrayFilterEvent(ArrayFilterEvent::INSERT_POST_LOCAL, $item)
+ $hook_data = [
+ 'item' => $item,
+ ];
+
+ $hook_data = $eventDispatcher->dispatch(
+ new ArrayFilterEvent(ArrayFilterEvent::INSERT_POST_LOCAL, $hook_data)
)->getArray();
+ $item = $hook_data['item'] ?? $item;
+
if ($dummy_session) {
unset($_SESSION['authenticated']);
unset($_SESSION['uid']);
use Friendica\Content\Text\BBCode;
use Friendica\Content\Widget\ContactBlock;
use Friendica\Core\Cache\Enum\Duration;
-use Friendica\Core\Hook;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Search;
ArrayFilterEvent::FEATURE_ENABLED => 'onArrayFilterEvent',
ArrayFilterEvent::FEATURE_GET => 'onArrayFilterEvent',
ArrayFilterEvent::INSERT_POST_LOCAL_START => 'onArrayFilterEvent',
- ArrayFilterEvent::INSERT_POST_LOCAL => 'onArrayFilterEvent',
+ ArrayFilterEvent::INSERT_POST_LOCAL => 'onInsertPostLocalEvent',
ArrayFilterEvent::INSERT_POST_LOCAL_END => 'onArrayFilterEvent',
ArrayFilterEvent::INSERT_POST_REMOTE => 'onArrayFilterEvent',
ArrayFilterEvent::INSERT_POST_REMOTE_END => 'onArrayFilterEvent',
HookEventBridge::onCollectRoutesEvent($event);
}
+ public function testOnInsertPostLocalEventCallsHookWithCorrectValue(): void
+ {
+ $event = new ArrayFilterEvent(ArrayFilterEvent::INSERT_POST_LOCAL, ['item' => ['id' => -1]]);
+
+ $reflectionProperty = new \ReflectionProperty(HookEventBridge::class, 'mockedCallHook');
+ $reflectionProperty->setAccessible(true);
+
+ $reflectionProperty->setValue(null, function (string $name, array $data): array {
+ $this->assertSame('post_local', $name);
+ $this->assertSame(['id' => -1], $data);
+
+ return ['id' => 123];
+ });
+
+ HookEventBridge::onInsertPostLocalEvent($event);
+
+ $this->assertSame(
+ ['item' => ['id' => 123]],
+ $event->getArray(),
+ );
+ }
+
public function testOnPreparePostStartEventCallsHookWithCorrectValue(): void
{
$event = new ArrayFilterEvent(ArrayFilterEvent::PREPARE_POST_START, ['item' => ['id' => -1]]);