2019-05-02 18:17:27 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2013-03-14 14:45:29 -04:00
|
|
|
class TopicListItemSerializer < ListableTopicSerializer
|
2018-02-13 15:46:25 -05:00
|
|
|
include TopicTagsMixin
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2013-02-25 11:42:20 -05:00
|
|
|
attributes :views,
|
|
|
|
:like_count,
|
2013-11-18 12:48:26 -05:00
|
|
|
:has_summary,
|
2013-04-02 16:52:51 -04:00
|
|
|
:archetype,
|
2013-10-23 14:40:39 -04:00
|
|
|
:last_poster_username,
|
2015-01-05 01:39:49 -05:00
|
|
|
:category_id,
|
2015-01-05 15:43:05 -05:00
|
|
|
:op_like_count,
|
2015-01-07 02:20:10 -05:00
|
|
|
:pinned_globally,
|
2015-01-07 02:50:28 -05:00
|
|
|
:bookmarked_post_numbers,
|
2016-04-25 15:55:15 -04:00
|
|
|
:liked_post_numbers,
|
2017-11-29 08:52:41 -05:00
|
|
|
:featured_link,
|
|
|
|
:featured_link_root_domain
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
has_many :posters, serializer: TopicPosterSerializer, embed: :objects
|
2014-05-12 03:32:49 -04:00
|
|
|
has_many :participants, serializer: TopicPosterSerializer, embed: :objects
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
def posters
|
|
|
|
object.posters || []
|
|
|
|
end
|
|
|
|
|
2015-01-05 01:39:49 -05:00
|
|
|
def op_like_count
|
|
|
|
object.first_post && object.first_post.like_count
|
|
|
|
end
|
|
|
|
|
2013-09-19 16:25:25 -04:00
|
|
|
def last_poster_username
|
2014-09-02 22:13:13 -04:00
|
|
|
posters.find { |poster| poster.user.id == object.last_post_user_id }.try(:user).try(:username)
|
2013-09-19 16:25:25 -04:00
|
|
|
end
|
|
|
|
|
2018-03-13 15:59:12 -04:00
|
|
|
def category_id
|
2018-03-28 15:36:12 -04:00
|
|
|
|
2018-03-13 15:59:12 -04:00
|
|
|
# If it's a shared draft, show the destination topic instead
|
2018-03-28 15:36:12 -04:00
|
|
|
if object.includes_destination_category && object.shared_draft
|
2018-03-13 15:59:12 -04:00
|
|
|
return object.shared_draft.category_id
|
|
|
|
end
|
|
|
|
|
|
|
|
object.category_id
|
|
|
|
end
|
|
|
|
|
2014-05-12 03:32:49 -04:00
|
|
|
def participants
|
|
|
|
object.participants_summary || []
|
|
|
|
end
|
|
|
|
|
2015-01-07 02:20:10 -05:00
|
|
|
def include_bookmarked_post_numbers?
|
2015-01-07 02:50:28 -05:00
|
|
|
include_post_action? :bookmark
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_liked_post_numbers?
|
|
|
|
include_post_action? :like
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_post_action?(action)
|
2015-01-07 02:20:10 -05:00
|
|
|
object.user_data &&
|
|
|
|
object.user_data.post_action_data &&
|
2015-01-07 02:50:28 -05:00
|
|
|
object.user_data.post_action_data.key?(PostActionType.types[action])
|
|
|
|
end
|
|
|
|
|
|
|
|
def liked_post_numbers
|
|
|
|
object.user_data.post_action_data[PostActionType.types[:like]]
|
2015-01-07 02:20:10 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def bookmarked_post_numbers
|
|
|
|
object.user_data.post_action_data[PostActionType.types[:bookmark]]
|
|
|
|
end
|
|
|
|
|
2014-05-12 03:32:49 -04:00
|
|
|
def include_participants?
|
|
|
|
object.private_message?
|
|
|
|
end
|
|
|
|
|
2015-01-05 01:39:49 -05:00
|
|
|
def include_op_like_count?
|
2015-01-05 01:54:38 -05:00
|
|
|
# PERF: long term we probably want a cheaper way of looking stuff up
|
|
|
|
# this is rather odd code, but we need to have op_likes loaded somehow
|
|
|
|
# simplest optimisation is adding a cache column on topic.
|
2015-01-05 01:39:49 -05:00
|
|
|
object.association(:first_post).loaded?
|
|
|
|
end
|
|
|
|
|
2016-12-05 07:31:43 -05:00
|
|
|
def include_featured_link?
|
|
|
|
SiteSetting.topic_featured_link_enabled
|
|
|
|
end
|
|
|
|
|
2017-11-29 08:52:41 -05:00
|
|
|
def include_featured_link_root_domain?
|
|
|
|
SiteSetting.topic_featured_link_enabled && object.featured_link.present?
|
2016-12-05 07:31:43 -05:00
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|