Class: TopicViewDetailsSerializer

Inherits:
ApplicationSerializer show all
Defined in:
app/serializers/topic_view_details_serializer.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationSerializer

expire_cache_fragment!, fragment_cache

Methods inherited from ActiveModel::Serializer

#include!

Class Method Details

.can_attributesObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/serializers/topic_view_details_serializer.rb', line 4

def self.can_attributes
  %i[
    can_move_posts
    can_delete
    can_permanently_delete
    can_recover
    can_remove_allowed_users
    can_invite_to
    can_invite_via_email
    can_create_post
    can_reply_as_new_topic
    can_flag_topic
    can_convert_topic
    can_review_topic
    can_edit_tags
    can_publish_page
    can_close_topic
    can_archive_topic
    can_split_merge_topic
    can_edit_staff_notes
    can_toggle_topic_visibility
    can_pin_unpin_topic
    can_moderate_category
  ]
end

Instance Method Details

#allowed_groupsObject



186
187
188
# File 'app/serializers/topic_view_details_serializer.rb', line 186

def allowed_groups
  object.topic.allowed_groups
end

#allowed_usersObject



176
177
178
179
180
# File 'app/serializers/topic_view_details_serializer.rb', line 176

def allowed_users
  object.topic.allowed_users.reject do |user|
    object.group_allowed_user_ids.include?(user.id) && user != scope.user
  end
end

#can_editObject

NOTE: A Category Group Moderator moving a topic to a different category may result in the ‘can_edit?’ result changing from ‘true` to `false`. Explicitly returning a `false` value is required to update the client UI.



98
99
100
# File 'app/serializers/topic_view_details_serializer.rb', line 98

def can_edit
  scope.can_edit?(object.topic)
end

#can_perform_action_available_to_group_moderators?Boolean Also known as: include_can_close_topic?, include_can_archive_topic?, include_can_split_merge_topic?, include_can_edit_staff_notes?, include_can_moderate_category?

Returns:

  • (Boolean)


162
163
164
165
# File 'app/serializers/topic_view_details_serializer.rb', line 162

def can_perform_action_available_to_group_moderators?
  @can_perform_action_available_to_group_moderators ||=
    scope.can_perform_action_available_to_group_moderators?(object.topic)
end

#can_remove_self_idObject

confusingly this is an id, not a bool like all other ‘can` methods



85
86
87
# File 'app/serializers/topic_view_details_serializer.rb', line 85

def can_remove_self_id
  scope.user.id
end

#created_byObject



64
65
66
# File 'app/serializers/topic_view_details_serializer.rb', line 64

def created_by
  object.topic.user
end

#include_allowed_groups?Boolean

Returns:

  • (Boolean)


190
191
192
# File 'app/serializers/topic_view_details_serializer.rb', line 190

def include_allowed_groups?
  object.personal_message
end

#include_allowed_users?Boolean

Returns:

  • (Boolean)


182
183
184
# File 'app/serializers/topic_view_details_serializer.rb', line 182

def include_allowed_users?
  object.personal_message
end

#include_can_convert_topic?Boolean

Returns:

  • (Boolean)


146
147
148
# File 'app/serializers/topic_view_details_serializer.rb', line 146

def include_can_convert_topic?
  scope.can_convert_topic?(object.topic)
end

#include_can_create_post?Boolean

Returns:

  • (Boolean)


134
135
136
# File 'app/serializers/topic_view_details_serializer.rb', line 134

def include_can_create_post?
  scope.can_create?(Post, object.topic)
end

#include_can_delete?Boolean

Returns:

  • (Boolean)


110
111
112
# File 'app/serializers/topic_view_details_serializer.rb', line 110

def include_can_delete?
  scope.can_delete?(object.topic)
end

#include_can_edit_tags?Boolean

Returns:

  • (Boolean)


150
151
152
# File 'app/serializers/topic_view_details_serializer.rb', line 150

def include_can_edit_tags?
  !scope.can_edit?(object.topic) && scope.can_edit_tags?(object.topic)
end

#include_can_flag_topic?Boolean

Returns:

  • (Boolean)


142
143
144
# File 'app/serializers/topic_view_details_serializer.rb', line 142

