From e0cd3d11c30c4330640f6ad9f2791efa2221d3fe Mon Sep 17 00:00:00 2001 From: Penar Musaraj Date: Thu, 1 Jun 2023 11:50:50 -0400 Subject: [PATCH] FIX: Respect "display name on posts" site setting (#239) When displaying the accepted answer in the OP. --- .../initializers/extend-for-solved-button.js | 9 ++++++- plugin.rb | 6 +++-- spec/requests/topics_controller_spec.rb | 26 +++++++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/assets/javascripts/discourse/initializers/extend-for-solved-button.js b/assets/javascripts/discourse/initializers/extend-for-solved-button.js index 49c2e07..6f61aa8 100644 --- a/assets/javascripts/discourse/initializers/extend-for-solved-button.js +++ b/assets/javascripts/discourse/initializers/extend-for-solved-button.js @@ -57,6 +57,7 @@ function acceptPost(post) { topic.set("accepted_answer", { username: post.username, + name: post.name, post_number: post.post_number, excerpt: post.cooked, }); @@ -214,16 +215,22 @@ export default { // keeping this here cause there is complex localization acceptedAnswerHtml: computed("accepted_answer", "id", function () { const username = this.get("accepted_answer.username"); + const name = this.get("accepted_answer.name"); const postNumber = this.get("accepted_answer.post_number"); if (!username || !postNumber) { return ""; } + const displayedUser = + this.siteSettings.display_name_on_posts && name + ? name + : formatUsername(username); + return I18n.t("solved.accepted_html", { icon: iconHTML("check-square", { class: "accepted" }), username_lower: username.toLowerCase(), - username: formatUsername(username), + username: displayedUser, post_path: `${this.url}/${postNumber}`, post_number: postNumber, user_path: User.create({ username }).path, diff --git a/plugin.rb b/plugin.rb index d2b8a37..e92ac88 100644 --- a/plugin.rb +++ b/plugin.rb @@ -444,7 +444,7 @@ def include_accepted_answer? def accepted_answer if info = accepted_answer_post_info - { post_number: info[0], username: info[1], excerpt: info[2] } + { post_number: info[0], username: info[1], excerpt: info[2], name: info[3] } end end @@ -454,7 +454,7 @@ def accepted_answer_post_info Post .where(id: accepted_answer_post_id, topic_id: object.topic.id) .joins(:user) - .pluck("post_number", "username", "cooked") + .pluck("post_number", "username", "cooked", "name") .first if postInfo @@ -463,6 +463,8 @@ def accepted_answer_post_info else nil end + + postInfo[3] = SiteSetting.display_name_on_posts ? postInfo[3] : nil postInfo end end diff --git a/spec/requests/topics_controller_spec.rb b/spec/requests/topics_controller_spec.rb index 379160b..71f8613 100644 --- a/spec/requests/topics_controller_spec.rb +++ b/spec/requests/topics_controller_spec.rb @@ -64,6 +64,32 @@ def schema_json(answerCount) expect(response.body).to include('"text":"This is a quoted text."') end + + it "should include user name in output with the corresponding site setting" do + SiteSetting.display_name_on_posts = true + p2.custom_fields["is_accepted_answer"] = true + p2.save_custom_fields + topic.custom_fields["accepted_answer_post_id"] = p2.id + topic.save_custom_fields + + get "/t/#{topic.slug}/#{topic.id}.json" + + expect(response.parsed_body["accepted_answer"]["name"]).to eq(p2.user.name) + expect(response.parsed_body["accepted_answer"]["username"]).to eq(p2.user.username) + end + + it "should not include user name when site setting is disabled" do + SiteSetting.display_name_on_posts = false + p2.custom_fields["is_accepted_answer"] = true + p2.save_custom_fields + topic.custom_fields["accepted_answer_post_id"] = p2.id + topic.save_custom_fields + + get "/t/#{topic.slug}/#{topic.id}.json" + + expect(response.parsed_body["accepted_answer"]["name"]).to eq(nil) + expect(response.parsed_body["accepted_answer"]["username"]).to eq(p2.user.username) + end end context "with solved enabled for topics with specific tags" do