mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:42:07 +08:00
59097b207f
Over the years we accrued many spelling mistakes in the code base. This PR attempts to fix spelling mistakes and typos in all areas of the code that are extremely safe to change - comments - test descriptions - other low risk areas
189 lines
4.8 KiB
Ruby
189 lines
4.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class TopicViewDetailsSerializer < ApplicationSerializer
|
|
|
|
def self.can_attributes
|
|
[:can_move_posts,
|
|
:can_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
|
|
|
|
# NOTE: `can_edit` is defined as an attribute because we explicitly want
|
|
# it returned even if it has a value of `false`
|
|
attributes(
|
|
:can_edit,
|
|
:notification_level,
|
|
:notifications_reason_id,
|
|
*can_attributes,
|
|
:can_remove_self_id,
|
|
:participants,
|
|
:allowed_users
|
|
)
|
|
|
|
has_one :created_by, serializer: BasicUserSerializer, embed: :objects
|
|
has_one :last_poster, serializer: BasicUserSerializer, embed: :objects
|
|
has_many :links, serializer: TopicLinkSerializer, embed: :objects
|
|
has_many :participants, serializer: TopicPostCountSerializer, embed: :objects
|
|
has_many :allowed_users, serializer: BasicUserSerializer, embed: :objects
|
|
has_many :allowed_groups, serializer: BasicGroupSerializer, embed: :objects
|
|
|
|
def participants
|
|
object.post_counts_by_user.reject { |p| object.participants[p].blank? }.map do |pc|
|
|
{ user: object.participants[pc[0]], post_count: pc[1] }
|
|
end
|
|
end
|
|
|
|
def include_participants?
|
|
object.post_counts_by_user.present?
|
|
end
|
|
|
|
def include_links?
|
|
object.links.present?
|
|
end
|
|
|
|
def created_by
|
|
object.topic.user
|
|
end
|
|
|
|
def last_poster
|
|
object.topic.last_poster
|
|
end
|
|
|
|
def notification_level
|
|
object.topic_user&.notification_level || TopicUser.notification_levels[:regular]
|
|
end
|
|
|
|
def notifications_reason_id
|
|
object.topic_user.notifications_reason_id
|
|
end
|
|
|
|
def include_notifications_reason_id?
|
|
object.topic_user.present?
|
|
end
|
|
|
|
# confusingly this is an id, not a bool like all other `can` methods
|
|
def can_remove_self_id
|
|
scope.user.id
|
|
end
|
|
|
|
def include_can_remove_self_id?
|
|
scope.can_remove_allowed_users?(object.topic, scope.user)
|
|
end
|
|
|
|
can_attributes.each do |ca|
|
|
define_method(ca) { true }
|
|
end
|
|
|
|
# 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.
|
|
def can_edit
|
|
scope.can_edit?(object.topic)
|
|
end
|
|
|
|
def include_can_review_topic?
|
|
scope.can_review_topic?(object.topic)
|
|
end
|
|
|
|
def include_can_move_posts?
|
|
scope.can_move_posts?(object.topic)
|
|
end
|
|
|
|
def include_can_delete?
|
|
scope.can_delete?(object.topic)
|
|
end
|
|
|
|
def include_can_recover?
|
|
scope.can_recover_topic?(object.topic)
|
|
end
|
|
|
|
def include_can_remove_allowed_users?
|
|
scope.can_remove_allowed_users?(object.topic)
|
|
end
|
|
|
|
def include_can_invite_to?
|
|
scope.can_invite_to?(object.topic)
|
|
end
|
|
|
|
def include_can_invite_via_email?
|
|
scope.can_invite_via_email?(object.topic)
|
|
end
|
|
|
|
def include_can_create_post?
|
|
scope.can_create?(Post, object.topic)
|
|
end
|
|
|
|
def include_can_reply_as_new_topic?
|
|
scope.can_reply_as_new_topic?(object.topic)
|
|
end
|
|
|
|
def include_can_flag_topic?
|
|
object.actions_summary.any? { |a| a[:can_act] }
|
|
end
|
|
|
|
def include_can_convert_topic?
|
|
scope.can_convert_topic?(object.topic)
|
|
end
|
|
|
|
def include_can_edit_tags?
|
|
!scope.can_edit?(object.topic) && scope.can_edit_tags?(object.topic)
|
|
end
|
|
|
|
def include_can_toggle_topic_visibility?
|
|
scope.can_toggle_topic_visibility?(object.topic)
|
|
end
|
|
|
|
def include_can_pin_unpin_topic?
|
|
scope.can_pin_unpin_topic?(object.topic)
|
|
end
|
|
|
|
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
|
|
alias :include_can_close_topic? :can_perform_action_available_to_group_moderators?
|
|
alias :include_can_archive_topic? :can_perform_action_available_to_group_moderators?
|
|
alias :include_can_split_merge_topic? :can_perform_action_available_to_group_moderators?
|
|
alias :include_can_edit_staff_notes? :can_perform_action_available_to_group_moderators?
|
|
alias :include_can_moderate_category? :can_perform_action_available_to_group_moderators?
|
|
|
|
def include_can_publish_page?
|
|
scope.can_publish_page?(object.topic)
|
|
end
|
|
|
|
def allowed_users
|
|
object.topic.allowed_users.reject do |user|
|
|
object.group_allowed_user_ids.include?(user.id) && user != scope.user
|
|
end
|
|
end
|
|
|
|
def include_allowed_users?
|
|
object.personal_message
|
|
end
|
|
|
|
def allowed_groups
|
|
object.topic.allowed_groups
|
|
end
|
|
|
|
def include_allowed_groups?
|
|
object.personal_message
|
|
end
|
|
|
|
end
|