2024-10-23 11:20:55 -04:00
|
|
|
module Onboardable
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
|
|
included do
|
2025-05-01 16:47:14 -04:00
|
|
|
before_action :require_onboarding_and_upgrade
|
|
|
|
helper_method :subscription_pending?
|
2024-10-23 11:20:55 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
2025-05-01 16:47:14 -04:00
|
|
|
# A subscription goes into "pending" mode immediately after checkout, but before webhooks are processed.
|
|
|
|
def subscription_pending?
|
|
|
|
subscribed_at = Current.session.subscribed_at
|
|
|
|
subscribed_at.present? && subscribed_at <= Time.current && subscribed_at > 1.hour.ago
|
2024-10-23 11:20:55 -04:00
|
|
|
end
|
|
|
|
|
2025-05-01 16:47:14 -04:00
|
|
|
# First, we require onboarding, then once that's complete, we require an upgrade for non-subscribed users.
|
|
|
|
def require_onboarding_and_upgrade
|
|
|
|
return unless Current.user
|
|
|
|
return unless redirectable_path?(request.path)
|
|
|
|
|
2025-05-02 15:21:46 -04:00
|
|
|
if !Current.user.onboarded?
|
2025-05-01 16:47:14 -04:00
|
|
|
redirect_to onboarding_path
|
2025-05-02 07:58:14 -04:00
|
|
|
elsif !Current.family.subscribed? && !Current.family.trialing? && !self_hosted?
|
2025-05-01 16:47:14 -04:00
|
|
|
redirect_to upgrade_subscription_path
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def redirectable_path?(path)
|
|
|
|
return false if path.starts_with?("/settings")
|
|
|
|
return false if path.starts_with?("/subscription")
|
|
|
|
return false if path.starts_with?("/onboarding")
|
|
|
|
return false if path.starts_with?("/users")
|
|
|
|
|
|
|
|
[
|
|
|
|
new_registration_path,
|
|
|
|
new_session_path,
|
|
|
|
new_password_reset_path,
|
|
|
|
new_email_confirmation_path
|
|
|
|
].exclude?(path)
|
2024-10-23 11:20:55 -04:00
|
|
|
end
|
|
|
|
end
|