mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: multiple use invite links (#9813)
This commit is contained in:
9
app/serializers/invite_link_serializer.rb
Normal file
9
app/serializers/invite_link_serializer.rb
Normal file
@@ -0,0 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class InviteLinkSerializer < ApplicationSerializer
|
||||
attributes :id, :invite_key, :created_at, :max_redemptions_allowed, :redemption_count, :expires_at, :group_names
|
||||
|
||||
def group_names
|
||||
object.groups.pluck(:name).join(", ")
|
||||
end
|
||||
end
|
||||
@@ -1,8 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class InviteSerializer < ApplicationSerializer
|
||||
|
||||
attributes :email, :updated_at, :redeemed_at, :expired, :user
|
||||
attributes :id, :email, :updated_at, :expired
|
||||
|
||||
def include_email?
|
||||
options[:show_emails] && !object.redeemed?
|
||||
@@ -11,11 +10,4 @@ class InviteSerializer < ApplicationSerializer
|
||||
def expired
|
||||
object.expired?
|
||||
end
|
||||
|
||||
def user
|
||||
ser = InvitedUserSerializer.new(object.user, scope: scope, root: false)
|
||||
ser.invited_by = object.invited_by
|
||||
ser.as_json
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -4,8 +4,15 @@ class InvitedSerializer < ApplicationSerializer
|
||||
attributes :invites, :can_see_invite_details
|
||||
|
||||
def invites
|
||||
serializer = if object.type == "pending"
|
||||
InviteSerializer
|
||||
else
|
||||
InvitedUserSerializer
|
||||
end
|
||||
|
||||
ActiveModel::ArraySerializer.new(
|
||||
object.invite_list,
|
||||
each_serializer: serializer,
|
||||
scope: scope,
|
||||
root: false,
|
||||
show_emails: object.show_emails
|
||||
|
||||
60
app/serializers/invited_user_record_serializer.rb
Normal file
60
app/serializers/invited_user_record_serializer.rb
Normal file
@@ -0,0 +1,60 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class InvitedUserRecordSerializer < BasicUserSerializer
|
||||
|
||||
attributes :topics_entered,
|
||||
:posts_read_count,
|
||||
:last_seen_at,
|
||||
:time_read,
|
||||
:days_visited,
|
||||
:days_since_created
|
||||
|
||||
attr_accessor :invited_by
|
||||
|
||||
def time_read
|
||||
object.user_stat.time_read
|
||||
end
|
||||
|
||||
def include_time_read?
|
||||
can_see_invite_details?
|
||||
end
|
||||
|
||||
def days_visited
|
||||
object.user_stat.days_visited
|
||||
end
|
||||
|
||||
def include_days_visited?
|
||||
can_see_invite_details?
|
||||
end
|
||||
|
||||
def topics_entered
|
||||
object.user_stat.topics_entered
|
||||
end
|
||||
|
||||
def include_topics_entered?
|
||||
can_see_invite_details?
|
||||
end
|
||||
|
||||
def posts_read_count
|
||||
object.user_stat.posts_read_count
|
||||
end
|
||||
|
||||
def include_posts_read_count?
|
||||
can_see_invite_details?
|
||||
end
|
||||
|
||||
def days_since_created
|
||||
((Time.now - object.created_at) / 60 / 60 / 24).ceil
|
||||
end
|
||||
|
||||
def include_days_since_created
|
||||
can_see_invite_details?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def can_see_invite_details?
|
||||
@can_see_invite_details ||= scope.can_see_invite_details?(invited_by)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,54 +1,19 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class InvitedUserSerializer < BasicUserSerializer
|
||||
class InvitedUserSerializer < ApplicationSerializer
|
||||
attributes :id, :redeemed_at, :user, :invite_source
|
||||
|
||||
attributes :topics_entered,
|
||||
:posts_read_count,
|
||||
:last_seen_at,
|
||||
:time_read,
|
||||
:days_visited,
|
||||
:days_since_created
|
||||
|
||||
attr_accessor :invited_by
|
||||
|
||||
def time_read
|
||||
object.user_stat.time_read
|
||||
def id
|
||||
object.invite.id
|
||||
end
|
||||
|
||||
def include_time_read?
|
||||
scope.can_see_invite_details?(invited_by)
|
||||
def user
|
||||
ser = InvitedUserRecordSerializer.new(object.user, scope: scope, root: false)
|
||||
ser.invited_by = object.invite.invited_by
|
||||
ser.as_json
|
||||
end
|
||||
|
||||
def days_visited
|
||||
object.user_stat.days_visited
|
||||
def invite_source
|
||||
object.invite.is_invite_link? ? "link" : "email"
|
||||
end
|
||||
|
||||
def include_days_visited?
|
||||
scope.can_see_invite_details?(invited_by)
|
||||
end
|
||||
|
||||
def topics_entered
|
||||
object.user_stat.topics_entered
|
||||
end
|
||||
|
||||
def include_topics_entered?
|
||||
scope.can_see_invite_details?(invited_by)
|
||||
end
|
||||
|
||||
def posts_read_count
|
||||
object.user_stat.posts_read_count
|
||||
end
|
||||
|
||||
def include_posts_read_count?
|
||||
scope.can_see_invite_details?(invited_by)
|
||||
end
|
||||
|
||||
def days_since_created
|
||||
((Time.now - object.created_at) / 60 / 60 / 24).ceil
|
||||
end
|
||||
|
||||
def include_days_since_created
|
||||
scope.can_see_invite_details?(invited_by)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user