This is an automated email from the ASF dual-hosted git repository. linkinstar pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/answer-plugins.git
commit e927626be59927715a96fd7abe86ced259921e49 Author: LinkinStars <linkins...@foxmail.com> AuthorDate: Wed Apr 23 10:42:10 2025 +0800 feat(reviewer-basic): add post review option selection --- reviewer-basic/basic.go | 58 +++++++++++++++++++++++++++++++++++--- reviewer-basic/i18n/en_US.yaml | 4 ++- reviewer-basic/i18n/translation.go | 1 + reviewer-basic/i18n/zh_CN.yaml | 2 ++ reviewer-basic/info.yaml | 2 +- 5 files changed, 61 insertions(+), 6 deletions(-) diff --git a/reviewer-basic/basic.go b/reviewer-basic/basic.go index e3f47e9..db37445 100644 --- a/reviewer-basic/basic.go +++ b/reviewer-basic/basic.go @@ -38,9 +38,16 @@ type Reviewer struct { Config *ReviewerConfig } +const ( + OptionNone = "none" + OptionAll = "all" + OptionFirst = "first" +) + type ReviewerConfig struct { PostAllNeedReview bool `json:"review_post_all"` PostNeedReview bool `json:"review_post"` + PostReviewOption string `json:"review_post_option"` PostReviewKeywords string `json:"review_post_keywords"` PostDisallowedKeywords string `json:"disallowed_keywords"` } @@ -73,8 +80,7 @@ func (r *Reviewer) Review(content *plugin.ReviewContent) (result *plugin.ReviewR return result } - // all post need review - if r.Config.PostAllNeedReview { + if r.Config.PostReviewOption == OptionAll || (r.Config.PostReviewOption == "" && r.Config.PostAllNeedReview) { result = &plugin.ReviewResult{ Approved: false, ReviewStatus: plugin.ReviewStatusNeedReview, @@ -83,8 +89,7 @@ func (r *Reviewer) Review(content *plugin.ReviewContent) (result *plugin.ReviewR return result } - // this switch is true and have any other approved post, return directly - if r.Config.PostNeedReview && content.Author.ApprovedQuestionAmount+content.Author.ApprovedAnswerAmount == 0 { + if (r.Config.PostReviewOption == OptionFirst || (r.Config.PostReviewOption == "" && r.Config.PostNeedReview)) && content.Author.ApprovedQuestionAmount+content.Author.ApprovedAnswerAmount == 0 { result = &plugin.ReviewResult{ Approved: false, ReviewStatus: plugin.ReviewStatusNeedReview, @@ -140,7 +145,40 @@ func (r *Reviewer) Review(content *plugin.ReviewContent) (result *plugin.ReviewR } func (r *Reviewer) ConfigFields() []plugin.ConfigField { + defaultOption := OptionNone + if r.Config.PostReviewOption == "" { + if r.Config.PostAllNeedReview { + defaultOption = OptionAll + } else if r.Config.PostNeedReview { + defaultOption = OptionFirst + } + } else { + defaultOption = r.Config.PostReviewOption + } + return []plugin.ConfigField{ + { + Name: "review_post_option", + Type: plugin.ConfigTypeSelect, + Title: plugin.MakeTranslator(i18n.ConfigReviewPostTitle), + Required: false, + UIOptions: plugin.ConfigFieldUIOptions{}, + Value: defaultOption, + Options: []plugin.ConfigFieldOption{ + { + Value: OptionNone, + Label: plugin.MakeTranslator(i18n.ConfigSelectOption), + }, + { + Value: OptionAll, + Label: plugin.MakeTranslator(i18n.ConfigReviewPostLabelAll), + }, + { + Value: OptionFirst, + Label: plugin.MakeTranslator(i18n.ConfigReviewPostLabelFirst), + }, + }, + }, { Name: "review_post_all", Type: plugin.ConfigTypeSwitch, @@ -180,6 +218,18 @@ func (r *Reviewer) ConfigFields() []plugin.ConfigField { func (r *Reviewer) ConfigReceiver(config []byte) error { c := &ReviewerConfig{} _ = json.Unmarshal(config, c) + + if c.PostReviewOption == OptionAll { + c.PostAllNeedReview = true + c.PostNeedReview = false + } else if c.PostReviewOption == OptionFirst { + c.PostAllNeedReview = false + c.PostNeedReview = true + } else if c.PostReviewOption == OptionNone { + c.PostAllNeedReview = false + c.PostNeedReview = false + } + r.Config = c return nil } diff --git a/reviewer-basic/i18n/en_US.yaml b/reviewer-basic/i18n/en_US.yaml index 2971d62..917a372 100644 --- a/reviewer-basic/i18n/en_US.yaml +++ b/reviewer-basic/i18n/en_US.yaml @@ -28,11 +28,13 @@ plugin: title: other: Before a post appears label_all: - other: Post must be manually approved + other: All new posts must be manually approved label_first: other: Post author must have a previously approved post description: other: Questions or answers will be held in the review queue and will not be visible until they are approved. + select_option: + other: Select... review_post_keywords: title: other: Review post keywords diff --git a/reviewer-basic/i18n/translation.go b/reviewer-basic/i18n/translation.go index 1289fbc..408dcde 100644 --- a/reviewer-basic/i18n/translation.go +++ b/reviewer-basic/i18n/translation.go @@ -26,6 +26,7 @@ const ( ConfigReviewPostLabelFirst = "plugin.basic_reviewer.backend.config.review_post.label_first" ConfigReviewPostTitle = "plugin.basic_reviewer.backend.config.review_post.title" ConfigReviewPostDescription = "plugin.basic_reviewer.backend.config.review_post.description" + ConfigSelectOption = "plugin.basic_reviewer.backend.config.review_post.select_option" ConfigReviewPostKeywordsTitle = "plugin.basic_reviewer.backend.config.review_post_keywords.title" ConfigReviewPostKeywordsDescription = "plugin.basic_reviewer.backend.config.review_post_keywords.description" ConfigDisallowedKeywordsTitle = "plugin.basic_reviewer.backend.config.disallowed_post_keywords.title" diff --git a/reviewer-basic/i18n/zh_CN.yaml b/reviewer-basic/i18n/zh_CN.yaml index 4d047a7..048e603 100644 --- a/reviewer-basic/i18n/zh_CN.yaml +++ b/reviewer-basic/i18n/zh_CN.yaml @@ -33,6 +33,8 @@ plugin: other: 内容发布者必须要有通过审核的帖子 description: other: 问题或答案将保存在审查队列中,在获得批准之前不可见。 + select_option: + other: 请选择... review_post_keywords: title: other: 审核帖子关键词 diff --git a/reviewer-basic/info.yaml b/reviewer-basic/info.yaml index da9f3e4..dbc8903 100644 --- a/reviewer-basic/info.yaml +++ b/reviewer-basic/info.yaml @@ -17,6 +17,6 @@ slug_name: basic_reviewer type: reviewer -version: 1.0.6 +version: 1.0.7 author: answerdev link: https://github.com/apache/answer-plugins/tree/main/reviewer-basic