Skip to content

Commit

Permalink
Merge pull request #1 from ekoshairy/master
Browse files Browse the repository at this point in the history
Data I/O Admin
  • Loading branch information
Saher El-Neklawy committed Aug 28, 2013
2 parents 5b9855b + 5bd841c commit 598e1a4
Show file tree
Hide file tree
Showing 9 changed files with 171 additions and 161 deletions.
1 change: 0 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,4 @@ group :development, :test do
gem 'devise'
gem 'paperclip', '~> 2.7'
end

gemspec
90 changes: 47 additions & 43 deletions app/controllers/rails_admin/main_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ class MainController < RailsAdmin::ApplicationController
include RailsAdmin::ApplicationHelper
include Maintenance::Tags


layout :get_layout

before_filter :get_model, :except => RailsAdmin::Config::Actions.all(:root).map(&:action_name)
Expand Down Expand Up @@ -43,7 +42,6 @@ def bulk_action
self.send(params[:bulk_action]) if params[:bulk_action].in?(RailsAdmin::Config::Actions.all(:controller => self, :abstract_model => @abstract_model).select(&:bulkable?).map(&:route_fragment))
end


def persist_objects
@filtered_objs = @objects
if params.has_key?(:f)
Expand All @@ -60,27 +58,27 @@ def list_entries(is_edit, model_config = @model_config, auth_scope_key = :index,
@entries = get_collection(is_edit, model_config, scope, pagination)
@entries
end


private

def get_layout
"rails_admin/#{request.headers['X-PJAX'] ? 'pjax' : 'application'}"
end

def back_or_index
params[:return_to].presence && params[:return_to].include?(request.host) && (params[:return_to] != request.fullpath) ? params[:return_to] : index_path
end
private

def get_layout
"rails_admin/#{request.headers['X-PJAX'] ? 'pjax' : 'application'}"
end

def back_or_index
params[:return_to].presence && params[:return_to].include?(request.host) && (params[:return_to] != request.fullpath) ? params[:return_to] : index_path
end

def get_sort_hash(model_config)
abstract_model = model_config.abstract_model
params[:sort] = params[:sort_reverse] = nil unless model_config.list.fields.map {|f| f.name.to_s}.include? params[:sort]

params[:sort] ||= model_config.list.sort_by.to_s
params[:sort_reverse] ||= 'false'
def get_sort_hash(model_config)
abstract_model = model_config.abstract_model
params[:sort] = params[:sort_reverse] = nil unless model_config.list.fields.map {|f| f.name.to_s}.include? params[:sort]

field = model_config.list.fields.find{ |f| f.name.to_s == params[:sort] }
params[:sort] ||= model_config.list.sort_by.to_s
params[:sort_reverse] ||= 'false'

field = model_config.list.fields.find{ |f| f.name.to_s == params[:sort] }

column = if field.nil? || field.sortable == true # use params[:sort] on the base table
"#{abstract_model.table_name}.#{params[:sort]}"
Expand Down Expand Up @@ -116,7 +114,7 @@ def redirect_to_on_success
obj = @objects[session["index"]]
@object.resolve true
redirect_to edit_path(:id => obj.id, :return_to => params[:return_to]), :flash => { :success => notice }
elsif params[:_invalid_another]
elsif params[:_invalid_another]
@objects ||= list_entries(true)
obj = @objects[session["index"]]
@object.resolve false
Expand Down Expand Up @@ -171,12 +169,12 @@ def check_for_cancel
def get_collection(is_edit, model_config, scope, pagination)
or_filters = Hash.new
if params[:f] != nil
params[:f].each do |param|
puts param[0]
or_filters[param[0]] = param[1] if param[0].start_with? "OR"
params[:f].delete param[0] if param[0].start_with? "OR"
params[:f].each do |param|
puts param[0]
or_filters[param[0]] = param[1] if param[0].start_with? "OR"
params[:f].delete param[0] if param[0].start_with? "OR"
end
end
end
puts or_filters
if params.has_key?(:object_type)
if params[:object_type] != "All"
Expand Down Expand Up @@ -271,31 +269,37 @@ def get_collection(is_edit, model_config, scope, pagination)
params[:f].delete(:reason) if params[:f] != nil
params[:f].delete(:status) if params[:f] != nil
# params[:f].merge(:or_filters) if :or_filters.present?
return objects
end
return objects
end




def get_association_scope_from_params
return nil unless params[:associated_collection].present?
source_abstract_model = RailsAdmin::AbstractModel.new(to_model_name(params[:source_abstract_model]))
source_model_config = source_abstract_model.config
source_object = source_abstract_model.get(params[:source_object_id])
action = params[:current_action].in?(['create', 'update']) ? params[:current_action] : 'edit'
@association = source_model_config.send(action).fields.find{|f| f.name == params[:associated_collection].to_sym }.with(:controller => self, :object => source_object)
@association.associated_collection_scope
end

def associations_hash
associations = {}
@abstract_model.associations.each do |association|
if [:has_many, :has_and_belongs_to_many].include?(association[:type])
records = Array(@object.send(association[:name]))
associations[association[:name]] = records.collect(&:id)
end
def get_association_scope_from_params
return nil unless params[:associated_collection].present?
source_abstract_model = RailsAdmin::AbstractModel.new(to_model_name(params[:source_abstract_model]))
source_model_config = source_abstract_model.config
source_object = source_abstract_model.get(params[:source_object_id])
action = params[:current_action].in?(['create', 'update']) ? params[:current_action] : 'edit'
@association = source_model_config.send(action).fields.find{|f| f.name == params[:associated_collection].to_sym }.with(:controller => self, :object => source_object)
@association.associated_collection_scope
end

def associations_hash
associations = {}
@abstract_model.associations.each do |association|
if [:has_many, :has_and_belongs_to_many].include?(association[:type])
records = Array(@object.send(association[:name]))
associations[association[:name]] = records.collect(&:id)
end
associations
end
associations
end




end
end


102 changes: 1 addition & 101 deletions app/views/rails_admin/main/export.html.haml
Original file line number Diff line number Diff line change
@@ -1,112 +1,12 @@
- params = request.params.except(:action, :controller, :utf8, :page, :per_page, :format, :authenticity_token)
- visible_fields = @model_config.export.with(:view => self, :object => @abstract_model.model.new).visible_fields


- specs = @model_config.export.with(:view => self, :object => @abstract_model.model.new).extract_specs

- specs_fields = @model_config.export.with(:view => self, :object => @abstract_model.model.new).spec_fields specs[0]




= form_tag export_path(params.merge(:all => true)), :method => 'post', :class => 'form-horizontal denser' do

%input{:name => "send_data", :type => "hidden", :value => "true"}/
%fieldset
%legend
%i.icon-chevron-down
= t('admin.export.select')

.control-group
%label.control-label{:rel => 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), :onclick => 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', :name => @model_config.label_plural.downcase)
.controls
- visible_fields.select{ |f| !f.spec? }.each do |field|
- list = field.virtual? ? 'methods' : 'only'
- if field.association? && field.association[:polymorphic]
%label.checkbox{:for => "schema_#{list}_#{field.method_name}"}
= check_box_tag "schema[#{list}][]", field.method_name, true, { :id => "schema_#{list}_#{field.method_name}" }
= field.label + " [id]"
- polymorphic_type_column_name = @abstract_model.properties.find {|p| field.association[:foreign_type] == p[:name] }[:name]
%label.checkbox{:for => "schema_#{list}_#{polymorphic_type_column_name}"}
= check_box_tag "schema[#{list}][]", polymorphic_type_column_name, true, { :id => "schema_#{list}_#{polymorphic_type_column_name}" }
= field.label + " [type]"
- else
%label.checkbox{:for => "schema_#{list}_#{field.name}"}
= check_box_tag "schema[#{list}][]", field.name, true, { :id => "schema_#{list}_#{field.name}" }
= field.label



- specs.each do |spec|
- spec_fields = @model_config.export.with(:view => self, :object => @abstract_model.model.new).spec_fields spec
.control-group
%label.control-label{:rel => 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), :onclick => 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', :name => spec)
</br>
</br>
</br>
.controls
- spec_fields.select{ |f| !f.association? || f.association[:polymorphic] }.each do |field|
- list = field.virtual? ? 'methods' : 'only'
- if field.association? && field.association[:polymorphic]
%label.checkbox{:for => "schema_#{list}_#{field.method_name}"}
= check_box_tag "schema[#{list}][]", field.method_name, true, { :id => "schema_#{list} _#{field.method_name}" }
= field.label + " [id]"
- polymorphic_type_column_name = @abstract_model.properties.find {|p| field.association[:foreign_type] == p[:name] }[:name]
%label.checkbox{:for => "schema_#{list}_#{polymorphic_type_column_name}"}
= check_box_tag "schema[#{list}][]", polymorphic_type_column_name, true, { :id => "schema_#{list}_#{polymorphic_type_column_name}" }
= field.label + " [type]"
- else
%label.checkbox{:for => "schema_#{list}_#{field.name}"}
= check_box_tag "schema[#{list}][]", field.name, true, { :id => "schema_#{list}_#{field.name}" }
= field.label




- visible_fields.select{ |f| f.association? && !f.association[:polymorphic] }.each do |field|
- fields = field.associated_model_config.export.with(:view => self, :object => (associated_model = field.associated_model_config.abstract_model.model).new).new_fields.select{ |f| !f.association? }
.control-group
%label.control-label{:rel => 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), :onclick => 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', :name => field.label.downcase)
.controls
- fields.each do |associated_model_field|
- list = associated_model_field.virtual? ? 'methods' : 'only'
%label.checkbox{:for => "schema_include_#{field.name}_#{list}_#{associated_model_field.name}"}
= check_box_tag "schema[include][#{field.name}][#{list}][]", associated_model_field.name, true, { :id => "schema_include_#{field.name}_#{list}_#{associated_model_field.name}" }
= associated_model_field.label

%fieldset
%legend
%i.icon-chevron-down
= t('admin.export.options_for', :name => 'csv')
.control-group
- guessed_encoding = (Rails.configuration.database_configuration[Rails.env]['encoding'].presence rescue 'UTF-8') || 'UTF-8'
%label.control-label{:for => "csv_options_encoding_to"}= t('admin.export.csv.encoding_to')
.controls
-# from http://books.google.com/support/partner/bin/answer.py?answer=30990 :
= select_tag 'csv_options[encoding_to]', options_for_select(["", "UTF-8", "UTF-16LE", "UTF-16BE", "UTF-32LE", "UTF-32BE", "UTF-7", "ISO-8859-1", "ISO-8859-15", "IBM-850", "MacRoman", "Windows-1252", "ISO-8859-3", "IBM-852", "ISO-8859-2", "MacCE", "Windows-1250", "IBM-855", "ISO-8859-5", "ISO-IR-111", "KOI8-R", "MacCyrillic", "Windows-1251", "CP-866", "KOI-U", "MacUkranian", "GB2312", "GBK", "GB18030", "HZ", "ISO-2022-CN", "Big5", "Big5-HKSCS", "EUC-TW", "EUC-JP", "ISO-2022-JP", "Shift_JIS", "EUC-KR", "UHC", "JOHAB", "ISO-2022-KR"])
%p.help-block= t('admin.export.csv.encoding_to_help', :name => guessed_encoding)

.control-group
%label.control-label{:for => "csv_options_skip_header"}= t('admin.export.csv.skip_header')
.controls
= check_box_tag 'csv_options[skip_header]', 'true'
%p.help-block= t('admin.export.csv.skip_header_help')

.control-group
%label.control-label{:for => "csv_options_generator_col_sep"}= t('admin.export.csv.col_sep')
.controls
= select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), "<comma> ','" => ',', "<semicolon> ';'" => ';', '<tabs>' => "'\t'" })
%p.help-block= t('admin.export.csv.col_sep_help', :value => t('admin.export.csv.default_col_sep'))

