feat(user): badge icon urls and wear medal chrome
Extend badge dictionary with optional icon_url, prefer aksrt_wear_badge when assigned, and render medal images in identity chips.
This commit is contained in:
1 parent
a3585b0f96
commit
1d75170f8e
7 files changed
+99
-21
No files matched your search
@@ -130,7 +130,7 @@ class AKSRT_User_Home {
|
||||
/**
|
||||
* 获取公开展示的身份信号(认证 / 等级 / 徽章)。
|
||||
*
|
||||
* @return array<int,array{label:string,icon:string,tone:string}>
|
||||
* @return array<int,array{label:string,icon:string,tone:string,icon_url?:string,type?:string,slug?:string,wear?:bool}>
|
||||
*/
|
||||
public function get_profile_signals(int $user_id): array {
|
||||
if ($user_id <= 0 || !class_exists('AKSRT_Settings')) {
|
||||
@@ -142,6 +142,7 @@ class AKSRT_User_Home {
|
||||
|
||||
if (!empty($settings['verify']['enabled']) && !empty($settings['verify']['public_display']) && $this->is_user_verified($user_id, $settings['verify'])) {
|
||||
$signals[] = [
|
||||
'type' => 'verify',
|
||||
'label' => (string) $settings['verify']['badge_text'],
|
||||
'icon' => 'check-circle',
|
||||
'tone' => 'success',
|
||||
@@ -152,6 +153,7 @@ class AKSRT_User_Home {
|
||||
$level = $this->get_user_level($user_id, $settings['level']);
|
||||
if ($level > 0) {
|
||||
$signals[] = [
|
||||
'type' => 'level',
|
||||
'label' => (string) $settings['level']['label_prefix'] . $level,
|
||||
'icon' => 'layer-group',
|
||||
'tone' => 'info',
|
||||
@@ -171,21 +173,36 @@ class AKSRT_User_Home {
|
||||
if (!is_array($assigned)) {
|
||||
$assigned = preg_split('/[\s,]+/', (string) $assigned, -1, PREG_SPLIT_NO_EMPTY);
|
||||
}
|
||||
$assigned = array_values(array_filter(array_map(static function ($slug) {
|
||||
return sanitize_key((string) $slug);
|
||||
}, (array) $assigned)));
|
||||
|
||||
// Prefer worn badge first (Zibll wear-medal).
|
||||
$wear = sanitize_key((string) get_user_meta($user_id, 'aksrt_wear_badge', true));
|
||||
if ($wear !== '' && in_array($wear, $assigned, true) && isset($badge_map[$wear])) {
|
||||
$assigned = array_values(array_unique(array_merge([$wear], $assigned)));
|
||||
}
|
||||
|
||||
$limit = max(1, (int) ($settings['badge']['limit'] ?? 3));
|
||||
foreach ((array) $assigned as $slug) {
|
||||
$slug = sanitize_key((string) $slug);
|
||||
$badge_count = 0;
|
||||
foreach ($assigned as $slug) {
|
||||
if ($slug === '' || !isset($badge_map[$slug])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$icon_url = (string) ($badge_map[$slug]['icon_url'] ?? '');
|
||||
$signals[] = [
|
||||
'label' => (string) $badge_map[$slug]['label'],
|
||||
'icon' => 'award',
|
||||
'tone' => (string) ($badge_map[$slug]['tone'] ?? 'neutral'),
|
||||
'type' => 'badge',
|
||||
'slug' => $slug,
|
||||
'label' => (string) $badge_map[$slug]['label'],
|
||||
'icon' => 'award',
|
||||
'tone' => (string) ($badge_map[$slug]['tone'] ?? 'neutral'),
|
||||
'icon_url' => $icon_url,
|
||||
'wear' => ($wear !== '' && $slug === $wear),
|
||||
];
|
||||
$badge_count++;
|
||||
|
||||
if (count($signals) >= $limit + 2) {
|
||||
if ($badge_count >= $limit) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user