2012-10-14 13:23:35 +00:00
|
|
|
class UsersController < ApplicationController
|
|
|
|
load_and_authorize_resource
|
|
|
|
before_filter :authenticate_user!
|
2014-04-11 03:47:25 +00:00
|
|
|
layout 'resources'
|
2013-01-25 13:01:02 +00:00
|
|
|
|
2013-09-24 03:24:38 +00:00
|
|
|
def sort_by_cert(certs,id)
|
|
|
|
result = 0
|
|
|
|
certs.each do |c|
|
|
|
|
if c.id == id
|
|
|
|
result = 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return result
|
|
|
|
end
|
|
|
|
|
2012-10-14 13:23:35 +00:00
|
|
|
# GET /users
|
|
|
|
# GET /users.json
|
|
|
|
def index
|
2014-02-14 09:12:13 +00:00
|
|
|
unless params[:full] # by default, show summary
|
|
|
|
|
2014-02-14 10:48:03 +00:00
|
|
|
@users = @users.paying + @users.volunteer
|
|
|
|
#.joins(:payments).where("payments.date > ? OR ", (DateTime.now - 60.days)).uniq
|
2014-02-14 09:12:13 +00:00
|
|
|
|
|
|
|
respond_to do |format|
|
2014-02-14 10:48:03 +00:00
|
|
|
format.html { render 'summary', layout: 'resources' }
|
2014-02-14 09:12:13 +00:00
|
|
|
format.json { render :json => @users }
|
|
|
|
end
|
2013-01-25 18:11:39 +00:00
|
|
|
|
2014-02-14 09:12:13 +00:00
|
|
|
else # show full
|
2012-10-14 13:23:35 +00:00
|
|
|
|
2014-02-14 09:12:13 +00:00
|
|
|
case params[:sort]
|
|
|
|
when "name"
|
|
|
|
@users = @users.sort_by(&:name)
|
|
|
|
when "cert"
|
|
|
|
@users = @users.sort_by{ |u| [-sort_by_cert(u.certifications,params[:cert].to_i),u.name] }
|
|
|
|
when "orientation"
|
|
|
|
@users = @users.sort_by{ |u| [-u.orientation.to_i,u.name] }
|
|
|
|
when "waiver"
|
2014-03-03 04:48:49 +00:00
|
|
|
@users = @users.sort_by{ |u| [-u.contract_date.to_i,u.name] }
|
2014-02-14 09:12:13 +00:00
|
|
|
when "member"
|
|
|
|
@users = @users.sort_by{ |u| [-u.member_status.to_i,u.name] }
|
|
|
|
when "card"
|
|
|
|
@users = @users.sort_by{ |u| [-u.cards.count,u.name] }
|
|
|
|
when "instructor"
|
|
|
|
@users = @users.sort{ |a,b| [b.instructor.to_s,a.name] <=> [a.instructor.to_s,b.name] }
|
|
|
|
when "admin"
|
|
|
|
@users = @users.sort{ |a,b| [b.admin.to_s,a.name] <=> [a.admin.to_s,b.name] }
|
|
|
|
else
|
|
|
|
@users = @users.sort_by(&:name)
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html # index.html.erb
|
|
|
|
format.json { render :json => @users }
|
|
|
|
end
|
2012-10-14 13:23:35 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-08-29 09:27:48 +00:00
|
|
|
# 'Active' users who haven't paid recently
|
2013-08-28 15:19:01 +00:00
|
|
|
def inactive
|
|
|
|
@users = @users.all.select{|u| u if u.payment_status == false }.sort_by{ |u| -u.delinquency }
|
|
|
|
end
|
2013-08-29 09:27:48 +00:00
|
|
|
|
|
|
|
# Recent user activity
|
|
|
|
def activity
|
2013-10-06 12:17:24 +00:00
|
|
|
@zombie_members = User.where('sign_in_count = 0').where('member_level > 1')
|
|
|
|
@user_logins = User.where(:current_sign_in_at => 2.months.ago..Time.now).where('sign_in_count > 1')
|
2013-08-29 09:50:05 +00:00
|
|
|
@new_users = User.where(:created_at => 3.months.ago..Date.today)
|
2013-09-24 01:34:18 +00:00
|
|
|
@cardless_users = User.includes('cards').where(['users.member_level >= ?','50']).where('cards.id IS NULL')
|
2013-08-29 09:27:48 +00:00
|
|
|
end
|
2013-10-06 02:53:31 +00:00
|
|
|
|
|
|
|
# New members (for emailing out)
|
|
|
|
def new_member_report
|
|
|
|
@new_users = User.where(:created_at => 3.months.ago..Date.today).where(:hidden => false).where(['member_level >= ?','1'])
|
|
|
|
end
|
2013-08-28 15:19:01 +00:00
|
|
|
|
2012-10-14 13:23:35 +00:00
|
|
|
# GET /users/1
|
|
|
|
# GET /users/1.json
|
|
|
|
def show
|
2013-02-14 07:29:22 +00:00
|
|
|
@payments = Payment.where(:user_id => @user.id).order('date desc').limit(10)
|
2012-10-14 13:23:35 +00:00
|
|
|
respond_to do |format|
|
|
|
|
format.html # show.html.erb
|
|
|
|
format.json { render :json => @user }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-10-06 11:09:56 +00:00
|
|
|
def compose_email
|
|
|
|
@user = User.find(params[:user_id])
|
|
|
|
end
|
|
|
|
|
|
|
|
def send_email
|
|
|
|
@user = User.find(params[:user_id])
|
|
|
|
@subject = params[:subject]
|
|
|
|
@body = params[:body]
|
|
|
|
if @user.send_email(current_user,@subject,@body)
|
|
|
|
redirect_to user_path(@user), :notice => "Email sent successfully."
|
|
|
|
else
|
|
|
|
flash[:alert] = "Error sending email."
|
|
|
|
render :compose_email
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-05-24 06:25:09 +00:00
|
|
|
# GET /user_summary/1
|
|
|
|
def user_summary
|
|
|
|
respond_to do |format|
|
|
|
|
format.html { render :partial => "user_summary" } # show.html.erb
|
|
|
|
format.json { render :json => @user }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-14 13:23:35 +00:00
|
|
|
# GET /users/new
|
|
|
|
# GET /users/new.json
|
|
|
|
def new
|
|
|
|
respond_to do |format|
|
|
|
|
format.html # new.html.erb
|
|
|
|
format.json { render :json => @user }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# GET /users/1/edit
|
|
|
|
def edit
|
|
|
|
end
|
|
|
|
|
|
|
|
# POST /users
|
|
|
|
# POST /users.json
|
|
|
|
def create
|
2014-04-11 03:10:04 +00:00
|
|
|
# update oriented_by only if orientation has been set
|
|
|
|
@user.oriented_by_id = current_user.id unless @user.orientation.blank?
|
|
|
|
|
2012-10-14 13:23:35 +00:00
|
|
|
respond_to do |format|
|
|
|
|
if @user.save
|
2013-08-28 10:18:47 +00:00
|
|
|
format.html { redirect_to @user, :notice => 'User was successfully created.' }
|
2012-10-14 13:23:35 +00:00
|
|
|
format.json { render :json => @user, :status => :created, :location => @user }
|
|
|
|
else
|
|
|
|
format.html { render :action => "new" }
|
|
|
|
format.json { render :json => @user.errors, :status => :unprocessable_entity }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# PUT /users/1
|
|
|
|
# PUT /users/1.json
|
|
|
|
def update
|
2014-04-11 03:10:04 +00:00
|
|
|
# update oriented_by only if it's blank but the (new) orientation isn't blank
|
|
|
|
# gotta test the params because they don't get applied til below.
|
|
|
|
@user.oriented_by_id = current_user.id if @user.oriented_by.blank? && (!params[:user]["orientation(1i)"].blank?)
|
|
|
|
|
2012-10-14 13:23:35 +00:00
|
|
|
respond_to do |format|
|
|
|
|
if @user.update_attributes(params[:user])
|
2013-08-28 10:18:47 +00:00
|
|
|
format.html { redirect_to @user, :notice => 'User was successfully updated.' }
|
2012-10-14 13:23:35 +00:00
|
|
|
format.json { head :no_content }
|
|
|
|
else
|
|
|
|
format.html { render :action => "edit" }
|
|
|
|
format.json { render :json => @user.errors, :status => :unprocessable_entity }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-05-24 06:25:09 +00:00
|
|
|
# GET /users/merge
|
|
|
|
def merge_view
|
|
|
|
@users = @users.sort_by(&:name)
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html # merge_view.html.erb
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# POST /users/merge
|
|
|
|
def merge_action
|
|
|
|
@user_to_keep = User.find(params[:user][:to_keep])
|
|
|
|
Rails.logger.info "USER TO KEEP:"
|
|
|
|
Rails.logger.info @user_to_keep.inspect
|
|
|
|
@user_to_merge = User.find(params[:user][:to_merge])
|
|
|
|
Rails.logger.info "USER TO MERGE:"
|
|
|
|
Rails.logger.info @user_to_merge.inspect
|
|
|
|
|
|
|
|
@user_to_keep.absorb_user(@user_to_merge)
|
|
|
|
|
|
|
|
Rails.logger.info "RESULT:"
|
|
|
|
Rails.logger.info @user_to_keep.inspect
|
|
|
|
Rails.logger.info @user_to_keep.cards.inspect
|
|
|
|
Rails.logger.info @user_to_keep.user_certifications.inspect
|
|
|
|
Rails.logger.info @user_to_keep.payments.inspect
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html { redirect_to @user_to_keep, :notice => 'Users successfully merged.' }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-14 13:23:35 +00:00
|
|
|
# DELETE /users/1
|
|
|
|
# DELETE /users/1.json
|
|
|
|
def destroy
|
|
|
|
@user.destroy
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html { redirect_to users_url, :notice => 'User successfully deleted.' }
|
|
|
|
format.json { head :no_content }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|