discourse/app/serializers/user_action_serializer.rb

93 lines
2.0 KiB
Ruby

class UserActionSerializer < ApplicationSerializer
attributes :action_type,
:created_at,
:excerpt,
:avatar_template,
:acting_avatar_template,
:slug,
:topic_id,
:target_user_id,
:target_name,
:target_username,
:post_number,
:reply_to_post_number,
:username,
:name,
:user_id,
:acting_username,
:acting_name,
:acting_user_id,
:title,
:deleted,
:hidden,
:moderator_action,
:edit_reason
def excerpt
PrettyText.excerpt(object.cooked, 300) if object.cooked
end
def avatar_template
avatar_for(
object.user_id,
object.email,
object.use_uploaded_avatar,
object.uploaded_avatar_template,
object.uploaded_avatar_id
)
end
def acting_avatar_template
avatar_for(
object.acting_user_id,
object.acting_email,
object.acting_use_uploaded_avatar,
object.acting_uploaded_avatar_template,
object.acting_uploaded_avatar_id
)
end
def include_name?
SiteSetting.enable_names?
end
def include_target_name?
include_name?
end
def include_acting_name?
include_name?
end
def slug
Slug.for(object.title)
end
def moderator_action
object.post_type == Post.types[:moderator_action]
end
def include_reply_to_post_number?
object.action_type == UserAction::REPLY
end
def include_edit_reason?
object.action_type == UserAction::EDIT
end
private
def avatar_for(user_id, email, use_uploaded_avatar, uploaded_avatar_template, uploaded_avatar_id)
# NOTE: id is required for cases where the template is blank (during initial population)
User.new(
id: user_id,
email: email,
use_uploaded_avatar: use_uploaded_avatar,
uploaded_avatar_template: uploaded_avatar_template,
uploaded_avatar_id: uploaded_avatar_id
).avatar_template
end
end