VRFS-756 changing email invite posting behavior incrementally
This commit is contained in:
parent
fe5163b1fb
commit
a1a265f36f
|
|
@ -69,36 +69,52 @@
|
|||
|
||||
function registerEvents(onOff) {
|
||||
if(onOff) {
|
||||
$('#btn-send-invitation').on('click', sendEmail);
|
||||
$('#btn-send-invitation').on('click', sendEmails);
|
||||
$('#btn-next-invitation').on('click', clickNext);
|
||||
$('#invitation-dialog input[name=email-filter]').on('input', onFilterChange);
|
||||
}
|
||||
else {
|
||||
$('#btn-send-invitation').off('click', sendEmail);
|
||||
$('#btn-send-invitation').off('click', sendEmails);
|
||||
$('#btn-next-invitation').off('click', clickNext);
|
||||
$('#invitation-dialog input[name=email-filter]').off('input', onFilterChange);
|
||||
}
|
||||
}
|
||||
|
||||
function sendInvitation(i, emails) {
|
||||
rest.createInvitation($.trim(emails[i]), $('#txt-message').val())
|
||||
.always(function() {
|
||||
if(i < emails.length - 1) {
|
||||
sendInvitation(i + 1, emails);
|
||||
}
|
||||
});
|
||||
function invalidEmails(emails) {
|
||||
var invalid = [];
|
||||
emails.map(function(email) {
|
||||
if(!( /(.+)@(.+){2,}\.(.+){2,}/.test(email) )){
|
||||
invalid.push(email);
|
||||
}
|
||||
};
|
||||
return 0 < invalid.length ? invalid : null;
|
||||
}
|
||||
|
||||
// send invitations one after another, so as not to 'spam' the server very heavily.
|
||||
// this should be a bulk call, clearly
|
||||
function sendEmail(e) {
|
||||
function sendEmails(e) {
|
||||
if(!sendingEmail) {
|
||||
sendingEmail = true;
|
||||
var emails = $('#txt-emails').val().split(',');
|
||||
if(emails.length > 0) {
|
||||
sendInvitation(0, emails);
|
||||
var max_email = <%= Rails.application.config.max_email_invites_per_request %>;
|
||||
if (max_email < emails.length) {
|
||||
// display dialog
|
||||
alert('You can send up to '+max_email.toString()+' email invites. You have '+emails.length.toString());
|
||||
return;
|
||||
}
|
||||
var invalids = invalidEmails(emails);
|
||||
if (0 < invalids.length) {
|
||||
// display dialog
|
||||
} else {
|
||||
rest.createEmailInvitations(emails, $('#txt-message').val())
|
||||
.error(function() {
|
||||
})
|
||||
.success(function() {
|
||||
});
|
||||
trackMetrics(emails, $('#txt-emails').data('google_invite_count'));
|
||||
}
|
||||
}
|
||||
trackMetrics(emails, $('#txt-emails').data('google_invite_count'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -553,7 +553,7 @@
|
|||
return id;
|
||||
}
|
||||
|
||||
function createInvitation(emailAddress, message) {
|
||||
function createEmailInvitations(emails, message) {
|
||||
return $.ajax({
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
|
|
@ -561,7 +561,7 @@
|
|||
contentType: 'application/json',
|
||||
processData:false,
|
||||
data: JSON.stringify({
|
||||
email : emailAddress,
|
||||
emails : emails,
|
||||
note: message
|
||||
})
|
||||
});
|
||||
|
|
@ -887,7 +887,7 @@
|
|||
this.addRecordingPlay = addRecordingPlay;
|
||||
this.getSession = getSession;
|
||||
this.getClientDownloads = getClientDownloads;
|
||||
this.createInvitation = createInvitation;
|
||||
this.createEmailInvitations = createEmailInvitations;
|
||||
this.postFeedback = postFeedback;
|
||||
this.serverHealthCheck = serverHealthCheck;
|
||||
this.sendFriendRequest = sendFriendRequest;
|
||||
|
|
|
|||
|
|
@ -18,19 +18,21 @@
|
|||
end
|
||||
|
||||
def create
|
||||
@invited_user = InvitedUser.new
|
||||
@invited_user.sender = current_user
|
||||
@invited_user.email = params[:email]
|
||||
@invited_user.autofriend = true
|
||||
@invited_user.note = params[:note].blank? ? nil : params[:note]
|
||||
@invited_user.save
|
||||
|
||||
unless @invited_user.errors.any?
|
||||
respond_with @invited_user, :responder => ApiResponder, :location => api_invited_user_detail_url(@invited_user)
|
||||
else
|
||||
response.status = :unprocessable_entity
|
||||
respond_with @invited_user
|
||||
@invited_users = []
|
||||
if (emails = params[:emails]).present?
|
||||
emails = emails.split(',')[0...Rails.application.max_email_invites_per_request].uniq
|
||||
msg = params[:note].blank? ? nil : params[:note].strip
|
||||
@invited_users = emails.collect do |email|
|
||||
iu = InvitedUser.new
|
||||
iu.sender = current_user
|
||||
iu.email = email.strip
|
||||
iu.autofriend = true
|
||||
iu.note = msg
|
||||
iu.save
|
||||
iu
|
||||
end
|
||||
end
|
||||
respond_with @invited_users, :responder => ApiResponder, :location => api_invited_user_detail_url(@invited_user)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
object @invited_user
|
||||
object @invited_users
|
||||
|
||||
extends "api_invited_users/invited_user"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
object @invited_user
|
||||
|
||||
attributes :id, :created_at, :updated_at, :email, :note, :accepted
|
||||
attributes :id, :created_at, :updated_at, :email, :note, :accepted, :errors
|
||||
|
||||
|
|
|
|||
|
|
@ -28,3 +28,34 @@
|
|||
<a id="btn-next-invitation" class="button-orange">NEXT</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dialog" layout="dialog" layout-id="email-invite-dialog-alert" id="email-invite-dialog-alert">
|
||||
<div class="content-head">
|
||||
<%= image_tag "content/icon_alert.png", {:width => 19, :height => 19, :class => 'content-icon' } %>
|
||||
<h1>Warning</h1>
|
||||
</div>
|
||||
<div class="dialog-inner">
|
||||
<div id="text-email-invite-dialog-alert"></div>
|
||||
<br clear="left" /><br />
|
||||
<div class="right">
|
||||
<a id="btn-email-invite-dialog-alert" layout-action="close" class="button-orange">OK</a>
|
||||
</div>
|
||||
<br clear="all" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dialog" layout="dialog" layout-id="email-invite-dialog-invalid" id="email-invite-dialog-invlid">
|
||||
<div class="content-head">
|
||||
<%= image_tag "content/icon_alert.png", {:width => 19, :height => 19, :class => 'content-icon' } %>
|
||||
<h1>Warning</h1>
|
||||
</div>
|
||||
<div class="dialog-inner">
|
||||
<div id="text-email-invite-dialog-invalid"></div>
|
||||
<br clear="left" /><br />
|
||||
<div class="right">
|
||||
<a id="btn-email-invite-dialog-invalid" layout-action="close" class="button-orange">OK</a>
|
||||
</div>
|
||||
<br clear="all" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -205,5 +205,7 @@ if defined?(Bundler)
|
|||
config.twitter_app_secret = ENV['TWITTER_APP_SECRET'] || 'Azcy3QqfzYzn2fsojFPYXcn72yfwa0vG6wWDrZ3KT8'
|
||||
|
||||
config.autocheck_create_session_agreement = false;
|
||||
|
||||
config.max_email_invites_per_request = 10
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue