browsercms 3.4.2 → 3.5.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.
- data/README.markdown +1 -0
- data/app/assets/images/cms/file-uploading.gif +0 -0
- data/app/assets/javascripts/cms/application.js +1 -0
- data/app/assets/javascripts/cms/attachment_manager.js.erb +87 -0
- data/app/assets/javascripts/cms/core_library.js.erb +38 -25
- data/app/assets/stylesheets/cms/application.css.erb +1 -0
- data/app/assets/stylesheets/cms/attachment_manager.css.scss +28 -0
- data/app/controllers/cms/application_controller.rb +1 -1
- data/app/controllers/cms/attachments_controller.rb +45 -10
- data/app/controllers/cms/cache_controller.rb +1 -1
- data/app/controllers/cms/content_block_controller.rb +134 -122
- data/app/controllers/cms/content_controller.rb +143 -155
- data/app/controllers/cms/dashboard_controller.rb +11 -9
- data/app/controllers/cms/error_handling.rb +19 -7
- data/app/controllers/cms/file_blocks_controller.rb +2 -2
- data/app/controllers/cms/home_controller.rb +3 -0
- data/app/controllers/cms/section_nodes_controller.rb +52 -44
- data/app/controllers/cms/sections_controller.rb +4 -2
- data/app/controllers/cms/toolbar_controller.rb +14 -10
- data/app/helpers/cms/application_helper.rb +23 -19
- data/app/helpers/cms/form_builder.rb +65 -18
- data/app/helpers/cms/mobile_helper.rb +19 -0
- data/app/helpers/cms/path_helper.rb +30 -4
- data/app/helpers/cms/rendering_helper.rb +9 -1
- data/app/models/cms/abstract_file_block.rb +6 -6
- data/app/models/cms/attachment.rb +196 -107
- data/app/models/cms/category.rb +3 -0
- data/app/models/cms/category_type.rb +2 -0
- data/app/models/cms/connector.rb +3 -0
- data/app/models/cms/content_type.rb +3 -0
- data/app/models/cms/content_type_group.rb +2 -0
- data/app/models/cms/dynamic_view.rb +4 -0
- data/app/models/cms/email_message.rb +2 -0
- data/app/models/cms/file_block.rb +9 -2
- data/app/models/cms/group.rb +5 -2
- data/app/models/cms/group_permission.rb +2 -0
- data/app/models/cms/group_section.rb +3 -0
- data/app/models/cms/group_type.rb +2 -0
- data/app/models/cms/group_type_permission.rb +2 -0
- data/app/models/cms/html_block.rb +3 -2
- data/app/models/cms/image_block.rb +13 -2
- data/app/models/cms/page.rb +14 -3
- data/app/models/cms/page_route.rb +4 -0
- data/app/models/cms/page_route_condition.rb +1 -0
- data/app/models/cms/page_route_option.rb +2 -0
- data/app/models/cms/page_route_requirement.rb +1 -0
- data/app/models/cms/permission.rb +3 -0
- data/app/models/cms/portlet.rb +2 -2
- data/app/models/cms/redirect.rb +2 -0
- data/app/models/cms/section.rb +15 -1
- data/app/models/cms/section_node.rb +1 -0
- data/app/models/cms/site.rb +3 -0
- data/app/models/cms/tag.rb +2 -0
- data/app/models/cms/tagging.rb +3 -0
- data/app/models/cms/task.rb +5 -1
- data/app/models/cms/user.rb +1 -1
- data/app/models/cms/user_group_membership.rb +3 -0
- data/app/views/cms/attachments/_attachment.html.erb +14 -0
- data/app/views/cms/attachments/_attachment_table.html.erb +17 -0
- data/app/views/cms/attachments/_attachment_wrapper.html.erb +4 -0
- data/app/views/cms/blocks/index.html.erb +2 -3
- data/app/views/cms/blocks/show.html.erb +1 -1
- data/app/views/cms/dynamic_views/index.html.erb +1 -1
- data/app/views/cms/email_messages/index.html.erb +1 -1
- data/app/views/cms/file_blocks/_form.html.erb +1 -27
- data/app/views/cms/file_blocks/_section_selector.html.erb +13 -0
- data/app/views/cms/file_blocks/render.html.erb +3 -3
- data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +26 -0
- data/app/views/cms/form_builder/_cms_file_field.html.erb +27 -35
- data/app/views/cms/groups/index.html.erb +1 -1
- data/app/views/cms/image_blocks/_form.html.erb +1 -27
- data/app/views/cms/image_blocks/render.html.erb +4 -1
- data/app/views/cms/page_routes/index.html.erb +3 -0
- data/app/views/cms/shared/error.xml.erb +8 -0
- data/app/views/cms/tags/render.html.erb +1 -1
- data/app/views/cms/toolbar/_mobile_toggle.html.erb +33 -0
- data/app/views/cms/users/index.html.erb +1 -1
- data/app/views/layouts/_page_toolbar.html.erb +2 -1
- data/bin/bcms +21 -26
- data/config/routes.rb +3 -2
- data/db/browsercms.seeds.rb +2 -1
- data/db/migrate/20111130221145_browsercms340.rb +5 -4
- data/db/migrate/20120329144406_browsercms350.rb +32 -0
- data/{test/dummy/db → db}/schema.rb +97 -128
- data/{performance_tuning_notes.md → doc/performance_tuning_notes.md} +0 -0
- data/doc/release_notes.md +74 -0
- data/lib/browsercms.rb +3 -0
- data/lib/cms/acts/content_block.rb +10 -2
- data/lib/cms/addressable.rb +8 -0
- data/lib/cms/attachments/attachment_serving.rb +59 -0
- data/lib/cms/attachments/configuration.rb +88 -0
- data/lib/cms/behaviors/attaching.rb +305 -136
- data/lib/cms/behaviors/connecting.rb +3 -4
- data/lib/cms/behaviors/dynamic_attributes.rb +121 -118
- data/lib/cms/behaviors/flush_cache_on_change.rb +1 -3
- data/lib/cms/behaviors/naming.rb +16 -0
- data/lib/cms/behaviors/pagination.rb +4 -1
- data/lib/cms/behaviors/publishing.rb +9 -3
- data/lib/cms/behaviors/searching.rb +3 -8
- data/lib/cms/behaviors/soft_deleting.rb +1 -0
- data/lib/cms/behaviors/taggable.rb +2 -0
- data/lib/cms/behaviors/versioning.rb +73 -120
- data/lib/cms/caching.rb +53 -11
- data/lib/cms/commands/actions.rb +19 -2
- data/lib/cms/configuration.rb +44 -0
- data/lib/cms/content_rendering_support.rb +9 -6
- data/lib/cms/default_accessible.rb +13 -0
- data/lib/cms/domain_support.rb +22 -0
- data/lib/cms/engine.rb +40 -19
- data/lib/cms/engine_helper.rb +54 -0
- data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +14 -2
- data/lib/cms/mobile_aware.rb +67 -0
- data/lib/cms/route_extensions.rb +3 -0
- data/lib/cms/upgrades/v3_5_0.rb +155 -0
- data/lib/cms/version.rb +6 -1
- data/lib/generators/cms/content_block/content_block_generator.rb +14 -9
- data/lib/generators/cms/content_block/templates/_form.html.erb +17 -6
- data/lib/generators/cms/content_block/templates/render.html.erb +12 -5
- data/lib/generators/cms/template/template_generator.rb +11 -2
- data/lib/tasks/cms.rake +23 -0
- data/lib/templates/active_record/model/model.rb +6 -0
- metadata +127 -517
- data/.gitignore +0 -24
- data/.rvmrc +0 -2
- data/Gemfile +0 -29
- data/Gemfile.lock +0 -196
- data/Rakefile +0 -97
- data/app/assets/images/browsercms/.gitkeep +0 -0
- data/app/controllers/browsercms/application_controller.rb +0 -4
- data/browsercms.gemspec +0 -35
- data/config/cucumber.yml +0 -8
- data/config/database.jdbcmysql.yml +0 -30
- data/config/database.mysql.yml +0 -27
- data/config/database.postgres.yml +0 -25
- data/config/database.sqlite3.yml +0 -11
- data/config/environment.rb +0 -6
- data/config/initializers/query_reviewer_patch.rb +0 -12
- data/config/initializers/rack_1_2_1_patch.rb +0 -12
- data/config/locales/en.yml +0 -5
- data/features/acts_as_content_page.feature +0 -62
- data/features/add_content_to_pages.feature +0 -45
- data/features/caching.feature +0 -13
- data/features/ckeditor.feature +0 -11
- data/features/commands/confirm_aruba_works.feature +0 -24
- data/features/commands/generate_module.feature +0 -54
- data/features/commands/install_browsercms.feature +0 -21
- data/features/commands/new_demo_project.feature +0 -30
- data/features/commands/new_projects.feature +0 -50
- data/features/commands/upgrade_modules_to_3_4_0_from_3_1_x.feature +0 -19
- data/features/commands/upgrade_project_to_3_4_0_from_3_3_x.feature +0 -52
- data/features/commands/upgrading_modules.feature +0 -67
- data/features/content_blocks/manage_custom_blocks.feature +0 -67
- data/features/content_blocks/manage_html_blocks.feature +0 -48
- data/features/content_blocks/manage_image_blocks.feature +0 -41
- data/features/content_files.feature +0 -37
- data/features/content_pages.feature +0 -21
- data/features/generators/content_blocks_for_modules.feature +0 -58
- data/features/generators/content_blocks_for_projects.feature +0 -109
- data/features/install_content.feature +0 -25
- data/features/jquery-testplan.txt +0 -12
- data/features/manage_groups.feature +0 -33
- data/features/manage_page_routes.feature +0 -72
- data/features/manage_redirects.feature +0 -20
- data/features/manage_sections.feature +0 -12
- data/features/manage_tasks.feature +0 -25
- data/features/manage_users.feature +0 -38
- data/features/page_templates.feature +0 -49
- data/features/portlets/email_friend_portlet.feature +0 -29
- data/features/portlets/portlets.feature +0 -100
- data/features/portlets/tag_cloud_portlet.feature +0 -28
- data/features/sitemap/create_pages.feature +0 -15
- data/features/sitemap/manage_links.feature +0 -29
- data/features/sitemap/sitemap.feature +0 -18
- data/features/step_definitions/acts_as_content_page_steps.rb.rb +0 -3
- data/features/step_definitions/ckeditor_steps.rb +0 -13
- data/features/step_definitions/command_line_steps.rb +0 -212
- data/features/step_definitions/content_pages_steps.rb +0 -170
- data/features/step_definitions/data_steps.rb +0 -48
- data/features/step_definitions/edit_page_templates_steps.rb +0 -21
- data/features/step_definitions/html_blocks_steps.rb +0 -9
- data/features/step_definitions/install_content_steps.rb +0 -4
- data/features/step_definitions/manage_content_blocks_steps.rb +0 -26
- data/features/step_definitions/manage_image_blocks_steps.rb +0 -31
- data/features/step_definitions/manage_sections_steps.rb +0 -18
- data/features/step_definitions/manage_user_steps.rb +0 -22
- data/features/step_definitions/more_custom_block_steps.rb +0 -34
- data/features/step_definitions/page_route_steps.rb +0 -65
- data/features/step_definitions/page_template_steps.rb +0 -5
- data/features/step_definitions/permissions_steps.rb +0 -13
- data/features/step_definitions/portlets_steps.rb +0 -64
- data/features/step_definitions/redirect_steps.rb +0 -12
- data/features/step_definitions/sitemap_steps.rb +0 -18
- data/features/step_definitions/tag_cloud_steps.rb +0 -11
- data/features/step_definitions/task_steps.rb +0 -4
- data/features/step_definitions/taxonomy_steps.rb +0 -16
- data/features/step_definitions/upgrade_module_steps.rb +0 -76
- data/features/step_definitions/web_steps.rb +0 -211
- data/features/support/async_support.rb +0 -17
- data/features/support/command_line_helpers.rb +0 -63
- data/features/support/debug_formatter.rb +0 -7
- data/features/support/debugging.rb +0 -28
- data/features/support/env.rb +0 -73
- data/features/support/git_api.rb +0 -9
- data/features/support/open_on_first_failure.rb +0 -25
- data/features/support/paths.rb +0 -32
- data/features/support/rails_api.rb +0 -8
- data/features/support/selectors.rb +0 -39
- data/features/support/transforms.rb +0 -7
- data/features/taxonomy/add_content_with_category.feature +0 -30
- data/features/taxonomy/manage_categories.feature +0 -20
- data/features/taxonomy/manage_category_types.feature +0 -16
- data/lib/cms/init.rb +0 -105
- data/lib/tasks/data.rake +0 -43
- data/lib/tasks/db.rake +0 -82
- data/public/styled_file_field/index.html +0 -72
- data/script/cucumber +0 -10
- data/script/rails +0 -6
- data/test/console_helper.rb +0 -5
- data/test/custom_assertions.rb +0 -84
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/assets/javascripts/application.js +0 -9
- data/test/dummy/app/assets/javascripts/content_page.js +0 -2
- data/test/dummy/app/assets/stylesheets/application.css +0 -7
- data/test/dummy/app/assets/stylesheets/content_page.css +0 -4
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/controllers/cms/products_controller.rb +0 -2
- data/test/dummy/app/controllers/cms/sample_blocks_controller.rb +0 -3
- data/test/dummy/app/controllers/content_page_controller.rb +0 -13
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/helpers/content_page_helper.rb +0 -2
- data/test/dummy/app/mailers/.gitkeep +0 -0
- data/test/dummy/app/models/.gitkeep +0 -0
- data/test/dummy/app/models/cms/sample_block.rb +0 -22
- data/test/dummy/app/models/product.rb +0 -5
- data/test/dummy/app/views/cms/products/_form.html.erb +0 -7
- data/test/dummy/app/views/cms/products/render.html.erb +0 -3
- data/test/dummy/app/views/content_page/custom_page.html.erb +0 -3
- data/test/dummy/app/views/content_page/index.html.erb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/app/views/layouts/templates/default.html.erb +0 -17
- data/test/dummy/app/views/layouts/templates/subpage.html.erb +0 -16
- data/test/dummy/app/views/test_route/index.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -45
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.yml +0 -27
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -32
- data/test/dummy/config/environments/production.rb +0 -60
- data/test/dummy/config/environments/test.rb +0 -46
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/browsercms.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -10
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/quiet_sprocket_assets.rb +0 -13
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -23
- data/test/dummy/db/migrate/20111228141250_create_products.rb +0 -16
- data/test/dummy/db/seeds.rb +0 -1
- data/test/dummy/lib/assets/.gitkeep +0 -0
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -26
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +0 -6
- data/test/dummy/test/functional/content_page_controller_test.rb +0 -9
- data/test/dummy/test/unit/helpers/content_page_helper_test.rb +0 -4
- data/test/factories.rb +0 -235
- data/test/fixtures/multipart/foo.jpg +0 -0
- data/test/fixtures/multipart/sample_upload.txt +0 -1
- data/test/fixtures/multipart/second_upload.txt +0 -1
- data/test/fixtures/multipart/test.jpg +0 -0
- data/test/fixtures/multipart/version1.txt +0 -1
- data/test/fixtures/multipart/version2.txt +0 -1
- data/test/functional/cms/cache_controller_test.rb +0 -16
- data/test/functional/cms/categories_controller_test.rb +0 -28
- data/test/functional/cms/connectors_controller_test.rb +0 -64
- data/test/functional/cms/content_block_controller_test.rb +0 -127
- data/test/functional/cms/content_controller_test.rb +0 -351
- data/test/functional/cms/dashboard_controller_test.rb +0 -20
- data/test/functional/cms/file_blocks_controller_test.rb +0 -55
- data/test/functional/cms/home_controller_test.rb +0 -160
- data/test/functional/cms/html_blocks_controller_test.rb +0 -159
- data/test/functional/cms/image_blocks_controller_test.rb +0 -78
- data/test/functional/cms/links_controller_test.rb +0 -92
- data/test/functional/cms/log/test.log +0 -0
- data/test/functional/cms/pages_controller_test.rb +0 -233
- data/test/functional/cms/portlets_controller_test.rb +0 -57
- data/test/functional/cms/sections_controller_test.rb +0 -234
- data/test/functional/cms/sessions_controller_test.rb +0 -80
- data/test/functional/cms/tasks_controller_test.rb +0 -64
- data/test/functional/cms/toolbar_controller_test.rb +0 -76
- data/test/functional/cms/users_controller_test.rb +0 -218
- data/test/integration/cms/password_management_test.rb +0 -66
- data/test/integration/sitemap_performance_test.rb +0 -26
- data/test/mock_file.rb +0 -33
- data/test/performance/browsing_test.rb +0 -9
- data/test/support/engine_controller_hacks.rb +0 -34
- data/test/support/factory_helpers.rb +0 -57
- data/test/support/rails_3_1_routes_hack.rb +0 -70
- data/test/test_helper.rb +0 -199
- data/test/test_logging.rb +0 -67
- data/test/unit/active_record_callbacks.rb +0 -50
- data/test/unit/behaviors/attaching_test.rb +0 -370
- data/test/unit/behaviors/cms_user_test.rb +0 -67
- data/test/unit/behaviors/connectable_test.rb +0 -32
- data/test/unit/behaviors/connecting_test.rb +0 -56
- data/test/unit/behaviors/dynamic_attributes_test.rb +0 -74
- data/test/unit/behaviors/namespacing_test.rb +0 -76
- data/test/unit/behaviors/publishable_test.rb +0 -83
- data/test/unit/behaviors/rendering_test.rb +0 -68
- data/test/unit/behaviors/searching_test.rb +0 -102
- data/test/unit/behaviors/taggable_test.rb +0 -110
- data/test/unit/behaviors/userstamping_test.rb +0 -27
- data/test/unit/behaviors/versioning_test.rb +0 -102
- data/test/unit/extensions/active_record/base_test.rb +0 -25
- data/test/unit/extensions/hash_test.rb +0 -26
- data/test/unit/extensions/integer_test.rb +0 -10
- data/test/unit/extensions/string_test.rb +0 -14
- data/test/unit/factories_test.rb +0 -50
- data/test/unit/generators/install_generator_test.rb +0 -15
- data/test/unit/helpers/application_helper_test.rb +0 -104
- data/test/unit/helpers/date_picker_test.rb +0 -17
- data/test/unit/helpers/menu_helper_test.rb +0 -240
- data/test/unit/helpers/page_helper_test.rb +0 -69
- data/test/unit/helpers/path_helper_test.rb +0 -38
- data/test/unit/helpers/rendering_helper_test.rb +0 -8
- data/test/unit/lib/acts_as_content_page_test.rb +0 -72
- data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
- data/test/unit/lib/cms/engine_helper_test.rb +0 -119
- data/test/unit/lib/cms/sitemap_test.rb +0 -210
- data/test/unit/lib/cms_domain_support_test.rb +0 -44
- data/test/unit/lib/command_line_test.rb +0 -70
- data/test/unit/lib/content_block_test.rb +0 -304
- data/test/unit/lib/content_rendering_support_test.rb +0 -40
- data/test/unit/lib/generators_test.rb +0 -40
- data/test/unit/lib/routes_test.rb +0 -98
- data/test/unit/mock_file_test.rb +0 -19
- data/test/unit/models/attachment_test.rb +0 -160
- data/test/unit/models/category_test.rb +0 -40
- data/test/unit/models/category_type_test.rb +0 -8
- data/test/unit/models/connector_test.rb +0 -152
- data/test/unit/models/content_type_group_test.rb +0 -26
- data/test/unit/models/content_type_test.rb +0 -177
- data/test/unit/models/dynamic_views_test.rb +0 -36
- data/test/unit/models/email_page_portlet_test.rb +0 -20
- data/test/unit/models/file_block_test.rb +0 -246
- data/test/unit/models/group_test.rb +0 -29
- data/test/unit/models/html_block_test.rb +0 -121
- data/test/unit/models/image_block_test.rb +0 -35
- data/test/unit/models/link_test.rb +0 -52
- data/test/unit/models/namespaces_test.rb +0 -57
- data/test/unit/models/page_partial_test.rb +0 -37
- data/test/unit/models/page_route_test.rb +0 -113
- data/test/unit/models/page_template_test.rb +0 -50
- data/test/unit/models/page_test.rb +0 -879
- data/test/unit/models/permission_test.rb +0 -10
- data/test/unit/models/portlet_test.rb +0 -99
- data/test/unit/models/sections_test.rb +0 -278
- data/test/unit/models/site_test.rb +0 -50
- data/test/unit/models/task_test.rb +0 -150
- data/test/unit/models/user_test.rb +0 -358
- data/test/unit/schema_statements_test.rb +0 -137
- data/todo_list.markdown +0 -50
|
@@ -13,18 +13,18 @@ module Cms
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def handle_not_found_on_page(exception)
|
|
16
|
-
logger.warn "
|
|
16
|
+
logger.warn "Resource not found: Returning the 404 page."
|
|
17
17
|
handle_error_with_cms_page(Cms::ErrorPages::NOT_FOUND_PATH, exception, :not_found)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def handle_access_denied_on_page(exception)
|
|
21
|
-
logger.warn "Access
|
|
21
|
+
logger.warn "Access denied for user '#{current_user.login}': Returning the 403 page."
|
|
22
22
|
handle_error_with_cms_page(Cms::ErrorPages::FORBIDDEN_PATH, exception, :forbidden)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def handle_server_error_on_page(exception)
|
|
26
|
-
logger.
|
|
27
|
-
logger.
|
|
26
|
+
logger.error "An Unexpected exception occurred: #{exception.message}\n"
|
|
27
|
+
logger.error "#{exception.backtrace.join("\n")}\n"
|
|
28
28
|
handle_error_with_cms_page(Cms::ErrorPages::SERVER_ERROR_PATH, exception, :internal_server_error)
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -43,7 +43,7 @@ module Cms
|
|
|
43
43
|
# We must be showing the page outside of the CMS
|
|
44
44
|
# So we will show the error page
|
|
45
45
|
if @page = Cms::Page.find_live_by_path(error_page_path)
|
|
46
|
-
logger.
|
|
46
|
+
logger.debug "Rendering Error Page: #{@page.inspect}"
|
|
47
47
|
@mode = "view"
|
|
48
48
|
@show_page_toolbar = false
|
|
49
49
|
|
|
@@ -59,7 +59,10 @@ module Cms
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
prepare_connectables_for_render
|
|
62
|
-
|
|
62
|
+
|
|
63
|
+
# The error pages are ALWAYS html since they are managed by the CMS as normal pages.
|
|
64
|
+
# So .gif or .jpg requests that throw errors will return html rather than a format warning.
|
|
65
|
+
render :layout => @page.layout, :template => 'cms/content/show', :status => status, :formats=>[:html]
|
|
63
66
|
else
|
|
64
67
|
handle_server_error(exception)
|
|
65
68
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module DefaultAccessible
|
|
3
|
+
|
|
4
|
+
def self.included(model_class)
|
|
5
|
+
model_class.attribute_names.each do |name|
|
|
6
|
+
unless [:id, :type, :created_by_id, :updated_by_id, :created_at, :updated_at].include?(name.to_sym)
|
|
7
|
+
model_class.attr_accessible name
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/cms/domain_support.rb
CHANGED
|
@@ -11,10 +11,32 @@ module Cms
|
|
|
11
11
|
"cms"
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
def request_is_for_cms_subdomain?
|
|
15
|
+
cms_site?
|
|
16
|
+
end
|
|
17
|
+
|
|
14
18
|
def cms_site?
|
|
15
19
|
subdomains = request.subdomains
|
|
16
20
|
subdomains.shift if subdomains.first == "www"
|
|
17
21
|
subdomains.first == cms_domain_prefix
|
|
18
22
|
end
|
|
23
|
+
|
|
24
|
+
# Determines if users should be redirected between the public (www.) and admin (cms.) subdomains.
|
|
25
|
+
def using_cms_subdomains?
|
|
26
|
+
result = (wants_to_use_subdomains? && perform_caching)
|
|
27
|
+
#Rails.logger.debug {"Are we using cms subdomains? #{result} based on 'want subdomain: #{wants_to_use_subdomains?}' and perform_caching: '#{perform_caching}'"}
|
|
28
|
+
result
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def should_write_to_page_cache?
|
|
32
|
+
using_cms_subdomains?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def wants_to_use_subdomains?
|
|
38
|
+
!Rails.configuration.cms.use_single_domain
|
|
39
|
+
end
|
|
40
|
+
|
|
19
41
|
end
|
|
20
42
|
end
|
data/lib/cms/engine.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'rails'
|
|
2
2
|
require 'cms/module'
|
|
3
|
-
require 'cms/
|
|
3
|
+
require 'cms/configuration'
|
|
4
|
+
require 'cms/version'
|
|
4
5
|
require 'browsercms'
|
|
5
6
|
|
|
6
7
|
# Gem name is different than file name
|
|
@@ -9,52 +10,72 @@ require 'browsercms'
|
|
|
9
10
|
require 'ckeditor-rails'
|
|
10
11
|
|
|
11
12
|
# Explicitly require this, so that CMS projects do not need to add it to their Gemfile
|
|
12
|
-
#
|
|
13
|
+
# especially while upgrading
|
|
13
14
|
require 'jquery-rails'
|
|
14
15
|
|
|
15
16
|
module Cms
|
|
16
17
|
|
|
17
|
-
# Configuring BrowserCMS as an engine. This seems to work, but could probably be cleaned up.
|
|
18
|
-
#
|
|
19
18
|
class Engine < Rails::Engine
|
|
20
19
|
include Cms::Module
|
|
21
20
|
isolate_namespace Cms
|
|
22
21
|
|
|
22
|
+
config.cms = ActiveSupport::OrderedOptions.new
|
|
23
|
+
config.cms.attachments = ActiveSupport::OrderedOptions.new
|
|
23
24
|
|
|
24
|
-
# Make sure we use our rails model template
|
|
25
|
+
# Make sure we use our rails model template (rather then its default) when `rails g cms:content_block` is run.
|
|
25
26
|
config.app_generators do |g|
|
|
26
27
|
path = File::expand_path('../../templates', __FILE__)
|
|
27
28
|
g.templates.unshift path
|
|
28
29
|
end
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Rails.logger.debug "Adding Cms::Routes to ActionDispatch"
|
|
36
|
-
ActionDispatch::Routing::Mapper.send :include, Cms::RouteExtensions
|
|
31
|
+
# Ensure Attachments are configured:
|
|
32
|
+
# 1. Before every request in development mode
|
|
33
|
+
# 2. Once in production
|
|
34
|
+
config.to_prepare do
|
|
35
|
+
Attachments.configure
|
|
37
36
|
end
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
# Set reasonable defaults
|
|
39
|
+
# These default values can be changed by developers in their projects in their application.rb or environment's files.
|
|
40
|
+
config.before_configuration do |app|
|
|
41
|
+
|
|
42
|
+
# Default cache directories.
|
|
43
|
+
app.config.cms.mobile_cache_directory = File.join(Rails.root, 'public', 'cache', 'mobile')
|
|
44
|
+
app.config.cms.page_cache_directory = File.join(Rails.root, 'public', 'cache', 'full')
|
|
45
|
+
|
|
46
|
+
# Default storage for uploaded files
|
|
47
|
+
app.config.cms.attachments.storage = :filesystem
|
|
48
|
+
app.config.cms.attachments.storage_directory = File.join(Rails.root, 'tmp', 'uploads')
|
|
49
|
+
|
|
50
|
+
# Determines if a single domain will be used (i.e. www) or multiple subdomains (www and cms). Enabling this will
|
|
51
|
+
# turn off page caching and not handle redirects between subdomains.
|
|
52
|
+
app.config.cms.use_single_domain = false
|
|
53
|
+
|
|
54
|
+
# Used to send emails with links back to the Cms Admin. In production, this should include the www. of the public site.
|
|
55
|
+
# Matters less in development, as emails generally aren't sent.
|
|
56
|
+
# I.e.
|
|
57
|
+
# config.cms.site_domain = "www.browsercms.org"
|
|
58
|
+
app.config.cms.site_domain = "localhost:3000"
|
|
42
59
|
end
|
|
43
60
|
|
|
44
|
-
initializer
|
|
45
|
-
|
|
61
|
+
initializer 'browsercms.add_core_routes', :after => 'action_dispatch.prepare_dispatcher' do |app|
|
|
62
|
+
ActionDispatch::Routing::Mapper.send :include, Cms::RouteExtensions
|
|
46
63
|
end
|
|
47
64
|
|
|
48
|
-
|
|
65
|
+
initializer 'browsercms.add_load_paths', :after => 'action_controller.deprecated_routes' do |app|
|
|
49
66
|
ActiveSupport::Dependencies.autoload_paths += %W( #{self.root}/vendor #{self.root}/app/mailers #{self.root}/app/helpers)
|
|
50
67
|
ActiveSupport::Dependencies.autoload_paths += %W( #{self.root}/app/controllers #{self.root}/app/models #{self.root}/app/portlets)
|
|
51
68
|
ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/portlets )
|
|
52
69
|
ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/portlets/helpers )
|
|
53
70
|
ActionController::Base.append_view_path DynamicView.base_path
|
|
54
71
|
ActionController::Base.append_view_path %W( #{self.root}/app/views)
|
|
55
|
-
|
|
56
72
|
ActionView::Base.default_form_builder = Cms::FormBuilder
|
|
57
73
|
require 'jdbc_adapter' if defined?(JRUBY_VERSION)
|
|
58
74
|
end
|
|
75
|
+
|
|
76
|
+
initializer "browsercms.precompile_assets" do |app|
|
|
77
|
+
app.config.assets.precompile += ['cms/application.css']
|
|
78
|
+
end
|
|
79
|
+
|
|
59
80
|
end
|
|
60
81
|
end
|
data/lib/cms/engine_helper.rb
CHANGED
|
@@ -1,4 +1,58 @@
|
|
|
1
1
|
module Cms
|
|
2
|
+
|
|
3
|
+
class EngineAwarePathBuilder
|
|
4
|
+
|
|
5
|
+
def initialize(model_class_or_content_type_or_model)
|
|
6
|
+
# ContentType
|
|
7
|
+
if model_class_or_content_type_or_model.respond_to? :model_class
|
|
8
|
+
@path_subject = model_class_or_content_type_or_model.model_class
|
|
9
|
+
else # Class or Model
|
|
10
|
+
@path_subject = model_class_or_content_type_or_model
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# The object that will be added to the constructed path.
|
|
15
|
+
def path_subject
|
|
16
|
+
@path_subject
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def subject_class
|
|
20
|
+
if @path_subject.instance_of?(Class)
|
|
21
|
+
@path_subject
|
|
22
|
+
else
|
|
23
|
+
@path_subject.class
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def build(view)
|
|
28
|
+
path = []
|
|
29
|
+
path << engine_name
|
|
30
|
+
path << "cms" if main_app_model?
|
|
31
|
+
path << path_subject
|
|
32
|
+
|
|
33
|
+
path[0] = view.send(path[0]) # Replace the engine name with an actual lookup of the proper Engine routeset
|
|
34
|
+
path
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def main_app_model?
|
|
38
|
+
engine_name == "main_app"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Determine which 'Engine' this model is from based on the class
|
|
42
|
+
def engine_name
|
|
43
|
+
name = EngineHelper.module_name(subject_class)
|
|
44
|
+
return "main_app" unless name
|
|
45
|
+
|
|
46
|
+
begin
|
|
47
|
+
engine = "#{name}::Engine".constantize
|
|
48
|
+
rescue NameError
|
|
49
|
+
# This means there is no Engine for this model, so its from the main Rails App.
|
|
50
|
+
return "main_app"
|
|
51
|
+
end
|
|
52
|
+
engine.engine_name
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
2
56
|
module EngineHelper
|
|
3
57
|
|
|
4
58
|
def main_app_model?
|
|
@@ -100,16 +100,22 @@ module ActiveRecord
|
|
|
100
100
|
|
|
101
101
|
alias :drop_content_table :drop_versioned_table
|
|
102
102
|
|
|
103
|
+
# Rename a column for both its
|
|
104
|
+
def rename_content_column(table_name, old_name, new_name)
|
|
105
|
+
rename_column table_name, old_name, new_name
|
|
106
|
+
rename_column version_table_name(table_name), old_name, new_name
|
|
107
|
+
end
|
|
108
|
+
|
|
103
109
|
# Adds a column to both the primary and versioned table. Save needing two calls.
|
|
104
110
|
# This is only needed if your content block is versioned, otherwise add_column will work just fine.
|
|
105
111
|
def add_content_column(table_name, column_name, type, options={})
|
|
106
112
|
add_column table_name, column_name, type, options
|
|
107
|
-
add_column
|
|
113
|
+
add_column version_table_name(table_name), column_name, type, options
|
|
108
114
|
end
|
|
109
115
|
|
|
110
116
|
def remove_content_column(table_name, column_name)
|
|
111
117
|
remove_column table_name, column_name
|
|
112
|
-
remove_column
|
|
118
|
+
remove_column version_table_name(table_name), column_name
|
|
113
119
|
end
|
|
114
120
|
|
|
115
121
|
# Will namespace the content table
|
|
@@ -117,6 +123,12 @@ module ActiveRecord
|
|
|
117
123
|
table_exists?(Cms::Namespacing.prefixed_table_name(table_name))
|
|
118
124
|
end
|
|
119
125
|
|
|
126
|
+
private
|
|
127
|
+
|
|
128
|
+
def version_table_name(table_name)
|
|
129
|
+
"#{table_name.to_s.singularize}_versions".to_sym
|
|
130
|
+
end
|
|
131
|
+
|
|
120
132
|
end
|
|
121
133
|
end
|
|
122
134
|
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
module MobileAware
|
|
4
|
+
|
|
5
|
+
include Cms::DefaultCaches
|
|
6
|
+
|
|
7
|
+
# Looks for a mobile template if the request is mobile, falling back to the html template if it can't be found.
|
|
8
|
+
#
|
|
9
|
+
# @return [String] relative path/name of the layout to be rendered by a page (i.e. 'layouts/templates/default')
|
|
10
|
+
def determine_page_layout
|
|
11
|
+
if respond_as_mobile?
|
|
12
|
+
mobile_exists = template_exists?(@page.layout_name, "layouts/mobile")
|
|
13
|
+
return @page.layout(:mobile) if mobile_exists
|
|
14
|
+
end
|
|
15
|
+
@page.layout(:full)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# This is changing a class attribute in order to write the page cache to a different directory based on mobile vs full page request.
|
|
19
|
+
# @warning - May not be thread safe?
|
|
20
|
+
def select_cache_directory
|
|
21
|
+
if respond_as_mobile?
|
|
22
|
+
self.class.page_cache_directory = mobile_cache_directory
|
|
23
|
+
else
|
|
24
|
+
self.class.page_cache_directory = cms_cache_directory
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Because of caching, CMS pages should only return mobile content on a separate subdomain.
|
|
29
|
+
# or if a CMS editor wants to see the mobile version of the page.
|
|
30
|
+
#
|
|
31
|
+
# @return [Boolean] true if this request is considered 'mobile', false otherwise
|
|
32
|
+
def respond_as_mobile?
|
|
33
|
+
log "For mobile optimization, checking the subdomain for '#{request.domain}' is '#{request.subdomain}'."
|
|
34
|
+
if params[:template] =='mobile'
|
|
35
|
+
session[:mobile_mode] = true
|
|
36
|
+
elsif params[:template] =='full'
|
|
37
|
+
session[:mobile_mode] = false
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
request.subdomain == "m" || (session[:mobile_mode] == true && current_user.able_to?(:edit_content))
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def print_request_info
|
|
46
|
+
log "*" * 20
|
|
47
|
+
log "User Agent: #{request.user_agent}"
|
|
48
|
+
m = "Mobile Request?: "
|
|
49
|
+
if respond_as_mobile?
|
|
50
|
+
m += "Yes"
|
|
51
|
+
else
|
|
52
|
+
m += "No"
|
|
53
|
+
end
|
|
54
|
+
log m
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def log(m)
|
|
58
|
+
logger.debug m
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def banner(m)
|
|
62
|
+
log "*" * 20
|
|
63
|
+
log m
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
data/lib/cms/route_extensions.rb
CHANGED
|
@@ -40,6 +40,9 @@ module Cms::RouteExtensions
|
|
|
40
40
|
mount Cms::Engine => "/cms", :as => "cms"
|
|
41
41
|
|
|
42
42
|
add_page_routes_defined_in_database
|
|
43
|
+
|
|
44
|
+
# Handle 'stock' attachments
|
|
45
|
+
match "/attachments/:id/:filename", :to=>"cms/attachments#download"
|
|
43
46
|
match "/", :to=>"cms/content#show"
|
|
44
47
|
match "*path", :to=>"cms/content#show"
|
|
45
48
|
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module Cms
|
|
4
|
+
module Upgrades
|
|
5
|
+
|
|
6
|
+
module V3_5_0
|
|
7
|
+
def upgrade_to_3_5_0
|
|
8
|
+
gsub_file "config/environments/production.rb", /config.action_controller.page_cache_directory.+$/, ""
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Add additional methods to ActiveRecord::Migration when this file is required.
|
|
12
|
+
module FileStorageUpdates
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Old paths are:
|
|
16
|
+
# uploads/:year/:month/:day/:fingerprint
|
|
17
|
+
# i.e. uploads/2012/04/27/fb598......
|
|
18
|
+
#
|
|
19
|
+
# New paths use paperclip's :id_partition which creates paths like:
|
|
20
|
+
# uploads/000/000/001/:fingerprint
|
|
21
|
+
# where it splits the id into multiple directories
|
|
22
|
+
#
|
|
23
|
+
# @param [Cms::Attachment] attachment
|
|
24
|
+
# @return [String] path to location where an attachment should be (based on id)
|
|
25
|
+
def path_for_attachment(attachment)
|
|
26
|
+
new_id_dir = "#{Paperclip::Interpolations.id_partition(AttachmentWrapper.new(attachment), nil)}/original"
|
|
27
|
+
"#{new_id_dir}/#{attachment.data_fingerprint}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @return [String] Path to where an attachment should be
|
|
31
|
+
def path_to_attachment(attachment)
|
|
32
|
+
loc = path_for_attachment(attachment)
|
|
33
|
+
file_in_attachments_dir(loc)
|
|
34
|
+
end
|
|
35
|
+
# For a given class with an Attachment association (pre-3.5.0), migrate its attachment data to match the new
|
|
36
|
+
# table structure.
|
|
37
|
+
def migrate_attachment_for(klass)
|
|
38
|
+
klass.unscoped.find_each do |block|
|
|
39
|
+
Cms::Attachment.unscoped.update_all({:attachable_id => block.id,
|
|
40
|
+
:attachable_version => block.version,
|
|
41
|
+
:attachable_type => klass.name,
|
|
42
|
+
:attachment_name => "file",
|
|
43
|
+
:cardinality => 'single'},
|
|
44
|
+
{:id => block.attachment_id})
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
attachable_type = klass.name
|
|
48
|
+
# Special handling for File/Image blocks
|
|
49
|
+
if klass == Cms::FileBlock
|
|
50
|
+
attachable_type = "Cms::AbstractFileBlock"
|
|
51
|
+
elsif klass == Cms::ImageBlock
|
|
52
|
+
# Only need to do this once for both Image and File blocks since they share a table.
|
|
53
|
+
return
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
migrated_attachment_for_versioned_table(klass, attachable_type)
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def migrated_attachment_for_versioned_table(model_class, attachable_type)
|
|
61
|
+
version_model = model_class.version_class
|
|
62
|
+
|
|
63
|
+
found = version_model.find_by_sql("SELECT original_record_id, attachment_id, attachment_version, version from #{version_model.table_name}")
|
|
64
|
+
found.each do |version_record|
|
|
65
|
+
Cms::Attachment::Version.unscoped.update_all({:attachable_id => version_record.original_record_id,
|
|
66
|
+
:attachable_version => version_record.version,
|
|
67
|
+
:attachable_type => attachable_type,
|
|
68
|
+
:attachment_name => "file",
|
|
69
|
+
:cardinality => 'single'},
|
|
70
|
+
{:original_record_id => version_record.attachment_id, :version => version_record.attachment_version})
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Move the attachment files from the old file path path to new one. Updates the Attachment record to match.
|
|
75
|
+
def migrate_attachment_files_to_new_location
|
|
76
|
+
migrate_attachments_file_location(Cms::Attachment)
|
|
77
|
+
migrate_attachments_file_location(Cms::Attachment::Version)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Remove the attachment_version and attachment_id columns for all core CMS blocks.
|
|
81
|
+
def cleanup_attachment_columns_for_core_cms
|
|
82
|
+
cleanup_attachment_columns(Cms::FileBlock)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# The 'attachment_id and attachment_version are no longer stored in the model, but in the attachments table'
|
|
86
|
+
# @param [Class] model_class The model to have its columns cleaned up.
|
|
87
|
+
def cleanup_attachment_columns(model_class)
|
|
88
|
+
remove_content_column model_class.table_name, :attachment_id if column_exists?(model_class.table_name, :attachment_id)
|
|
89
|
+
remove_content_column model_class.table_name, :attachment_version if column_exists?(model_class.table_name, :attachment_id)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Removes the cms_attachments.file_location column
|
|
93
|
+
#
|
|
94
|
+
# data_fingerprint is used to store the file name instead now.
|
|
95
|
+
def cleanup_attachments_file_location
|
|
96
|
+
remove_content_column :cms_attachments, :file_location if column_exists?(:cms_attachments, :file_location)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Deletes the old file storage folders from the uploads directory.
|
|
100
|
+
#
|
|
101
|
+
def cleanup_attachment_file_storage
|
|
102
|
+
["2009", "2010", "2011", "2012"].each do |year|
|
|
103
|
+
folder_to_remove = File.join(attachments_dir, year)
|
|
104
|
+
FileUtils.rm_rf(folder_to_remove, :verbose => true)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
private
|
|
109
|
+
|
|
110
|
+
# Multiple version of attachments may point to the same file, so we need to test
|
|
111
|
+
# a file exists before moving. Failure to move isn't necessary an error, since it may have been moved in
|
|
112
|
+
# an earlier version
|
|
113
|
+
def migrate_attachments_file_location(model_class)
|
|
114
|
+
model_class.unscoped.each do |attachment|
|
|
115
|
+
from = File.join(attachments_dir, attachment.file_location)
|
|
116
|
+
to = path_to_attachment(attachment)
|
|
117
|
+
move_attachment_file(from, to)
|
|
118
|
+
|
|
119
|
+
new_fingerprint = attachment.file_location.split("/").last
|
|
120
|
+
model_class.unscoped.update_all({:data_fingerprint => new_fingerprint}, :id => attachment.id)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def file_in_attachments_dir(file_name)
|
|
125
|
+
File.join(Cms::Attachment.configuration.attachments_root, file_name)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def move_attachment_file(old_location, new_location)
|
|
129
|
+
if File.exists?(old_location)
|
|
130
|
+
FileUtils.mkdir_p(File.dirname(new_location), :verbose => false)
|
|
131
|
+
FileUtils.mv(old_location, new_location, :verbose => true)
|
|
132
|
+
else
|
|
133
|
+
puts "'#{old_location}' does not exist, and may have been moved already. Skipping move."
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def attachments_dir
|
|
138
|
+
Cms::Attachment.configuration.attachments_root
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Allows us to use the Paperclip interpolations logic directly
|
|
142
|
+
class AttachmentWrapper
|
|
143
|
+
def initialize(attachment)
|
|
144
|
+
@attachment = attachment
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def instance
|
|
148
|
+
@attachment
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
ActiveRecord::Migration.send(:include, Cms::Upgrades::V3_5_0::FileStorageUpdates) if defined?(ActiveRecord::Migration)
|