mirror of
https://git.friendi.ca/friendica/friendica.git
synced 2025-06-07 20:04:32 +02:00
Create hook for profile_sidebar hooks
This commit is contained in:
parent
ac8ca35b2b
commit
59359f7d9d
5 changed files with 72 additions and 8 deletions
|
@ -63,6 +63,8 @@ final class HookEventBridge
|
||||||
ArrayFilterEvent::RENDER_LOCATION => 'render_location',
|
ArrayFilterEvent::RENDER_LOCATION => 'render_location',
|
||||||
ArrayFilterEvent::ITEM_PHOTO_MENU => 'item_photo_menu',
|
ArrayFilterEvent::ITEM_PHOTO_MENU => 'item_photo_menu',
|
||||||
ArrayFilterEvent::CONTACT_PHOTO_MENU => 'contact_photo_menu',
|
ArrayFilterEvent::CONTACT_PHOTO_MENU => 'contact_photo_menu',
|
||||||
|
ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY => 'profile_sidebar_enter',
|
||||||
|
ArrayFilterEvent::PROFILE_SIDEBAR => 'profile_sidebar',
|
||||||
ArrayFilterEvent::OEMBED_FETCH_END => 'oembed_fetch_url',
|
ArrayFilterEvent::OEMBED_FETCH_END => 'oembed_fetch_url',
|
||||||
ArrayFilterEvent::PAGE_INFO => 'page_info_data',
|
ArrayFilterEvent::PAGE_INFO => 'page_info_data',
|
||||||
ArrayFilterEvent::SMILEY_LIST => 'smilie',
|
ArrayFilterEvent::SMILEY_LIST => 'smilie',
|
||||||
|
@ -129,6 +131,8 @@ final class HookEventBridge
|
||||||
ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent',
|
ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent',
|
ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::CONTACT_PHOTO_MENU => 'onArrayFilterEvent',
|
ArrayFilterEvent::CONTACT_PHOTO_MENU => 'onArrayFilterEvent',
|
||||||
|
ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY => 'onProfileSidebarEntryEvent',
|
||||||
|
ArrayFilterEvent::PROFILE_SIDEBAR => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent',
|
ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent',
|
||||||
ArrayFilterEvent::PAGE_INFO => 'onArrayFilterEvent',
|
ArrayFilterEvent::PAGE_INFO => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::SMILEY_LIST => 'onArrayFilterEvent',
|
ArrayFilterEvent::SMILEY_LIST => 'onArrayFilterEvent',
|
||||||
|
@ -193,6 +197,20 @@ final class HookEventBridge
|
||||||
$event->setArray($data);
|
$event->setArray($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map the PROFILE_SIDEBAR_ENTRY event to `profile_sidebar_enter` hook
|
||||||
|
*/
|
||||||
|
public static function onProfileSidebarEntryEvent(ArrayFilterEvent $event): void
|
||||||
|
{
|
||||||
|
$data = $event->getArray();
|
||||||
|
|
||||||
|
$profile = (array) $data['profile'] ?? [];
|
||||||
|
|
||||||
|
$data['profile'] = static::callHook($event->getName(), $profile);
|
||||||
|
|
||||||
|
$event->setArray($data);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the OEMBED_FETCH_END event to `oembed_fetch_url` hook
|
* Map the OEMBED_FETCH_END event to `oembed_fetch_url` hook
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -76,6 +76,10 @@ final class ArrayFilterEvent extends Event
|
||||||
|
|
||||||
public const CONTACT_PHOTO_MENU = 'friendica.data.contact_photo_menu';
|
public const CONTACT_PHOTO_MENU = 'friendica.data.contact_photo_menu';
|
||||||
|
|
||||||
|
public const PROFILE_SIDEBAR_ENTRY = 'friendica.data.profile_sidebar_entry';
|
||||||
|
|
||||||
|
public const PROFILE_SIDEBAR = 'friendica.data.profile_sidebar';
|
||||||
|
|
||||||
public const OEMBED_FETCH_END = 'friendica.data.oembed_fetch_end';
|
public const OEMBED_FETCH_END = 'friendica.data.oembed_fetch_end';
|
||||||
|
|
||||||
public const PAGE_INFO = 'friendica.data.page_info';
|
public const PAGE_INFO = 'friendica.data.page_info';
|
||||||
|
|
|
@ -19,6 +19,7 @@ use Friendica\Core\Search;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
use Friendica\Event\ArrayFilterEvent;
|
||||||
use Friendica\Network\HTTPException;
|
use Friendica\Network\HTTPException;
|
||||||
use Friendica\Protocol\Activity;
|
use Friendica\Protocol\Activity;
|
||||||
use Friendica\Protocol\Diaspora;
|
use Friendica\Protocol\Diaspora;
|
||||||
|
@ -258,11 +259,6 @@ class Profile
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
* @note Returns empty string if passed $profile is wrong type or not populated
|
* @note Returns empty string if passed $profile is wrong type or not populated
|
||||||
*
|
|
||||||
* @hooks 'profile_sidebar_enter'
|
|
||||||
* array $profile - profile data
|
|
||||||
* @hooks 'profile_sidebar'
|
|
||||||
* array $arr
|
|
||||||
*/
|
*/
|
||||||
public static function getVCardHtml(array $profile, bool $block, bool $show_contacts): string
|
public static function getVCardHtml(array $profile, bool $block, bool $show_contacts): string
|
||||||
{
|
{
|
||||||
|
@ -282,7 +278,17 @@ class Profile
|
||||||
|
|
||||||
$profile['network_link'] = '';
|
$profile['network_link'] = '';
|
||||||
|
|
||||||
Hook::callAll('profile_sidebar_enter', $profile);
|
$eventDispatcher = DI::eventDispatcher();
|
||||||
|
|
||||||
|
$hook_data = [
|
||||||
|
'profile' => $profile,
|
||||||
|
];
|
||||||
|
|
||||||
|
$hook_data = $eventDispatcher->dispatch(
|
||||||
|
new ArrayFilterEvent(ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY, $hook_data),
|
||||||
|
)->getArray();
|
||||||
|
|
||||||
|
$profile = $hook_data['profile'] ?? $profile;
|
||||||
|
|
||||||
$profile_url = $profile['url'];
|
$profile_url = $profile['url'];
|
||||||
|
|
||||||
|
@ -473,9 +479,17 @@ class Profile
|
||||||
'$network_url' => $network_url,
|
'$network_url' => $network_url,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$arr = ['profile' => &$profile, 'entry' => &$o];
|
$hook_data = [
|
||||||
|
'profile' => &$profile,
|
||||||
|
'entry' => &$o,
|
||||||
|
];
|
||||||
|
|
||||||
Hook::callAll('profile_sidebar', $arr);
|
$hook_data = $eventDispatcher->dispatch(
|
||||||
|
new ArrayFilterEvent(ArrayFilterEvent::PROFILE_SIDEBAR, $hook_data),
|
||||||
|
)->getArray();
|
||||||
|
|
||||||
|
$profile = $hook_data['profile'] ?? $profile;
|
||||||
|
$o = $hook_data['entry'] ?? $o;
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,8 @@ class HookEventBridgeTest extends TestCase
|
||||||
ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent',
|
ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent',
|
ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::CONTACT_PHOTO_MENU => 'onArrayFilterEvent',
|
ArrayFilterEvent::CONTACT_PHOTO_MENU => 'onArrayFilterEvent',
|
||||||
|
ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY => 'onProfileSidebarEntryEvent',
|
||||||
|
ArrayFilterEvent::PROFILE_SIDEBAR => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent',
|
ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent',
|
||||||
ArrayFilterEvent::PAGE_INFO => 'onArrayFilterEvent',
|
ArrayFilterEvent::PAGE_INFO => 'onArrayFilterEvent',
|
||||||
ArrayFilterEvent::SMILEY_LIST => 'onArrayFilterEvent',
|
ArrayFilterEvent::SMILEY_LIST => 'onArrayFilterEvent',
|
||||||
|
@ -213,6 +215,28 @@ class HookEventBridgeTest extends TestCase
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testOnProfileSidebarEntryEventCallsHookWithCorrectValue(): void
|
||||||
|
{
|
||||||
|
$event = new ArrayFilterEvent(ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY, ['profile' => ['uid' => 0, 'name' => 'original']]);
|
||||||
|
|
||||||
|
$reflectionProperty = new \ReflectionProperty(HookEventBridge::class, 'mockedCallHook');
|
||||||
|
$reflectionProperty->setAccessible(true);
|
||||||
|
|
||||||
|
$reflectionProperty->setValue(null, function (string $name, array $data): array {
|
||||||
|
$this->assertSame('profile_sidebar_enter', $name);
|
||||||
|
$this->assertSame(['uid' => 0, 'name' => 'original'], $data);
|
||||||
|
|
||||||
|
return ['uid' => 0, 'name' => 'changed'];
|
||||||
|
});
|
||||||
|
|
||||||
|
HookEventBridge::onProfileSidebarEntryEvent($event);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
['profile' => ['uid' => 0, 'name' => 'changed']],
|
||||||
|
$event->getArray(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public function testOnOembedFetchEndEventCallsHookWithCorrectValue(): void
|
public function testOnOembedFetchEndEventCallsHookWithCorrectValue(): void
|
||||||
{
|
{
|
||||||
$event = new ArrayFilterEvent(ArrayFilterEvent::OEMBED_FETCH_END, ['url' => 'original_url']);
|
$event = new ArrayFilterEvent(ArrayFilterEvent::OEMBED_FETCH_END, ['url' => 'original_url']);
|
||||||
|
@ -362,6 +386,8 @@ class HookEventBridgeTest extends TestCase
|
||||||
[ArrayFilterEvent::RENDER_LOCATION, 'render_location'],
|
[ArrayFilterEvent::RENDER_LOCATION, 'render_location'],
|
||||||
[ArrayFilterEvent::ITEM_PHOTO_MENU, 'item_photo_menu'],
|
[ArrayFilterEvent::ITEM_PHOTO_MENU, 'item_photo_menu'],
|
||||||
[ArrayFilterEvent::CONTACT_PHOTO_MENU, 'contact_photo_menu'],
|
[ArrayFilterEvent::CONTACT_PHOTO_MENU, 'contact_photo_menu'],
|
||||||
|
[ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY, 'profile_sidebar_enter'],
|
||||||
|
[ArrayFilterEvent::PROFILE_SIDEBAR, 'profile_sidebar'],
|
||||||
[ArrayFilterEvent::PAGE_INFO, 'page_info_data'],
|
[ArrayFilterEvent::PAGE_INFO, 'page_info_data'],
|
||||||
[ArrayFilterEvent::SMILEY_LIST, 'smilie'],
|
[ArrayFilterEvent::SMILEY_LIST, 'smilie'],
|
||||||
[ArrayFilterEvent::JOT_NETWORKS, 'jot_networks'],
|
[ArrayFilterEvent::JOT_NETWORKS, 'jot_networks'],
|
||||||
|
|
|
@ -49,6 +49,8 @@ class ArrayFilterEventTest extends TestCase
|
||||||
[ArrayFilterEvent::RENDER_LOCATION, 'friendica.data.render_location'],
|
[ArrayFilterEvent::RENDER_LOCATION, 'friendica.data.render_location'],
|
||||||
[ArrayFilterEvent::ITEM_PHOTO_MENU, 'friendica.data.item_photo_menu'],
|
[ArrayFilterEvent::ITEM_PHOTO_MENU, 'friendica.data.item_photo_menu'],
|
||||||
[ArrayFilterEvent::CONTACT_PHOTO_MENU, 'friendica.data.contact_photo_menu'],
|
[ArrayFilterEvent::CONTACT_PHOTO_MENU, 'friendica.data.contact_photo_menu'],
|
||||||
|
[ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY, 'friendica.data.profile_sidebar_entry'],
|
||||||
|
[ArrayFilterEvent::PROFILE_SIDEBAR, 'friendica.data.profile_sidebar'],
|
||||||
[ArrayFilterEvent::OEMBED_FETCH_END, 'friendica.data.oembed_fetch_end'],
|
[ArrayFilterEvent::OEMBED_FETCH_END, 'friendica.data.oembed_fetch_end'],
|
||||||
[ArrayFilterEvent::PAGE_INFO, 'friendica.data.page_info'],
|
[ArrayFilterEvent::PAGE_INFO, 'friendica.data.page_info'],
|
||||||
[ArrayFilterEvent::SMILEY_LIST, 'friendica.data.smiley_list'],
|
[ArrayFilterEvent::SMILEY_LIST, 'friendica.data.smiley_list'],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue