class AdminData::BaseController < ApplicationController unloadable helper_method :admin_data_is_allowed_to_update? layout 'admin_data' include AdminData::Chelper before_filter :rails3_hack, :build_klasses, :build_drop_down_for_klasses, :check_page_parameter, :prepare_drop_down_klasses attr_reader :klass attr_reader :model private def prepare_drop_down_klasses k = params[:klass] || '' @drop_down_url = "http://#{request.host_with_port}/admin_data/quick_search/#{CGI.escape(k)}" end def ensure_is_allowed_to_view render :text => '

not authorized

', :status => :unauthorized unless admin_data_is_allowed_to_view? end def ensure_is_allowed_to_view_model render :text => 'not authorized', :status => :unauthorized unless admin_data_is_allowed_to_view_model? end def ensure_is_allowed_to_update render :text => 'not authorized', :status => :unauthorized unless admin_data_is_allowed_to_update? end def ensure_is_allowed_to_update_model render :text => 'not authorized', :status => :unauthorized unless admin_data_is_allowed_to_update_model? end def ensure_is_allowed_to_view_feed render :text => 'not authorized', :status => :unauthorized unless AdminData::Util.is_allowed_to_view_feed?(self) end def get_class_from_params begin @klass = AdminData::Util.camelize_constantize(params[:klass]) rescue TypeError => e # in case no params[:klass] is supplied Rails.logger.debug 'no params[:klass] was supplied' redirect_to admin_data_index_path rescue NameError # in case wrong params[:klass] is supplied Rails.logger.debug 'wrong params[:klass] was supplied' redirect_to admin_data_index_path end end def build_klasses unless defined? $admin_data_klasses model_dir = File.join(Rails.root, 'app', 'models') model_names = Dir.chdir(model_dir) { Dir["**/*.rb"] } klasses = get_klass_names(model_names) filtered_klasses = remove_klasses_without_table(klasses).sort_by {|r| r.name.underscore} klasses_with_security_clearance = filtered_klasses.select do |klass_local| @klass = klass_local admin_data_is_allowed_to_view_model? end #TODO remove global constant. it is not thread safe $admin_data_klasses = klasses_with_security_clearance puts $admin_data_klasses.inspect end @klasses = $admin_data_klasses end def remove_klasses_without_table(klasses) klasses.select { |k| k.ancestors.include?(ActiveRecord::Base) && k.connection.table_exists?(k.table_name) } end def get_klass_names(model_names) model_names.inject([]) do |output, model_name| klass_name = model_name.sub(/\.rb$/,'').camelize begin output << AdminData::Util.constantize_klass(klass_name) rescue Exception => e Rails.logger.debug e.message end output end end def build_drop_down_for_klasses @drop_down_for_klasses = @klasses.inject([]) do |result,klass| #TODO FIXME for some weird reason tests fail if I don't do this if Rails.env.test? result else result << [klass.name.underscore, admin_data_search_url(:klass => klass.name.underscore)] end end end def check_page_parameter # Got hoptoad error because of url like http://localhost:3000/admin_data/User/advance_search?page=http://201.134.249.164/intranet/on.txt? if params[:page].blank? || (params[:page] =~ /\A\d+\z/) # proceed else render :text => 'Invalid params[:page]', :status => :unprocessable_entity end end def rails3_hack #require_dependency File.join(Rails.root, 'vendor', 'plugins', 'admin_data', 'lib', 'admin_data', 'settings.rb') #AdminData::Config.initialize_defaults end end