active_scaffold 3.0.12 → 3.0.21

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.
Files changed (142) hide show
  1. data/README +21 -11
  2. data/frontends/default/images/close_touch.png +0 -0
  3. data/frontends/default/javascripts/jquery/active_scaffold.js +187 -99
  4. data/frontends/default/javascripts/prototype/active_scaffold.js +105 -33
  5. data/frontends/default/javascripts/prototype/dhtml_history.js +80 -77
  6. data/frontends/default/stylesheets/stylesheet.css +121 -2
  7. data/frontends/default/views/_action_group.html.erb +6 -2
  8. data/frontends/default/views/_base_form.html.erb +11 -5
  9. data/frontends/default/views/_base_form.html.erb~ +42 -0
  10. data/frontends/default/views/_field_search.html.erb +1 -1
  11. data/frontends/default/views/_form.html.erb +9 -7
  12. data/frontends/default/views/_form_association.html.erb +8 -3
  13. data/frontends/default/views/_form_association_footer.html.erb +10 -3
  14. data/frontends/default/views/_form_attribute.html.erb +8 -3
  15. data/frontends/default/views/_horizontal_subform.html.erb +12 -2
  16. data/frontends/default/views/_horizontal_subform_header.html.erb +1 -1
  17. data/frontends/default/views/_horizontal_subform_record.html.erb +5 -4
  18. data/frontends/default/views/_list_messages.html.erb +1 -1
  19. data/frontends/default/views/_list_with_header.html.erb +1 -1
  20. data/frontends/default/views/_render_field.js.rjs +4 -6
  21. data/frontends/default/views/_vertical_subform.html.erb +1 -1
  22. data/frontends/default/views/_vertical_subform_record.html.erb +2 -2
  23. data/frontends/default/views/on_action_update.js.rjs +3 -1
  24. data/frontends/default/views/on_mark_all.js.rjs +12 -0
  25. data/frontends/default/views/on_update.js.rjs +1 -1
  26. data/frontends/default/views/render_field.js.rjs +1 -0
  27. data/frontends/default/views/update_column.js.rjs +1 -1
  28. data/lib/active_scaffold.rb +60 -21
  29. data/lib/active_scaffold/actions/common_search.rb +2 -2
  30. data/lib/active_scaffold/actions/core.rb +30 -9
  31. data/lib/active_scaffold/actions/create.rb +14 -10
  32. data/lib/active_scaffold/actions/field_search.rb +6 -6
  33. data/lib/active_scaffold/actions/list.rb +22 -12
  34. data/lib/active_scaffold/actions/mark.rb +34 -9
  35. data/lib/active_scaffold/actions/nested.rb +12 -16
  36. data/lib/active_scaffold/actions/show.rb +2 -2
  37. data/lib/active_scaffold/actions/subform.rb +15 -8
  38. data/lib/active_scaffold/actions/update.rb +14 -4
  39. data/lib/active_scaffold/attribute_params.rb +15 -10
  40. data/lib/active_scaffold/bridges/bridge.rb +21 -12
  41. data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +3 -3
  42. data/lib/active_scaffold/bridges/cancan/bridge.rb +12 -0
  43. data/lib/active_scaffold/bridges/cancan/lib/cancan_bridge.rb +107 -0
  44. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +1 -1
  45. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +3 -8
  46. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +1 -15
  47. data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +23 -13
  48. data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +1 -1
  49. data/lib/active_scaffold/bridges/country_helper/bridge.rb +9 -0
  50. data/lib/active_scaffold/bridges/country_helper/lib/country_helper_bridge.rb +358 -0
  51. data/lib/active_scaffold/bridges/date_picker/bridge.rb +5 -3
  52. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +9 -0
  53. data/lib/active_scaffold/bridges/dragonfly/bridge.rb +9 -0
  54. data/lib/active_scaffold/bridges/dragonfly/bridge.rb~ +12 -0
  55. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge.rb +36 -0
  56. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge.rb~ +36 -0
  57. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge_helpers.rb +12 -0
  58. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge_helpers.rb~ +12 -0
  59. data/lib/active_scaffold/bridges/dragonfly/lib/form_ui.rb +27 -0
  60. data/lib/active_scaffold/bridges/dragonfly/lib/form_ui.rb~ +27 -0
  61. data/lib/active_scaffold/bridges/dragonfly/lib/list_ui.rb +16 -0
  62. data/lib/active_scaffold/bridges/dragonfly/lib/list_ui.rb~ +16 -0
  63. data/lib/active_scaffold/bridges/paperclip/bridge.rb +1 -1
  64. data/lib/active_scaffold/bridges/record_select/bridge.rb +5 -0
  65. data/lib/active_scaffold/bridges/record_select/lib/record_select_bridge.rb +87 -0
  66. data/lib/active_scaffold/bridges/record_select/lib/record_select_bridge.rb~ +84 -0
  67. data/lib/active_scaffold/bridges/shared/date_bridge.rb +56 -34
  68. data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +19 -3
  69. data/lib/active_scaffold/config/base.rb +4 -4
  70. data/lib/active_scaffold/config/core.rb +4 -0
  71. data/lib/active_scaffold/config/create.rb +1 -1
  72. data/lib/active_scaffold/config/field_search.rb +7 -7
  73. data/lib/active_scaffold/config/form.rb +8 -2
  74. data/lib/active_scaffold/config/list.rb +22 -8
  75. data/lib/active_scaffold/config/mark.rb +18 -5
  76. data/lib/active_scaffold/config/nested.rb +3 -3
  77. data/lib/active_scaffold/config/search.rb +1 -1
  78. data/lib/active_scaffold/config/show.rb +1 -1
  79. data/lib/active_scaffold/data_structures/action_columns.rb +10 -6
  80. data/lib/active_scaffold/data_structures/action_link.rb +14 -10
  81. data/lib/active_scaffold/data_structures/action_links.rb +2 -2
  82. data/lib/active_scaffold/data_structures/column.rb +25 -11
  83. data/lib/active_scaffold/data_structures/nested_info.rb +21 -21
  84. data/lib/active_scaffold/data_structures/set.rb +2 -3
  85. data/lib/active_scaffold/data_structures/sorting.rb +8 -8
  86. data/lib/{extensions → active_scaffold/extensions}/action_controller_rendering.rb +3 -1
  87. data/lib/{extensions → active_scaffold/extensions}/action_view_rendering.rb +31 -33
  88. data/lib/{extensions → active_scaffold/extensions}/action_view_resolver.rb +0 -0
  89. data/lib/{extensions → active_scaffold/extensions}/active_association_reflection.rb +0 -0
  90. data/lib/active_scaffold/extensions/active_record_offset.rb +12 -0
  91. data/lib/{extensions → active_scaffold/extensions}/array.rb +0 -0
  92. data/lib/{extensions → active_scaffold/extensions}/localize.rb +1 -1
  93. data/lib/{extensions → active_scaffold/extensions}/name_option_for_datetime.rb +1 -1
  94. data/lib/{extensions → active_scaffold/extensions}/nil_id_in_url_params.rb +0 -0
  95. data/lib/{extensions → active_scaffold/extensions}/paginator_extensions.rb +2 -2
  96. data/lib/{extensions → active_scaffold/extensions}/reverse_associations.rb +1 -1
  97. data/lib/{extensions → active_scaffold/extensions}/routing_mapper.rb +2 -2
  98. data/lib/{extensions → active_scaffold/extensions}/to_label.rb +0 -0
  99. data/lib/{extensions → active_scaffold/extensions}/unsaved_associated.rb +0 -0
  100. data/lib/{extensions → active_scaffold/extensions}/unsaved_record.rb +0 -0
  101. data/lib/active_scaffold/extensions/usa_state.rb +46 -0
  102. data/lib/active_scaffold/finder.rb +30 -19
  103. data/lib/active_scaffold/helpers/controller_helpers.rb +3 -5
  104. data/lib/active_scaffold/helpers/form_column_helpers.rb +19 -45
  105. data/lib/active_scaffold/helpers/human_condition_helpers.rb +1 -1
  106. data/lib/active_scaffold/helpers/id_helpers.rb +2 -2
  107. data/lib/active_scaffold/helpers/list_column_helpers.rb +28 -17
  108. data/lib/active_scaffold/helpers/search_column_helpers.rb +51 -40
  109. data/lib/active_scaffold/helpers/search_column_helpers.rb~ +215 -0
  110. data/lib/active_scaffold/helpers/show_column_helpers.rb +8 -4
  111. data/lib/active_scaffold/helpers/view_helpers.rb +50 -27
  112. data/lib/active_scaffold/locale/de.yml +111 -0
  113. data/lib/active_scaffold/locale/en.yml +115 -0
  114. data/lib/active_scaffold/locale/es.yml +32 -32
  115. data/lib/active_scaffold/locale/fr.yml +118 -0
  116. data/lib/active_scaffold/marked_model.rb +6 -6
  117. data/lib/active_scaffold/version.rb +1 -1
  118. data/lib/active_scaffold_assets.rb +1 -3
  119. data/lib/active_scaffold_env.rb +1 -2
  120. data/lib/generators/active_scaffold/active_scaffold_generator.rb +5 -5
  121. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +3 -2
  122. data/lib/generators/active_scaffold_controller/templates/helper.rb +2 -0
  123. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +17 -19
  124. data/shoulda_macros/macros.rb +4 -4
  125. data/test/misc/finder_test.rb +2 -2
  126. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +4 -1
  127. metadata +144 -126
  128. data/.autotest +0 -27
  129. data/.document +0 -5
  130. data/Gemfile +0 -13
  131. data/Gemfile.lock +0 -20
  132. data/Rakefile +0 -53
  133. data/active_scaffold.gemspec +0 -385
  134. data/init.rb +0 -2
  135. data/lib/active_scaffold/helpers/country_helpers.rb +0 -358
  136. data/lib/active_scaffold/locale/de.rb +0 -120
  137. data/lib/active_scaffold/locale/en.rb +0 -119
  138. data/lib/active_scaffold/locale/fr.rb +0 -116
  139. data/lib/extensions/active_record_offset.rb +0 -12
  140. data/lib/extensions/usa_state.rb +0 -50
  141. data/test/mock_app/.gitignore +0 -2
  142. data/uninstall.rb +0 -13
