* Add ProMembership model * Implement ProMembershipsController#create * Implement basic ProMembershipsController#show * Add ProMembership to ledger * Populate user history after pro subscription is created * Add fields for expiration notifications * Add ProMemberships::ExpirationNotifier to notify users of expiring memberships * Add tasks for recurring jobs to notify users of expiration * Add auto_recharge column to ProMembership * Add ProMemberships::Biller (incomplete) * Fix specs * Add ProMembership to Administrate * Fix spec * Add has_enough_credits? to User and Organization * Add Payments::Customer class * Finish ProMembership::Biller functionality * Fix ProMemberships::Creator check for credits * Disable destroy actions for ProMembershipsController * Correctly authenticate ProMembershipsController actions * Make sure only pro user's history can be indexed * Add ProMembershipsController#update action for auto recharge * Use regular AR to save new credits and add touch to the purchaser * Clarify Pro membership create policy * Display information about an existing pro membership * Add UI to show page * Add system test for Pro membership creation * Implement edit membership * Make sure users with pro memberships can access history and dashboard pro * Fix padding issue * Show a different text for a user that has credits but not enough for Pro * Move Pro Membership functionality inside settings * Update Pro Membership link in email notifications * Bust all relevant caches * Add the Pro checkmark around the website * Use Users::ResaveArticlesJob instead of delay * Add/remove user from pro-members chat channel * Use the appropriate Pro checkmark * Remove unfinished pro elements * Remove checkmark JS
46 lines
1.2 KiB
Ruby
46 lines
1.2 KiB
Ruby
class ProMembershipsController < ApplicationController
|
|
before_action :authenticate_user!, except: %i[show]
|
|
before_action :load_pro_membership, only: %i[update]
|
|
after_action :verify_authorized, except: %i[show]
|
|
|
|
def show
|
|
@user = current_user
|
|
@pro_membership = current_user&.pro_membership
|
|
end
|
|
|
|
def create
|
|
authorize ProMembership
|
|
|
|
if ProMemberships::Creator.call(current_user)
|
|
flash[:settings_notice] = "You are now a Pro!"
|
|
else
|
|
flash[:error] = "You don't have enough credits!"
|
|
end
|
|
|
|
redirect_to user_settings_path("pro-membership")
|
|
end
|
|
|
|
def update
|
|
raise Pundit::NotAuthorizedError, "You don't have a Pro Membership" unless @pro_membership
|
|
|
|
authorize @pro_membership
|
|
|
|
if @pro_membership.update(update_params)
|
|
flash[:settings_notice] = "Your membership has been updated!"
|
|
else
|
|
flash[:error] = "An error has occurred while updating your membership!"
|
|
end
|
|
|
|
redirect_to user_settings_path("pro-membership")
|
|
end
|
|
|
|
private
|
|
|
|
def load_pro_membership
|
|
@pro_membership = current_user.pro_membership
|
|
end
|
|
|
|
def update_params
|
|
params.require(:pro_membership).permit(:auto_recharge)
|
|
end
|
|
end
|