active_scaffold_batch_vho 3.0.1 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/active_scaffold_batch_vho.gemspec +15 -5
- data/frontends/default/views/_batch_create_form.html.erb +7 -0
- data/frontends/default/views/_batch_create_form_attribute.html.erb +19 -0
- data/frontends/default/views/_batch_create_form_body.html.erb +25 -0
- data/frontends/default/views/_batch_update_form_attribute_scope.html.erb +8 -3
- data/frontends/default/views/batch_create.html.erb +5 -0
- data/frontends/default/views/on_batch_create.js.rjs +19 -0
- data/init.rb +10 -2
- data/lib/active_scaffold/actions/batch_create.rb +198 -0
- data/lib/active_scaffold/actions/batch_update.rb +4 -0
- data/lib/active_scaffold/config/batch_create.rb +57 -0
- data/lib/active_scaffold/config/batch_update.rb +9 -2
- data/lib/active_scaffold/helpers/batch_create_column_helpers.rb +30 -0
- data/lib/active_scaffold/helpers/update_column_helpers.rb +15 -6
- data/lib/active_scaffold_batch/config/core.rb +2 -0
- data/lib/active_scaffold_batch/locale/de.yml +10 -0
- data/lib/active_scaffold_batch/locale/en.yml +10 -0
- data/lib/active_scaffold_batch/version.rb +1 -1
- data/lib/active_scaffold_batch.rb +12 -10
- data/lib/active_scaffold_batch_vho.rb +1 -1
- metadata +18 -7
data/Rakefile
CHANGED
@@ -22,7 +22,7 @@ Jeweler::Tasks.new do |gem|
|
|
22
22
|
gem.description = %Q{You want to destroy/update many records at once with activescaffold?}
|
23
23
|
gem.email = "activescaffold@googlegroups.com"
|
24
24
|
gem.authors = ["Volker Hochstein"]
|
25
|
-
gem.add_runtime_dependency 'active_scaffold_vho', '
|
25
|
+
gem.add_runtime_dependency 'active_scaffold_vho', '> 3.0.12'
|
26
26
|
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
27
27
|
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
28
28
|
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{active_scaffold_batch_vho}
|
8
|
-
s.version = "3.0.
|
8
|
+
s.version = "3.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Volker Hochstein"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-02-18}
|
13
13
|
s.description = %q{You want to destroy/update many records at once with activescaffold?}
|
14
14
|
s.email = %q{activescaffold@googlegroups.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -22,25 +22,35 @@ Gem::Specification.new do |s|
|
|
22
22
|
"README",
|
23
23
|
"Rakefile",
|
24
24
|
"active_scaffold_batch_vho.gemspec",
|
25
|
+
"frontends/default/views/_batch_create_form.html.erb",
|
26
|
+
"frontends/default/views/_batch_create_form_attribute.html.erb",
|
27
|
+
"frontends/default/views/_batch_create_form_body.html.erb",
|
25
28
|
"frontends/default/views/_batch_update_form.html.erb",
|
26
29
|
"frontends/default/views/_batch_update_form_attribute.html.erb",
|
27
30
|
"frontends/default/views/_batch_update_form_attribute_scope.html.erb",
|
28
31
|
"frontends/default/views/_batch_update_form_body.html.erb",
|
32
|
+
"frontends/default/views/batch_create.html.erb",
|
29
33
|
"frontends/default/views/batch_update.html.erb",
|
30
34
|
"frontends/default/views/on_batch_base.js.rjs",
|
35
|
+
"frontends/default/views/on_batch_create.js.rjs",
|
31
36
|
"frontends/default/views/on_batch_update.js.rjs",
|
32
37
|
"init.rb",
|
33
38
|
"lib/active_scaffold/actions/batch_base.rb",
|
39
|
+
"lib/active_scaffold/actions/batch_create.rb",
|
34
40
|
"lib/active_scaffold/actions/batch_destroy.rb",
|
35
41
|
"lib/active_scaffold/actions/batch_update.rb",
|
36
42
|
"lib/active_scaffold/config/batch_base.rb",
|
43
|
+
"lib/active_scaffold/config/batch_create.rb",
|
37
44
|
"lib/active_scaffold/config/batch_destroy.rb",
|
38
45
|
"lib/active_scaffold/config/batch_update.rb",
|
46
|
+
"lib/active_scaffold/helpers/batch_create_column_helpers.rb",
|
39
47
|
"lib/active_scaffold/helpers/calendar_date_select_update_column_helpers.rb",
|
40
48
|
"lib/active_scaffold/helpers/datepicker_update_column_helpers.rb",
|
41
49
|
"lib/active_scaffold/helpers/update_column_helpers.rb",
|
42
50
|
"lib/active_scaffold_batch.rb",
|
43
51
|
"lib/active_scaffold_batch/config/core.rb",
|
52
|
+
"lib/active_scaffold_batch/locale/de.yml",
|
53
|
+
"lib/active_scaffold_batch/locale/en.yml",
|
44
54
|
"lib/active_scaffold_batch/version.rb",
|
45
55
|
"lib/active_scaffold_batch_vho.rb",
|
46
56
|
"uninstall.rb"
|
@@ -60,20 +70,20 @@ Gem::Specification.new do |s|
|
|
60
70
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
61
71
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
62
72
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
63
|
-
s.add_runtime_dependency(%q<active_scaffold_vho>, ["
|
73
|
+
s.add_runtime_dependency(%q<active_scaffold_vho>, ["> 3.0.12"])
|
64
74
|
else
|
65
75
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
66
76
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
67
77
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
68
78
|
s.add_dependency(%q<rcov>, [">= 0"])
|
69
|
-
s.add_dependency(%q<active_scaffold_vho>, ["
|
79
|
+
s.add_dependency(%q<active_scaffold_vho>, ["> 3.0.12"])
|
70
80
|
end
|
71
81
|
else
|
72
82
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
73
83
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
74
84
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
75
85
|
s.add_dependency(%q<rcov>, [">= 0"])
|
76
|
-
s.add_dependency(%q<active_scaffold_vho>, ["
|
86
|
+
s.add_dependency(%q<active_scaffold_vho>, ["> 3.0.12"])
|
77
87
|
end
|
78
88
|
end
|
79
89
|
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= render :partial => "base_form", :locals => {:xhr => xhr ||= nil,
|
2
|
+
:form_action => form_action ||= :batch_create,
|
3
|
+
:method => method ||= :post,
|
4
|
+
:cancel_link => cancel_link ||= true,
|
5
|
+
:body_partial => 'batch_create_form_body',
|
6
|
+
:headline => headline ||= active_scaffold_config.batch_create.label} %>
|
7
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% scope ||= nil %>
|
2
|
+
<dl>
|
3
|
+
<dt>
|
4
|
+
<label for="<%= active_scaffold_input_options(column, scope)[:id] %>"><%= column.label %></label>
|
5
|
+
</dt>
|
6
|
+
<dd>
|
7
|
+
<% if column.name == batch_create_by_column %>
|
8
|
+
<%= active_scaffold_batch_create_by_column column, scope %>
|
9
|
+
<% else %>
|
10
|
+
<%= active_scaffold_input_for column, scope %>
|
11
|
+
<% if column.update_columns -%>
|
12
|
+
<%= loading_indicator_tag(:action => :render_field, :id => params[:id]) %>
|
13
|
+
<% end -%>
|
14
|
+
<% end %>
|
15
|
+
<% if column.description -%>
|
16
|
+
<span class="description"><%= column.description %></span>
|
17
|
+
<% end -%>
|
18
|
+
</dd>
|
19
|
+
</dl>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<% subsection_id ||= nil %>
|
2
|
+
<ol class="form" <%= "id=#{subsection_id}" unless subsection_id.nil? %> <%= 'style="display: none;"' if columns.collapsed -%>>
|
3
|
+
<li class="form-element">
|
4
|
+
<%= hidden_field_tag("batch_scope", (batch_scope || 'LISTED')) %>
|
5
|
+
</li>
|
6
|
+
<% columns.each :for => @record do |column| %>
|
7
|
+
<% next if column.plural_association? || (column.association && [:has_one].include?(column.association.macro)) %>
|
8
|
+
<% renders_as = column_renders_as(column) %>
|
9
|
+
<% if renders_as == :subsection -%>
|
10
|
+
<% subsection_id = sub_section_id(:sub_section => column.label) %>
|
11
|
+
<li class="sub-section">
|
12
|
+
<h5><%= column.label %></h5>
|
13
|
+
<%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id} %>
|
14
|
+
<%= link_to_visibility_toggle(subsection_id, {:default_visible => !column.collapsed}) -%>
|
15
|
+
</li>
|
16
|
+
<% elsif column.readonly_association?
|
17
|
+
next %>
|
18
|
+
<% else
|
19
|
+
renders_as = :field if renders_as == :subform -%>
|
20
|
+
<li class="form-element <%= column.css_class unless column.css_class.nil? %>">
|
21
|
+
<%= render :partial => 'batch_create_form_attribute', :locals => { :column => column } -%>
|
22
|
+
</li>
|
23
|
+
<% end -%>
|
24
|
+
<% end -%>
|
25
|
+
</ol>
|
@@ -1,9 +1,14 @@
|
|
1
|
-
<% scope ||= nil
|
1
|
+
<% scope ||= nil
|
2
|
+
scope_select_options = active_scaffold_update_scope_select_options %>
|
3
|
+
<% if scope_select_options.length < 2 %>
|
4
|
+
<%= active_scaffold_update_scope_select(scope_select_options) %>
|
5
|
+
<% else %>
|
2
6
|
<dl>
|
3
7
|
<dt>
|
4
8
|
<label for="record_batch_scope"><%= as_(:records) %></label>
|
5
9
|
</dt>
|
6
10
|
<dd>
|
7
|
-
<%= active_scaffold_update_scope_select %>
|
11
|
+
<%= active_scaffold_update_scope_select(scope_select_options) %>
|
8
12
|
</dd>
|
9
|
-
</dl>
|
13
|
+
</dl>
|
14
|
+
<% end %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
form_selector = "#{element_form_id(:action => :batch_create)}"
|
2
|
+
|
3
|
+
if controller.send :batch_successful?
|
4
|
+
called_by_controller = params.delete(:batch_create_by)
|
5
|
+
if called_by_controller.nil?
|
6
|
+
page.call 'ActiveScaffold.replace_html', active_scaffold_content_id, render(:partial => 'list', :layout => false)
|
7
|
+
else
|
8
|
+
options = {:checked => false,
|
9
|
+
:include_mark_all => false}
|
10
|
+
tbody_id = "#{controller_id(called_by_controller)}-tbody"
|
11
|
+
page << "ActiveScaffold.mark_records('#{tbody_id}', #{options.to_json});"
|
12
|
+
end
|
13
|
+
page << "ActiveScaffold.find_action_link('#{form_selector}').close();"
|
14
|
+
else
|
15
|
+
page << "ActiveScaffold.find_action_link('#{form_selector}').update_flash_messages('#{escape_javascript(render(:partial => 'messages').strip)}');"
|
16
|
+
page.call 'ActiveScaffold.replace', form_selector, render(:partial => 'batch_create_form', :locals => {:xhr => true})
|
17
|
+
page.call 'ActiveScaffold.scroll_to', form_selector
|
18
|
+
#have to uncheck successfully created marked_records
|
19
|
+
end
|
data/init.rb
CHANGED
@@ -1,9 +1,17 @@
|
|
1
|
-
ACTIVE_SCAFFOLD_BATCH_INSTALLED = :plugin
|
2
|
-
|
3
1
|
require 'active_scaffold_batch'
|
4
2
|
|
5
3
|
begin
|
6
4
|
ActiveScaffoldAssets.copy_to_public(ActiveScaffoldBatch.root)
|
7
5
|
rescue
|
8
6
|
raise $! unless Rails.env == 'production'
|
7
|
+
end
|
8
|
+
|
9
|
+
ActionView::Base.class_eval do
|
10
|
+
include ActiveScaffold::Helpers::UpdateColumnHelpers
|
11
|
+
if ActiveScaffold.js_framework == :jquery
|
12
|
+
include ActiveScaffold::Helpers::DatepickerUpdateColumnHelpers
|
13
|
+
elsif ActiveScaffold.js_framework == :prototype
|
14
|
+
include ActiveScaffold::Helpers::CalendarDateSelectUpdateColumnHelpers
|
15
|
+
end
|
16
|
+
include ActiveScaffold::Helpers::BatchCreateColumnHelpers
|
9
17
|
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
module ActiveScaffold::Actions
|
2
|
+
module BatchCreate
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.before_filter :batch_create_authorized_filter, :only => [:batch_new, :batch_create]
|
6
|
+
base.verify :method => [:post, :put],
|
7
|
+
:only => :batch_create,
|
8
|
+
:redirect_to => { :action => :index }
|
9
|
+
base.helper_method :batch_create_values
|
10
|
+
base.helper_method :batch_create_by_column
|
11
|
+
base.helper_method :batch_create_by_records
|
12
|
+
end
|
13
|
+
|
14
|
+
def batch_new
|
15
|
+
do_batch_new
|
16
|
+
respond_to_action(:batch_new)
|
17
|
+
end
|
18
|
+
|
19
|
+
def batch_create
|
20
|
+
batch_action
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
protected
|
25
|
+
def batch_new_respond_to_html
|
26
|
+
if batch_successful?
|
27
|
+
render(:action => 'batch_create')
|
28
|
+
else
|
29
|
+
return_to_main
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def batch_new_respond_to_js
|
34
|
+
render(:partial => 'batch_create_form')
|
35
|
+
end
|
36
|
+
|
37
|
+
def batch_create_values
|
38
|
+
@batch_create_values || {}
|
39
|
+
end
|
40
|
+
|
41
|
+
def batch_create_by_records
|
42
|
+
@batch_create_by_records || []
|
43
|
+
end
|
44
|
+
|
45
|
+
def batch_create_respond_to_html
|
46
|
+
if params[:iframe]=='true' # was this an iframe post ?
|
47
|
+
responds_to_parent do
|
48
|
+
render :action => 'on_batch_create.js', :layout => false
|
49
|
+
end
|
50
|
+
else # just a regular post
|
51
|
+
if batch_successful?
|
52
|
+
flash[:info] = as_(:created_model, :model => @record.to_label)
|
53
|
+
return_to_main
|
54
|
+
else
|
55
|
+
render(:action => 'batch_create')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def batch_create_respond_to_js
|
61
|
+
render :action => 'on_batch_create'
|
62
|
+
end
|
63
|
+
|
64
|
+
def do_batch_new
|
65
|
+
self.successful = true
|
66
|
+
do_new
|
67
|
+
if marked_records_parent
|
68
|
+
batch_scope # that s a dummy call to remove batch_scope parameter
|
69
|
+
column = active_scaffold_config.columns[batch_create_by_column.to_sym]
|
70
|
+
@batch_create_by_records = column_plural_assocation_value_from_value(column, marked_records_parent)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def marked_records_parent
|
75
|
+
if params[:batch_create_by]
|
76
|
+
session_parent = active_scaffold_session_storage(params[:batch_create_by])
|
77
|
+
@marked_records_parent = session_parent[:marked_records] || Set.new
|
78
|
+
else
|
79
|
+
@marked_records_parent = false
|
80
|
+
end if @marked_records_parent.nil?
|
81
|
+
@marked_records_parent
|
82
|
+
end
|
83
|
+
|
84
|
+
def before_do_batch_create
|
85
|
+
create_columns = active_scaffold_config.batch_create.columns
|
86
|
+
@batch_create_values = attribute_values_from_params(create_columns, params[:record])
|
87
|
+
end
|
88
|
+
|
89
|
+
# in case of an error we have to prepare @record object to have assigned all
|
90
|
+
# defined batch_update values, however, do not set those ones with an override
|
91
|
+
# these ones will manage on their own
|
92
|
+
def prepare_error_record
|
93
|
+
do_new
|
94
|
+
batch_create_values.each do |attribute, value|
|
95
|
+
form_ui = colunm_form_ui(value[:column])
|
96
|
+
set_record_attribute(value[:column], attribute, value[:value]) unless form_ui && override_batch_create_value?(form_ui)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def batch_create_listed
|
101
|
+
case active_scaffold_config.batch_create.process_mode
|
102
|
+
when :create then
|
103
|
+
batch_create_by_records.each {|batch_record| create_record(batch_record)}
|
104
|
+
else
|
105
|
+
Rails.logger.error("Unknown process_mode: #{active_scaffold_config.batch_create.process_mode} for action batch_create")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def batch_create_marked
|
110
|
+
case active_scaffold_config.batch_create.process_mode
|
111
|
+
when :create then
|
112
|
+
batch_create_by_records.each do |by_record|
|
113
|
+
create_record(by_record)
|
114
|
+
end
|
115
|
+
else
|
116
|
+
Rails.logger.error("Unknown process_mode: #{active_scaffold_config.batch_create.process_mode} for action batch_create")
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def create_record(batch_record)
|
121
|
+
@successful = nil
|
122
|
+
@record = new_model
|
123
|
+
@record.send("#{batch_create_by_column.to_s}=", batch_record)
|
124
|
+
batch_create_values.each do |attribute, value|
|
125
|
+
set_record_attribute(value[:column], attribute, value[:value])
|
126
|
+
end
|
127
|
+
|
128
|
+
if authorized_for_job?(@record)
|
129
|
+
create_save
|
130
|
+
if successful?
|
131
|
+
marked_records_parent.delete(batch_record.id) if batch_scope == 'MARKED' && marked_records_parent
|
132
|
+
else
|
133
|
+
error_records << @record
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def set_record_attribute(column, attribute, value)
|
139
|
+
form_ui = colunm_form_ui(column)
|
140
|
+
if form_ui && override_batch_create_value?(form_ui)
|
141
|
+
@record.send("#{attribute}=", send(override_batch_create_value(form_ui), column, @record, value))
|
142
|
+
else
|
143
|
+
@record.send("#{attribute}=", value)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def colunm_form_ui(column)
|
148
|
+
form_ui = column.form_ui
|
149
|
+
form_ui = column.column.type if form_ui.nil? && column.column
|
150
|
+
end
|
151
|
+
|
152
|
+
def batch_create_by_column
|
153
|
+
active_scaffold_config.batch_create.default_batch_by_column
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
def attribute_values_from_params(columns, attributes)
|
158
|
+
values = {}
|
159
|
+
columns.each :for => active_scaffold_config.model.new, :crud_type => :create, :flatten => true do |column|
|
160
|
+
if batch_create_by_column == column.name
|
161
|
+
@batch_create_by_records = column_plural_assocation_value_from_value(column, attributes[column.name])
|
162
|
+
else
|
163
|
+
values[column.name] = {:column => column, :value => column_value_from_param_value(nil, column, attributes[column.name])}
|
164
|
+
end if attributes.has_key?(column.name)
|
165
|
+
end
|
166
|
+
values
|
167
|
+
end
|
168
|
+
|
169
|
+
|
170
|
+
# The default security delegates to ActiveRecordPermissions.
|
171
|
+
# You may override the method to customize.
|
172
|
+
def batch_create_authorized?(record = nil)
|
173
|
+
authorized_for?(:crud_type => :create)
|
174
|
+
end
|
175
|
+
|
176
|
+
def batch_create_ignore?(record = nil)
|
177
|
+
false
|
178
|
+
end
|
179
|
+
|
180
|
+
def override_batch_create_value?(form_ui)
|
181
|
+
respond_to?(override_batch_create_value(form_ui))
|
182
|
+
end
|
183
|
+
|
184
|
+
def override_batch_create_value(form_ui)
|
185
|
+
"batch_create_value_for_#{form_ui}"
|
186
|
+
end
|
187
|
+
|
188
|
+
private
|
189
|
+
|
190
|
+
def batch_create_authorized_filter
|
191
|
+
link = active_scaffold_config.batch_create.link || active_scaffold_config.batch_create.class.link
|
192
|
+
raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
|
193
|
+
end
|
194
|
+
def batch_new_formats
|
195
|
+
(default_formats + active_scaffold_config.formats).uniq
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
@@ -219,6 +219,10 @@ module ActiveScaffold::Actions
|
|
219
219
|
authorized_for?(:crud_type => :update)
|
220
220
|
end
|
221
221
|
|
222
|
+
def batch_update_ignore?(record = nil)
|
223
|
+
false
|
224
|
+
end
|
225
|
+
|
222
226
|
def batch_update_value_for_numeric(column, record, calculation_info)
|
223
227
|
current_value = record.send(column.name)
|
224
228
|
if ActiveScaffold::Actions::BatchUpdate::GenericOperators.include?(calculation_info[:operator]) || ActiveScaffold::Actions::BatchUpdate::NumericOperators.include?(calculation_info[:operator])
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module ActiveScaffold::Config
|
2
|
+
class BatchCreate < ActiveScaffold::Config::Form
|
3
|
+
self.crud_type = :create
|
4
|
+
def initialize(*args)
|
5
|
+
super
|
6
|
+
@process_mode = self.class.process_mode
|
7
|
+
@action_group ||= 'collection.batch'
|
8
|
+
@list_mode_enabled = self.class.list_mode_enabled
|
9
|
+
end
|
10
|
+
|
11
|
+
# global level configuration
|
12
|
+
# --------------------------
|
13
|
+
# the ActionLink for this action
|
14
|
+
def self.link
|
15
|
+
@@link
|
16
|
+
end
|
17
|
+
def self.link=(val)
|
18
|
+
@@link = val
|
19
|
+
end
|
20
|
+
@@link = ActiveScaffold::DataStructures::ActionLink.new('batch_new', :label => :create, :type => :collection, :security_method => :batch_create_authorized?, :ignore_method => :batch_create_ignore?)
|
21
|
+
|
22
|
+
# configures where the plugin itself is located. there is no instance version of this.
|
23
|
+
cattr_accessor :plugin_directory
|
24
|
+
@@plugin_directory = File.expand_path(__FILE__).match(%{(^.*)/lib/active_scaffold/config/batch_create.rb})[1]
|
25
|
+
|
26
|
+
# configures how batch create should be processed
|
27
|
+
# :create => standard activerecord create including validations
|
28
|
+
cattr_accessor :process_mode
|
29
|
+
@@process_mode = :create
|
30
|
+
|
31
|
+
# you may update all records in list view or all marked records
|
32
|
+
# you might disable list mode with this switch if you think it is
|
33
|
+
# too "dangerous"
|
34
|
+
cattr_accessor :list_mode_enabled
|
35
|
+
@@list_mode_enabled = true
|
36
|
+
# instance-level configuration
|
37
|
+
# ----------------------------
|
38
|
+
|
39
|
+
# see class accessor
|
40
|
+
attr_accessor :process_mode
|
41
|
+
|
42
|
+
attr_accessor :list_mode_enabled
|
43
|
+
|
44
|
+
# you may use create_batch to create a record for each record
|
45
|
+
# of a belong_to association (reverse must be has_many)
|
46
|
+
# eg. player belongs to team
|
47
|
+
# you may batch create a player records for a list of teams
|
48
|
+
attr_accessor :default_batch_by_column
|
49
|
+
|
50
|
+
|
51
|
+
# the label= method already exists in the Form base class
|
52
|
+
def label(model = nil)
|
53
|
+
model ||= @core.label(:count => 2)
|
54
|
+
@label ? as_(@label) : as_(:create_model, :model => model)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -5,6 +5,7 @@ module ActiveScaffold::Config
|
|
5
5
|
super
|
6
6
|
@process_mode = self.class.process_mode
|
7
7
|
@action_group ||= 'collection.batch'
|
8
|
+
@list_mode_enabled = self.class.list_mode_enabled
|
8
9
|
end
|
9
10
|
|
10
11
|
# global level configuration
|
@@ -16,7 +17,7 @@ module ActiveScaffold::Config
|
|
16
17
|
def self.link=(val)
|
17
18
|
@@link = val
|
18
19
|
end
|
19
|
-
@@link = ActiveScaffold::DataStructures::ActionLink.new('batch_edit', :label => :edit, :type => :collection, :security_method => :batch_update_authorized?)
|
20
|
+
@@link = ActiveScaffold::DataStructures::ActionLink.new('batch_edit', :label => :edit, :type => :collection, :security_method => :batch_update_authorized?, :ignore_method => :batch_update_ignore?)
|
20
21
|
|
21
22
|
# configures where the plugin itself is located. there is no instance version of this.
|
22
23
|
cattr_accessor :plugin_directory
|
@@ -28,13 +29,19 @@ module ActiveScaffold::Config
|
|
28
29
|
cattr_accessor :process_mode
|
29
30
|
@@process_mode = :update
|
30
31
|
|
31
|
-
|
32
|
+
# you may update all records in list view or all marked records
|
33
|
+
# you might disable list mode with this switch if you think it is
|
34
|
+
# too "dangerous"
|
35
|
+
cattr_accessor :list_mode_enabled
|
36
|
+
@@list_mode_enabled = true
|
32
37
|
# instance-level configuration
|
33
38
|
# ----------------------------
|
34
39
|
|
35
40
|
# see class accessor
|
36
41
|
attr_accessor :process_mode
|
37
42
|
|
43
|
+
attr_accessor :list_mode_enabled
|
44
|
+
|
38
45
|
|
39
46
|
# the label= method already exists in the Form base class
|
40
47
|
def label(model = nil)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module ActiveScaffold
|
2
|
+
module Helpers
|
3
|
+
# Helpers that assist with the rendering of a Form Column
|
4
|
+
module BatchCreateColumnHelpers
|
5
|
+
# This method decides which input to use for the given column.
|
6
|
+
# It does not do any rendering. It only decides which method is responsible for rendering.
|
7
|
+
def active_scaffold_batch_create_by_column(column, scope = nil, options = {})
|
8
|
+
options = active_scaffold_input_options(column, scope, options)
|
9
|
+
|
10
|
+
if column.form_ui == :record_select
|
11
|
+
active_scaffold_record_select(column, options, batch_create_by_records, true)
|
12
|
+
else
|
13
|
+
active_scaffold_batch_create_singular_association(column, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def active_scaffold_batch_create_singular_association(column, html_options)
|
19
|
+
associated_options = batch_create_by_records.collect {|r| r.id}
|
20
|
+
select_options = options_for_association(column.association)
|
21
|
+
html_options.update(column.options[:html_options] || {})
|
22
|
+
options = {}
|
23
|
+
options.update(column.options)
|
24
|
+
html_options[:name] = "#{html_options[:name]}[]"
|
25
|
+
html_options[:multiple] = true
|
26
|
+
select_tag(column.name, options_for_select(select_options.uniq, associated_options), html_options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -13,7 +13,7 @@ module ActiveScaffold
|
|
13
13
|
# second, check if the dev has specified a valid form_ui for this column, using specific ui for searches
|
14
14
|
elsif column.form_ui and override_update?(column.form_ui)
|
15
15
|
send(override_update(column.form_ui), column, options)
|
16
|
-
elsif column.column
|
16
|
+
elsif column.column && column.form_ui.nil? && override_update?(column.column.type)
|
17
17
|
send(override_update(column.column.type), column, options)
|
18
18
|
else
|
19
19
|
active_scaffold_update_generic_operators_select(column, options)<< ' ' << active_scaffold_render_input(column, options.merge(:name => "record[#{column.name}][value]"))
|
@@ -57,12 +57,21 @@ module ActiveScaffold
|
|
57
57
|
alias_method :active_scaffold_update_decimal, :active_scaffold_update_numeric
|
58
58
|
alias_method :active_scaffold_update_float, :active_scaffold_update_numeric
|
59
59
|
|
60
|
-
def active_scaffold_update_scope_select
|
61
|
-
select_options
|
60
|
+
def active_scaffold_update_scope_select(select_options = active_scaffold_update_scope_select_options)
|
61
|
+
if select_options.length > 1
|
62
|
+
select_tag("batch_scope",
|
63
|
+
options_for_select(select_options, batch_scope || select_options.last[1]),
|
64
|
+
:class => "text_input")
|
65
|
+
else
|
66
|
+
hidden_field_tag("batch_scope", select_options.first[1]) unless select_options.empty?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def active_scaffold_update_scope_select_options
|
71
|
+
select_options = []
|
72
|
+
select_options << [as_(:listed), 'LISTED'] if active_scaffold_config.batch_update.list_mode_enabled
|
62
73
|
select_options << [as_(:marked), 'MARKED'] if active_scaffold_config.actions.include?(:mark)
|
63
|
-
|
64
|
-
options_for_select(select_options, batch_scope || select_options.last[1]),
|
65
|
-
:class => "text_input")
|
74
|
+
select_options
|
66
75
|
end
|
67
76
|
|
68
77
|
##
|
@@ -2,6 +2,8 @@
|
|
2
2
|
ActiveScaffold::Config::Core.class_eval do
|
3
3
|
ActionDispatch::Routing::ACTIVE_SCAFFOLD_CORE_ROUTING[:collection][:batch_edit] = :get
|
4
4
|
ActionDispatch::Routing::ACTIVE_SCAFFOLD_CORE_ROUTING[:collection][:batch_update] = :post
|
5
|
+
ActionDispatch::Routing::ACTIVE_SCAFFOLD_CORE_ROUTING[:collection][:batch_new] = :get
|
6
|
+
ActionDispatch::Routing::ACTIVE_SCAFFOLD_CORE_ROUTING[:collection][:batch_create] = :post
|
5
7
|
#not working because routing picks show route instead
|
6
8
|
#ActionDispatch::Routing::ACTIVE_SCAFFOLD_CORE_ROUTING[:collection][:batch_destroy] = :get
|
7
9
|
#you may define a route for your controller before resource routes
|
@@ -2,7 +2,7 @@
|
|
2
2
|
ActiveScaffold rescue throw "should have included ActiveScaffold plug in first. Please make sure that this overwrite plugging comes alphabetically after the ActiveScaffold plug in"
|
3
3
|
|
4
4
|
# Load our overrides
|
5
|
-
require "
|
5
|
+
require "active_scaffold_batch/config/core.rb"
|
6
6
|
|
7
7
|
module ActiveScaffoldBatch
|
8
8
|
def self.root
|
@@ -24,14 +24,7 @@ module ActiveScaffold
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
include ActiveScaffold::Helpers::UpdateColumnHelpers
|
29
|
-
if ActiveScaffold.js_framework == :jquery
|
30
|
-
include ActiveScaffold::Helpers::DatepickerUpdateColumnHelpers
|
31
|
-
elsif ActiveScaffold.js_framework == :prototype
|
32
|
-
include ActiveScaffold::Helpers::CalendarDateSelectUpdateColumnHelpers
|
33
|
-
end
|
34
|
-
end
|
27
|
+
I18n.load_path += Dir[File.join(File.dirname(__FILE__), 'active_scaffold_batch', 'locale', '*.{rb,yml}')]
|
35
28
|
|
36
29
|
##
|
37
30
|
## Run the install assets script, too, just to make sure
|
@@ -40,7 +33,16 @@ end
|
|
40
33
|
Rails::Application.initializer("active_scaffold_batch.install_assets", :after => "active_scaffold.install_assets") do
|
41
34
|
begin
|
42
35
|
ActiveScaffoldAssets.copy_to_public(ActiveScaffoldBatch.root)
|
36
|
+
ActionView::Base.class_eval do
|
37
|
+
include ActiveScaffold::Helpers::UpdateColumnHelpers
|
38
|
+
if ActiveScaffold.js_framework == :jquery
|
39
|
+
include ActiveScaffold::Helpers::DatepickerUpdateColumnHelpers
|
40
|
+
elsif ActiveScaffold.js_framework == :prototype
|
41
|
+
include ActiveScaffold::Helpers::CalendarDateSelectUpdateColumnHelpers
|
42
|
+
end
|
43
|
+
include ActiveScaffold::Helpers::BatchCreateColumnHelpers
|
44
|
+
end
|
43
45
|
rescue
|
44
46
|
raise $! unless Rails.env == 'production'
|
45
47
|
end
|
46
|
-
end
|
48
|
+
end if defined?(ACTIVE_SCAFFOLD_BATCH_GEM)
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
1
|
+
ACTIVE_SCAFFOLD_BATCH_GEM = true
|
2
2
|
require 'active_scaffold_batch'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_scaffold_batch_vho
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 3.0.
|
9
|
+
- 3
|
10
|
+
version: 3.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Volker Hochstein
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-02-18 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -84,13 +84,14 @@ dependencies:
|
|
84
84
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
hash:
|
89
|
+
hash: 31
|
90
90
|
segments:
|
91
91
|
- 3
|
92
92
|
- 0
|
93
|
-
|
93
|
+
- 12
|
94
|
+
version: 3.0.12
|
94
95
|
requirement: *id005
|
95
96
|
type: :runtime
|
96
97
|
description: You want to destroy/update many records at once with activescaffold?
|
@@ -108,25 +109,35 @@ files:
|
|
108
109
|
- README
|
109
110
|
- Rakefile
|
110
111
|
- active_scaffold_batch_vho.gemspec
|
112
|
+
- frontends/default/views/_batch_create_form.html.erb
|
113
|
+
- frontends/default/views/_batch_create_form_attribute.html.erb
|
114
|
+
- frontends/default/views/_batch_create_form_body.html.erb
|
111
115
|
- frontends/default/views/_batch_update_form.html.erb
|
112
116
|
- frontends/default/views/_batch_update_form_attribute.html.erb
|
113
117
|
- frontends/default/views/_batch_update_form_attribute_scope.html.erb
|
114
118
|
- frontends/default/views/_batch_update_form_body.html.erb
|
119
|
+
- frontends/default/views/batch_create.html.erb
|
115
120
|
- frontends/default/views/batch_update.html.erb
|
116
121
|
- frontends/default/views/on_batch_base.js.rjs
|
122
|
+
- frontends/default/views/on_batch_create.js.rjs
|
117
123
|
- frontends/default/views/on_batch_update.js.rjs
|
118
124
|
- init.rb
|
119
125
|
- lib/active_scaffold/actions/batch_base.rb
|
126
|
+
- lib/active_scaffold/actions/batch_create.rb
|
120
127
|
- lib/active_scaffold/actions/batch_destroy.rb
|
121
128
|
- lib/active_scaffold/actions/batch_update.rb
|
122
129
|
- lib/active_scaffold/config/batch_base.rb
|
130
|
+
- lib/active_scaffold/config/batch_create.rb
|
123
131
|
- lib/active_scaffold/config/batch_destroy.rb
|
124
132
|
- lib/active_scaffold/config/batch_update.rb
|
133
|
+
- lib/active_scaffold/helpers/batch_create_column_helpers.rb
|
125
134
|
- lib/active_scaffold/helpers/calendar_date_select_update_column_helpers.rb
|
126
135
|
- lib/active_scaffold/helpers/datepicker_update_column_helpers.rb
|
127
136
|
- lib/active_scaffold/helpers/update_column_helpers.rb
|
128
137
|
- lib/active_scaffold_batch.rb
|
129
138
|
- lib/active_scaffold_batch/config/core.rb
|
139
|
+
- lib/active_scaffold_batch/locale/de.yml
|
140
|
+
- lib/active_scaffold_batch/locale/en.yml
|
130
141
|
- lib/active_scaffold_batch/version.rb
|
131
142
|
- lib/active_scaffold_batch_vho.rb
|
132
143
|
- uninstall.rb
|