@@ -4,7 +4,7 @@ module ActiveScaffold::Actions
4
4
  def store_search_params_into_session
5
5
  active_scaffold_session_storage[:search] = params.delete :search if params[:search]
6
6
  end
7
-
7
+
8
8
  def search_params
9
9
  active_scaffold_session_storage[:search]
10
10
  end
@@ -12,7 +12,7 @@ module ActiveScaffold::Actions
12
12
  def search_ignore?
13
13
  active_scaffold_config.list.always_show_search
14
14
  end
15
-
15
+
16
16
  # The default security delegates to ActiveRecordPermissions.
17
17
  # You may override the method to customize.
18
18
  def search_authorized?
@@ -6,6 +6,7 @@ module ActiveScaffold::Actions
6
6
  end
7
7
  base.helper_method :nested?
8
8
  base.helper_method :beginning_of_chain
9
+ base.helper_method :new_model
9
10
  end
10
11
  def render_field
11
12
  if params[:in_place_editing]
@@ -14,7 +15,7 @@ module ActiveScaffold::Actions
14
15
  render_field_for_update_columns
15
16
  end
16
17
  end
17
-
18
+
18
19
  protected
19
20
 
20
21
  def nested?
@@ -31,10 +32,22 @@ module ActiveScaffold::Actions
31
32
  @record = new_model
