class Muck::SubscriptionsController < ApplicationController unloadable before_filter :login_required ssl_required :new, :reciept, :confirm, :create, :update def show @subscription = current_user.subscriptions.find(params[:id]) rescue nil respond_to do |format| format.html { render :template => 'subscriptions/show' } end end def receipt @subscription = current_user.subscriptions.find(params[:id]) rescue nil respond_to do |format| format.html { render :template => 'subscriptions/receipt' } end end def new if !current_user.billing_information @billing_information = BillingInformation.create(:first_name => current_user.first_name, :last_name => current_user.last_name) current_user.billing_informations << @billing_information end new_action end def confirm respond_to do |format| format.html { render :template => 'subscriptions/confirm' } end end def confirm_unsubscribe respond_to do |format| format.html { render :template => 'subscriptions/confirm_unsubscribe' } end end def create @coupon_code = params[:coupon_code] @billing_information = current_user.create_update_billing_information!(params[:billing_information]) @subscription_plan = get_subscription_plan # get or create a subscription plan as needed @subscription = Subscription.subscribe(current_user, @subscription_plan.id, @coupon_code) MuckCommerceMailer.deliver_user_subscribe_notification(current_user, @subscription) flash[:notice] = translate('muck.commerce.subscribe_thanks') redirect_to subscription_path(@subscription) rescue ActiveRecord::RecordInvalid new_action(t('muck.commerce.subscription_values_problem')) rescue MuckCommerce::Exceptions::PaymentGatewayError => ex new_action(ex) rescue MuckCommerce::Exceptions::SubscriptionError => ex new_action(ex) rescue MuckCommerce::Exceptions::CouponError => ex new_action(translate('muck.commerce.coupon_problem', :error => ex)) end def update @subscription = Subscription.find(params[:id]) @coupon_code = params[:coupon_code] @subscription.update_attributes!(params[:subscription]) redirect_to subscription_path(@subscription) rescue MuckCommerce::Exceptions::CouponError, MuckCommerce::Exceptions::PaymentGatewayError => ex new_action(translate('muck.commerce.coupon_problem', :error => ex)) rescue MuckCommerce::Exceptions::PaymentGatewayError => ex new_action(translate('muck.commerce.subscription_problem', :error => ex)) rescue MuckCommerce::Exceptions::SubscriptionError => ex new_action(translate('muck.commerce.subscription_problem', :error => ex)) rescue ActiveRecord::RecordInvalid => ex new_action(translate('muck.commerce.subscription_problem', :error => ex)) end def destroy @subscription = Subscription.find(params[:id]) @subscription.destroy flash[:notice] = translate('muck.commerce.subscription_deleted') redirect_to new_subscription_path end protected def new_action(message = nil) flash[:error] = message if message respond_to do |format| format.html { render :template => 'subscriptions/new' } end end def get_subscription_plan if params[:subscription_plan_sku] SubscriptionPlan.find_by_sku(params[:subscription_plan_sku]) else SubscriptionPlan.create(params[:subscription_plan]) end end def access_denied_path subscriber_signup_path end end