.form-actions
%input{:type => :hidden, :name => 'return_to', :value => (params[:return_to].presence || request.referer)}
Confirm Exporting of Selected Items:
%button.btn.btn-primary{:type => "submit", :name => 'csv'}
%i.icon-white.icon-ok
= t("admin.export.confirmation", :name => 'csv')
%button.btn.btn-info{:type => "submit", :name => 'json'}
= t("admin.export.confirmation", :name => 'json')
%button.btn.btn-info{:type => "submit", :name => 'xml'}
= t("admin.export.confirmation", :name => 'xml')
%button.btn{:type => "submit", :name => "_continue"}
%i.icon-remove
= t("admin.form.cancel")
35 changes: 35 additions & 0 deletions app/views/rails_admin/main/import.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<h1>File Upload</h1>
<%= form_for :upload_file, :url=>{ :action=>"import"}, :html => { :multipart => true } do |f| %>
<table>
<tr>
<td>
<label for="import_file">
Select a CSV File :
</label>
</td>
<td >
<%= f.file_field :file%>
</td>

</tr>
<tr>
<td>
<label for="category">
Select Imported Items Category :
</label>
</td>
<td>
<%= f.select :category, options_for_select(["Category"]+Tag.first_level_categorization_nodes.map(&:tagname).sort) %>