32
33
  column = active_scaffold_config.columns[params[:column]]
33
34
  unless column.nil?
34
- value = column_value_from_param_value(@record, column, params[:value])
35
- @record.send "#{column.name}=", value
35
+ if column.send_form_on_update_column
36
+ hash = if params[:scope]
37
+ hash = params[:scope].gsub('[','').split(']').inject(params[:record]) do |hash, index|
38
+ hash[index]
39
+ end
40
+ else
41
+ params[:record]
42
+ end
43
+ @record = update_record_from_params(@record, active_scaffold_config.update.columns, hash)
44
+ else
45
+ value = column_value_from_param_value(@record, column, params[:value])
46
+ @record.send "#{column.name}=", value
47
+ end
36
48
  after_render_field(@record, column)
37
- render :partial => "render_field", :collection => Array(params[:update_columns]), :content_type => 'text/javascript'
49
+ source_id = params.delete(:source_id)
50
+ render :locals => {:source_id => source_id, :columns => column.update_columns, :scope => params[:scope]}
38
51
  end
39
52
  end
40
53
 
@@ -107,21 +120,21 @@ module ActiveScaffold::Actions
107
120
  # Override this method on your controller to define conditions to be used when querying a recordset (e.g. for List). The return of this method should be any format compatible with the :conditions clause of ActiveRecord::Base's find.
