fix(admin): replicate reference front-submit settings page 1:1
- Rewrite post_list/submit schema (PHP + JS) with the reference theme's field set, order, defaults and dependencies; topics fields excluded - Map PostDisplay::get_submit_settings() and the FrontSubmit runtime to the new keys without legacy fallback - Guest submission follows the capability matrix; category required on submit; pay limits read from the cash/points fieldset - Drop dead front_submit_* settings, template branches and JS config - Add submit settings reference contract test
This commit is contained in:
@@ -297,65 +297,43 @@ class PostDisplay {
|
||||
public static function get_submit_settings(): array {
|
||||
$settings = Settings::get_all();
|
||||
|
||||
$money_setting = static function ($value, string $default): string {
|
||||
if (!is_string($value)) {
|
||||
return $default;
|
||||
}
|
||||
try {
|
||||
return \AKSRT\Ledger\AssetAmount::balance($value)->decimal();
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
return $default;
|
||||
}
|
||||
};
|
||||
|
||||
$title_min = max(1, min(100, (int) ($settings['post_article_title_strlen_limit_min'] ?? 5)));
|
||||
$title_max = max(5, min(200, (int) ($settings['post_article_title_strlen_limit_max'] ?? 30)));
|
||||
$title_limit = is_array($settings['post_article_title_strlen_limit'] ?? null)
|
||||
? $settings['post_article_title_strlen_limit']
|
||||
: [];
|
||||
$title_min = max(1, min(100, (int) ($title_limit['min'] ?? 5)));
|
||||
$title_max = max(5, min(200, (int) ($title_limit['max'] ?? 30)));
|
||||
if ($title_max < $title_min) {
|
||||
$title_max = $title_min;
|
||||
}
|
||||
|
||||
$review_mode = sanitize_key((string) ($settings['front_submit_review_mode'] ?? 'pending'));
|
||||
if (!in_array($review_mode, ['pending', 'publish', 'draft'], true)) {
|
||||
$review_mode = 'pending';
|
||||
}
|
||||
|
||||
$editor_mode = sanitize_key((string) ($settings['front_submit_editor_mode'] ?? 'rich'));
|
||||
if (!in_array($editor_mode, ['rich', 'markdown', 'plain'], true)) {
|
||||
$editor_mode = 'rich';
|
||||
}
|
||||
// 付费金额限制:现金/积分各自独立,0 表示不限制。
|
||||
$pay_price_limit = is_array($settings['post_article_pay_price_limit'] ?? null)
|
||||
? $settings['post_article_pay_price_limit']
|
||||
: [];
|
||||
$cash_limit = is_array($pay_price_limit['price'] ?? null) ? $pay_price_limit['price'] : [];
|
||||
$points_limit = is_array($pay_price_limit['points'] ?? null) ? $pay_price_limit['points'] : [];
|
||||
|
||||
return [
|
||||
'enabled' => !isset($settings['front_submit_enabled']) || !empty($settings['front_submit_enabled']),
|
||||
'enabled' => !isset($settings['post_article_s']) || !empty($settings['post_article_s']),
|
||||
'btn_text' => sanitize_text_field((string) ($settings['post_article_btn_txte'] ?? '')) ?: __('发布文章', 'aksrt'),
|
||||
'title_min' => $title_min,
|
||||
'title_max' => $title_max,
|
||||
'title_placeholder' => sanitize_text_field((string) ($settings['post_t_placeholder'] ?? '')) ?: __('请输入标题', 'aksrt'),
|
||||
'content_placeholder' => sanitize_textarea_field((string) ($settings['post_c_placeholder'] ?? '')) ?: __('请输入内容', 'aksrt'),
|
||||
'allowed_cat_ids' => is_array($settings['post_article_cat'] ?? null) ? array_values(array_filter(array_map('intval', $settings['post_article_cat']))) : [],
|
||||
'default_user_id' => max(0, (int) ($settings['post_article_user'] ?? 0)),
|
||||
'guest_enabled' => !empty($settings['front_submit_guest_enabled']),
|
||||
'allow_title' => !isset($settings['front_submit_title']) || !empty($settings['front_submit_title']),
|
||||
'allow_content' => !isset($settings['front_submit_content']) || !empty($settings['front_submit_content']),
|
||||
'allow_excerpt' => !isset($settings['front_submit_excerpt']) || !empty($settings['front_submit_excerpt']),
|
||||
'allow_cover' => !isset($settings['front_submit_cover']) || !empty($settings['front_submit_cover']),
|
||||
'allow_category' => !isset($settings['front_submit_category']) || !empty($settings['front_submit_category']),
|
||||
'allow_tags' => !isset($settings['front_submit_tags']) || !empty($settings['front_submit_tags']),
|
||||
'tags_s' => !isset($settings['front_submit_tags']) || !empty($settings['front_submit_tags']),
|
||||
'cover_required' => !empty($settings['front_submit_cover_required']),
|
||||
'max_images' => max(0, min(50, (int) ($settings['front_submit_max_images'] ?? 5))),
|
||||
'review_mode' => $review_mode,
|
||||
'editor_mode' => $editor_mode,
|
||||
'draft_save' => !isset($settings['front_submit_draft_save']) || !empty($settings['front_submit_draft_save']),
|
||||
'leave_warning' => !isset($settings['front_submit_leave_warning']) || !empty($settings['front_submit_leave_warning']),
|
||||
'default_user_id' => max(0, (int) ($settings['post_article_user'] ?? 1)),
|
||||
'allow_tags' => !isset($settings['post_article_tag']) || !empty($settings['post_article_tag']),
|
||||
'custom_filter_s' => !isset($settings['post_article_custom_filter_s']) || !empty($settings['post_article_custom_filter_s']),
|
||||
'pay_free_s' => !isset($settings['post_article_pay_free_s']) || !empty($settings['post_article_pay_free_s']),
|
||||
'pay_price_min' => $money_setting($settings['post_article_pay_price_min'] ?? '0.00', '0.00'),
|
||||
'pay_price_max' => $money_setting($settings['post_article_pay_price_max'] ?? '100.00', '100.00'),
|
||||
'pay_price_min' => max(0, (int) ($cash_limit['min'] ?? 0)),
|
||||
'pay_price_max' => max(0, (int) ($cash_limit['max'] ?? 0)),
|
||||
'pay_points_min' => max(0, (int) ($points_limit['min'] ?? 0)),
|
||||
'pay_points_max' => max(0, (int) ($points_limit['max'] ?? 0)),
|
||||
'pay_vip_price_s' => !isset($settings['post_article_pay_vip_price_s']) || !empty($settings['post_article_pay_vip_price_s']),
|
||||
'pay_vip_1_enabled' => !empty($settings['pay_user_vip_1_s']),
|
||||
'pay_vip_2_enabled' => !empty($settings['pay_user_vip_2_s']),
|
||||
'pay_vip_1_discount' => max(0, min(100, (int) ($settings['post_article_pay_vip_1_discount'] ?? 80))),
|
||||
'pay_vip_2_discount' => max(0, min(100, (int) ($settings['post_article_pay_vip_2_discount'] ?? 50))),
|
||||
'custom_filter_s' => !isset($settings['post_article_custom_filter_s']) || !empty($settings['post_article_custom_filter_s']),
|
||||
'pay_vip_1_discount' => max(0, min(100, (int) ($settings['post_article_pay_vip_1_discount'] ?? 100))),
|
||||
'pay_vip_2_discount' => max(0, min(100, (int) ($settings['post_article_pay_vip_2_discount'] ?? 100))),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user