class ApplicationController < ActionController::Base protect_from_forgery helper :all before_filter :set_locale, :set_site # Find the parent for the given item def find_parent_item @parent_item = Item.first(:conditions => { :id => BSON::ObjectId(params[:parent_id]) }) rescue nil end # Clean the link back # Remove the locale but keep all the other params def get_go_back begin if env['REQUEST_URI'].include?('locale=') session[:last_page] else target = env['HTTP_REFERER'].split('?') vars = target[1].split('&') vars.delete_if {|var| var.include? 'locale=' } if vars.size > 0 target[0].to_s + '?' + vars.join('&') else target[0].to_s end end rescue nil end end # Check if the current_user is admin def is_admin? redirect_to root_url unless current_user.admin? end # Parse and render the pages with Radius def render_page if @page @layout = @page.layout @page_content = @page.content @layout_content = (@page.layout)? @layout.content : "" context = Radius::Context.new do |c| c.define_tag 'content' do |tag| @page_content end c.define_tag 'snippet' do |tag| snippet = Snippet.first(:conditions => {:name => tag.attr['name']}) if snippet snippet.content else t('nothing') end end c.define_tag 'language_bar' do @site_in_use_locales.map{ |locale| lang = I18nVariable.first(:conditions => {:key => locale})[locale] if I18n.locale.to_s.eql?(locale) lang else "#{lang}" end }.join(' | ') end end parser = Radius::Parser.new(context, :tag_prefix => 'r') render :text => parser.parse(@layout_content) else render :text => '404 Not Found' end end # Set I18n.locale def set_locale # update session if passed session[:locale] = params[:locale] if params[:locale] # set locale based on session or default begin # check if locale is valid for non site pages if LIST[:forbidden_item_names].include?(env['PATH_INFO'].split('/')[1].to_s) && !VALID_LOCALES.include?(session[:locale]) I18n.locale = I18n.default_locale else I18n.locale = session[:locale] end rescue I18n.locale = I18n.default_locale end end # Set the site variables def set_site # set site if exist or create site site = Site.first || Site.create({:valid_locales => [], :in_use_locales => []}) session[:site] = site.id @site_in_use_locales = site.in_use_locales @site_valid_locales = site.valid_locales end end