require 'rails_admin/support/i18n' module RailsAdmin module ApplicationHelper include RailsAdmin::Support::I18n def capitalize_first_letter(wording) return nil unless wording.present? && wording.is_a?(String) wording = wording.dup wording[0] = wording[0].mb_chars.capitalize.to_s wording end def authorized?(action_name, abstract_model = nil, object = nil) object = nil if object.try :new_record? action(action_name, abstract_model, object).try(:authorized?) end def current_action?(action, abstract_model = @abstract_model, object = @object) @action.custom_key == action.custom_key && abstract_model.try(:to_param) == @abstract_model.try(:to_param) && (@object.try(:persisted?) ? @object.id == object.try(:id) : !object.try(:persisted?)) end def action(key, abstract_model = nil, object = nil) RailsAdmin::Config::Actions.find(key, controller: controller, abstract_model: abstract_model, object: object) end def actions(scope = :all, abstract_model = nil, object = nil) RailsAdmin::Config::Actions.all(scope, controller: controller, abstract_model: abstract_model, object: object) end def edit_user_link return nil unless _current_user.respond_to?(:email) return nil unless abstract_model = RailsAdmin.config(_current_user.class).abstract_model return nil unless (edit_action = RailsAdmin::Config::Actions.find(:edit, controller: controller, abstract_model: abstract_model, object: _current_user)).try(:authorized?) link_to url_for(action: edit_action.action_name, model_name: abstract_model.to_param, id: _current_user.id, controller: 'rails_admin/main') do html = [] html << image_tag("#{(request.ssl? ? 'https://secure' : 'http://www')}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", alt: '') if _current_user.email.present? html << content_tag(:span, _current_user.email) html.join.html_safe end end def logout_path if defined?(Devise) scope = Devise::Mapping.find_scope!(_current_user) main_app.send("destroy_#{scope}_session_path") rescue false else main_app.logout_path if main_app.respond_to?(:logout_path) end end def logout_method return [Devise.sign_out_via].flatten.first if defined?(Devise) :delete end def wording_for(label, action = @action, abstract_model = @abstract_model, object = @object) model_config = abstract_model.try(:config) object = abstract_model && object.is_a?(abstract_model.model) ? object : nil action = RailsAdmin::Config::Actions.find(action.to_sym) if action.is_a?(Symbol) || action.is_a?(String) capitalize_first_letter I18n.t( "admin.actions.#{action.i18n_key}.#{label}", model_label: model_config && model_config.label, model_label_plural: model_config && model_config.label_plural, object_label: model_config && object.try(model_config.object_label_method), ) end def main_navigation nodes_stack = RailsAdmin::Config.visible_models(controller: controller) node_model_names = nodes_stack.collect { |c| c.abstract_model.model_name } nodes_stack.group_by(&:navigation_label).collect do |navigation_label, nodes| nodes = nodes.select { |n| n.parent.nil? || !n.parent.to_s.in?(node_model_names) } li_stack = navigation nodes_stack, nodes label = navigation_label || t('admin.misc.navigation') %(