</td>
</tr>
<tr>
<td colspan='2'>
<button class="btn btn-primary" type="submit">

Upload File</button>
</td>
</tr>
</table>
<% end %>

25 changes: 20 additions & 5 deletions config/initializers/rails_admin.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require 'rails_admin/config/actions/merge_tags'
require 'rails_admin/config/actions/merge_items'
require 'rails_admin/config/actions/moderate'
require 'rails_admin/config/actions/import'

module RailsAdmin
module Config
Expand All @@ -14,6 +15,12 @@ class MergeItems < RailsAdmin::Config::Actions::Base
class Moderate < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
end
class Import < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
end
class Export < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
end
end
end
end
Expand All @@ -26,21 +33,29 @@ class Moderate < RailsAdmin::Config::Actions::Base
show
edit
delete
export
export do
visible do
bindings[:abstract_model].model.to_s == "Item"
end
end
import do
visible do
bindings[:abstract_model].model.to_s == "Item"
end
end
show_in_app
bulk_delete
merge_tags do
merge_tags do
visible do
bindings[:abstract_model].model.to_s == "Tag"
end
end
moderate do
moderate do
visible do
bindings[:abstract_model].model.to_s == "Item" || bindings[:abstract_model].model.to_s == "Tag" || bindings[:abstract_model].model.to_s == "Photo"
end
end

