summaryrefslogtreecommitdiff
path: root/app/controllers/application_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/application_controller.rb')
-rw-r--r--app/controllers/application_controller.rb88
1 files changed, 88 insertions, 0 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
new file mode 100644
index 0000000..62a4e13
--- /dev/null
+++ b/app/controllers/application_controller.rb
@@ -0,0 +1,88 @@
+
+class ApplicationController < ActionController::Base
+ protect_from_forgery
+ before_filter :set_locale, :initialize_pages
+
+ if Rails.env == 'production'
+ rescue_from Exception, :with => :render_500
+ rescue_from ActionController::RoutingError, :with => :render_404
+ end
+
+ protected
+
+ ##
+ ## LOCALIZATION
+ ##
+
+ #
+ # ensure that the locale is encoded as the url prefix and I18n.locale is set.
+ #
+ def set_locale
+ if params[:locale].nil? || !AVAILABLE_LANGUAGES.include?(params[:locale])
+ locale = HttpAcceptLanguage::compatible_language_from(request.headers['HTTP_ACCEPT_LANGUAGE'], AVAILABLE_LANGUAGES) || DEFAULT_LOCALE
+ locale = locale.to_s.sub('-', '_').sub(/_\w\w/, '')
+ if request.path == '/'
+ url = '/' + locale
+ else
+ url = url_for(params.merge(:locale => locale))
+ end
+ redirect_to url
+ else
+ I18n.locale = params[:locale]
+ self.default_url_options[:locale] = params[:locale]
+ end
+ end
+
+ #def default_url_options
+ # {:locale => locale }
+ #end
+
+ ##
+ ## RENDERING
+ ##
+
+ def render_500
+ render :template => 'errors/error', :status => 500
+ end
+
+ def render_404
+ render :template => 'errors/not_found', :status => 404
+ end
+
+ #
+ # renders the content of a static page
+ #
+ def render_page(page)
+ begin
+ render :template => page.template_path
+ rescue ActionView::MissingTemplate => exc
+ begin
+ render :template => page.template_path(DEFAULT_LOCALE)
+ rescue
+ raise exc
+ end
+ end
+ end
+
+ ##
+ ## INITIALIZATION
+ ##
+
+ #
+ # run every time in development mode, run once in production mode
+ #
+ def initialize_pages
+ run_once(:unless => Rails.env.development?) do
+ StaticPage.load(PAGE_DIRECTORY)
+ Menu.load(PAGE_DIRECTORY + '/menu.txt')
+ end
+ end
+
+ def run_once(options={})
+ if !@run_once || !options[:unless]
+ yield
+ end
+ @run_once = true
+ end
+
+end