feat(ux): forum pay-hide depth, clogin OAuth, ban appeals admin, posts-navs widget

- Forum compose/save/draft: VIP prices, partial hide, coupons + shortcode tools
- Rainbow clogin aggregate login (rewrite + schema + CLoginClient)
- Native ban appeals tab: approve/reject + lift ban + notify
- WidgetPostsNavs + register missing forum widgets
- Submit editor shortcodes: login/reply/vip/payshow
This commit is contained in:
kate522 committed 2026-07-18 23:31:57 +08:00
1 parent 25aabb71a3
commit 24330653f0
15 files changed
+834 -35

No files matched your search

+35 -1
View File
@@ -94,10 +94,38 @@ trait TopicServicePart4 {
if (isset($this->get_visibility_map()[$visibility])) {
update_post_meta($topic_id, '_aksrt_visibility', $visibility);
if ($visibility === self::VISIBILITY_CREDITS) {
update_post_meta($topic_id, '_aksrt_credits_cost', max(0, (int) ($_POST['credits_cost'] ?? 0)));
$cost = max(0, (int) ($_POST['credits_cost'] ?? 0));
update_post_meta($topic_id, '_aksrt_credits_cost', $cost);
update_post_meta($topic_id, '_aksrt_pay_credits', $cost);
if (isset($_POST['credits_vip1']) && (string) $_POST['credits_vip1'] !== '') {
update_post_meta($topic_id, '_aksrt_credits_vip1', max(0, (int) $_POST['credits_vip1']));
} else {
delete_post_meta($topic_id, '_aksrt_credits_vip1');
}
if (isset($_POST['credits_vip2']) && (string) $_POST['credits_vip2'] !== '') {
update_post_meta($topic_id, '_aksrt_credits_vip2', max(0, (int) $_POST['credits_vip2']));
} else {
delete_post_meta($topic_id, '_aksrt_credits_vip2');
}
update_post_meta($topic_id, '_aksrt_pay_hide_part', !empty($_POST['pay_hide_part']) ? 1 : 0);
}
if ($visibility === self::VISIBILITY_PAY) {
update_post_meta($topic_id, '_aksrt_pay_price', sanitize_text_field((string) ($_POST['pay_price'] ?? '')));
if (isset($_POST['pay_vip1_price']) && (string) $_POST['pay_vip1_price'] !== '') {
$v1 = max(0, (float) $_POST['pay_vip1_price']);
update_post_meta($topic_id, '_aksrt_pay_vip1_price', $v1);
update_post_meta($topic_id, '_aksrt_pay_vip_price', $v1);
} else {
delete_post_meta($topic_id, '_aksrt_pay_vip1_price');
delete_post_meta($topic_id, '_aksrt_pay_vip_price');
}
if (isset($_POST['pay_vip2_price']) && (string) $_POST['pay_vip2_price'] !== '') {
update_post_meta($topic_id, '_aksrt_pay_vip2_price', max(0, (float) $_POST['pay_vip2_price']));
} else {
delete_post_meta($topic_id, '_aksrt_pay_vip2_price');
}
update_post_meta($topic_id, '_aksrt_pay_hide_part', !empty($_POST['pay_hide_part']) ? 1 : 0);
update_post_meta($topic_id, '_aksrt_topic_coupon_s', !empty($_POST['topic_coupon_s']) ? 1 : 0);
}
if ($visibility === self::VISIBILITY_ROLE) {
$roles = isset($_POST['visibility_roles']) && is_array($_POST['visibility_roles'])
@@ -227,6 +255,12 @@ trait TopicServicePart4 {
'featured_video' => esc_url_raw((string) ($_POST['featured_video'] ?? '')),
'credits_cost' => (int) ($_POST['credits_cost'] ?? 0),
'pay_price' => sanitize_text_field((string) ($_POST['pay_price'] ?? '')),
'credits_vip1' => isset($_POST['credits_vip1']) ? sanitize_text_field((string) $_POST['credits_vip1']) : '',
'credits_vip2' => isset($_POST['credits_vip2']) ? sanitize_text_field((string) $_POST['credits_vip2']) : '',
'pay_vip1_price' => isset($_POST['pay_vip1_price']) ? sanitize_text_field((string) $_POST['pay_vip1_price']) : '',
'pay_vip2_price' => isset($_POST['pay_vip2_price']) ? sanitize_text_field((string) $_POST['pay_vip2_price']) : '',
'pay_hide_part' => !empty($_POST['pay_hide_part']),
'topic_coupon_s' => !empty($_POST['topic_coupon_s']),
'visibility_roles' => isset($_POST['visibility_roles']) && is_array($_POST['visibility_roles'])
? array_map('sanitize_key', $_POST['visibility_roles']) : [],
];