VRFS-1576 error handling; referral page; new admin menu

This commit is contained in:
Jonathan Kolyer 2014-04-22 01:55:40 +00:00
parent c81e581786
commit 6ee83f8dcc
6 changed files with 113 additions and 7 deletions

View File

@ -0,0 +1,31 @@
ActiveAdmin.register JamRuby::User, :as => 'Referrals' do
menu :label => 'Referrals', :parent => 'Affiliates'
config.batch_actions = false
config.clear_action_items!
config.filters = false
index do
column 'User' do |oo| link_to(oo.name, "http://www.jamkazam.com/client#/profile/#{oo.id}", {:title => oo.name}) end
column 'Email' do |oo| oo.email end
column 'Created' do |oo| oo.created_at end
column 'Partner' do |oo| oo.affiliate_referral.partner_name end
end
controller do
def scoped_collection
rel = end_of_association_chain
.includes([:affiliate_referral])
.order('created_at DESC')
if (ref_id = params[AffiliatePartner::PARAM_REFERRAL]).present?
qq = ['affiliate_referral_id = ?', ref_id]
else
qq = ['affiliate_referral_id IS NOT NULL']
end
@users ||= rel.where(qq)
end
end
end

View File

@ -0,0 +1,48 @@
ActiveAdmin.register JamRuby::AffiliatePartner, :as => 'Affiliates' do
menu :label => 'Partners', :parent => 'Affiliates'
config.sort_order = 'created_at DESC'
config.batch_actions = false
# config.clear_action_items!
config.filters = false
form :partial => 'form'
index do
column 'User' do |oo| link_to(oo.partner_user.name, "http://www.jamkazam.com/client#/profile/#{oo.partner_user.id}", {:title => oo.partner_user.name}) end
column 'Email' do |oo| oo.partner_user.email end
column 'Name' do |oo| oo.partner_name end
column 'Code' do |oo| oo.partner_code end
column 'Referral Count' do |oo| oo.referral_user_count end
# column 'Referrals' do |oo| link_to('View', admin_referrals_path(AffiliatePartner::PARAM_REFERRAL => oo.id)) end
default_actions
end
controller do
def show
redirect_to admin_referrals_path(AffiliatePartner::PARAM_REFERRAL => resource.id)
end
def create
obj = AffiliatePartner.create_with_params(params[:jam_ruby_affiliate_partner])
if obj.errors.present?
set_resource_ivar(obj)
render active_admin_template('new')
else
redirect_to admin_affiliates_path
end
end
def update
obj = resource
vals = params[:jam_ruby_affiliate_partner]
obj.partner_name = vals[:partner_name]
obj.user_email = vals[:user_email] if vals[:user_email].present?
obj.save!
redirect_to admin_affiliates_path
end
end
end

View File

@ -1,7 +1,13 @@
class AdminAuthorization < ActiveAdmin::AuthorizationAdapter
def authorized?(action, subject = nil)
subject.is_a?(EmailBatch) && :update == action ? subject.can_run_batch? : true
if subject.is_a?(EmailBatch) && :update == action
subject.can_run_batch?
elsif subject.is_a?(AffiliatePartner) && :destroy == action
false
else
true
end
end
end

View File

@ -0,0 +1,13 @@
<%= semantic_form_for([:admin, resource], :url => resource.new_record? ? admin_affiliates_path : "/admin/affiliates/#{resource.id}") do |f| %>
<%= f.semantic_errors *f.object.errors.keys %>
<%= f.inputs do %>
<%= f.input(:user_email, :input_html => {:maxlength => 255}) %>
<%= f.input(:partner_name, :input_html => {:maxlength => 128}) %>
<% if resource.new_record? %>
<%= f.input(:partner_code, :input_html => {:maxlength => 128}) %>
<% else %>
<%= f.input(:partner_code, :input_html => {:maxlength => 128, :readonly => 'readonly'}) %>
<% end %>
<% end %>
<%= f.actions %>
<% end %>

View File

@ -1,9 +1,12 @@
class JamRuby::AffiliatePartner < ActiveRecord::Base
has_one :partner_user, :class_name => "JamRuby::User", :foreign_key => :partner_user_id
belongs_to :partner_user, :class_name => "JamRuby::User", :foreign_key => :partner_user_id
has_many :user_referrals, :class_name => "JamRuby::User", :foreign_key => :affiliate_referral_id
attr_accessible :partner_name, :partner_code, :partner_user_id
PARAM_REFERRAL = :ref
PARAM_COOKIE = :affiliate_ref
PARTNER_CODE_REGEX = /^[#{Regexp.escape('abcdefghijklmnopqrstuvwxyz0123456789-._+,')}]+{2,128}$/i
validates :user_email, format: {with: JamRuby::User::VALID_EMAIL_REGEX}, :if => :user_email
@ -17,7 +20,7 @@ class JamRuby::AffiliatePartner < ActiveRecord::Base
oo.partner_code = params[:partner_code].try(:strip)
oo.partner_user = User.where(:email => params[:user_email].try(:strip)).limit(1).first
oo.partner_user_id = oo.partner_user.try(:id)
oo.save!
oo.save
oo
end

View File

@ -8,12 +8,17 @@ class ApplicationController < ActionController::Base
# inject username/email into bugsnag data
before_bugsnag_notify :add_user_info_to_bugsnag
def affiliate_code
cookies[:affiliate_code]
before_filter do
if current_user.nil?
if (code = params[AffiliatePartner::PARAM_REFERRAL]).present? &&
cookies[AffiliatePartner::PARAM_COOKIE].blank?
cookies[AffiliatePartner::PARAM_COOKIE] = code
end
end
end
def affiliate_code=(code)
cookies[:affiliate_code] = code if code.present?
def affiliate_code
cookies[AffiliatePartner::PARAM_COOKIE]
end
private