FEATURE: Add solved icon for topic titles in search results and other topic lists
This commit is contained in:
parent
bd5685c836
commit
e9be43becd
|
@ -0,0 +1,19 @@
|
|||
module TopicAnswerMixin
|
||||
def self.included(klass)
|
||||
klass.attributes :has_accepted_answer, :can_have_answer
|
||||
end
|
||||
|
||||
def has_accepted_answer
|
||||
object.custom_fields["accepted_answer_post_id"] ? true : false
|
||||
end
|
||||
|
||||
def can_have_answer
|
||||
return true if SiteSetting.allow_solved_on_all_topics
|
||||
return false if object.closed || object.archived
|
||||
return scope.allow_accepted_answers_on_category?(object.category_id)
|
||||
end
|
||||
|
||||
def include_can_have_answer?
|
||||
SiteSetting.empty_box_on_unsolved
|
||||
end
|
||||
end
|
|
@ -1,6 +1,7 @@
|
|||
import Topic from "discourse/models/topic";
|
||||
import User from "discourse/models/user";
|
||||
import TopicStatus from "discourse/raw-views/topic-status";
|
||||
import TopicStatusIcons from "discourse/helpers/topic-status-icons";
|
||||
import { popupAjaxError } from "discourse/lib/ajax-error";
|
||||
import { withPluginApi } from "discourse/lib/plugin-api";
|
||||
import { ajax } from "discourse/lib/ajax";
|
||||
|
@ -64,6 +65,12 @@ function acceptPost(post) {
|
|||
function initializeWithApi(api) {
|
||||
const currentUser = api.getCurrentUser();
|
||||
|
||||
TopicStatusIcons.addObject([
|
||||
"has_accepted_answer",
|
||||
"check-square-o",
|
||||
"solved"
|
||||
]);
|
||||
|
||||
api.includePostAttributes(
|
||||
"can_accept_answer",
|
||||
"can_unaccept_answer",
|
||||
|
@ -219,7 +226,7 @@ export default {
|
|||
results.push({
|
||||
openTag: "span",
|
||||
closeTag: "span",
|
||||
title: I18n.t("solved.has_accepted_answer"),
|
||||
title: I18n.t("topic_statuses.solved.help"),
|
||||
icon: "check-square-o"
|
||||
});
|
||||
} else if (
|
||||
|
|
|
@ -19,3 +19,7 @@ en:
|
|||
other: "solutions"
|
||||
accepted_html: "{{icon}} Solved <span class='by'>by <a href data-user-card='{{username_lower}}'>{{username}}</a></span> in <a href='{{post_path}}' class='back'>post #{{post_number}}</a>"
|
||||
accepted_notification: "<p><span>{{username}}</span> {{description}}</p>"
|
||||
|
||||
topic_statuses:
|
||||
solved:
|
||||
help: "This topic has a solution"
|
||||
|
|
49
plugin.rb
49
plugin.rb
|
@ -18,6 +18,10 @@ register_asset 'stylesheets/solutions.scss'
|
|||
|
||||
after_initialize do
|
||||
|
||||
[
|
||||
'../app/serializers/concerns/topic_answer_mixin.rb'
|
||||
].each { |path| load File.expand_path(path, __FILE__) }
|
||||
|
||||
# we got to do a one time upgrade
|
||||
if defined?(UserAction::SOLVED)
|
||||
unless $redis.get('solved_already_upgraded')
|
||||
|
@ -479,42 +483,29 @@ SQL
|
|||
end
|
||||
|
||||
require_dependency 'topic_list_item_serializer'
|
||||
require_dependency 'listable_topic_serializer'
|
||||
require_dependency 'search_topic_list_item_serializer'
|
||||
require_dependency 'suggested_topic_serializer'
|
||||
require_dependency 'category_detailed_serializer'
|
||||
require_dependency 'user_summary_serializer'
|
||||
|
||||
class ::TopicListItemSerializer
|
||||
attributes :has_accepted_answer, :can_have_answer
|
||||
|
||||
def has_accepted_answer
|
||||
object.custom_fields["accepted_answer_post_id"] ? true : false
|
||||
end
|
||||
|
||||
def can_have_answer
|
||||
return true if SiteSetting.allow_solved_on_all_topics
|
||||
return false if object.closed || object.archived
|
||||
return scope.allow_accepted_answers_on_category?(object.category_id)
|
||||
end
|
||||
|
||||
def include_can_have_answer?
|
||||
SiteSetting.empty_box_on_unsolved
|
||||
end
|
||||
include TopicAnswerMixin
|
||||
end
|
||||
|
||||
class ::ListableTopicSerializer
|
||||
attributes :has_accepted_answer, :can_have_answer
|
||||
class ::SearchTopicListItemSerializer
|
||||
include TopicAnswerMixin
|
||||
end
|
||||
|
||||
def has_accepted_answer
|
||||
object.custom_fields["accepted_answer_post_id"] ? true : false
|
||||
end
|
||||
class ::SuggestedTopicSerializer
|
||||
include TopicAnswerMixin
|
||||
end
|
||||
|
||||
def can_have_answer
|
||||
return true if SiteSetting.allow_solved_on_all_topics
|
||||
return false if object.closed || object.archived
|
||||
return scope.allow_accepted_answers_on_category?(object.category_id)
|
||||
end
|
||||
class ::CategoryDetailedSerializer
|
||||
include TopicAnswerMixin
|
||||
end
|
||||
|
||||
def include_can_have_answer?
|
||||
SiteSetting.empty_box_on_unsolved
|
||||
end
|
||||
class ::UserSummarySerializer::TopicSerializer
|
||||
include TopicAnswerMixin
|
||||
end
|
||||
|
||||
TopicList.preloaded_custom_fields << "accepted_answer_post_id" if TopicList.respond_to? :preloaded_custom_fields
|
||||
|
|
Loading…
Reference in New Issue