mirror of
https://github.com/discourse/discourse.git
synced 2025-03-09 14:34:35 +00:00
add 'incoming_email' to groups
This commit is contained in:
parent
fa6687841f
commit
578f606a1a
@ -92,6 +92,11 @@
|
|||||||
<label for="grant_trust_level">{{i18n 'groups.trust_levels.title'}}</label>
|
<label for="grant_trust_level">{{i18n 'groups.trust_levels.title'}}</label>
|
||||||
{{combo-box name="grant_trust_level" valueAttribute="value" value=model.grant_trust_level content=trustLevelOptions}}
|
{{combo-box name="grant_trust_level" valueAttribute="value" value=model.grant_trust_level content=trustLevelOptions}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="incoming_email">{{i18n 'admin.groups.incoming_email'}}</label>
|
||||||
|
{{text-field name="incoming_email" value=model.incoming_email placeholderKey="admin.groups.incoming_email_placeholder"}}
|
||||||
|
</div>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
<div class='buttons'>
|
<div class='buttons'>
|
||||||
|
@ -98,7 +98,8 @@ const Group = Discourse.Model.extend({
|
|||||||
automatic_membership_retroactive: !!this.get('automatic_membership_retroactive'),
|
automatic_membership_retroactive: !!this.get('automatic_membership_retroactive'),
|
||||||
title: this.get('title'),
|
title: this.get('title'),
|
||||||
primary_group: !!this.get('primary_group'),
|
primary_group: !!this.get('primary_group'),
|
||||||
grant_trust_level: this.get('grant_trust_level')
|
grant_trust_level: this.get('grant_trust_level'),
|
||||||
|
incoming_email: this.get("incoming_email"),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -81,6 +81,8 @@ class Admin::GroupsController < Admin::AdminController
|
|||||||
|
|
||||||
group.primary_group = group.automatic ? false : params["primary_group"] == "true"
|
group.primary_group = group.automatic ? false : params["primary_group"] == "true"
|
||||||
|
|
||||||
|
group.incoming_email = group.automatic ? nil : params[:incoming_email]
|
||||||
|
|
||||||
title = params[:title] if params[:title].present?
|
title = params[:title] if params[:title].present?
|
||||||
group.title = group.automatic ? nil : title
|
group.title = group.automatic ? nil : title
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@ class Group < ActiveRecord::Base
|
|||||||
has_many :categories, through: :category_groups
|
has_many :categories, through: :category_groups
|
||||||
has_many :users, through: :group_users
|
has_many :users, through: :group_users
|
||||||
|
|
||||||
|
before_save :downcase_incoming_email
|
||||||
|
|
||||||
after_save :destroy_deletions
|
after_save :destroy_deletions
|
||||||
after_save :automatic_group_membership
|
after_save :automatic_group_membership
|
||||||
after_save :update_primary_group
|
after_save :update_primary_group
|
||||||
@ -23,6 +25,7 @@ class Group < ActiveRecord::Base
|
|||||||
validate :name_format_validator
|
validate :name_format_validator
|
||||||
validates_uniqueness_of :name, case_sensitive: false
|
validates_uniqueness_of :name, case_sensitive: false
|
||||||
validate :automatic_membership_email_domains_format_validator
|
validate :automatic_membership_email_domains_format_validator
|
||||||
|
validate :incoming_email_validator
|
||||||
|
|
||||||
AUTO_GROUPS = {
|
AUTO_GROUPS = {
|
||||||
:everyone => 0,
|
:everyone => 0,
|
||||||
@ -70,6 +73,17 @@ class Group < ActiveRecord::Base
|
|||||||
)", levels: levels, user_id: user && user.id )
|
)", levels: levels, user_id: user && user.id )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def downcase_incoming_email
|
||||||
|
self.incoming_email = (incoming_email || "").strip.downcase.presence
|
||||||
|
end
|
||||||
|
|
||||||
|
def incoming_email_validator
|
||||||
|
return if self.automatic || self.incoming_email.blank?
|
||||||
|
unless Email.is_valid?(incoming_email)
|
||||||
|
self.errors.add(:base, I18n.t('groups.errors.invalid_incoming_email', incoming_email: incoming_email))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def posts_for(guardian, before_post_id=nil)
|
def posts_for(guardian, before_post_id=nil)
|
||||||
user_ids = group_users.map {|gu| gu.user_id}
|
user_ids = group_users.map {|gu| gu.user_id}
|
||||||
result = Post.where(user_id: user_ids).includes(:user, :topic, :topic => :category).references(:posts, :topics, :category)
|
result = Post.where(user_id: user_ids).includes(:user, :topic, :topic => :category).references(:posts, :topics, :category)
|
||||||
|
@ -9,5 +9,10 @@ class BasicGroupSerializer < ApplicationSerializer
|
|||||||
:automatic_membership_retroactive,
|
:automatic_membership_retroactive,
|
||||||
:primary_group,
|
:primary_group,
|
||||||
:title,
|
:title,
|
||||||
:grant_trust_level
|
:grant_trust_level,
|
||||||
|
:incoming_email
|
||||||
|
|
||||||
|
def include_incoming_email?
|
||||||
|
scope.is_staff?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -1958,6 +1958,8 @@ en:
|
|||||||
primary_group: "Automatically set as primary group"
|
primary_group: "Automatically set as primary group"
|
||||||
group_owners: Owners
|
group_owners: Owners
|
||||||
add_owners: Add owners
|
add_owners: Add owners
|
||||||
|
incoming_email: "Custom incoming email address"
|
||||||
|
incoming_email_placeholder: "enter email address"
|
||||||
|
|
||||||
|
|
||||||
api:
|
api:
|
||||||
|
@ -194,6 +194,7 @@ en:
|
|||||||
can_not_modify_automatic: "You can not modify an automatic group"
|
can_not_modify_automatic: "You can not modify an automatic group"
|
||||||
member_already_exist: "'%{username}' is already a member of this group."
|
member_already_exist: "'%{username}' is already a member of this group."
|
||||||
invalid_domain: "'%{domain}' is not a valid domain."
|
invalid_domain: "'%{domain}' is not a valid domain."
|
||||||
|
invalid_incoming_email: "'%{incoming_email}' is not a valid email address."
|
||||||
default_names:
|
default_names:
|
||||||
everyone: "everyone"
|
everyone: "everyone"
|
||||||
admins: "admins"
|
admins: "admins"
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
class AddIncomingEmailToGroups < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :groups, :incoming_email, :string, null: true
|
||||||
|
add_index :groups, :incoming_email, unique: true
|
||||||
|
end
|
||||||
|
end
|
@ -30,7 +30,8 @@ describe Admin::GroupsController do
|
|||||||
"automatic_membership_retroactive"=>false,
|
"automatic_membership_retroactive"=>false,
|
||||||
"title"=>nil,
|
"title"=>nil,
|
||||||
"primary_group"=>false,
|
"primary_group"=>false,
|
||||||
"grant_trust_level"=>nil
|
"grant_trust_level"=>nil,
|
||||||
|
"incoming_email"=>nil
|
||||||
}])
|
}])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -43,6 +43,16 @@ describe Group do
|
|||||||
group.automatic_membership_email_domains = "discourse.org|wikipedia.org"
|
group.automatic_membership_email_domains = "discourse.org|wikipedia.org"
|
||||||
expect(group.valid?).to eq true
|
expect(group.valid?).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "is invalid for bad incoming email" do
|
||||||
|
group.incoming_email = "foo.bar.org"
|
||||||
|
expect(group.valid?).to eq(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "is valid for proper incoming email" do
|
||||||
|
group.incoming_email = "foo@bar.org"
|
||||||
|
expect(group.valid?).to eq(true)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def real_admins
|
def real_admins
|
||||||
|
Loading…
x
Reference in New Issue
Block a user