mirror of
https://github.com/discourse/discourse-subscriptions.git
synced 2025-02-27 06:04:22 +00:00
This commit adds the new stripe based pricing table. If the user is logged in, the email field will be prepopulated with the users email. The pricing table can be configured in the stripe dashboard. Once the discourse_subscriptions_pricing_table setting is filled with the pricing table embed code from the stripe dashboard, the pricing table will be displayed on /subscriptions For more details see https://stripe.com/docs/payments/checkout/pricing-table
104 lines
4.1 KiB
Ruby
104 lines
4.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# name: discourse-subscriptions
|
|
# about: Allows admins to sell subscriptions to site content.
|
|
# meta_topic_id: 140818
|
|
# version: 2.8.1
|
|
# url: https://github.com/discourse/discourse-subscriptions
|
|
# authors: Rimian Perkins, Justin DiRose
|
|
|
|
enabled_site_setting :discourse_subscriptions_enabled
|
|
|
|
gem "stripe", "11.1.0"
|
|
|
|
register_asset "stylesheets/common/main.scss"
|
|
register_asset "stylesheets/common/layout.scss"
|
|
register_asset "stylesheets/common/subscribe.scss"
|
|
register_asset "stylesheets/common/campaign.scss"
|
|
register_asset "stylesheets/mobile/main.scss"
|
|
register_svg_icon "far-credit-card" if respond_to?(:register_svg_icon)
|
|
|
|
register_html_builder("server:before-head-close") do |controller|
|
|
"<script src='https://js.stripe.com/v3/' nonce='#{controller.helpers.csp_nonce_placeholder}'></script>"
|
|
end
|
|
register_html_builder("server:before-head-close") do
|
|
'<script async src="https://js.stripe.com/v3/pricing-table.js"></script>'
|
|
end
|
|
|
|
extend_content_security_policy(script_src: %w[https://js.stripe.com/v3/ https://hooks.stripe.com])
|
|
|
|
add_admin_route "discourse_subscriptions.admin_navigation", "discourse-subscriptions.products"
|
|
|
|
Discourse::Application.routes.append do
|
|
get "/admin/plugins/discourse-subscriptions" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/products" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/products/:product_id" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/products/:product_id/plans" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/products/:product_id/plans/:plan_id" =>
|
|
"admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/subscriptions" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/plans" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/plans/:plan_id" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "/admin/plugins/discourse-subscriptions/coupons" => "admin/plugins#index",
|
|
:constraints => AdminConstraint.new
|
|
get "u/:username/billing" => "users#show", :constraints => { username: USERNAME_ROUTE_FORMAT }
|
|
get "u/:username/billing/:id" => "users#show", :constraints => { username: USERNAME_ROUTE_FORMAT }
|
|
get "u/:username/billing/subscriptions/card/:subscription_id" => "users#show",
|
|
:constraints => {
|
|
username: USERNAME_ROUTE_FORMAT,
|
|
}
|
|
end
|
|
|
|
module ::DiscourseSubscriptions
|
|
PLUGIN_NAME = "discourse-subscriptions"
|
|
end
|
|
|
|
require_relative "lib/discourse_subscriptions/engine"
|
|
require_relative "app/controllers/concerns/stripe"
|
|
require_relative "app/controllers/concerns/group"
|
|
|
|
after_initialize do
|
|
::Stripe.api_version = "2024-04-10"
|
|
|
|
module ::StripeDiscourseSubscriptions
|
|
class Engine < ::Rails::Engine
|
|
engine_name 'stripe-discourse-subscriptions'
|
|
isolate_namespace StripeDiscourseSubscriptions
|
|
end
|
|
end
|
|
StripeDiscourseSubscriptions::Engine.routes.draw do
|
|
get "/" => "pricingtable#index"
|
|
end
|
|
require_relative "app/controllers/discourse_subscriptions/pricingtable_controller.rb"
|
|
|
|
Discourse::Application.routes.append { mount ::StripeDiscourseSubscriptions::Engine, at: "subscriptions" }
|
|
|
|
::Stripe.set_app_info(
|
|
"Discourse Subscriptions",
|
|
version: "2.8.2",
|
|
url: "https://github.com/discourse/discourse-subscriptions",
|
|
)
|
|
|
|
Discourse::Application.routes.append { mount ::DiscourseSubscriptions::Engine, at: "s" }
|
|
|
|
add_to_serializer(:site, :show_campaign_banner) do
|
|
begin
|
|
enabled = SiteSetting.discourse_subscriptions_enabled
|
|
campaign_enabled = SiteSetting.discourse_subscriptions_campaign_enabled
|
|
goal_met = Discourse.redis.get("subscriptions_goal_met_date")
|
|
|
|
enabled && campaign_enabled && (!goal_met || 7.days.ago <= Date.parse(goal_met))
|
|
rescue StandardError
|
|
false
|
|
end
|
|
end
|
|
end
|