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
@@ -26,6 +26,28 @@ final class MailNotifications {
|
||||
add_action('aksrt_friend_link_submitted', [self::class, 'friend_link_submitted'], 20, 1);
|
||||
add_action('aksrt_user_phone_changed', [self::class, 'phone_changed'], 20, 2);
|
||||
add_action('aksrt_user_restriction_changed', [self::class, 'restriction_changed'], 20, 4);
|
||||
add_action('aksrt_ticket_urged', [self::class, 'ticket_urged'], 20, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 催单邮件:已指派跟进人时只发给跟进人,否则发给全部管理员(与站内通知同一路由)。
|
||||
*
|
||||
* @param array<string,mixed> $ticket
|
||||
*/
|
||||
public static function ticket_urged(array $ticket): void {
|
||||
$vars = [
|
||||
'username' => (string) ($ticket['user_name'] ?? ''),
|
||||
'count' => (int) ($ticket['urge_count'] ?? 0),
|
||||
'ticket_num' => (string) ($ticket['ticket_num'] ?? ''),
|
||||
'title' => (string) ($ticket['title'] ?? ''),
|
||||
'url' => admin_url('users.php?page=aksrt_tickets&id=' . (int) ($ticket['id'] ?? 0)),
|
||||
];
|
||||
$assignee = get_userdata((int) ($ticket['admin_id'] ?? 0));
|
||||
if ($assignee instanceof \WP_User && is_email($assignee->user_email)) {
|
||||
self::send('ticket_urge_admin', $assignee->user_email, $vars);
|
||||
return;
|
||||
}
|
||||
self::send_admin('ticket_urge_admin', $vars);
|
||||
}
|
||||
|
||||
public static function restriction_changed(int $user_id, string $type, string $action, string $reason): void {
|
||||
|
||||
@@ -20,6 +20,7 @@ final class MailTemplates {
|
||||
'auth_apply_admin' => self::event('身份认证申请通知', '用户 {username} 提交了身份认证申请,请登录后台审核。\n查看地址:{url}', ['username', 'url']),
|
||||
'ban_appeal_admin' => self::event('账号申诉通知', '用户 {username} 提交了账号申诉。\n查看地址:{url}', ['username', 'url']),
|
||||
'report_admin' => self::event('举报提交通知', '收到新的举报。\n举报人:{username}\n对象:{title}\n查看地址:{url}', ['username', 'title', 'url']),
|
||||
'ticket_urge_admin' => self::event('工单催单通知', '用户 {username} 催促处理工单(第 {count} 次)。\n工单:#{ticket_num} {title}\n查看地址:{url}', ['username', 'count', 'ticket_num', 'title', 'url']),
|
||||
|
||||
'reg_verify_code' => self::event('注册验证码', '您好 {username},\n\n您正在注册 {site_name},验证码为:\n\n【{code}】\n\n验证码 10 分钟内有效。如非本人操作,请忽略此邮件。', ['username', 'site_name', 'code']),
|
||||
'reg_success' => self::event('注册成功', '您好 {username},\n\n欢迎加入 {site_name}!您的账号已注册成功。\n\n登录地址:{url}', ['username', 'site_name', 'url']),
|
||||
@@ -95,7 +96,7 @@ final class MailTemplates {
|
||||
['key' => 'mail_more_content', 'label' => '邮件附加内容(支持基础 HTML)', 'type' => 'textarea', 'rows' => 3, 'sanitize_type' => 'html', 'default' => $defaults['mail_more_content']],
|
||||
]],
|
||||
];
|
||||
$admin = ['links_submit_admin', 'order_paid_admin', 'withdraw_submitted_admin', 'post_pending_admin', 'auth_apply_admin', 'ban_appeal_admin', 'report_admin'];
|
||||
$admin = ['links_submit_admin', 'order_paid_admin', 'withdraw_submitted_admin', 'post_pending_admin', 'auth_apply_admin', 'ban_appeal_admin', 'report_admin', 'ticket_urge_admin'];
|
||||
$user = array_values(array_diff(array_keys($definitions), $admin));
|
||||
$groups[] = self::event_group('admin', '管理员邮件推送', $admin, $definitions, $defaults);
|
||||
$groups[] = self::event_group('user', '用户邮件推送', $user, $definitions, $defaults);
|
||||
|
||||
Reference in new issue
Block a user