# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.

require 'gettext/rails'
require 'exif'
require 'utils'
require 'mycyma'

#Mime::Type.register "image/svg+xml", :svg

class ApplicationController < ActionController::Base
  helper :all # include all helpers, all the time

  rescue_from RestfulSupport::ResourceNotFound, :with => :render_404
  rescue_from RestfulSupport::UnrelatedResources, :with => :render_404
  rescue_from ActiveRecord::RecordNotFound, :with => :render_404

  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you're not using the cookie session store
  protect_from_forgery :secret => MyCyma::Config.instance.session_secret

  filter_parameter_logging :password

  init_gettext MyCyma::Info::app_name

  before_init_gettext :ensure_prefered_language

  def initialize
    super

    @config = MyCyma::Config.instance
  end

  def render_404
    render :template => "common/404", :layout => ! request.xhr?, :status => :not_found
    return false
  end

  def login_required
    return true if session[:user_id]

    flash[:warning] = _('Please login to continue')
    session[:return_to] = request.request_uri
    redirect_to :controller => "/logon", :action => "login"
    return false
  end

  def admin_required
    return true if login_required and current_user.admin

    @reject_reason = "You are not an Admin !"
    render :template => "common/403", :layout => ! request.xhr?, :status => :forbidden
    return false
  end

  def current_user
    @current_user ||= ((session[:user_id] && User.find_by_id(session[:user_id])) || nil)
  end

  def redirect_to_stored
    if return_to = session[:return_to]
      session[:return_to] = nil
      redirect_to(return_to)
    else
      redirect_to :controller => 'welcome', :action => 'index'
    end
  end

  def ensure_prefered_language
    @config.switch_locale(current_user.prefered_language) if current_user
  end
end
