diff options
Diffstat (limited to 'app/helpers/learn_gitlab_helper.rb')
-rw-r--r-- | app/helpers/learn_gitlab_helper.rb | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/app/helpers/learn_gitlab_helper.rb b/app/helpers/learn_gitlab_helper.rb new file mode 100644 index 00000000000..e72a9c83fc9 --- /dev/null +++ b/app/helpers/learn_gitlab_helper.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +module LearnGitlabHelper + def learn_gitlab_experiment_enabled?(project) + return false unless current_user + return false unless experiment_enabled_for_user? + + learn_gitlab_onboarding_available?(project) + end + + def onboarding_actions_data(project) + attributes = onboarding_progress(project).attributes.symbolize_keys + + action_urls.map do |action, url| + [ + action, + url: url, + completed: attributes[OnboardingProgress.column_name(action)].present? + ] + end.to_h + end + + private + + ACTION_ISSUE_IDS = { + git_write: 2, + pipeline_created: 4, + merge_request_created: 6, + user_added: 7, + trial_started: 13, + required_mr_approvals_enabled: 15, + code_owners_enabled: 16 + }.freeze + + ACTION_DOC_URLS = { + security_scan_enabled: 'https://docs.gitlab.com/ee/user/application_security/security_dashboard/#gitlab-security-dashboard-security-center-and-vulnerability-reports' + }.freeze + + def action_urls + ACTION_ISSUE_IDS.transform_values { |id| project_issue_url(learn_gitlab_project, id) }.merge(ACTION_DOC_URLS) + end + + def learn_gitlab_project + @learn_gitlab_project ||= LearnGitlab.new(current_user).project + end + + def onboarding_progress(project) + OnboardingProgress.find_by(namespace: project.namespace) # rubocop: disable CodeReuse/ActiveRecord + end + + def experiment_enabled_for_user? + Gitlab::Experimentation.in_experiment_group?(:learn_gitlab_a, subject: current_user) || + Gitlab::Experimentation.in_experiment_group?(:learn_gitlab_b, subject: current_user) + end + + def learn_gitlab_onboarding_available?(project) + OnboardingProgress.onboarding?(project.namespace) && + LearnGitlab.new(current_user).available? + end +end |