diff --git a/extend.php b/extend.php index fa0df14..5f6ac4e 100644 --- a/extend.php +++ b/extend.php @@ -89,13 +89,12 @@ ->default('fof-best-answer.store_log_output', false) ->default('fof-best-answer.enabled-tags', '[]') ->default('fof-best-answer.search.solution_search', true) + ->default('fof-best-answer.search.display_tags', true) ->default('fof-best-answer.discussion_sidebar_jump_button', false) - ->serializeToForum('canSelectBestAnswerOwnPost', 'fof-best-answer.allow_select_own_post', 'boolVal') - ->serializeToForum('useAlternativeBestAnswerUi', 'fof-best-answer.use_alternative_ui', 'boolVal') - ->serializeToForum('showBestAnswerFilterUi', 'fof-best-answer.show_filter_dropdown', 'boolVal') - ->serializeToForum('fof-best-answer.show_max_lines', 'fof-best-answer.show_max_lines', 'intVal') - ->serializeToForum('solutionSearchEnabled', 'fof-best-answer.search.solution_search', 'boolVal') - ->serializeToForum('bestAnswerDiscussionSidebarJumpButton', 'fof-best-answer.discussion_sidebar_jump_button', 'boolVal'), + ->serializeToForum('fof-best-answer.show_max_lines', 'fof-best-answer.show_max_lines', 'intVal'), + + (new Extend\ApiSerializer(Serializer\ForumSerializer::class)) + ->attributes(ForumAttributes::class), (new Extend\ApiController(ShowDiscussionController::class)) ->addInclude(['bestAnswerPost', 'bestAnswerUser']) diff --git a/js/src/admin/components/BestAnswerSettingsPage.tsx b/js/src/admin/components/BestAnswerSettingsPage.tsx index 29f7a07..bab1dc5 100644 --- a/js/src/admin/components/BestAnswerSettingsPage.tsx +++ b/js/src/admin/components/BestAnswerSettingsPage.tsx @@ -84,6 +84,12 @@ export default class BestAnswerSettingsPage extends ExtensionPage { label: app.translator.trans('fof-best-answer.admin.settings.solution_search'), help: app.translator.trans('fof-best-answer.admin.settings.solution_search_help'), })} + {this.buildSettingComponent({ + type: 'boolean', + setting: 'fof-best-answer.search.display_tags', + label: app.translator.trans('fof-best-answer.admin.settings.display_tags'), + help: app.translator.trans('fof-best-answer.admin.settings.display_tags_help'), + })}

{app.translator.trans('fof-best-answer.admin.settings.label.reminders')}

diff --git a/js/src/forum/components/SolutionSearchItem.tsx b/js/src/forum/components/SolutionSearchItem.tsx index 0852078..a474442 100644 --- a/js/src/forum/components/SolutionSearchItem.tsx +++ b/js/src/forum/components/SolutionSearchItem.tsx @@ -59,7 +59,8 @@ export default class SolutionSearchItem extends Component { const items = new ItemList(); - items.add('tags',

{tagsLabel(this.tags)}
, 100); + app.forum.attribute('showTagsInSearchResults') && + items.add('tags',
{tagsLabel(this.tags)}
, 100); items.add('discussion-title',
{highlight(this.discussionTitle(), this.query)}
, 90); diff --git a/js/src/forum/components/SolutionSearchSource.tsx b/js/src/forum/components/SolutionSearchSource.tsx index 4fec5ad..79b3636 100644 --- a/js/src/forum/components/SolutionSearchSource.tsx +++ b/js/src/forum/components/SolutionSearchSource.tsx @@ -14,8 +14,10 @@ export default class SolutionSearchSource implements SearchSource { this.results.set(query, []); + const queryString = query + ' ' + this.queryMutators().join(' '); + const params = { - filter: { q: query + ' is:solved' }, + filter: { q: queryString }, page: { limit: this.limit() }, include: this.includes().join(','), }; @@ -60,4 +62,8 @@ export default class SolutionSearchSource implements SearchSource { limit(): number { return 3; } + + queryMutators(): string[] { + return ['is:solved']; + } } diff --git a/src/ForumAttributes.php b/src/ForumAttributes.php new file mode 100644 index 0000000..810cd18 --- /dev/null +++ b/src/ForumAttributes.php @@ -0,0 +1,48 @@ +settings = $settings; + } + + public function __invoke(ForumSerializer $serializer, $model, array $attributes): array + { + if ($value = $this->getBooleanSetting('fof-best-answer.search.solution_search')) { + $attributes['showTagsInSearchResults'] = $this->getBooleanSetting('fof-best-answer.search.display_tags'); + } + + $attributes['solutionSearchEnabled'] = $value; + $attributes['canSelectBestAnswerOwnPost'] = $this->getBooleanSetting('fof-best-answer.allow_select_own_post'); + $attributes['useAlternativeBestAnswerUi'] = $this->getBooleanSetting('fof-best-answer.use_alternative_ui'); + $attributes['showBestAnswerFilterUi'] = $this->getBooleanSetting('fof-best-answer.show_filter_dropdown'); + $attributes['bestAnswerDiscussionSidebarJumpButton'] = $this->getBooleanSetting('fof-best-answer.discussion_sidebar_jump_button'); + + return $attributes; + } + + protected function getBooleanSetting(string $key): bool + { + return (bool) $this->settings->get($key); + } +}