merge_items do
merge_items do
visible do
bindings[:abstract_model].model.to_s == "Item"
end
Expand Down
8 changes: 8 additions & 0 deletions config/locales/rails_admin.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,13 @@ en:
link: "Export found %{model_label_plural}"
bulk_link: "Export selected %{model_label_plural}"
done: "exported"
import:
title: "Import"
menu: "Import"
breadcrumb: "Import"
link: "Import"
bulk_link: "Import"
done: "File successfully uploaded! Check your email for import report. "
history_index:
title: "History for %{model_label_plural}"
menu: "History"
Expand Down Expand Up @@ -122,6 +129,7 @@ en:
new_model: "%{name} (new)"
merge_items: "The following Items will be merged into two items"
merge_tags: "The following Tags will be merged into one tag"
import: "Upload Items from CSV file"
export:
confirmation: "Export to %{name}"
select: "Select fields to export"
Expand Down
3 changes: 1 addition & 2 deletions lib/rails_admin/config/actions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -117,5 +117,4 @@ def init_actions!
require 'rails_admin/config/actions/edit'
require 'rails_admin/config/actions/export'
require 'rails_admin/config/actions/delete'
require 'rails_admin/config/actions/bulk_delete'

require 'rails_admin/config/actions/bulk_delete'
Loading

0 comments on commit 598e1a4

Please sign in to comment.