Files
wordpress-theme-aksrt/src/Admin/Schema/SchemaUsers.php
T
kate522 740bd48f42 refactor(users): drop dead WeChat notify settings surface
users/wechat schema 页写入 aksrt_settings 的 wechat_notify_* / wechat_app_* / wechat_template_* 等 15 个键全仓无任何消费方,与活配置面 aksrt_wechat_settings(WeChatNotify 读取、/users/wechat-template 页管理)构成双路;PHP 与 JS 两份 schema 的字段集早已不一致(15 vs 10),是死面腐烂的直接证据。

移除 SchemaUsers 的 wechat 分组、JS schema 文件及其注册、菜单 schema 页条目,微信配置收敛为单一自定义页入口;契约测试锁定死键零残留与活配置面唯一。
2026-10-13 21:00:49 +08:00

618 lines
52 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* @package AKSRT
*/
namespace AKSRT\Admin\Schema;
defined('ABSPATH') || exit;
class SchemaUsers {
private static function default_level_options(): array {
$options = [];
for ($level = 1; $level <= 10; $level++) {
$options['name_' . $level] = 'LV' . $level;
$options['icon_img_' . $level] = '';
$options['upgrade_integral_' . $level] = $level === 1 ? 0 : ($level - 1) * 500 * $level;
}
return $options;
}
private static function default_integral_options(): array {
return [
'day_max' => 100, 'sign_up' => 20, 'sign_in' => 5, 'followed' => 5,
'post_new' => 5, 'post_like' => 1, 'post_favorite' => 2,
'comment_new' => 2, 'comment_like' => 1,
];
}
/**
* Default medal catalog with preset icons from assets/img/medal.
*
* @return array<int,array{cat_name:string,items:array<int,array{slug:string,name:string,desc:string,icon:string,get_type:string,get_val:int}>}>
*/
private static function default_medal_args(): array {
$medal = static function (int $n): string {
$path = sprintf('/assets/img/medal/medal-%d.svg', $n);
if (file_exists(get_theme_file_path($path))) {
return get_theme_file_uri($path);
}
return '';
};
return [
[
'cat_name' => '成长',
'items' => [
[
'slug' => 'rookie',
'name' => '初出茅庐',
'desc' => '注册时间超过30天',
'icon' => $medal(1),
'get_type' => 'registration_time',
'get_val' => 30,
],
[
'slug' => 'checkin-30',
'name' => '签到达人',
'desc' => '累计签到30天',
'icon' => $medal(2),
'get_type' => 'checkin_all_day',
'get_val' => 30,
],
[
'slug' => 'writer',
'name' => '创作先锋',
'desc' => '发布10篇文章',
'icon' => $medal(5),
'get_type' => 'new_post',
'get_val' => 10,
],
[
'slug' => 'popular',
'name' => '人气之星',
'desc' => '累计获得100次点赞',
'icon' => $medal(9),
'get_type' => 'like',
'get_val' => 100,
],
],
],
[
'cat_name' => '限定',
'items' => [
[
'slug' => 'annual-star',
'name' => '年度人气达人',
'desc' => '活动限定徽章',
'icon' => $medal(12),
'get_type' => 'manually_add',
'get_val' => 0,
],
[
'slug' => 'vip-member',
'name' => '尊贵会员',
'desc' => '给予 VIP 用户的特殊徽章',
'icon' => $medal(15),
'get_type' => 'manually_add',
'get_val' => 0,
],
],
],
];
}
public static function build(): array {
return [
'domain' => 'users',
'title' => '用户&互动',
'sections' => [
'auth' => [
'key' => 'auth',
'title' => '注册登录',
'version' => '1.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'register', 'title' => '注册设置', 'fields' => [
['key' => 'close_sign', 'label' => '一键禁用登录注册', 'type' => 'switch', 'default' => false, 'desc' => '开启后前台禁用全部注册/登录入口(含社交登录),不影响后台登录'],
['key' => 'close_signup', 'label' => '关闭注册', 'type' => 'switch', 'default' => false],
['key' => 'close_signin', 'label' => '禁用账号登录/注册', 'type' => 'switch', 'default' => false, 'desc' => '关闭账号密码和验证码登录注册,仅允许社交账号登录'],
['key' => 'user_agreement_s', 'label' => '用户协议', 'type' => 'switch', 'default' => false],
['key' => 'user_agreement_page', 'label' => '协议页面', 'type' => 'input', 'default' => ''],
['key' => 'user_privacy_s', 'label' => '隐私政策', 'type' => 'switch', 'default' => false],
['key' => 'user_privacy_page', 'label' => '隐私页面', 'type' => 'input', 'default' => ''],
['key' => 'user_agreement_check', 'label' => '强制勾选协议', 'type' => 'switch', 'default' => false],
['key' => 'no_repetition_name', 'label' => '禁止重复昵称', 'type' => 'switch', 'default' => true],
['key' => 'user_nickname_out', 'label' => '昵称黑名单关键词', 'type' => 'textarea', 'default' => '赌博,博彩,彩票,性爱,色情,做爱,爱爱,淫秽,傻b,妈的,妈b,admin,test'],
['key' => 'user_email_limit_type', 'label' => '邮箱限制类型', 'type' => 'radio', 'default' => 'not', 'options' => [
['label' => '黑名单', 'value' => 'not'],
['label' => '白名单', 'value' => 'allow'],
]],
['key' => 'user_email_out', 'label' => '邮箱限制关键词', 'type' => 'textarea', 'default' => ''],
]],
['key' => 'login', 'title' => '登录设置', 'fields' => [
['key' => 'user_sign_type', 'label' => '登录注册样式', 'type' => 'radio', 'default' => 'modal', 'options' => [
['label' => '弹窗', 'value' => 'modal'],
['label' => '跳转页面', 'value' => 'page'],
]],
['key' => 'sign_modal_auto_s', 'label' => '自动弹出登录窗', 'type' => 'switch', 'default' => false, 'desc' => '仅在 user_sign_type=modal 时生效'],
['key' => 'sign_modal_auto_waiting_time', 'label' => '弹窗等待秒数', 'type' => 'number', 'default' => 5, 'min' => 1, 'max' => 100, 'desc' => '页面加载多少秒后弹出登录窗'],
['key' => 'sign_modal_auto_expires', 'label' => '弹窗周期(小时)', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 2000, 'desc' => '关闭弹窗后多少小时内不再自动弹出,0=每次刷新都弹'],
['key' => 'replace_wp_login', 'label' => '替换WP登录页', 'type' => 'switch', 'default' => true],
['key' => 'admin_sign_key', 'label' => '应急登录 Key', 'type' => 'input', 'default' => '', 'desc' => '留空为禁用。管理员可通过 /wp-login.php?aksrt_bypass=<key> 绕过前台替换'],
['key' => 'user_signin_phone_s', 'label' => '手机号登录', 'type' => 'switch', 'default' => false, 'desc' => '允许用手机号作为用户名登录'],
['key' => 'user_signin_nopas_s', 'label' => '免密登录', 'type' => 'switch', 'default' => false],
['key' => 'user_signin_nopas_type', 'label' => '免密登录方式', 'type' => 'radio', 'default' => 'email', 'options' => [
['label' => '邮箱验证码', 'value' => 'email'],
['label' => '手机验证码', 'value' => 'phone'],
['label' => '邮箱或手机', 'value' => 'email_phone'],
]],
['key' => 'user_signin_nopas_active', 'label' => '免密显示模式', 'type' => 'radio', 'default' => 'nopas', 'options' => [
['label' => '优先免密', 'value' => 'nopas'],
['label' => '优先密码', 'value' => 'pas'],
['label' => '仅免密', 'value' => 'only_nopas'],
]],
]],
['key' => 'signup_captcha', 'title' => '注册验证', 'fields' => [
['key' => 'user_signup_captch', 'label' => '注册需验证', 'type' => 'switch', 'default' => false, 'desc' => '验证码通过后才创建并登录用户'],
['key' => 'captch_type', 'label' => '验证方式', 'type' => 'radio', 'default' => 'email', 'options' => [
['label' => '邮箱', 'value' => 'email'],
['label' => '手机', 'value' => 'phone'],
['label' => '邮箱或手机', 'value' => 'email_phone'],
]],
['key' => 'user_signup_no_repas', 'label' => '无需重复密码', 'type' => 'switch', 'default' => true, 'desc' => '注册时不要求二次确认密码', 'dependsOn' => ['key' => 'user_signup_captch', 'value' => true]],
['key' => 'user_repas_captch_type', 'label' => '找回密码验证方式', 'type' => 'radio', 'default' => 'email', 'options' => [
['label' => '邮箱', 'value' => 'email'],
['label' => '手机', 'value' => 'phone'],
['label' => '邮箱或手机', 'value' => 'email_phone'],
]],
]],
['key' => 'bind', 'title' => '绑定设置', 'fields' => [
['key' => 'bind_phone', 'label' => '绑定手机', 'type' => 'switch', 'default' => false],
['key' => 'bind_reminder', 'label' => '绑定提醒', 'type' => 'radio', 'default' => 'close', 'options' => [
['label' => '提醒绑定邮箱', 'value' => 'email'],
['label' => '提醒绑定手机', 'value' => 'phone'],
['label' => '提醒绑定邮箱和手机', 'value' => 'email_phone'],
['label' => '关闭', 'value' => 'close'],
]],
['key' => 'bind_reminder_text', 'label' => '提醒文案', 'type' => 'textarea', 'default' => '为了您的账户安全,请务必完成账户绑定'],
['key' => 'bind_reminder_expires', 'label' => '提醒周期(小时)', 'type' => 'number', 'default' => 24, 'min' => 0, 'max' => 2000],
['key' => 'mandatory_bind', 'label' => '强制绑定', 'type' => 'radio', 'default' => 'close', 'options' => [
['label' => '强制绑定邮箱', 'value' => 'email'],
['label' => '强制绑定手机', 'value' => 'phone'],
['label' => '强制绑定邮箱和手机', 'value' => 'email_phone'],
['label' => '关闭', 'value' => 'close'],
]],
['key' => 'email_set_captch', 'label' => '绑定邮箱需验证', 'type' => 'switch', 'default' => true, 'desc' => '绑定邮箱时需发送验证码确认'],
]],
['key' => 'referral_inline', 'title' => '推广码注册', 'fields' => [
['key' => 'invit_code_s', 'label' => '推广码注册模式', 'type' => 'radio', 'default' => 'close', 'options' => [
['label' => '关闭', 'value' => 'close'],
['label' => '选填', 'value' => 'open'],
['label' => '必填', 'value' => 'must'],
]],
['key' => 'mandatory_bind_text', 'label' => '强制绑定文案', 'type' => 'textarea', 'default' => '为了您的账户安全,请先完成账户绑定'],
['key' => 'invit_code_open_desc', 'label' => '选填提示', 'type' => 'input', 'default' => '如您受到邀请,可填写推广码。部分推广码会有额外积分赠送'],
['key' => 'invit_code_must_desc', 'label' => '必填提示', 'type' => 'textarea', 'default' => '<div>本站需使用推广码注册</div><div>获取推广码请与客服联系</div>'],
]],
['key' => 'invite_inline', 'title' => '邀请码注册', 'fields' => [
['key' => 'invite_code_s', 'label' => '邀请码注册模式', 'type' => 'radio', 'default' => 'close', 'options' => [
['label' => '关闭', 'value' => 'close'],
['label' => '选填', 'value' => 'open'],
['label' => '必填', 'value' => 'must'],
], 'help' => '一次性邀请码与推广码相互独立:邀请码用于控制注册并按码发放奖励,在「用户 → 邀请码管理」批量生成'],
['key' => 'invite_code_open_desc', 'label' => '选填提示', 'type' => 'input', 'default' => '请输入邀请码,注册成功后奖励将自动发放'],
['key' => 'invite_code_must_desc', 'label' => '必填提示', 'type' => 'textarea', 'default' => '<div>本站需凭邀请码注册</div><div>获取邀请码请与客服联系</div>'],
]],
['key' => 'sign_page_ui', 'title' => '页面 UI 配置', 'fields' => [
['key' => 'sign_page_background', 'label' => '页面背景图', 'type' => 'gallery', 'default' => [], 'desc' => '登录注册页背景图,多图随机'],
['key' => 'sign_theme_mode', 'label' => '主题模式', 'type' => 'radio', 'default' => 'no', 'options' => [
['label' => '默认', 'value' => 'no'],
['label' => '亮色', 'value' => 'white-theme'],
['label' => '暗色', 'value' => 'dark-theme'],
]],
['key' => 'sign_show_header', 'label' => '显示顶部导航', 'type' => 'switch', 'default' => true],
['key' => 'sign_card_position', 'label' => '卡片位置', 'type' => 'radio', 'default' => 'right', 'options' => [
['label' => '靠左', 'value' => 'left'],
['label' => '居中', 'value' => 'center'],
['label' => '靠右', 'value' => 'right'],
]],
['key' => 'sign_show_logo', 'label' => '显示 LOGO', 'type' => 'switch', 'default' => false],
['key' => 'sign_page_footer', 'label' => '页脚 HTML', 'type' => 'textarea', 'default' => '', 'desc' => '登录注册页自定义页脚内容,支持 HTML'],
]],
['key' => 'modal_ui', 'title' => '弹窗 UI 配置', 'fields' => [
['key' => 'sign_modal_background', 'label' => '弹窗背景图', 'type' => 'gallery', 'default' => [], 'desc' => '弹窗左侧背景图,多图随机'],
['key' => 'sign_modal_show_logo', 'label' => '弹窗显示 LOGO', 'type' => 'switch', 'default' => false],
]],
['key' => 'sign_logo', 'title' => '登录框 LOGO', 'fields' => [
['key' => 'user_logo', 'label' => '日间 LOGO', 'type' => 'gallery', 'default' => [], 'desc' => '登录框专用日间 LOGO,留空使用站点全局 LOGO'],
['key' => 'user_logo_dark', 'label' => '夜间 LOGO', 'type' => 'gallery', 'default' => [], 'desc' => '登录框专用夜间 LOGO,留空使用站点全局夜间 LOGO'],
]],
],
],
'notifications' => [
'key' => 'notifications',
'title' => '消息通知',
'version' => '1.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'basic', 'title' => '基础设置', 'fields' => [
['key' => 'message_s', 'label' => '站内通知总开关', 'type' => 'switch', 'default' => true],
['key' => 'msg_center_rewrite_slug', 'label' => '消息中心 URL 别名', 'type' => 'input', 'default' => 'message'],
['key' => 'message_icon_show', 'label' => '通知图标位置', 'type' => 'checkbox', 'default' => ['nav_menu'], 'options' => [
['label' => '导航菜单', 'value' => 'nav_menu'],
['label' => '头像下拉面板', 'value' => 'avatar_dropdown'],
['label' => '用户中心顶部资料卡', 'value' => 'user_center_header'],
['label' => '公开主页顶部资料卡', 'value' => 'user_home_header'],
]],
['key' => 'message_paginate_type', 'label' => '列表翻页模式', 'type' => 'radio', 'default' => 'ajax_lists', 'options' => [
['label' => 'AJAX 追加加载', 'value' => 'ajax_lists'],
['label' => '数字翻页按钮', 'value' => 'default'],
]],
['key' => 'message_user_set', 'label' => '允许用户设置推送', 'type' => 'switch', 'default' => true, 'desc' => '允许用户在前台自行设置通知推送偏好'],
]],
['key' => 'types', 'title' => '通知类型', 'fields' => [
['key' => 'message_close_msg_type', 'label' => '关闭部分推送', 'type' => 'checkbox', 'default' => [], 'options' => [
['label' => '文章通知', 'value' => 'posts'],
['label' => '评论回复', 'value' => 'comment'],
['label' => '收藏通知', 'value' => 'favorite'],
['label' => '点赞通知', 'value' => 'like'],
['label' => '热门通知', 'value' => 'hot'],
['label' => '关注通知', 'value' => 'followed'],
['label' => '系统通知', 'value' => 'system'],
['label' => '支付通知', 'value' => 'pay'],
['label' => '提现回复', 'value' => 'withdraw_reply'],
['label' => '勋章通知', 'value' => 'medal'],
['label' => '认证回复', 'value' => 'auth_apply_reply'],
], 'desc' => '勾选的类型将不向用户推送通知'],
]],
['key' => 'auto_clear', 'title' => '自动清理', 'fields' => [
['key' => 'message_auto_clear_s', 'label' => '自动清理已读消息', 'type' => 'switch', 'default' => true],
['key' => 'message_auto_clear_time', 'label' => '过期天数', 'type' => 'number', 'default' => 365, 'min' => 1, 'max' => 3650, 'desc' => '已读消息超过此天数将被自动清理'],
['key' => 'message_auto_clear_types', 'label' => '清理类型', 'type' => 'checkbox', 'default' => ['posts', 'comment', 'favorite', 'like', 'hot', 'followed', 'system'], 'options' => [
['label' => '文章通知', 'value' => 'posts'],
['label' => '评论回复', 'value' => 'comment'],
['label' => '收藏通知', 'value' => 'favorite'],
['label' => '点赞通知', 'value' => 'like'],
['label' => '热门通知', 'value' => 'hot'],
['label' => '关注通知', 'value' => 'followed'],
['label' => '系统通知', 'value' => 'system'],
['label' => '支付通知', 'value' => 'pay'],
['label' => '提现回复', 'value' => 'withdraw_reply'],
['label' => '勋章通知', 'value' => 'medal'],
['label' => '认证回复', 'value' => 'auth_apply_reply'],
['label' => '下载通知', 'value' => 'download'],
['label' => '积分变动', 'value' => 'credits'],
['label' => '举报反馈', 'value' => 'report'],
]],
]],
],
],
'oauth' => [
'key' => 'oauth',
'title' => '第三方登录',
'version' => '1.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'basic', 'title' => '基础设置', 'fields' => [
['key' => 'oauth_s', 'label' => '启用第三方登录', 'type' => 'switch', 'default' => false],
['key' => 'oauth_proxy_mode', 'label' => '代理登录模式', 'type' => 'radio', 'default' => 'close', 'options' => [
['label' => '关闭', 'value' => 'close'],
['label' => '服务端', 'value' => 'server'],
['label' => '客户端', 'value' => 'client'],
]],
['key' => 'oauth_proxy_secret', 'label' => '代理 HMAC 密钥', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => '', 'dependsOn' => ['key' => 'oauth_proxy_mode', 'not' => 'close']],
['key' => 'oauth_proxy_server_url', 'label' => '服务端地址', 'type' => 'input', 'sanitize_type' => 'url', 'default' => '', 'dependsOn' => ['key' => 'oauth_proxy_mode', 'value' => 'client']],
['key' => 'oauth_proxy_server_providers', 'label' => '服务端允许平台', 'type' => 'checkbox', 'default' => ['github', 'gitee', 'qq', 'google'], 'options' => [
['label' => 'GitHub', 'value' => 'github'],
['label' => 'Gitee', 'value' => 'gitee'],
['label' => 'QQ', 'value' => 'qq'],
['label' => 'Google', 'value' => 'google'],
['label' => '微博', 'value' => 'weibo'],
['label' => '微信', 'value' => 'weixin'],
], 'dependsOn' => ['key' => 'oauth_proxy_mode', 'value' => 'server']],
['key' => 'oauth_proxy_client_providers', 'label' => '客户端启用平台', 'type' => 'checkbox', 'default' => ['github', 'gitee', 'qq', 'google'], 'options' => [
['label' => 'GitHub', 'value' => 'github'],
['label' => 'Gitee', 'value' => 'gitee'],
['label' => 'QQ', 'value' => 'qq'],
['label' => 'Google', 'value' => 'google'],
['label' => '微博', 'value' => 'weibo'],
['label' => '微信', 'value' => 'weixin'],
], 'dependsOn' => ['key' => 'oauth_proxy_mode', 'value' => 'client']],
['key' => 'oauth_bind_type', 'label' => '绑定方式', 'type' => 'radio', 'default' => 'auto', 'options' => [
['label' => '自动绑定', 'value' => 'auto'],
['label' => '手动绑定', 'value' => 'manual'],
]],
['key' => 'oauth_button_lg', 'label' => '大按钮样式', 'type' => 'switch', 'default' => false],
['key' => 'weixingzh_priority', 'label' => 'PC端优先微信扫码', 'type' => 'switch', 'default' => false, 'help' => '开启后 PC 端登录框优先显示微信公众号扫码'],
]],
['key' => 'providers', 'title' => '登录提供商', 'fields' => [
['key' => 'oauth_github_s', 'label' => 'GitHub登录', 'type' => 'switch', 'default' => false],
['key' => 'oauth_gitee_s', 'label' => 'Gitee登录', 'type' => 'switch', 'default' => false],
['key' => 'oauth_qq_s', 'label' => 'QQ登录', 'type' => 'switch', 'default' => false],
['key' => 'oauth_google_s', 'label' => 'Google登录', 'type' => 'switch', 'default' => false],
['key' => 'oauth_weibo_s', 'label' => '微博登录', 'type' => 'switch', 'default' => false],
['key' => 'oauth_weixin_s', 'label' => '微信开放平台登录', 'type' => 'switch', 'default' => false],
['key' => 'oauth_weixingzh_s', 'label' => '微信公众号登录', 'type' => 'switch', 'default' => false],
['key' => 'clogin_s', 'label' => '彩虹聚合登录', 'type' => 'switch', 'default' => false],
]],
['key' => 'github', 'title' => 'GitHub配置', 'fields' => [
['key' => 'github_appid', 'label' => 'Client ID', 'type' => 'input', 'default' => ''],
['key' => 'github_appkey', 'label' => 'Client Secret', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
]],
['key' => 'gitee', 'title' => 'Gitee配置', 'fields' => [
['key' => 'gitee_appid', 'label' => 'Client ID', 'type' => 'input', 'default' => ''],
['key' => 'gitee_appkey', 'label' => 'Client Secret', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
]],
['key' => 'qq', 'title' => 'QQ配置', 'fields' => [
['key' => 'qq_appid', 'label' => 'App ID', 'type' => 'input', 'default' => ''],
['key' => 'qq_appkey', 'label' => 'App Key', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
]],
['key' => 'google', 'title' => 'Google配置', 'fields' => [
['key' => 'google_client_id', 'label' => 'Client ID', 'type' => 'input', 'default' => ''],
['key' => 'google_client_secret', 'label' => 'Client Secret', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
]],
['key' => 'weibo', 'title' => '微博配置', 'fields' => [
['key' => 'weibo_appid', 'label' => 'App Key', 'type' => 'input', 'default' => ''],
['key' => 'weibo_appkey', 'label' => 'App Secret', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
]],
['key' => 'weixin', 'title' => '微信开放平台配置', 'fields' => [
['key' => 'weixin_appid', 'label' => 'AppID', 'type' => 'input', 'default' => ''],
['key' => 'weixin_appsecret', 'label' => 'AppSecret', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
]],
['key' => 'weixingzh', 'title' => '微信公众号配置', 'fields' => [
['key' => 'weixingzh_gzh_type', 'label' => '公众号类型', 'type' => 'radio', 'default' => 'service', 'options' => [
['label' => '服务号', 'value' => 'service'],
['label' => '订阅号', 'value' => 'subscribe'],
]],
['key' => 'weixingzh_token', 'label' => 'Token', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
['key' => 'weixingzh_appid', 'label' => 'AppID', 'type' => 'input', 'default' => ''],
['key' => 'weixingzh_appsecret', 'label' => 'AppSecret', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => ''],
['key' => 'weixingzh_code_qrcode', 'label' => '公众号二维码', 'type' => 'media', 'default' => '', 'help' => '引导用户扫码关注登录的二维码图片'],
['key' => 'weixingzh_code_keyword', 'label' => '登录回复关键词', 'type' => 'input', 'default' => '登录', 'help' => '用户在公众号内回复此关键词触发登录验证码'],
['key' => 'weixingzh_code_reply', 'label' => '验证码回复模板', 'type' => 'textarea', 'default' => '您的验证码是:%s,有效期 %d 分钟。', 'help' => '%s=验证码,%d=有效分钟数'],
['key' => 'weixingzh_subscribe_msg', 'label' => '关注后回复', 'type' => 'textarea', 'default' => '', 'help' => '用户关注公众号后的自动回复文案'],
['key' => 'weixingzh_scan_msg', 'label' => '扫码回复', 'type' => 'textarea', 'default' => '', 'help' => '用户扫码关注公众号后的回复文案'],
]],
['key' => 'clogin', 'title' => '彩虹聚合登录', 'fields' => [
['key' => 'clogin_url', 'label' => '接口地址', 'type' => 'input', 'sanitize_type' => 'url', 'default' => '', 'dependsOn' => ['key' => 'clogin_s', 'value' => true], 'help' => '如 https://xxx.com,不要带 connect.php'],
['key' => 'clogin_id', 'label' => 'AppID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'clogin_s', 'value' => true]],
['key' => 'clogin_key', 'label' => 'AppKey', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => '', 'dependsOn' => ['key' => 'clogin_s', 'value' => true]],
['key' => 'clogin_oauth_s', 'label' => '启用平台', 'type' => 'checkbox', 'default' => ['qq', 'weixin', 'weibo'], 'options' => [
['label' => 'QQ', 'value' => 'qq'],
['label' => '微信', 'value' => 'weixin'],
['label' => '微博', 'value' => 'weibo'],
], 'dependsOn' => ['key' => 'clogin_s', 'value' => true]],
]],
],
],
'sms' => [
'key' => 'sms',
'title' => '短信接口',
'version' => '2.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'provider', 'title' => '短信接口', 'fields' => [
['key' => 'sms_sdk', 'label' => '设置短信接口', 'type' => 'select', 'default' => 'null', 'options' => [
['label' => '不使用', 'value' => 'null'],
['label' => '阿里云短信', 'value' => 'ali'],
['label' => '腾讯云短信', 'value' => 'tencent'],
['label' => '短信宝', 'value' => 'smsbao'],
]],
['key' => 'sms_number_limit_ch', 'label' => '限制国内手机号', 'type' => 'switch', 'default' => true, 'desc' => '开启后只允许发送到中国大陆手机号'],
['key' => 'sms_test_phone', 'label' => '测试手机号', 'type' => 'input', 'default' => '', 'ui_only' => true, 'help' => '保存接口配置后,发送固定验证码 888888 测试短信'],
['key' => 'sms_test_send', 'label' => '发送测试短信', 'type' => 'button', 'buttonType' => 'primary', 'buttonText' => '发送测试短信', 'ui_only' => true],
]],
['key' => 'aliyun', 'title' => '阿里云', 'collapsible' => true, 'defaultCollapsed' => true, 'fields' => [
['key' => 'sms_ali_api_type', 'label' => '产品', 'type' => 'radio', 'default' => 'sms', 'options' => [
['label' => '短信服务', 'value' => 'sms'],
['label' => '号码认证:短信认证服务', 'value' => 'verify'],
], 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'ali']],
['key' => 'sms_ali_keyid', 'label' => 'AccessKey Id', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'ali']],
['key' => 'sms_ali_keysecret', 'label' => 'AccessKey Secret', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'ali']],
['key' => 'sms_ali_sign_name', 'label' => '签名', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'ali']],
['key' => 'sms_ali_template_code', 'label' => '模板 CODE', 'type' => 'input', 'default' => '', 'dependsOn' => ['all' => [['key' => 'sms_sdk', 'value' => 'ali'], ['key' => 'sms_ali_api_type', 'not' => true, 'value' => 'verify']]], 'help' => '短信服务需要填写。号码认证产品固定使用平台模板'],
['key' => 'sms_region_id', 'label' => 'RegionId', 'type' => 'input', 'default' => 'cn-hangzhou', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'ali']],
]],
['key' => 'tencent', 'title' => '腾讯云', 'collapsible' => true, 'defaultCollapsed' => true, 'fields' => [
['key' => 'sms_tencent_app_id', 'label' => 'SDK AppID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'tencent']],
['key' => 'sms_tencent_app_key', 'label' => 'App Key', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'tencent']],
['key' => 'sms_tencent_sign_name', 'label' => '签名', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'tencent']],
['key' => 'sms_tencent_template_id', 'label' => '模板 ID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'tencent'], 'help' => '模板包含验证码和有效分钟数两个参数'],
]],
['key' => 'smsbao', 'title' => '短信宝', 'collapsible' => true, 'defaultCollapsed' => true, 'fields' => [
['key' => 'sms_smsbao_username', 'label' => '用户名', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'smsbao']],
['key' => 'sms_smsbao_password', 'label' => '密码', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'smsbao']],
['key' => 'sms_smsbao_api_key', 'label' => 'ApiKey', 'type' => 'input', 'inputType' => 'password', 'secret' => true, 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'smsbao'], 'help' => '可选;填写后以 ApiKey 认证,可与密码任选其一'],
['key' => 'sms_smsbao_template', 'label' => '模板内容', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_sdk', 'value' => 'smsbao'], 'help' => '必须包含 {code},有效时间变量为 {time}'],
]],
],
],
'credits' => [
'key' => 'credits',
'title' => '积分设置',
'version' => '1.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'basic', 'title' => '积分基础', 'fields' => [
['key' => 'points_s', 'label' => '启用积分系统', 'type' => 'switch', 'default' => true],
['key' => 'points_name', 'label' => '积分名称', 'type' => 'input', 'default' => '积分'],
['key' => 'points_decimal', 'label' => '积分小数位数', 'type' => 'number', 'default' => 2, 'min' => 0, 'max' => 4],
]],
['key' => 'earn', 'title' => '积分获取 / 任务', 'fields' => [
['key' => 'points_earn_daily_limit', 'label' => '每日免费积分上限', 'type' => 'number', 'default' => 50, 'min' => 0, 'max' => 9999, 'help' => '0为不限制;免费任务合计'],
['key' => 'points_free_sign_up', 'label' => '注册奖励', 'type' => 'number', 'default' => 10, 'min' => 0, 'max' => 10000],
['key' => 'points_free_sign_in', 'label' => '签到展示分值', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 1000],
['key' => 'points_free_login', 'label' => '每日登录', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 100],
['key' => 'points_free_post_new', 'label' => '发布文章', 'type' => 'number', 'default' => 5, 'min' => 0, 'max' => 1000],
['key' => 'points_free_post_like', 'label' => '文章被赞', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 100],
['key' => 'points_free_post_favorite', 'label' => '文章被收藏', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 100],
['key' => 'points_free_comment_new', 'label' => '发表评论', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 100],
['key' => 'points_free_comment_like', 'label' => '评论被赞', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 100],
['key' => 'points_free_followed', 'label' => '被关注', 'type' => 'number', 'default' => 1, 'min' => 0, 'max' => 100],
]],
['key' => 'spend', 'title' => '积分消费', 'fields' => [
['key' => 'points_spend_comment', 'label' => '评论消耗', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100],
['key' => 'points_spend_download', 'label' => '下载消耗', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100],
['key' => 'points_spend_view_hidden', 'label' => '查看隐藏内容消耗', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100],
]],
['key' => 'transfer', 'title' => '积分转账', 'fields' => [
['key' => 'points_transfer_s', 'label' => '启用积分转账', 'type' => 'switch', 'default' => false],
['key' => 'points_service_charge', 'label' => '转账手续费(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 50],
['key' => 'points_transfer_min', 'label' => '最低转账金额', 'type' => 'number', 'default' => 1, 'min' => 1, 'max' => 9999],
]],
['key' => 'deduction', 'title' => '积分抵扣(预留)', 'fields' => [
['key' => 'points_deduction_s', 'label' => '启用积分抵扣', 'type' => 'switch', 'default' => false, 'help' => '对齐 legacy:运行时暂未启用。字段保留供后续接收银台现金单抵扣。'],
['key' => 'points_deduction_rate', 'label' => '积分换算比例', 'type' => 'number', 'default' => 100, 'min' => 1, 'max' => 10000, 'help' => '多少积分抵 1 元(legacy points_deduction_rate)。当前未参与下单。'],
['key' => 'points_deduction_max', 'label' => '最大抵扣比例(%)', 'type' => 'number', 'default' => 50, 'min' => 1, 'max' => 100, 'help' => '预留:最多可抵订单金额百分比。当前未参与下单。'],
]],
['key' => 'display', 'title' => '展示设置', 'fields' => [
['key' => 'points_show_balance', 'label' => '导航栏显示余额', 'type' => 'switch', 'default' => true],
['key' => 'points_show_log', 'label' => '显示积分记录', 'type' => 'switch', 'default' => true],
['key' => 'points_expire_days', 'label' => '积分有效期(天)', 'type' => 'number', 'default' => 0, 'min' => 0, 'help' => '0为永久有效'],
]],
],
],
'features' => [
'key' => 'features',
'title' => '用户功能',
'version' => '1.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'profile-media', 'title' => '用户资料', 'fields' => [
['key' => 'avatar_upload_s', 'label' => '允许用户上传头像', 'type' => 'switch', 'default' => true],
['key' => 'avatar_external', 'label' => '外部头像源', 'type' => 'radio', 'default' => '', 'options' => [
['label' => '关闭', 'value' => ''],
['label' => 'Gravatar', 'value' => 'gravatar'],
['label' => 'WeAvatar', 'value' => 'weavatar'],
['label' => 'Cravatar', 'value' => 'cravatar'],
['label' => '极客族 Gravatar 服务', 'value' => 'geekzu'],
['label' => 'loli Gravatar 服务', 'value' => 'loli'],
['label' => 'sep.cc Gravatar 服务', 'value' => 'sep'],
['label' => 'v2ex Gravatar 服务', 'value' => 'v2ex'],
], 'help' => '启用后,用户没有自定义头像时按邮箱获取外部头像。'],
['key' => 'avatar_default_img', 'label' => '用户默认头像', 'type' => 'media', 'default' => get_theme_file_uri('assets/img/avatar-default.png'), 'help' => '建议尺寸 100×100。'],
['key' => 'user_cover_upload_s', 'label' => '允许用户上传封面', 'type' => 'switch', 'default' => true],
['key' => 'user_cover_img', 'label' => '用户默认封面', 'type' => 'media', 'default' => get_theme_file_uri('assets/img/user_t.jpg'), 'help' => '建议尺寸 1000×400;用户未设置封面时显示此图。'],
['key' => 'user_desc_std', 'label' => '用户默认签名', 'type' => 'input', 'default' => '这家伙很懒,什么都没有写...', 'help' => '用户未设置个人简介时显示的默认文案。'],
]],
['key' => 'rewards', 'title' => '打赏', 'fields' => [
['key' => 'post_rewards_s', 'label' => '用户打赏功能', 'type' => 'switcher', 'default' => true, 'help' => '开启后,登录用户可使用站内余额赞赏作者,金额直接进入作者余额。'],
['key' => 'post_rewards_text', 'label' => '打赏按钮文案', 'type' => 'input', 'default' => '赞赏', 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true], 'help' => '自定义打赏按钮文字'],
['key' => 'post_rewards_amounts', 'label' => '快捷金额', 'type' => 'input', 'default' => '5,10,20,50,100', 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true], 'help' => '使用英文逗号分隔'],
['key' => 'post_rewards_custom', 'label' => '允许自定义金额', 'type' => 'switcher', 'default' => true, 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true]],
['key' => 'post_rewards_min', 'label' => '最低金额', 'type' => 'input', 'sanitize_type' => 'money_decimal', 'default' => '1.00', 'min' => 0.01, 'max' => 1000, 'step' => 0.01, 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true]],
['key' => 'post_rewards_max', 'label' => '最高金额', 'type' => 'input', 'sanitize_type' => 'money_decimal', 'default' => '1000.00', 'min' => 1, 'max' => 100000, 'step' => 0.01, 'dependsOn' => ['key' => 'post_rewards_s', 'value' => true]],
]],
],
],
'verify' => [
'key' => 'verify',
'title' => '身份认证',
'version' => '2.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'apply', 'title' => '申请设置', 'fields' => [
['key' => 'user_auth_s', 'label' => '启用身份认证', 'type' => 'switch', 'default' => true],
['key' => 'user_auth_apply_s', 'label' => '允许用户前台申请', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'user_auth_s', 'value' => true]],
['key' => 'user_auth_apply_disable_desc', 'label' => '停用申请说明', 'type' => 'textarea', 'default' => "由于系统正在维护,暂时无法申请身份认证\n详情请联系管理员", 'dependsOn' => ['key' => 'user_auth_apply_s', 'value' => false]],
['key' => 'user_auth_apply_limit_level', 'label' => '申请最低用户等级', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 30, 'desc' => '设置为 0 时不限制用户等级。', 'dependsOn' => ['key' => 'user_auth_apply_s', 'value' => true]],
['key' => 'user_auth_apply_desc', 'label' => '申请介绍', 'type' => 'textarea', 'sanitize_type' => 'html', 'default' => '请填写认证身份、简介和申请说明,提交后由管理员审核。', 'dependsOn' => ['key' => 'user_auth_apply_s', 'value' => true]],
]],
],
],
'level' => [
'key' => 'level',
'title' => '用户等级',
'version' => '2.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'display', 'title' => '等级显示', 'fields' => [
['key' => 'user_level_s', 'label' => '启用用户等级', 'type' => 'switch', 'default' => true],
['key' => 'user_level_public_display', 'label' => '公开页显示等级', 'type' => 'switch', 'default' => true],
['key' => 'user_level_max', 'label' => '最高等级', 'type' => 'number', 'default' => 10, 'min' => 3, 'max' => 30],
['key' => 'user_level_notify', 'label' => '升级通知', 'type' => 'switch', 'default' => true],
]],
['key' => 'level_opt', 'title' => '升级阈值', 'fields' => [
['key' => 'user_level_opt', 'label' => '等级参数', 'type' => 'json', 'sanitize_type' => 'array', 'default' => self::default_level_options(), 'help' => 'name_N / icon_img_N / upgrade_integral_N'],
]],
['key' => 'integral', 'title' => '经验值得分', 'fields' => [
['key' => 'user_integral_opt', 'label' => '经验值配置', 'type' => 'json', 'sanitize_type' => 'array', 'default' => self::default_integral_options(), 'help' => 'day_max + 行为得分键'],
]],
],
],
'badge' => [
'key' => 'badge',
'title' => '用户徽章',
'version' => '2.0.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'display', 'title' => '徽章展示', 'fields' => [
['key' => 'user_medal_s', 'label' => '启用徽章/勋章系统', 'type' => 'switch', 'default' => false],
['key' => 'user_medal_public_display', 'label' => '公开页显示徽章', 'type' => 'switch', 'default' => true],
['key' => 'user_medal_limit', 'label' => '最多显示数量', 'type' => 'number', 'default' => 3, 'min' => 1, 'max' => 8],
]],
['key' => 'catalog', 'title' => '徽章明细', 'fields' => [
[
'key' => 'user_medal_args',
'label' => '分类与条目',
'type' => 'json',
'default' => self::default_medal_args(),
'help' => '结构化目录:分类 → 条目(slug/name/desc/icon/get_type/get_val)。由 SPA UsersBadge 编辑。',
],
]],
],
],
'report' => [
'key' => 'report',
'title' => '禁封/举报',
'version' => '1.1.0',
'option_key' => 'aksrt_settings',
'groups' => [
// 字段集合、顺序、文案、默认值 1:1 对齐参考主题"用户&互动/禁封举报"
['key' => 'main', 'title' => '', 'fields' => [
['key' => 'user_ban_s', 'label' => '禁封功能', 'type' => 'switch', 'default' => true, 'help' => '启用后可以设置用户禁封,即小黑屋和封号的功能'],
['key' => 'user_report_s', 'label' => '举报功能', 'type' => 'switch', 'default' => true, 'help' => '前台显示举报按钮,用户可以举报其它不良信息', 'dependsOn' => ['key' => 'user_ban_s', 'value' => true]],
[
'key' => 'ban_preset_reason',
'label' => '预置原因',
'type' => 'group',
'button_title' => '添加原因',
'help' => '举报/禁封的时候可选择的原因',
'default' => [
['t' => '发布色情、违法内容'],
['t' => '存在欺诈骗钱行为'],
['t' => '骚扰他人'],
['t' => '涉嫌侵权'],
['t' => '发布垃圾广告信息'],
],
'fields' => [
['key' => 't', 'label' => '原因', 'type' => 'input', 'default' => ''],
],
],
['key' => 'ban_appeal_desc', 'label' => '申诉说明', 'type' => 'textarea', 'rows' => 5, 'help' => '用户申诉时候显示的内容(支持HTML代码,请注意代码规范)', 'default' => "<div>为了良好的交流环境,申诉请阅读以下事项</div>\n<li>首次违规将拉入小黑屋7天</li>\n<li>3次违规后将直接禁封账号</li>\n<li>违规情节严重将无法提交申诉</li>\n<li>申诉提交后约2-3个工作日进行审核</li>\n<li>如有其它疑问请与客服联系</li>"],
[
'key' => 'ban_appeal_keys',
'label' => '申诉所需资料',
'type' => 'group',
'button_title' => '添加申诉资料',
'help' => '用户提交申诉时候需要提供的资料;此处的信息收集,仅用于记录和申诉审核',
'default' => [
['t' => '真实姓名'],
['t' => '邮箱'],
['t' => '手机号'],
],
'fields' => [
['key' => 't', 'label' => '资料项', 'type' => 'input', 'default' => ''],
],
],
['key' => 'user_report_img_s', 'label' => '举报可上传图片', 'type' => 'switch', 'default' => true, 'help' => '举报时允许上传图片进行举证(最多上传3张)', 'dependsOn' => ['key' => 'user_report_s', 'value' => true]],
['key' => 'user_report_desc', 'label' => '举报说明', 'type' => 'textarea', 'rows' => 5, 'help' => '举报时候显示的内容(支持HTML代码,请注意代码规范)', 'dependsOn' => ['key' => 'user_report_s', 'value' => true], 'default' => "<div>举报说明:</div>\n<li>请确保举报的内容属实</li>\n<li>我们将会在收到举报后2个工作日内进行处理</li>\n<li>举报属实我们将根据社区管理条例对该用户进行封号处理</li>\n<li>如有其它疑问请与客服联系</li>"],
]],
],
],
],
];
}
}