diff --git a/app/controllers/discourse_subscriptions/pricingtable_controller.rb b/app/controllers/discourse_subscriptions/pricingtable_controller.rb new file mode 100644 index 0000000..fd1e305 --- /dev/null +++ b/app/controllers/discourse_subscriptions/pricingtable_controller.rb @@ -0,0 +1,7 @@ +module StripeDiscourseSubscriptions + class PricingtableController < ::ApplicationController + def index + head 200 + end + end +end \ No newline at end of file diff --git a/assets/javascripts/discourse/controllers/subscriptions.js b/assets/javascripts/discourse/controllers/subscriptions.js new file mode 100644 index 0000000..b53451a --- /dev/null +++ b/assets/javascripts/discourse/controllers/subscriptions.js @@ -0,0 +1,35 @@ +import Controller from "@ember/controller"; +import Ember from 'ember'; +import I18n from "I18n"; + +export default Controller.extend({ + init() { + // Perform any initialization logic here + this._super(...arguments); + // Additional custom initialization code + if(this.currentUser){ + this.currentUser.checkEmail().then((r)=>this.set('email',this.currentUser.email)) + } + + }, + pricingTable: Ember.computed('email', function() { + try{ + const pricing_table_info = JSON.parse(this.siteSettings.discourse_subscriptions_pricing_table) + if(this.currentUser){ + return``; + } else { + return``; + } + + + } catch(error){ + return I18n.t("discourse_subscriptions.subscribe.no_products") + } + }), +}); diff --git a/assets/javascripts/discourse/initializers/setup-subscriptions.js b/assets/javascripts/discourse/initializers/setup-subscriptions.js index 42339a9..4ca5ada 100644 --- a/assets/javascripts/discourse/initializers/setup-subscriptions.js +++ b/assets/javascripts/discourse/initializers/setup-subscriptions.js @@ -12,7 +12,7 @@ export default { api.addNavigationBarItem({ name: "subscribe", displayName: I18n.t("discourse_subscriptions.navigation.subscribe"), - href: "/s", + href: "/subscriptions", }); } @@ -23,6 +23,30 @@ export default { href: `/u/${user.username}/billing/subscriptions`, content: "Billing", }); + + if(user.admin){ + api.modifyClassStatic('model:site-setting', { + pluginId: 'discourse-subscriptions', + update(key, value, opts = {}) { + if(key ==="discourse_subscriptions_pricing_table"){ + const inputString = value; + // Extract pricing-table-id + const pricingTableIdRegex = /pricing-table-id="([^"]+)"/; + const pricingTableIdMatch = inputString.match(pricingTableIdRegex); + const pricingTableId = pricingTableIdMatch ? pricingTableIdMatch[1] : null; + + // Extract publishable-key + const publishableKeyRegex = /publishable-key="([^"]+)"/; + const publishableKeyMatch = inputString.match(publishableKeyRegex); + const publishableKey = publishableKeyMatch ? publishableKeyMatch[1] : null; + if(pricingTableId && publishableKey){ + value = JSON.stringify({pricingTableId,publishableKey}) + } + } + this._super(key, value, opts); + } + }); + } } }); }, diff --git a/assets/javascripts/discourse/subscriptions-route-map.js b/assets/javascripts/discourse/subscriptions-route-map.js index 2d68b94..b4fb8ca 100644 --- a/assets/javascripts/discourse/subscriptions-route-map.js +++ b/assets/javascripts/discourse/subscriptions-route-map.js @@ -1,5 +1,3 @@ export default function () { - this.route("subscribe", { path: "/s" }, function () { - this.route("show", { path: "/:subscription-id" }); - }); + this.route("subscriptions") } diff --git a/assets/javascripts/discourse/templates/subscriptions.hbs b/assets/javascripts/discourse/templates/subscriptions.hbs new file mode 100644 index 0000000..9153f20 --- /dev/null +++ b/assets/javascripts/discourse/templates/subscriptions.hbs @@ -0,0 +1,3 @@ +
+{{{pricingTable}}} +
\ No newline at end of file diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 6d1f10f..edfca94 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -7,6 +7,7 @@ en: site_settings: discourse_subscriptions_enabled: Enable the Discourse Subscriptions plugin. discourse_subscriptions_extra_nav_subscribe: Show the subscribe button in the primary navigation + discourse_subscriptions_pricing_table: Copy and paste the stripe pricing table embed code here discourse_subscriptions_public_key: Stripe Publishable Key discourse_subscriptions_secret_key: Stripe Secret Key discourse_subscriptions_webhook_secret: Stripe Webhook Secret diff --git a/config/settings.yml b/config/settings.yml index 3dbd594..251c417 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -4,6 +4,10 @@ discourse_subscriptions: discourse_subscriptions_extra_nav_subscribe: default: false client: true + discourse_subscriptions_pricing_table: + default: '' + client: true + refresh: true discourse_subscriptions_public_key: default: '' client: true diff --git a/plugin.rb b/plugin.rb index 0b02690..03b9d91 100644 --- a/plugin.rb +++ b/plugin.rb @@ -21,6 +21,9 @@ register_svg_icon "far-credit-card" if respond_to?(:register_svg_icon) register_html_builder("server:before-head-close") do |controller| "" end +register_html_builder("server:before-head-close") do + '' +end extend_content_security_policy(script_src: %w[https://js.stripe.com/v3/ https://hooks.stripe.com]) @@ -65,6 +68,19 @@ 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",