VRFS-756 changing email invite posting behavior incrementally

This commit is contained in:
Jonathan Kolyer 2014-02-25 03:29:03 +00:00
parent fe5163b1fb
commit a1a265f36f
7 changed files with 80 additions and 29 deletions

View File

@ -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'));
}
}

View File

@ -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;

View File

@ -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

View File

@ -1,3 +1,3 @@
object @invited_user
object @invited_users
extends "api_invited_users/invited_user"

View File

@ -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

View File

@ -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>

View File

@ -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