mirror of
https://github.com/discourse/discourse.git
synced 2024-12-25 04:03:53 +08:00
48d13cb231
Our old group SMTP SSL option was a checkbox, but this was not ideal because there are actually 3 different ways SSL can be used when sending SMTP: * None * SSL/TLS * STARTTLS We got around this before with specific overrides for Gmail, but it's not flexible enough and now people want to use other providers. It's best to be clear, though it is a technical detail. We provide a way to test the SMTP settings before saving them so there should be little chance of messing this up. This commit also converts GroupEmailSettings to a glimmer component.
173 lines
4.4 KiB
Ruby
173 lines
4.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class GroupShowSerializer < BasicGroupSerializer
|
|
attributes :is_group_user,
|
|
:is_group_owner,
|
|
:is_group_owner_display,
|
|
:mentionable,
|
|
:messageable,
|
|
:flair_icon,
|
|
:flair_type
|
|
|
|
def self.admin_attributes(*attrs)
|
|
attributes(*attrs)
|
|
attrs.each do |attr|
|
|
define_method "include_#{attr}?" do
|
|
scope.is_admin?
|
|
end
|
|
end
|
|
end
|
|
|
|
has_one :smtp_updated_by, embed: :object, serializer: BasicUserSerializer
|
|
has_one :imap_updated_by, embed: :object, serializer: BasicUserSerializer
|
|
|
|
admin_attributes :automatic_membership_email_domains,
|
|
:smtp_server,
|
|
:smtp_port,
|
|
:smtp_ssl_mode,
|
|
:smtp_enabled,
|
|
:smtp_updated_at,
|
|
:smtp_updated_by,
|
|
:imap_server,
|
|
:imap_port,
|
|
:imap_ssl,
|
|
:imap_mailbox_name,
|
|
:imap_mailboxes,
|
|
:imap_enabled,
|
|
:imap_updated_at,
|
|
:imap_updated_by,
|
|
:email_username,
|
|
:email_password,
|
|
:email_from_alias,
|
|
:imap_last_error,
|
|
:imap_old_emails,
|
|
:imap_new_emails,
|
|
:message_count,
|
|
:allow_unknown_sender_topic_replies,
|
|
:associated_group_ids
|
|
|
|
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,
|
|
:regular_category_ids,
|
|
:muted_category_ids,
|
|
:watching_tags,
|
|
:watching_first_post_tags,
|
|
:tracking_tags,
|
|
:regular_tags,
|
|
:muted_tags
|
|
|
|
def include_is_group_user?
|
|
authenticated?
|
|
end
|
|
|
|
def is_group_user
|
|
!!fetch_group_user
|
|
end
|
|
|
|
def include_is_group_owner?
|
|
authenticated? && fetch_group_user&.owner
|
|
end
|
|
|
|
def is_group_owner
|
|
true
|
|
end
|
|
|
|
def include_is_group_owner_display?
|
|
authenticated?
|
|
end
|
|
|
|
def is_group_owner_display
|
|
!!fetch_group_user&.owner
|
|
end
|
|
|
|
def include_mentionable?
|
|
authenticated?
|
|
end
|
|
|
|
def include_messageable?
|
|
authenticated?
|
|
end
|
|
|
|
def mentionable
|
|
Group.mentionable(scope.user).exists?(id: object.id)
|
|
end
|
|
|
|
def messageable
|
|
scope.can_send_private_message?(object)
|
|
end
|
|
|
|
def include_flair_icon?
|
|
flair_icon.present? && (is_group_owner || scope.is_admin?)
|
|
end
|
|
|
|
def include_flair_type?
|
|
flair_type.present? && (is_group_owner || scope.is_admin?)
|
|
end
|
|
|
|
%i[watching regular tracking watching_first_post muted].each do |level|
|
|
define_method("#{level}_category_ids") do
|
|
group_category_notifications[NotificationLevels.all[level]] || []
|
|
end
|
|
|
|
define_method("include_#{level}_tags?") do
|
|
SiteSetting.tagging_enabled? && scope.is_admin? || (include_is_group_owner? && is_group_owner)
|
|
end
|
|
|
|
define_method("#{level}_tags") { group_tag_notifications[NotificationLevels.all[level]] || [] }
|
|
end
|
|
|
|
def associated_group_ids
|
|
object.associated_groups.map(&:id)
|
|
end
|
|
|
|
def include_associated_group_ids?
|
|
scope.can_associate_groups?
|
|
end
|
|
|
|
private
|
|
|
|
def authenticated?
|
|
scope.authenticated?
|
|
end
|
|
|
|
def fetch_group_user
|
|
return @group_user if defined?(@group_user)
|
|
@group_user = object.group_users.find_by(user: scope.user)
|
|
end
|
|
|
|
def group_category_notifications
|
|
@group_category_notification_defaults ||=
|
|
GroupCategoryNotificationDefault
|
|
.where(group_id: object.id)
|
|
.pluck(:notification_level, :category_id)
|
|
.inject({}) do |h, arr|
|
|
h[arr[0]] ||= []
|
|
h[arr[0]] << arr[1]
|
|
h
|
|
end
|
|
end
|
|
|
|
def group_tag_notifications
|
|
@group_tag_notification_defaults ||=
|
|
GroupTagNotificationDefault
|
|
.where(group_id: object.id)
|
|
.joins(:tag)
|
|
.pluck(:notification_level, :name)
|
|
.inject({}) do |h, arr|
|
|
h[arr[0]] ||= []
|
|
h[arr[0]] << arr[1]
|
|
h
|
|
end
|
|
end
|
|
end
|