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",