diff options
Diffstat (limited to 'lib/gitlab/email/message')
-rw-r--r-- | lib/gitlab/email/message/in_product_marketing.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/email/message/in_product_marketing/base.rb | 13 | ||||
-rw-r--r-- | lib/gitlab/email/message/in_product_marketing/experience.rb | 80 |
3 files changed, 88 insertions, 9 deletions
diff --git a/lib/gitlab/email/message/in_product_marketing.rb b/lib/gitlab/email/message/in_product_marketing.rb index d538238f26f..fb4315e74b2 100644 --- a/lib/gitlab/email/message/in_product_marketing.rb +++ b/lib/gitlab/email/message/in_product_marketing.rb @@ -6,10 +6,8 @@ module Gitlab module InProductMarketing UnknownTrackError = Class.new(StandardError) - TRACKS = [:create, :verify, :team, :trial].freeze - def self.for(track) - raise UnknownTrackError unless TRACKS.include?(track) + raise UnknownTrackError unless Namespaces::InProductMarketingEmailsService::TRACKS.key?(track) "Gitlab::Email::Message::InProductMarketing::#{track.to_s.classify}".constantize end diff --git a/lib/gitlab/email/message/in_product_marketing/base.rb b/lib/gitlab/email/message/in_product_marketing/base.rb index 6341a7c7596..89acc058a46 100644 --- a/lib/gitlab/email/message/in_product_marketing/base.rb +++ b/lib/gitlab/email/message/in_product_marketing/base.rb @@ -10,10 +10,11 @@ module Gitlab attr_accessor :format - def initialize(group:, series:, format: :html) + def initialize(group:, user:, series:, format: :html) raise ArgumentError, "Only #{total_series} series available for this track." unless series.between?(0, total_series - 1) @group = group + @user = user @series = series @format = format end @@ -103,11 +104,7 @@ module Gitlab protected - attr_reader :group, :series - - def total_series - 3 - end + attr_reader :group, :user, :series private @@ -115,6 +112,10 @@ module Gitlab self.class.name.demodulize.downcase.to_sym end + def total_series + Namespaces::InProductMarketingEmailsService::TRACKS[track][:interval_days].size + end + def unsubscribe_com [ s_('InProductMarketing|If you no longer wish to receive marketing emails from us,'), diff --git a/lib/gitlab/email/message/in_product_marketing/experience.rb b/lib/gitlab/email/message/in_product_marketing/experience.rb new file mode 100644 index 00000000000..4156a737517 --- /dev/null +++ b/lib/gitlab/email/message/in_product_marketing/experience.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +module Gitlab + module Email + module Message + module InProductMarketing + class Experience < Base + include Gitlab::Utils::StrongMemoize + + EASE_SCORE_SURVEY_ID = 1 + + def subject_line + s_('InProductMarketing|Do you have a minute?') + end + + def tagline + end + + def title + s_('InProductMarketing|We want your GitLab experience to be great') + end + + def subtitle + s_('InProductMarketing|Take this 1-question survey!') + end + + def body_line1 + s_('InProductMarketing|%{strong_start}Overall, how difficult or easy was it to get started with GitLab?%{strong_end}').html_safe % strong_options + end + + def body_line2 + s_('InProductMarketing|Click on the number below that corresponds with your answer — 1 being very difficult, 5 being very easy.') + end + + def cta_text + end + + def feedback_link(rating) + params = { + onboarding_progress: onboarding_progress, + response: rating, + show_invite_link: show_invite_link, + survey_id: EASE_SCORE_SURVEY_ID + } + + "#{Gitlab::Saas.com_url}/-/survey_responses?#{params.to_query}" + end + + def feedback_ratings(rating) + [ + s_('InProductMarketing|Very difficult'), + s_('InProductMarketing|Difficult'), + s_('InProductMarketing|Neutral'), + s_('InProductMarketing|Easy'), + s_('InProductMarketing|Very easy') + ][rating - 1] + end + + def feedback_thanks + s_('InProductMarketing|Feedback from users like you really improves our product. Thanks for your help!') + end + + private + + def onboarding_progress + strong_memoize(:onboarding_progress) do + group.onboarding_progress.number_of_completed_actions + end + end + + def show_invite_link + strong_memoize(:show_invite_link) do + group.member_count > 1 && group.max_member_access_for_user(user) >= GroupMember::DEVELOPER && user.preferred_language == 'en' + end + end + end + end + end + end +end |