mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Update bulk-invite logs and PM template (#27057)
# Preview <img width="754" alt="Screenshot 2024-05-17 at 8 50 03 AM" src="https://github.com/discourse/discourse/assets/50783505/6710234f-0195-42be-b70e-9d57ba48bb4a"> # New Logs ``` [2024-05-17 08:49:54 -0600] Invalid User Field 'backend name' for 'foobarbing@gmail.com' [2024-05-17 08:49:54 -0600] Invalid Email 'test [2024-05-17 08:49:54 -0600] Invalid Email 'this@$@**.com ```
This commit is contained in:
parent
6060e4618c
commit
ede0fa5802
@ -10,8 +10,10 @@ module Jobs
|
|||||||
@logs = []
|
@logs = []
|
||||||
@sent = 0
|
@sent = 0
|
||||||
@skipped = 0
|
@skipped = 0
|
||||||
|
@skipped_emails = []
|
||||||
@warnings = 0
|
@warnings = 0
|
||||||
@failed = 0
|
@failed = 0
|
||||||
|
@failed_emails = []
|
||||||
@groups = {}
|
@groups = {}
|
||||||
@user_fields = {}
|
@user_fields = {}
|
||||||
@valid_groups = {}
|
@valid_groups = {}
|
||||||
@ -48,21 +50,25 @@ module Jobs
|
|||||||
@sent += 1
|
@sent += 1
|
||||||
elsif User === result
|
elsif User === result
|
||||||
@skipped += 1
|
@skipped += 1
|
||||||
|
@skipped_emails << invite[:email]
|
||||||
else
|
else
|
||||||
@failed += 1
|
@failed += 1
|
||||||
|
@failed_emails << invite[:email]
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
# invalid email
|
# invalid email
|
||||||
save_log "Invalid Email '#{invite[:email]}"
|
save_log "Invalid Email '#{invite[:email]}"
|
||||||
@failed += 1
|
@failed += 1
|
||||||
|
@failed_emails << invite[:email]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
save_log "Bulk Invite Process Failed -- '#{e.message}'"
|
save_log "Bulk Invite Process Failed -- '#{e.message}'"
|
||||||
@failed += 1
|
@failed += 1
|
||||||
|
@failed_emails << invite[:email]
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_groups(group_names)
|
def get_groups(group_names, email)
|
||||||
groups = []
|
groups = []
|
||||||
|
|
||||||
if group_names
|
if group_names
|
||||||
@ -76,7 +82,7 @@ module Jobs
|
|||||||
groups.push(group)
|
groups.push(group)
|
||||||
else
|
else
|
||||||
# invalid group
|
# invalid group
|
||||||
save_log "Invalid Group '#{group_name}'"
|
save_log "Invalid Group '#{group_name}' for '#{email}'"
|
||||||
@warnings += 1
|
@warnings += 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -85,13 +91,13 @@ module Jobs
|
|||||||
groups
|
groups
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_topic(topic_id)
|
def get_topic(topic_id, email)
|
||||||
topic = nil
|
topic = nil
|
||||||
|
|
||||||
if topic_id
|
if topic_id
|
||||||
topic = Topic.find_by_id(topic_id)
|
topic = Topic.find_by_id(topic_id)
|
||||||
if topic.nil?
|
if topic.nil?
|
||||||
save_log "Invalid Topic ID '#{topic_id}'"
|
save_log "Invalid Topic ID '#{topic_id}' for '#{email}'"
|
||||||
@warnings += 1
|
@warnings += 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -99,7 +105,7 @@ module Jobs
|
|||||||
topic
|
topic
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_user_fields(fields)
|
def get_user_fields(fields, email)
|
||||||
user_fields = {}
|
user_fields = {}
|
||||||
|
|
||||||
fields.each do |key, value|
|
fields.each do |key, value|
|
||||||
@ -108,7 +114,7 @@ module Jobs
|
|||||||
.where("name ILIKE ?", key)
|
.where("name ILIKE ?", key)
|
||||||
.first || :nil
|
.first || :nil
|
||||||
if @user_fields[key] == :nil
|
if @user_fields[key] == :nil
|
||||||
save_log "Invalid User Field '#{key}'"
|
save_log "Invalid User Field '#{key}' for '#{email}'"
|
||||||
@warnings += 1
|
@warnings += 1
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
@ -127,10 +133,10 @@ module Jobs
|
|||||||
|
|
||||||
def send_invite(invite)
|
def send_invite(invite)
|
||||||
email = invite[:email]
|
email = invite[:email]
|
||||||
groups = get_groups(invite[:groups])
|
groups = get_groups(invite[:groups], email)
|
||||||
topic = get_topic(invite[:topic_id])
|
topic = get_topic(invite[:topic_id], email)
|
||||||
locale = invite[:locale]
|
locale = invite[:locale]
|
||||||
user_fields = get_user_fields(invite.except(:email, :groups, :topic_id, :locale))
|
user_fields = get_user_fields(invite.except(:email, :groups, :topic_id, :locale), email)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if user = Invite.find_user_by_email(email)
|
if user = Invite.find_user_by_email(email)
|
||||||
@ -202,6 +208,7 @@ module Jobs
|
|||||||
:bulk_invite_succeeded,
|
:bulk_invite_succeeded,
|
||||||
sent: @sent,
|
sent: @sent,
|
||||||
skipped: @skipped,
|
skipped: @skipped,
|
||||||
|
skipped_emails: @skipped_emails.join("\n"),
|
||||||
warnings: @warnings,
|
warnings: @warnings,
|
||||||
logs: @logs.join("\n"),
|
logs: @logs.join("\n"),
|
||||||
)
|
)
|
||||||
@ -211,8 +218,10 @@ module Jobs
|
|||||||
:bulk_invite_failed,
|
:bulk_invite_failed,
|
||||||
sent: @sent,
|
sent: @sent,
|
||||||
skipped: @skipped,
|
skipped: @skipped,
|
||||||
|
skipped_emails: @skipped_emails.join("\n"),
|
||||||
warnings: @warnings,
|
warnings: @warnings,
|
||||||
failed: @failed,
|
failed: @failed,
|
||||||
|
failed_emails: @failed_emails.join("\n"),
|
||||||
logs: @logs.join("\n"),
|
logs: @logs.join("\n"),
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -3474,6 +3474,12 @@ en:
|
|||||||
text_body_template: |
|
text_body_template: |
|
||||||
Your bulk user invite file was processed, %{sent} invites mailed, %{skipped} skipped and %{warnings} warning(s).
|
Your bulk user invite file was processed, %{sent} invites mailed, %{skipped} skipped and %{warnings} warning(s).
|
||||||
|
|
||||||
|
Skipped Invites for Emails:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
%{skipped_emails}
|
||||||
|
```
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
%{logs}
|
%{logs}
|
||||||
```
|
```
|
||||||
@ -3484,6 +3490,18 @@ en:
|
|||||||
text_body_template: |
|
text_body_template: |
|
||||||
Your bulk user invite file was processed, %{sent} invites mailed, %{skipped} skipped, %{warnings} warning(s) and %{failed} error(s).
|
Your bulk user invite file was processed, %{sent} invites mailed, %{skipped} skipped, %{warnings} warning(s) and %{failed} error(s).
|
||||||
|
|
||||||
|
Skipped Invites for Emails:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
%{skipped_emails}
|
||||||
|
```
|
||||||
|
|
||||||
|
Failed Invites for Emails:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
%{failed_emails}
|
||||||
|
```
|
||||||
|
|
||||||
Here's the log:
|
Here's the log:
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
|
@ -20,6 +20,13 @@ RSpec.describe Jobs::BulkInvite do
|
|||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parse_skipped_and_failed_emails(input)
|
||||||
|
skipped_invites_emails = input[/Skipped Invites for Emails?:\s+``` text\n(.+?)\n```/m, 1]
|
||||||
|
failed_invites_emails = input[/Failed Invites for Emails?:\s+``` text\n(.+?)\n```/m, 1]
|
||||||
|
|
||||||
|
{ skipped_invites: skipped_invites_emails, failed_invites: failed_invites_emails }
|
||||||
|
end
|
||||||
|
|
||||||
it "raises an error when the invites array is missing" do
|
it "raises an error when the invites array is missing" do
|
||||||
expect { Jobs::BulkInvite.new.execute(current_user_id: user.id) }.to raise_error(
|
expect { Jobs::BulkInvite.new.execute(current_user_id: user.id) }.to raise_error(
|
||||||
Discourse::InvalidParameters,
|
Discourse::InvalidParameters,
|
||||||
@ -127,6 +134,18 @@ RSpec.describe Jobs::BulkInvite do
|
|||||||
expect(new_staged_user.user_fields[user_field.id.to_s]).to eq("value 3")
|
expect(new_staged_user.user_fields[user_field.id.to_s]).to eq("value 3")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "includes any skipped and failed emails in the private message" do
|
||||||
|
described_class.new.execute(
|
||||||
|
current_user_id: admin.id,
|
||||||
|
invites: [{ email: "bad_email" }, { email: user.email }, { email: "test@discourse.org" }],
|
||||||
|
)
|
||||||
|
|
||||||
|
post = Post.last
|
||||||
|
result = parse_skipped_and_failed_emails(post.raw)
|
||||||
|
expect(result[:skipped_invites]).to eq(user.email)
|
||||||
|
expect(result[:failed_invites]).to eq("bad_email")
|
||||||
|
end
|
||||||
|
|
||||||
context "when there are more than 200 invites" do
|
context "when there are more than 200 invites" do
|
||||||
let(:bulk_invites) { [] }
|
let(:bulk_invites) { [] }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user