mirror of
https://github.com/we-promise/sure.git
synced 2026-05-24 13:04:56 +00:00
* Extract hardcoded strings to i18n
Replace numerous hardcoded English strings with I18n lookups (t / I18n.t) across controllers, views, helpers, and components, and convert model validation error messages to symbol keys. Added multiple locale files under config/locales for models and views. This centralizes user-facing notices/alerts, UI text, import/validation messages, and prepares the app for localization and easier translation maintenance.
* Update en.yml
* Update preview-cleanup.yml
* Revert "Update preview-cleanup.yml"
This reverts commit 1ba6d3c34c.
* test: align i18n assertions with translated messages
* Standardize balance error key and tweak locales
Replace SophtronAccount's :requires_balance error key with :no_balance and update related locale strings for sophtron, plaid, and simplefin accounts to use the new key and clearer copy. Also switch the QIF upload redirect notice to use a relative translation key (t('.qif_uploaded')), remove an unused SSO providers help line, and fix a trailing-newline/whitespace issue in the subscriptions locale. These changes standardize validation keys and improve translation consistency and messaging.
---------
Co-authored-by: KiloClaw <kiloclaw@openclaw.ai>
72 lines
2.3 KiB
Ruby
72 lines
2.3 KiB
Ruby
class SubscriptionsController < ApplicationController
|
|
# Disables subscriptions for self hosted instances
|
|
before_action :guard_self_hosted, if: -> { self_hosted? }
|
|
|
|
# Disables Stripe portal for users without stripe_customer_id (demo users, manually created users)
|
|
guard_feature unless: -> { Current.family.can_manage_subscription? }, only: :show
|
|
|
|
# Upgrade page for unsubscribed users
|
|
def upgrade
|
|
if Current.family.subscription&.active?
|
|
redirect_to root_path, notice: t(".already_contributing")
|
|
else
|
|
@plan = params[:plan] || "annual"
|
|
render layout: "onboardings"
|
|
end
|
|
end
|
|
|
|
def new
|
|
checkout_session = stripe.create_checkout_session(
|
|
plan: params[:plan],
|
|
family_id: Current.family.id,
|
|
family_email: Current.family.payment_email,
|
|
success_url: success_subscription_url + "?session_id={CHECKOUT_SESSION_ID}",
|
|
cancel_url: upgrade_subscription_url
|
|
)
|
|
|
|
Current.family.update!(stripe_customer_id: checkout_session.customer_id)
|
|
|
|
redirect_to checkout_session.url, allow_other_host: true, status: :see_other
|
|
end
|
|
|
|
# Only used for managing our "offline" trials. Paid subscriptions are handled in success callback of checkout session
|
|
def create
|
|
if Current.family.can_start_trial?
|
|
Current.family.start_trial_subscription!
|
|
redirect_to root_path, notice: t(".welcome")
|
|
else
|
|
redirect_to root_path, alert: t(".trial_already_used")
|
|
end
|
|
end
|
|
|
|
def show
|
|
portal_session_url = stripe.create_payment_portal_session_url(
|
|
customer_id: Current.family.stripe_customer_id,
|
|
return_url: settings_payment_url
|
|
)
|
|
|
|
redirect_to portal_session_url, allow_other_host: true, status: :see_other
|
|
end
|
|
|
|
# Stripe redirects here after a successful checkout session and passes the session ID in the URL
|
|
def success
|
|
checkout_result = stripe.get_checkout_result(params[:session_id])
|
|
|
|
if checkout_result.success?
|
|
Current.family.start_subscription!(checkout_result.subscription_id)
|
|
redirect_to root_path, notice: t(".welcome_with_contribution")
|
|
else
|
|
redirect_to root_path, alert: t(".contribution_failed")
|
|
end
|
|
end
|
|
|
|
private
|
|
def guard_self_hosted
|
|
render plain: "Feature disabled: subscriptions are not available in self-hosted mode", status: :forbidden
|
|
end
|
|
|
|
def stripe
|
|
@stripe ||= Provider::Registry.get_provider(:stripe)
|
|
end
|
|
end
|