DEV: Remove the old product / pricing table display routes

This commit is contained in:
spirobel
2024-04-23 15:24:58 -06:00
committed by Blake Erickson
parent 13d23dc3fa
commit ff981f76e8
6 changed files with 0 additions and 350 deletions
@@ -1,10 +0,0 @@
import Controller from "@ember/controller";
import User from "discourse/models/user";
import discourseComputed from "discourse-common/utils/decorators";
export default Controller.extend({
@discourseComputed()
isLoggedIn() {
return User.current();
},
});
@@ -1,195 +0,0 @@
/* global Stripe */
import Controller from "@ember/controller";
import { not } from "@ember/object/computed";
import { inject as service } from "@ember/service";
import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n";
import Subscription from "discourse/plugins/discourse-subscriptions/discourse/models/subscription";
import Transaction from "discourse/plugins/discourse-subscriptions/discourse/models/transaction";
export default Controller.extend({
dialog: service(),
router: service(),
selectedPlan: null,
promoCode: null,
cardholderName: null,
cardholderAddress: {
line1: null,
city: null,
state: null,
country: null,
postalCode: null,
},
isAnonymous: not("currentUser"),
isCountryUS: false,
isCountryCA: false,
init() {
this._super(...arguments);
this.set(
"stripe",
Stripe(this.siteSettings.discourse_subscriptions_public_key)
);
const elements = this.get("stripe").elements();
this.set("cardElement", elements.create("card", { hidePostalCode: true }));
this.set("isCountryUS", this.cardholderAddress.country === "US");
this.set("isCountryCA", this.cardholderAddress.country === "CA");
},
alert(path) {
this.dialog.alert(I18n.t(`discourse_subscriptions.${path}`));
},
@discourseComputed("model.product.repurchaseable", "model.product.subscribed")
canPurchase(repurchaseable, subscribed) {
if (!repurchaseable && subscribed) {
return false;
}
return true;
},
createSubscription(plan) {
return this.stripe
.createToken(this.get("cardElement"), {
name: this.cardholderName, // Recommended by Stripe
address_line1: this.cardholderAddress.line1 ?? "",
address_city: this.cardholderAddress.city ?? "",
address_state: this.cardholderAddress.state ?? "",
address_zip: this.cardholderAddress.postalCode ?? "",
address_country: this.cardholderAddress.country, // Recommended by Stripe
})
.then((result) => {
if (result.error) {
this.set("loading", false);
return result;
} else {
const subscription = Subscription.create({
source: result.token.id,
plan: plan.get("id"),
promo: this.promoCode,
cardholderName: this.cardholderName,
cardholderAddress: this.cardholderAddress,
});
return subscription.save();
}
});
},
handleAuthentication(plan, transaction) {
return this.stripe
.confirmCardPayment(transaction.payment_intent.client_secret)
.then((result) => {
if (
result.paymentIntent &&
result.paymentIntent.status === "succeeded"
) {
return result;
} else {
this.set("loading", false);
this.dialog.alert(result.error.message || result.error);
return result;
}
});
},
_advanceSuccessfulTransaction(plan) {
this.alert("plans.success");
this.set("loading", false);
this.router.transitionTo(
plan.type === "recurring"
? "user.billing.subscriptions"
: "user.billing.payments",
this.currentUser.username.toLowerCase()
);
},
actions: {
changeCountry(country) {
this.set("cardholderAddress.country", country);
this.set("isCountryUS", country === "US");
this.set("isCountryCA", country === "CA");
},
changeState(stateOrProvince) {
this.set("cardholderAddress.state", stateOrProvince);
},
stripePaymentHandler() {
this.set("loading", true);
const plan = this.get("model.plans")
.filterBy("id", this.selectedPlan)
.get("firstObject");
const cardholderAddress = this.cardholderAddress;
const cardholderName = this.cardholderName;
if (!plan) {
this.alert("plans.validate.payment_options.required");
this.set("loading", false);
return;
}
if (!cardholderName) {
this.alert("subscribe.invalid_cardholder_name");
this.set("loading", false);
return;
}
if (!cardholderAddress.country) {
this.alert("subscribe.invalid_cardholder_country");
this.set("loading", false);
return;
}
if (cardholderAddress.country === "US" && !cardholderAddress.state) {
this.alert("subscribe.invalid_cardholder_state");
this.set("loading", false);
return;
}
if (cardholderAddress.country === "CA" && !cardholderAddress.state) {
this.alert("subscribe.invalid_cardholder_province");
this.set("loading", false);
return;
}
let transaction = this.createSubscription(plan);
transaction
.then((result) => {
if (result.error) {
this.dialog.alert(result.error.message || result.error);
} else if (
result.status === "incomplete" ||
result.status === "open"
) {
const transactionId = result.id;
const planId = this.selectedPlan;
this.handleAuthentication(plan, result).then(
(authenticationResult) => {
if (authenticationResult && !authenticationResult.error) {
return Transaction.finalize(transactionId, planId).then(
() => {
this._advanceSuccessfulTransaction(plan);
}
);
}
}
);
} else {
this._advanceSuccessfulTransaction(plan);
}
})
.catch((result) => {
this.dialog.alert(
result.jqXHR.responseJSON.errors[0] || result.errorThrown
);
this.set("loading", false);
});
},
},
});
@@ -1,3 +0,0 @@
import Controller from "@ember/controller";
export default Controller.extend({});
@@ -1,11 +0,0 @@
<div class="container">
<div class="title-wrapper">
<h1>
{{i18n "discourse_subscriptions.subscribe.title"}}
</h1>
</div>
<hr />
{{outlet}}
</div>
@@ -1,5 +0,0 @@
{{#unless isLoggedIn}}
<LoginRequired />
{{/unless}}
<ProductList @products={{model}} @isLoggedIn={{isLoggedIn}} />
@@ -1,126 +0,0 @@
<div class="discourse-subscriptions-section-columns">
<div class="section-column discourse-subscriptions-confirmation-billing">
<h2>
{{model.product.name}}
</h2>
<hr />
<p>
{{html-safe model.product.description}}
</p>
</div>
<div class="section-column">
{{#if canPurchase}}
<h2>
{{i18n "discourse_subscriptions.subscribe.card.title"}}
</h2>
<hr />
<PaymentOptions @plans={{model.plans}} @selectedPlan={{selectedPlan}} />
<hr />
<SubscribeCard @cardElement={{cardElement}} />
{{#if loading}}
{{loading-spinner}}
{{else if isAnonymous}}
<LoginRequired />
{{else}}
<Input
@type="text"
name="cardholder_name"
placeholder={{i18n
"discourse_subscriptions.subscribe.cardholder_name"
}}
@value={{cardholderName}}
class="subscribe-name"
/>
<div class="address-fields">
<SubscribeCountrySelect
@value={{cardholderAddress.country}}
@onChange={{action "changeCountry"}}
/>
<Input
@type="text"
name="cardholder_postal_code"
placeholder={{i18n
"discourse_subscriptions.subscribe.cardholder_address.postal_code"
}}
@value={{cardholderAddress.postalCode}}
class="subscribe-address-postal-code"
/>
</div>
<Input
@type="text"
name="cardholder_line1"
placeholder={{i18n
"discourse_subscriptions.subscribe.cardholder_address.line1"
}}
@value={{cardholderAddress.line1}}
class="subscribe-address-line1"
/>
<div class="address-fields">
<Input
@type="text"
name="cardholder_city"
placeholder={{i18n
"discourse_subscriptions.subscribe.cardholder_address.city"
}}
@value={{cardholderAddress.city}}
class="subscribe-address-city"
/>
{{#if isCountryUS}}
<SubscribeUsStateSelect
@value={{cardholderAddress.state}}
@onChange={{action "changeState"}}
/>
{{else if isCountryCA}}
<SubscribeCaProvinceSelect
@value={{cardholderAddress.state}}
@onChange={{action "changeState"}}
/>
{{else}}
<Input
@type="text"
name="cardholder_state"
placeholder={{i18n
"discourse_subscriptions.subscribe.cardholder_address.state"
}}
@value={{cardholderAddress.state}}
class="subscribe-address-state"
/>
{{/if}}
</div>
<Input
@type="text"
name="promo_code"
placeholder={{i18n "discourse_subscriptions.subscribe.promo_code"}}
@value={{promoCode}}
class="subscribe-promo-code"
/>
<DButton
@disabled={{loading}}
@action={{action "stripePaymentHandler"}}
class="btn btn-primary btn-payment"
@label="discourse_subscriptions.plans.payment_button"
/>
{{/if}}
{{else}}
<h2>{{i18n "discourse_subscriptions.subscribe.already_purchased"}}</h2>
<LinkTo
@route="user.billing.subscriptions"
@model={{currentUser.username}}
class="btn btn-primary"
>
{{i18n "discourse_subscriptions.subscribe.go_to_billing"}}
</LinkTo>
{{/if}}
</div>
</div>