browsercms 3.5.7 → 4.0.0.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/COPYRIGHT.txt +2 -1
- data/README.markdown +3 -3
- data/app/assets/fonts/icomoon.dev.svg +61 -0
- data/app/assets/fonts/icomoon.eot +0 -0
- data/app/assets/fonts/icomoon.svg +61 -0
- data/app/assets/fonts/icomoon.ttf +0 -0
- data/app/assets/fonts/icomoon.woff +0 -0
- data/app/assets/images/ckeditor/plugins/delete_content/icons/deletecontent.png +0 -0
- data/app/assets/images/ckeditor/plugins/edit_content/icons/editcontent.png +0 -0
- data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentdown.png +0 -0
- data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentup.png +0 -0
- data/app/assets/images/cms/arrow-down.png +0 -0
- data/app/assets/images/cms/arrow-up.png +0 -0
- data/app/assets/images/cms/cogs.png +0 -0
- data/app/assets/images/cms/dashboard/home.png +0 -0
- data/app/assets/images/cms/home.png +0 -0
- data/app/assets/images/cms/logo.png +0 -0
- data/app/assets/images/cms/pencil.png +0 -0
- data/app/assets/images/cms/plus.png +0 -0
- data/app/assets/images/cms/user.png +0 -0
- data/app/assets/javascripts/bcms/ckeditor_inline.js +23 -0
- data/app/assets/javascripts/bcms/ckeditor_standard_config.js +1 -1
- data/app/assets/javascripts/ckeditor/plugins/delete_content/plugin.js +36 -0
- data/app/assets/javascripts/ckeditor/plugins/edit_content/plugin.js +24 -0
- data/app/assets/javascripts/ckeditor/plugins/move_content/plugin.js +25 -0
- data/app/assets/javascripts/cms/ajax.js +60 -0
- data/app/assets/javascripts/cms/application.js +6 -1
- data/app/assets/javascripts/cms/attachment_manager.js.erb +3 -10
- data/app/assets/javascripts/cms/content_library.js +31 -12
- data/app/assets/javascripts/cms/core_library.js.erb +68 -36
- data/app/assets/javascripts/cms/form_builder.js +250 -0
- data/app/assets/javascripts/cms/namespace.js +2 -0
- data/app/assets/javascripts/cms/new_content_button.js +27 -0
- data/app/assets/javascripts/cms/page_editor.js +188 -0
- data/app/assets/javascripts/cms/page_toolbar.js +13 -0
- data/app/assets/javascripts/cms/site.js +2 -0
- data/app/assets/javascripts/cms/sitemap.js +219 -0
- data/app/assets/javascripts/cms/toolbar.js +17 -1
- data/app/assets/javascripts/cms/user.js +40 -0
- data/app/assets/javascripts/jquery.exists.js +5 -0
- data/app/assets/javascripts/jquery.taglist.js +37 -23
- data/app/assets/stylesheets/cms/_assets.css.scss +55 -0
- data/app/assets/stylesheets/cms/_base.css.scss +42 -0
- data/app/assets/stylesheets/cms/_cms-buttons.css.scss +73 -0
- data/app/assets/stylesheets/cms/_cms-forms.css.scss +70 -0
- data/app/assets/stylesheets/cms/_colors.css.scss +20 -0
- data/app/assets/stylesheets/cms/_dashboard.css.scss +25 -0
- data/app/assets/stylesheets/cms/_glyph.css.scss +60 -0
- data/app/assets/stylesheets/cms/_main-area.css.scss +62 -0
- data/app/assets/stylesheets/cms/_nav.css.scss +197 -0
- data/app/assets/stylesheets/cms/_sidebar.css.scss +64 -0
- data/app/assets/stylesheets/cms/_sitemap.css.scss +196 -0
- data/app/assets/stylesheets/cms/_submenu.css.scss +48 -0
- data/app/assets/stylesheets/cms/application.css.scss +49 -0
- data/app/assets/stylesheets/cms/core.css.scss +96 -0
- data/app/assets/stylesheets/cms/default-forms.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/_animation.css.scss +2 -0
- data/app/assets/stylesheets/cms/includes/_rem.css.scss +120 -0
- data/app/assets/stylesheets/cms/includes/animation/_animate.css.scss +31 -0
- data/app/assets/stylesheets/cms/includes/animation/_core.css.scss +127 -0
- data/app/assets/stylesheets/cms/includes/animation/_shared.css.scss +22 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_attention-seekers.css.scss +152 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_bouncing.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_classes.css.scss +21 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_fading.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_flippers.css.scss +87 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_lightspeed.css.scss +24 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_rotating.css.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_specials.css.scss +42 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-entrances.css.scss +68 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-exits.css.scss +60 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-entrances.css.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-exits.css.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-entrances.css.scss +58 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-exits.css.scss +58 -0
- data/app/assets/stylesheets/cms/page_content_editing.css.scss +4 -0
- data/app/assets/stylesheets/cms/page_editor.css.scss +4 -0
- data/app/assets/stylesheets/cms/style.css.scss +138 -0
- data/app/assets/stylesheets/cms/styles/_alerts.css.scss +150 -0
- data/app/assets/stylesheets/cms/styles/_base-grid.css.scss +299 -0
- data/app/assets/stylesheets/cms/styles/_buttons.css.scss +247 -0
- data/app/assets/stylesheets/cms/styles/_dropdown.css.scss +155 -0
- data/app/assets/stylesheets/cms/styles/_forms.css.scss +728 -0
- data/app/assets/stylesheets/cms/styles/_glyph.css.scss +86 -0
- data/app/assets/stylesheets/cms/styles/_images.css.scss +75 -0
- data/app/assets/stylesheets/cms/styles/_lists.css.scss +115 -0
- data/app/assets/stylesheets/cms/styles/_modal.css.scss +174 -0
- data/app/assets/stylesheets/cms/styles/_progress.css.scss +43 -0
- data/app/assets/stylesheets/cms/styles/_tables.css.scss +141 -0
- data/app/assets/stylesheets/cms/styles/_text.css.scss +134 -0
- data/app/controllers/cms/application_controller.rb +3 -68
- data/app/controllers/cms/attachments_controller.rb +5 -5
- data/app/controllers/cms/base_controller.rb +20 -13
- data/app/controllers/cms/cache_controller.rb +16 -17
- data/app/controllers/cms/category_types_controller.rb +6 -1
- data/app/controllers/cms/connectors_controller.rb +12 -7
- data/app/controllers/cms/content_block_controller.rb +128 -71
- data/app/controllers/cms/content_controller.rb +54 -56
- data/app/controllers/cms/dashboard_controller.rb +5 -6
- data/app/controllers/cms/dynamic_views_controller.rb +12 -9
- data/app/controllers/cms/email_messages_controller.rb +18 -13
- data/app/controllers/cms/form_entries_controller.rb +119 -0
- data/app/controllers/cms/form_fields_controller.rb +74 -0
- data/app/controllers/cms/forms_controller.rb +35 -0
- data/app/controllers/cms/groups_controller.rb +13 -16
- data/app/controllers/cms/html_blocks_controller.rb +2 -2
- data/app/controllers/cms/inline_content_controller.rb +48 -0
- data/app/controllers/cms/links_controller.rb +58 -46
- data/app/controllers/cms/page_components_controller.rb +20 -0
- data/app/controllers/cms/page_routes_controller.rb +44 -40
- data/app/controllers/cms/pages_controller.rb +111 -97
- data/app/controllers/cms/passwords_controller.rb +17 -0
- data/app/controllers/cms/portlet_controller.rb +0 -1
- data/app/controllers/cms/portlets_controller.rb +20 -27
- data/app/controllers/cms/redirects_controller.rb +13 -9
- data/app/controllers/cms/resource_controller.rb +15 -4
- data/app/controllers/cms/routes_controller.rb +2 -4
- data/app/controllers/cms/section_nodes_controller.rb +6 -37
- data/app/controllers/cms/sections_controller.rb +13 -8
- data/app/controllers/cms/sessions_controller.rb +8 -66
- data/app/controllers/cms/sites/passwords_controller.rb +27 -0
- data/app/controllers/cms/sites/sessions_controller.rb +20 -0
- data/app/controllers/cms/tags_controller.rb +12 -12
- data/app/controllers/cms/tasks_controller.rb +45 -46
- data/app/controllers/cms/user_controller.rb +8 -0
- data/app/controllers/cms/users_controller.rb +91 -68
- data/app/helpers/cms/application_helper.rb +58 -52
- data/app/helpers/cms/content_block_helper.rb +8 -7
- data/app/helpers/cms/form_tag_helper.rb +21 -25
- data/app/helpers/cms/menu_helper.rb +1 -3
- data/app/helpers/cms/mobile_helper.rb +12 -2
- data/app/helpers/cms/nav_menu_helper.rb +23 -0
- data/app/helpers/cms/page_helper.rb +72 -30
- data/app/helpers/cms/path_helper.rb +46 -70
- data/app/helpers/cms/rendering_helper.rb +68 -12
- data/app/helpers/cms/section_nodes_helper.rb +92 -31
- data/app/helpers/cms/sites/authentication_helper.rb +25 -0
- data/app/helpers/cms/sites/devise_shim_helper.rb +31 -0
- data/app/helpers/cms/template_support.rb +1 -7
- data/app/helpers/cms/ui_elements_helper.rb +147 -6
- data/app/helpers/forgot_password_portlet_helper.rb +9 -0
- data/app/helpers/login_portlet_helper.rb +10 -0
- data/app/inputs/attachments_input.rb +14 -0
- data/app/inputs/cms_text_area_input.rb +10 -0
- data/app/inputs/cms_text_field_input.rb +29 -0
- data/app/inputs/date_picker_input.rb +8 -0
- data/app/inputs/file_picker_input.rb +75 -0
- data/app/inputs/path_input.rb +18 -0
- data/app/inputs/tag_list_input.rb +3 -0
- data/app/inputs/template_editor_input.rb +24 -0
- data/app/inputs/text_editor_input.rb +19 -0
- data/app/models/cms/abstract_file_block.rb +10 -6
- data/app/models/cms/attachment.rb +20 -27
- data/app/models/cms/category.rb +17 -7
- data/app/models/cms/category_type.rb +8 -4
- data/app/models/cms/connector.rb +32 -20
- data/app/models/cms/content.rb +31 -0
- data/app/models/cms/content_type.rb +114 -62
- data/app/models/cms/dynamic_view.rb +19 -45
- data/app/models/cms/email_message.rb +32 -2
- data/app/models/cms/external_user.rb +60 -0
- data/app/models/cms/file_block.rb +1 -0
- data/app/models/cms/form.rb +47 -0
- data/app/models/cms/form_entry.rb +71 -0
- data/app/models/cms/form_field.rb +78 -0
- data/app/models/cms/group.rb +19 -9
- data/app/models/cms/group_permission.rb +1 -1
- data/app/models/cms/group_section.rb +1 -1
- data/app/models/cms/group_type.rb +5 -5
- data/app/models/cms/group_type_permission.rb +1 -1
- data/app/models/cms/html_block.rb +14 -19
- data/app/models/cms/image_block.rb +1 -0
- data/app/models/cms/link.rb +8 -6
- data/app/models/cms/page.rb +156 -59
- data/app/models/cms/page_component.rb +43 -0
- data/app/models/cms/page_partial.rb +16 -8
- data/app/models/cms/page_route.rb +1 -1
- data/app/models/cms/page_route_condition.rb +1 -1
- data/app/models/cms/page_route_option.rb +1 -1
- data/app/models/cms/page_route_requirement.rb +1 -1
- data/app/models/cms/page_template.rb +14 -9
- data/app/models/cms/permission.rb +4 -2
- data/app/models/cms/persistent_user.rb +208 -0
- data/app/models/cms/portlet.rb +56 -9
- data/app/models/cms/redirect.rb +1 -1
- data/app/models/cms/search_filter.rb +18 -0
- data/app/models/cms/section.rb +39 -28
- data/app/models/cms/section_node.rb +32 -5
- data/app/models/cms/site.rb +3 -3
- data/app/models/cms/tag.rb +14 -12
- data/app/models/cms/tagging.rb +2 -2
- data/app/models/cms/task.rb +14 -21
- data/app/models/cms/templates.rb +1 -2
- data/app/models/cms/user.rb +21 -160
- data/app/models/cms/user_group_membership.rb +2 -2
- data/app/portlets/deprecated_placeholder.rb +12 -0
- data/app/portlets/dynamic_portlet.rb +1 -1
- data/app/portlets/email_page_portlet.rb +10 -3
- data/app/portlets/forgot_password_portlet.rb +9 -28
- data/app/portlets/login_portlet.rb +8 -5
- data/app/portlets/tag_cloud_portlet.rb +3 -1
- data/app/presenters/cms/user_presenter.rb +24 -0
- data/app/views/cms/application/_add_content_modal.html.erb +3 -0
- data/app/views/cms/application/_buttons.html.erb +7 -0
- data/app/views/cms/{shared → application}/_exception.html.erb +0 -0
- data/app/views/cms/application/_form_errors.html.erb +7 -0
- data/app/views/cms/application/_form_with_buttons.html.erb +10 -0
- data/app/views/cms/application/_main_content.html.erb +3 -0
- data/app/views/cms/application/_main_with_sidebar.html.erb +8 -0
- data/app/views/cms/application/_mobile_toolbar.html.erb +16 -0
- data/app/views/cms/application/_page_title.html.erb +5 -0
- data/app/views/cms/application/_pagination.html.erb +26 -0
- data/app/views/cms/application/_row.html.erb +1 -0
- data/app/views/cms/application/_save_buttons.html.erb +7 -0
- data/app/views/cms/application/_sidebar_layout.html.erb +3 -0
- data/app/views/cms/application/_version.html.erb +23 -0
- data/app/views/cms/{shared → application}/_version_conflict_diff.html.erb +0 -0
- data/app/views/cms/{shared → application}/_version_conflict_error.html.erb +0 -0
- data/app/views/cms/attachments/_attachment_manager.html.erb +22 -0
- data/app/views/cms/attachments/_no_attachments_defined.html.erb +1 -0
- data/app/views/cms/cache/show.html.erb +5 -10
- data/app/views/cms/categories/_form.html.erb +15 -24
- data/app/views/cms/category_types/_form.html.erb +1 -1
- data/app/views/cms/connectors/new.html.erb +33 -64
- data/app/views/cms/content/editing_frame.html.erb +1 -0
- data/app/views/cms/content/no_page.html.erb +9 -27
- data/app/views/cms/content/show.html.erb +14 -15
- data/app/views/cms/content_block/_block_form.html.erb +15 -0
- data/app/views/cms/content_block/_buttonbar.html.erb +29 -0
- data/app/views/cms/content_block/_buttons.html.erb +13 -0
- data/app/views/cms/content_block/_hidden_fields.html.erb +13 -0
- data/app/views/cms/content_block/_sidebar.html.erb +35 -0
- data/app/views/cms/content_block/edit.html.erb +3 -0
- data/app/views/cms/content_block/index.html.erb +87 -0
- data/app/views/cms/content_block/new.html.erb +3 -0
- data/app/views/cms/content_block/render_block_in_main_container.html.erb +10 -0
- data/app/views/cms/content_block/show.html.erb +1 -0
- data/app/views/cms/content_block/show_in_isolation.html.erb +15 -0
- data/app/views/cms/content_block/versions.html.erb +24 -0
- data/app/views/cms/dashboard/_page_drafts.html.erb +12 -22
- data/app/views/cms/dashboard/_tasks.html.erb +32 -45
- data/app/views/cms/dashboard/index.html.erb +11 -13
- data/app/views/cms/dynamic_views/_form.html.erb +8 -10
- data/app/views/cms/dynamic_views/edit.html.erb +2 -3
- data/app/views/cms/dynamic_views/index.html.erb +22 -44
- data/app/views/cms/dynamic_views/new.html.erb +2 -3
- data/app/views/cms/email_messages/index.html.erb +31 -34
- data/app/views/cms/email_messages/show.html.erb +45 -52
- data/app/views/cms/file_blocks/_form.html.erb +2 -4
- data/app/views/cms/form_entries/_buttons.html.erb +2 -0
- data/app/views/cms/form_entries/_form.html.erb +7 -0
- data/app/views/cms/form_entries/_internal_form.html.erb +9 -0
- data/app/views/cms/form_entries/edit.html.erb +5 -0
- data/app/views/cms/form_entries/error.html.erb +3 -0
- data/app/views/cms/form_entries/index.html.erb +4 -0
- data/app/views/cms/form_entries/new.html.erb +5 -0
- data/app/views/cms/form_entries/show.html.erb +13 -0
- data/app/views/cms/form_entries/submit.html.erb +1 -0
- data/app/views/cms/form_fields/_form.html.erb +8 -0
- data/app/views/cms/form_fields/_select.html.erb +3 -0
- data/app/views/cms/form_fields/_text_area.html.erb +3 -0
- data/app/views/cms/form_fields/_text_field.html.erb +3 -0
- data/app/views/cms/form_fields/edit.html.erb +0 -0
- data/app/views/cms/form_fields/new.html.erb +26 -0
- data/app/views/cms/form_fields/preview.html.erb +16 -0
- data/app/views/cms/forms/_form.html.erb +66 -0
- data/app/views/cms/forms/render.html.erb +15 -0
- data/app/views/cms/forms/show.html.erb +6 -0
- data/app/views/cms/groups/_form.html.erb +32 -38
- data/app/views/cms/groups/_permissions.html.erb +11 -34
- data/app/views/cms/groups/_sections.html.erb +11 -17
- data/app/views/cms/groups/edit.html.erb +1 -3
- data/app/views/cms/groups/index.html.erb +10 -32
- data/app/views/cms/groups/new.html.erb +2 -4
- data/app/views/cms/html_blocks/_form.html.erb +2 -2
- data/app/views/cms/html_blocks/render.html.erb +1 -1
- data/app/views/cms/image_blocks/_form.html.erb +3 -3
- data/app/views/cms/links/_form.html.erb +6 -11
- data/app/views/cms/links/edit.html.erb +3 -12
- data/app/views/cms/links/new.html.erb +4 -13
- data/app/views/cms/page_components/_content.html.erb +18 -0
- data/app/views/cms/page_components/new.html.erb +12 -0
- data/app/views/cms/page_routes/_form.html.erb +11 -10
- data/app/views/cms/page_routes/edit.html.erb +2 -3
- data/app/views/cms/page_routes/index.html.erb +25 -48
- data/app/views/cms/page_routes/new.html.erb +2 -3
- data/app/views/cms/pages/_edit_content.html.erb +28 -0
- data/app/views/cms/pages/_form.html.erb +20 -37
- data/app/views/cms/pages/_main_form.html.erb +23 -0
- data/app/views/cms/pages/_simple_container.html.erb +8 -0
- data/app/views/cms/pages/edit.html.erb +2 -23
- data/app/views/cms/pages/new.html.erb +2 -16
- data/app/views/cms/pages/versions.html.erb +18 -87
- data/app/views/cms/redirects/_form.html.erb +6 -14
- data/app/views/cms/redirects/edit.html.erb +2 -3
- data/app/views/cms/redirects/index.html.erb +24 -50
- data/app/views/cms/redirects/new.html.erb +2 -3
- data/app/views/cms/routes/index.html.erb +15 -20
- data/app/views/cms/section_nodes/_children.html.erb +3 -0
- data/app/views/cms/section_nodes/_row_buttons.html.erb +11 -0
- data/app/views/cms/section_nodes/_section_node.html.erb +24 -10
- data/app/views/cms/section_nodes/_sitemap_buttons.html.erb +47 -0
- data/app/views/cms/section_nodes/_status.html.erb +5 -0
- data/app/views/cms/section_nodes/show.html.erb +9 -0
- data/app/views/cms/sections/_buttons.html.erb +6 -0
- data/app/views/cms/sections/_form.html.erb +22 -49
- data/app/views/cms/sections/edit.html.erb +3 -8
- data/app/views/cms/sections/new.html.erb +4 -20
- data/app/views/cms/sessions/new.html.erb +16 -31
- data/app/views/cms/shared/access_denied.html.erb +1 -2
- data/app/views/cms/shared/error.html.erb +5 -5
- data/app/views/cms/sites/_flash.html.erb +8 -0
- data/app/views/cms/sites/passwords/new.html.erb +2 -0
- data/app/views/cms/sites/sessions/new.html.erb +2 -0
- data/app/views/cms/tags/_form.html.erb +1 -1
- data/app/views/cms/tags/render.html.erb +0 -1
- data/app/views/cms/tasks/new.html.erb +18 -32
- data/app/views/cms/toolbar/_new_pages_menu.html.erb +10 -0
- data/app/views/cms/users/_form.html.erb +8 -11
- data/app/views/cms/users/_password.html.erb +2 -8
- data/app/views/cms/users/_user_fields.html.erb +7 -20
- data/app/views/cms/users/change_password.html.erb +12 -21
- data/app/views/cms/users/edit.html.erb +1 -15
- data/app/views/cms/users/index.html.erb +61 -58
- data/app/views/cms/users/new.html.erb +1 -12
- data/app/views/devise/confirmations/new.html.erb +16 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +19 -0
- data/app/views/devise/passwords/new.html.erb +15 -0
- data/app/views/devise/registrations/edit.html.erb +28 -0
- data/app/views/devise/registrations/new.html.erb +18 -0
- data/app/views/devise/shared/_links.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +16 -0
- data/app/views/layouts/cms/_content_types.html.erb +13 -0
- data/app/views/layouts/cms/_footer.erb +2 -2
- data/app/views/layouts/cms/_head.html.erb +8 -18
- data/app/views/layouts/cms/_main_menu.html.erb +78 -0
- data/app/views/layouts/cms/application.html.erb +19 -24
- data/app/views/layouts/cms/content_page.html.erb +5 -0
- data/app/views/layouts/cms/page_editor.html.erb +90 -0
- data/app/views/portlets/deprecated_placeholders/_form.html.erb +1 -0
- data/app/views/portlets/deprecated_placeholders/render.html.erb +8 -0
- data/app/views/portlets/dynamic/_form.html.erb +3 -3
- data/app/views/portlets/email_page/_form.html.erb +5 -6
- data/app/views/portlets/forgot_password/_form.html.erb +2 -3
- data/app/views/portlets/forgot_password/render.html.erb +2 -14
- data/app/views/portlets/login/_form.html.erb +4 -6
- data/app/views/portlets/login/render.html.erb +8 -27
- data/app/views/portlets/portlets/_form.html.erb +7 -6
- data/app/views/portlets/tag_cloud/_form.html.erb +4 -4
- data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
- data/bin/bcms +13 -16
- data/config/routes.rb +58 -29
- data/db/browsercms.seeds.rb +0 -6
- data/db/migrate/{20080815014337_browsercms_3_0_0.rb → 20080815014337_browsercms300.rb} +94 -73
- data/db/migrate/20130327184912_browsercms400.rb +90 -0
- data/db/migrate/20131206214021_devise_create_users.rb +47 -0
- data/db/migrate/20131211223908_kill_reset_password.rb +5 -0
- data/db/migrate/20131218222005_create_cms_external_users.rb +10 -0
- data/doc/features/design_integration.md +45 -0
- data/doc/features/external_user.md +7 -0
- data/doc/features/form_builder.md +40 -0
- data/doc/features/simple_form_refactor.md +60 -0
- data/doc/release_notes.md +224 -10
- data/lib/acts_as_list.rb +72 -71
- data/lib/browsercms.rb +41 -1
- data/lib/cms/acts/content_block.rb +12 -2
- data/lib/cms/acts/content_page.rb +3 -4
- data/lib/cms/admin_tab.rb +15 -0
- data/lib/cms/attachments/configuration.rb +1 -1
- data/lib/cms/authentication/controller.rb +83 -177
- data/lib/cms/authentication/test_password_strategy.rb +19 -0
- data/lib/cms/behaviors.rb +1 -0
- data/lib/cms/behaviors/archiving.rb +2 -2
- data/lib/cms/behaviors/attaching.rb +21 -45
- data/lib/cms/behaviors/connecting.rb +14 -4
- data/lib/cms/behaviors/dynamic_attributes.rb +3 -3
- data/lib/cms/behaviors/hiding.rb +2 -2
- data/lib/cms/behaviors/namespacing.rb +6 -36
- data/lib/cms/behaviors/publishing.rb +92 -45
- data/lib/cms/behaviors/rendering.rb +15 -7
- data/lib/cms/behaviors/searching.rb +5 -4
- data/lib/cms/behaviors/soft_deleting.rb +13 -16
- data/lib/cms/behaviors/taggable.rb +17 -10
- data/lib/cms/behaviors/versioning.rb +12 -16
- data/lib/cms/commands/to_version400.rb +10 -0
- data/lib/cms/concerns.rb +7 -0
- data/lib/cms/concerns/can_be_addressable.rb +326 -0
- data/lib/cms/concerns/has_content_type.rb +46 -0
- data/lib/cms/concerns/ignores_publishing.rb +9 -0
- data/lib/cms/configuration.rb +14 -4
- data/lib/cms/configuration/configurable_template.rb +24 -0
- data/lib/cms/configuration/devise.rb +256 -0
- data/lib/cms/configure_simple_form.rb +142 -0
- data/lib/cms/configure_simple_form_bootstrap.rb +49 -0
- data/lib/cms/content_filter.rb +18 -0
- data/lib/cms/content_page.rb +77 -0
- data/lib/cms/content_rendering_support.rb +25 -16
- data/lib/cms/controllers/admin_controller.rb +78 -0
- data/lib/cms/data_loader.rb +30 -11
- data/lib/cms/default_accessible.rb +6 -6
- data/lib/cms/domain_support.rb +0 -4
- data/lib/cms/engine.rb +52 -20
- data/lib/cms/engine_helper.rb +41 -51
- data/{app/controllers → lib}/cms/error_handling.rb +11 -5
- data/lib/cms/extensions.rb +2 -1
- data/lib/cms/extensions/active_model/name.rb +13 -0
- data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +49 -89
- data/lib/cms/extensions/hash.rb +0 -12
- data/lib/cms/form_builder/content_block_form_builder.rb +45 -0
- data/lib/cms/form_builder/default_input.rb +13 -0
- data/lib/cms/form_builder/deprecated_inputs.rb +40 -0
- data/lib/cms/form_builder/workflow_buttons.rb +38 -0
- data/lib/cms/module.rb +1 -7
- data/lib/cms/polymorphic_single_table_inheritance.rb +19 -0
- data/lib/cms/publish_workflow.rb +26 -0
- data/lib/cms/responders/content_responder.rb +14 -0
- data/lib/cms/route_extensions.rb +112 -20
- data/lib/cms/version.rb +1 -1
- data/lib/generators/browser_cms/demo_site/templates/demo.seeds.rb +0 -2
- data/lib/generators/cms/content_block/content_block_generator.rb +19 -46
- data/lib/generators/cms/content_block/templates/_form.html.erb +22 -28
- data/lib/generators/cms/project/templates/devise.rb.erb +7 -0
- metadata +383 -150
- data/app/assets/javascripts/cms/sitemap.js.erb +0 -464
- data/app/assets/stylesheets/browsercms/application.css +0 -7
- data/app/assets/stylesheets/cms/administration.css.erb +0 -91
- data/app/assets/stylesheets/cms/application.css.erb +0 -171
- data/app/assets/stylesheets/cms/attachment_manager.css.scss +0 -28
- data/app/assets/stylesheets/cms/block.css +0 -26
- data/app/assets/stylesheets/cms/buttons.css.erb +0 -120
- data/app/assets/stylesheets/cms/content_library.css.erb +0 -139
- data/app/assets/stylesheets/cms/content_types.css +0 -4
- data/app/assets/stylesheets/cms/dashboard.css.erb +0 -118
- data/app/assets/stylesheets/cms/data_table.css.erb.erb +0 -156
- data/app/assets/stylesheets/cms/date_picker.css.erb +0 -82
- data/app/assets/stylesheets/cms/form_layout.css.erb +0 -282
- data/app/assets/stylesheets/cms/login.css.erb +0 -78
- data/app/assets/stylesheets/cms/menu.css.erb +0 -116
- data/app/assets/stylesheets/cms/nav.css.erb +0 -99
- data/app/assets/stylesheets/cms/page_toolbar.css.erb +0 -135
- data/app/assets/stylesheets/cms/reset.css +0 -46
- data/app/assets/stylesheets/cms/selectbox.css.erb +0 -56
- data/app/assets/stylesheets/cms/sitemap.css.erb +0 -390
- data/app/assets/stylesheets/cms/taglist.css +0 -18
- data/app/controllers/application_controller.rb +0 -14
- data/app/controllers/cms/content_types_controller.rb +0 -9
- data/app/helpers/application_helper.rb +0 -5
- data/app/helpers/cms/form_builder.rb +0 -241
- data/app/models/cms/content_type_group.rb +0 -15
- data/app/models/cms/forgot_password_mailer.rb +0 -14
- data/app/portlets/reset_password_portlet.rb +0 -28
- data/app/views/cms/blocks/_hidden_fields.html.erb +0 -10
- data/app/views/cms/blocks/_toolbar.html.erb +0 -9
- data/app/views/cms/blocks/_toolbar_for_collection.html.erb +0 -23
- data/app/views/cms/blocks/_toolbar_for_member.html.erb +0 -36
- data/app/views/cms/blocks/edit.html.erb +0 -28
- data/app/views/cms/blocks/index.html.erb +0 -86
- data/app/views/cms/blocks/new.html.erb +0 -19
- data/app/views/cms/blocks/show.html.erb +0 -43
- data/app/views/cms/blocks/usages.html.erb +0 -44
- data/app/views/cms/blocks/versions.html.erb +0 -90
- data/app/views/cms/content_types/index.html.erb +0 -14
- data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +0 -27
- data/app/views/cms/form_builder/_cms_check_box.html.erb +0 -7
- data/app/views/cms/form_builder/_cms_date_picker.html.erb +0 -12
- data/app/views/cms/form_builder/_cms_datetime_select.html.erb +0 -12
- data/app/views/cms/form_builder/_cms_drop_down.html.erb +0 -12
- data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +0 -9
- data/app/views/cms/form_builder/_cms_file_field.html.erb +0 -28
- data/app/views/cms/form_builder/_cms_instructions.html.erb +0 -4
- data/app/views/cms/form_builder/_cms_tag_list.html.erb +0 -15
- data/app/views/cms/form_builder/_cms_template_editor.html.erb +0 -9
- data/app/views/cms/form_builder/_cms_text_area.html.erb +0 -10
- data/app/views/cms/form_builder/_cms_text_editor.html.erb +0 -19
- data/app/views/cms/form_builder/_cms_text_field.html.erb +0 -12
- data/app/views/cms/links/destroy.js.rjs +0 -2
- data/app/views/cms/page_routes/show.html.erb +0 -10
- data/app/views/cms/pages/_edit_connector.html.erb +0 -19
- data/app/views/cms/pages/_edit_container.html.erb +0 -11
- data/app/views/cms/section_nodes/_link.html.erb +0 -14
- data/app/views/cms/section_nodes/_node.html.erb +0 -44
- data/app/views/cms/section_nodes/_page.html.erb +0 -20
- data/app/views/cms/section_nodes/_section.html.erb +0 -28
- data/app/views/cms/section_nodes/index.html.erb +0 -43
- data/app/views/cms/sections/_page.html.erb +0 -4
- data/app/views/cms/sections/_section.html.erb +0 -8
- data/app/views/cms/sections/destroy.js.rjs +0 -2
- data/app/views/cms/sections/index.html.erb +0 -23
- data/app/views/cms/shared/_admin_sidebar.html.erb +0 -36
- data/app/views/cms/shared/_pagination.html.erb +0 -31
- data/app/views/cms/toolbar/_mobile_toggle.html.erb +0 -33
- data/app/views/cms/toolbar/index.html.erb +0 -1
- data/app/views/cms/users/_groups.html.erb +0 -12
- data/app/views/cms/users/_toolbar.html.erb +0 -24
- data/app/views/cms/users/show.html.erb +0 -50
- data/app/views/layouts/_cms_toolbar.html.erb +0 -54
- data/app/views/layouts/_page_toolbar.html.erb +0 -119
- data/app/views/layouts/cms/administration.html.erb +0 -51
- data/app/views/layouts/cms/content_library.html.erb +0 -96
- data/app/views/layouts/cms/dashboard.html.erb +0 -16
- data/app/views/layouts/cms/login.html.erb +0 -31
- data/app/views/layouts/cms/section_nodes.html.erb +0 -20
- data/app/views/layouts/cms/toolbar.html.erb +0 -23
- data/app/views/portlets/reset_password/_form.html.erb +0 -3
- data/app/views/portlets/reset_password/render.html.erb +0 -22
- data/bin/bcms-upgrade +0 -332
- data/db/migrate/20091109175123_browsercms_3_0_5.rb +0 -9
- data/db/migrate/20100117144038_browsercms314.rb +0 -20
- data/db/migrate/20100117144039_browsercms315.rb +0 -95
- data/db/migrate/20100705083859_browsercms_3_3_0.rb +0 -56
- data/db/migrate/20111130221145_browsercms340.rb +0 -56
- data/db/migrate/20120329144406_browsercms350.rb +0 -32
- data/db/migrate/20120717182827_browsercms353.rb +0 -19
- data/db/migrate/20120813180110_browsercms354.rb +0 -9
- data/lib/cms/addressable.rb +0 -93
- data/lib/cms/authentication/model.rb +0 -116
- data/lib/cms/behaviors/pagination.rb +0 -212
- data/lib/cms/upgrades/v3_4_0.rb +0 -31
- data/lib/cms/upgrades/v3_5_0.rb +0 -227
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Authentication
|
|
3
|
+
# For testing external authentication.
|
|
4
|
+
class TestPasswordStrategy < Devise::Strategies::Authenticatable
|
|
5
|
+
EXPECTED_LOGIN = EXPECTED_PASSWORD = 'test'
|
|
6
|
+
def authenticate!
|
|
7
|
+
if(authentication_hash[:login] == password && password == EXPECTED_PASSWORD)
|
|
8
|
+
user = Cms::ExternalUser.authenticate(authentication_hash[:login], 'Test Password', {first_name: "Test", last_name: "User"})
|
|
9
|
+
user.authorize('cms-admin', 'content-editor')
|
|
10
|
+
success!(user)
|
|
11
|
+
else
|
|
12
|
+
pass
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Warden::Strategies.add(:test_password, Cms::Authentication::TestPasswordStrategy)
|
data/lib/cms/behaviors.rb
CHANGED
|
@@ -12,8 +12,8 @@ module Cms
|
|
|
12
12
|
@is_archivable = true
|
|
13
13
|
include InstanceMethods
|
|
14
14
|
|
|
15
|
-
scope :archived,
|
|
16
|
-
scope :not_archived,
|
|
15
|
+
scope :archived, ->{where(:archived => true)}
|
|
16
|
+
scope :not_archived, ->{where(:archived => false)}
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
module InstanceMethods
|
|
@@ -3,56 +3,24 @@ module Cms
|
|
|
3
3
|
module Behaviors
|
|
4
4
|
# Allows one or more files to be attached to content blocks.
|
|
5
5
|
#
|
|
6
|
-
# class Book
|
|
6
|
+
# class Book < ActiveRecord::Base
|
|
7
7
|
# acts_as_content_block
|
|
8
|
-
#
|
|
8
|
+
# has_attachment :cover
|
|
9
9
|
# end
|
|
10
10
|
#
|
|
11
|
-
# It would probably be nice to do something like:
|
|
12
|
-
#
|
|
13
|
-
# class Book
|
|
14
|
-
# acts_as_content_block :uses_paperclip => true
|
|
15
|
-
# end
|
|
16
11
|
#
|
|
17
|
-
#
|
|
18
|
-
# They both define a couple of methods in the content block:
|
|
12
|
+
# To add a set of multiple attachments:
|
|
19
13
|
#
|
|
20
14
|
# class Book
|
|
21
|
-
#
|
|
15
|
+
# acts_as_content_block
|
|
22
16
|
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
17
|
+
# has_attachment :cover
|
|
18
|
+
# has_many_attachments :drafts
|
|
25
19
|
# end
|
|
26
20
|
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
# Book#cover and Book#drafts both return Asset objects as opposed to what
|
|
32
|
-
# happens with stand alone Paperclip:
|
|
33
|
-
#
|
|
34
|
-
# class Book
|
|
35
|
-
# has_attached_file :invoice #straight Paperclip
|
|
36
|
-
# end
|
|
37
|
-
#
|
|
38
|
-
# Book.new.invoice # returns an instance of Paperclip::Attachment
|
|
39
|
-
#
|
|
40
|
-
# However, Asset instances respond to most of the same methods
|
|
41
|
-
# Paperclip::Attachments do (at least the most usefull ones and the ones
|
|
42
|
-
# that make sense for this implementation). Please see asset.rb for more on
|
|
43
|
-
# this.
|
|
44
|
-
#
|
|
45
|
-
# At the moment, calling has_attached_asset does not enforce that only
|
|
46
|
-
# one asset is created, it only defines a method that returns the first one
|
|
47
|
-
# ActiveRecord finds. It would be possible to do if that makes sense.
|
|
48
|
-
#
|
|
49
|
-
# In terms of validations, I'm aiming to expose the same 3 class methods
|
|
50
|
-
# Paperclip exposes, apart from those needed by BCMS itself (like enforcing
|
|
51
|
-
# unique attachment paths) but this is not ready yet:
|
|
52
|
-
#
|
|
53
|
-
# validates_asset_size
|
|
54
|
-
# validates_asset_presence
|
|
55
|
-
# validates_asset_content_type
|
|
21
|
+
# Adds the following methods to Book:
|
|
22
|
+
# - Book#cover @return [Cms::Attachment]
|
|
23
|
+
# - Book#drafts @return [Array<Cms::Attachment>]
|
|
56
24
|
#
|
|
57
25
|
module Attaching
|
|
58
26
|
|
|
@@ -83,7 +51,6 @@ module Cms
|
|
|
83
51
|
:allow_destroy => true,
|
|
84
52
|
# New attachments must have an uploaded file
|
|
85
53
|
:reject_if => lambda { |a| a[:data].blank? && a[:id].blank? }
|
|
86
|
-
attr_accessible :attachments_attributes, :attachment_id_list, :attachments_changed
|
|
87
54
|
|
|
88
55
|
validates_associated :attachments
|
|
89
56
|
before_validation :initialize_attachments, :check_for_updated_attachments
|
|
@@ -140,7 +107,8 @@ module Cms
|
|
|
140
107
|
end
|
|
141
108
|
end
|
|
142
109
|
|
|
143
|
-
# Define
|
|
110
|
+
# Define the #set_attachment_path method if you would like to override the way file_path is set.
|
|
111
|
+
# A path input will be rendered for content types having #set_attachment_path.
|
|
144
112
|
def handle_setting_attachment_path
|
|
145
113
|
if self.respond_to? :set_attachment_path
|
|
146
114
|
set_attachment_path
|
|
@@ -152,6 +120,14 @@ module Cms
|
|
|
152
120
|
|
|
153
121
|
module ClassMethods
|
|
154
122
|
|
|
123
|
+
# Finds all instances of this Attaching content that exist in a given section.
|
|
124
|
+
# @param [Cms::Section] section
|
|
125
|
+
# @return [ActiveRecord::Relation] A relation that will return Attaching instances.
|
|
126
|
+
def by_section(section)
|
|
127
|
+
where(["#{SectionNode.table_name}.ancestry = ?", section.node.ancestry_path])
|
|
128
|
+
.includes(:attachments => :section_node)
|
|
129
|
+
.references(:section_nodes)
|
|
130
|
+
end
|
|
155
131
|
|
|
156
132
|
# Defines an single attachement with a given name.
|
|
157
133
|
#
|
|
@@ -199,7 +175,7 @@ module Cms
|
|
|
199
175
|
found_versions = Cms::Attachment::Version.where(:attachable_id => attachable.id).
|
|
200
176
|
where(:attachable_type => attachable.attachable_type).
|
|
201
177
|
where(:attachable_version => version_number).
|
|
202
|
-
order(:version).
|
|
178
|
+
order(:version).load
|
|
203
179
|
found_attachments = []
|
|
204
180
|
|
|
205
181
|
found_versions.each do |av|
|
|
@@ -369,7 +345,7 @@ module Cms
|
|
|
369
345
|
end
|
|
370
346
|
|
|
371
347
|
def initialize_attachments
|
|
372
|
-
attachments.each { |a| a.attachable_class = self.
|
|
348
|
+
attachments.each { |a| a.attachable_class = self.attachable_type }
|
|
373
349
|
end
|
|
374
350
|
|
|
375
351
|
|
|
@@ -18,7 +18,7 @@ module Cms
|
|
|
18
18
|
include InstanceMethods
|
|
19
19
|
|
|
20
20
|
attr_accessor :connect_to_page_id, :connect_to_container,:connected_page
|
|
21
|
-
attr_accessible :connect_to_page_id, :connect_to_container,:connected_page
|
|
21
|
+
#attr_accessible :connect_to_page_id, :connect_to_container,:connected_page
|
|
22
22
|
|
|
23
23
|
has_many :connectors, :as => :connectable, :class_name => 'Cms::Connector'
|
|
24
24
|
|
|
@@ -33,7 +33,7 @@ module Cms
|
|
|
33
33
|
module ClassMethods
|
|
34
34
|
|
|
35
35
|
def content_block_type
|
|
36
|
-
ActiveModel::Naming.singular(self)
|
|
36
|
+
::ActiveModel::Naming.singular(self)
|
|
37
37
|
end
|
|
38
38
|
def display_name
|
|
39
39
|
Connecting.default_naming_for(self)
|
|
@@ -44,6 +44,12 @@ module Cms
|
|
|
44
44
|
end
|
|
45
45
|
module InstanceMethods
|
|
46
46
|
|
|
47
|
+
# Returns a machine readable key that identifies the type of content this is.
|
|
48
|
+
# Should match the key passed to ContentType.find_by_key
|
|
49
|
+
def content_name
|
|
50
|
+
self.class.name.demodulize.underscore
|
|
51
|
+
end
|
|
52
|
+
|
|
47
53
|
def connected_pages
|
|
48
54
|
return @connected_pages if @connected_pages
|
|
49
55
|
@connected_pages = Page.connected_to(self)
|
|
@@ -75,6 +81,10 @@ module Cms
|
|
|
75
81
|
true
|
|
76
82
|
end
|
|
77
83
|
|
|
84
|
+
# By default, all content types will support inline editing. Subclasses can override this.
|
|
85
|
+
def supports_inline_editing?
|
|
86
|
+
true
|
|
87
|
+
end
|
|
78
88
|
#
|
|
79
89
|
# After blocks are updated, all pages they are connected to should also be updated,
|
|
80
90
|
# connecting the page to the new version of the block, as well as putting the pages into
|
|
@@ -87,7 +97,7 @@ module Cms
|
|
|
87
97
|
|
|
88
98
|
#Get all the pages the previous version of this connectable was connected to
|
|
89
99
|
draft_version = draft.version
|
|
90
|
-
connected_pages = Page.connected_to(:connectable => self, :version => (draft_version - 1)).
|
|
100
|
+
connected_pages = Page.connected_to(:connectable => self, :version => (draft_version - 1)).to_a
|
|
91
101
|
# puts "Found #{connected_pages}"
|
|
92
102
|
connected_pages.each do |p|
|
|
93
103
|
# This is needed in the case of updating page,
|
|
@@ -95,7 +105,7 @@ module Cms
|
|
|
95
105
|
if p != updated_by_page
|
|
96
106
|
#This just creates a new version of the page
|
|
97
107
|
action = deleted? ? "Deleted" : "Edited"
|
|
98
|
-
p.update_attributes(:version_comment => "#{self.class.name.demodulize} ##{id} was #{action}")
|
|
108
|
+
p.update_attributes(:version_comment => "#{self.class.name.demodulize} ##{id} was #{action}", :publish_on_save=>false)
|
|
99
109
|
|
|
100
110
|
#The previous step will copy over a connector pointing to the previous version of this connectable
|
|
101
111
|
#We need to change that to point at the new version of this connectable
|
|
@@ -128,7 +128,7 @@ module Cms
|
|
|
128
128
|
include InstanceMethods
|
|
129
129
|
|
|
130
130
|
# Provide default options
|
|
131
|
-
options[:class_name] ||= self.model_name
|
|
131
|
+
options[:class_name] ||= "#{self.model_name}Attribute"
|
|
132
132
|
options[:table_name] ||= options[:class_name].tableize
|
|
133
133
|
options[:relationship_name] ||= options[:class_name].tableize.to_sym
|
|
134
134
|
options[:foreign_key] ||= self.model_name.foreign_key
|
|
@@ -150,7 +150,7 @@ module Cms
|
|
|
150
150
|
rescue
|
|
151
151
|
Object.const_set(options[:class_name], Class.new(ActiveRecord::Base)).class_eval do
|
|
152
152
|
self.table_name = options[:table_name]
|
|
153
|
-
self.mass_assignment_sanitizer = Cms::IgnoreSanitizer.new
|
|
153
|
+
#self.mass_assignment_sanitizer = Cms::IgnoreSanitizer.new
|
|
154
154
|
|
|
155
155
|
def self.reloadable? #:nodoc:
|
|
156
156
|
false
|
|
@@ -167,7 +167,7 @@ module Cms
|
|
|
167
167
|
attribute_class.class_eval do
|
|
168
168
|
belongs_to base_class, :foreign_key => options[:base_foreign_key]
|
|
169
169
|
alias_method :base, base_class # For generic access
|
|
170
|
-
|
|
170
|
+
#attr_accessible :name, :value, "#{base_class.to_s}_id".to_sym
|
|
171
171
|
end
|
|
172
172
|
|
|
173
173
|
# Modify main class
|
data/lib/cms/behaviors/hiding.rb
CHANGED
|
@@ -13,8 +13,8 @@ module Cms
|
|
|
13
13
|
extend ClassMethods
|
|
14
14
|
include InstanceMethods
|
|
15
15
|
|
|
16
|
-
scope :hidden,
|
|
17
|
-
scope :not_hidden,
|
|
16
|
+
scope :hidden, ->{where(:hidden => true)}
|
|
17
|
+
scope :not_hidden, ->{where(:hidden => false)}
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
module ClassMethods
|
|
@@ -1,45 +1,15 @@
|
|
|
1
1
|
module Cms
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# For example, Cms.table_prefix = "cms_" would create tables like:
|
|
6
|
-
# cms_html_blocks cms_pages
|
|
7
|
-
# rather than
|
|
8
|
-
# html_blocks pages
|
|
9
|
-
#
|
|
3
|
+
# @deprecated To be removed in BrowserCMS 4.1 or later.
|
|
10
4
|
def self.table_prefix=(prefix)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Returns the table name prefix for models in the Cms:: Namespace
|
|
16
|
-
# Prefer calling table_name_prefix to this methods
|
|
17
|
-
# @return [String] nil if no namespace has been set.
|
|
18
|
-
#
|
|
19
|
-
def self.table_prefix
|
|
20
|
-
@table_prefix
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# By setting this, ActiveRecord will automatically prefix all tables in the Cms:: module to start with the value of prefix_
|
|
24
|
-
# Defaults to "" if not specified.
|
|
25
|
-
def self.table_name_prefix
|
|
26
|
-
self.table_prefix ? self.table_prefix : ""
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
module Namespacing
|
|
30
|
-
|
|
31
|
-
def self.prefixed_table_name(unprefixed_name)
|
|
32
|
-
"#{Cms.table_prefix}#{unprefixed_name}"
|
|
33
|
-
end
|
|
34
|
-
def self.prefix(unprefixed_name)
|
|
35
|
-
self.prefixed_table_name(unprefixed_name)
|
|
36
|
-
end
|
|
5
|
+
message = "Calling Cms.table_prefix('#{prefix}') is no longer necessary and can be removed from your project. See https://github.com/browsermedia/browsercms/issues/639"
|
|
6
|
+
ActiveSupport::Deprecation.warn(message, caller(1))
|
|
37
7
|
end
|
|
38
8
|
|
|
39
9
|
module Behaviors
|
|
40
|
-
# Noop - This will be automatically included on all ActiveRecord classes. I don't want to move this, so
|
|
41
|
-
# I'm leaving it as a harmless NOOP for now.
|
|
42
10
|
module Namespacing
|
|
11
|
+
|
|
12
|
+
|
|
43
13
|
end
|
|
44
14
|
end
|
|
45
|
-
end
|
|
15
|
+
end
|
|
@@ -12,30 +12,28 @@ module Cms
|
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
|
+
|
|
15
16
|
module MacroMethods
|
|
16
17
|
def publishable?
|
|
17
18
|
!!@is_publishable
|
|
18
19
|
end
|
|
20
|
+
|
|
19
21
|
def is_publishable(options={})
|
|
20
22
|
@is_publishable = true
|
|
21
23
|
extend ClassMethods
|
|
22
24
|
include InstanceMethods
|
|
23
|
-
|
|
24
|
-
attr_accessor :publish_on_save
|
|
25
|
-
attr_accessible :publish_on_save
|
|
26
25
|
|
|
26
|
+
#attr_accessible :publish_on_save, :as
|
|
27
27
|
after_save :publish_for_non_versioned
|
|
28
|
-
|
|
29
|
-
scope :published,
|
|
30
|
-
scope :unpublished,
|
|
31
|
-
if versioned?
|
|
32
|
-
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"#{connection.quote_table_name(table_name)}.#{connection.quote_column_name('version')}",
|
|
36
|
-
:select => "distinct #{connection.quote_table_name(table_name)}.*" }
|
|
28
|
+
|
|
29
|
+
scope :published, -> { where(:published => true) }
|
|
30
|
+
scope :unpublished, -> {
|
|
31
|
+
if self.versioned?
|
|
32
|
+
q = "#{connection.quote_table_name(version_table_name)}.#{connection.quote_column_name('version')} > " +
|
|
33
|
+
"#{connection.quote_table_name(table_name)}.#{connection.quote_column_name('version')}"
|
|
34
|
+
select("distinct #{connection.quote_table_name(table_name)}.*").where(q).joins(:versions)
|
|
37
35
|
else
|
|
38
|
-
|
|
36
|
+
where(:published => false)
|
|
39
37
|
end
|
|
40
38
|
}
|
|
41
39
|
|
|
@@ -44,6 +42,33 @@ module Cms
|
|
|
44
42
|
module ClassMethods
|
|
45
43
|
end
|
|
46
44
|
module InstanceMethods
|
|
45
|
+
|
|
46
|
+
# Can specify whether to save this block as a draft using a terser syntax.
|
|
47
|
+
# These two calls behave identically
|
|
48
|
+
# - Cms::HtmlBlock.create(name: "Shorter", as: :draft)
|
|
49
|
+
# - Cms::HtmlBlock.create(name: "Longer", publish_on_save: false)
|
|
50
|
+
# @param [Symbol] status :draft to not publish on the next save. All other values are ignored.
|
|
51
|
+
def as=(status)
|
|
52
|
+
if status == :draft
|
|
53
|
+
self.publish_on_save = false
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Whether or not this object will be published the next time '.save' is called.
|
|
58
|
+
# @return [Boolean] True unless explicitly set otherwise.
|
|
59
|
+
def publish_on_save
|
|
60
|
+
if @publish_on_save.nil?
|
|
61
|
+
@publish_on_save = true
|
|
62
|
+
end
|
|
63
|
+
@publish_on_save
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Set whether or not this object will be published next time '.save' is called.
|
|
67
|
+
# This status resets to true after calling '.save'
|
|
68
|
+
def publish_on_save=(publish)
|
|
69
|
+
@publish_on_save = publish
|
|
70
|
+
end
|
|
71
|
+
|
|
47
72
|
def publishable?
|
|
48
73
|
if self.class.connectable?
|
|
49
74
|
new_record? ? connect_to_page_id.blank? : connected_page_count < 1
|
|
@@ -51,7 +76,7 @@ module Cms
|
|
|
51
76
|
true
|
|
52
77
|
end
|
|
53
78
|
end
|
|
54
|
-
|
|
79
|
+
|
|
55
80
|
def publish_for_non_versioned
|
|
56
81
|
unless self.class.versioned?
|
|
57
82
|
if @publish_on_save
|
|
@@ -60,34 +85,40 @@ module Cms
|
|
|
60
85
|
end
|
|
61
86
|
end
|
|
62
87
|
end
|
|
63
|
-
|
|
88
|
+
|
|
89
|
+
def publish_if_needed
|
|
90
|
+
if publish_on_save
|
|
91
|
+
publish
|
|
92
|
+
else
|
|
93
|
+
self.publish_on_save = true
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Publishes the latest previously saved version of content as published. This will not create a new version,
|
|
98
|
+
# and will not persist changes made to a record.
|
|
99
|
+
#
|
|
100
|
+
# @return [Boolean] true if there was a draft record that was published, false otherwise.
|
|
64
101
|
def publish
|
|
65
102
|
publish!
|
|
66
|
-
true
|
|
67
103
|
rescue Exception => e
|
|
68
104
|
logger.warn("Could not publish, #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}")
|
|
69
105
|
false
|
|
70
106
|
end
|
|
71
107
|
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
#
|
|
80
|
-
#
|
|
81
|
-
#
|
|
82
|
-
#
|
|
83
|
-
# In addition, after_publish is NOT called if you do:
|
|
84
|
-
# block.save_on_publish = true
|
|
85
|
-
# block.save!
|
|
86
|
-
# which will cause problems if blocks are updated via the method (like with the UI)
|
|
108
|
+
# Saves a draft copy of this content item. This will create a new record in the _versions table for this item, but
|
|
109
|
+
# will not update the existing published record.
|
|
110
|
+
def save_draft
|
|
111
|
+
self.publish_on_save = false
|
|
112
|
+
save
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Publishes the latest draft version of a block. See .publish for more documentation. Can throw errors if publishing failed for unexpected reasons.
|
|
116
|
+
# Note: Having separate .publish! and .publish methods is probably no longer necessary. In practice, only .publish is probably needed.
|
|
117
|
+
# @return [Boolean] true if the block had a draft that was published, false otherwise.
|
|
87
118
|
def publish!
|
|
119
|
+
did_publish = false
|
|
88
120
|
if new_record?
|
|
89
|
-
|
|
90
|
-
save!
|
|
121
|
+
ActiveSupport::Deprecation.warn "Calling .publish! on a new record no longer saves the record. Call '.save' to persist and publish the record.", caller
|
|
91
122
|
else
|
|
92
123
|
# Do this for publishing existing blocks.
|
|
93
124
|
transaction do
|
|
@@ -97,11 +128,11 @@ module Cms
|
|
|
97
128
|
# We only need to publish if this isn't already published
|
|
98
129
|
# or the draft version is greater than the live version
|
|
99
130
|
if !self.published? || d.version > self.version
|
|
100
|
-
|
|
131
|
+
|
|
101
132
|
d.update_attributes(:published => true)
|
|
102
133
|
|
|
103
134
|
# copy values from the draft to the main record
|
|
104
|
-
quoted_attributes = d.send(:
|
|
135
|
+
quoted_attributes = d.send(:arel_attributes_with_values_for_update, self.class.versioned_columns)
|
|
105
136
|
|
|
106
137
|
#the values from the draft MAY have a relation of the versioned module
|
|
107
138
|
#as opposed to the actual class itself
|
|
@@ -110,26 +141,29 @@ module Cms
|
|
|
110
141
|
#I haven't figured out why this is, but I know it happens when you call save! on Page
|
|
111
142
|
#during seeding of data
|
|
112
143
|
if self.class.arel_table.name != quoted_attributes.keys[0].relation.name
|
|
113
|
-
quoted_attributes = quoted_attributes.inject({}){|hash, pair| hash[self.class.arel_table[pair[0].name]] = pair[1]; hash}
|
|
144
|
+
quoted_attributes = quoted_attributes.inject({}) { |hash, pair| hash[self.class.arel_table[pair[0].name]] = pair[1]; hash }
|
|
114
145
|
end
|
|
115
146
|
|
|
116
147
|
# Doing the SQL ourselves to avoid callbacks
|
|
117
148
|
self.class.unscoped.where(self.class.arel_table[self.class.primary_key].eq(id)).arel.update(quoted_attributes)
|
|
149
|
+
did_publish = true
|
|
118
150
|
end
|
|
119
151
|
else
|
|
120
|
-
connection.update(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
152
|
+
self.class.connection.update(
|
|
153
|
+
"UPDATE #{self.class.quoted_table_name} " +
|
|
154
|
+
"SET published = #{self.class.connection.quote(true, self.class.columns_hash["published"])} " +
|
|
155
|
+
"WHERE #{self.class.connection.quote_column_name(self.class.primary_key)} = #{self.class.quote_value(id)}",
|
|
156
|
+
"#{self.class.name.demodulize} Publish"
|
|
125
157
|
)
|
|
158
|
+
did_publish = true
|
|
126
159
|
end
|
|
127
160
|
after_publish if respond_to?(:after_publish)
|
|
128
161
|
end
|
|
129
162
|
self.published = true
|
|
130
163
|
end
|
|
131
|
-
|
|
132
|
-
|
|
164
|
+
did_publish
|
|
165
|
+
end
|
|
166
|
+
|
|
133
167
|
def status
|
|
134
168
|
return @status if @status
|
|
135
169
|
@status = live? ? :published : :draft
|
|
@@ -139,9 +173,22 @@ module Cms
|
|
|
139
173
|
status.to_s.titleize
|
|
140
174
|
end
|
|
141
175
|
|
|
176
|
+
# Determines if this resource is in draft mode or not. Opposite of #live?
|
|
177
|
+
#
|
|
178
|
+
# @return [Boolean] true if the latest version of the resource is a draft.
|
|
179
|
+
def draft?
|
|
180
|
+
!live?
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Determines if this resource is in published or not.
|
|
184
|
+
#
|
|
185
|
+
# @return [Boolean] true if the latest version of the resource is published.
|
|
142
186
|
def live?
|
|
143
187
|
if self.class.versioned?
|
|
144
|
-
|
|
188
|
+
unless persisted?
|
|
189
|
+
return false
|
|
190
|
+
end
|
|
191
|
+
if respond_to?(:latest_version) && self.latest_version
|
|
145
192
|
version == latest_version && published?
|
|
146
193
|
else
|
|
147
194
|
live_version.version == draft.version && published?
|
|
@@ -150,7 +197,7 @@ module Cms
|
|
|
150
197
|
true
|
|
151
198
|
end
|
|
152
199
|
end
|
|
153
|
-
|
|
200
|
+
|
|
154
201
|
end
|
|
155
202
|
end
|
|
156
203
|
end
|