Skip to content

Instantly share code, notes, and snippets.

@jcreixell
Created February 28, 2014 09:58
Show Gist options
  • Save jcreixell/9268372 to your computer and use it in GitHub Desktop.
Save jcreixell/9268372 to your computer and use it in GitHub Desktop.
class ApplicationController < ActionController::Base
include ApplicationHelper
protect_from_forgery
before_filter :set_locale
before_filter :require_user
authorize_resource
helper :all
helper_method :current_user_session, :current_user, :current_company
before_filter :set_company, :set_system_message
before_filter :check_terms_and_condition, :except => [:tacupdate, :tac]
rescue_from CanCan::AccessDenied do
store_location
redirect_to root_path, :alert => t('no_permissions')
end
def set_system_message
@system_message ||= SystemMessage.for_pcp unless request.xhr?
end
private
def check_terms_and_condition
if request.get? && current_user && current_user.company
if current_user.company.tac_accepted_at < Time.parse(APP_CONFIG[:tac_updated_at])
session[:redirect_back] = request.original_url
redirect_to '/tacupdate'
end
end
end
def current_user_session
return @current_user_session if defined?(@current_user_session)
user_session = UserSession.find
if user_session && user_session.record && user_session.record.activated_at.present?
@current_user_session = user_session
end
end
def current_user
return @current_user if defined?(@current_user)
return nil if current_user_session.nil?
user = current_user_session.record
@current_user = user.company.enabled? ? user : nil
end
def require_user
unless current_user
store_location
redirect_to login_path
end
end
def require_mediation_visible
unless current_company.mediation_visible?
redirect_to applications_path and return
end
end
def current_company
return @current_company if defined?(@current_company)
if current_user.account_manager_or_super_account_manager?
@current_company = Company.find_by_id(params[:company_id].to_i) || current_user.company
end
@current_company ||= current_user.company
end
def store_location
session[:return_to] = request.url
end
def redirect_back_or_default(default)
redirect_to(session[:return_to] || default)
session[:return_to] = nil
end
def default_url_options(options = {})
options.merge({ :locale => I18n.locale, :company_id => params[:company_id]})
end
def set_locale
# locales = ([params[:locale].presence] + user_preferred_languages).compact
locales = [params[:locale].presence].compact
locales.delete_if { |locale| !I18n.available_locales.include?(locale.to_sym) }
# save_language_choice(locale_to_use) if language_changed?(locale_to_use)
locale_to_use = locales.first || I18n.default_locale
I18n.locale = locale_to_use
end
def set_company
params[:company_id] = current_company.id if current_user
end
def user_saved_language
return nil if current_user.nil?
return @user_saved_language if defined?(@user_saved_language)
@user_saved_language ||= current_user.language
end
def language_changed?(lang)
return false if current_user.nil?
user_saved_language != lang
end
def save_language_choice(chosen_lang)
user = current_user
user.language = chosen_lang
user.save
end
def js_redirect_to(url, options = {})
notice = options.delete(:notice)
flash[:notice] = notice if notice
render :js => "window.location.replace('#{url_for(url)}')"
end
def js_render_form(options = {})
partial = options.delete(:partial) || 'form'
where = options.delete(:where) || '#modal_form'
locals = options.delete(:locals) || {}
render :js => "$(\"#{where}\").html(\"#{view_context.j(render_to_string partial: partial, locals: locals)}\");"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment