active_scaffold-sequel 0.3.0
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/CHANGELOG +179 -0
- data/MIT-LICENSE +20 -0
- data/README +36 -0
- data/app/assets/images/active_scaffold/add.gif +0 -0
- data/app/assets/images/active_scaffold/arrow_down.gif +0 -0
- data/app/assets/images/active_scaffold/arrow_up.gif +0 -0
- data/app/assets/images/active_scaffold/close.gif +0 -0
- data/app/assets/images/active_scaffold/close_touch.png +0 -0
- data/app/assets/images/active_scaffold/config.png +0 -0
- data/app/assets/images/active_scaffold/cross.png +0 -0
- data/app/assets/images/active_scaffold/gears.png +0 -0
- data/app/assets/images/active_scaffold/indicator-small.gif +0 -0
- data/app/assets/images/active_scaffold/indicator.gif +0 -0
- data/app/assets/images/active_scaffold/magnifier.png +0 -0
- data/app/assets/javascripts/active_scaffold.js.erb +19 -0
- data/app/assets/javascripts/jquery/active_scaffold.js +1057 -0
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +24 -0
- data/app/assets/javascripts/jquery/draggable_lists.js +27 -0
- data/app/assets/javascripts/jquery/jquery.editinplace.js +743 -0
- data/app/assets/javascripts/jquery/tiny_mce_bridge.js +7 -0
- data/app/assets/javascripts/prototype/active_scaffold.js +1052 -0
- data/app/assets/javascripts/prototype/dhtml_history.js +870 -0
- data/app/assets/javascripts/prototype/form_enhancements.js +117 -0
- data/app/assets/javascripts/prototype/rico_corner.js +370 -0
- data/app/assets/javascripts/prototype/tiny_mce_bridge.js +7 -0
- data/app/assets/stylesheets/active_scaffold-ie.css +35 -0
- data/app/assets/stylesheets/active_scaffold.css.scss +14 -0
- data/app/assets/stylesheets/active_scaffold_colors.css.scss +395 -0
- data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -0
- data/app/assets/stylesheets/active_scaffold_images.css.scss +43 -0
- data/app/assets/stylesheets/active_scaffold_layout.css +912 -0
- data/app/assets/stylesheets/blue-theme.css +74 -0
- data/config/locales/de.yml +114 -0
- data/config/locales/en.yml +118 -0
- data/config/locales/es.yml +120 -0
- data/config/locales/fr.yml +121 -0
- data/config/locales/hu.yml +74 -0
- data/config/locales/ja.yml +73 -0
- data/config/locales/ru.yml +123 -0
- data/frontends/default/views/_action_group.html.erb +24 -0
- data/frontends/default/views/_add_existing_form.html.erb +30 -0
- data/frontends/default/views/_base_form.html.erb +51 -0
- data/frontends/default/views/_create_form.html.erb +8 -0
- data/frontends/default/views/_create_form_on_list.html.erb +6 -0
- data/frontends/default/views/_field_search.html.erb +32 -0
- data/frontends/default/views/_form.html.erb +24 -0
- data/frontends/default/views/_form_association.html.erb +15 -0
- data/frontends/default/views/_form_association_footer.html.erb +47 -0
- data/frontends/default/views/_form_attribute.html.erb +20 -0
- data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
- data/frontends/default/views/_form_messages.html.erb +5 -0
- data/frontends/default/views/_horizontal_subform.html.erb +28 -0
- data/frontends/default/views/_horizontal_subform_footer.html.erb +0 -0
- data/frontends/default/views/_horizontal_subform_header.html.erb +11 -0
- data/frontends/default/views/_horizontal_subform_record.html.erb +38 -0
- data/frontends/default/views/_human_conditions.html.erb +1 -0
- data/frontends/default/views/_list.html.erb +18 -0
- data/frontends/default/views/_list_actions.html.erb +15 -0
- data/frontends/default/views/_list_calculations.html.erb +16 -0
- data/frontends/default/views/_list_column_headings.html.erb +12 -0
- data/frontends/default/views/_list_header.html.erb +10 -0
- data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
- data/frontends/default/views/_list_messages.html.erb +30 -0
- data/frontends/default/views/_list_pagination.html.erb +11 -0
- data/frontends/default/views/_list_pagination_links.html.erb +9 -0
- data/frontends/default/views/_list_record.html.erb +14 -0
- data/frontends/default/views/_list_record_columns.html.erb +8 -0
- data/frontends/default/views/_list_with_header.html.erb +36 -0
- data/frontends/default/views/_messages.html.erb +10 -0
- data/frontends/default/views/_render_field.js.erb +20 -0
- data/frontends/default/views/_row.html.erb +6 -0
- data/frontends/default/views/_search.html.erb +34 -0
- data/frontends/default/views/_search_attribute.html.erb +10 -0
- data/frontends/default/views/_show.html.erb +8 -0
- data/frontends/default/views/_show_columns.html.erb +15 -0
- data/frontends/default/views/_update_actions.html.erb +9 -0
- data/frontends/default/views/_update_form.html.erb +6 -0
- data/frontends/default/views/_vertical_subform.html.erb +12 -0
- data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
- data/frontends/default/views/action_confirmation.html.erb +13 -0
- data/frontends/default/views/add_existing.js.erb +18 -0
- data/frontends/default/views/add_existing_form.html.erb +5 -0
- data/frontends/default/views/create.html.erb +5 -0
- data/frontends/default/views/delete.html.erb +13 -0
- data/frontends/default/views/destroy.js.erb +24 -0
- data/frontends/default/views/edit_associated.js.erb +12 -0
- data/frontends/default/views/field_search.html.erb +5 -0
- data/frontends/default/views/form_messages.js.erb +1 -0
- data/frontends/default/views/list.html.erb +1 -0
- data/frontends/default/views/on_action_update.js.erb +13 -0
- data/frontends/default/views/on_create.js.erb +47 -0
- data/frontends/default/views/on_mark_all.js.erb +12 -0
- data/frontends/default/views/on_update.js.erb +31 -0
- data/frontends/default/views/refresh_list.js.erb +1 -0
- data/frontends/default/views/render_field.js.erb +1 -0
- data/frontends/default/views/search.html.erb +5 -0
- data/frontends/default/views/show.html.erb +5 -0
- data/frontends/default/views/update.html.erb +8 -0
- data/frontends/default/views/update_column.js.erb +16 -0
- data/frontends/default/views/update_row.js.erb +1 -0
- data/lib/active_scaffold/actions/common_search.rb +25 -0
- data/lib/active_scaffold/actions/core.rb +197 -0
- data/lib/active_scaffold/actions/create.rb +148 -0
- data/lib/active_scaffold/actions/delete.rb +76 -0
- data/lib/active_scaffold/actions/field_search.rb +82 -0
- data/lib/active_scaffold/actions/list.rb +196 -0
- data/lib/active_scaffold/actions/mark.rb +75 -0
- data/lib/active_scaffold/actions/nested.rb +245 -0
- data/lib/active_scaffold/actions/search.rb +48 -0
- data/lib/active_scaffold/actions/show.rb +61 -0
- data/lib/active_scaffold/actions/subform.rb +23 -0
- data/lib/active_scaffold/actions/update.rb +150 -0
- data/lib/active_scaffold/active_record_permissions.rb +136 -0
- data/lib/active_scaffold/attribute_params.rb +208 -0
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +39 -0
- data/lib/active_scaffold/bridges/ancestry.rb +5 -0
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +67 -0
- data/lib/active_scaffold/bridges/calendar_date_select.rb +24 -0
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +107 -0
- data/lib/active_scaffold/bridges/cancan.rb +15 -0
- data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +31 -0
- data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge_helpers.rb +10 -0
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +45 -0
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +17 -0
- data/lib/active_scaffold/bridges/carrierwave.rb +12 -0
- data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +358 -0
- data/lib/active_scaffold/bridges/country_helper.rb +9 -0
- data/lib/active_scaffold/bridges/date_picker/ext.rb +45 -0
- data/lib/active_scaffold/bridges/date_picker/helper.rb +180 -0
- data/lib/active_scaffold/bridges/date_picker.rb +23 -0
- data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +34 -0
- data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge_helpers.rb +10 -0
- data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +27 -0
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +16 -0
- data/lib/active_scaffold/bridges/dragonfly.rb +9 -0
- data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +48 -0
- data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +57 -0
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +34 -0
- data/lib/active_scaffold/bridges/file_column/list_ui.rb +26 -0
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
- data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
- data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
- data/lib/active_scaffold/bridges/file_column.rb +11 -0
- data/lib/active_scaffold/bridges/paperclip/form_ui.rb +27 -0
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +16 -0
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +36 -0
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +24 -0
- data/lib/active_scaffold/bridges/paperclip.rb +12 -0
- data/lib/active_scaffold/bridges/record_select/helpers.rb +86 -0
- data/lib/active_scaffold/bridges/record_select.rb +11 -0
- data/lib/active_scaffold/bridges/semantic_attributes/column.rb +20 -0
- data/lib/active_scaffold/bridges/semantic_attributes.rb +5 -0
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +209 -0
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +46 -0
- data/lib/active_scaffold/bridges/tiny_mce.rb +17 -0
- data/lib/active_scaffold/bridges.rb +61 -0
- data/lib/active_scaffold/config/base.rb +71 -0
- data/lib/active_scaffold/config/core.rb +219 -0
- data/lib/active_scaffold/config/create.rb +44 -0
- data/lib/active_scaffold/config/delete.rb +33 -0
- data/lib/active_scaffold/config/field_search.rb +76 -0
- data/lib/active_scaffold/config/form.rb +48 -0
- data/lib/active_scaffold/config/list.rb +196 -0
- data/lib/active_scaffold/config/mark.rb +35 -0
- data/lib/active_scaffold/config/nested.rb +42 -0
- data/lib/active_scaffold/config/search.rb +73 -0
- data/lib/active_scaffold/config/show.rb +32 -0
- data/lib/active_scaffold/config/subform.rb +35 -0
- data/lib/active_scaffold/config/update.rb +41 -0
- data/lib/active_scaffold/configurable.rb +29 -0
- data/lib/active_scaffold/constraints.rb +170 -0
- data/lib/active_scaffold/data_structures/action_columns.rb +140 -0
- data/lib/active_scaffold/data_structures/action_link.rb +179 -0
- data/lib/active_scaffold/data_structures/action_links.rb +185 -0
- data/lib/active_scaffold/data_structures/actions.rb +45 -0
- data/lib/active_scaffold/data_structures/bridge.rb +22 -0
- data/lib/active_scaffold/data_structures/column.rb +389 -0
- data/lib/active_scaffold/data_structures/columns.rb +75 -0
- data/lib/active_scaffold/data_structures/error_message.rb +24 -0
- data/lib/active_scaffold/data_structures/nested_info.rb +130 -0
- data/lib/active_scaffold/data_structures/set.rb +57 -0
- data/lib/active_scaffold/data_structures/sorting.rb +172 -0
- data/lib/active_scaffold/engine.rb +4 -0
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +22 -0
- data/lib/active_scaffold/extensions/action_view_rendering.rb +115 -0
- data/lib/active_scaffold/extensions/active_record_offset.rb +12 -0
- data/lib/active_scaffold/extensions/array.rb +7 -0
- data/lib/active_scaffold/extensions/cache_association.rb +16 -0
- data/lib/active_scaffold/extensions/localize.rb +10 -0
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +12 -0
- data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +7 -0
- data/lib/active_scaffold/extensions/paginator_extensions.rb +26 -0
- data/lib/active_scaffold/extensions/routing_mapper.rb +48 -0
- data/lib/active_scaffold/extensions/to_label.rb +8 -0
- data/lib/active_scaffold/extensions/unsaved_associated.rb +60 -0
- data/lib/active_scaffold/extensions/unsaved_record.rb +20 -0
- data/lib/active_scaffold/extensions/usa_state.rb +46 -0
- data/lib/active_scaffold/finder.rb +372 -0
- data/lib/active_scaffold/helpers/association_helpers.rb +48 -0
- data/lib/active_scaffold/helpers/controller_helpers.rb +88 -0
- data/lib/active_scaffold/helpers/form_column_helpers.rb +321 -0
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +62 -0
- data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
- data/lib/active_scaffold/helpers/list_column_helpers.rb +340 -0
- data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
- data/lib/active_scaffold/helpers/search_column_helpers.rb +267 -0
- data/lib/active_scaffold/helpers/show_column_helpers.rb +50 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +342 -0
- data/lib/active_scaffold/marked_model.rb +38 -0
- data/lib/active_scaffold/paginator.rb +136 -0
- data/lib/active_scaffold/responds_to_parent.rb +70 -0
- data/lib/active_scaffold/version.rb +9 -0
- data/lib/active_scaffold.rb +368 -0
- data/lib/active_scaffold_env.rb +11 -0
- data/lib/generators/active_scaffold/USAGE +29 -0
- data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
- data/lib/generators/active_scaffold_controller/USAGE +19 -0
- data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +29 -0
- data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
- data/lib/generators/active_scaffold_controller/templates/helper.rb +2 -0
- data/public/blank.html +33 -0
- data/shoulda_macros/macros.rb +136 -0
- data/test/bridges/active_scaffold_dependent_protect_test.rb +34 -0
- data/test/bridges/bridge_test.rb +90 -0
- data/test/bridges/company.rb +81 -0
- data/test/bridges/paperclip_test.rb +68 -0
- data/test/bridges/tiny_mce_test.rb +27 -0
- data/test/bridges/unobtrusive_date_picker_test.rb +49 -0
- data/test/bridges/validation_reflection_test.rb +57 -0
- data/test/config/base_test.rb +15 -0
- data/test/config/core_test.rb +58 -0
- data/test/config/create_test.rb +58 -0
- data/test/config/delete_test.rb +33 -0
- data/test/config/field_search_test.rb +47 -0
- data/test/config/list_test.rb +129 -0
- data/test/config/nested_test.rb +62 -0
- data/test/config/search_test.rb +60 -0
- data/test/config/show_test.rb +43 -0
- data/test/config/subform_test.rb +17 -0
- data/test/config/update_test.rb +40 -0
- data/test/const_mocker.rb +36 -0
- data/test/data_structures/action_columns_test.rb +113 -0
- data/test/data_structures/action_link_test.rb +78 -0
- data/test/data_structures/action_links_test.rb +78 -0
- data/test/data_structures/actions_test.rb +25 -0
- data/test/data_structures/association_column_test.rb +42 -0
- data/test/data_structures/column_test.rb +185 -0
- data/test/data_structures/columns_test.rb +69 -0
- data/test/data_structures/error_message_test.rb +28 -0
- data/test/data_structures/set_test.rb +86 -0
- data/test/data_structures/sorting_test.rb +126 -0
- data/test/data_structures/standard_column_test.rb +24 -0
- data/test/data_structures/virtual_column_test.rb +23 -0
- data/test/extensions/active_record_test.rb +45 -0
- data/test/extensions/array_test.rb +12 -0
- data/test/helpers/form_column_helpers_test.rb +31 -0
- data/test/helpers/list_column_helpers_test.rb +42 -0
- data/test/helpers/pagination_helpers_test.rb +59 -0
- data/test/misc/active_record_permissions_test.rb +154 -0
- data/test/misc/attribute_params_test.rb +146 -0
- data/test/misc/configurable_test.rb +96 -0
- data/test/misc/constraints_test.rb +193 -0
- data/test/misc/finder_test.rb +92 -0
- data/test/misc/lang_test.rb +11 -0
- data/test/mock_app/app/controllers/application_controller.rb +10 -0
- data/test/mock_app/app/helpers/application_helper.rb +3 -0
- data/test/mock_app/config/boot.rb +110 -0
- data/test/mock_app/config/database.yml +16 -0
- data/test/mock_app/config/environment.rb +43 -0
- data/test/mock_app/config/environments/development.rb +17 -0
- data/test/mock_app/config/environments/production.rb +28 -0
- data/test/mock_app/config/environments/test.rb +28 -0
- data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/mock_app/config/initializers/inflections.rb +10 -0
- data/test/mock_app/config/initializers/mime_types.rb +5 -0
- data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
- data/test/mock_app/config/initializers/session_store.rb +15 -0
- data/test/mock_app/config/locales/en.yml +5 -0
- data/test/mock_app/config/routes.rb +43 -0
- data/test/mock_app/db/test.sqlite3 +1 -0
- data/test/mock_app/public/blank.html +33 -0
- data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
- data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
- data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +848 -0
- data/test/model_stub.rb +55 -0
- data/test/run_all.rb +8 -0
- data/test/test_helper.rb +39 -0
- data/vendor/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/vendor/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/vendor/assets/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/vendor/assets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/vendor/assets/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/vendor/assets/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/vendor/assets/images/ui-icons_222222_256x240.png +0 -0
- data/vendor/assets/images/ui-icons_228ef1_256x240.png +0 -0
- data/vendor/assets/images/ui-icons_ef8c08_256x240.png +0 -0
- data/vendor/assets/images/ui-icons_ffd27a_256x240.png +0 -0
- data/vendor/assets/images/ui-icons_ffffff_256x240.png +0 -0
- data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +1276 -0
- data/vendor/assets/stylesheets/jquery-ui.css +568 -0
- metadata +502 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
module ActiveScaffold::Actions
|
|
2
|
+
module Core
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.class_eval do
|
|
5
|
+
before_filter :register_constraints_with_action_columns
|
|
6
|
+
after_filter :clear_flashes
|
|
7
|
+
end
|
|
8
|
+
base.helper_method :nested?
|
|
9
|
+
base.helper_method :beginning_of_chain
|
|
10
|
+
base.helper_method :new_model
|
|
11
|
+
end
|
|
12
|
+
def render_field
|
|
13
|
+
if params[:in_place_editing]
|
|
14
|
+
render_field_for_inplace_editing
|
|
15
|
+
else
|
|
16
|
+
render_field_for_update_columns
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def nested?
|
|
23
|
+
false
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def render_field_for_inplace_editing
|
|
27
|
+
register_constraints_with_action_columns(nested.constrained_fields, active_scaffold_config.update.hide_nested_column ? [] : [:update]) if nested?
|
|
28
|
+
@record = find_if_allowed(params[:id], :update)
|
|
29
|
+
render :inline => "<%= active_scaffold_input_for(active_scaffold_config.columns[params[:update_column].to_sym]) %>"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def render_field_for_update_columns
|
|
33
|
+
column = active_scaffold_config.columns[params[:column]]
|
|
34
|
+
unless column.nil?
|
|
35
|
+
@source_id = params.delete(:source_id)
|
|
36
|
+
@columns = column.update_columns
|
|
37
|
+
@scope = params[:scope]
|
|
38
|
+
|
|
39
|
+
if column.send_form_on_update_column
|
|
40
|
+
hash = if @scope
|
|
41
|
+
@scope.gsub('[','').split(']').inject(params[:record]) do |hash, index|
|
|
42
|
+
hash[index]
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
params[:record]
|
|
46
|
+
end
|
|
47
|
+
@record = hash[:id] ? find_if_allowed(hash[:id], :update) : new_model
|
|
48
|
+
@record = update_record_from_params(@record, active_scaffold_config.send(@scope ? :subform : (params[:id] ? :update : :create)).columns, hash)
|
|
49
|
+
else
|
|
50
|
+
@record = new_model
|
|
51
|
+
value = column_value_from_param_value(@record, column, params[:value])
|
|
52
|
+
@record.send "#{column.name}=", value
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
after_render_field(@record, column)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# override this method if you want to do something after render_field
|
|
60
|
+
def after_render_field(record, column); end
|
|
61
|
+
|
|
62
|
+
def authorized_for?(options = {})
|
|
63
|
+
active_scaffold_config.model.authorized_for?(options)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def clear_flashes
|
|
67
|
+
if request.xhr?
|
|
68
|
+
flash.keys.each do |flash_key|
|
|
69
|
+
flash[flash_key] = nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def marked_records
|
|
75
|
+
active_scaffold_session_storage[:marked_records] ||= Set.new
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def default_formats
|
|
79
|
+
[:html, :js, :json, :xml, :yaml]
|
|
80
|
+
end
|
|
81
|
+
# Returns true if the client accepts one of the MIME types passed to it
|
|
82
|
+
# ex: accepts? :html, :xml
|
|
83
|
+
def accepts?(*types)
|
|
84
|
+
for priority in request.accepts.compact
|
|
85
|
+
if priority == Mime::ALL
|
|
86
|
+
# Because IE always sends */* in the accepts header and we assume
|
|
87
|
+
# that if you really wanted XML or something else you would say so
|
|
88
|
+
# explicitly, we will assume */* to only ask for :html
|
|
89
|
+
return types.include?(:html)
|
|
90
|
+
elsif types.include?(priority.to_sym)
|
|
91
|
+
return true
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
false
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def response_status
|
|
98
|
+
if successful?
|
|
99
|
+
action_name == 'create' ? 201 : 200
|
|
100
|
+
else
|
|
101
|
+
422
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# API response object that will be converted to XML/YAML/JSON using to_xxx
|
|
106
|
+
def response_object
|
|
107
|
+
@response_object = successful? ? (@record || @records) : @record.errors
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Success is the existence of certain variables and the absence of errors (when applicable).
|
|
111
|
+
# Success can also be defined.
|
|
112
|
+
def successful?
|
|
113
|
+
if @successful.nil?
|
|
114
|
+
@records or (@record and @record.errors.count == 0 and @record.no_errors_in_associated?)
|
|
115
|
+
else
|
|
116
|
+
@successful
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def successful=(val)
|
|
121
|
+
@successful = (val) ? true : false
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Redirect to the main page (override if the ActiveScaffold is used as a component on another controllers page) for Javascript degradation
|
|
125
|
+
def return_to_main
|
|
126
|
+
redirect_to main_path_to_return
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# 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 Sequel::Model's find.
|
|
130
|
+
def conditions_for_collection
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# 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 Sequel::Model's find.
|
|
134
|
+
def joins_for_collection
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Override this method on your controller to provide custom finder options to the find() call. The return of this method should be a hash.
|
|
138
|
+
def custom_finder_options
|
|
139
|
+
{}
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
#Overide this method on your controller to provide model with named scopes
|
|
143
|
+
def beginning_of_chain
|
|
144
|
+
active_scaffold_config.model
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Builds search conditions by search params for column names. This allows urls like "contacts/list?company_id=5".
|
|
148
|
+
def conditions_from_params
|
|
149
|
+
conditions = nil
|
|
150
|
+
params.reject {|key, value| [:controller, :action, :id, :page, :sort, :sort_direction].include?(key.to_sym)}.each do |key, value|
|
|
151
|
+
next unless active_scaffold_config.model.columns.include?(key)
|
|
152
|
+
conditions = merge_conditions(conditions, {"#{active_scaffold_config.model.table_name}__#{key}".to_sym => value})
|
|
153
|
+
end
|
|
154
|
+
conditions
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def new_model
|
|
158
|
+
model = beginning_of_chain
|
|
159
|
+
if model.respond_to?(:sti_key)
|
|
160
|
+
build_options = {model.sti_key => active_scaffold_config.model_id} if nested? && nested.association && nested.association.collection?
|
|
161
|
+
sti_key = model.sti_key.to_s
|
|
162
|
+
params = self.params # in new action sti_key must be in params
|
|
163
|
+
params = params[:record] || {} unless params[sti_key] # in create action must be inside record key
|
|
164
|
+
model = params.delete(sti_key).camelize.constantize if params[sti_key]
|
|
165
|
+
end
|
|
166
|
+
model.respond_to?(:build) ? model.build(build_options || {}) : model.new
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
private
|
|
170
|
+
def respond_to_action(action)
|
|
171
|
+
respond_to do |type|
|
|
172
|
+
action_formats.each do |format|
|
|
173
|
+
type.send(format){ send("#{action}_respond_to_#{format}") }
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def action_formats
|
|
179
|
+
@action_formats ||= if respond_to? "#{action_name}_formats", true
|
|
180
|
+
send("#{action_name}_formats")
|
|
181
|
+
else
|
|
182
|
+
(default_formats + active_scaffold_config.formats).uniq
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def response_code_for_rescue(exception)
|
|
187
|
+
case exception
|
|
188
|
+
when ActiveScaffold::RecordNotAllowed
|
|
189
|
+
"403 Record Not Allowed"
|
|
190
|
+
when ActiveScaffold::ActionNotAllowed
|
|
191
|
+
"403 Action Not Allowed"
|
|
192
|
+
else
|
|
193
|
+
super
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
module ActiveScaffold::Actions
|
|
2
|
+
module Create
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.before_filter :create_authorized_filter, :only => [:new, :create]
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def new
|
|
8
|
+
do_new
|
|
9
|
+
respond_to_action(:new)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def create
|
|
13
|
+
do_create
|
|
14
|
+
respond_to_action(:create)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
def response_location
|
|
19
|
+
url_for(params_for(:action => "show", :id => @record.id)) if successful?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def new_respond_to_html
|
|
23
|
+
if successful?
|
|
24
|
+
render(:action => 'create')
|
|
25
|
+
else
|
|
26
|
+
return_to_main
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def new_respond_to_js
|
|
31
|
+
render(:partial => 'create_form')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def create_respond_to_html
|
|
35
|
+
if params[:iframe]=='true' # was this an iframe post ?
|
|
36
|
+
responds_to_parent do
|
|
37
|
+
render :action => 'on_create.js', :layout => false
|
|
38
|
+
end
|
|
39
|
+
else
|
|
40
|
+
if successful?
|
|
41
|
+
flash[:info] = as_(:created_model, :model => @record.to_label)
|
|
42
|
+
if action = active_scaffold_config.create.action_after_create
|
|
43
|
+
redirect_to params_for(:action => action, :id => @record.id)
|
|
44
|
+
elsif active_scaffold_config.create.persistent
|
|
45
|
+
redirect_to params_for(:action => "new")
|
|
46
|
+
else
|
|
47
|
+
return_to_main
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
if !nested? && active_scaffold_config.actions.include?(:list) && active_scaffold_config.list.always_show_create
|
|
51
|
+
do_list
|
|
52
|
+
render(:action => 'list')
|
|
53
|
+
else
|
|
54
|
+
render(:action => 'create')
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def create_respond_to_js
|
|
61
|
+
if successful? && active_scaffold_config.create.refresh_list && !render_parent?
|
|
62
|
+
do_search if respond_to? :do_search
|
|
63
|
+
do_list
|
|
64
|
+
end
|
|
65
|
+
render :action => 'on_create'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def create_respond_to_xml
|
|
69
|
+
render :xml => response_object.to_xml(:only => active_scaffold_config.create.columns.names), :content_type => Mime::XML, :status => response_status, :location => response_location
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def create_respond_to_json
|
|
73
|
+
render :text => response_object.to_json(:only => active_scaffold_config.create.columns.names), :content_type => Mime::JSON, :status => response_status, :location => response_location
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def create_respond_to_yaml
|
|
77
|
+
render :text => Hash.from_xml(response_object.to_xml(:only => active_scaffold_config.create.columns.names)).to_yaml, :content_type => Mime::YAML, :status => response_status, :location => response_location
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# A simple method to find and prepare an example new record for the form
|
|
81
|
+
# May be overridden to customize the behavior (add default values, for instance)
|
|
82
|
+
def do_new
|
|
83
|
+
@record = new_model
|
|
84
|
+
apply_constraints_to_record(@record)
|
|
85
|
+
if nested?
|
|
86
|
+
create_association_with_parent(@record)
|
|
87
|
+
register_constraints_with_action_columns(nested.constrained_fields)
|
|
88
|
+
end
|
|
89
|
+
@record
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# A somewhat complex method to actually create a new record. The complexity is from support for subforms and associated records.
|
|
93
|
+
# If you want to customize this behavior, consider using the +before_create_save+ and +after_create_save+ callbacks.
|
|
94
|
+
def do_create
|
|
95
|
+
begin
|
|
96
|
+
active_scaffold_config.model.db.transaction do
|
|
97
|
+
@record = update_record_from_params(new_model, active_scaffold_config.create.columns, params[:record])
|
|
98
|
+
apply_constraints_to_record(@record, :allow_autosave => true)
|
|
99
|
+
if nested?
|
|
100
|
+
create_association_with_parent(@record)
|
|
101
|
+
register_constraints_with_action_columns(nested.constrained_fields)
|
|
102
|
+
end
|
|
103
|
+
create_save
|
|
104
|
+
end
|
|
105
|
+
rescue ActiveRecord::RecordInvalid
|
|
106
|
+
flash[:error] = $!.message
|
|
107
|
+
self.successful = false
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def create_save
|
|
112
|
+
before_create_save(@record)
|
|
113
|
+
self.successful = [@record.valid?, @record.associated_valid?].all? {|v| v == true} # this syntax avoids a short-circuit
|
|
114
|
+
if successful?
|
|
115
|
+
@record.save! and @record.save_associated!
|
|
116
|
+
after_create_save(@record)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# override this method if you want to inject data in the record (or its associated objects) before the save
|
|
121
|
+
def before_create_save(record); end
|
|
122
|
+
|
|
123
|
+
# override this method if you want to do something after the save
|
|
124
|
+
def after_create_save(record); end
|
|
125
|
+
|
|
126
|
+
# The default security delegates to ModelPermissions.
|
|
127
|
+
# You may override the method to customize.
|
|
128
|
+
|
|
129
|
+
def create_ignore?
|
|
130
|
+
nested? && active_scaffold_config.list.always_show_create
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def create_authorized?
|
|
134
|
+
authorized_for?(:crud_type => :create)
|
|
135
|
+
end
|
|
136
|
+
private
|
|
137
|
+
def create_authorized_filter
|
|
138
|
+
link = active_scaffold_config.create.link || active_scaffold_config.create.class.link
|
|
139
|
+
raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
|
|
140
|
+
end
|
|
141
|
+
def new_formats
|
|
142
|
+
(default_formats + active_scaffold_config.formats).uniq
|
|
143
|
+
end
|
|
144
|
+
def create_formats
|
|
145
|
+
(default_formats + active_scaffold_config.formats + active_scaffold_config.create.formats).uniq
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module ActiveScaffold::Actions
|
|
2
|
+
module Delete
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.before_filter :delete_authorized_filter, :only => [:destroy]
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def destroy
|
|
8
|
+
params.delete :destroy_action
|
|
9
|
+
process_action_link_action(:destroy) do |record|
|
|
10
|
+
do_destroy
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
def destroy_respond_to_html
|
|
16
|
+
if self.successful?
|
|
17
|
+
flash[:info] = as_(:deleted_model, :model => @record.to_label)
|
|
18
|
+
else
|
|
19
|
+
#error_message_for not available in controller...
|
|
20
|
+
#flash[:error] = active_scaffold_error_messages_for(@record, :object_name => "#{@record.class.model_name.human.downcase}#{@record.new? ? '' : ": #{@record.to_label}"}", :header_message => '', :message => "#{@record.class.model_name.human.downcase}#{@record.new? ? '' : ": #{@record.to_label}"}", :container_tag => nil, :list_type => :br)
|
|
21
|
+
end
|
|
22
|
+
return_to_main
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def destroy_respond_to_js
|
|
26
|
+
if successful? && active_scaffold_config.delete.refresh_list && !render_parent?
|
|
27
|
+
do_search if respond_to? :do_search
|
|
28
|
+
do_list
|
|
29
|
+
end
|
|
30
|
+
render(:action => 'destroy')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def destroy_respond_to_xml
|
|
34
|
+
render :xml => successful? ? "" : response_object.to_xml(:only => active_scaffold_config.list.columns.names), :content_type => Mime::XML, :status => response_status
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def destroy_respond_to_json
|
|
38
|
+
render :text => successful? ? "" : response_object.to_json(:only => active_scaffold_config.list.columns.names), :content_type => Mime::JSON, :status => response_status
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def destroy_respond_to_yaml
|
|
42
|
+
render :text => successful? ? "" : Hash.from_xml(response_object.to_xml(:only => active_scaffold_config.list.columns.names)).to_yaml, :content_type => Mime::YAML, :status => response_status
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def destroy_find_record
|
|
46
|
+
@record = find_if_allowed(params[:id], :delete)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# A simple method to handle the actual destroying of a record
|
|
50
|
+
# May be overridden to customize the behavior
|
|
51
|
+
def do_destroy
|
|
52
|
+
@record ||= destroy_find_record
|
|
53
|
+
begin
|
|
54
|
+
self.successful = @record.destroy
|
|
55
|
+
marked_records.delete @record.id.to_s if successful?
|
|
56
|
+
rescue
|
|
57
|
+
flash[:warning] = as_(:cant_destroy_record, :record => @record.to_label)
|
|
58
|
+
self.successful = false
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# The default security delegates to ModelPermissions.
|
|
63
|
+
# You may override the method to customize.
|
|
64
|
+
def delete_authorized?(record = nil)
|
|
65
|
+
authorized_for?(:crud_type => :delete)
|
|
66
|
+
end
|
|
67
|
+
private
|
|
68
|
+
def delete_authorized_filter
|
|
69
|
+
link = active_scaffold_config.delete.link || active_scaffold_config.delete.class.link
|
|
70
|
+
raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
|
|
71
|
+
end
|
|
72
|
+
def destroy_formats
|
|
73
|
+
(default_formats + active_scaffold_config.formats + active_scaffold_config.delete.formats).uniq
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
module ActiveScaffold::Actions
|
|
2
|
+
module FieldSearch
|
|
3
|
+
include ActiveScaffold::Actions::CommonSearch
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.before_filter :search_authorized_filter, :only => :show_search
|
|
6
|
+
base.before_filter :store_search_params_into_session, :only => [:index]
|
|
7
|
+
base.before_filter :do_search, :only => [:index]
|
|
8
|
+
base.helper_method :field_search_params
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# FieldSearch uses params[:search] and not @record because search conditions do not always pass the Model's validations.
|
|
12
|
+
# This facilitates for example, textual searches against associations via .search_sql
|
|
13
|
+
def show_search
|
|
14
|
+
@record = new_model
|
|
15
|
+
respond_to_action(:field_search)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
def store_search_params_into_session
|
|
21
|
+
set_field_search_default_params(active_scaffold_config.field_search.default_params) unless active_scaffold_config.field_search.default_params.nil?
|
|
22
|
+
super
|
|
23
|
+
active_scaffold_session_storage[:search] = nil if search_params.is_a?(String)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def set_field_search_default_params(default_params)
|
|
27
|
+
if (params[:search].nil? && search_params.nil?) || (params[:search].is_a?(String) && params[:search].blank?)
|
|
28
|
+
params[:search] = default_params.is_a?(Proc) ? self.instance_eval(&default_params) : default_params
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def field_search_params
|
|
33
|
+
search_params || {}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def field_search_respond_to_html
|
|
37
|
+
render(:action => "field_search")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def field_search_respond_to_js
|
|
41
|
+
render(:partial => "field_search")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def do_search
|
|
45
|
+
unless search_params.blank?
|
|
46
|
+
text_search = active_scaffold_config.field_search.text_search
|
|
47
|
+
search_conditions = []
|
|
48
|
+
human_condition_columns = [] if active_scaffold_config.field_search.human_conditions
|
|
49
|
+
columns = active_scaffold_config.field_search.columns
|
|
50
|
+
search_params.each do |key, value|
|
|
51
|
+
next unless columns.include? key
|
|
52
|
+
search_condition = self.class.condition_for_column(active_scaffold_config.columns[key], value, text_search)
|
|
53
|
+
unless search_condition.blank?
|
|
54
|
+
search_conditions << search_condition
|
|
55
|
+
human_condition_columns << active_scaffold_config.columns[key] unless human_condition_columns.nil?
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
self.active_scaffold_conditions = merge_conditions(self.active_scaffold_conditions, *search_conditions)
|
|
59
|
+
if search_conditions.blank?
|
|
60
|
+
@filtered = false
|
|
61
|
+
else
|
|
62
|
+
@filtered = human_condition_columns.nil? ? true : human_condition_columns
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
includes_for_search_columns = columns.collect{ |column| column.includes}.flatten.uniq.compact
|
|
66
|
+
self.active_scaffold_includes.concat includes_for_search_columns
|
|
67
|
+
|
|
68
|
+
active_scaffold_config.list.user.page = nil
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
def search_authorized_filter
|
|
75
|
+
link = active_scaffold_config.field_search.link || active_scaffold_config.field_search.class.link
|
|
76
|
+
raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
|
|
77
|
+
end
|
|
78
|
+
def field_search_formats
|
|
79
|
+
(default_formats + active_scaffold_config.formats + active_scaffold_config.field_search.formats).uniq
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
module ActiveScaffold::Actions
|
|
2
|
+
module List
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.before_filter :list_authorized_filter, :only => [:index, :row]
|
|
5
|
+
base.helper_method :list_columns
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def index
|
|
9
|
+
list
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# get just a single row
|
|
13
|
+
def row
|
|
14
|
+
@record = find_if_allowed(params[:id], :read)
|
|
15
|
+
respond_to_action(:row)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def list
|
|
19
|
+
do_list
|
|
20
|
+
@nested_auto_open = active_scaffold_config.list.nested_auto_open
|
|
21
|
+
respond_to_action(:list)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
def list_respond_to_html
|
|
26
|
+
if params.delete(:embedded)
|
|
27
|
+
render :action => 'list', :layout => false
|
|
28
|
+
else
|
|
29
|
+
render :action => 'list'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
def list_respond_to_js
|
|
33
|
+
if params[:adapter]
|
|
34
|
+
render(:partial => 'list_with_header')
|
|
35
|
+
elsif params[:embedded]
|
|
36
|
+
params.delete(:embedded)
|
|
37
|
+
render(:partial => 'list_with_header')
|
|
38
|
+
else
|
|
39
|
+
render :action => 'refresh_list.js'
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
def list_respond_to_xml
|
|
43
|
+
render :xml => response_object.to_xml(:only => list_columns_names), :content_type => Mime::XML, :status => response_status
|
|
44
|
+
end
|
|
45
|
+
def list_respond_to_json
|
|
46
|
+
render :text => response_object.to_json(:only => list_columns_names), :content_type => Mime::JSON, :status => response_status
|
|
47
|
+
end
|
|
48
|
+
def list_respond_to_yaml
|
|
49
|
+
render :text => Hash.from_xml(response_object.to_xml(:only => list_columns_names)).to_yaml, :content_type => Mime::YAML, :status => response_status
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def row_respond_to_html
|
|
53
|
+
render(:partial => 'row', :locals => {:record => @record})
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# The actual algorithm to prepare for the list view
|
|
57
|
+
def set_includes_for_list_columns
|
|
58
|
+
includes_for_list_columns = active_scaffold_config.list.columns.collect{ |c| c.includes }.flatten.uniq.compact
|
|
59
|
+
self.active_scaffold_includes.concat includes_for_list_columns
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# The actual algorithm to prepare for the list view
|
|
63
|
+
def do_list
|
|
64
|
+
set_includes_for_list_columns
|
|
65
|
+
|
|
66
|
+
options = { :sorting => active_scaffold_config.list.user.sorting,
|
|
67
|
+
:count_includes => active_scaffold_config.list.user.count_includes }
|
|
68
|
+
paginate = (params[:format].nil?) ? (accepts? :html, :js) : ['html', 'js'].include?(params[:format])
|
|
69
|
+
if paginate
|
|
70
|
+
options.merge!({
|
|
71
|
+
:per_page => active_scaffold_config.list.user.per_page,
|
|
72
|
+
:page => active_scaffold_config.list.user.page,
|
|
73
|
+
:pagination => active_scaffold_config.list.pagination
|
|
74
|
+
})
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
page = find_page(options)
|
|
78
|
+
if page.items.blank? && !page.pager.infinite?
|
|
79
|
+
page = page.pager.last
|
|
80
|
+
active_scaffold_config.list.user.page = page.number
|
|
81
|
+
end
|
|
82
|
+
@page, @records = page, page.items
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def each_record_in_page
|
|
86
|
+
_page = active_scaffold_config.list.user.page
|
|
87
|
+
do_search if respond_to? :do_search
|
|
88
|
+
active_scaffold_config.list.user.page = _page
|
|
89
|
+
do_list
|
|
90
|
+
@page.items.each {|record| yield record}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def each_record_in_scope
|
|
94
|
+
do_search if respond_to? :do_search
|
|
95
|
+
finder_options = { :order => "#{active_scaffold_config.model.connection.quote_table_name(active_scaffold_config.model.table_name)}.#{active_scaffold_config.model.primary_key} ASC",
|
|
96
|
+
:conditions => all_conditions,
|
|
97
|
+
:joins => joins_for_finder}
|
|
98
|
+
finder_options.merge! custom_finder_options
|
|
99
|
+
finder_options.merge! :include => (active_scaffold_includes.blank? ? nil : active_scaffold_includes)
|
|
100
|
+
klass = beginning_of_chain
|
|
101
|
+
klass.all(finder_options).each {|record| yield record}
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# The default security delegates to ModelPermissions.
|
|
105
|
+
# You may override the method to customize.
|
|
106
|
+
def list_authorized?
|
|
107
|
+
authorized_for?(:crud_type => :read)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# call this method in your action_link action to simplify processing of actions
|
|
111
|
+
# eg for member action_link :fire
|
|
112
|
+
# process_action_link_action do |record|
|
|
113
|
+
# record.update_attributes(:fired => true)
|
|
114
|
+
# self.successful = true
|
|
115
|
+
# flash[:info] = 'Player fired'
|
|
116
|
+
# end
|
|
117
|
+
def process_action_link_action(render_action = :action_update, crud_type = nil)
|
|
118
|
+
if request.get?
|
|
119
|
+
# someone has disabled javascript, we have to show confirmation form first
|
|
120
|
+
@record = find_if_allowed(params[:id], :read) if params[:id] && params[:id] && params[:id].to_i > 0
|
|
121
|
+
respond_to_action(:action_confirmation)
|
|
122
|
+
else
|
|
123
|
+
if params[:id] && params[:id] && params[:id].to_i > 0
|
|
124
|
+
crud_type ||= (request.post? || request.put?) ? :update : :delete
|
|
125
|
+
@record = find_if_allowed(params[:id], crud_type)
|
|
126
|
+
unless @record.nil?
|
|
127
|
+
yield @record
|
|
128
|
+
else
|
|
129
|
+
self.successful = false
|
|
130
|
+
flash[:error] = as_(:no_authorization_for_action, :action => action_name)
|
|
131
|
+
end
|
|
132
|
+
else
|
|
133
|
+
yield
|
|
134
|
+
end
|
|
135
|
+
respond_to_action(render_action)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def action_confirmation_respond_to_html(confirm_action = action_name.to_sym)
|
|
140
|
+
link = active_scaffold_config.action_links[confirm_action]
|
|
141
|
+
render :action => 'action_confirmation', :locals => {:record => @record, :link => link}
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def action_update_respond_to_html
|
|
145
|
+
do_search if respond_to? :do_search
|
|
146
|
+
do_list
|
|
147
|
+
redirect_to :action => 'index'
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def action_update_respond_to_js
|
|
151
|
+
render(:action => 'on_action_update')
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def action_update_respond_to_xml
|
|
155
|
+
render :xml => successful? ? "" : response_object.to_xml(:only => list_columns_names), :content_type => Mime::XML, :status => response_status
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def action_update_respond_to_json
|
|
159
|
+
render :text => successful? ? "" : response_object.to_json(:only => list_columns_names), :content_type => Mime::JSON, :status => response_status
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def action_update_respond_to_yaml
|
|
163
|
+
render :text => successful? ? "" : Hash.from_xml(response_object.to_xml(:only => list_columns_names)).to_yaml, :content_type => Mime::YAML, :status => response_status
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
private
|
|
167
|
+
def list_authorized_filter
|
|
168
|
+
raise ActiveScaffold::ActionNotAllowed unless list_authorized?
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def list_formats
|
|
172
|
+
(default_formats + active_scaffold_config.formats + active_scaffold_config.list.formats).uniq
|
|
173
|
+
end
|
|
174
|
+
alias_method :index_formats, :list_formats
|
|
175
|
+
|
|
176
|
+
def row_formats
|
|
177
|
+
([:html] + active_scaffold_config.formats + active_scaffold_config.list.formats).uniq
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def action_update_formats
|
|
181
|
+
(default_formats + active_scaffold_config.formats).uniq
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def action_confirmation_formats
|
|
185
|
+
(default_formats + active_scaffold_config.formats).uniq
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def list_columns
|
|
189
|
+
active_scaffold_config.list.columns.collect_visible
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def list_columns_names
|
|
193
|
+
list_columns.collect(&:name)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|