From a4e9ee45525d5700161492ae07b04472c818b896 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 May 2015 16:26:22 +1000 Subject: [PATCH] first proof of concept, security still missing --- .../topic-after-cooked/solved-panel.hbs | 2 +- .../extend-for-solved-button.js.es6 | 22 ++++++++++++++++--- config/locales/client.en.yml | 6 +++++ plugin.rb | 4 ++-- 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 config/locales/client.en.yml diff --git a/assets/javascripts/discourse/connectors/topic-after-cooked/solved-panel.hbs b/assets/javascripts/discourse/connectors/topic-after-cooked/solved-panel.hbs index b0740e3..168f0f6 100644 --- a/assets/javascripts/discourse/connectors/topic-after-cooked/solved-panel.hbs +++ b/assets/javascripts/discourse/connectors/topic-after-cooked/solved-panel.hbs @@ -1,5 +1,5 @@ {{#if topic.accepted_answer}}

- Solved by {{topic.accepted_answer.username}} in post #{{topic.accepted_answer.post_number}} +{{{topic.acceptedAnswerHtml}}}

{{/if}} diff --git a/assets/javascripts/discourse/initializers/extend-for-solved-button.js.es6 b/assets/javascripts/discourse/initializers/extend-for-solved-button.js.es6 index 39776a0..c4db815 100644 --- a/assets/javascripts/discourse/initializers/extend-for-solved-button.js.es6 +++ b/assets/javascripts/discourse/initializers/extend-for-solved-button.js.es6 @@ -2,16 +2,31 @@ import PostMenuView from 'discourse/views/post-menu'; import PostView from 'discourse/views/post'; import { Button } from 'discourse/views/post-menu'; import Topic from 'discourse/models/topic'; +import User from 'discourse/models/user'; export default { name: 'extend-for-solved-button', initialize: function() { Topic.reopen({ + // keeping this here cause there is complex localization acceptedAnswerHtml: function(){ - return I18n.t("") - }.property('accepted_answer') + var username = this.get('accepted_answer.username'); + var postNumber = this.get('accepted_answer.post_number'); + + if (!username || !postNumber) { + return ""; + } + + return I18n.t("accepted_answer.accepted_html", { + username_lower: username.toLowerCase(), + username: username, + post_path: this.get('url') + "/" + postNumber, + post_number: postNumber, + user_path: User.create({username: username}).get('path') + }); + }.property('accepted_answer', 'id') }); PostView.reopen({ @@ -35,7 +50,8 @@ export default { clickUnacceptAnswer: function(){ this.set('post.can_accept_answer', true); this.set('post.can_unaccept_answer', false); - this.set('post.topic.has_accepted_answer', false); + this.set('post.accepted_answer', false); + this.set('post.topic.accepted_answer', undefined); Discourse.ajax("/solution/unaccept", { type: 'POST', diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml new file mode 100644 index 0000000..bf32c29 --- /dev/null +++ b/config/locales/client.en.yml @@ -0,0 +1,6 @@ +en: + js: + accepted_answer: + accept_answer: "Accept answer" + unaccept_answer: "Unaccept answer" + accepted_html: " Solved by {{username}} in post #{{post_number}}" diff --git a/plugin.rb b/plugin.rb index 0e83891..8296d35 100644 --- a/plugin.rb +++ b/plugin.rb @@ -22,8 +22,8 @@ after_initialize do post = Post.find(params[:id].to_i) - accepted_id = post.topic.custom_fields["has_accepted_answer"].to_i - if accepted_id + accepted_id = post.topic.custom_fields["accepted_answer_post_id"].to_i + if accepted_id > 0 if p2 = Post.find_by(id: accepted_id) p2.custom_fields["is_accepted_answer"] = nil p2.save!