feat(ticket): record urges in thread, show urge count in admin, mail admins
- aksrt_ticket gains urge_count / last_urge_time (schema 3.1.0) - cooldown moves from transient to an atomic conditional UPDATE - urge inserts a system reply rendered as a centered notice (not quotable) - admin list badge + info card row for urge count / last time - new ticket_urge_admin mail event via aksrt_ticket_urged Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ac3ed9c956
commit
5febdb35c8
14 files changed
+198
-25
No files matched your search
@@ -217,7 +217,7 @@ trait UsersMenusTicketsList {
|
||||
|
||||
printf(
|
||||
'<tr id="aksrt-ticket-%1$d" class="aksrt-tickets-admin__row%2$s">'
|
||||
. '<td class="column-title"><a class="row-title" href="%3$s" aria-expanded="%4$s">%5$s</a>'
|
||||
. '<td class="column-title"><a class="row-title" href="%3$s" aria-expanded="%4$s">%5$s</a>%15$s'
|
||||
. '<div class="aksrt-tickets-admin__sub"><code>%6$s</code>%7$s</div></td>'
|
||||
. '<td class="column-status"><span class="aksrt-ticket-badge" style="--aksrt-ticket-color:%8$s">%9$s</span></td>'
|
||||
. '<td class="column-type">%10$s</td>'
|
||||
@@ -245,7 +245,8 @@ trait UsersMenusTicketsList {
|
||||
/* translators: %s submit time */
|
||||
__('提交于 %s', 'aksrt'),
|
||||
(string) $ticket['post_time']
|
||||
))
|
||||
)),
|
||||
$this->ticket_urge_badge($ticket) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
);
|
||||
|
||||
if ($is_open) {
|
||||
@@ -253,6 +254,23 @@ trait UsersMenusTicketsList {
|
||||
}
|
||||
}
|
||||
|
||||
/** 催单徽标:次数 + 悬停显示最近催单时间;已完结或未催过不输出。 */
|
||||
private function ticket_urge_badge(array $ticket): string {
|
||||
$count = (int) ($ticket['urge_count'] ?? 0);
|
||||
if ($count <= 0 || !empty($ticket['is_closed'])) {
|
||||
return '';
|
||||
}
|
||||
return ' <span class="aksrt-ticket-urge" title="' . esc_attr(sprintf(
|
||||
/* translators: %s last urge time */
|
||||
__('最近催单:%s', 'aksrt'),
|
||||
(string) $ticket['last_urge_time']
|
||||
)) . '">' . esc_html(sprintf(
|
||||
/* translators: %d urge count */
|
||||
__('催单 ×%d', 'aksrt'),
|
||||
$count
|
||||
)) . '</span>';
|
||||
}
|
||||
|
||||
/** 头像 + 名称(链接到用户编辑页)。后台不走前台懒加载,直接输出 src。 */
|
||||
private function ticket_user_chip(int $user_id, string $name): string {
|
||||
$avatar = function_exists('aksrt_get_avatar_url') ? aksrt_get_avatar_url($user_id, 48) : '';
|
||||
|
||||
Reference in new issue
Block a user