diff --git a/assets/javascripts/discourse/components/create-coupon-form.hbs b/assets/javascripts/discourse/components/create-coupon-form.hbs deleted file mode 100644 index 741bca3..0000000 --- a/assets/javascripts/discourse/components/create-coupon-form.hbs +++ /dev/null @@ -1,47 +0,0 @@ -
-
-

- - {{input type="text" name="promo_code" value=promoCode}} -

-

- - {{combo-box - content=products - value=productId - onChange=(action (mut productId)) - options=(hash - maximum=1 - ) - }} -

-

- - {{combo-box - content=discountTypes - value=discountType - onChange=(action (mut discountType)) - }} - {{input class="discount-amount" type="text" name="amount" value=discount}} -

-

- - {{input type="checkbox" name="active" checked=active}} -

-
- - {{d-button - action=(action "createNewCoupon") - label="discourse_subscriptions.admin.coupons.create" - title="discourse_subscriptions.admin.coupons.create" - icon="plus" - class="btn-primary btn btn-icon"}} - {{d-button - action=(action "cancelCreate") - label="cancel" - title="cancel" - icon="times" - class="btn btn-icon"}} -
diff --git a/assets/javascripts/discourse/components/modal/subscription-invoices.hbs b/assets/javascripts/discourse/components/modal/subscription-invoices.hbs deleted file mode 100644 index bae5c6a..0000000 --- a/assets/javascripts/discourse/components/modal/subscription-invoices.hbs +++ /dev/null @@ -1,22 +0,0 @@ - - <:body> - {{i18n "discourse_subscriptions.user.invoices.modal.description" email=this.currentUser.email}} - - <:footer> - - {{d-icon "external-link-alt"}} - - {{i18n "discourse_subscriptions.user.invoices.modal.btn"}} - - - - - \ No newline at end of file diff --git a/assets/javascripts/discourse/components/modal/subscription-invoices.js b/assets/javascripts/discourse/components/modal/subscription-invoices.js deleted file mode 100644 index 108c548..0000000 --- a/assets/javascripts/discourse/components/modal/subscription-invoices.js +++ /dev/null @@ -1,6 +0,0 @@ -import Component from "@glimmer/component"; -import { inject as service } from "@ember/service"; - -export default class SubscriptionInvoices extends Component { - @service currentUser; -} diff --git a/assets/javascripts/discourse/components/payment-plan.hbs b/assets/javascripts/discourse/components/payment-plan.hbs deleted file mode 100644 index 873fa73..0000000 --- a/assets/javascripts/discourse/components/payment-plan.hbs +++ /dev/null @@ -1,12 +0,0 @@ -
-

