active_scaffold 3.2.18 → 3.2.19
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 +3 -0
- data/app/assets/images/active_scaffold/add.png +0 -0
- data/app/assets/images/active_scaffold/arrow_down.png +0 -0
- data/app/assets/images/active_scaffold/arrow_up.png +0 -0
- data/app/assets/images/active_scaffold/close.png +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 +1113 -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 +1107 -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.scss +54 -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 +40 -0
- data/app/assets/stylesheets/active_scaffold_layout.css +936 -0
- data/app/assets/stylesheets/blue-theme.css +74 -0
- data/config/locales/de.yml +125 -0
- data/config/locales/en.yml +127 -0
- data/config/locales/es.yml +128 -0
- data/config/locales/fr.yml +131 -0
- data/config/locales/hu.yml +126 -0
- data/config/locales/ja.yml +126 -0
- data/config/locales/ru.yml +135 -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 +53 -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 +28 -0
- data/frontends/default/views/_form_association.html.erb +17 -0
- data/frontends/default/views/_form_association_footer.html.erb +47 -0
- data/frontends/default/views/_form_attribute.html.erb +23 -0
- data/frontends/default/views/_form_hidden_attribute.html.erb +7 -0
- data/frontends/default/views/_form_messages.html.erb +5 -0
- data/frontends/default/views/_horizontal_subform.html.erb +22 -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 +43 -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 +21 -0
- data/frontends/default/views/_list_messages.html.erb +28 -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 +13 -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/_refresh_list.js.erb +1 -0
- data/frontends/default/views/_render_field.js.erb +20 -0
- data/frontends/default/views/_row.html.erb +1 -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_calculations.js.erb +4 -0
- data/frontends/default/views/_update_form.html.erb +6 -0
- data/frontends/default/views/_update_messages.js.erb +2 -0
- data/frontends/default/views/_vertical_subform.html.erb +12 -0
- data/frontends/default/views/_vertical_subform_record.html.erb +43 -0
- data/frontends/default/views/action_confirmation.html.erb +13 -0
- data/frontends/default/views/add_existing.js.erb +14 -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 +26 -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 +22 -0
- data/frontends/default/views/on_create.js.erb +38 -0
- data/frontends/default/views/on_mark.js.erb +6 -0
- data/frontends/default/views/on_update.js.erb +29 -0
- data/frontends/default/views/refresh_list.js.erb +2 -0
- data/frontends/default/views/render_field.js.erb +1 -0
- data/frontends/default/views/row.js.erb +2 -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 +15 -0
- data/frontends/default/views/update_row.js.erb +1 -0
- data/lib/active_scaffold/actions/common_search.rb +22 -0
- data/lib/active_scaffold/actions/core.rb +203 -0
- data/lib/active_scaffold/actions/create.rb +139 -0
- data/lib/active_scaffold/actions/delete.rb +74 -0
- data/lib/active_scaffold/actions/field_search.rb +78 -0
- data/lib/active_scaffold/actions/list.rb +208 -0
- data/lib/active_scaffold/actions/mark.rb +89 -0
- data/lib/active_scaffold/actions/nested.rb +244 -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 +156 -0
- data/lib/active_scaffold/active_record_permissions.rb +135 -0
- data/lib/active_scaffold/attribute_params.rb +200 -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/bitfields/bitfields_bridge.rb +37 -0
- data/lib/active_scaffold/bridges/bitfields.rb +6 -0
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +66 -0
- data/lib/active_scaffold/bridges/calendar_date_select.rb +24 -0
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +127 -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 +63 -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 +46 -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 +92 -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 +75 -0
- data/lib/active_scaffold/config/core.rb +236 -0
- data/lib/active_scaffold/config/create.rb +32 -0
- data/lib/active_scaffold/config/delete.rb +32 -0
- data/lib/active_scaffold/config/field_search.rb +79 -0
- data/lib/active_scaffold/config/form.rb +64 -0
- data/lib/active_scaffold/config/list.rb +247 -0
- data/lib/active_scaffold/config/mark.rb +30 -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 +31 -0
- data/lib/active_scaffold/config/subform.rb +35 -0
- data/lib/active_scaffold/config/update.rb +33 -0
- data/lib/active_scaffold/configurable.rb +29 -0
- data/lib/active_scaffold/constraints.rb +171 -0
- data/lib/active_scaffold/data_structures/action_columns.rb +142 -0
- data/lib/active_scaffold/data_structures/action_link.rb +185 -0
- data/lib/active_scaffold/data_structures/action_links.rb +191 -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 +402 -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 +171 -0
- data/lib/active_scaffold/data_structures/set.rb +61 -0
- data/lib/active_scaffold/data_structures/sorting.rb +167 -0
- data/lib/active_scaffold/engine.rb +4 -0
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +20 -0
- data/lib/active_scaffold/extensions/action_controller_rescueing.rb +7 -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/reverse_associations.rb +64 -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 +61 -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 +399 -0
- data/lib/active_scaffold/helpers/association_helpers.rb +42 -0
- data/lib/active_scaffold/helpers/controller_helpers.rb +94 -0
- data/lib/active_scaffold/helpers/form_column_helpers.rb +322 -0
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +64 -0
- data/lib/active_scaffold/helpers/id_helpers.rb +131 -0
- data/lib/active_scaffold/helpers/list_column_helpers.rb +374 -0
- data/lib/active_scaffold/helpers/pagination_helpers.rb +62 -0
- data/lib/active_scaffold/helpers/search_column_helpers.rb +257 -0
- data/lib/active_scaffold/helpers/show_column_helpers.rb +44 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +398 -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/tableless.rb +83 -0
- data/lib/active_scaffold/version.rb +9 -0
- data/lib/active_scaffold.rb +373 -0
- data/lib/active_scaffold_env.rb +13 -0
- data/lib/generators/active_scaffold/USAGE +29 -0
- data/lib/generators/active_scaffold/active_scaffold_generator.rb +21 -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/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 +261 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ActiveScaffold.replace_html('<%=element_messages_id%>','<%=escape_javascript(render(:partial => 'form_messages'))%>');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render :partial => 'list_with_header' -%>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<% if controller.send :successful? %>
|
|
2
|
+
<% if @record %>
|
|
3
|
+
<%= render :partial => 'update_messages' %>
|
|
4
|
+
<% row = escape_javascript(render(:partial => 'list_record', :locals => {:record => @record})) -%>
|
|
5
|
+
<% if @action_link.nil? || @action_link.position %>
|
|
6
|
+
ActiveScaffold.find_action_link('<%= element_row_id(:action => :list, :id => @record.id) %>').close('<%= row %>');
|
|
7
|
+
<% else %>
|
|
8
|
+
ActiveScaffold.update_row('<%= element_row_id(:action => :list, :id => @record.id) %>', '<%= row %>');
|
|
9
|
+
ActiveScaffold.scroll_to('<%= element_row_id(:action => :list, :id => @record.id) %>', true);
|
|
10
|
+
<% end %>
|
|
11
|
+
<%= render :partial => 'update_calculations', :formats => [:js] %>
|
|
12
|
+
<% else %>
|
|
13
|
+
<% if @action_link.nil? || @action_link.position %>
|
|
14
|
+
ActiveScaffold.find_action_link('<%= element_row_id(:action => action_name) %>').close();
|
|
15
|
+
<% end %>
|
|
16
|
+
<%= render :partial => 'refresh_list' %>
|
|
17
|
+
<% end %>
|
|
18
|
+
<% else %>
|
|
19
|
+
<% flash[:error] = active_scaffold_error_messages_for(@record, :object_name => "#{@record.class.model_name.human.downcase}#{@record.new_record? ? '' : ": #{@record.to_label}"}", :header_message => '', :message => "#{@record.class.model_name.human.downcase}#{@record.new_record? ? '' : ": #{@record.to_label}"}", :container_tag => nil, :list_type => :br) %>
|
|
20
|
+
ActiveScaffold.replace_html('<%= active_scaffold_messages_id %>','<%= escape_javascript(render(:partial => 'messages')) %>');
|
|
21
|
+
ActiveScaffold.scroll_to('<%= active_scaffold_messages_id %>', true);
|
|
22
|
+
<% end %>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
try {
|
|
2
|
+
<% form_selector = "#{element_form_id(:action => :create)}"
|
|
3
|
+
insert_at ||= :top %>
|
|
4
|
+
var action_link = ActiveScaffold.find_action_link('<%= form_selector%>');
|
|
5
|
+
action_link.update_flash_messages('<%=escape_javascript(render(:partial => 'messages'))%>');
|
|
6
|
+
<% if controller.send :successful? %>
|
|
7
|
+
<% if render_parent? %>
|
|
8
|
+
<% if nested_singular_association? %>
|
|
9
|
+
action_link.close(true);
|
|
10
|
+
<% elsif params[:parent_sti] && render_parent_action == :row %>
|
|
11
|
+
ActiveScaffold.create_record_row_from_url(action_link,'<%= url_for(render_parent_options) %>', <%= {:insert_at => insert_at}.to_json.html_safe %>);
|
|
12
|
+
<% else %>
|
|
13
|
+
ActiveScaffold.reload('<%= url_for render_parent_options %>');
|
|
14
|
+
<% end %>
|
|
15
|
+
<% elsif (active_scaffold_config.create.refresh_list) %>
|
|
16
|
+
<%= render :partial => 'refresh_list' %>
|
|
17
|
+
<% elsif params[:parent_controller].nil? %>
|
|
18
|
+
<% new_row = render :partial => 'list_record', :locals => {:record => @record} %>
|
|
19
|
+
ActiveScaffold.create_record_row(action_link.scaffold(),'<%= escape_javascript(new_row) %>', <%= {:insert_at => insert_at}.to_json.html_safe %>);
|
|
20
|
+
<%= render :partial => 'update_calculations', :formats => [:js] %>
|
|
21
|
+
<% end %>
|
|
22
|
+
|
|
23
|
+
<% unless render_parent? %>
|
|
24
|
+
<% if (active_scaffold_config.create.persistent) %>
|
|
25
|
+
action_link.reload();
|
|
26
|
+
<% else %>
|
|
27
|
+
action_link.close();
|
|
28
|
+
<% end %>
|
|
29
|
+
<% if (active_scaffold_config.create.action_after_create) %>
|
|
30
|
+
var link = ActiveScaffold.find_action_link('<%= action_link_id active_scaffold_config.create.action_after_create, @record.id %>');
|
|
31
|
+
if (link) (function() { link.open() })<%= '.defer' if ActiveScaffold.js_framework == :prototype %>();
|
|
32
|
+
<% end %>
|
|
33
|
+
<% end %>
|
|
34
|
+
<% else %>
|
|
35
|
+
ActiveScaffold.replace('<%= form_selector %>','<%= escape_javascript(render(:partial => 'create_form', :locals => {:xhr => true})) %>');
|
|
36
|
+
ActiveScaffold.scroll_to('<%= form_selector %>', true);
|
|
37
|
+
<% end %>
|
|
38
|
+
} catch (e) { alert('RJS error:\n\n' + e.toString());}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%
|
|
2
|
+
checked = all_marked? unless local_assigns.has_key? :checked
|
|
3
|
+
options = {:checked => checked, :include_mark_all => true, :include_checkboxes => params[:id].nil?}
|
|
4
|
+
%>
|
|
5
|
+
ActiveScaffold.mark_records('<%= active_scaffold_tbody_id %>',<%= options.to_json.html_safe %>);
|
|
6
|
+
<%= render :partial => 'update_messages' %>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
try {
|
|
2
|
+
<% form_selector = "#{element_form_id(:action => :update)}" %>
|
|
3
|
+
var action_link = ActiveScaffold.find_action_link('<%= form_selector %>');
|
|
4
|
+
action_link.update_flash_messages('<%= escape_javascript(render(:partial => 'messages')) %>');
|
|
5
|
+
<% if controller.send :successful? %>
|
|
6
|
+
<% if params[:dont_close] %>
|
|
7
|
+
<% row_selector = element_row_id(:action => :list, :id => @record.id) %>
|
|
8
|
+
ActiveScaffold.update_row('<%= row_selector %>', '<%= escape_javascript(render(:partial => 'list_record', :locals => {:record => @record})) %>');
|
|
9
|
+
<%= render :partial => 'update_calculations', :formats => [:js] %>
|
|
10
|
+
ActiveScaffold.scroll_to('<%= row_selector %>', true);
|
|
11
|
+
<% else %>
|
|
12
|
+
<% if render_parent? %>
|
|
13
|
+
<% if nested_singular_association? || render_parent_action == :row %>
|
|
14
|
+
action_link.close(true);
|
|
15
|
+
<% else %>
|
|
16
|
+
ActiveScaffold.reload('<%= url_for render_parent_options %>');
|
|
17
|
+
<% end %>
|
|
18
|
+
<% elsif update_refresh_list? %>
|
|
19
|
+
<%= render :partial => 'refresh_list' %>
|
|
20
|
+
<% else %>
|
|
21
|
+
action_link.close('<%= escape_javascript(render(:partial => 'list_record', :locals => {:record => @record})) %>');
|
|
22
|
+
<%= render :partial => 'update_calculations', :formats => [:js] %>
|
|
23
|
+
<% end %>
|
|
24
|
+
<% end %>
|
|
25
|
+
<% else %>
|
|
26
|
+
ActiveScaffold.replace('<%= form_selector %>', '<%= escape_javascript(render(:partial => 'update_form', :locals => {:xhr => true})) %>');
|
|
27
|
+
ActiveScaffold.scroll_to('<%= form_selector %>', true);
|
|
28
|
+
<% end %>
|
|
29
|
+
} catch (e) { alert('RJS error:\n\n' + e.toString());}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render :partial => "render_field", :collection => @columns, :locals => {:source_id => @source_id, :scope => @scope} %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<div class="active-scaffold">
|
|
2
|
+
<div class="update-view <%= "#{id_from_controller params[:controller]}-view" %> view">
|
|
3
|
+
<% if active_scaffold_config.update.nested_links and active_scaffold_config.action_links.member.empty? -%>
|
|
4
|
+
<%= render :partial => 'update_actions', :locals => {:record => @record, :url_options => params_for(:action => :list, :id => @record.id)} %>
|
|
5
|
+
<% end -%>
|
|
6
|
+
<%= render :partial => 'update_form' -%>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% @column_span_id ||= element_cell_id(:id => @record.id.to_s, :action => 'update_column', :name => params[:column]) %>
|
|
2
|
+
<% unless controller.send :successful? %>
|
|
3
|
+
alert('<%= escape_javascript(@record.errors.full_messages.join("\n")) %>');
|
|
4
|
+
<% @record.reload %>
|
|
5
|
+
<% end %>
|
|
6
|
+
<% column = active_scaffold_config.columns[params[:column]] %>
|
|
7
|
+
<% formatted_value = get_column_value(@record, column) %>
|
|
8
|
+
<% if column.inplace_edit %>
|
|
9
|
+
ActiveScaffold.update_inplace_edit('<%= @column_span_id %>','<%= escape_javascript(formatted_value) %>', <%= column_empty?(formatted_value).to_json %>);
|
|
10
|
+
<% else %>
|
|
11
|
+
ActiveScaffold.replace_html('<%= @column_span_id %>','<%= escape_javascript(formatted_value) %>');
|
|
12
|
+
<% end %>
|
|
13
|
+
<% if column.calculation? %>
|
|
14
|
+
ActiveScaffold.replace_html('<%= active_scaffold_calculations_id(:column => column) %>', '<%= escape_javascript(render_column_calculation(column)) %>');
|
|
15
|
+
<% end %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ActiveScaffold.update_row('<%=element_row_id(:action => 'list', :id => @record.id)%>','<%=escape_javascript(render(:partial => 'list_record', :locals => {:record => @record}))%>');
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module ActiveScaffold::Actions
|
|
2
|
+
module CommonSearch
|
|
3
|
+
protected
|
|
4
|
+
def store_search_params_into_session
|
|
5
|
+
active_scaffold_session_storage[:search] = params.delete :search if params[:search]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def search_params
|
|
9
|
+
active_scaffold_session_storage[:search]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def search_ignore?
|
|
13
|
+
active_scaffold_config.list.always_show_search
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# The default security delegates to ActiveRecordPermissions.
|
|
17
|
+
# You may override the method to customize.
|
|
18
|
+
def search_authorized?
|
|
19
|
+
authorized_for?(:crud_type => :read)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
module ActiveScaffold::Actions
|
|
2
|
+
module Core
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.class_eval do
|
|
5
|
+
prepend_before_filter :register_constraints_with_action_columns, :unless => :nested?
|
|
6
|
+
after_filter :clear_flashes
|
|
7
|
+
rescue_from ActiveScaffold::RecordNotAllowed, ActiveScaffold::ActionNotAllowed, :with => :deny_access
|
|
8
|
+
end
|
|
9
|
+
base.helper_method :nested?
|
|
10
|
+
base.helper_method :calculate
|
|
11
|
+
base.helper_method :new_model
|
|
12
|
+
end
|
|
13
|
+
def render_field
|
|
14
|
+
if params[:in_place_editing]
|
|
15
|
+
render_field_for_inplace_editing
|
|
16
|
+
else
|
|
17
|
+
render_field_for_update_columns
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
def embedded?
|
|
23
|
+
@embedded ||= params.delete(:embedded)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def nested?
|
|
27
|
+
false
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def render_field_for_inplace_editing
|
|
31
|
+
@record = find_if_allowed(params[:id], :update)
|
|
32
|
+
render :inline => "<%= active_scaffold_input_for(active_scaffold_config.columns[params[:update_column].to_sym]) %>"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def render_field_for_update_columns
|
|
36
|
+
column = active_scaffold_config.columns[params[:column]]
|
|
37
|
+
unless column.nil?
|
|
38
|
+
@source_id = params.delete(:source_id)
|
|
39
|
+
@columns = column.update_columns
|
|
40
|
+
@scope = params[:scope]
|
|
41
|
+
|
|
42
|
+
if column.send_form_on_update_column
|
|
43
|
+
if @scope
|
|
44
|
+
hash = @scope.gsub('[','').split(']').inject(params[:record]) do |hash, index|
|
|
45
|
+
hash[index]
|
|
46
|
+
end
|
|
47
|
+
id = hash[:id]
|
|
48
|
+
else
|
|
49
|
+
hash = params[:record]
|
|
50
|
+
id = params[:id]
|
|
51
|
+
end
|
|
52
|
+
@record = id ? find_if_allowed(id, :update) : new_model
|
|
53
|
+
@record = update_record_from_params(@record, active_scaffold_config.send(@scope ? :subform : (id ? :update : :create)).columns, hash)
|
|
54
|
+
else
|
|
55
|
+
@record = new_model
|
|
56
|
+
value = column_value_from_param_value(@record, column, params[:value])
|
|
57
|
+
@record.send "#{column.name}=", value
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
after_render_field(@record, column)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# override this method if you want to do something after render_field
|
|
65
|
+
def after_render_field(record, column); end
|
|
66
|
+
|
|
67
|
+
def authorized_for?(options = {})
|
|
68
|
+
active_scaffold_config.model.authorized_for?(options)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def clear_flashes
|
|
72
|
+
if request.xhr?
|
|
73
|
+
flash.keys.each do |flash_key|
|
|
74
|
+
flash[flash_key] = nil
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def each_marked_record(&block)
|
|
80
|
+
active_scaffold_config.model.find(marked_records.to_a).each &block
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def marked_records
|
|
84
|
+
active_scaffold_session_storage[:marked_records] ||= Set.new
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def default_formats
|
|
88
|
+
[:html, :js, :json, :xml, :yaml]
|
|
89
|
+
end
|
|
90
|
+
# Returns true if the client accepts one of the MIME types passed to it
|
|
91
|
+
# ex: accepts? :html, :xml
|
|
92
|
+
def accepts?(*types)
|
|
93
|
+
for priority in request.accepts.compact
|
|
94
|
+
if priority == Mime::ALL
|
|
95
|
+
# Because IE always sends */* in the accepts header and we assume
|
|
96
|
+
# that if you really wanted XML or something else you would say so
|
|
97
|
+
# explicitly, we will assume */* to only ask for :html
|
|
98
|
+
return types.include?(:html)
|
|
99
|
+
elsif types.include?(priority.to_sym)
|
|
100
|
+
return true
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
false
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def response_status
|
|
107
|
+
if successful?
|
|
108
|
+
action_name == 'create' ? 201 : 200
|
|
109
|
+
else
|
|
110
|
+
422
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# API response object that will be converted to XML/YAML/JSON using to_xxx
|
|
115
|
+
def response_object
|
|
116
|
+
@response_object = successful? ? (@record || @records) : @record.errors
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Success is the existence of one or more model objects. Most actions
|
|
120
|
+
# circumvent this method by setting @success directly.
|
|
121
|
+
def successful?
|
|
122
|
+
if @successful.nil?
|
|
123
|
+
@record || @records
|
|
124
|
+
else
|
|
125
|
+
@successful
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def successful=(val)
|
|
130
|
+
@successful = (val) ? true : false
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Redirect to the main page (override if the ActiveScaffold is used as a component on another controllers page) for Javascript degradation
|
|
134
|
+
def return_to_main
|
|
135
|
+
redirect_to main_path_to_return
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# 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.
|
|
139
|
+
def conditions_for_collection
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# 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.
|
|
143
|
+
def joins_for_collection
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Override this method on your controller to provide custom finder options to the find() call. The return of this method should be a hash.
|
|
147
|
+
def custom_finder_options
|
|
148
|
+
{}
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
#Overide this method on your controller to provide model with named scopes
|
|
152
|
+
def beginning_of_chain
|
|
153
|
+
active_scaffold_config.model
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Builds search conditions by search params for column names. This allows urls like "contacts/list?company_id=5".
|
|
157
|
+
def conditions_from_params
|
|
158
|
+
@conditions_from_params ||= begin
|
|
159
|
+
conditions = {}
|
|
160
|
+
params.reject {|key, value| [:controller, :action, :id, :page, :sort, :sort_direction].include?(key.to_sym)}.each do |key, value|
|
|
161
|
+
next unless active_scaffold_config.model.columns_hash[key.to_s]
|
|
162
|
+
next if active_scaffold_constraints[key.to_sym]
|
|
163
|
+
next if nested? and nested.constrained_fields.include? key.to_sym
|
|
164
|
+
conditions[key.to_sym] = value
|
|
165
|
+
end
|
|
166
|
+
conditions
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def new_model
|
|
171
|
+
model = beginning_of_chain
|
|
172
|
+
if nested? && nested.association && nested.association.collection? && model.columns_hash[column = model.inheritance_column]
|
|
173
|
+
model_name = params.delete(column) # in new action inheritance_column must be in params
|
|
174
|
+
model_name ||= params[:record].delete(column) unless params[:record].blank? # in create action must be inside record key
|
|
175
|
+
model_name = model_name.camelize if model_name
|
|
176
|
+
model_name ||= active_scaffold_config.model.name
|
|
177
|
+
build_options = {column.to_sym => model_name} if model_name
|
|
178
|
+
end
|
|
179
|
+
model.respond_to?(:build) ? model.build(build_options || {}) : model.new
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
private
|
|
183
|
+
def respond_to_action(action)
|
|
184
|
+
respond_to do |type|
|
|
185
|
+
action_formats.each do |format|
|
|
186
|
+
type.send(format) do
|
|
187
|
+
if respond_to?(method_name = "#{action}_respond_to_#{format}")
|
|
188
|
+
send(method_name)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def action_formats
|
|
196
|
+
@action_formats ||= if respond_to? "#{action_name}_formats", true
|
|
197
|
+
send("#{action_name}_formats")
|
|
198
|
+
else
|
|
199
|
+
(default_formats + active_scaffold_config.formats).uniq
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
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', :formats => [: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
|
+
list
|
|
52
|
+
else
|
|
53
|
+
render(:action => 'create')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def create_respond_to_js
|
|
60
|
+
do_refresh_list if successful? && active_scaffold_config.create.refresh_list && !render_parent?
|
|
61
|
+
render :action => 'on_create'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def create_respond_to_xml
|
|
65
|
+
render :xml => response_object.to_xml(:only => active_scaffold_config.create.columns.names), :content_type => Mime::XML, :status => response_status, :location => response_location
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def create_respond_to_json
|
|
69
|
+
render :text => response_object.to_json(:only => active_scaffold_config.create.columns.names), :content_type => Mime::JSON, :status => response_status, :location => response_location
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def create_respond_to_yaml
|
|
73
|
+
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
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# A simple method to find and prepare an example new record for the form
|
|
77
|
+
# May be overridden to customize the behavior (add default values, for instance)
|
|
78
|
+
def do_new
|
|
79
|
+
@record = new_model
|
|
80
|
+
apply_constraints_to_record(@record)
|
|
81
|
+
create_association_with_parent(@record) if nested?
|
|
82
|
+
@record
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# A somewhat complex method to actually create a new record. The complexity is from support for subforms and associated records.
|
|
86
|
+
# If you want to customize this behavior, consider using the +before_create_save+ and +after_create_save+ callbacks.
|
|
87
|
+
def do_create(options = {})
|
|
88
|
+
attributes = options[:attributes] || params[:record]
|
|
89
|
+
begin
|
|
90
|
+
active_scaffold_config.model.transaction do
|
|
91
|
+
@record = update_record_from_params(new_model, active_scaffold_config.create.columns, attributes)
|
|
92
|
+
apply_constraints_to_record(@record, :allow_autosave => true)
|
|
93
|
+
create_association_with_parent(@record) if nested?
|
|
94
|
+
before_create_save(@record)
|
|
95
|
+
self.successful = [@record.valid?, @record.associated_valid?].all? {|v| v == true} # this syntax avoids a short-circuit
|
|
96
|
+
create_save(@record) unless options[:skip_save]
|
|
97
|
+
end
|
|
98
|
+
rescue ActiveRecord::ActiveRecordError => ex
|
|
99
|
+
flash[:error] = ex.message
|
|
100
|
+
self.successful = false
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def create_save(record)
|
|
105
|
+
if successful?
|
|
106
|
+
record.save! and record.save_associated!
|
|
107
|
+
after_create_save(record)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# override this method if you want to inject data in the record (or its associated objects) before the save
|
|
112
|
+
def before_create_save(record); end
|
|
113
|
+
|
|
114
|
+
# override this method if you want to do something after the save
|
|
115
|
+
def after_create_save(record); end
|
|
116
|
+
|
|
117
|
+
# The default security delegates to ActiveRecordPermissions.
|
|
118
|
+
# You may override the method to customize.
|
|
119
|
+
|
|
120
|
+
def create_ignore?
|
|
121
|
+
nested? && active_scaffold_config.list.always_show_create
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def create_authorized?
|
|
125
|
+
(!nested? || !nested.readonly? || !nested.through?) && authorized_for?(:crud_type => :create)
|
|
126
|
+
end
|
|
127
|
+
private
|
|
128
|
+
def create_authorized_filter
|
|
129
|
+
link = active_scaffold_config.create.link || active_scaffold_config.create.class.link
|
|
130
|
+
raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
|
|
131
|
+
end
|
|
132
|
+
def new_formats
|
|
133
|
+
(default_formats + active_scaffold_config.formats).uniq
|
|
134
|
+
end
|
|
135
|
+
def create_formats
|
|
136
|
+
(default_formats + active_scaffold_config.formats + active_scaffold_config.create.formats).uniq
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
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? ? '' : ": #{@record.to_label}"}", :header_message => '', :message => "#{@record.class.model_name.human.downcase}#{@record.new_record? ? '' : ": #{@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
|
+
do_refresh_list if successful? && active_scaffold_config.delete.refresh_list && !render_parent?
|
|
27
|
+
render(:action => 'destroy')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def destroy_respond_to_xml
|
|
31
|
+
render :xml => successful? ? "" : response_object.to_xml(:only => active_scaffold_config.list.columns.names), :content_type => Mime::XML, :status => response_status
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def destroy_respond_to_json
|
|
35
|
+
render :text => successful? ? "" : response_object.to_json(:only => active_scaffold_config.list.columns.names), :content_type => Mime::JSON, :status => response_status
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def destroy_respond_to_yaml
|
|
39
|
+
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
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def destroy_find_record
|
|
43
|
+
@record = find_if_allowed(params[:id], :delete)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# A simple method to handle the actual destroying of a record
|
|
47
|
+
# May be overridden to customize the behavior
|
|
48
|
+
def do_destroy
|
|
49
|
+
@record ||= destroy_find_record
|
|
50
|
+
begin
|
|
51
|
+
self.successful = @record.destroy
|
|
52
|
+
rescue Exception => ex
|
|
53
|
+
flash[:warning] = as_(:cant_destroy_record, :record => @record.to_label)
|
|
54
|
+
self.successful = false
|
|
55
|
+
logger.debug ex.message
|
|
56
|
+
logger.debug ex.backtrace.join("\n")
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# The default security delegates to ActiveRecordPermissions.
|
|
61
|
+
# You may override the method to customize.
|
|
62
|
+
def delete_authorized?(record = nil)
|
|
63
|
+
(!nested? || !nested.readonly?) && (record || self).send(:authorized_for?, :crud_type => :delete)
|
|
64
|
+
end
|
|
65
|
+
private
|
|
66
|
+
def delete_authorized_filter
|
|
67
|
+
link = active_scaffold_config.delete.link || active_scaffold_config.delete.class.link
|
|
68
|
+
raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
|
|
69
|
+
end
|
|
70
|
+
def destroy_formats
|
|
71
|
+
(default_formats + active_scaffold_config.formats + active_scaffold_config.delete.formats).uniq
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|