Add a model to store the status of user upgrades. * Store the upgrade purchaser and the upgrade receiver (these are different for a gifted upgrade, the same for a self upgrade). * Store the upgrade type: gold, platinum, or gold-to-platinum upgrades. * Store the upgrade status: ** pending: User is still on the Stripe checkout page, no payment received yet. ** processing: User has completed checkout, but the checkout status in Stripe is still 'unpaid'. ** complete: We've received notification from Stripe that the payment has gone through and the user has been upgraded. * Store the Stripe checkout ID, to cross-reference the upgrade record on Danbooru with the checkout record on Stripe. This is the upgrade flow: * When the user clicks the upgrade button on the upgrade page, we call POST /user_upgrades and create a pending UserUpgrade. * We redirect the user to the checkout page on Stripe. * When the user completes checkout on Stripe, Stripe sends us a webhook notification at POST /webhooks/receive. * When we receive the webhook, we check the payment status, and if it's paid we mark the UserUpgrade as complete and upgrade the user. * After Stripe sees that we have successfully processed the webhook, they redirect the user to the /user_upgrades/:id page, where we show the user their upgrade receipt.
122 lines
4.5 KiB
Plaintext
122 lines
4.5 KiB
Plaintext
<% page_title "Account Upgrade" %>
|
|
<% meta_description "Upgrade to a Gold or Platinum account." %>
|
|
<script src="https://js.stripe.com/v3/"></script>
|
|
|
|
<%= render "users/secondary_links" %>
|
|
|
|
<div id="c-user-upgrades">
|
|
<div id="a-new" class="fixed-width-container">
|
|
<h1>Upgrade Account</h1>
|
|
|
|
<% unless params[:user_id] %>
|
|
<p class="copy">Want more searching power? Upgrade your account and become a power user of the best database of anime artwork on the internet.</p>
|
|
|
|
<div id="feature-comparison">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th></th>
|
|
<th>Basic</th>
|
|
<th>Gold</th>
|
|
<th>Platinum</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<colgroup id="labels"></colgroup>
|
|
<colgroup id="basic"></colgroup>
|
|
<colgroup id="gold"></colgroup>
|
|
<colgroup id="platinum"></colgroup>
|
|
<tr>
|
|
<td>Cost</td>
|
|
<td>Free</td>
|
|
<td>
|
|
<%= cents_to_usd(UserUpgrade.gold_price) %>
|
|
<div class="fineprint">One time fee</div>
|
|
</td>
|
|
<td>
|
|
<%= cents_to_usd(UserUpgrade.platinum_price) %>
|
|
<div class="fineprint">One time fee</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Tag Limit</td>
|
|
<td>2</td>
|
|
<td><%= Danbooru.config.base_tag_query_limit %></td>
|
|
<td><%= Danbooru.config.base_tag_query_limit*2 %></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Favorite Limit</td>
|
|
<td>10,000</td>
|
|
<td>20,000</td>
|
|
<td>Unlimited</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Favorite Groups</td>
|
|
<td>3</td>
|
|
<td>5</td>
|
|
<td>10</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Page Limit</td>
|
|
<td>1,000</td>
|
|
<td>2,000</td>
|
|
<td>5,000</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Saved Searches</td>
|
|
<td>250</td>
|
|
<td>250</td>
|
|
<td>1,000</td>
|
|
</tr>
|
|
<tr>
|
|
<td>See Hidden Tags</td>
|
|
<td>No</td>
|
|
<td>Yes</td>
|
|
<td>Yes</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Search Timeout</td>
|
|
<td>3 sec</td>
|
|
<td>6 sec</td>
|
|
<td>9 sec</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<% end %>
|
|
|
|
<div class="section">
|
|
<% if params[:user_id] %>
|
|
<p>You are gifting this account upgrade to <%= link_to user.pretty_name, user_path(params[:user_id]) %>.</p>
|
|
<% else %>
|
|
<p>You can also upgrade someone else's account for the same price. The easiest way is to go to their profile page and look for a "Gift Upgrade" link.</p>
|
|
<% end %>
|
|
</div>
|
|
|
|
<% if Danbooru.config.stripe_publishable_key %>
|
|
<% if CurrentUser.is_anonymous? %>
|
|
<p><%= link_to "Sign up", new_user_path %> or <%= link_to "login", login_path(url: new_user_upgrade_path) %> first to upgrade your account.</p>
|
|
<% elsif CurrentUser.safe_mode? %>
|
|
<div class="section">
|
|
<p>You can pay with a credit or debit card. Safebooru uses <a href="https://www.stripe.com">Stripe</a>
|
|
as a payment intermediary so none of your personal information will be stored on the site.</p>
|
|
|
|
<% if user.level == User::Levels::MEMBER %>
|
|
<p><%= button_to "Upgrade to Gold", user_upgrades_path(user_id: user.id, upgrade_type: "gold"), remote: true, disable_with: "Redirecting..." %></p>
|
|
<p><%= button_to "Upgrade to Platinum", user_upgrades_path(user_id: user.id, upgrade_type: "platinum"), remote: true, disable_with: "Redirecting..." %></p>
|
|
<% elsif user.level == User::Levels::GOLD %>
|
|
<p><%= button_to "Upgrade Gold to Platinum", user_upgrades_path(user_id: user.id, upgrade_type: "gold_to_platinum"), remote: true, disable_with: "Redirecting..." %></p>
|
|
<% end %>
|
|
</div>
|
|
<% else %>
|
|
<div class="section">
|
|
<p>You can pay with a credit or debit card on
|
|
<%= link_to "Safebooru", new_user_upgrade_url(user_id: user.id, host: "safebooru.donmai.us", protocol: "https") %>.
|
|
Your account will then also be upgraded on Danbooru. You can login to
|
|
Safebooru with the same username and password you use on Danbooru.</p>
|
|
</div>
|
|
<% end %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|