diff --git a/assets/admin/src/schema/sections/permissions/index.js b/assets/admin/src/schema/sections/permissions/index.js index 93d1be58..72245602 100644 --- a/assets/admin/src/schema/sections/permissions/index.js +++ b/assets/admin/src/schema/sections/permissions/index.js @@ -84,6 +84,7 @@ export const permissionsSchemas = { { label: '资源下载', value: 'download' }, { label: '每日签到', value: 'signin' }, { label: '前台投稿', value: 'front_submit' }, + { label: '论坛发帖', value: 'forum_post' }, { label: '打赏用户', value: 'tip_user' }, { label: '提交工单', value: 'ticket_create' }, { label: '回复工单', value: 'ticket_reply' }, diff --git a/assets/css/routes/forum.css b/assets/css/routes/forum.css index d5d155fd..3b9a9c12 100644 --- a/assets/css/routes/forum.css +++ b/assets/css/routes/forum.css @@ -51,6 +51,22 @@ } .quick-posts-box{border-radius:var(--main-radius);padding:15px} .quick-posts-box .title-theme{margin-bottom:10px} +.quick-input-group{padding:15px;border:1px solid var(--main-border-color);border-radius:var(--main-radius)} +.quick-posts-box .edit-posts-title{position:relative} +.quick-posts-box .edit-posts-title .line-form-line{display:none} +.quick-posts-box .edit-posts-title textarea{width:100%;color:var(--main-color);padding:0;margin-bottom:10px;font-weight:500;font-size:18px;border:0;border-bottom:1px solid var(--main-border-color);background:transparent;resize:none;outline:0} +.quick-posts-box .edit-posts-content textarea{outline:0!important;border:none;display:block;width:100%;padding:0;background:transparent;color:var(--main-color);resize:vertical;min-height:88px} +.quick-posts-box .preview .add,.quick-posts-box .preview .preview-item{width:90px;height:90px;border:1px dashed var(--main-border-color);background:none;margin:2px;border-radius:var(--main-radius);position:relative} +.quick-posts-box .preview .add:before{content:"+";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:28px;color:var(--muted-3-color)} +.quick-posts-box .drop-select .dropdown-menu{min-width:320px} +.quick-more-btns{color:var(--muted-color);position:relative;flex-wrap:wrap;gap:6px} +.quick-more-btns .drop-btn{padding:6px 4px;cursor:pointer} +.quick-more-btns .drop-select{position:relative} +.quick-posts-submit .but{padding:6px 5px;min-width:85px} +.quick-posts-submit .quick-captcha{margin-bottom:8px} +.hide-type-drop .select-drop-box .badg.active{--this-bg:var(--focus-color);--this-color:#fff} +.hide-type-drop textarea{margin-top:8px;width:100%} +.jio-forum__captcha{margin-bottom:15px} .forum-home .jio-widget-box{clear:both;background-color:var(--main-bg-color);padding:15px;box-shadow:0 0 10px var(--main-shadow);border-radius:var(--main-radius);margin-bottom:20px} .forum-home .jio-widget-box .btn-block{display:block;width:100%;text-align:center} .forum-home .jio-widget-box .title-theme{font-size:15px;font-weight:600} diff --git a/assets/js/forum-runtime.js b/assets/js/forum-runtime.js index 72d06722..dbf5885b 100644 --- a/assets/js/forum-runtime.js +++ b/assets/js/forum-runtime.js @@ -134,6 +134,21 @@ syncHidden('post_status', status.dataset.forumStatus) return } + const hideType = event.target.closest('[data-forum-hide-type]') + if (hideType) { + root.querySelectorAll('[data-forum-hide-type]').forEach((item) => item.classList.toggle('active', item === hideType)) + syncHidden('hide_type', hideType.dataset.forumHideType) + return + } + const topic = event.target.closest('[data-forum-topic],[data-forum-topic-none]') + if (topic) { + const name = topic.dataset.forumTopic || '' + root.querySelectorAll('[data-forum-topic],[data-forum-topic-none]').forEach((item) => item.classList.toggle('active', item === topic)) + syncHidden('topics', name) + const label = root.querySelector('[name="topics"]') + if (label) label.lastChild.textContent = name || '话题' + return + } const pick = event.target.closest('[data-forum-cover-pick]') if (pick) { root.querySelector('[data-forum-cover-file]')?.click() diff --git a/inc/modules/captcha.php b/inc/modules/captcha.php index 62c46ef6..f4d441b2 100644 --- a/inc/modules/captcha.php +++ b/inc/modules/captcha.php @@ -374,6 +374,7 @@ function jio_captcha_scenes(): array { 'download' => __('资源下载', 'jio'), 'signin' => __('每日签到', 'jio'), 'front_submit' => __('前台投稿', 'jio'), + 'forum_post' => __('论坛发帖', 'jio'), 'tip_user' => __('打赏用户', 'jio'), 'ticket_create' => __('提交工单', 'jio'), 'ticket_reply' => __('回复工单', 'jio'), diff --git a/src/Admin/Schema/SchemaPermissions.php b/src/Admin/Schema/SchemaPermissions.php index dba626e5..d15a5a76 100644 --- a/src/Admin/Schema/SchemaPermissions.php +++ b/src/Admin/Schema/SchemaPermissions.php @@ -80,6 +80,7 @@ class SchemaPermissions { ['label' => '资源下载', 'value' => 'download'], ['label' => '每日签到', 'value' => 'signin'], ['label' => '前台投稿', 'value' => 'front_submit'], + ['label' => '论坛发帖', 'value' => 'forum_post'], ['label' => '打赏用户', 'value' => 'tip_user'], ['label' => '提交工单', 'value' => 'ticket_create'], ['label' => '回复工单', 'value' => 'ticket_reply'], diff --git a/src/Forum/EditView.php b/src/Forum/EditView.php index c64709b5..b4979d4b 100644 --- a/src/Forum/EditView.php +++ b/src/Forum/EditView.php @@ -71,6 +71,12 @@ final class EditView { echo self::term_box('tags', '标签', Core::TAG, $tags, 'fa-tag'); echo self::type_box($type); echo self::vote_box($vote_options, $post); + echo self::hide_box($post); + if (!$post && function_exists('jio_render_captcha') && function_exists('jio_is_captcha_enabled_for') && jio_is_captcha_enabled_for('forum_post')) { + echo '
'; + } \Jio\WidgetSystem\WidgetAreas::render('forum_edit_sidebar'); echo ''; self::close(); @@ -150,6 +156,18 @@ final class EditView { return ''; } + /** Hidden-content composer: the block becomes a site visibility shortcode on save. */ + private static function hide_box(?\WP_Post $post): string { + $types = ''; + foreach (['logged' => '登录可见', 'reply' => '评论可见', 'vip1' => '会员可见', 'payshow' => '付费可见'] as $key => $label) { + $types .= '' . esc_html($label) . ''; + } + return ''; + } + /** @param string[] $options */ private static function vote_box(array $options, ?\WP_Post $post): string { $type = $post ? (string) get_post_meta($post->ID, '_jio_forum_type', true) : 'normal'; diff --git a/src/Forum/QuickPost.php b/src/Forum/QuickPost.php index 9a5cdbfc..0b1ef547 100644 --- a/src/Forum/QuickPost.php +++ b/src/Forum/QuickPost.php @@ -5,34 +5,96 @@ namespace Jio\Forum; defined('ABSPATH') || exit; final class QuickPost { - /** Inline "publish now" box shown on the configured home tab. */ + /** Inline "publish now" box shown on the configured home tab (reference layout). */ public static function render(): string { $user_id = get_current_user_id(); - if (!$user_id) { - return ''; + $post_name = (string) jio_get_setting('jio_forum_post_name', '帖子') ?: '帖子'; + $plate_name = (string) jio_get_setting('jio_forum_plate_name', '版块') ?: '版块'; + $topic_name = (string) jio_get_setting('jio_forum_topic_name', '话题') ?: '话题'; + $plates = get_posts(['post_type' => Core::PLATE, 'post_status' => 'publish', 'posts_per_page' => 200, 'orderby' => 'title', 'order' => 'ASC']); + if (!$plates) return ''; + + $html = ''; + } + + /** @param \WP_Post[] $plates */ + private static function plate_dropdown(array $plates, string $plate_name, int $user_id): string { $options = ''; foreach ($plates as $plate) { - $options .= ''; + $options .= '