app/controllers/users_controller.rb
# frozen_string_literal: true
class UsersController < ApplicationController
load_and_authorize_resource except: [:impersonate, :stop_impersonating]
def show
end
def new
end
def edit
end
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to params[:redirect_to].presence || @user, notice: 'User was successfully created.' }
format.json { render action: :show, status: :created, location: @user }
else
format.html { render action: :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @user.update_attributes(user_params)
notice = nil
# We disabled the confirmation instruction sending in the omniauth
# user creation and have to do it manually here. If the user
# decides to change the email address in the form, devise is sending
# an email confirm message automatically. Otherwise we will sent it
# manually here
if !@user.confirmed? && !@user.previous_changes["unconfirmed_email"].present?
@user.send_confirmation_instructions
else
notice = 'Your profile was successfully updated.'
end
format.html { redirect_to params[:redirect_to].presence || @user, notice: notice }
format.json { head :no_content }
else
format.html { render action: :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
def destroy
@user.destroy
sign_out @user
respond_to do |format|
format.html { redirect_to community_url }
format.json { head :no_content }
end
end
def impersonate
set_user
impersonate_user(@user)
redirect_to community_path, notice: "Now impersonating #{@user.name}. You can find the link to stop impersonation on the user menu."
end
def stop_impersonating
stop_impersonating_user
redirect_to community_path, notice: "Impersonation stopped. You're back to being #{current_user.name}!"
end
def resend_confirmation_instruction
@user.send_confirmation_instructions
redirect_back fallback_location: root_path
end
private
def set_user
@user = User.find(params[:id])
end
def conferences
@conferences ||= Conference.in_current_season.order(:name)
end
helper_method :conferences
def teams
all_teams = Team.all.order(:name)
selected_teams = Team.in_current_season.accepted.order(:name)
current_season.active? ? selected_teams : all_teams
end
helper_method :teams
def user_params
params.require(:user).permit(
:github_handle, :twitter_handle, :irc_handle,
:name, :email, :homepage, :location, :bio,
:tech_expertise_list, :tech_interest_list,
:tshirt_size, :tshirt_cut, :postal_address, :timezone,
:country,
:hide_email,
:is_company, :company_name, :company_info,
:application_about, :application_motivation, :application_gender_identification, :application_age,
:application_coding_level, :application_community_engagement, :application_language_learning_period,
*EmailPreferences::ATTRIBUTES,
:application_learning_history, :application_skills, :application_code_samples,
:application_location, :application_minimum_money, :application_money, :application_goals, :application_code_background,
interested_in: [],
roles_attributes: [:id, :name, :team_id, :_destroy]
)
end
end