From e8108959e382285dbb0d3d908c162f07bbbe773f Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Tue, 2 Jul 2019 23:34:27 +0800 Subject: [PATCH] New plugin API: `addUserBadge` --- app/Events/RenderingBadges.php | 13 +++++++++++++ app/Services/Hook.php | 12 ++++++++++-- resources/misc/changelogs/en/4.3.0.md | 1 + resources/misc/changelogs/zh_CN/4.3.0.md | 1 + resources/views/common/user-panel.blade.php | 15 +++++++++++++++ tests/ServicesTest/HookTest.php | 8 ++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 app/Events/RenderingBadges.php diff --git a/app/Events/RenderingBadges.php b/app/Events/RenderingBadges.php new file mode 100644 index 00000000..4594d786 --- /dev/null +++ b/app/Events/RenderingBadges.php @@ -0,0 +1,13 @@ +badges = &$badges; + } +} diff --git a/app/Services/Hook.php b/app/Services/Hook.php index 5900e540..6b60c721 100644 --- a/app/Services/Hook.php +++ b/app/Services/Hook.php @@ -53,8 +53,6 @@ class Hook /** * Add routes. A router instance will be passed to the given callback. - * - * @param Closure $callback */ public static function addRoute(Closure $callback): void { @@ -118,4 +116,14 @@ class Hook } }, $priority); } + + public static function addUserBadge(string $text, $color = 'primary'): void + { + Event::listen( + Events\RenderingBadges::class, + function (Events\RenderingBadges $event) use ($text, $color) { + $event->badges[] = [$text, $color]; + } + ); + } } diff --git a/resources/misc/changelogs/en/4.3.0.md b/resources/misc/changelogs/en/4.3.0.md index e162278f..2b265caa 100644 --- a/resources/misc/changelogs/en/4.3.0.md +++ b/resources/misc/changelogs/en/4.3.0.md @@ -5,6 +5,7 @@ - Added configurable "Explore" menu. - Custom `PLUGINS_DIR` with relative path is allowed. - Added link for editing announcement. +- New plugin API: [`Hook::addUserBadge`](https://bs-plugin.netlify.com/guide/bootstrap.html#%E6%98%BE%E7%A4%BA%E7%94%A8%E6%88%B7-badge). ## Tweaked diff --git a/resources/misc/changelogs/zh_CN/4.3.0.md b/resources/misc/changelogs/zh_CN/4.3.0.md index a23d1001..adbcc6f2 100644 --- a/resources/misc/changelogs/zh_CN/4.3.0.md +++ b/resources/misc/changelogs/zh_CN/4.3.0.md @@ -5,6 +5,7 @@ - 添加可自定义的「浏览」菜单 - 允许在 `PLUGINS_DIR` 配置项中使用相对路径 - 添加「编辑公告」的链接 +- 新插件 API:[`Hook::addUserBadge`](https://bs-plugin.netlify.com/guide/bootstrap.html#%E6%98%BE%E7%A4%BA%E7%94%A8%E6%88%B7-badge) ## 调整 diff --git a/resources/views/common/user-panel.blade.php b/resources/views/common/user-panel.blade.php index 82c07984..59399d8c 100644 --- a/resources/views/common/user-panel.blade.php +++ b/resources/views/common/user-panel.blade.php @@ -7,6 +7,11 @@ $roles = [ ]; $role = $roles[$user->permission]; @endphp + +@php + $badges = []; + event(new \App\Events\RenderingBadges($badges)); +@endphp
email).'.png?tid='.$user->avatar) }}" alt="User Image"> @@ -14,5 +19,15 @@ $role = $roles[$user->permission];

{{ $user->nickname ?? $user->email }}

@lang("admin.users.status.$role") + @if (count($badges) === 1) + {{ $badges[0][0] }} + @endif
+@if (count($badges) > 1) +
+ @foreach ($badges as $badge) + {{ $badge[0] }} + @endforeach +
+@endif diff --git a/tests/ServicesTest/HookTest.php b/tests/ServicesTest/HookTest.php index 9389b15c..d510ab11 100644 --- a/tests/ServicesTest/HookTest.php +++ b/tests/ServicesTest/HookTest.php @@ -84,4 +84,12 @@ class HookTest extends TestCase $this->get('/skinlib') ->assertSee(''); } + + public function testAddUserBadge() + { + Hook::addUserBadge('hi', 'green'); + $this->actAs('normal') + ->get('/user') + ->assertSee('hi'); + } }