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,49 @@
|
|
|
1
|
+
# Use this setup block to configure all options available in SimpleForm.
|
|
2
|
+
SimpleForm.setup do |config|
|
|
3
|
+
config.wrappers :bootstrap, tag: 'div', class: 'control-group row-fluid', error_class: 'error' do |b|
|
|
4
|
+
b.use :html5
|
|
5
|
+
b.use :placeholder
|
|
6
|
+
b.use :label
|
|
7
|
+
b.use :input
|
|
8
|
+
b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
|
|
9
|
+
b.use :hint, wrap_with: {tag: 'p', class: 'help-block'}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
config.wrappers :checkbox, :tag => 'div', :class => 'control-group row-fluid', :error_class => 'error' do |b|
|
|
13
|
+
b.use :html5
|
|
14
|
+
b.use :placeholder
|
|
15
|
+
b.use :label_input
|
|
16
|
+
b.use :hint, :wrap_with => {:tag => 'span', :class => 'help-block'}
|
|
17
|
+
b.use :error, :wrap_with => {:tag => 'span', :class => 'help-inline'}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
config.wrapper_mappings = { :boolean => :checkbox }
|
|
21
|
+
|
|
22
|
+
config.wrappers :prepend, tag: 'div', class: "control-group", error_class: 'error' do |b|
|
|
23
|
+
b.use :html5
|
|
24
|
+
b.use :placeholder
|
|
25
|
+
b.use :label
|
|
26
|
+
b.wrapper tag: 'div', class: 'input-prepend' do |prepend|
|
|
27
|
+
prepend.use :input
|
|
28
|
+
end
|
|
29
|
+
b.use :hint, wrap_with: {tag: 'span', class: 'help-block'}
|
|
30
|
+
b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
config.wrappers :append, tag: 'div', class: "control-group", error_class: 'error' do |b|
|
|
34
|
+
b.use :html5
|
|
35
|
+
b.use :placeholder
|
|
36
|
+
b.use :label
|
|
37
|
+
b.wrapper tag: 'div', class: 'input-append' do |append|
|
|
38
|
+
append.use :input
|
|
39
|
+
end
|
|
40
|
+
b.use :hint, wrap_with: {tag: 'span', class: 'help-block'}
|
|
41
|
+
b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
|
|
45
|
+
# Check the Bootstrap docs (http://twitter.github.com/bootstrap)
|
|
46
|
+
# to learn about the different styles for forms and inputs,
|
|
47
|
+
# buttons and other elements.
|
|
48
|
+
config.default_wrapper = :bootstrap
|
|
49
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
class ContentFilter
|
|
3
|
+
|
|
4
|
+
# Strips HTML from any attribute that's not :content
|
|
5
|
+
#
|
|
6
|
+
# Handles CKEditor's habit of adding opening/closing <p> tags to everything.
|
|
7
|
+
# @TODO Have this inspect the underlying model to determine the actual attribute.
|
|
8
|
+
def filter(content)
|
|
9
|
+
c = content.clone
|
|
10
|
+
c.keys.each do |key|
|
|
11
|
+
if(key != :content && key != "content")
|
|
12
|
+
c[key] = HTML::FullSanitizer.new.sanitize(c[key]).strip
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
c
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
# Add to controllers to allow them to behave like pages. A newer version of Acts::ContentPage
|
|
4
|
+
module ContentPage
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
helper_method :cms_template
|
|
9
|
+
layout :determine_layout
|
|
10
|
+
class_attribute :template_name
|
|
11
|
+
class_attribute :template_options
|
|
12
|
+
|
|
13
|
+
include Cms::Authentication::Controller
|
|
14
|
+
include Cms::PageHelper
|
|
15
|
+
helper Cms::PageHelper
|
|
16
|
+
helper Cms::RenderingHelper
|
|
17
|
+
helper Cms::MenuHelper
|
|
18
|
+
include Cms::Configuration::ConfigurableTemplate
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module ClassMethods
|
|
22
|
+
|
|
23
|
+
# Specify which CMS template should be used for this controller. Works similarly to ActionController::Base#layout.
|
|
24
|
+
# Will use the named template from the appropriate directory (typically app/views/layouts/templates)
|
|
25
|
+
#
|
|
26
|
+
# The default CMS layout will be used if no template is specified.
|
|
27
|
+
#
|
|
28
|
+
# @example
|
|
29
|
+
# template :subpage, only: [:new, :create]
|
|
30
|
+
# template :subpage, except: [:new, :create]
|
|
31
|
+
# template :subpage, only: [:new, :create]
|
|
32
|
+
#
|
|
33
|
+
# @param [Symbol] template_name Name of the template with no directory prefixes or file type. (i.e. subpage, homepage)
|
|
34
|
+
# @param [Hash] options (Optional)
|
|
35
|
+
# @option options [Array<Symbol>] :only The actions to apply the template to.
|
|
36
|
+
# @option options [Array<Symbol>] :exception The actions to not apply the template to.
|
|
37
|
+
def template(template_name, options={})
|
|
38
|
+
self.template_name = template_name.to_s
|
|
39
|
+
self.template_options = options
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns the page template that should be used to render this page.
|
|
45
|
+
def cms_template
|
|
46
|
+
"layouts/#{normalize_layout(self.class, self.class.template_name)}"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def content_page_layout
|
|
50
|
+
'cms/content_page'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
protected
|
|
54
|
+
|
|
55
|
+
def template_options
|
|
56
|
+
self.class.template_options
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def use_template?
|
|
60
|
+
if template_name.blank?
|
|
61
|
+
false
|
|
62
|
+
elsif template_options.empty?
|
|
63
|
+
true
|
|
64
|
+
elsif template_options[:only] && template_options[:only].include?(action_name.to_sym)
|
|
65
|
+
true
|
|
66
|
+
elsif template_options[:except] && !template_options[:except].include?(action_name.to_sym)
|
|
67
|
+
true
|
|
68
|
+
else
|
|
69
|
+
false
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def determine_layout
|
|
74
|
+
use_template? ? content_page_layout : 'cms/application'
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'cms/error_handling'
|
|
1
2
|
#
|
|
2
3
|
# This module can be added to Controllers to provide support for rendering CMS content pages.
|
|
3
4
|
#
|
|
@@ -6,10 +7,24 @@ module Cms
|
|
|
6
7
|
|
|
7
8
|
def self.included(base)
|
|
8
9
|
base.send :include, Cms::ErrorHandling
|
|
9
|
-
|
|
10
10
|
base.rescue_from Exception, :with => :handle_server_error_on_page
|
|
11
|
-
base.rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied_on_page
|
|
12
11
|
base.rescue_from ActiveRecord::RecordNotFound, :with => :handle_not_found_on_page
|
|
12
|
+
base.rescue_from Cms::Errors::ContentNotFound, :with => :handle_not_found_on_page
|
|
13
|
+
base.rescue_from Cms::Errors::DraftNotFound, :with => :handle_draft_not_found
|
|
14
|
+
base.rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied_on_page
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def show_content_as_page(content)
|
|
19
|
+
@page = content # page templates expect a @page attribute
|
|
20
|
+
@content_block = content # render.html.erb's expect a @content_block attribute
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def handle_draft_not_found(exception)
|
|
24
|
+
logger.warn "Draft Content Not Found"
|
|
25
|
+
render(:layout => 'cms/application',
|
|
26
|
+
:template => 'cms/content/no_page',
|
|
27
|
+
:status => :not_found)
|
|
13
28
|
end
|
|
14
29
|
|
|
15
30
|
def handle_not_found_on_page(exception)
|
|
@@ -28,12 +43,6 @@ module Cms
|
|
|
28
43
|
handle_error_with_cms_page(Cms::ErrorPages::SERVER_ERROR_PATH, exception, :internal_server_error)
|
|
29
44
|
end
|
|
30
45
|
|
|
31
|
-
# Basic implementation for looking up the template based on the page layout.
|
|
32
|
-
# This will be overwritten by Cms::MobileAware to show mobile aware templates.
|
|
33
|
-
def determine_page_layout
|
|
34
|
-
@page.layout
|
|
35
|
-
end
|
|
36
|
-
|
|
37
46
|
private
|
|
38
47
|
|
|
39
48
|
# This is the method all error handlers delegate to
|
|
@@ -41,9 +50,9 @@ module Cms
|
|
|
41
50
|
|
|
42
51
|
# If we are in the CMS, we just want to show the exception
|
|
43
52
|
if perform_caching
|
|
44
|
-
return handle_server_error(exception) if cms_site?
|
|
53
|
+
return handle_server_error(exception, status) if cms_site?
|
|
45
54
|
else
|
|
46
|
-
return handle_server_error(exception) if current_user.able_to?(:edit_content, :publish_content)
|
|
55
|
+
return handle_server_error(exception, status) if current_user.able_to?(:edit_content, :publish_content)
|
|
47
56
|
end
|
|
48
57
|
|
|
49
58
|
# We must be showing the page outside of the CMS
|
|
@@ -60,7 +69,7 @@ module Cms
|
|
|
60
69
|
|
|
61
70
|
# clear out any content already captured
|
|
62
71
|
# by previous attempts to render the page within this request
|
|
63
|
-
@template.instance_variables.select{|v| v =~ /@content_for_/ }.each do |v|
|
|
72
|
+
@template.instance_variables.select { |v| v =~ /@content_for_/ }.each do |v|
|
|
64
73
|
@template.instance_variable_set("#{v}", nil)
|
|
65
74
|
end
|
|
66
75
|
|
|
@@ -68,18 +77,18 @@ module Cms
|
|
|
68
77
|
|
|
69
78
|
# The error pages are ALWAYS html since they are managed by the CMS as normal pages.
|
|
70
79
|
# So .gif or .jpg requests that throw errors will return html rather than a format warning.
|
|
71
|
-
render :layout =>
|
|
80
|
+
render :layout => @page.layout, :template => 'cms/content/show', :status => status, :formats => [:html]
|
|
72
81
|
else
|
|
73
|
-
handle_server_error(exception)
|
|
82
|
+
handle_server_error(exception, status)
|
|
74
83
|
end
|
|
75
84
|
end
|
|
76
85
|
|
|
77
86
|
# If any of the page's connectables (portlets, etc) are renderable, they may have a render method
|
|
78
87
|
# which does "controller" stuff, so we need to get that run before rendering the page.
|
|
79
88
|
def prepare_connectables_for_render
|
|
80
|
-
@_connectors = @page.
|
|
81
|
-
@_connectables = @
|
|
82
|
-
|
|
89
|
+
@_connectors = @page.current_connectors
|
|
90
|
+
@_connectables = @page.contents
|
|
91
|
+
|
|
83
92
|
unless (logged_in? && current_user.able_to?(:administrate, :edit_content, :publish_content))
|
|
84
93
|
worst_exception = nil
|
|
85
94
|
@_connectables.each do |c|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
# Before for any controller that is considered an admin page within BrowserCMS.
|
|
4
|
+
module AdminController
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
include Cms::Authentication::Controller
|
|
9
|
+
include Cms::ErrorHandling
|
|
10
|
+
include Cms::DomainSupport
|
|
11
|
+
|
|
12
|
+
helper Cms::ApplicationHelper
|
|
13
|
+
helper Cms::FormTagHelper
|
|
14
|
+
include Cms::PathHelper
|
|
15
|
+
helper Cms::PathHelper
|
|
16
|
+
include Cms::PageHelper
|
|
17
|
+
helper Cms::PageHelper
|
|
18
|
+
helper Cms::MenuHelper
|
|
19
|
+
helper Cms::RenderingHelper
|
|
20
|
+
helper Cms::UiElementsHelper
|
|
21
|
+
include Cms::NavMenuHelper
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
protected
|
|
26
|
+
def escape_javascript(javascript)
|
|
27
|
+
(javascript || '').gsub('\\', '\0\0').gsub('</', '<\/').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def redirect_to_first(*urls)
|
|
31
|
+
urls.each do |url|
|
|
32
|
+
unless url.blank?
|
|
33
|
+
return redirect_to(url)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def current_site
|
|
39
|
+
@current_site ||= Site.find_by_domain(request.host)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def redirect_to_cms_site
|
|
43
|
+
if using_cms_subdomains? && !request_is_for_cms_subdomain?
|
|
44
|
+
redirect_to(url_with_cms_domain_prefix)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def append_to_query_string(url, *params)
|
|
49
|
+
new_url = url["?"] ? url : "#{url}?"
|
|
50
|
+
new_url << params.map { |k, v| "#{k.to_s}=#{CGI::escape(v.to_s)}" }.join("&")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def cms_access_required
|
|
54
|
+
raise Cms::Errors::AccessDenied unless current_user.able_to?(:administrate, :edit_content, :publish_content)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def url_with_cms_domain_prefix
|
|
58
|
+
if cms_site?
|
|
59
|
+
request.url
|
|
60
|
+
elsif request.subdomains.first == "www"
|
|
61
|
+
request.url.sub(/www\./, "#{cms_domain_prefix}.")
|
|
62
|
+
else
|
|
63
|
+
request.url.sub(/:\/\//, "://#{cms_domain_prefix}.")
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def url_without_cms_domain_prefix
|
|
68
|
+
request.url.sub(/#{cms_domain_prefix}\./, '')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ensure_current_user_can_view(content)
|
|
72
|
+
unless current_user.able_to_view?(content)
|
|
73
|
+
store_location
|
|
74
|
+
raise Cms::Errors::AccessDenied
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
data/lib/cms/data_loader.rb
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
module Cms
|
|
2
|
+
# A DSL for creating CMS content in seed data. Creating content in this manner will log the creation of the record
|
|
3
|
+
# and store any created records in a hash.
|
|
4
|
+
# To use, add the following to your seeds.rb.
|
|
5
|
+
# require "cms/data_loader"
|
|
6
|
+
#
|
|
7
|
+
# @example Create a Page in the root section
|
|
8
|
+
# create_page(:hello, name: "Hello", path: "/hello", parent: sections(:root))
|
|
9
|
+
#
|
|
10
|
+
# @example Lookup a previously created page
|
|
11
|
+
# puts pages(:hello).name
|
|
2
12
|
module DataLoader
|
|
3
13
|
|
|
4
14
|
mattr_accessor :silent_mode
|
|
5
15
|
|
|
6
16
|
def method_missing(method_name, *args)
|
|
7
17
|
if md = method_name.to_s.match(/^create_(.+)$/)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
model_name = "Cms/#{md[1]}".classify.constantize.name
|
|
11
|
-
begin
|
|
12
|
-
#Make sure this is an active record class
|
|
13
|
-
super unless model_name.classify.constantize.ancestors.include?(ActiveRecord::Base)
|
|
14
|
-
rescue NameError => e
|
|
15
|
-
super
|
|
16
|
-
end
|
|
17
|
-
self.create(model_name, args[0], args[1] || {})
|
|
18
|
+
klass = model_class(md[1])
|
|
19
|
+
self.create(klass.name, args[0], args[1] || {})
|
|
18
20
|
elsif @data && @data.has_key?(method_name)
|
|
19
21
|
record = @data[method_name][args.first]
|
|
20
22
|
record ? record.class.find(record.id) : nil
|
|
@@ -22,6 +24,22 @@ module Cms
|
|
|
22
24
|
super
|
|
23
25
|
end
|
|
24
26
|
end
|
|
27
|
+
|
|
28
|
+
# We search the CMS namespace first.
|
|
29
|
+
# for things like DynamicPortlets "Cms::DynamicPortlet".constantize returns "DynamicPortlet"
|
|
30
|
+
def model_class(model_name)
|
|
31
|
+
klass = begin
|
|
32
|
+
"Cms/#{model_name}".classify.constantize
|
|
33
|
+
rescue NameError => e
|
|
34
|
+
model_name.classify.constantize
|
|
35
|
+
end
|
|
36
|
+
unless klass.method_defined?(:save!)
|
|
37
|
+
raise "Can't create an instance of #{klass} because its not an ActiveRecord instance."
|
|
38
|
+
end
|
|
39
|
+
klass
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
25
43
|
def create(model_name, record_name, data={})
|
|
26
44
|
puts "-- create_#{model_name}(:#{record_name})" unless Cms::DataLoader.silent_mode
|
|
27
45
|
@data ||= {}
|
|
@@ -32,4 +50,5 @@ module Cms
|
|
|
32
50
|
@data[model_storage_name][record_name] = model
|
|
33
51
|
end
|
|
34
52
|
end
|
|
35
|
-
end
|
|
53
|
+
end
|
|
54
|
+
extend Cms::DataLoader
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
module Cms
|
|
2
2
|
module DefaultAccessible
|
|
3
3
|
|
|
4
|
-
def
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
def permitted_params
|
|
5
|
+
attribute_names.map{|string| string.to_sym} - non_permitted_params
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def non_permitted_params
|
|
9
|
+
[:id, :type, :created_by_id, :updated_by_id, :created_at, :updated_at]
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
end
|
data/lib/cms/domain_support.rb
CHANGED
data/lib/cms/engine.rb
CHANGED
|
@@ -1,34 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
# Load just enough dependencies for this file to be loadable.
|
|
2
2
|
require 'cms/module'
|
|
3
|
-
require 'cms/configuration'
|
|
4
|
-
require 'cms/version'
|
|
5
|
-
require 'browsercms'
|
|
6
|
-
|
|
7
|
-
# Gem name is different than file name
|
|
8
|
-
# Must be required FIRST, so that our assets paths appear before its do.
|
|
9
|
-
# This allows app/assets/ckeditor/config.js to set CMS specific defaults.
|
|
10
|
-
require 'ckeditor-rails'
|
|
11
|
-
|
|
12
|
-
# Explicitly require this, so that CMS projects do not need to add it to their Gemfile
|
|
13
|
-
# especially while upgrading
|
|
14
|
-
require 'jquery-rails'
|
|
15
3
|
|
|
16
4
|
module Cms
|
|
17
|
-
|
|
18
5
|
class Engine < Rails::Engine
|
|
19
6
|
include Cms::Module
|
|
20
7
|
isolate_namespace Cms
|
|
21
8
|
|
|
22
9
|
config.cms = ActiveSupport::OrderedOptions.new
|
|
23
10
|
config.cms.attachments = ActiveSupport::OrderedOptions.new
|
|
24
|
-
|
|
11
|
+
|
|
25
12
|
# Allows additional menu items to be added to the 'Tools' menu on the Admin tab.
|
|
26
13
|
config.cms.tools_menu = ActiveSupport::OrderedOptions.new
|
|
27
14
|
|
|
28
15
|
# Define configuration for the CKEditor
|
|
29
16
|
config.cms.ckeditor = ActiveSupport::OrderedOptions.new
|
|
30
|
-
|
|
31
|
-
#
|
|
17
|
+
|
|
18
|
+
# Configuration for content types.
|
|
19
|
+
config.cms.content_types = ActiveSupport::OrderedOptions.new
|
|
20
|
+
|
|
21
|
+
# Configuration for working on BrowserCMS core.
|
|
22
|
+
# We want these configuration for generators.
|
|
23
|
+
config.generators do |g|
|
|
24
|
+
g.test_framework :mini_test, :spec => true, :fixture => false
|
|
25
|
+
g.stylesheets false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Configuration for projects using BrowserCMS>
|
|
29
|
+
# Need to use our rails model template (rather then its default) when `rails g cms:content_block` is run.
|
|
32
30
|
config.app_generators do |g|
|
|
33
31
|
path = File::expand_path('../../templates', __FILE__)
|
|
34
32
|
g.templates.unshift path
|
|
@@ -44,6 +42,7 @@ module Cms
|
|
|
44
42
|
# Set reasonable defaults
|
|
45
43
|
# These default values can be changed by developers in their projects in their application.rb or environment's files.
|
|
46
44
|
config.before_configuration do |app|
|
|
45
|
+
WillPaginate.per_page = 15
|
|
47
46
|
|
|
48
47
|
# Default cache directories.
|
|
49
48
|
app.config.cms.mobile_cache_directory = File.join(Rails.root, 'public', 'cache', 'mobile')
|
|
@@ -62,13 +61,44 @@ module Cms
|
|
|
62
61
|
# I.e.
|
|
63
62
|
# config.cms.site_domain = "www.browsercms.org"
|
|
64
63
|
app.config.cms.site_domain = "localhost:3000"
|
|
65
|
-
|
|
64
|
+
|
|
65
|
+
# Determines what email sender will be applied to messages generated by the CMS.
|
|
66
|
+
# By default, this is based on the site_domain, i.e. mailbot@example.com
|
|
67
|
+
app.config.cms.mailbot = :default
|
|
68
|
+
|
|
69
|
+
# Allows Addressable content types and Controllers to set which template will be used for page layouts.
|
|
70
|
+
# This takes precedence over the :template attribute set on models/controllers.
|
|
71
|
+
# Keys are looked up based on Class.name.underscore
|
|
72
|
+
# @example:
|
|
73
|
+
# config.cms.templates['cms/form'] = 'my-form-layout' # app/views/layouts/templates/my-form-layout
|
|
74
|
+
# config.cms.templates['cms/sites/sessions_controller'] = 'subpage' # For /login
|
|
75
|
+
#
|
|
76
|
+
app.config.cms.templates = {}
|
|
77
|
+
|
|
66
78
|
# Determines which ckeditor file will be used to configure all instances.
|
|
67
79
|
# There should be at most ONE of these, so use manifest files which require the below one to augement it.
|
|
68
80
|
app.config.cms.ckeditor.configuration_file = 'bcms/ckeditor_standard_config.js'
|
|
69
|
-
|
|
81
|
+
|
|
70
82
|
# Define menu items to be added dynamically to the CMS Admin tab.
|
|
71
83
|
app.config.cms.tools_menu = []
|
|
84
|
+
|
|
85
|
+
# Disable portlets so they don't appear in menus and can't be created. Existing portlets will not be deleted.
|
|
86
|
+
app.config.cms.content_types.blacklist = [:login_portlet, :forgot_password_portlet, :dynamic_portlet]
|
|
87
|
+
|
|
88
|
+
# Initialization
|
|
89
|
+
require 'cms/configure_simple_form'
|
|
90
|
+
require 'cms/configure_simple_form_bootstrap'
|
|
91
|
+
require 'cms/configuration/devise'
|
|
92
|
+
|
|
93
|
+
# Sets the default .css file that will be added to forms created via the Forms module.
|
|
94
|
+
# Projects can override this as needed.
|
|
95
|
+
app.config.cms.form_builder_css = 'cms/default-forms'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Needed to ensure routes added to the main app by the Engine are available. (Since engine draws its routes after the main app)
|
|
99
|
+
# Borrrow from Spree as documenented here: https://github.com/rails/rails/issues/11895
|
|
100
|
+
config.after_initialize do
|
|
101
|
+
Rails.application.routes_reloader.reload!
|
|
72
102
|
end
|
|
73
103
|
|
|
74
104
|
initializer 'browsercms.add_core_routes', :after => 'action_dispatch.prepare_dispatcher' do |app|
|
|
@@ -76,13 +106,15 @@ module Cms
|
|
|
76
106
|
end
|
|
77
107
|
|
|
78
108
|
initializer 'browsercms.add_load_paths', :after => 'action_controller.deprecated_routes' do |app|
|
|
109
|
+
|
|
79
110
|
ActiveSupport::Dependencies.autoload_paths += %W( #{self.root}/vendor #{self.root}/app/mailers #{self.root}/app/helpers)
|
|
80
111
|
ActiveSupport::Dependencies.autoload_paths += %W( #{self.root}/app/controllers #{self.root}/app/models #{self.root}/app/portlets)
|
|
81
112
|
ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/portlets )
|
|
113
|
+
ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/presenters )
|
|
82
114
|
ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/portlets/helpers )
|
|
83
115
|
ActionController::Base.append_view_path DynamicView.base_path
|
|
84
116
|
ActionController::Base.append_view_path %W( #{self.root}/app/views)
|
|
85
|
-
ActionView::Base.default_form_builder = Cms::FormBuilder
|
|
117
|
+
ActionView::Base.default_form_builder = Cms::FormBuilder::ContentBlockFormBuilder
|
|
86
118
|
require 'jdbc_adapter' if defined?(JRUBY_VERSION)
|
|
87
119
|
end
|
|
88
120
|
|