FEATURE: display icon on front page
This commit is contained in:
parent
76e3b44cf5
commit
57b4cb853f
|
@ -3,6 +3,7 @@ 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';
|
||||
import TopicStatus from 'discourse/views/topic-status'
|
||||
|
||||
export default {
|
||||
name: 'extend-for-solved-button',
|
||||
|
@ -39,6 +40,21 @@ export default {
|
|||
}.property('accepted_answer', 'id')
|
||||
});
|
||||
|
||||
TopicStatus.reopen({
|
||||
statuses: function(){
|
||||
var results = this._super();
|
||||
if (this.topic.has_accepted_answer) {
|
||||
results.push({
|
||||
openTag: 'span',
|
||||
closeTag: 'span',
|
||||
title: I18n.t('solved.has_accepted_answer'),
|
||||
icon: 'check-square'
|
||||
});
|
||||
}
|
||||
return results;
|
||||
}.property()
|
||||
});
|
||||
|
||||
PostView.reopen({
|
||||
classNameBindings: ['post.accepted_answer:accepted-answer']
|
||||
});
|
||||
|
|
|
@ -3,6 +3,7 @@ en:
|
|||
solved:
|
||||
allow_accepted_answers: "Allow users to accept answers"
|
||||
accept_answer: "Accept answer"
|
||||
has_accepted_answer: "This topic has an accepted answer"
|
||||
unaccept_answer: "Unaccept answer"
|
||||
accepted_answer: "Accepted answer"
|
||||
accepted_html: "<i class='fa-check-square fa accepted'></i> Solved by <a href data-user-card='{{username_lower}}'>{{username}}</a> in <a href='{{post_path}}'>post #{{post_number}}</a>"
|
||||
|
|
44
plugin.rb
44
plugin.rb
|
@ -173,6 +173,48 @@ after_initialize do
|
|||
def accepted_answer
|
||||
post_custom_fields["is_accepted_answer"]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
require_dependency 'topic_list_item_serializer'
|
||||
|
||||
class ::TopicListItemSerializer
|
||||
attributes :has_accepted_answer
|
||||
|
||||
def include_has_accepted_answer?
|
||||
object.has_accepted_answer
|
||||
end
|
||||
|
||||
def has_accepted_answer
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
class ::Topic
|
||||
attr_accessor :has_accepted_answer
|
||||
end
|
||||
|
||||
module ::DiscourseSolved::ExtendTopics
|
||||
def load_topics
|
||||
topics = super
|
||||
if topics.present?
|
||||
# super efficient for front page
|
||||
with_accepted = Set.new(Topic.exec_sql(
|
||||
'SELECT topic_id FROM topic_custom_fields
|
||||
WHERE topic_id in (:topic_ids) AND
|
||||
value IS NOT NULL AND
|
||||
name = \'accepted_answer_post_id\'',
|
||||
topic_ids: topics.map(&:id)
|
||||
).values.flatten.map(&:to_i))
|
||||
topics.each do |topic|
|
||||
topic.has_accepted_answer = true if with_accepted.include? topic.id
|
||||
end
|
||||
end
|
||||
topics
|
||||
end
|
||||
end
|
||||
|
||||
class ::TopicList
|
||||
prepend ::DiscourseSolved::ExtendTopics
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue