mirror of
https://github.com/codeninjasllc/discourse.git
synced 2025-04-28 23:14:04 -04:00
FEATURE: Add topic invitation support to Bulk Invite
This commit is contained in:
parent
00910679ad
commit
52f9984804
3 changed files with 77 additions and 42 deletions
|
@ -47,54 +47,63 @@ module Jobs
|
||||||
return csv_path
|
return csv_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate_email(email)
|
||||||
|
/\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/.match(email)
|
||||||
|
end
|
||||||
|
|
||||||
def read_csv_file(csv_path)
|
def read_csv_file(csv_path)
|
||||||
CSV.foreach(csv_path) do |csv_info|
|
CSV.foreach(csv_path) do |csv_info|
|
||||||
if !csv_info[0].nil?
|
if !csv_info[0].nil?
|
||||||
if validate_email(csv_info[0])
|
if validate_email(csv_info[0])
|
||||||
# email is valid, now check for groups
|
# email is valid
|
||||||
if !csv_info[1].nil?
|
send_invite(csv_info, $INPUT_LINE_NUMBER)
|
||||||
# group(s) present
|
|
||||||
send_invite_with_groups(csv_info[0], csv_info[1], $INPUT_LINE_NUMBER)
|
|
||||||
else
|
|
||||||
# no group present
|
|
||||||
send_invite_without_group(csv_info[0])
|
|
||||||
end
|
|
||||||
@sent += 1
|
@sent += 1
|
||||||
else
|
else
|
||||||
# invalid email
|
# invalid email
|
||||||
log "Invalid email '#{csv_info[0]}' at line number '#{$INPUT_LINE_NUMBER}'"
|
log "Invalid Email '#{csv_info[0]}' at line number '#{$INPUT_LINE_NUMBER}'"
|
||||||
@failed += 1
|
@failed += 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_email(email)
|
def get_group_ids(group_names, csv_line_number)
|
||||||
/\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/.match(email)
|
|
||||||
end
|
|
||||||
|
|
||||||
def send_invite_with_groups(email, group_names, csv_line_number)
|
|
||||||
group_ids = []
|
group_ids = []
|
||||||
group_names = group_names.split(';')
|
if !group_names.nil?
|
||||||
group_names.each { |group_name|
|
group_names = group_names.split(';')
|
||||||
group_detail = Group.find_by_name(group_name)
|
group_names.each { |group_name|
|
||||||
if !group_detail.nil?
|
group_detail = Group.find_by_name(group_name)
|
||||||
# valid group
|
if !group_detail.nil?
|
||||||
group_ids.push(group_detail.id)
|
# valid group
|
||||||
else
|
group_ids.push(group_detail.id)
|
||||||
# invalid group
|
else
|
||||||
log "Invalid group '#{group_name}' at line number '#{csv_line_number}'"
|
# invalid group
|
||||||
end
|
log "Invalid Group '#{group_name}' at line number '#{csv_line_number}'"
|
||||||
}
|
end
|
||||||
Invite.invite_by_email(email, @current_user, topic=nil, group_ids)
|
}
|
||||||
|
end
|
||||||
|
return group_ids
|
||||||
end
|
end
|
||||||
|
|
||||||
def send_invite_without_group(email)
|
def get_topic(topic_id, csv_line_number)
|
||||||
Invite.invite_by_email(email, @current_user, topic=nil)
|
topic = nil
|
||||||
|
if !topic_id.nil?
|
||||||
|
topic = Topic.find_by_id(topic_id)
|
||||||
|
if topic.nil?
|
||||||
|
log "Invalid Topic ID '#{topic_id}' at line number '#{csv_line_number}'"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return topic
|
||||||
|
end
|
||||||
|
|
||||||
|
def send_invite(csv_info, csv_line_number)
|
||||||
|
email = csv_info[0]
|
||||||
|
group_ids = get_group_ids(csv_info[1], csv_line_number)
|
||||||
|
topic = get_topic(csv_info[2], csv_line_number)
|
||||||
|
Invite.invite_by_email(email, @current_user, topic, group_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
def log(message)
|
def log(message)
|
||||||
puts(message) rescue nil
|
|
||||||
save_log(message)
|
save_log(message)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
2
spec/fixtures/csv/discourse.csv
vendored
2
spec/fixtures/csv/discourse.csv
vendored
|
@ -1 +1 @@
|
||||||
jeff@gmail.com
sam@yahoo.com
robin@outlook.com
neil@aol.com
regis@live.com
|
jeff@gmail.com,discourse;ubuntu,100
sam@yahoo.com,ubuntu,
robin@outlook.com,discourse,200
neil@aol.com,random,
regis@live.com,,8888
|
|
|
@ -24,35 +24,61 @@ describe Jobs::BulkInvite do
|
||||||
it 'reads csv file' do
|
it 'reads csv file' do
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.read_csv_file(csv_file)
|
bulk_invite.read_csv_file(csv_file)
|
||||||
Invite.where(email: 'robin@outlook.com').exists?.should be_true
|
Invite.where(email: "robin@outlook.com").exists?.should be_true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '.send_invite_with_groups' do
|
context '.send_invite' do
|
||||||
let(:bulk_invite) { Jobs::BulkInvite.new }
|
let(:bulk_invite) { Jobs::BulkInvite.new }
|
||||||
let(:user) { Fabricate(:user) }
|
let(:user) { Fabricate(:user) }
|
||||||
let(:group) { Fabricate(:group) }
|
let(:group) { Fabricate(:group) }
|
||||||
|
let(:topic) { Fabricate(:topic) }
|
||||||
let(:email) { "evil@trout.com" }
|
let(:email) { "evil@trout.com" }
|
||||||
|
let(:csv_info) { [] }
|
||||||
|
|
||||||
|
it 'creates an invite' do
|
||||||
|
csv_info[0] = email
|
||||||
|
|
||||||
it 'creates an invite to the group' do
|
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.send_invite_with_groups(email, group.name, 1)
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
|
Invite.where(email: email).exists?.should be_true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates an invite with group' do
|
||||||
|
csv_info[0] = email
|
||||||
|
csv_info[1] = group.name
|
||||||
|
|
||||||
|
bulk_invite.current_user = user
|
||||||
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
invite = Invite.where(email: email).first
|
invite = Invite.where(email: email).first
|
||||||
invite.should be_present
|
invite.should be_present
|
||||||
InvitedGroup.where(invite_id: invite.id, group_id: group.id).exists?.should be_true
|
InvitedGroup.where(invite_id: invite.id, group_id: group.id).exists?.should be_true
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
context '.send_invite_without_group' do
|
it 'creates an invite with topic' do
|
||||||
let(:bulk_invite) { Jobs::BulkInvite.new }
|
csv_info[0] = email
|
||||||
let(:user) { Fabricate(:user) }
|
csv_info[2] = topic
|
||||||
let(:email) { "evil@trout.com" }
|
|
||||||
|
|
||||||
it 'creates an invite' do
|
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.send_invite_without_group(email)
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
Invite.where(email: email).exists?.should be_true
|
invite = Invite.where(email: email).first
|
||||||
|
invite.should be_present
|
||||||
|
TopicInvite.where(invite_id: invite.id, topic_id: topic.id).exists?.should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'creates an invite with group and topic' do
|
||||||
|
csv_info[0] = email
|
||||||
|
csv_info[1] = group.name
|
||||||
|
csv_info[2] = topic
|
||||||
|
|
||||||
|
bulk_invite.current_user = user
|
||||||
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
|
invite = Invite.where(email: email).first
|
||||||
|
invite.should be_present
|
||||||
|
InvitedGroup.where(invite_id: invite.id, group_id: group.id).exists?.should be_true
|
||||||
|
TopicInvite.where(invite_id: invite.id, topic_id: topic.id).exists?.should be_true
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue