2019-05-02 17:17:27 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2013-05-09 02:37:34 -05:00
|
|
|
class BasicGroupSerializer < ApplicationSerializer
|
2015-01-23 11:25:43 -06:00
|
|
|
attributes :id,
|
|
|
|
:automatic,
|
|
|
|
:name,
|
2017-05-05 01:34:47 -05:00
|
|
|
:display_name,
|
2015-01-23 11:25:43 -06:00
|
|
|
:user_count,
|
2017-08-28 11:32:08 -05:00
|
|
|
:mentionable_level,
|
|
|
|
:messageable_level,
|
2017-07-03 14:26:46 -05:00
|
|
|
:visibility_level,
|
2015-01-23 11:25:43 -06:00
|
|
|
:automatic_membership_email_domains,
|
2015-04-09 21:17:28 -05:00
|
|
|
:primary_group,
|
2015-09-01 15:52:05 -05:00
|
|
|
:title,
|
2015-12-07 05:39:28 -06:00
|
|
|
:grant_trust_level,
|
2015-12-14 16:17:09 -06:00
|
|
|
:incoming_email,
|
2016-03-02 12:18:17 -06:00
|
|
|
:has_messages,
|
2016-08-16 11:34:04 -05:00
|
|
|
:flair_url,
|
2016-08-26 16:15:37 -05:00
|
|
|
:flair_bg_color,
|
2016-12-05 02:18:24 -06:00
|
|
|
:flair_color,
|
|
|
|
:bio_raw,
|
2016-12-06 22:06:56 -06:00
|
|
|
:bio_cooked,
|
2019-04-17 21:44:30 -05:00
|
|
|
:bio_excerpt,
|
2017-07-27 21:37:10 -05:00
|
|
|
:public_admission,
|
|
|
|
:public_exit,
|
2016-12-13 02:16:26 -06:00
|
|
|
:allow_membership_requests,
|
2017-04-20 14:47:25 -05:00
|
|
|
:full_name,
|
2017-08-08 04:53:02 -05:00
|
|
|
:default_notification_level,
|
2018-03-19 05:28:57 -05:00
|
|
|
:membership_request_template,
|
|
|
|
:is_group_user,
|
2019-08-14 08:30:04 -05:00
|
|
|
:is_group_owner,
|
|
|
|
:members_visibility_level,
|
2019-08-27 07:09:00 -05:00
|
|
|
:can_see_members,
|
|
|
|
:publish_read_state
|
2015-12-07 05:39:28 -06:00
|
|
|
|
2020-07-10 04:05:55 -05:00
|
|
|
def self.admin_attributes(*attrs)
|
|
|
|
attributes(*attrs)
|
|
|
|
attrs.each do |attr|
|
|
|
|
define_method "include_#{attr}?" do
|
|
|
|
scope.is_admin?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
admin_attributes :automatic_membership_email_domains,
|
|
|
|
:smtp_server,
|
|
|
|
:smtp_port,
|
|
|
|
:smtp_ssl,
|
|
|
|
:imap_server,
|
|
|
|
:imap_port,
|
|
|
|
:imap_ssl,
|
|
|
|
:imap_mailbox_name,
|
|
|
|
:imap_mailboxes,
|
|
|
|
:email_username,
|
|
|
|
:email_password,
|
|
|
|
:imap_last_error,
|
|
|
|
:imap_old_emails,
|
|
|
|
:imap_new_emails
|
|
|
|
|
2020-08-06 11:27:27 -05:00
|
|
|
def self.admin_or_owner_attributes(*attrs)
|
|
|
|
attributes(*attrs)
|
|
|
|
attrs.each do |attr|
|
|
|
|
define_method "include_#{attr}?" do
|
|
|
|
scope.is_admin? || (include_is_group_owner? && is_group_owner)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
admin_or_owner_attributes :watching_category_ids,
|
|
|
|
:tracking_category_ids,
|
|
|
|
:watching_first_post_category_ids,
|
2020-08-13 16:20:23 -05:00
|
|
|
:regular_category_ids,
|
2020-08-06 11:27:27 -05:00
|
|
|
:muted_category_ids,
|
|
|
|
:watching_tags,
|
|
|
|
:watching_first_post_tags,
|
|
|
|
:tracking_tags,
|
2020-08-13 16:20:23 -05:00
|
|
|
:regular_tags,
|
2020-08-06 11:27:27 -05:00
|
|
|
:muted_tags
|
|
|
|
|
2017-05-05 01:34:47 -05:00
|
|
|
def include_display_name?
|
|
|
|
object.automatic
|
|
|
|
end
|
|
|
|
|
|
|
|
def display_name
|
|
|
|
if auto_group_name = Group::AUTO_GROUP_IDS[object.id]
|
|
|
|
I18n.t("groups.default_names.#{auto_group_name}")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-04-17 21:44:30 -05:00
|
|
|
def bio_excerpt
|
2019-11-11 10:42:08 -06:00
|
|
|
PrettyText.excerpt(object.bio_cooked, 110, keep_emoji_images: true) if object.bio_cooked.present?
|
2019-04-17 21:44:30 -05:00
|
|
|
end
|
|
|
|
|
2015-12-07 05:39:28 -06:00
|
|
|
def include_incoming_email?
|
2016-12-05 02:18:24 -06:00
|
|
|
staff?
|
|
|
|
end
|
|
|
|
|
2018-03-19 05:28:57 -05:00
|
|
|
def include_has_messages?
|
2018-05-17 05:10:17 -05:00
|
|
|
staff? || scope.can_see_group_messages?(object)
|
2016-12-05 02:18:24 -06:00
|
|
|
end
|
|
|
|
|
2018-03-19 05:28:57 -05:00
|
|
|
def include_bio_raw?
|
2018-04-17 05:14:19 -05:00
|
|
|
staff? || (include_is_group_owner? && is_group_owner)
|
2016-12-05 02:18:24 -06:00
|
|
|
end
|
|
|
|
|
2018-03-19 05:28:57 -05:00
|
|
|
def include_is_group_user?
|
|
|
|
user_group_ids.present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def is_group_user
|
|
|
|
user_group_ids.include?(object.id)
|
|
|
|
end
|
2016-12-05 02:18:24 -06:00
|
|
|
|
2018-03-19 05:28:57 -05:00
|
|
|
def include_is_group_owner?
|
|
|
|
owner_group_ids.present?
|
2015-12-07 05:39:28 -06:00
|
|
|
end
|
2018-03-19 05:28:57 -05:00
|
|
|
|
|
|
|
def is_group_owner
|
|
|
|
owner_group_ids.include?(object.id)
|
|
|
|
end
|
|
|
|
|
2019-08-14 08:30:04 -05:00
|
|
|
def can_see_members
|
|
|
|
scope.can_see_group_members?(object)
|
|
|
|
end
|
|
|
|
|
2020-08-13 16:20:23 -05:00
|
|
|
[:watching, :regular, :tracking, :watching_first_post, :muted].each do |level|
|
2020-08-06 11:27:27 -05:00
|
|
|
define_method("#{level}_category_ids") do
|
|
|
|
GroupCategoryNotificationDefault.lookup(object, level).pluck(:category_id)
|
|
|
|
end
|
|
|
|
|
|
|
|
define_method("#{level}_tags") do
|
|
|
|
GroupTagNotificationDefault.lookup(object, level).joins(:tag).pluck('tags.name')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-03-19 05:28:57 -05:00
|
|
|
private
|
|
|
|
|
2018-06-07 00:28:18 -05:00
|
|
|
def staff?
|
|
|
|
@staff ||= scope.is_staff?
|
|
|
|
end
|
2018-03-19 05:28:57 -05:00
|
|
|
|
2018-06-07 00:28:18 -05:00
|
|
|
def user_group_ids
|
|
|
|
@options[:user_group_ids]
|
|
|
|
end
|
2018-03-19 05:28:57 -05:00
|
|
|
|
2018-06-07 00:28:18 -05:00
|
|
|
def owner_group_ids
|
|
|
|
@options[:owner_group_ids]
|
|
|
|
end
|
2013-05-08 00:20:38 -05:00
|
|
|
end
|