def include_can_flag_topic?
  object.actions_summary.any? { |a| a[:can_act] }
end

#include_can_invite_to?Boolean

Returns:

  • (Boolean)


126
127
128
# File 'app/serializers/topic_view_details_serializer.rb', line 126

def include_can_invite_to?
  scope.can_invite_to?(object.topic)
end

#include_can_invite_via_email?Boolean

Returns:

  • (Boolean)


130
131
132
# File 'app/serializers/topic_view_details_serializer.rb', line 130

def include_can_invite_via_email?
  scope.can_invite_via_email?(object.topic)
end

#include_can_move_posts?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'app/serializers/topic_view_details_serializer.rb', line 106

def include_can_move_posts?
  scope.can_move_posts?(object.topic)
end

#include_can_permanently_delete?Boolean

Returns:

  • (Boolean)


114
115
116
# File 'app/serializers/topic_view_details_serializer.rb', line 114

def include_can_permanently_delete?
  SiteSetting.can_permanently_delete && scope.is_admin? && object.topic.deleted_at
end

#include_can_pin_unpin_topic?Boolean

Returns:

  • (Boolean)


158
159
160
# File 'app/serializers/topic_view_details_serializer.rb', line 158

def include_can_pin_unpin_topic?
  scope.can_pin_unpin_topic?(object.topic)
end

#include_can_publish_page?Boolean

Returns:

  • (Boolean)


172
173
174
# File 'app/serializers/topic_view_details_serializer.rb', line 172

def include_can_publish_page?
  scope.can_publish_page?(object.topic)
end

#include_can_recover?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'app/serializers/topic_view_details_serializer.rb', line 118

def include_can_recover?
  scope.can_recover_topic?(object.topic)
end

#include_can_remove_allowed_users?Boolean

Returns:

  • (Boolean)


122
123
124
# File 'app/serializers/topic_view_details_serializer.rb', line 122

def include_can_remove_allowed_users?
  scope.can_remove_allowed_users?(object.topic)
end

#include_can_remove_self_id?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'app/serializers/topic_view_details_serializer.rb', line 89

def include_can_remove_self_id?
  scope.can_remove_allowed_users?(object.topic, scope.user)
end

#include_can_reply_as_new_topic?Boolean

Returns:

  • (Boolean)


138
139
140
# File 'app/serializers/topic_view_details_serializer.rb', line 138

def include_can_reply_as_new_topic?
  scope.can_reply_as_new_topic?(object.topic)
end

#include_can_review_topic?Boolean

Returns:

  • (Boolean)


102
103
104
# File 'app/serializers/topic_view_details_serializer.rb', line 102

def include_can_review_topic?
  scope.can_review_topic?(object.topic)
end

#include_can_toggle_topic_visibility?Boolean

Returns:

  • (Boolean)


154
155
156
# File 'app/serializers/topic_view_details_serializer.rb', line 154

def include_can_toggle_topic_visibility?
  scope.can_toggle_topic_visibility?(object.topic)
end

#include_links?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'app/serializers/topic_view_details_serializer.rb', line 60

def include_links?
  object.links.present?
end

#include_notifications_reason_id?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'app/serializers/topic_view_details_serializer.rb', line 80

def include_notifications_reason_id?
  object.topic_user.present?
end

#include_participants?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'app/serializers/topic_view_details_serializer.rb', line 56

def include_participants?
  object.post_counts_by_user.present?
end

#last_posterObject



68
69
70
# File 'app/serializers/topic_view_details_serializer.rb', line 68

def last_poster
  object.topic.last_poster
end

#notification_levelObject



72
73
74
# File 'app/serializers/topic_view_details_serializer.rb', line 72

def notification_level
  object.topic_user&.notification_level || TopicUser.notification_levels[:regular]
end

#notifications_reason_idObject



76
77
78
# File 'app/serializers/topic_view_details_serializer.rb', line 76

def notifications_reason_id
  object.topic_user.notifications_reason_id
end

#participantsObject



49
50
51
52
53
54
# File 'app/serializers/topic_view_details_serializer.rb', line 49

def participants
  object
    .post_counts_by_user
    .reject { |p| object.participants[p].blank? }
    .map { |pc| { user: object.participants[pc[0]], post_count: pc[1] } }
end