class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. # protect_from_forgery with: :null_session before_action :set_locale, :set_mobile_web helper_method :current_site, :current_user def default_url_options(options={}) { locale: I18n.locale } end def set_locale in_use_locales = current_site.in_use_locales if params[:locale].eql?("zh_cn") or (!params[:locale] and session[:zh_cn]) redirect_to root_path if !current_site.enable_zh_cn params[:locale] = "zh_tw" I18n.locale = session[:locale] session[:zh_cn] = true else session[:zh_cn] = false end if params[:locale] session[:locale] = in_use_locales.include?(params[:locale].to_sym) ? params[:locale] : nil end if !params[:locale] and !session[:locale] if current_site.enable_language_detection browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].split(',').first.underscore rescue nil session[:locale] = in_use_locales.include?(browser_locale.to_sym) ? browser_locale : nil elsif current_site.default_locale session[:locale] = current_site.default_locale end end session[:locale] = session[:locale].blank? ? I18n.default_locale : session[:locale] I18n.locale = session[:locale] @site_in_use_locales = [I18n.locale]+(in_use_locales-[I18n.locale]) @site_valid_locales = [I18n.locale]+(current_site.valid_locales-[I18n.locale]) end def get_layout f = File.join("../../templates/", "#{@key}", '/home/page.html.erb') end def get_key @key = $mobile.blank? ? current_site.template : "mobile/orbit_mobile" end def current_site @current_site = Site.first end def frontent_allowed current_user.nil? and !current_site.frontend_open end def set_mobile_web path = request.path.split('/') is_mobile_path = ( (path[1].eql?("mobile") or path[2].eql?("mobile")) or params[:mobile].eql?("1") ) if params[:mobile].eql?("0") session[:desktop] = true session[:mobile] = false $mobile= "" redirect_to root_path if is_mobile_path else is_mobile_device = ( (request.user_agent =~ /iPhone|iPod|Android/) and !session[:desktop]) $mobile = session[:mobile] ? "/mobile" : "" if current_site.mobile_on if is_mobile_path or is_mobile_device session[:desktop] = false session[:mobile] = true $mobile = "/mobile" end else session[:mobile] = false redirect_to root_path if is_mobile_path end end if path.include?("page_parts") or path.include?("edit_view") $mobile = params[:mobile_view].blank? ? "" : "/mobile" end end def log_user_action unless (request.filtered_parameters['action'].eql? "system_info") and (request.filtered_parameters['controller'].eql? "admin/sites") log = UserAction.new log.action = request.filtered_parameters['action'] log.controller = request.filtered_parameters['controller'] log.request_path = request.original_fullpath log.request_method = request.request_method log.remote_ip = request.remote_ip log.referer = request.referer log.save current_user.user_actions << log end end def site_token_present? current_site.site_token? end def store_session api_key = STORE_CONFIG[:store_settings]["api_key"] @store = Store.new(current_site.id.to_s, current_site.site_token,api_key) if current_site.site_token end private def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] rescue nil end protected def authenticate_user if session[:user_id] # set current user object to @current_user object variable @current_user = User.find(session[:user_id]) rescue nil redirect_to new_session_path if @current_user.nil? return true else session[:login_referer] = request.url redirect_to new_session_path return false end end end