108
121
  def conditions_for_collection
109
122
  end
110
-
123
+
111
124
  # Override this method on your controller to define joins to be used when querying a recordset (e.g. for List). The return of this method should be any format compatible with the :joins clause of ActiveRecord::Base's find.
112
125
  def joins_for_collection
113
126
  end
114
-
127
+
115
128
  # Override this method on your controller to provide custom finder options to the find() call. The return of this method should be a hash.
116
129
  def custom_finder_options
117
130
  {}
118
131
  end
119
-
132
+
120
133
  #Overide this method on your controller to provide model with named scopes
121
134
  def beginning_of_chain
122
135
  active_scaffold_config.model
123
136
  end
124
-
137
+
125
138
  # Builds search conditions by search params for column names. This allows urls like "contacts/list?company_id=5".
126
139
  def conditions_from_params
127
140
  conditions = nil
@@ -150,12 +163,20 @@ module ActiveScaffold::Actions
150
163
  private
151
164
  def respond_to_action(action)
152
165
  respond_to do |type|
153
- send("#{action}_formats").each do |format|
166
+ action_formats.each do |format|
154
167
  type.send(format){ send("#{action}_respond_to_#{format}") }
155
168
  end
156
169
  end
157
170
  end
158
171
 
172
+ def action_formats
173
+ @action_formats ||= if respond_to? "#{action_name}_formats", true
174
+ send("#{action_name}_formats")
175
+ else
176
+ (default_formats + active_scaffold_config.formats).uniq
177
+ end
178
+ end
179
+
159
180
  def response_code_for_rescue(exception)
160
181
  case exception
161
182
  when ActiveScaffold::RecordNotAllowed
@@ -29,7 +29,7 @@ module ActiveScaffold::Actions
29
29
  return_to_main
30
30
  end
31
31
  end
32
-
32
+
33
33
  def new_respond_to_js
34
34
  render(:partial => 'create_form')
35
35
  end
@@ -100,20 +100,24 @@ module ActiveScaffold::Actions
100
100
  @record = update_record_from_params(new_model, active_scaffold_config.create.columns, params[:record])
101
101
  apply_constraints_to_record(@record, :allow_autosave => true)
102
102
  if nested?
103
- create_association_with_parent(@record)
103
+ create_association_with_parent(@record)
104
104
  register_constraints_with_action_columns(nested.constrained_fields)
105
105
  end
106
- before_create_save(@record)
107
- self.successful = [@record.valid?, @record.associated_valid?].all? {|v| v == true} # this syntax avoids a short-circuit
108
- if successful?
109
- @record.save! and @record.save_associated!
110
- after_create_save(@record)
111
- end
106
+ create_save
112
107
  end
113
108
  rescue ActiveRecord::RecordInvalid
114
109
  end
115
110
  end
116
111
 
112
+ def create_save
113
+ before_create_save(@record)
114
+ self.successful = [@record.valid?, @record.associated_valid?].all? {|v| v == true} # this syntax avoids a short-circuit
115
+ if successful?
116
+ @record.save! and @record.save_associated!
117
+ after_create_save(@record)
118
+ end
119
+ end
120
+
117
121
  # override this method if you want to inject data in the record (or its associated objects) before the save
118
122
  def before_create_save(record); end
119
123
 
@@ -122,11 +126,11 @@ module ActiveScaffold::Actions
122
126
 
123
127
  # The default security delegates to ActiveRecordPermissions.
124
128
  # You may override the method to customize.
125
-
129
+
126
130
  def create_ignore?
127
131
  nested? && active_scaffold_config.list.always_show_create
128
132
  end
129
-
133
+
130
134
  def create_authorized?
131
135
  (!nested? || !nested.readonly?) && authorized_for?(:crud_type => :create)
132
136
  end
@@ -11,24 +11,24 @@ module ActiveScaffold::Actions
11
11
  # FieldSearch uses params[:search] and not @record because search conditions do not always pass the Model's validations.
12
12
  # This facilitates for example, textual searches against associations via .search_sql
13
13
  def show_search
14
- @record = active_scaffold_config.model.new
14
+ @record = new_model
15
15
  respond_to_action(:field_search)
16
16
  end
17
17
 
18
18
  protected
19
-
19
+
20
20
  def store_search_params_into_session
