diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb index 9c3386944..3e96a1a74 100644 --- a/app/controllers/services_controller.rb +++ b/app/controllers/services_controller.rb @@ -57,29 +57,49 @@ class ServicesController < ApplicationController @uid = params[:uid] if i_id = params[:invitation_id] - invited_user = Invitation.find(i_id).recipient + invite = Invitation.find(i_id) + invited_user = invite.recipient else invite = Invitation.create(:service => params[:provider], :identifier => @uid, :sender => current_user, :aspect => current_user.aspects.find(params[:aspect_id])) invited_user = invite.attach_recipient! end - @subject = t('services.inviter.join_me_on_diaspora') - @message = < invited_user.invitation_token)} -MSG - + #to make sure a friend you just invited from facebook shows up as invited service = current_user.services.where(:type => "Services::Facebook").first su = ServiceUser.where(:service_id => service.id, :uid => @uid).first su.attach_local_models su.save - url = "https://www.facebook.com/?compose=1&id=#{@uid}&subject=#{@subject}&message=#{@message}&sk=messages" respond_to do |format| - format.html{ redirect_to url } - format.json{ render :json => {:url => url} } + format.html{ invite_redirect_url(invite, invited_user, su)} + format.json{ render :json => invite_redirect_json(invite, invited_user, su) } + end + end + + def facebook_message_url(user, facebook_uid) + subject = t('services.inviter.join_me_on_diaspora') + message = < user.invitation_token)} +MSG + "https://www.facebook.com/?compose=1&id=#{facebook_uid}&subject=#{subject}&message=#{message}&sk=messages" + end + + def invite_redirect_json(invite, user, service_user) + if invite.email_like_identifer + {:message => t("invitations.create.sent") + service_user.name } + else + {:url => facebook_message_url(user, service_user.uid)} + end + end + + def invite_redirect_url(invite, user, service_user) + if invite.email_like_identifer + redirect_to(friend_finder_path(:provider => 'facebook'), :notice => "you re-invited #{service_user.name}") + else + redirect_to(facebook_message_url(user, service_user.uid)) end end end diff --git a/app/mailers/diaspora_devise_mailer.rb b/app/mailers/diaspora_devise_mailer.rb new file mode 100644 index 000000000..3ec4cbb63 --- /dev/null +++ b/app/mailers/diaspora_devise_mailer.rb @@ -0,0 +1,5 @@ +class DiasporaDeviseMailer < Devise::Mailer + include NotifierHelper + default :from => AppConfig[:smtp_sender_address] + +end diff --git a/app/models/invitation.rb b/app/models/invitation.rb index d088458e0..4875c521e 100644 --- a/app/models/invitation.rb +++ b/app/models/invitation.rb @@ -61,7 +61,7 @@ class Invitation < ActiveRecord::Base # @return [Boolean] # @return [void] def skip_email? - self.service != 'email' + !email_like_identifer end # Attach a recipient [User] to the [Invitation] unless @@ -115,6 +115,22 @@ class Invitation < ActiveRecord::Base end end end + + # @return [String] + def email_like_identifer + case self.service + when 'email' + self.identifier + when 'facebook' + if username = ServiceUser.username_of_service_user_by_uid(self.identifier) + unless username.include?('profile.php?') + "#{username}@facebook.com" + else + nil + end + end + end + end def queue_send! unless self.recipient.present? diff --git a/app/models/service_user.rb b/app/models/service_user.rb index 7157d26c1..a13c74d9c 100644 --- a/app/models/service_user.rb +++ b/app/models/service_user.rb @@ -18,6 +18,14 @@ class ServiceUser < ActiveRecord::Base self.person_id.present? end + def self.username_of_service_user_by_uid(uid) + if su = ServiceUser.find_by_uid(uid) + su.username + else + nil + end + end + def attach_local_models service_for_uid = Services::Facebook.where(:type => service.type.to_s, :uid => self.uid).first if !service_for_uid.blank? && (service_for_uid.user.person.profile.searchable) diff --git a/app/views/devise/mailer/invitation_instructions.erb b/app/views/devise/mailer/invitation_instructions.erb index fb443a746..9e27bba76 100644 --- a/app/views/devise/mailer/invitation_instructions.erb +++ b/app/views/devise/mailer/invitation_instructions.erb @@ -17,9 +17,6 @@ - - - Finally - it's here.
@@ -31,11 +28,6 @@ - - - - - The social network you have been waiting for has arrived. Revamped, more secure, and more fun, DIASPORA* is ready to help you share and explore the web in a whole new way.
diff --git a/app/views/services/_remote_friend.html.haml b/app/views/services/_remote_friend.html.haml index db4a668c0..86abd04ed 100644 --- a/app/views/services/_remote_friend.html.haml +++ b/app/views/services/_remote_friend.html.haml @@ -2,7 +2,7 @@ .right - if friend.already_invited? - = link_to t('.resend'), service_inviter_path(:uid => friend.uid, :provider => 'facebook', :invitation_id => friend.invitation_id) + = link_to t('.resend'), service_inviter_path(:uid => friend.uid, :provider => 'facebook', :invitation_id => friend.invitation_id), :class => 'button resend' - elsif friend.on_diaspora? = render 'shared/aspect_dropdown', :selected_aspects => contact_proxy(friend).aspects, :person => friend.person, :hang => 'left' - else diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 65beed6da..718bfd33f 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -15,21 +15,14 @@ end Devise.setup do |config| # Configure the e-mail address which will be shown in DeviseMailer. - if AppConfig[:smtp_sender_address] - config.mailer_sender = AppConfig[:smtp_sender_address] - else - unless Rails.env == 'test' - Rails.logger.warn("No smtp sender address set, mail may fail.") - puts "WARNING: No smtp sender address set, mail may fail." - end - config.mailer_sender = "please-change-me@config-initializers-devise.com" - end - # ==> ORM configuration # Load and configure the ORM. Supports :active_record (default), :mongoid # (bson_ext recommended) and :data_mapper (experimental). require 'devise/orm/active_record' + # Configure the class responsible to send e-mails. + config.mailer = "DiasporaDeviseMailer" + # ==> Configuration for any authentication mechanism # Configure which keys are used when authenticating an user. By default is # just :email. You can configure it to use [:username, :subdomain], so for diff --git a/public/javascripts/contact-edit.js b/public/javascripts/contact-edit.js index cb4a1d7ac..3017cda28 100644 --- a/public/javascripts/contact-edit.js +++ b/public/javascripts/contact-edit.js @@ -5,9 +5,17 @@ var ContactEdit = { init: function(){ $.extend(ContactEdit, AspectsDropdown); - $('.dropdown.aspect_membership .dropdown_list > li').live('click', function(evt){ + $('.dropdown.aspect_membership .dropdown_list > li, .dropdown.inviter .dropdown_list >li').live('click', function(evt){ ContactEdit.processClick($(this), evt); }); + // $('.button.resend').live('click', function(evt){ + // evt.preventDefault(); + // $.post($(this).href, {}, + // function(data){ + // console.log(data); + // ContactEdit.processSuccess($(this), evt, data) + // }); + // }); }, processClick: function(li, evt){ @@ -15,6 +23,7 @@ var ContactEdit = { li.addClass('loading'); if (dropdown.hasClass('inviter')) { ContactEdit.inviteFriend(li, evt); + dropdown.html('sending, please wait...'); } else { ContactEdit.toggleAspectMembership(li, evt); @@ -26,11 +35,21 @@ var ContactEdit = { "aspect_id" : li.data("aspect_id"), "uid" : li.parent().data("service_uid") }, function(data){ - li.removeClass('loading') - window.location = data.url; + ContactEdit.processSuccess(li, evt, data); }); }, + processSuccess: function(element, evt, data) { + element.removeClass('loading') + element.parent().parent().html('sent!'); + if (data.url != undefined) { + window.location = data.url; + } else { + element.toggleClass("selected"); + Diaspora.widgets.flashes.render({'success':true, 'notice':data.message}); + } + }, + toggleAspectMembership: function(li, evt) { var button = li.find('.button'); if(button.hasClass('disabled') || li.hasClass('newItem')){ return; } diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index 78026adb1..cbbcf9df8 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -3397,3 +3397,10 @@ ul#getting_started .green :color green +// .resend +// :color black +// &:hover +// :text-decoration none +// :color black +// &:hover +// :text-decoration none