- {{#if recurringPlan}} - {{i18n (concat "discourse_subscriptions.plans.interval.adverb." plan.recurring.interval)}} - {{else}} - {{i18n "discourse_subscriptions.one_time_payment"}} - {{/if}} -

-
- - {{format-currency plan.currency plan.amountDollars}} - \ No newline at end of file diff --git a/assets/javascripts/discourse/components/product-item.hbs b/assets/javascripts/discourse/components/product-item.hbs deleted file mode 100644 index 33fba67..0000000 --- a/assets/javascripts/discourse/components/product-item.hbs +++ /dev/null @@ -1,37 +0,0 @@ -

{{product.name}}

- -

- {{html-safe product.description}} -

- -{{#if isLoggedIn}} -
- {{#if product.custom}} - - {{product.btnLabel}} - - {{else}} - {{#if product.repurchaseable}} - {{#link-to "subscribe.show" product.id class="btn btn-primary"}} - {{i18n "discourse_subscriptions.subscribe.title"}} - {{/link-to}} - {{#if product.subscribed}} - {{#link-to "user.billing.subscriptions" currentUser.username class="billing-link"}} - {{i18n "discourse_subscriptions.subscribe.view_past"}} - {{/link-to}} - {{/if}} - {{else}} - {{#if product.subscribed}} - ✓ {{i18n "discourse_subscriptions.subscribe.purchased"}} - {{#link-to "user.billing.subscriptions" currentUser.username class="billing-link"}} - {{i18n "discourse_subscriptions.subscribe.go_to_billing"}} - {{/link-to}} - {{else}} - {{#link-to "subscribe.show" product.id disabled=product.subscribed class="btn btn-primary"}} - {{i18n "discourse_subscriptions.subscribe.title"}} - {{/link-to}} - {{/if}} - {{/if}} - {{/if}} -
-{{/if}} diff --git a/assets/javascripts/discourse/components/subscription-data.gjs b/assets/javascripts/discourse/components/subscription-data.gjs deleted file mode 100644 index 261f07d..0000000 --- a/assets/javascripts/discourse/components/subscription-data.gjs +++ /dev/null @@ -1,21 +0,0 @@ -import Component from "@glimmer/component"; -import SubscriptionDomains from "./subscription-domains"; - -export default class SubscriptionDomain extends Component { - -} diff --git a/assets/javascripts/discourse/components/subscription-domain.gjs b/assets/javascripts/discourse/components/subscription-domain.gjs deleted file mode 100644 index 2f6392e..0000000 --- a/assets/javascripts/discourse/components/subscription-domain.gjs +++ /dev/null @@ -1,31 +0,0 @@ -import Component from "@glimmer/component"; -import { action } from "@ember/object"; -import DButton from "discourse/components/d-button"; -import { tracked } from "@glimmer/tracking"; - -export default class SubscriptionDomain extends Component { - @tracked removing; - - @action - removeDomain() { - this.removing = true; - this.args.remove(this.args.domain) - .finally(() => { - if (this.isDestroying || this.isDestroyed) { - return; - } - this.removing = false; - }) - } - - -} \ No newline at end of file diff --git a/assets/javascripts/discourse/components/subscription-domains.gjs b/assets/javascripts/discourse/components/subscription-domains.gjs deleted file mode 100644 index 27c5038..0000000 --- a/assets/javascripts/discourse/components/subscription-domains.gjs +++ /dev/null @@ -1,40 +0,0 @@ -import Component from "@glimmer/component"; -import { action } from "@ember/object"; -import DButton from "discourse/components/d-button"; -import { tracked } from "@glimmer/tracking"; -import { popupAjaxError } from "discourse/lib/ajax-error"; -import { ajax } from "discourse/lib/ajax"; -import SubscriptionDomain from "./subscription-domain"; - -export default class SubscriptionDomains extends Component { - @tracked domains; - - constructor() { - super(...arguments); - this.domains = this.args.domains; - } - - @action - removeDomain(domain) { - return ajax('/subscription-server/user-authorizations', { - type: 'DELETE', - data: { - domain - } - }) - .catch(popupAjaxError) - .then(() => { - this.domains = this.domains.filter((d) => (d !== domain)); - }); - } - - -} \ No newline at end of file diff --git a/assets/javascripts/discourse/components/subscription-invoices-btn.gjs b/assets/javascripts/discourse/components/subscription-invoices-btn.gjs deleted file mode 100644 index b32fba7..0000000 --- a/assets/javascripts/discourse/components/subscription-invoices-btn.gjs +++ /dev/null @@ -1,23 +0,0 @@ -import Component from "@glimmer/component"; -import { action } from "@ember/object"; -import { inject as service } from "@ember/service"; -import DButton from "discourse/components/d-button"; -import SubscriptionInvoicesModal from "./modal/subscription-invoices"; - -export default class SubscriptionInvoicesBtn extends Component { - @service modal; - - @action - showModal() { - this.modal.show(SubscriptionInvoicesModal, { model: this.args }); - } - - -} diff --git a/assets/javascripts/discourse/components/subscriptions-banner.hbs b/assets/javascripts/discourse/components/subscriptions-banner.hbs deleted file mode 100644 index 8d15644..0000000 --- a/assets/javascripts/discourse/components/subscriptions-banner.hbs +++ /dev/null @@ -1 +0,0 @@ -{{text}} diff --git a/assets/javascripts/discourse/components/subscriptions-banner.js b/assets/javascripts/discourse/components/subscriptions-banner.js deleted file mode 100644 index a6eaeb5..0000000 --- a/assets/javascripts/discourse/components/subscriptions-banner.js +++ /dev/null @@ -1,16 +0,0 @@ -import Component from "@ember/component"; -import discourseComputed from "discourse-common/utils/decorators"; - -export default Component.extend({ - classNameBindings: [":subscriptions-banner", "showBanner:visible"], - - @discourseComputed("currentPath", "text") - showBanner(currentPath, text) { - return currentPath.includes('subscribe') && text && text.length > 2; - }, - - @discourseComputed() - text() { - return this.siteSettings.custom_wizard_subscription_banner; - } -}); diff --git a/assets/javascripts/discourse/connectors/top-notices/subscriptions-banner-container.hbs b/assets/javascripts/discourse/connectors/top-notices/subscriptions-banner-container.hbs deleted file mode 100644 index b4f64b0..0000000 --- a/assets/javascripts/discourse/connectors/top-notices/subscriptions-banner-container.hbs +++ /dev/null @@ -1 +0,0 @@ -{{subscriptions-banner currentPath=currentPath}} diff --git a/assets/javascripts/discourse/initializers/subscription-server-initializer.js b/assets/javascripts/discourse/initializers/subscription-server-initializer.js deleted file mode 100644 index 61a6746..0000000 --- a/assets/javascripts/discourse/initializers/subscription-server-initializer.js +++ /dev/null @@ -1,106 +0,0 @@ -import { withPluginApi } from "discourse/lib/plugin-api"; -import discourseComputed from "discourse-common/utils/decorators"; -import { popupAjaxError } from "discourse/lib/ajax-error"; -import { ajax } from "discourse/lib/ajax"; -import { customProducts, productOrder } from '../lib/products'; - -export default { - name: 'subscription-servier-initializer', - initialize() { - withPluginApi('0.8.30', api => { - api.modifyClass('component:payment-plan', { - pluginId: 'discourse-subscription-server', - classNameBindings: [':btn-pavilion-subscribe', 'selectedClass'], - tagName: "div", - - click() { - this.clickPlan(this.plan); - } - }); - - api.modifyClass('route:admin-plugins-discourse-subscriptions-coupons', { - pluginId: 'discourse-subscription-server', - - afterModel() { - const AdminProduct = requirejs("discourse/plugins/discourse-subscriptions/discourse/models/admin-product").default; - return AdminProduct.findAll().then(products => { - this.set('products', products); - }); - }, - - setupController(controller, model) { - controller.setProperties({ - model, - products: this.products - }) - } - }); - - api.modifyClass('controller:admin-plugins-discourse-subscriptions-coupons', { - pluginId: 'discourse-subscription-server', - - actions: { - createNewCoupon(params) { - const data = { - promo: params.promo, - discount_type: params.discount_type, - discount: params.discount, - active: params.active, - applies_to_products: params.applies_to_products - }; - - return ajax("/s/admin/coupons", { - method: "post", - data, - }) - .then(() => { - this.send("closeCreateForm"); - this.send("reloadModel"); - }) - .catch(popupAjaxError); - } - } - }); - - const couponController = api._lookupContainer('controller:admin-plugins-discourse-subscriptions-coupons'); - api.modifyClass('component:create-coupon-form', { - pluginId: 'discourse-subscription-server', - - @discourseComputed - products() { - return couponController.get('products'); - }, - - actions: { - createNewCoupon() { - const createParams = { - promo: this.promoCode, - discount_type: this.discountType, - discount: this.discount, - active: this.active, - applies_to_products: [this.productId] - }; - this.create(createParams); - }, - }, - }); - - api.modifyClass('route:subscribe-index', { - pluginId: 'discourse-subscription-server', - - setupController(controller, model) { - const stripeProducts = model; - const Product = requirejs("discourse/plugins/discourse-subscriptions/discourse/models/product").default; - const nonStripeProducts = customProducts().map((product) => Product.create(product)); - const products = stripeProducts - .concat(nonStripeProducts) - .filter(p => (!p.hidden)) - .sort(function(a,b) { - return productOrder.indexOf(a.name) - productOrder.indexOf(b.name); - }); - controller.set('model', products); - } - }); - }) - } -} diff --git a/assets/javascripts/discourse/lib/products.js b/assets/javascripts/discourse/lib/products.js deleted file mode 100644 index 090f0e6..0000000 --- a/assets/javascripts/discourse/lib/products.js +++ /dev/null @@ -1,34 +0,0 @@ -import { helperContext } from "discourse-common/lib/helpers"; - -const customProducts = () => { - const siteSettings = helperContext().siteSettings; - - return [ - { - name: 'Custom Wizard Community', - description: `

${siteSettings.custom_wizard_community_subscription_description}

`, - btnLabel: 'Apply', - btnHref: siteSettings.custom_wizard_community_subscription_href, - custom: true, - }, - { - name: 'Custom Wizard Enterprise', - description: `

${siteSettings.custom_wizard_enterprise_subscription_description}

`, - btnLabel: 'Contact Us', - btnHref: siteSettings.custom_wizard_enterprise_subscription_href, - custom: true, - } - ]; -} - -const productOrder = [ - 'Custom Wizard Community', - 'Custom Wizard Small Business', - 'Custom Wizard Business', - 'Custom Wizard Enterprise' -]; - -export { - customProducts, - productOrder -} diff --git a/assets/javascripts/discourse/routes/subscribe-alias.js b/assets/javascripts/discourse/routes/subscribe-alias.js deleted file mode 100644 index 8642190..0000000 --- a/assets/javascripts/discourse/routes/subscribe-alias.js +++ /dev/null @@ -1,7 +0,0 @@ -import Route from "@ember/routing/route"; - -export default Route.extend({ - afterModel() { - return this.replaceWith("subscribe"); - } -}); diff --git a/assets/javascripts/discourse/routes/user-billing-authorizations.js b/assets/javascripts/discourse/routes/user-billing-authorizations.js deleted file mode 100644 index fefdd59..0000000 --- a/assets/javascripts/discourse/routes/user-billing-authorizations.js +++ /dev/null @@ -1,9 +0,0 @@ -import Route from "@ember/routing/route"; - -export default Route.extend({ - templateName: "user/billing/authorizations", - - model() { - return this.modelFor('user'); - } -}); diff --git a/assets/javascripts/discourse/subscriptions-route-map.js b/assets/javascripts/discourse/subscriptions-route-map.js deleted file mode 100644 index 0227b0a..0000000 --- a/assets/javascripts/discourse/subscriptions-route-map.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function () { - this.route("subscribeAlias", { path: "/subscribe" }); -} diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-subscriptions-products-show.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-subscriptions-products-show.hbs deleted file mode 100644 index 8883530..0000000 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-subscriptions-products-show.hbs +++ /dev/null @@ -1,175 +0,0 @@ -

{{i18n "discourse_subscriptions.admin.products.title"}}

- -
-

- - {{input type="text" name="name" value=model.product.name}} -

- -

- - - {{textarea - name="description" - value=model.product.metadata.description - class="discourse-subscriptions-admin-textarea" - }} - -

- {{i18n "discourse_subscriptions.admin.products.product.description_help"}} -
-

- -

- - - {{input - type="text" - name="statement_descriptor" - value=model.product.statement_descriptor - }} - -

- {{i18n - "discourse_subscriptions.admin.products.product.statement_descriptor_help" - }} -
-

- -

- - - {{input - type="checkbox" - name="repurchaseable" - checked=model.product.metadata.repurchaseable - }} - -

- {{i18n "discourse_subscriptions.admin.products.product.repurchase_help"}} -
-

- -

- - - {{input - type="checkbox" - name="hidden" - checked=model.product.metadata.hidden - }} - -

- {{i18n "discourse_subscriptions.admin.products.product.hidden_help"}} -
-

- -

- - - {{input type="checkbox" name="active" checked=model.product.active}} - -

- {{i18n "discourse_subscriptions.admin.products.product.active_help"}} -
-

-
- -{{#unless model.product.isNew}} -

{{i18n "discourse_subscriptions.admin.plans.title"}}

- -

- - - - - - - - - - - - - {{#each model.plans as |plan|}} - - - - - - - - - - {{else}} - - - - {{/each}} - -
{{i18n "discourse_subscriptions.admin.plans.plan.nickname"}}{{i18n "discourse_subscriptions.admin.plans.plan.interval"}}{{i18n "discourse_subscriptions.admin.plans.plan.created_at"}}{{i18n "discourse_subscriptions.admin.plans.plan.group"}}{{i18n "discourse_subscriptions.admin.plans.plan.active"}} - {{i18n "discourse_subscriptions.admin.plans.plan.amount"}} - - {{#link-to - "adminPlugins.discourse-subscriptions.products.show.plans.show" - model.product.id - "new" - class="btn" - }} - {{i18n "discourse_subscriptions.admin.plans.operations.add"}} - {{/link-to}} -
{{plan.nickname}}{{plan.recurring.interval}}{{format-unix-date plan.created}}{{plan.metadata.group_name}}{{plan.active}} - {{format-currency plan.currency plan.amountDollars}} - - {{#link-to - "adminPlugins.discourse-subscriptions.products.show.plans.show" - model.product.id - plan.id - class="btn no-text btn-icon" - }} - {{d-icon "far-edit"}} - {{/link-to}} -
-
- {{i18n - "discourse_subscriptions.admin.products.product.plan_help" - }} -
-

-{{/unless}} - -
- {{d-button label="cancel" action=(action "cancelProduct") icon="times"}} - - {{#if model.product.isNew}} - {{d-button - label="discourse_subscriptions.admin.products.operations.create" - action=(action "createProduct") - icon="plus" - class="btn btn-primary" - }} - {{else}} - {{d-button - label="discourse_subscriptions.admin.products.operations.update" - action=(action "updateProduct") - icon="check" - class="btn btn-primary" - }} - {{/if}} -
- -{{outlet}} diff --git a/assets/javascripts/discourse/templates/user/billing.hbs b/assets/javascripts/discourse/templates/user/billing.hbs deleted file mode 100644 index 36241a1..0000000 --- a/assets/javascripts/discourse/templates/user/billing.hbs +++ /dev/null @@ -1,29 +0,0 @@ -{{#d-section - pageClass="user-billing" - class="user-secondary-navigation" - scrollTop="false" -}} -
- - - - -
  • - -
  • -
    -
    -{{/d-section}} - -
    - {{outlet}} -
    diff --git a/assets/javascripts/discourse/templates/user/billing/authorizations.hbs b/assets/javascripts/discourse/templates/user/billing/authorizations.hbs deleted file mode 100644 index 75ad03d..0000000 --- a/assets/javascripts/discourse/templates/user/billing/authorizations.hbs +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - {{#each model.subscription_domains as |data|}} - - {{/each}} - -
    {{i18n "discourse_subscriptions.user.authorizations.resource"}}{{i18n "discourse_subscriptions.user.authorizations.products"}}{{i18n "discourse_subscriptions.user.authorizations.domains"}}{{i18n "discourse_subscriptions.user.authorizations.domain_limit"}}
    diff --git a/assets/javascripts/discourse/user-subscriptions-route-map.js b/assets/javascripts/discourse/user-subscriptions-route-map.js deleted file mode 100644 index 47fc38c..0000000 --- a/assets/javascripts/discourse/user-subscriptions-route-map.js +++ /dev/null @@ -1,13 +0,0 @@ -export default { - resource: "user", - path: "users/:username", - map() { - this.route("billing", function () { - this.route("payments"); - this.route("authorizations"); - this.route("subscriptions", function () { - this.route("card", { path: "/card/:stripe-subscription-id" }); - }); - }); - }, -}; diff --git a/assets/stylesheets/common/common.scss b/assets/stylesheets/common/common.scss deleted file mode 100644 index 1ca0a3d..0000000 --- a/assets/stylesheets/common/common.scss +++ /dev/null @@ -1,73 +0,0 @@ -.btn-pavilion-subscribe { - border: 2px solid var(--tertiary); - padding: 2em; - margin-right: 2em; - cursor: pointer; - text-align: center; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - line-height: unset; - - &.selected { - background-color: var(--tertiary); - color: var(--secondary); - } -} - -.discourse-subscriptions-section-columns { - margin: 20px 0; - padding: 20px 0; -} - -.product-list { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(48.5%, 1fr)); - grid-gap: 2em; - margin: 2em 0 4em 0; - - .product { - margin: 0; - width: unset; - } -} - -.subscriptions-banner { - display: none; - padding: 1rem; - margin-bottom: 1rem; - background-color: rgba(255, 200, 0, 0.25); - - &.visible { - display: block; - } -} - -.subscription-data { - ul { - list-style: none; - margin: 0; - } - td { - vertical-align: top; - } -} - -.subscription-domain { - display: flex; - gap: 1em; - align-items: center; - - .remove-domain { - background-color: unset; - } -} - -.discourse-subscriptions-invoices-btn { - margin-left: auto; - - .d-button-label { - color: var(--secondary) !important; - } -} diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml deleted file mode 100644 index 73635f9..0000000 --- a/config/locales/client.en.yml +++ /dev/null @@ -1,37 +0,0 @@ -en: - site_settings: - custom_wizard_community_subscription_description: Description of the community subscription - custom_wizard_enterprise_subscription_description: Description of the enterprise subscription - custom_wizard_community_subscription_href: Community subscription href - custom_wizard_enterprise_subscription_href: Enterprise subscription href - custom_wizard_subscription_banner: Notice to show on subscription routes - js: - discourse_subscriptions: - admin: - products: - product: - plugin_name: Plugin Name - plugin_name_help: Name of plugin subscription is for. If filled, will generate API Key with subscription. - navigation: - authorizations: Authorizations - user: - authorizations: - resource: Resource - products: Products - domains: Domains - domain_limit: Domain Limit - remove_domain: - title: Remove domain - invoices: - btn: - label: "Invoices" - title: "Your subscription invoices" - modal: - title: Your Subscription Invoices - description: Click "Customer Portal" to go to Pavilion's Stripe Customer Portal where you can access your invoices. Sign in using %{email}. - btn: "Customer Portal" - admin: - products: - product: - hidden: Hidden - hidden_help: "Don't display the product in the subscriptions index." \ No newline at end of file diff --git a/config/settings.yml b/config/settings.yml index 73ef249..d7d9bc5 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -1,21 +1,8 @@ plugins: - subscription_server_enabled: true + subscription_server_enabled: + client: true + default: true subscription_server_supplier_name: '' subscription_server_subscriptions: type: list - default: '' - custom_wizard_community_subscription_description: - client: true - default: 'Custom Wizard Community Subscription Description' - custom_wizard_enterprise_subscription_description: - client: true - default: 'Custom Wizard Enterprise Subscription Description' - custom_wizard_community_subscription_href: - client: true - default: 'https://coop.pavilion.tech/w/community-subscription' - custom_wizard_enterprise_subscription_href: - client: true - default: 'https://calendly.com/book-pavilion/initial-consult' - custom_wizard_subscription_banner: - client: true default: '' \ No newline at end of file diff --git a/plugin.rb b/plugin.rb index a77a944..d34edef 100644 --- a/plugin.rb +++ b/plugin.rb @@ -8,7 +8,6 @@ # contact_emails: development@pavilion.tech enabled_site_setting :subscription_server_enabled -register_asset "stylesheets/common/common.scss" after_initialize do %w[ @@ -136,4 +135,10 @@ def self.class_update_subscriptions_from_csv(path) end end end + + on(:after_plugin_activation) do + Discourse.plugins.sort_by! do |plugin| + plugin.name == 'discourse-subscription-server' ? 1 : 0 + end + end end