21
21
  set_field_search_default_params(active_scaffold_config.field_search.default_params) unless active_scaffold_config.field_search.default_params.nil?
22
22
  super
23
23
  active_scaffold_session_storage[:search] = nil if search_params.is_a?(String)
24
24
  end
25
-
25
+
26
26
  def set_field_search_default_params(default_params)
27
27
  if (params[:search].nil? && search_params.nil?) || (params[:search].is_a?(String) && params[:search].blank?)
28
28
  params[:search] = default_params.is_a?(Proc) ? self.instance_eval(&default_params) : default_params
29
29
  end
30
30
  end
31
-
31
+
32
32
  def field_search_params
33
33
  search_params || {}
34
34
  end
@@ -36,7 +36,7 @@ module ActiveScaffold::Actions
36
36
  def field_search_respond_to_html
37
37
  render(:action => "field_search")
38
38
  end
39
-
39
+
40
40
  def field_search_respond_to_js
41
41
  render(:partial => "field_search")
42
42
  end
@@ -70,7 +70,7 @@ module ActiveScaffold::Actions
70
70
  end
71
71
 
72
72
  private
73
-
73
+
74
74
  def search_authorized_filter
75
75
  link = active_scaffold_config.field_search.link || active_scaffold_config.field_search.class.link
76
76
  raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
@@ -18,11 +18,11 @@ module ActiveScaffold::Actions
18
18
  def list
19
19
  do_list
20
20
  do_new if active_scaffold_config.list.always_show_create
21
- @record ||= active_scaffold_config.model.new if active_scaffold_config.list.always_show_search
21
+ @record ||= new_model if active_scaffold_config.list.always_show_search
22
22
  @nested_auto_open = active_scaffold_config.list.nested_auto_open
23
23
  respond_to_action(:list)
24
24
  end
25
-
25
+
26
26
  protected
27
27
  def list_respond_to_html
28
28
  if params.delete(:embedded)
@@ -65,14 +65,14 @@ module ActiveScaffold::Actions
65
65
  self.active_scaffold_includes.concat includes_for_list_columns
66
66
 
67
67
  options = { :sorting => active_scaffold_config.list.user.sorting,
68
- :count_includes => active_scaffold_config.list.user.count_includes }
68
+ :count_includes => active_scaffold_config.list.user.count_includes }
69
69
  paginate = (params[:format].nil?) ? (accepts? :html, :js) : ['html', 'js'].include?(params[:format])
70
70
  if paginate
71
71
  options.merge!({
72
- :per_page => active_scaffold_config.list.user.per_page,
73
- :page => active_scaffold_config.list.user.page,
74
- :pagination => active_scaffold_config.list.pagination
75
- })
72
+ :per_page => active_scaffold_config.list.user.per_page,
73
+ :page => active_scaffold_config.list.user.page,
74
+ :pagination => active_scaffold_config.list.pagination
75
+ })
76
76
  end
77
77
 
78
78
  page = find_page(options);
@@ -83,11 +83,19 @@ module ActiveScaffold::Actions
83
83
  @page, @records = page, page.items
84
84
  end
85
85
 
86
+ def each_record_in_page
87
+ _page = active_scaffold_config.list.user.page
88
+ do_search if respond_to? :do_search
89
+ active_scaffold_config.list.user.page = _page
90
+ do_list
91
+ @page.items.each {|record| yield record}
92
+ end
93
+
86
94
  def each_record_in_scope
87
95
  do_search if respond_to? :do_search
88
96
  finder_options = { :order => "#{active_scaffold_config.model.connection.quote_table_name(active_scaffold_config.model.table_name)}.#{active_scaffold_config.model.primary_key} ASC",
89
- :conditions => all_conditions,
90
- :joins => joins_for_finder}
97
+ :conditions => all_conditions,
98
+ :joins => joins_for_finder}
91
99
  finder_options.merge! custom_finder_options
92
100
  finder_options.merge! :include => (active_scaffold_includes.blank? ? nil : active_scaffold_includes)
93
101
  klass = beginning_of_chain
@@ -107,14 +115,15 @@ module ActiveScaffold::Actions
107
115
  # self.successful = true
108
116
  # flash[:info] = 'Player fired'
109
117
  # end
110
- def process_action_link_action(render_action = :action_update)
118
+ def process_action_link_action(render_action = :action_update, crud_type = nil)
111
119
  if request.get?
112
120
  # someone has disabled javascript, we have to show confirmation form first
