2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-05 08:59:27 +08:00

new 'enable_staged_users' site setting

This commit is contained in:
Régis Hanol 2016-03-23 18:56:03 +01:00
parent ddebd76c44
commit 39863953cd
7 changed files with 45 additions and 7 deletions

View file

@ -10,6 +10,7 @@ module Email
class ProcessingError < StandardError; end
class EmptyEmailError < ProcessingError; end
class UserNotFoundError < ProcessingError; end
class AutoGeneratedEmailError < ProcessingError; end
class NoBodyDetectedError < ProcessingError; end
class InactiveUserError < ProcessingError; end
@ -53,6 +54,9 @@ module Email
def process_internal
user = find_or_create_user(@from_email, @from_display_name)
raise UserNotFoundError if user.nil?
@incoming_email.update_columns(user_id: user.id)
body, @elided = select_body
@ -195,13 +199,23 @@ module Email
end
def find_or_create_user(email, display_name)
username = UserNameSuggester.sanitize_username(display_name) if display_name.present?
user = nil
User.find_or_create_by(email: email) do |user|
user.username = UserNameSuggester.suggest(username.presence || email)
user.name = display_name.presence || User.suggest_name(email)
user.staged = true
User.transaction do
user = User.find_by_email(email)
if user.nil? && SiteSetting.enable_staged_users
username = UserNameSuggester.sanitize_username(display_name) if display_name.present?
user = User.create(
email: email,
username: UserNameSuggester.suggest(username.presence || email),
name: display_name.presence || User.suggest_name(email),
staged: true
)
end
end
user
end
def destinations
@ -382,7 +396,7 @@ module Email
display_name = address_field.display_name.try(:to_s)
if should_invite?(email)
user = find_or_create_user(email, display_name)
if can_invite?(topic, user)
if user && can_invite?(topic, user)
topic.topic_allowed_users.create!(user_id: user.id)
topic.add_small_action(sender, "invited_user", user.username)
end