cartodb-4.42/app/mailers/user_mailer.rb

133 lines
5.2 KiB
Ruby
Raw Normal View History

2024-04-06 13:25:13 +08:00
class UserMailer < ActionMailer::Base
include MailerConfig
default from: Cartodb.get_config(:mailer, 'from')
layout 'mail'
GREETINGS = %w(congrats congratulations cool awesome hooray nice wow rad bravo yay boom).freeze
def new_organization_user(user)
@user = user
@organization = @user.organization
@owner = @organization.owner
@subject = "You have been invited to #{app_name} organization '#{@organization.name}'"
@app_name = app_name
@app_link = app_link
base_url = CartoDB.base_url(@organization.name, @user.username)
if @user.enable_account_token.nil?
@link = base_url
else
path = CartoDB.path(self, 'enable_account_token_show', id: @user.enable_account_token)
@enable_account_link = "#{base_url}#{path}"
end
@user_needs_password = user_needs_password(user)
mail to: @user.email, subject: @subject
end
def share_table(table, user)
@table_visualization = table
@user = user
organization = @table_visualization.user.organization
visualization_username = @table_visualization.user.username
path = CartoDB.path(self, 'public_tables_show_bis', id: "#{visualization_username}.#{@table_visualization.name}")
@link = "#{CartoDB.base_url(organization.name, @user.username)}#{path}"
@subject = "#{visualization_username} has shared a #{app_name} dataset with you"
mail to: @user.email, subject: @subject
end
def share_visualization(visualization, user)
@visualization = visualization
@user = user
# This presenter has limited compatibility with old Visualization models
visualization_presenter = Carto::Api::VisualizationPresenter.new(visualization, user, self)
@link = visualization_presenter.privacy_aware_map_url
@subject = "#{@visualization.user.username} has shared a #{app_name} map with you"
mail to: @user.email, subject: @subject
end
def unshare_table(table_visualization_name, table_visualization_owner_name, user)
@table_visualization_name = table_visualization_name
@table_visualization_owner_name = table_visualization_owner_name
@user = user
@subject = "#{@table_visualization_owner_name} has stopped sharing a #{app_name} dataset with you"
mail to: @user.email, subject: @subject
end
def unshare_visualization(visualization_name, visualization_owner_name, user)
@visualization_name = visualization_name
@visualization_owner_name = visualization_owner_name
@user = user
@subject = "#{@visualization_owner_name} has stopped sharing a #{app_name} map with you"
mail to: @user.email, subject: @subject
end
def map_liked(visualization, viewer_user, visualization_preview_image)
@user = visualization.user
@map_name = visualization.name
@viewer_name = viewer_user.name_or_username
@preview_image = visualization_preview_image
@subject = "Your map got some love!"
@greetings = GREETINGS
mail_tracker = get_mail_tracker('like_map')
path = CartoDB.path(self, 'public_visualizations_show_map', id: visualization.id)
@link = "#{@user.public_url}#{path}#{mail_tracker}"
@viewer_maps_link = "#{viewer_user.public_url}#{CartoDB.path(self, 'public_maps_home')}"
mail to: @user.email, subject: @subject
end
def table_liked(canonical_visualization, viewer_user, visualization_preview_image)
@user = canonical_visualization.user
@dataset_name = canonical_visualization.name
@viewer_name = viewer_user.name_or_username
@preview_image = visualization_preview_image
@subject = "Your dataset got some love!"
@greetings = GREETINGS
mail_tracker = get_mail_tracker('like_map')
path = CartoDB.path(self, 'public_visualizations_show', id: canonical_visualization.id)
@link = "#{@user.public_url}#{path}#{mail_tracker}"
@viewer_datasets_link = "#{viewer_user.public_url}#{CartoDB.path(self, 'public_datasets_home')}"
mail to: @user.email, subject: @subject
end
def trending_map(visualization, mapviews, visualization_preview_image)
@user = visualization.user
@mapviews = mapviews
@map_name = visualization.name
@preview_image = visualization_preview_image
@subject = "Recent activity on one of your maps!"
@greetings = GREETINGS
mail_tracker = get_mail_tracker('trending_map')
path = CartoDB.path(self, 'public_visualizations_show_map', id: visualization.id)
@link = "#{@user.public_url}#{path}#{mail_tracker}"
mail to: @user.email, subject: @subject
end
def password_reset(user)
@user = user
@organization = @user.organization
@subject = "Reset #{app_name} password"
base_url = CartoDB.base_url(@organization.try(:name))
path = CartoDB.path(self, 'edit_password_reset', id: @user.password_reset_token)
@password_reset_link = "#{base_url}#{path}"
@app_name = app_name
@app_link = app_link
mail to: @user.email, subject: @subject
end
private
# If user has been created by the admin they need to tell them the password.
# If user has signed in through the page they doesn't.
def user_needs_password(user)
!user.google_sign_in && user.enable_account_token.nil? && !user.created_with_invitation?
end
def get_mail_tracker(tag)
hubspot = Cartodb.get_config(:metrics, 'hubspot')
hubspot["mailing_track"][tag] unless hubspot.nil? || !hubspot["mailing_track"].present?
end
end