113
121
  @record = find_if_allowed(params[:id], :read) if params[:id] && params[:id] && params[:id].to_i > 0
114
122
  respond_to_action(:action_confirmation)
115
123
  else
116
124
  if params[:id] && params[:id] && params[:id].to_i > 0
117
- @record = find_if_allowed(params[:id], (request.post? || request.put?) ? :update : :delete)
125
+ crud_type ||= (request.post? || request.put?) ? :update : :delete
126
+ @record = find_if_allowed(params[:id], crud_type)
118
127
  unless @record.nil?
119
128
  yield @record
120
129
  else
@@ -154,7 +163,7 @@ module ActiveScaffold::Actions
154
163
  def action_update_respond_to_yaml
155
164
  render :text => successful? ? "" : Hash.from_xml(response_object.to_xml(:only => list_columns_names)).to_yaml, :content_type => Mime::YAML, :status => response_status
156
165
  end
157
-
166
+
158
167
  private
159
168
  def list_authorized_filter
160
169
  raise ActiveScaffold::ActionNotAllowed unless list_authorized?
@@ -163,6 +172,7 @@ module ActiveScaffold::Actions
163
172
  def list_formats
164
173
  (default_formats + active_scaffold_config.formats + active_scaffold_config.list.formats).uniq
165
174
  end
175
+ alias_method :index_formats, :list_formats
166
176
  alias_method :row_formats, :list_formats
167
177
 
168
178
  def action_update_formats
@@ -8,43 +8,68 @@ module ActiveScaffold::Actions
8
8
  end
9
9
 
10
10
  def mark_all
11
- if mark_all?
11
+ if mark_all? || mark_all_scope_forced?
12
12
  do_mark_all
13
13
  else
14
14
  do_demark_all
15
15
  end
16
+ respond_to_action(:mark_all)
17
+ end
18
+ protected
19
+
20
+ def mark_all_respond_to_html
16
21
  do_list
17
- respond_to_action(:list)
22
+ list_respond_to_html
18
23
  end
19
- protected
20
24
 
25
+ def mark_all_respond_to_js
26
+ do_list
27
+ render :action => 'on_mark_all', :locals => {:mark_all => mark_all?}
28
+ end
29
+
21
30
  # We need to give the ActiveRecord classes a handle to currently marked records. We don't want to just pass the object,
22
31
  # because the object may change. So we give ActiveRecord a proc that ties to the
23
32
  # marked_records_method on this ApplicationController.
24
33
  def assign_marked_records_to_model
25
34
  active_scaffold_config.model.marked_records = marked_records
26
35
  end
27
-
36
+
28
37
  def marked_records
29
38
  active_scaffold_session_storage[:marked_records] ||= Set.new
30
39
  end
31
-
40
+
32
41
  def mark_all?
33
42
  @mark_all ||= [true, 'true', 1, '1', 'T', 't'].include?(params[:value].class == String ? params[:value].downcase : params[:value])
34
43
  end
35
44
 
45
+ def mark_all_scope_forced?
46
+ !params[:mark_target].nil? && params[:mark_target]=='scope'
47
+ end
48
+
36
49
  def do_mark_all
37
- each_record_in_scope {|record| marked_records << record.id}
50
+ if active_scaffold_config.mark.mark_all_mode == :page && !mark_all_scope_forced? then
51
+ each_record_in_page {|record| marked_records << record.id}
52
+ else
53
+ each_record_in_scope {|record| marked_records << record.id}
54
+ end
38
55
  end
39
56
 
40
57
  def do_demark_all
41
- each_record_in_scope {|record| marked_records.delete(record.id)}
58
+ if active_scaffold_config.mark.mark_all_mode == :page then
59
+ each_record_in_page {|record| marked_records.delete(record.id)}
60
+ else
61
+ each_record_in_scope {|record| marked_records.delete(record.id)}
62
+ end
42
63
  end
43
-
64
+
44
65
  # The default security delegates to ActiveRecordPermissions.
45
66
  # You may override the method to customize.
46
67
  def mark_authorized?
47
68
  authorized_for?(:action => :read)
48
69
  end
70
+
71
+ def mark_all_formats
72
+ (default_formats + active_scaffold_config.formats).uniq
73
+ end
49
74
  end
50
- end
75
+ end
@@ -1,9 +1,5 @@
1
1
  module ActiveScaffold::Actions
