active_scaffold 3.7.12 → 4.0.0.rc1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +9 -23
- data/README.md +3 -2
- data/app/assets/config/active_scaffold_manifest.js +3 -0
- data/app/assets/javascripts/active_scaffold.js.erb +24 -34
- data/app/assets/javascripts/jquery/active_scaffold.js +41 -58
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +1 -1
- data/app/assets/stylesheets/active_scaffold_colors.scss +0 -7
- data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -2
- data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +7 -7
- data/app/assets/stylesheets/active_scaffold_layout.css +57 -30
- data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +10 -10
- data/app/views/active_scaffold_overrides/_base_form.html.erb +21 -21
- data/app/views/active_scaffold_overrides/_create_form.html.erb +10 -7
- data/app/views/active_scaffold_overrides/_create_form_on_list.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_field_search.html.erb +6 -6
- data/app/views/active_scaffold_overrides/_form.html.erb +11 -14
- data/app/views/active_scaffold_overrides/_form_association.html.erb +21 -12
- data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +19 -10
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +15 -21
- data/app/views/active_scaffold_overrides/_form_messages.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +7 -6
- data/app/views/active_scaffold_overrides/_human_conditions.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_list.html.erb +15 -8
- data/app/views/active_scaffold_overrides/_list_calculations.html.erb +2 -3
- data/app/views/active_scaffold_overrides/_list_header.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_list_inline_adapter.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_list_messages.html.erb +12 -3
- data/app/views/active_scaffold_overrides/_list_pagination.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_list_record.html.erb +6 -6
- data/app/views/active_scaffold_overrides/_list_with_header.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +2 -2
- data/app/views/active_scaffold_overrides/_render_field.js.erb +4 -4
- data/app/views/active_scaffold_overrides/_row.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_search.html.erb +6 -5
- data/app/views/active_scaffold_overrides/_show.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_show_actions.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association_horizontal.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association_vertical.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_horizontal_record.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_actions.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_calculations.js.erb +2 -2
- data/app/views/active_scaffold_overrides/_update_column.js.erb +8 -7
- data/app/views/active_scaffold_overrides/_update_form.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_update_messages.js.erb +1 -1
- data/app/views/active_scaffold_overrides/_vertical_subform.html.erb +4 -3
- data/app/views/active_scaffold_overrides/action_confirmation.html.erb +3 -3
- data/app/views/active_scaffold_overrides/add_existing.js.erb +6 -6
- data/app/views/active_scaffold_overrides/add_existing_form.html.erb +1 -1
- data/app/views/active_scaffold_overrides/add_tab.js.erb +15 -0
- data/app/views/active_scaffold_overrides/create.html.erb +1 -1
- data/app/views/active_scaffold_overrides/delete.html.erb +4 -4
- data/app/views/active_scaffold_overrides/destroy.js.erb +15 -13
- data/app/views/active_scaffold_overrides/edit_associated.js.erb +3 -3
- data/app/views/active_scaffold_overrides/field_search.html.erb +1 -1
- data/app/views/active_scaffold_overrides/form_messages.js.erb +1 -1
- data/app/views/active_scaffold_overrides/list.html.erb +1 -1
- data/app/views/active_scaffold_overrides/on_action_update.js.erb +13 -8
- data/app/views/active_scaffold_overrides/on_create.js.erb +34 -6
- data/app/views/active_scaffold_overrides/on_mark.js.erb +3 -3
- data/app/views/active_scaffold_overrides/on_update.js.erb +9 -9
- data/app/views/active_scaffold_overrides/render_field.js.erb +1 -1
- data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
- data/app/views/active_scaffold_overrides/row.js.erb +2 -2
- data/app/views/active_scaffold_overrides/search.html.erb +1 -1
- data/app/views/active_scaffold_overrides/show.html.erb +3 -3
- data/app/views/active_scaffold_overrides/update.html.erb +2 -2
- data/app/views/active_scaffold_overrides/update_column.js.erb +4 -4
- data/app/views/active_scaffold_overrides/update_row.js.erb +1 -1
- data/lib/active_scaffold/actions/common_search.rb +5 -3
- data/lib/active_scaffold/actions/core.rb +57 -32
- data/lib/active_scaffold/actions/create.rb +19 -17
- data/lib/active_scaffold/actions/delete.rb +10 -12
- data/lib/active_scaffold/actions/field_search.rb +28 -13
- data/lib/active_scaffold/actions/list.rb +34 -34
- data/lib/active_scaffold/actions/mark.rb +5 -5
- data/lib/active_scaffold/actions/nested.rb +64 -56
- data/lib/active_scaffold/actions/search.rb +2 -2
- data/lib/active_scaffold/actions/show.rb +5 -5
- data/lib/active_scaffold/actions/subform.rb +15 -4
- data/lib/active_scaffold/actions/update.rb +20 -20
- data/lib/active_scaffold/active_record_permissions.rb +4 -3
- data/lib/active_scaffold/attribute_params.rb +51 -50
- data/lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb +4 -4
- data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +6 -2
- data/lib/active_scaffold/bridges/active_storage.rb +1 -1
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +3 -3
- data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +4 -1
- data/lib/active_scaffold/bridges/bitfields.rb +1 -1
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +9 -8
- data/lib/active_scaffold/bridges/cancan.rb +8 -8
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +1 -1
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +4 -3
- data/lib/active_scaffold/bridges/carrierwave.rb +2 -2
- data/lib/active_scaffold/bridges/chosen.rb +1 -5
- data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +4 -2
- data/lib/active_scaffold/bridges/date_picker/ext.rb +20 -12
- data/lib/active_scaffold/bridges/date_picker/helper.rb +37 -33
- data/lib/active_scaffold/bridges/date_picker.rb +1 -4
- data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +1 -1
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +3 -2
- data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
- data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +3 -2
- data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +2 -1
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +4 -9
- data/lib/active_scaffold/bridges/file_column/list_ui.rb +6 -3
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +3 -3
- data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +1 -4
- data/lib/active_scaffold/bridges/file_column.rb +1 -0
- data/lib/active_scaffold/bridges/paper_trail/actions.rb +4 -2
- data/lib/active_scaffold/bridges/paper_trail/config.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +2 -1
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +3 -2
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +1 -1
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +10 -9
- data/lib/active_scaffold/bridges/paperclip.rb +2 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +10 -11
- data/lib/active_scaffold/bridges/semantic_attributes/column.rb +3 -1
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -7
- data/lib/active_scaffold/bridges/tiny_mce.rb +2 -7
- data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +7 -7
- data/lib/active_scaffold/bridges.rb +7 -5
- data/lib/active_scaffold/config/base.rb +20 -24
- data/lib/active_scaffold/config/core.rb +27 -39
- data/lib/active_scaffold/config/create.rb +1 -1
- data/lib/active_scaffold/config/delete.rb +9 -9
- data/lib/active_scaffold/config/field_search.rb +4 -9
- data/lib/active_scaffold/config/form.rb +3 -1
- data/lib/active_scaffold/config/list.rb +19 -15
- data/lib/active_scaffold/config/nested.rb +2 -2
- data/lib/active_scaffold/config/search.rb +5 -5
- data/lib/active_scaffold/config/show.rb +1 -1
- data/lib/active_scaffold/config/subform.rb +1 -1
- data/lib/active_scaffold/config/update.rb +4 -5
- data/lib/active_scaffold/configurable.rb +2 -1
- data/lib/active_scaffold/constraints.rb +16 -11
- data/lib/active_scaffold/core.rb +25 -27
- data/lib/active_scaffold/data_structures/action_columns.rb +10 -3
- data/lib/active_scaffold/data_structures/action_link.rb +19 -9
- data/lib/active_scaffold/data_structures/action_links.rb +20 -26
- data/lib/active_scaffold/data_structures/actions.rb +3 -3
- data/lib/active_scaffold/data_structures/association/abstract.rb +8 -4
- data/lib/active_scaffold/data_structures/association/active_mongoid.rb +1 -0
- data/lib/active_scaffold/data_structures/association/active_record.rb +1 -4
- data/lib/active_scaffold/data_structures/column.rb +368 -327
- data/lib/active_scaffold/data_structures/columns.rb +3 -2
- data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
- data/lib/active_scaffold/data_structures/proxy_column.rb +68 -0
- data/lib/active_scaffold/data_structures/set.rb +7 -4
- data/lib/active_scaffold/data_structures/sorting.rb +21 -12
- data/lib/active_scaffold/engine.rb +12 -12
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +5 -5
- data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
- data/lib/active_scaffold/extensions/action_view_rendering.rb +29 -31
- data/lib/active_scaffold/extensions/ice_nine.rb +2 -1
- data/lib/active_scaffold/extensions/localize.rb +2 -2
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
- data/lib/active_scaffold/extensions/routing_mapper.rb +5 -4
- data/lib/active_scaffold/extensions/unsaved_associated.rb +3 -2
- data/lib/active_scaffold/finder.rb +71 -78
- data/lib/active_scaffold/helpers/action_link_helpers.rb +37 -49
- data/lib/active_scaffold/helpers/association_helpers.rb +3 -2
- data/lib/active_scaffold/helpers/controller_helpers.rb +18 -16
- data/lib/active_scaffold/helpers/form_column_helpers.rb +69 -53
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +17 -15
- data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
- data/lib/active_scaffold/helpers/list_column_helpers.rb +35 -38
- data/lib/active_scaffold/helpers/pagination_helpers.rb +4 -4
- data/lib/active_scaffold/helpers/search_column_helpers.rb +25 -34
- data/lib/active_scaffold/helpers/show_column_helpers.rb +7 -4
- data/lib/active_scaffold/helpers/tabs_helpers.rb +88 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +15 -13
- data/lib/active_scaffold/marked_model.rb +1 -2
- data/lib/active_scaffold/orm_checks.rb +6 -4
- data/lib/active_scaffold/paginator.rb +3 -2
- data/lib/active_scaffold/registry.rb +5 -0
- data/lib/active_scaffold/tableless.rb +24 -14
- data/lib/active_scaffold/version.rb +4 -4
- data/lib/active_scaffold.rb +8 -34
- data/lib/generators/active_scaffold/controller_generator.rb +20 -20
- data/lib/generators/active_scaffold/install_generator.rb +4 -8
- data/lib/generators/active_scaffold/resource_generator.rb +31 -31
- data/lib/tasks/brakeman.rake +1 -1
- data/shoulda_macros/macros.rb +14 -14
- metadata +11 -232
- data/app/assets/javascripts/prototype/active_scaffold.js +0 -1249
- data/app/assets/javascripts/prototype/active_scaffold_chosen.js +0 -0
- data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
- data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
- data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -17
- data/app/views/active_scaffold_overrides/_list_messages_content.html.erb +0 -8
- data/app/views/active_scaffold_overrides/_new_record.js.erb +0 -15
- data/app/views/active_scaffold_overrides/_popup_adapter.html.erb +0 -20
- data/app/views/active_scaffold_overrides/_refresh_create_form.js.erb +0 -12
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -58
- data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -17
- data/lib/active_scaffold/data_structures/action_link_separator.rb +0 -13
- data/lib/active_scaffold/extensions/cow_proxy.rb +0 -102
- data/test/active_scaffold_config_mock.rb +0 -33
- data/test/bridges/bridge_test.rb +0 -88
- data/test/bridges/date_picker_test.rb +0 -31
- data/test/bridges/paper_trail_test.rb +0 -16
- data/test/bridges/paperclip_test.rb +0 -85
- data/test/bridges/tiny_mce_test.rb +0 -61
- data/test/class_with_finder.rb +0 -42
- data/test/company.rb +0 -97
- data/test/config/base_test.rb +0 -17
- data/test/config/core_test.rb +0 -66
- data/test/config/create_test.rb +0 -72
- data/test/config/delete_test.rb +0 -35
- data/test/config/field_search_test.rb +0 -49
- data/test/config/list_test.rb +0 -134
- data/test/config/nested_test.rb +0 -55
- data/test/config/search_test.rb +0 -62
- data/test/config/show_test.rb +0 -45
- data/test/config/subform_test.rb +0 -19
- data/test/config/update_test.rb +0 -52
- data/test/const_mocker.rb +0 -32
- data/test/data_structures/action_columns_test.rb +0 -112
- data/test/data_structures/action_link_test.rb +0 -79
- data/test/data_structures/action_links_test.rb +0 -78
- data/test/data_structures/actions_test.rb +0 -25
- data/test/data_structures/association_column_test.rb +0 -41
- data/test/data_structures/column_test.rb +0 -186
- data/test/data_structures/columns_test.rb +0 -68
- data/test/data_structures/set_test.rb +0 -84
- data/test/data_structures/sorting_test.rb +0 -148
- data/test/data_structures/standard_column_test.rb +0 -23
- data/test/data_structures/validation_reflection_test.rb +0 -69
- data/test/data_structures/virtual_column_test.rb +0 -23
- data/test/extensions/action_view_rendering_test.rb +0 -20
- data/test/extensions/active_record_test.rb +0 -44
- data/test/extensions/routing_mapper_test.rb +0 -73
- data/test/helpers/form_column_helpers_test.rb +0 -34
- data/test/helpers/list_column_helpers_test.rb +0 -53
- data/test/helpers/pagination_helpers_test.rb +0 -65
- data/test/helpers/search_column_helpers_test.rb +0 -15
- data/test/misc/active_record_permissions_test.rb +0 -193
- data/test/misc/attribute_params_test.rb +0 -460
- data/test/misc/calculation_test.rb +0 -39
- data/test/misc/configurable_test.rb +0 -97
- data/test/misc/constraints_test.rb +0 -209
- data/test/misc/convert_numbers_format_test.rb +0 -171
- data/test/misc/finder_test.rb +0 -124
- data/test/misc/lang_test.rb +0 -10
- data/test/misc/parse_datetime_test.rb +0 -159
- data/test/misc/render_test.rb +0 -9
- data/test/misc/tableless_test.rb +0 -56
- data/test/mock_app/.gitignore +0 -2
- data/test/mock_app/Rakefile +0 -7
- data/test/mock_app/app/assets/config/manifest.js +0 -0
- data/test/mock_app/app/controllers/addresses_controller.rb +0 -4
- data/test/mock_app/app/controllers/application_controller.rb +0 -10
- data/test/mock_app/app/controllers/buildings_controller.rb +0 -4
- data/test/mock_app/app/controllers/cars_controller.rb +0 -5
- data/test/mock_app/app/controllers/contacts_controller.rb +0 -4
- data/test/mock_app/app/controllers/floors_controller.rb +0 -6
- data/test/mock_app/app/controllers/people_controller.rb +0 -8
- data/test/mock_app/app/controllers/roles_controller.rb +0 -4
- data/test/mock_app/app/helpers/application_helper.rb +0 -3
- data/test/mock_app/app/models/address.rb +0 -3
- data/test/mock_app/app/models/building.rb +0 -9
- data/test/mock_app/app/models/car.rb +0 -3
- data/test/mock_app/app/models/contact.rb +0 -3
- data/test/mock_app/app/models/file_model.rb +0 -31
- data/test/mock_app/app/models/floor.rb +0 -8
- data/test/mock_app/app/models/person.rb +0 -12
- data/test/mock_app/app/models/role.rb +0 -3
- data/test/mock_app/app/views/active_scaffold_overrides/_form.html.erb +0 -2
- data/test/mock_app/app/views/active_scaffold_overrides/list.html.erb +0 -2
- data/test/mock_app/app/views/people/_first_name_form_column.html.erb +0 -2
- data/test/mock_app/app/views/people/_form.html.erb +0 -2
- data/test/mock_app/app/views/people/list.html.erb +0 -2
- data/test/mock_app/config/application.rb +0 -14
- data/test/mock_app/config/boot.rb +0 -7
- data/test/mock_app/config/database.yml +0 -16
- data/test/mock_app/config/environment.rb +0 -6
- data/test/mock_app/config/environments/development.rb +0 -24
- data/test/mock_app/config/environments/production.rb +0 -49
- data/test/mock_app/config/environments/test.rb +0 -34
- data/test/mock_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/mock_app/config/initializers/inflections.rb +0 -10
- data/test/mock_app/config/initializers/mime_types.rb +0 -5
- data/test/mock_app/config/initializers/secret_token.rb +0 -11
- data/test/mock_app/config/initializers/session_store.rb +0 -8
- data/test/mock_app/config/initializers/wrap_parameters.rb +0 -14
- data/test/mock_app/config/locales/en.yml +0 -5
- data/test/mock_app/config/routes.rb +0 -17
- data/test/mock_app/config.ru +0 -4
- data/test/mock_app/db/schema.rb +0 -68
- data/test/mock_app/db/test.sqlite3 +0 -1
- data/test/model_stub.rb +0 -64
- data/test/performance/list_cars_performance_test.rb +0 -34
- data/test/performance/list_people_performance_test.rb +0 -31
- data/test/performance_test_help.rb +0 -3
- data/test/run_all.rb +0 -6
- data/test/test_helper.rb +0 -71
- data/vendor/assets/javascripts/getprototypeof.js +0 -12
@@ -1,4 +1,4 @@
|
|
1
|
-
<% @column_span_id ||= element_cell_id(:
|
1
|
+
<% @column_span_id ||= element_cell_id(id: @record.id.to_s, action: 'update_column', name: @column.name) -%>
|
2
2
|
<% unless successful? -%>
|
3
3
|
<%= render 'update_messages' %>
|
4
4
|
<% @record.reload -%>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
ipe_update = @column.inplace_edit_update if successful? -%>
|
8
8
|
<% case ipe_update
|
9
9
|
when :row -%>
|
10
|
-
ActiveScaffold.update_row('<%= element_row_id(:
|
10
|
+
ActiveScaffold.update_row('<%= element_row_id(action: :list) %>', '<%= escape_javascript render('row', record: @record) %>');
|
11
11
|
<% when :table -%>
|
12
12
|
ActiveScaffold.replace_html('<%= active_scaffold_content_id %>', '<%= escape_javascript(render('list')) %>');
|
13
13
|
<% else
|
@@ -15,12 +15,12 @@
|
|
15
15
|
ActiveScaffold.update_inplace_edit('<%= @column_span_id %>','<%= escape_javascript(formatted_value) %>', <%= column_empty?(formatted_value).to_json %>);
|
16
16
|
<% if ipe_update == :columns && @column.update_columns && !@column.update_columns.empty?
|
17
17
|
@rendered = Set.new([@column.name]) -%>
|
18
|
-
<%= render :
|
18
|
+
<%= render partial: 'update_column', collection: @column.update_columns & active_scaffold_config.list.columns.visible_columns_names, locals: {row_id: element_row_id(action: :list, id: @record.id)} %>
|
19
19
|
<% end %>
|
20
20
|
<% end -%>
|
21
21
|
<% else -%>
|
22
22
|
ActiveScaffold.replace_html('<%= @column_span_id %>','<%= escape_javascript(get_column_value(@record, @column)) %>');
|
23
23
|
<% end -%>
|
24
24
|
<% if @column.calculation? -%>
|
25
|
-
ActiveScaffold.replace_html('<%= active_scaffold_calculations_id(:
|
25
|
+
ActiveScaffold.replace_html('<%= active_scaffold_calculations_id(column: @column) %>', '<%= escape_javascript(render_column_calculation(@column, id_condition: false)) %>');
|
26
26
|
<% end -%>
|
@@ -1 +1 @@
|
|
1
|
-
ActiveScaffold.update_row('<%=element_row_id(:
|
1
|
+
ActiveScaffold.update_row('<%=element_row_id(action: 'list', id: @record.id)%>','<%=escape_javascript(render('list_record', record: @record))%>');
|
@@ -2,9 +2,10 @@ module ActiveScaffold::Actions
|
|
2
2
|
module CommonSearch
|
3
3
|
def self.included(base)
|
4
4
|
return if base < InstanceMethods
|
5
|
+
|
5
6
|
base.send :include, InstanceMethods
|
6
7
|
base.before_action :search_authorized_filter, only: :show_search
|
7
|
-
base.before_action :store_search_params_into_session, :
|
8
|
+
base.before_action :store_search_params_into_session, only: %i[index show_search]
|
8
9
|
base.before_action :do_search, only: [:index]
|
9
10
|
base.helper_method :search_params
|
10
11
|
end
|
@@ -36,6 +37,7 @@ module ActiveScaffold::Actions
|
|
36
37
|
outer_joins = []
|
37
38
|
columns.each do |column|
|
38
39
|
next if column.search_joins.blank?
|
40
|
+
|
39
41
|
if column.includes.present? && list_columns.include?(column)
|
40
42
|
references << (column.search_joins & column.includes)
|
41
43
|
outer_joins << (column.search_joins - column.includes)
|
@@ -67,13 +69,13 @@ module ActiveScaffold::Actions
|
|
67
69
|
# The default security delegates to ActiveRecordPermissions.
|
68
70
|
# You may override the method to customize.
|
69
71
|
def search_authorized?
|
70
|
-
authorized_for?(:
|
72
|
+
authorized_for?(crud_type: :read)
|
71
73
|
end
|
72
74
|
|
73
75
|
def search_authorized_filter
|
74
76
|
action = active_scaffold_config.send(search_partial)
|
75
77
|
link = action.link || action.class.link
|
76
|
-
raise ActiveScaffold::ActionNotAllowed unless
|
78
|
+
raise ActiveScaffold::ActionNotAllowed unless action_link_authorized?(link)
|
77
79
|
end
|
78
80
|
end
|
79
81
|
end
|
@@ -4,11 +4,11 @@ module ActiveScaffold::Actions
|
|
4
4
|
base.class_eval do
|
5
5
|
before_action :set_vary_accept_header
|
6
6
|
before_action :check_input_device
|
7
|
-
before_action :register_constraints_with_action_columns, :
|
7
|
+
before_action :register_constraints_with_action_columns, unless: :nested?
|
8
8
|
after_action :clear_flashes
|
9
9
|
after_action :dl_cookie
|
10
10
|
around_action :clear_storage
|
11
|
-
rescue_from ActiveScaffold::RecordNotAllowed, ActiveScaffold::ActionNotAllowed, :
|
11
|
+
rescue_from ActiveScaffold::RecordNotAllowed, ActiveScaffold::ActionNotAllowed, with: :deny_access
|
12
12
|
end
|
13
13
|
base.helper_method :active_scaffold_config
|
14
14
|
base.helper_method :successful?
|
@@ -27,7 +27,12 @@ module ActiveScaffold::Actions
|
|
27
27
|
if request.get? || request.head?
|
28
28
|
render_field_for_inplace_editing
|
29
29
|
respond_to do |format|
|
30
|
-
format.js { render :
|
30
|
+
format.js { render action: 'render_field_inplace', layout: false }
|
31
|
+
end
|
32
|
+
elsif params[:tabbed_by]
|
33
|
+
add_tab
|
34
|
+
respond_to do |format|
|
35
|
+
format.js { render action: 'add_tab', layout: false }
|
31
36
|
end
|
32
37
|
else
|
33
38
|
render_field_for_update_columns
|
@@ -55,13 +60,17 @@ module ActiveScaffold::Actions
|
|
55
60
|
|
56
61
|
def render_field_for_inplace_editing
|
57
62
|
@column = active_scaffold_config.columns[params[:update_column]]
|
58
|
-
@record = find_if_allowed(params[:id], :
|
63
|
+
@record = find_if_allowed(params[:id], crud_type: :update, column: params[:update_column])
|
59
64
|
end
|
60
65
|
|
61
|
-
def
|
62
|
-
|
66
|
+
def add_tab
|
67
|
+
process_render_field_params
|
68
|
+
@column = @main_columns.find_by_name(params[:column])
|
69
|
+
@record = updated_record_with_form(@main_columns, {}, @scope)
|
70
|
+
end
|
71
|
+
|
72
|
+
def process_render_field_params
|
63
73
|
@source_id = params.delete(:source_id)
|
64
|
-
@columns = @column.update_columns || []
|
65
74
|
@scope = params.delete(:scope)
|
66
75
|
if @scope
|
67
76
|
@form_action = :subform
|
@@ -70,7 +79,14 @@ module ActiveScaffold::Actions
|
|
70
79
|
end
|
71
80
|
@form_action ||= params[:id] ? :update : :create
|
72
81
|
@main_columns = active_scaffold_config.send(@form_action).columns
|
82
|
+
end
|
83
|
+
|
84
|
+
def render_field_for_update_columns
|
85
|
+
return if (@column = active_scaffold_config.columns[params.delete(:column)]).nil?
|
86
|
+
|
87
|
+
@columns = @column.update_columns || []
|
73
88
|
@columns << @column.name if @column.options[:refresh_link] && @columns.exclude?(@column.name)
|
89
|
+
process_render_field_params
|
74
90
|
|
75
91
|
@record =
|
76
92
|
if @column.send_form_on_update_column
|
@@ -98,14 +114,14 @@ module ActiveScaffold::Actions
|
|
98
114
|
record = new_model
|
99
115
|
copy_attributes(saved_record, record) if saved_record
|
100
116
|
apply_constraints_to_record(record) unless scope
|
101
|
-
create_association_with_parent record, true if nested?
|
102
|
-
update_record_from_params(record, columns, attributes || {}, true
|
117
|
+
create_association_with_parent record, check_match: true if nested?
|
118
|
+
update_record_from_params(record, columns, attributes || {}, true)
|
103
119
|
end
|
104
120
|
|
105
121
|
def updated_record_with_column(column, value, scope)
|
106
122
|
record = params[:id] ? copy_attributes(find_if_allowed(params[:id], :read)) : new_model
|
107
123
|
apply_constraints_to_record(record) unless scope || params[:id]
|
108
|
-
create_association_with_parent record, true if nested?
|
124
|
+
create_association_with_parent record, check_match: true if nested?
|
109
125
|
if @form_action == :field_search && value.is_a?(Array) && column.association&.singular?
|
110
126
|
# don't assign value if it's an array and column is singular association,
|
111
127
|
# e.g. value came from multi-select on search form
|
@@ -119,7 +135,7 @@ module ActiveScaffold::Actions
|
|
119
135
|
end
|
120
136
|
|
121
137
|
def subform_child_association
|
122
|
-
params[:child_association].presence || @scope
|
138
|
+
params[:child_association].presence || (@scope.split(']').first.sub(/^\[/, '').presence if @scope)
|
123
139
|
end
|
124
140
|
|
125
141
|
def parent_controller_name
|
@@ -140,7 +156,7 @@ module ActiveScaffold::Actions
|
|
140
156
|
if association.collection?
|
141
157
|
record.send(association.name) << parent
|
142
158
|
else
|
143
|
-
record.send("#{association.name}=", parent)
|
159
|
+
record.send(:"#{association.name}=", parent)
|
144
160
|
end
|
145
161
|
|
146
162
|
if params[:nested] # form in nested scaffold, set nested parent_record to parent
|
@@ -160,6 +176,7 @@ module ActiveScaffold::Actions
|
|
160
176
|
|
161
177
|
def parent_sti_controller
|
162
178
|
return unless params[:parent_sti]
|
179
|
+
|
163
180
|
unless defined? @parent_sti_controller
|
164
181
|
controller = look_for_parent_sti_controller
|
165
182
|
@parent_sti_controller = controller.controller_path == params[:parent_sti] ? controller : false
|
@@ -225,10 +242,10 @@ module ActiveScaffold::Actions
|
|
225
242
|
render(
|
226
243
|
options.reverse_merge(
|
227
244
|
format => response_object,
|
228
|
-
:
|
229
|
-
:
|
230
|
-
:
|
231
|
-
:
|
245
|
+
only: columns_names + [active_scaffold_config.model.primary_key],
|
246
|
+
include: association_columns(columns_names),
|
247
|
+
methods: virtual_columns(columns_names),
|
248
|
+
status: response_status
|
232
249
|
)
|
233
250
|
)
|
234
251
|
end
|
@@ -264,16 +281,18 @@ module ActiveScaffold::Actions
|
|
264
281
|
def conditions_from_params
|
265
282
|
@conditions_from_params ||= begin
|
266
283
|
conditions = [{}]
|
284
|
+
supporting_range = %i[date datetime integer decimal float bigint]
|
267
285
|
params.except(:controller, :action, :page, :sort, :sort_direction, :format, :id).each do |key, value|
|
268
286
|
distinct = true if key.match?(/!$/)
|
269
287
|
column = active_scaffold_config._columns_hash[key.to_s[0..(distinct ? -2 : -1)]]
|
270
288
|
next unless column
|
289
|
+
|
271
290
|
key = column.name.to_sym
|
272
291
|
not_string = %i[string text].exclude?(column.type)
|
273
292
|
next if active_scaffold_constraints[key]
|
274
293
|
next if nested? && nested.param_name == key
|
275
294
|
|
276
|
-
range =
|
295
|
+
range = supporting_range.include?(column.type) && value.is_a?(String) && value.scan('..').size == 1
|
277
296
|
value = value.split('..') if range
|
278
297
|
value =
|
279
298
|
if value.is_a?(Array)
|
@@ -317,6 +336,7 @@ module ActiveScaffold::Actions
|
|
317
336
|
def sti_nested_build_options(klass)
|
318
337
|
config = active_scaffold_config_for(klass)
|
319
338
|
return unless config
|
339
|
+
|
320
340
|
column = klass.inheritance_column
|
321
341
|
return unless column && config._columns_hash[column]
|
322
342
|
|
@@ -351,6 +371,7 @@ module ActiveScaffold::Actions
|
|
351
371
|
def check_input_device
|
352
372
|
return unless session[:input_device_type].nil?
|
353
373
|
return if request.env['HTTP_USER_AGENT'].nil?
|
374
|
+
|
354
375
|
if request.env['HTTP_USER_AGENT'].match?(/(iPhone|iPod|iPad)/i)
|
355
376
|
session[:input_device_type] = 'TOUCH'
|
356
377
|
session[:hover_supported] = false
|
@@ -387,7 +408,7 @@ module ActiveScaffold::Actions
|
|
387
408
|
# call this method in your action_link action to simplify processing of actions
|
388
409
|
# eg for member action_link :fire
|
389
410
|
# process_action_link_action do |record|
|
390
|
-
# record.
|
411
|
+
# record.update(fired: true)
|
391
412
|
# self.successful = true
|
392
413
|
# flash[:info] = 'Player fired'
|
393
414
|
# end
|
@@ -399,27 +420,30 @@ module ActiveScaffold::Actions
|
|
399
420
|
else
|
400
421
|
@action_link = active_scaffold_config.action_links[action_name]
|
401
422
|
if params[:id]
|
402
|
-
crud_type_or_security_options ||= {:
|
423
|
+
crud_type_or_security_options ||= {crud_type: request.delete? ? :delete : :update, action: action_name}
|
403
424
|
get_row(crud_type_or_security_options)
|
404
425
|
if @record.nil?
|
405
426
|
self.successful = false
|
406
|
-
flash[:error] = as_(:no_authorization_for_action, :
|
427
|
+
flash[:error] = as_(:no_authorization_for_action, action: @action_link&.label(nil) || action_name)
|
407
428
|
else
|
408
429
|
yield @record
|
409
430
|
end
|
410
431
|
else
|
411
|
-
|
412
|
-
|
413
|
-
end
|
432
|
+
raise ActiveScaffold::ActionNotAllowed unless action_link_authorized? @action_link
|
433
|
+
|
414
434
|
yield
|
415
435
|
end
|
416
436
|
respond_to_action(render_action)
|
417
437
|
end
|
418
438
|
end
|
419
439
|
|
440
|
+
def action_link_authorized?(link)
|
441
|
+
link&.security_method.nil? || !respond_to?(link.security_method, true) || Array(send(link.security_method))[0]
|
442
|
+
end
|
443
|
+
|
420
444
|
def action_confirmation_respond_to_html(confirm_action = action_name.to_sym)
|
421
445
|
link = active_scaffold_config.action_links[confirm_action]
|
422
|
-
render :
|
446
|
+
render action: 'action_confirmation', locals: {record: @record, link: link}
|
423
447
|
end
|
424
448
|
|
425
449
|
def action_update_respond_on_iframe
|
@@ -427,11 +451,11 @@ module ActiveScaffold::Actions
|
|
427
451
|
end
|
428
452
|
|
429
453
|
def action_update_respond_to_html
|
430
|
-
redirect_to :
|
454
|
+
redirect_to action: 'index'
|
431
455
|
end
|
432
456
|
|
433
457
|
def action_update_respond_to_js
|
434
|
-
render :
|
458
|
+
render action: 'on_action_update', formats: [:js], layout: false
|
435
459
|
end
|
436
460
|
|
437
461
|
def action_update_respond_to_xml
|
@@ -450,10 +474,10 @@ module ActiveScaffold::Actions
|
|
450
474
|
def view_stale?
|
451
475
|
objects = objects_for_etag
|
452
476
|
if objects.is_a?(Array)
|
453
|
-
args = {:
|
477
|
+
args = {etag: objects.to_a}
|
454
478
|
args[:last_modified] = @last_modified if @last_modified
|
455
479
|
elsif objects.is_a?(Hash)
|
456
|
-
args = {:
|
480
|
+
args = {last_modified: @last_modified}.merge(objects)
|
457
481
|
else
|
458
482
|
args = objects
|
459
483
|
end
|
@@ -478,6 +502,7 @@ module ActiveScaffold::Actions
|
|
478
502
|
|
479
503
|
def respond_to_action(action)
|
480
504
|
return unless !conditional_get_support? || view_stale?
|
505
|
+
|
481
506
|
respond_to do |type|
|
482
507
|
action_formats.each do |format|
|
483
508
|
type.send(format) do
|
@@ -499,8 +524,8 @@ module ActiveScaffold::Actions
|
|
499
524
|
|
500
525
|
def action_formats
|
501
526
|
@action_formats ||=
|
502
|
-
if respond_to? "#{action_name}_formats", true
|
503
|
-
send("#{action_name}_formats")
|
527
|
+
if respond_to? :"#{action_name}_formats", true
|
528
|
+
send(:"#{action_name}_formats")
|
504
529
|
else
|
505
530
|
(default_formats + active_scaffold_config.formats).uniq
|
506
531
|
end
|
@@ -515,8 +540,8 @@ module ActiveScaffold::Actions
|
|
515
540
|
next unless cfg&.add_sti_create_links?
|
516
541
|
return controller if cfg.sti_children.map(&:to_s).include? self.class.active_scaffold_config.model.name.underscore
|
517
542
|
end
|
518
|
-
rescue ActiveScaffold::ControllerNotFound =>
|
519
|
-
logger.warn "#{
|
543
|
+
rescue ActiveScaffold::ControllerNotFound => e
|
544
|
+
logger.warn "#{e.message} looking for parent_sti of #{self.class.active_scaffold_config.model.name}"
|
520
545
|
nil
|
521
546
|
end
|
522
547
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ActiveScaffold::Actions
|
2
2
|
module Create
|
3
3
|
def self.included(base)
|
4
|
-
base.before_action :create_authorized_filter, :
|
4
|
+
base.before_action :create_authorized_filter, only: %i[new create]
|
5
5
|
end
|
6
6
|
|
7
7
|
def new
|
@@ -17,42 +17,42 @@ module ActiveScaffold::Actions
|
|
17
17
|
protected
|
18
18
|
|
19
19
|
def response_location
|
20
|
-
url_for(params_for(:
|
20
|
+
url_for(params_for(action: 'show', id: @record.to_param)) if successful?
|
21
21
|
end
|
22
22
|
|
23
23
|
def new_respond_to_html
|
24
24
|
if successful?
|
25
|
-
render(:
|
25
|
+
render(action: 'create')
|
26
26
|
else
|
27
27
|
return_to_main
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
def new_respond_to_js
|
32
|
-
render(:
|
32
|
+
render(partial: 'create_form')
|
33
33
|
end
|
34
34
|
|
35
35
|
def create_respond_on_iframe
|
36
36
|
do_refresh_list if successful? && active_scaffold_config.create.refresh_list && !render_parent?
|
37
37
|
responds_to_parent do
|
38
|
-
render :
|
38
|
+
render action: 'on_create', formats: [:js], layout: false
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
42
|
def create_respond_to_html
|
43
43
|
if successful?
|
44
|
-
flash[:info] = as_(:created_model, :
|
44
|
+
flash[:info] = as_(:created_model, model: ERB::Util.h(@record.to_label))
|
45
45
|
if (action = active_scaffold_config.create.action_after_create)
|
46
|
-
redirect_to params_for(:
|
46
|
+
redirect_to params_for(action: action, id: @record.to_param)
|
47
47
|
elsif params[:dont_close]
|
48
|
-
redirect_to params_for(:
|
48
|
+
redirect_to params_for(action: 'new')
|
49
49
|
else
|
50
50
|
return_to_main
|
51
51
|
end
|
52
52
|
elsif active_scaffold_config.actions.include?(:list) && active_scaffold_config.list.always_show_create
|
53
53
|
list
|
54
54
|
else
|
55
|
-
render(:
|
55
|
+
render(action: 'create')
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -64,7 +64,7 @@ module ActiveScaffold::Actions
|
|
64
64
|
do_new
|
65
65
|
end
|
66
66
|
end
|
67
|
-
render :
|
67
|
+
render action: 'on_create'
|
68
68
|
end
|
69
69
|
|
70
70
|
def create_respond_to_xml
|
@@ -95,7 +95,7 @@ module ActiveScaffold::Actions
|
|
95
95
|
active_scaffold_config.model.transaction do
|
96
96
|
@record = new_model
|
97
97
|
# before assign params, to set foreign_type of constraints in polymorphic association with multiple id
|
98
|
-
apply_constraints_to_record(@record, :
|
98
|
+
apply_constraints_to_record(@record, allow_autosave: true)
|
99
99
|
@record = update_record_from_params(@record, active_scaffold_config.create.columns, attributes)
|
100
100
|
create_association_with_parent(@record) if nested?
|
101
101
|
before_create_save(@record)
|
@@ -103,14 +103,15 @@ module ActiveScaffold::Actions
|
|
103
103
|
self.successful = [@record.keeping_errors { @record.valid? }, @record.associated_valid?].all? # this syntax avoids a short-circuit
|
104
104
|
create_save(@record) unless options[:skip_save]
|
105
105
|
end
|
106
|
-
rescue ActiveRecord::ActiveRecordError =>
|
107
|
-
flash[:error] =
|
106
|
+
rescue ActiveRecord::ActiveRecordError => e
|
107
|
+
flash[:error] = e.message
|
108
108
|
self.successful = false
|
109
109
|
@record ||= new_model # ensure @record exists or display form will fail
|
110
110
|
end
|
111
111
|
|
112
112
|
def create_save(record)
|
113
113
|
return unless successful?
|
114
|
+
|
114
115
|
record.save! && record.save_associated!
|
115
116
|
after_create_save(record)
|
116
117
|
end
|
@@ -129,17 +130,18 @@ module ActiveScaffold::Actions
|
|
129
130
|
end
|
130
131
|
|
131
132
|
def create_authorized?
|
132
|
-
if nested?
|
133
|
-
return false
|
133
|
+
if nested? && (nested.readonly? || nested.readonly_through_association?(active_scaffold_config.create.columns))
|
134
|
+
return false
|
134
135
|
end
|
135
|
-
|
136
|
+
|
137
|
+
authorized_for?(crud_type: :create)
|
136
138
|
end
|
137
139
|
|
138
140
|
private
|
139
141
|
|
140
142
|
def create_authorized_filter
|
141
143
|
link = active_scaffold_config.create.link || self.class.active_scaffold_config.create.class.link
|
142
|
-
raise ActiveScaffold::ActionNotAllowed unless
|
144
|
+
raise ActiveScaffold::ActionNotAllowed unless action_link_authorized?(link)
|
143
145
|
end
|
144
146
|
|
145
147
|
def new_formats
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ActiveScaffold::Actions
|
2
2
|
module Delete
|
3
3
|
def self.included(base)
|
4
|
-
base.before_action :delete_authorized_filter, :
|
4
|
+
base.before_action :delete_authorized_filter, only: [:destroy]
|
5
5
|
end
|
6
6
|
|
7
7
|
def destroy
|
@@ -14,21 +14,21 @@ module ActiveScaffold::Actions
|
|
14
14
|
protected
|
15
15
|
|
16
16
|
def destroy_respond_to_html
|
17
|
-
flash[:info] = as_(:deleted_model, :
|
17
|
+
flash[:info] = as_(:deleted_model, model: ERB::Util.h(@record.to_label)) if successful?
|
18
18
|
return_to_main
|
19
19
|
end
|
20
20
|
|
21
21
|
def destroy_respond_to_js
|
22
22
|
do_refresh_list if successful? && active_scaffold_config.delete.refresh_list && !render_parent?
|
23
|
-
render(:
|
23
|
+
render(action: 'destroy')
|
24
24
|
end
|
25
25
|
|
26
26
|
def destroy_respond_to_xml
|
27
|
-
render :
|
27
|
+
render xml: successful? ? '' : response_object, only: active_scaffold_config.list.columns.visible_columns_names, status: response_status
|
28
28
|
end
|
29
29
|
|
30
30
|
def destroy_respond_to_json
|
31
|
-
render :
|
31
|
+
render json: successful? ? '' : response_object, only: active_scaffold_config.list.columns.visible_columns_names, status: response_status
|
32
32
|
end
|
33
33
|
|
34
34
|
def destroy_find_record
|
@@ -41,13 +41,11 @@ module ActiveScaffold::Actions
|
|
41
41
|
record ||= destroy_find_record
|
42
42
|
begin
|
43
43
|
self.successful = record.destroy
|
44
|
-
rescue StandardError =>
|
45
|
-
flash[:warning] = as_(:cant_destroy_record, :
|
44
|
+
rescue StandardError => e
|
45
|
+
flash[:warning] = as_(:cant_destroy_record, record: ERB::Util.h(record.to_label))
|
46
46
|
self.successful = false
|
47
47
|
logger.warn do
|
48
|
-
"\n\n#{
|
49
|
-
Rails.backtrace_cleaner.clean(exception.backtrace).join("\n ") +
|
50
|
-
"\n\n"
|
48
|
+
"\n\n#{e.class} (#{e.message}):\n #{Rails.backtrace_cleaner.clean(e.backtrace).join("\n ")}\n\n"
|
51
49
|
end
|
52
50
|
end
|
53
51
|
end
|
@@ -59,14 +57,14 @@ module ActiveScaffold::Actions
|
|
59
57
|
end
|
60
58
|
|
61
59
|
def delete_ignore?(record = nil)
|
62
|
-
(nested? && nested.readonly?) || !authorized_for?(:
|
60
|
+
(nested? && nested.readonly?) || !authorized_for?(crud_type: :delete)
|
63
61
|
end
|
64
62
|
|
65
63
|
private
|
66
64
|
|
67
65
|
def delete_authorized_filter
|
68
66
|
link = active_scaffold_config.delete.link || self.class.active_scaffold_config.delete.class.link
|
69
|
-
raise ActiveScaffold::ActionNotAllowed unless
|
67
|
+
raise ActiveScaffold::ActionNotAllowed unless action_link_authorized?(link)
|
70
68
|
end
|
71
69
|
|
72
70
|
def destroy_formats
|
@@ -29,6 +29,7 @@ module ActiveScaffold::Actions
|
|
29
29
|
|
30
30
|
def init_field_search_params(default_params)
|
31
31
|
return unless (params[:search].is_a?(String) || search_params.nil?) && params[:search].blank?
|
32
|
+
|
32
33
|
params[:search] = default_params.is_a?(Proc) ? instance_eval(&default_params) : default_params
|
33
34
|
end
|
34
35
|
|
@@ -63,10 +64,18 @@ module ActiveScaffold::Actions
|
|
63
64
|
end
|
64
65
|
|
65
66
|
def grouped_search_finder_options
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
select_query = grouped_search_select
|
68
|
+
if search_group_function
|
69
|
+
group_sql = calculation_for_group_by(search_group_column&.field || search_group_name, search_group_function)
|
70
|
+
group_by = group_sql.to_sql
|
71
|
+
select_query += [group_sql.as(search_group_column.name.to_s)]
|
72
|
+
order = grouped_sorting(group_by)
|
73
|
+
else
|
74
|
+
group_by = quoted_select_columns(search_group_column&.select_columns || [search_group_name])
|
75
|
+
select_query += group_by
|
76
|
+
order = grouped_sorting
|
77
|
+
end
|
78
|
+
{group: group_by, select: select_query, reorder: order}
|
70
79
|
end
|
71
80
|
|
72
81
|
def grouped_search_select
|
@@ -75,16 +84,20 @@ module ActiveScaffold::Actions
|
|
75
84
|
end
|
76
85
|
end
|
77
86
|
|
78
|
-
def grouped_sorting(group_sql)
|
87
|
+
def grouped_sorting(group_sql = nil)
|
79
88
|
return unless search_group_column && active_scaffold_config.list.user.sorting
|
80
|
-
|
81
|
-
|
82
|
-
sorting = active_scaffold_config.list.user.sorting.clause(grouped_columns)
|
89
|
+
|
90
|
+
sorting = active_scaffold_config.list.user.sorting.clause(grouped_columns_sorting(group_sql))
|
83
91
|
active_scaffold_config.active_record? ? sorting&.map(&Arel.method(:sql)) : sorting
|
84
92
|
end
|
85
93
|
|
94
|
+
def grouped_columns_sorting(group_sql)
|
95
|
+
group_sql ||= search_group_column.sort[:sql] if search_group_column.sortable?
|
96
|
+
grouped_columns_calculations.merge(search_group_column.name => group_sql)
|
97
|
+
end
|
98
|
+
|
86
99
|
def grouped_columns_calculations
|
87
|
-
@grouped_columns_calculations ||= list_columns[1
|
100
|
+
@grouped_columns_calculations ||= list_columns[1..].each_with_object({}) do |c, h|
|
88
101
|
h[c.name] = calculation_for_group_search(c)
|
89
102
|
end
|
90
103
|
end
|
@@ -136,9 +149,10 @@ module ActiveScaffold::Actions
|
|
136
149
|
|
137
150
|
def grouped_columns
|
138
151
|
return if active_scaffold_config.field_search.grouped_columns.blank?
|
139
|
-
|
152
|
+
|
153
|
+
active_scaffold_config.field_search.grouped_columns.filter_map do |col|
|
140
154
|
active_scaffold_config.columns[col]
|
141
|
-
end
|
155
|
+
end
|
142
156
|
end
|
143
157
|
|
144
158
|
def field_search_params
|
@@ -146,11 +160,11 @@ module ActiveScaffold::Actions
|
|
146
160
|
end
|
147
161
|
|
148
162
|
def field_search_respond_to_html
|
149
|
-
render(:
|
163
|
+
render(action: 'field_search')
|
150
164
|
end
|
151
165
|
|
152
166
|
def field_search_respond_to_js
|
153
|
-
render(:
|
167
|
+
render(partial: 'field_search')
|
154
168
|
end
|
155
169
|
|
156
170
|
def do_search
|
@@ -167,6 +181,7 @@ module ActiveScaffold::Actions
|
|
167
181
|
columns = active_scaffold_config.field_search.columns
|
168
182
|
search_params.each do |key, value|
|
169
183
|
next unless columns.include? key
|
184
|
+
|
170
185
|
column = active_scaffold_config.columns[key]
|
171
186
|
search_condition = self.class.condition_for_column(column, value, text_search, session)
|
172
187
|
next if search_condition.blank?
|