2
- # The Nested module basically handles automatically linking
3
- # controllers together. It does this by creating column links with
4
- # the right parameters, and by providing any supporting systems
5
- # (like a /:controller/nested action for returning associated
6
- # scaffolds).
2
+ # The Nested module basically handles automatically linking controllers together. It does this by creating column links with the right parameters, and by providing any supporting systems (like a /:controller/nested action for returning associated scaffolds).
7
3
  module Nested
8
4
 
9
5
  def self.included(base)
@@ -23,16 +19,16 @@ module ActiveScaffold::Actions
23
19
  def nested
24
20
  @nested ||= ActiveScaffold::DataStructures::NestedInfo.get(active_scaffold_config.model, active_scaffold_session_storage)
25
21
  if !@nested.nil? && @nested.new_instance?
26
- register_constraints_with_action_columns(@nested.constrained_fields)
22
+ register_constraints_with_action_columns(@nested.constrained_fields, active_scaffold_config.list.hide_nested_column ? [] : [:list])
27
23
  active_scaffold_constraints[:id] = params[:id] if @nested.belongs_to?
28
24
  end
29
25
  @nested
30
26
  end
31
-
27
+
32
28
  def nested?
33
29
  !nested.nil?
34
30
  end
35
-
31
+
36
32
  def set_nested
37
33
  if params[:parent_scaffold] && ((params[:association] && params[:assoc_id]) || params[:named_scope])
38
34
  @nested = nil
@@ -42,7 +38,7 @@ module ActiveScaffold::Actions
42
38
  params.delete_if {|key, value| [:parent_scaffold, :association, :named_scope, :assoc_id].include? key.to_sym}
43
39
  end
44
40
  end
45
-
41
+
46
42
  def configure_nested
47
43
  if nested?
48
44
  active_scaffold_session_storage[:list][:label] = if nested.belongs_to?
@@ -55,7 +51,7 @@ module ActiveScaffold::Actions
55
51
  end
56
52
  end
57
53
  end
58
-
54
+
59
55
  def nested_authorized?(record = nil)
60
56
  true
61
57
  end
@@ -74,7 +70,7 @@ module ActiveScaffold::Actions
74
70
  else
75
71
  # Production mode is caching this link into a non nested scaffold
76
72
  active_scaffold_config.action_links.delete('new_existing') if active_scaffold_config.action_links['new_existing']
77
-
73
+
78
74
  if active_scaffold_config.nested.shallow_delete
79
75
  active_scaffold_config.action_links.delete("destroy_existing") if active_scaffold_config.action_links['destroy_existing']
80
76
  if active_scaffold_config.actions.include?(:delete)
@@ -84,7 +80,7 @@ module ActiveScaffold::Actions
84
80
  end
85
81
  end
86
82
  end
87
-
83
+
88
84
  def beginning_of_chain
89
85
  if nested? && nested.association && nested.association.collection?
90
86
  nested.parent_scope.send(nested.association.name)
@@ -98,7 +94,7 @@ module ActiveScaffold::Actions
98
94
  def nested_parent_record(crud = :read)
99
95
  @nested_parent_record ||= find_if_allowed(nested.parent_id, crud, nested.parent_model)
100
96
  end
101
-
97
+
102
98
  def create_association_with_parent(record)
103
99
  if nested?
104
100
  if (nested.belongs_to? || nested.has_one? || nested.habtm?) && nested.child_association
@@ -114,7 +110,7 @@ module ActiveScaffold::Actions
114
110
  end
115
111
  end
116
112
  end
117
-
113
+
118
114
  private
119
115
  def nested_formats
120
116
  (default_formats + active_scaffold_config.formats + active_scaffold_config.nested.formats).uniq
@@ -147,7 +143,7 @@ module ActiveScaffold::Actions::Nested
147
143
  do_destroy_existing
148
144
  respond_to_action(:destroy_existing)
149
145
  end
150
-
146
+
151
147
  protected
152
148
  def new_existing_respond_to_html
153
149
  if successful?
@@ -210,7 +206,7 @@ module ActiveScaffold::Actions::Nested
210
206
  def delete_existing_authorized?(record = nil)
211
207
  true
212
208
  end
213
-
209
+
214
210
  def after_create_save(record)
215
211
  if params[:association_macro] == :has_and_belongs_to_many
216
212
  params[:associated_id] = record