browsercms-artirix 4.0.0.rc1.art4
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/.yardopts +5 -0
- data/COPYRIGHT.txt +27 -0
- data/GPL.txt +674 -0
- data/LICENSE.txt +165 -0
- data/README.markdown +45 -0
- 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/administration/user_browser_bg.gif +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/bg.png +0 -0
- data/app/assets/images/cms/bl_curve.png +0 -0
- data/app/assets/images/cms/bottom_cap.png +0 -0
- data/app/assets/images/cms/bottom_cap_content.png +0 -0
- data/app/assets/images/cms/browse.gif +0 -0
- data/app/assets/images/cms/browser_media_logo.png +0 -0
- data/app/assets/images/cms/browsercms_logo.png +0 -0
- data/app/assets/images/cms/buttons/button.png +0 -0
- data/app/assets/images/cms/buttons/button_bg.png +0 -0
- data/app/assets/images/cms/buttons/button_cap.png +0 -0
- data/app/assets/images/cms/buttons/button_cap_h.png +0 -0
- data/app/assets/images/cms/buttons/button_cap_off.gif +0 -0
- data/app/assets/images/cms/buttons/button_cap_off_middle.gif +0 -0
- data/app/assets/images/cms/buttons/button_h.png +0 -0
- data/app/assets/images/cms/buttons/button_left_bg.png +0 -0
- data/app/assets/images/cms/buttons/button_off.png +0 -0
- data/app/assets/images/cms/buttons/button_off_middle.png +0 -0
- data/app/assets/images/cms/buttons/delete_x.png +0 -0
- data/app/assets/images/cms/buttons/delete_x_disabled.png +0 -0
- data/app/assets/images/cms/buttons/delete_x_h.png +0 -0
- data/app/assets/images/cms/buttons/sm_button.gif +0 -0
- data/app/assets/images/cms/buttons/sm_button_2.gif +0 -0
- data/app/assets/images/cms/buttons/sm_button_2_h.gif +0 -0
- data/app/assets/images/cms/buttons/sm_button_h.gif +0 -0
- data/app/assets/images/cms/cogs.png +0 -0
- data/app/assets/images/cms/containers/add.gif +0 -0
- data/app/assets/images/cms/containers/alpha.png +0 -0
- data/app/assets/images/cms/containers/beta.png +0 -0
- data/app/assets/images/cms/containers/delete.gif +0 -0
- data/app/assets/images/cms/containers/down.gif +0 -0
- data/app/assets/images/cms/containers/edit.gif +0 -0
- data/app/assets/images/cms/containers/up.gif +0 -0
- data/app/assets/images/cms/containers/view.gif +0 -0
- data/app/assets/images/cms/content_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/bottom_cap.png +0 -0
- data/app/assets/images/cms/dashboard/bottom_cap_content.png +0 -0
- data/app/assets/images/cms/dashboard/header_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/header_left_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/home.png +0 -0
- data/app/assets/images/cms/dashboard/table_header_bg.gif +0 -0
- data/app/assets/images/cms/dashboard/top_cap.png +0 -0
- data/app/assets/images/cms/dashed.gif +0 -0
- data/app/assets/images/cms/datepicker/clear.gif +0 -0
- data/app/assets/images/cms/datepicker/close.gif +0 -0
- data/app/assets/images/cms/dk_button_l.gif +0 -0
- data/app/assets/images/cms/dk_button_r.gif +0 -0
- data/app/assets/images/cms/dot.png +0 -0
- data/app/assets/images/cms/draft_status.gif +0 -0
- data/app/assets/images/cms/file-uploading.gif +0 -0
- data/app/assets/images/cms/gray_long_bg.gif +0 -0
- data/app/assets/images/cms/home.png +0 -0
- data/app/assets/images/cms/icons/actions/add.png +0 -0
- data/app/assets/images/cms/icons/actions/config.png +0 -0
- data/app/assets/images/cms/icons/actions/connect.png +0 -0
- data/app/assets/images/cms/icons/actions/delete.png +0 -0
- data/app/assets/images/cms/icons/actions/down.png +0 -0
- data/app/assets/images/cms/icons/actions/edit.png +0 -0
- data/app/assets/images/cms/icons/actions/folder.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_add.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_delete.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_edit.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_move.png +0 -0
- data/app/assets/images/cms/icons/actions/folder_open.png +0 -0
- data/app/assets/images/cms/icons/actions/history.png +0 -0
- data/app/assets/images/cms/icons/actions/home.png +0 -0
- data/app/assets/images/cms/icons/actions/left.png +0 -0
- data/app/assets/images/cms/icons/actions/link.png +0 -0
- data/app/assets/images/cms/icons/actions/page.png +0 -0
- data/app/assets/images/cms/icons/actions/page_add.png +0 -0
- data/app/assets/images/cms/icons/actions/page_edit.png +0 -0
- data/app/assets/images/cms/icons/actions/page_move.png +0 -0
- data/app/assets/images/cms/icons/actions/redo.png +0 -0
- data/app/assets/images/cms/icons/actions/refresh.png +0 -0
- data/app/assets/images/cms/icons/actions/right.png +0 -0
- data/app/assets/images/cms/icons/actions/root_folder.png +0 -0
- data/app/assets/images/cms/icons/actions/root_link.png +0 -0
- data/app/assets/images/cms/icons/actions/root_page.png +0 -0
- data/app/assets/images/cms/icons/actions/undo.png +0 -0
- data/app/assets/images/cms/icons/actions/up.png +0 -0
- data/app/assets/images/cms/icons/actions/view.png +0 -0
- data/app/assets/images/cms/icons/file_types/doc.png +0 -0
- data/app/assets/images/cms/icons/file_types/file.png +0 -0
- data/app/assets/images/cms/icons/file_types/gif.png +0 -0
- data/app/assets/images/cms/icons/file_types/htm.png +0 -0
- data/app/assets/images/cms/icons/file_types/pdf.png +0 -0
- data/app/assets/images/cms/icons/file_types/ppt.png +0 -0
- data/app/assets/images/cms/icons/file_types/swf.png +0 -0
- data/app/assets/images/cms/icons/file_types/txt.png +0 -0
- data/app/assets/images/cms/icons/file_types/xls.png +0 -0
- data/app/assets/images/cms/icons/file_types/xml.png +0 -0
- data/app/assets/images/cms/icons/file_types/zip.png +0 -0
- data/app/assets/images/cms/icons/status/archived.gif +0 -0
- data/app/assets/images/cms/icons/status/draft.gif +0 -0
- data/app/assets/images/cms/icons/status/hidden.gif +0 -0
- data/app/assets/images/cms/icons/status/locked.gif +0 -0
- data/app/assets/images/cms/icons/status/published.gif +0 -0
- data/app/assets/images/cms/icons/status/unlocked.gif +0 -0
- data/app/assets/images/cms/icons/user.png +0 -0
- data/app/assets/images/cms/login_bg.jpg +0 -0
- data/app/assets/images/cms/login_bottom.jpg +0 -0
- data/app/assets/images/cms/login_top.gif +0 -0
- data/app/assets/images/cms/logo.png +0 -0
- data/app/assets/images/cms/lt_button_bg.gif +0 -0
- data/app/assets/images/cms/lt_button_l.gif +0 -0
- data/app/assets/images/cms/lt_button_r.gif +0 -0
- data/app/assets/images/cms/menu/block_cap_h.gif +0 -0
- data/app/assets/images/cms/menu/bottom_cap.png +0 -0
- data/app/assets/images/cms/menu/bottom_cap_menu.png +0 -0
- data/app/assets/images/cms/menu/bottom_cap_menu_first.png +0 -0
- data/app/assets/images/cms/menu/menu_header_first_bg.gif +0 -0
- data/app/assets/images/cms/menu/selected_block_cap.gif +0 -0
- data/app/assets/images/cms/menu/top_cap.png +0 -0
- data/app/assets/images/cms/menu/top_cap_menu_header.png +0 -0
- data/app/assets/images/cms/menu.png +0 -0
- data/app/assets/images/cms/menu_h.gif +0 -0
- data/app/assets/images/cms/menu_header.png +0 -0
- data/app/assets/images/cms/menu_open.png +0 -0
- data/app/assets/images/cms/menu_open_bg.gif +0 -0
- data/app/assets/images/cms/nav/on_bg.gif +0 -0
- data/app/assets/images/cms/nav.png +0 -0
- data/app/assets/images/cms/nav_admin.gif +0 -0
- data/app/assets/images/cms/nav_admin_h.gif +0 -0
- data/app/assets/images/cms/nav_admin_on.gif +0 -0
- data/app/assets/images/cms/nav_cap.png +0 -0
- data/app/assets/images/cms/nav_cap_h.gif +0 -0
- data/app/assets/images/cms/nav_content_library.gif +0 -0
- data/app/assets/images/cms/nav_content_library_h.gif +0 -0
- data/app/assets/images/cms/nav_content_library_on.gif +0 -0
- data/app/assets/images/cms/nav_dash.gif +0 -0
- data/app/assets/images/cms/nav_dash_h.gif +0 -0
- data/app/assets/images/cms/nav_dash_on.gif +0 -0
- data/app/assets/images/cms/nav_h.gif +0 -0
- data/app/assets/images/cms/nav_sitemap.gif +0 -0
- data/app/assets/images/cms/nav_sitemap_h.gif +0 -0
- data/app/assets/images/cms/nav_sitemap_on.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_draft_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_draft_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_draft_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_published_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_published_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_published_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_inset_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/page_toolbar_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_draft_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_draft_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_published_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/status_published_l.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_bg.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_end.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_r.gif +0 -0
- data/app/assets/images/cms/page_toolbar/visual_editor_state_bg.gif +0 -0
- data/app/assets/images/cms/pages/add_connectable.gif +0 -0
- data/app/assets/images/cms/pages/connect_connectable.gif +0 -0
- data/app/assets/images/cms/pages/container_border.gif +0 -0
- data/app/assets/images/cms/pages/container_border_l.gif +0 -0
- data/app/assets/images/cms/pages/container_border_r.gif +0 -0
- data/app/assets/images/cms/pages/delete_connectable.gif +0 -0
- data/app/assets/images/cms/pages/down_connectable.gif +0 -0
- data/app/assets/images/cms/pages/down_connectable_disabled.gif +0 -0
- data/app/assets/images/cms/pages/edit_connectable.gif +0 -0
- data/app/assets/images/cms/pages/edit_connectable_2.gif +0 -0
- data/app/assets/images/cms/pages/show_connectable.gif +0 -0
- data/app/assets/images/cms/pages/up_connectable.gif +0 -0
- data/app/assets/images/cms/pages/up_connectable_disabled.gif +0 -0
- data/app/assets/images/cms/pagination/first.gif +0 -0
- data/app/assets/images/cms/pagination/first_h.gif +0 -0
- data/app/assets/images/cms/pagination/input.gif +0 -0
- data/app/assets/images/cms/pagination/last.gif +0 -0
- data/app/assets/images/cms/pagination/last_h.gif +0 -0
- data/app/assets/images/cms/pagination/next.gif +0 -0
- data/app/assets/images/cms/pagination/next_h.gif +0 -0
- data/app/assets/images/cms/pagination/previous.gif +0 -0
- data/app/assets/images/cms/pagination/previous_h.gif +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/published_status.gif +0 -0
- data/app/assets/images/cms/search.png +0 -0
- data/app/assets/images/cms/search_submit.gif +0 -0
- data/app/assets/images/cms/search_submit_h.gif +0 -0
- data/app/assets/images/cms/searchbox_gradient.gif +0 -0
- data/app/assets/images/cms/select_bg.gif +0 -0
- data/app/assets/images/cms/select_bg_2.gif +0 -0
- data/app/assets/images/cms/sitemap/bottom_cap.png +0 -0
- data/app/assets/images/cms/sitemap/buffer_caps.png +0 -0
- data/app/assets/images/cms/sitemap/contract.png +0 -0
- data/app/assets/images/cms/sitemap/corners.gif +0 -0
- data/app/assets/images/cms/sitemap/corners_hover.gif +0 -0
- data/app/assets/images/cms/sitemap/divider.gif +0 -0
- data/app/assets/images/cms/sitemap/expand.png +0 -0
- data/app/assets/images/cms/sitemap/gradient.gif +0 -0
- data/app/assets/images/cms/sitemap/gray_contract.png +0 -0
- data/app/assets/images/cms/sitemap/gray_expand.png +0 -0
- data/app/assets/images/cms/sitemap/no_contents.png +0 -0
- data/app/assets/images/cms/sitemap/site_root_cap.png +0 -0
- data/app/assets/images/cms/sitemap/tooltip.gif +0 -0
- data/app/assets/images/cms/sitemap/top_cap_content.png +0 -0
- data/app/assets/images/cms/solid.gif +0 -0
- data/app/assets/images/cms/table/bl.gif +0 -0
- data/app/assets/images/cms/table/br.gif +0 -0
- data/app/assets/images/cms/table/divider.gif +0 -0
- data/app/assets/images/cms/table/td_cap_first_h.gif +0 -0
- data/app/assets/images/cms/table/td_cap_first_s.gif +0 -0
- data/app/assets/images/cms/table/td_cap_last_h.gif +0 -0
- data/app/assets/images/cms/table/td_cap_last_s.gif +0 -0
- data/app/assets/images/cms/table/td_last_bg.gif +0 -0
- data/app/assets/images/cms/table/th_bg.gif +0 -0
- data/app/assets/images/cms/table/th_divider.gif +0 -0
- data/app/assets/images/cms/table/th_last_bg.gif +0 -0
- data/app/assets/images/cms/table/tl.gif +0 -0
- data/app/assets/images/cms/table/tr.gif +0 -0
- data/app/assets/images/cms/table/tr_bg.gif +0 -0
- data/app/assets/images/cms/toolbar_bg.png +0 -0
- data/app/assets/images/cms/top_cap.png +0 -0
- data/app/assets/images/cms/top_cap_content.png +0 -0
- data/app/assets/images/cms/top_cap_menu_header.png +0 -0
- data/app/assets/images/cms/user.png +0 -0
- data/app/assets/images/cms/user_search_submit.gif +0 -0
- data/app/assets/images/cms/usercontrols_bg.png +0 -0
- data/app/assets/images/cms/usercontrols_bg_cap.png +0 -0
- data/app/assets/javascripts/bcms/ckeditor.js +8 -0
- data/app/assets/javascripts/bcms/ckeditor_inline.js +23 -0
- data/app/assets/javascripts/bcms/ckeditor_load.js +54 -0
- data/app/assets/javascripts/bcms/ckeditor_standard_config.js +10 -0
- 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 +18 -0
- data/app/assets/javascripts/cms/attachment_manager.js +88 -0
- data/app/assets/javascripts/cms/content_library.js +121 -0
- data/app/assets/javascripts/cms/content_types.js +13 -0
- data/app/assets/javascripts/cms/core_library.js.erb +210 -0
- 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 +189 -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 +21 -0
- 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 +157 -0
- data/app/assets/stylesheets/cms/_assets.scss +60 -0
- data/app/assets/stylesheets/cms/_base.scss +42 -0
- data/app/assets/stylesheets/cms/_cms-buttons.scss +73 -0
- data/app/assets/stylesheets/cms/_cms-forms.scss +70 -0
- data/app/assets/stylesheets/cms/_colors.scss +20 -0
- data/app/assets/stylesheets/cms/_dashboard.scss +25 -0
- data/app/assets/stylesheets/cms/_glyph.scss +60 -0
- data/app/assets/stylesheets/cms/_main-area.scss +62 -0
- data/app/assets/stylesheets/cms/_nav.scss +197 -0
- data/app/assets/stylesheets/cms/_sidebar.scss +64 -0
- data/app/assets/stylesheets/cms/_sitemap.scss +209 -0
- data/app/assets/stylesheets/cms/_submenu.scss +48 -0
- data/app/assets/stylesheets/cms/application.scss +49 -0
- data/app/assets/stylesheets/cms/core.scss +96 -0
- data/app/assets/stylesheets/cms/default-forms.scss +3 -0
- data/app/assets/stylesheets/cms/includes/_animation.scss +2 -0
- data/app/assets/stylesheets/cms/includes/_rem.scss +120 -0
- data/app/assets/stylesheets/cms/includes/animation/_animate.scss +31 -0
- data/app/assets/stylesheets/cms/includes/animation/_core.scss +127 -0
- data/app/assets/stylesheets/cms/includes/animation/_shared.scss +22 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_attention-seekers.scss +152 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_bouncing.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_classes.scss +21 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_fading.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_flippers.scss +87 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_lightspeed.scss +24 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_rotating.scss +3 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/_specials.scss +42 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-entrances.scss +68 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-exits.scss +60 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-entrances.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-exits.scss +86 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-entrances.scss +58 -0
- data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-exits.scss +58 -0
- data/app/assets/stylesheets/cms/page_content_editing.scss +4 -0
- data/app/assets/stylesheets/cms/page_editor.scss +4 -0
- data/app/assets/stylesheets/cms/style.scss +138 -0
- data/app/assets/stylesheets/cms/styles/_alerts.scss +150 -0
- data/app/assets/stylesheets/cms/styles/_base-grid.scss +299 -0
- data/app/assets/stylesheets/cms/styles/_buttons.scss +247 -0
- data/app/assets/stylesheets/cms/styles/_dropdown.scss +155 -0
- data/app/assets/stylesheets/cms/styles/_forms.scss +728 -0
- data/app/assets/stylesheets/cms/styles/_glyph.scss +86 -0
- data/app/assets/stylesheets/cms/styles/_images.scss +86 -0
- data/app/assets/stylesheets/cms/styles/_lists.scss +115 -0
- data/app/assets/stylesheets/cms/styles/_modal.scss +174 -0
- data/app/assets/stylesheets/cms/styles/_progress.scss +43 -0
- data/app/assets/stylesheets/cms/styles/_tables.scss +141 -0
- data/app/assets/stylesheets/cms/styles/_text.scss +134 -0
- data/app/controllers/cms/application_controller.rb +11 -0
- data/app/controllers/cms/attachments_controller.rb +48 -0
- data/app/controllers/cms/base_controller.rb +22 -0
- data/app/controllers/cms/cache_controller.rb +23 -0
- data/app/controllers/cms/categories_controller.rb +7 -0
- data/app/controllers/cms/category_types_controller.rb +12 -0
- data/app/controllers/cms/connectors_controller.rb +70 -0
- data/app/controllers/cms/content_block_controller.rb +361 -0
- data/app/controllers/cms/content_controller.rb +173 -0
- data/app/controllers/cms/content_types_controller.rb +14 -0
- data/app/controllers/cms/dashboard_controller.rb +13 -0
- data/app/controllers/cms/dynamic_views_controller.rb +81 -0
- data/app/controllers/cms/email_messages_controller.rb +21 -0
- data/app/controllers/cms/file_blocks_controller.rb +4 -0
- data/app/controllers/cms/form_entries_controller.rb +140 -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 +25 -0
- data/app/controllers/cms/home_controller.rb +10 -0
- data/app/controllers/cms/html_blocks_controller.rb +4 -0
- data/app/controllers/cms/image_blocks_controller.rb +4 -0
- data/app/controllers/cms/inline_content_controller.rb +50 -0
- data/app/controllers/cms/links_controller.rb +81 -0
- data/app/controllers/cms/page_components_controller.rb +20 -0
- data/app/controllers/cms/page_route_conditions_controller.rb +4 -0
- data/app/controllers/cms/page_route_options_controller.rb +58 -0
- data/app/controllers/cms/page_route_requirements_controller.rb +4 -0
- data/app/controllers/cms/page_routes_controller.rb +51 -0
- data/app/controllers/cms/pages_controller.rb +151 -0
- data/app/controllers/cms/passwords_controller.rb +22 -0
- data/app/controllers/cms/portlet_controller.rb +21 -0
- data/app/controllers/cms/portlets_controller.rb +35 -0
- data/app/controllers/cms/redirects_controller.rb +25 -0
- data/app/controllers/cms/resource_controller.rb +125 -0
- data/app/controllers/cms/routes_controller.rb +22 -0
- data/app/controllers/cms/section_nodes_controller.rb +24 -0
- data/app/controllers/cms/sections_controller.rb +100 -0
- data/app/controllers/cms/sessions_controller.rb +15 -0
- data/app/controllers/cms/sites/passwords_controller.rb +32 -0
- data/app/controllers/cms/sites/sessions_controller.rb +20 -0
- data/app/controllers/cms/tags_controller.rb +16 -0
- data/app/controllers/cms/tasks_controller.rb +56 -0
- data/app/controllers/cms/toolbar_controller.rb +18 -0
- data/app/controllers/cms/user_controller.rb +8 -0
- data/app/controllers/cms/users_controller.rb +125 -0
- data/app/controllers/tests/pretend_controller.rb +32 -0
- data/app/helpers/cms/application_helper.rb +258 -0
- data/app/helpers/cms/content_block_helper.rb +55 -0
- data/app/helpers/cms/content_types_helper.rb +4 -0
- data/app/helpers/cms/form_tag_helper.rb +36 -0
- data/app/helpers/cms/menu_helper.rb +167 -0
- data/app/helpers/cms/mobile_helper.rb +29 -0
- data/app/helpers/cms/nav_menu_helper.rb +23 -0
- data/app/helpers/cms/page_helper.rb +169 -0
- data/app/helpers/cms/path_helper.rb +113 -0
- data/app/helpers/cms/rendering_helper.rb +112 -0
- data/app/helpers/cms/section_nodes_helper.rb +112 -0
- 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 +18 -0
- data/app/helpers/cms/ui_elements_helper.rb +168 -0
- 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/date_picker_input.rb +8 -0
- data/app/inputs/file_picker_input.rb +75 -0
- data/app/inputs/name_input.rb +42 -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 +50 -0
- data/app/models/cms/attachment.rb +267 -0
- data/app/models/cms/category.rb +56 -0
- data/app/models/cms/category_type.rb +43 -0
- data/app/models/cms/connector.rb +99 -0
- data/app/models/cms/content.rb +31 -0
- data/app/models/cms/content_type.rb +191 -0
- data/app/models/cms/dynamic_view.rb +81 -0
- data/app/models/cms/email_message.rb +63 -0
- data/app/models/cms/email_message_mailer.rb +12 -0
- data/app/models/cms/external_user.rb +60 -0
- data/app/models/cms/file_block.rb +19 -0
- data/app/models/cms/form.rb +47 -0
- data/app/models/cms/form_entry.rb +75 -0
- data/app/models/cms/form_field.rb +78 -0
- data/app/models/cms/group.rb +62 -0
- data/app/models/cms/group_permission.rb +12 -0
- data/app/models/cms/group_section.rb +9 -0
- data/app/models/cms/group_type.rb +16 -0
- data/app/models/cms/group_type_permission.rb +8 -0
- data/app/models/cms/guest_user.rb +57 -0
- data/app/models/cms/html_block.rb +38 -0
- data/app/models/cms/image_block.rb +23 -0
- data/app/models/cms/link.rb +20 -0
- data/app/models/cms/page.rb +437 -0
- data/app/models/cms/page_component.rb +43 -0
- data/app/models/cms/page_partial.rb +40 -0
- data/app/models/cms/page_route.rb +140 -0
- data/app/models/cms/page_route_condition.rb +5 -0
- data/app/models/cms/page_route_option.rb +7 -0
- data/app/models/cms/page_route_requirement.rb +5 -0
- data/app/models/cms/page_template.rb +45 -0
- data/app/models/cms/permission.rb +17 -0
- data/app/models/cms/persistent_user.rb +223 -0
- data/app/models/cms/portlet.rb +237 -0
- data/app/models/cms/redirect.rb +12 -0
- data/app/models/cms/search_filter.rb +18 -0
- data/app/models/cms/section.rb +224 -0
- data/app/models/cms/section_node.rb +144 -0
- data/app/models/cms/site.rb +45 -0
- data/app/models/cms/tag.rb +69 -0
- data/app/models/cms/tagging.rb +14 -0
- data/app/models/cms/task.rb +75 -0
- data/app/models/cms/templates.rb +31 -0
- data/app/models/cms/user.rb +43 -0
- data/app/models/cms/user_group_membership.rb +9 -0
- data/app/models/cms/view_context.rb +81 -0
- data/app/portlets/deprecated_placeholder.rb +12 -0
- data/app/portlets/dynamic_portlet.rb +7 -0
- data/app/portlets/email_page_portlet.rb +32 -0
- data/app/portlets/forgot_password_portlet.rb +15 -0
- data/app/portlets/helpers/cms/list_portlet_helper.rb +5 -0
- data/app/portlets/list_portlet.rb +40 -0
- data/app/portlets/login_portlet.rb +13 -0
- data/app/portlets/tag_cloud_portlet.rb +15 -0
- data/app/presenters/cms/user_presenter.rb +47 -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/application/_exception.html.erb +6 -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/application/_version_conflict_diff.html.erb +11 -0
- data/app/views/cms/application/_version_conflict_error.html.erb +6 -0
- data/app/views/cms/attachments/_attachment.html.erb +16 -0
- data/app/views/cms/attachments/_attachment_manager.html.erb +39 -0
- data/app/views/cms/attachments/_attachment_table.html.erb +22 -0
- data/app/views/cms/attachments/_attachment_wrapper.html.erb +4 -0
- data/app/views/cms/attachments/_no_attachments_defined.html.erb +1 -0
- data/app/views/cms/cache/show.html.erb +7 -0
- data/app/views/cms/categories/_form.html.erb +27 -0
- data/app/views/cms/category_types/_form.html.erb +1 -0
- data/app/views/cms/connectors/new.html.erb +38 -0
- data/app/views/cms/content/editing_frame.html.erb +1 -0
- data/app/views/cms/content/no_page.html.erb +19 -0
- data/app/views/cms/content/show.html.erb +21 -0
- 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 +36 -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/content_types/_order_field.html.erb +5 -0
- data/app/views/cms/content_types/index.html.erb +3 -0
- data/app/views/cms/dashboard/_page_drafts.html.erb +39 -0
- data/app/views/cms/dashboard/_tasks.html.erb +41 -0
- data/app/views/cms/dashboard/index.html.erb +13 -0
- data/app/views/cms/dynamic_views/_form.html.erb +9 -0
- data/app/views/cms/dynamic_views/edit.html.erb +2 -0
- data/app/views/cms/dynamic_views/index.html.erb +33 -0
- data/app/views/cms/dynamic_views/new.html.erb +2 -0
- data/app/views/cms/email_messages/index.html.erb +36 -0
- data/app/views/cms/email_messages/show.html.erb +50 -0
- data/app/views/cms/file_blocks/_form.html.erb +3 -0
- data/app/views/cms/file_blocks/_section_selector.html.erb +13 -0
- data/app/views/cms/file_blocks/render.html.erb +5 -0
- data/app/views/cms/forgot_password_mailer/reset_password.text.html.erb +3 -0
- data/app/views/cms/forgot_password_mailer/reset_password.text.plain.erb +3 -0
- 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 +5 -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 +67 -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 +38 -0
- data/app/views/cms/groups/_permissions.html.erb +14 -0
- data/app/views/cms/groups/_sections.html.erb +12 -0
- data/app/views/cms/groups/edit.html.erb +2 -0
- data/app/views/cms/groups/index.html.erb +36 -0
- data/app/views/cms/groups/new.html.erb +2 -0
- data/app/views/cms/html_blocks/_form.html.erb +3 -0
- data/app/views/cms/html_blocks/render.html.erb +1 -0
- data/app/views/cms/image_blocks/_form.html.erb +3 -0
- data/app/views/cms/image_blocks/render.html.erb +4 -0
- data/app/views/cms/links/_form.html.erb +8 -0
- data/app/views/cms/links/edit.html.erb +4 -0
- data/app/views/cms/links/new.html.erb +5 -0
- data/app/views/cms/menus/_menu.html.erb +9 -0
- data/app/views/cms/menus/_menu_item.html.erb +11 -0
- 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 +12 -0
- data/app/views/cms/page_routes/edit.html.erb +2 -0
- data/app/views/cms/page_routes/index.html.erb +33 -0
- data/app/views/cms/page_routes/new.html.erb +2 -0
- data/app/views/cms/pages/_edit_content.html.erb +28 -0
- data/app/views/cms/pages/_form.html.erb +21 -0
- 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 -0
- data/app/views/cms/pages/new.html.erb +19 -0
- data/app/views/cms/pages/versions.html.erb +22 -0
- data/app/views/cms/passwords/new.html.erb +16 -0
- data/app/views/cms/redirects/_form.html.erb +7 -0
- data/app/views/cms/redirects/edit.html.erb +2 -0
- data/app/views/cms/redirects/index.html.erb +25 -0
- data/app/views/cms/redirects/new.html.erb +2 -0
- data/app/views/cms/routes/index.html.erb +35 -0
- data/app/views/cms/section_nodes/_children.html.erb +5 -0
- data/app/views/cms/section_nodes/_row_buttons.html.erb +11 -0
- data/app/views/cms/section_nodes/_section_node.html.erb +24 -0
- 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 +30 -0
- data/app/views/cms/sections/edit.html.erb +4 -0
- data/app/views/cms/sections/new.html.erb +5 -0
- data/app/views/cms/sessions/new.html.erb +16 -0
- data/app/views/cms/shared/access_denied.html.erb +2 -0
- data/app/views/cms/shared/error.html.erb +40 -0
- data/app/views/cms/shared/error.xml.erb +8 -0
- 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 -0
- data/app/views/cms/tags/render.html.erb +52 -0
- data/app/views/cms/tasks/new.html.erb +22 -0
- data/app/views/cms/toolbar/_new_pages_menu.html.erb +10 -0
- data/app/views/cms/users/_form.html.erb +9 -0
- data/app/views/cms/users/_password.html.erb +2 -0
- data/app/views/cms/users/_user_fields.html.erb +7 -0
- data/app/views/cms/users/change_password.html.erb +12 -0
- data/app/views/cms/users/edit.html.erb +2 -0
- data/app/views/cms/users/index.html.erb +65 -0
- data/app/views/cms/users/new.html.erb +2 -0
- 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 +4 -0
- data/app/views/layouts/cms/_head.html.erb +8 -0
- data/app/views/layouts/cms/_main_menu.html.erb +78 -0
- data/app/views/layouts/cms/application.html.erb +23 -0
- 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 -0
- data/app/views/portlets/email_page/_form.html.erb +5 -0
- data/app/views/portlets/email_page/render.html.erb +17 -0
- data/app/views/portlets/forgot_password/_form.html.erb +5 -0
- data/app/views/portlets/forgot_password/render.html.erb +2 -0
- data/app/views/portlets/list/_form.html.erb +33 -0
- data/app/views/portlets/list/_list.html.erb +6 -0
- data/app/views/portlets/list/_table.html.erb +13 -0
- data/app/views/portlets/list/render.html.erb +1 -0
- data/app/views/portlets/login/_form.html.erb +4 -0
- data/app/views/portlets/login/render.html.erb +10 -0
- data/app/views/portlets/portlets/_form.html.erb +20 -0
- data/app/views/portlets/tag_cloud/_form.html.erb +4 -0
- data/app/views/portlets/tag_cloud/render.html.erb +5 -0
- data/app/views/tests/pretend/open_with_layout.html.erb +5 -0
- data/bin/bcms +321 -0
- data/bin/browsercms +4 -0
- data/bin/rake +16 -0
- data/config/routes.rb +135 -0
- data/db/browsercms.seeds.rb +63 -0
- data/db/migrate/20080815014337_browsercms300.rb +287 -0
- data/db/migrate/20130327184912_browsercms400.rb +120 -0
- data/db/migrate/20150715173336_create_default_users.rb +12 -0
- data/db/seeds.rb +1 -0
- data/doc/README_FOR_APP +6 -0
- data/doc/design/blue_button.psd +0 -0
- data/doc/design/gray_box.psd +0 -0
- data/doc/design/main_nav.psd +0 -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/performance_tuning_notes.md +12 -0
- data/doc/release_notes.md +837 -0
- data/doc/test_procedure.txt +141 -0
- data/lib/acts_as_list.rb +257 -0
- data/lib/browsercms-artirix.rb +1 -0
- data/lib/browsercms.rb +73 -0
- data/lib/cms/acts/cms_user.rb +131 -0
- data/lib/cms/acts/content_block.rb +61 -0
- data/lib/cms/acts/content_page.rb +90 -0
- data/lib/cms/acts.rb +7 -0
- data/lib/cms/admin_tab.rb +15 -0
- data/lib/cms/attachments/attachment_serving.rb +59 -0
- data/lib/cms/attachments/configuration.rb +88 -0
- data/lib/cms/authentication/controller.rb +120 -0
- data/lib/cms/authentication/test_password_strategy.rb +28 -0
- data/lib/cms/authentication.rb +4 -0
- data/lib/cms/authoring.rb +9 -0
- data/lib/cms/behaviors/archiving.rb +43 -0
- data/lib/cms/behaviors/attaching.rb +363 -0
- data/lib/cms/behaviors/categorizing.rb +31 -0
- data/lib/cms/behaviors/connecting.rb +141 -0
- data/lib/cms/behaviors/dynamic_attributes.rb +384 -0
- data/lib/cms/behaviors/flush_cache_on_change.rb +31 -0
- data/lib/cms/behaviors/hiding.rb +46 -0
- data/lib/cms/behaviors/namespacing.rb +15 -0
- data/lib/cms/behaviors/naming.rb +16 -0
- data/lib/cms/behaviors/publishing.rb +205 -0
- data/lib/cms/behaviors/rendering.rb +195 -0
- data/lib/cms/behaviors/searching.rb +45 -0
- data/lib/cms/behaviors/soft_deleting.rb +103 -0
- data/lib/cms/behaviors/taggable.rb +66 -0
- data/lib/cms/behaviors/userstamping.rb +42 -0
- data/lib/cms/behaviors/versioning.rb +360 -0
- data/lib/cms/behaviors.rb +34 -0
- data/lib/cms/caching.rb +62 -0
- data/lib/cms/commands/actions.rb +107 -0
- data/lib/cms/commands/to_version400.rb +10 -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/concerns.rb +7 -0
- data/lib/cms/configuration/configurable_template.rb +24 -0
- data/lib/cms/configuration/devise.rb +256 -0
- data/lib/cms/configuration.rb +79 -0
- data/lib/cms/configure_simple_form.rb +142 -0
- data/lib/cms/configure_simple_form_bootstrap.rb +58 -0
- data/lib/cms/content_filter.rb +18 -0
- data/lib/cms/content_page.rb +77 -0
- data/lib/cms/content_rendering_support.rb +114 -0
- data/lib/cms/controllers/admin_controller.rb +78 -0
- data/lib/cms/data_loader.rb +54 -0
- data/lib/cms/date_picker.rb +23 -0
- data/lib/cms/default_accessible.rb +13 -0
- data/lib/cms/domain_support.rb +38 -0
- data/lib/cms/engine.rb +135 -0
- data/lib/cms/engine_helper.rb +103 -0
- data/lib/cms/error_handling.rb +84 -0
- data/lib/cms/error_pages.rb +8 -0
- data/lib/cms/extensions/action_view/base.rb +13 -0
- data/lib/cms/extensions/active_model/name.rb +13 -0
- data/lib/cms/extensions/active_record/base.rb +37 -0
- data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +94 -0
- data/lib/cms/extensions/active_record/errors.rb +12 -0
- data/lib/cms/extensions/active_support/cache/file_store.rb +9 -0
- data/lib/cms/extensions/hash.rb +11 -0
- data/lib/cms/extensions/integer.rb +16 -0
- data/lib/cms/extensions/nil.rb +19 -0
- data/lib/cms/extensions/string.rb +24 -0
- data/lib/cms/extensions.rb +5 -0
- 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/installation_actions.rb +8 -0
- data/lib/cms/mobile_aware.rb +67 -0
- data/lib/cms/module.rb +36 -0
- data/lib/cms/module_installation.rb +31 -0
- 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 +157 -0
- data/lib/cms/users_service.rb +208 -0
- data/lib/cms/version.rb +11 -0
- data/lib/command_line.rb +39 -0
- data/lib/generators/browser_cms/demo_site/USAGE +3 -0
- data/lib/generators/browser_cms/demo_site/templates/demo.seeds.rb +249 -0
- data/lib/generators/browser_cms/demo_site/templates/demo_site.rake +14 -0
- data/lib/generators/browser_cms/demo_site/templates/logo.jpg +0 -0
- data/lib/generators/browser_cms/demo_site/templates/splash.jpg +0 -0
- data/lib/generators/browser_cms/demo_site/templates/style.css +257 -0
- data/lib/generators/browser_cms.rb +12 -0
- data/lib/generators/cms/content_block/USAGE +22 -0
- data/lib/generators/cms/content_block/content_block_generator.rb +103 -0
- data/lib/generators/cms/content_block/templates/_form.html.erb +27 -0
- data/lib/generators/cms/content_block/templates/application_controller.rb.erb +4 -0
- data/lib/generators/cms/content_block/templates/render.html.erb +23 -0
- data/lib/generators/cms/install/USAGE +8 -0
- data/lib/generators/cms/install/install_generator.rb +16 -0
- data/lib/generators/cms/portlet/USAGE +26 -0
- data/lib/generators/cms/portlet/portlet_generator.rb +38 -0
- data/lib/generators/cms/portlet/templates/_form.html.erb +5 -0
- data/lib/generators/cms/portlet/templates/portlet.rb +12 -0
- data/lib/generators/cms/portlet/templates/portlet_helper.rb +5 -0
- data/lib/generators/cms/portlet/templates/render.html.erb +1 -0
- data/lib/generators/cms/portlet/templates/unit_test.erb +9 -0
- data/lib/generators/cms/project/USAGE +1 -0
- data/lib/generators/cms/project/templates/COPYRIGHT.txt +23 -0
- data/lib/generators/cms/project/templates/GPL.txt +674 -0
- data/lib/generators/cms/project/templates/LICENSE.txt +165 -0
- data/lib/generators/cms/project/templates/USAGE +3 -0
- data/lib/generators/cms/project/templates/devise.rb.erb +7 -0
- data/lib/generators/cms/project/templates/gitignore.erb +11 -0
- data/lib/generators/cms/project/templates/install_generator.erb +21 -0
- data/lib/generators/cms/project/templates/module_tasks.rake +10 -0
- data/lib/generators/cms/template/USAGE +10 -0
- data/lib/generators/cms/template/template_generator.rb +29 -0
- data/lib/generators/cms/template/templates/template.erb +2 -0
- data/lib/sequence.rb +6 -0
- data/lib/tasks/cms.rake +23 -0
- data/lib/templates/active_record/model/model.rb +17 -0
- data/vendor/assets/javascripts/jquery.cookie.js +91 -0
- data/vendor/assets/javascripts/jquery.selectbox.js +209 -0
- metadata +1048 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
Here is a series of tasks to test the basic interface functionality of the CMS.
|
|
2
|
+
|
|
3
|
+
Note: It is best to build the cms gem and install it, then test the functionality in a rails app that has been configured to use the new gem.
|
|
4
|
+
|
|
5
|
+
Sitemap:
|
|
6
|
+
Add Section
|
|
7
|
+
Add Page
|
|
8
|
+
Test Edit Page Link
|
|
9
|
+
Add Link
|
|
10
|
+
Edit Section Properties
|
|
11
|
+
Edit Page Properties
|
|
12
|
+
Edit Link Properties
|
|
13
|
+
Publish Link
|
|
14
|
+
Move Link
|
|
15
|
+
Move Page
|
|
16
|
+
Move Section
|
|
17
|
+
Delete Link
|
|
18
|
+
Delete Page
|
|
19
|
+
Delete Section
|
|
20
|
+
|
|
21
|
+
Content Library:
|
|
22
|
+
Add Image
|
|
23
|
+
Edit Image Metadata
|
|
24
|
+
Edit Image File
|
|
25
|
+
Revert Image to different metadata
|
|
26
|
+
Revert Image to different file
|
|
27
|
+
Search Image
|
|
28
|
+
Add Text
|
|
29
|
+
Edit Text
|
|
30
|
+
Add Link to Text
|
|
31
|
+
Add Image to Text
|
|
32
|
+
Revert Text
|
|
33
|
+
Bulk add Text
|
|
34
|
+
Paginated Search links
|
|
35
|
+
Delete Text
|
|
36
|
+
Delete Image
|
|
37
|
+
Add Portlet
|
|
38
|
+
Edit Portlet
|
|
39
|
+
Search Portlet
|
|
40
|
+
Delete Portlet
|
|
41
|
+
Add File
|
|
42
|
+
Edit File Metadata
|
|
43
|
+
Edit File File
|
|
44
|
+
Revert File to metadata
|
|
45
|
+
Revert File to different file
|
|
46
|
+
Search File
|
|
47
|
+
Delete File
|
|
48
|
+
Add Category Type
|
|
49
|
+
Edit Category Type
|
|
50
|
+
Search Category Type
|
|
51
|
+
Add Category
|
|
52
|
+
Edit Category
|
|
53
|
+
Search Category
|
|
54
|
+
Delete Category
|
|
55
|
+
Delete Category Type
|
|
56
|
+
Add Tag
|
|
57
|
+
Edit Tag
|
|
58
|
+
Search Tag
|
|
59
|
+
Delete Tag
|
|
60
|
+
|
|
61
|
+
Administration:
|
|
62
|
+
Add Public User Group
|
|
63
|
+
Add Admin Group
|
|
64
|
+
Edit Public User Group
|
|
65
|
+
Edit Admin Group
|
|
66
|
+
Add User
|
|
67
|
+
Edit User
|
|
68
|
+
Search User
|
|
69
|
+
Disable User
|
|
70
|
+
Search inactive User
|
|
71
|
+
Enable User
|
|
72
|
+
Login as User
|
|
73
|
+
Change User Password
|
|
74
|
+
Login as User
|
|
75
|
+
Add Page Partial
|
|
76
|
+
Edit Page Partial
|
|
77
|
+
Add Page Partial
|
|
78
|
+
Delete Page Partial
|
|
79
|
+
Add Page Template
|
|
80
|
+
Edit Page Template
|
|
81
|
+
Add Page Template
|
|
82
|
+
Delete Page Template
|
|
83
|
+
Add Page Route
|
|
84
|
+
Test Page Route
|
|
85
|
+
Edit Page Route
|
|
86
|
+
Test old Page Route
|
|
87
|
+
Test new Page Route
|
|
88
|
+
Delete Page Route
|
|
89
|
+
Test old Page Route
|
|
90
|
+
Test new Page Route
|
|
91
|
+
Test Rails Route
|
|
92
|
+
Clear Page Cache
|
|
93
|
+
Add Redirect
|
|
94
|
+
Test Redirect
|
|
95
|
+
Edit Redirect
|
|
96
|
+
Test old Redirect
|
|
97
|
+
Test new Redirect
|
|
98
|
+
Delete Redirect
|
|
99
|
+
Test old Redirect
|
|
100
|
+
Test new Redirect
|
|
101
|
+
|
|
102
|
+
Page:
|
|
103
|
+
Toggle Visual Editor On
|
|
104
|
+
Toggle Visual Editor Off
|
|
105
|
+
Toggle Visual Editor On
|
|
106
|
+
Add New Text to Container
|
|
107
|
+
Add Existing Text to Container
|
|
108
|
+
Move Text Up
|
|
109
|
+
Move Text Down
|
|
110
|
+
Edit Text
|
|
111
|
+
Remove Text
|
|
112
|
+
Publish
|
|
113
|
+
List Versions
|
|
114
|
+
Revert
|
|
115
|
+
Assign
|
|
116
|
+
Complete Task
|
|
117
|
+
Edit Properties
|
|
118
|
+
Add New Portlet to Container
|
|
119
|
+
Add Existing Portlet to Container
|
|
120
|
+
Move Portlet Up
|
|
121
|
+
Move Portlet Down
|
|
122
|
+
Edit Portlet
|
|
123
|
+
Remove Portlet
|
|
124
|
+
Add New File to Container
|
|
125
|
+
Add Existing File to Container
|
|
126
|
+
Move File Up
|
|
127
|
+
Move File Down
|
|
128
|
+
Edit File
|
|
129
|
+
Remove File
|
|
130
|
+
Add New Image to Container
|
|
131
|
+
Add Existing Image to Container
|
|
132
|
+
Move Image Up
|
|
133
|
+
Move Image Down
|
|
134
|
+
Edit Image
|
|
135
|
+
Remove Image
|
|
136
|
+
Delete Page
|
|
137
|
+
|
|
138
|
+
Dashboard:
|
|
139
|
+
Publish page
|
|
140
|
+
Publish pages
|
|
141
|
+
Remove task
|
data/lib/acts_as_list.rb
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
module ActsAsList
|
|
2
|
+
def self.included(base)
|
|
3
|
+
base.extend(ClassMethods)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
# This +acts_as+ extension provides the capabilities for sorting and reordering a number of objects in a list.
|
|
7
|
+
# The class that has this specified needs to have a +position+ column defined as an integer on
|
|
8
|
+
# the mapped database table.
|
|
9
|
+
#
|
|
10
|
+
# To Do list example:
|
|
11
|
+
#
|
|
12
|
+
# class TodoList < ActiveRecord::Base
|
|
13
|
+
# has_many :todo_items, :order => "position"
|
|
14
|
+
# end
|
|
15
|
+
#
|
|
16
|
+
# class TodoItem < ActiveRecord::Base
|
|
17
|
+
# belongs_to :todo_list
|
|
18
|
+
# acts_as_list :scope => :todo_list
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# todo_list.first.move_to_bottom
|
|
22
|
+
# todo_list.last.move_higher
|
|
23
|
+
module ClassMethods
|
|
24
|
+
# Configuration options are:
|
|
25
|
+
#
|
|
26
|
+
# * +column+ - specifies the column name to use for keeping the position integer (default: +position+)
|
|
27
|
+
# * +scope+ - restricts what is to be considered a list. Given a symbol, it'll attach <tt>_id</tt>
|
|
28
|
+
# (if it hasn't already been added) and use that as the foreign key restriction. It's also possible
|
|
29
|
+
# to give it an entire string that is interpolated if you need a tighter scope than just a foreign key.
|
|
30
|
+
# Example: <tt>acts_as_list :scope => 'todo_list_id = #{todo_list_id} AND completed = 0'</tt>
|
|
31
|
+
def acts_as_list(options = {})
|
|
32
|
+
configuration = {:column => "position", :scope => "1 = 1"}
|
|
33
|
+
configuration.update(options) if options.is_a?(Hash)
|
|
34
|
+
|
|
35
|
+
configuration[:scope] = "#{configuration[:scope]}_id".intern if configuration[:scope].is_a?(Symbol) && configuration[:scope].to_s !~ /_id$/
|
|
36
|
+
|
|
37
|
+
if configuration[:scope].is_a?(Symbol)
|
|
38
|
+
scope_condition_method = %(
|
|
39
|
+
def scope_condition
|
|
40
|
+
if #{configuration[:scope].to_s}.nil?
|
|
41
|
+
"#{configuration[:scope].to_s} IS NULL"
|
|
42
|
+
else
|
|
43
|
+
"#{configuration[:scope].to_s} = \#{#{configuration[:scope].to_s}}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
)
|
|
47
|
+
else
|
|
48
|
+
scope_condition_method = "def scope_condition() \"#{configuration[:scope]}\" end"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class_eval <<-EOV
|
|
52
|
+
include ActsAsList::InstanceMethods
|
|
53
|
+
|
|
54
|
+
def acts_as_list_class
|
|
55
|
+
::#{self.name}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def position_column
|
|
59
|
+
'#{configuration[:column]}'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
#{scope_condition_method}
|
|
63
|
+
|
|
64
|
+
before_destroy :remove_from_list_without_saving
|
|
65
|
+
before_create :add_to_list_bottom
|
|
66
|
+
EOV
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# All the methods available to a record that has had <tt>acts_as_list</tt> specified. Each method works
|
|
71
|
+
# by assuming the object to be the item in the list, so <tt>chapter.move_lower</tt> would move that chapter
|
|
72
|
+
# lower in the list of all chapters. Likewise, <tt>chapter.first?</tt> would return +true+ if that chapter is
|
|
73
|
+
# the first in the list of all chapters.
|
|
74
|
+
module InstanceMethods
|
|
75
|
+
# Insert the item at the given position (defaults to the top position of 1).
|
|
76
|
+
def insert_at(position = 1)
|
|
77
|
+
insert_at_position(position)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Swap positions with the next lower item, if one exists.
|
|
81
|
+
def move_lower
|
|
82
|
+
lower = lower_item
|
|
83
|
+
return unless lower
|
|
84
|
+
acts_as_list_class.transaction do
|
|
85
|
+
self.update_attribute(position_column, lower.send(position_column))
|
|
86
|
+
lower.decrement_position
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Swap positions with the next higher item, if one exists.
|
|
91
|
+
def move_higher
|
|
92
|
+
higher = higher_item
|
|
93
|
+
return unless higher
|
|
94
|
+
acts_as_list_class.transaction do
|
|
95
|
+
self.update_attribute(position_column, higher.send(position_column))
|
|
96
|
+
higher.increment_position
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Move to the bottom of the list. If the item is already in the list, the items below it have their
|
|
101
|
+
# position adjusted accordingly.
|
|
102
|
+
def move_to_bottom
|
|
103
|
+
return unless in_list?
|
|
104
|
+
acts_as_list_class.transaction do
|
|
105
|
+
decrement_positions_on_lower_items
|
|
106
|
+
assume_bottom_position
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Move to the top of the list. If the item is already in the list, the items above it have their
|
|
111
|
+
# position adjusted accordingly.
|
|
112
|
+
def move_to_top
|
|
113
|
+
return unless in_list?
|
|
114
|
+
acts_as_list_class.transaction do
|
|
115
|
+
increment_positions_on_higher_items
|
|
116
|
+
assume_top_position
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Removes the item from the list.
|
|
121
|
+
def remove_from_list(save = true)
|
|
122
|
+
if in_list?
|
|
123
|
+
decrement_positions_on_lower_items
|
|
124
|
+
update_attribute(position_column, nil) if save
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def remove_from_list_without_saving
|
|
129
|
+
self.remove_from_list(false)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Increase the position of this item without adjusting the rest of the list.
|
|
133
|
+
def increment_position
|
|
134
|
+
return unless in_list?
|
|
135
|
+
update_attribute position_column, self.send(position_column).to_i + 1
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Decrease the position of this item without adjusting the rest of the list.
|
|
139
|
+
def decrement_position
|
|
140
|
+
return unless in_list?
|
|
141
|
+
update_attribute position_column, self.send(position_column).to_i - 1
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Return +true+ if this object is the first in the list.
|
|
145
|
+
def first?
|
|
146
|
+
return false unless in_list?
|
|
147
|
+
self.send(position_column) == 1
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Return +true+ if this object is the last in the list.
|
|
151
|
+
def last?
|
|
152
|
+
return false unless in_list?
|
|
153
|
+
self.send(position_column) == bottom_position_in_list
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Return the next higher item in the list.
|
|
157
|
+
def higher_item
|
|
158
|
+
return nil unless in_list?
|
|
159
|
+
acts_as_list_class
|
|
160
|
+
.where("#{scope_condition} AND #{position_column} < #{send(position_column).to_s}")
|
|
161
|
+
.order("#{position_column} DESC")
|
|
162
|
+
.first
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Return the next lower item in the list.
|
|
166
|
+
def lower_item
|
|
167
|
+
return nil unless in_list?
|
|
168
|
+
acts_as_list_class.where("#{scope_condition} AND #{position_column} > #{send(position_column).to_s}")
|
|
169
|
+
.order("#{position_column} ASC" )
|
|
170
|
+
.first
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Test if this record is in a list
|
|
174
|
+
def in_list?
|
|
175
|
+
!send(position_column).nil?
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
private
|
|
179
|
+
def add_to_list_top
|
|
180
|
+
increment_positions_on_all_items
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def add_to_list_bottom
|
|
184
|
+
self[position_column] = bottom_position_in_list.to_i + 1
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Overwrite this method to define the scope of the list changes
|
|
188
|
+
def scope_condition()
|
|
189
|
+
"1"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Returns the bottom position number in the list.
|
|
193
|
+
# bottom_position_in_list # => 2
|
|
194
|
+
def bottom_position_in_list(except = nil)
|
|
195
|
+
item = bottom_item(except)
|
|
196
|
+
item ? item.send(position_column) : 0
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Returns the bottom item
|
|
200
|
+
def bottom_item(except = nil)
|
|
201
|
+
conditions = scope_condition
|
|
202
|
+
conditions = "#{conditions} AND #{self.class.primary_key} != #{except.id}" if except
|
|
203
|
+
acts_as_list_class.where(conditions).order("#{position_column} DESC").first
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Forces item to assume the bottom position in the list.
|
|
207
|
+
def assume_bottom_position
|
|
208
|
+
update_attribute(position_column, bottom_position_in_list(self).to_i + 1)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Forces item to assume the top position in the list.
|
|
212
|
+
def assume_top_position
|
|
213
|
+
update_attribute(position_column, 1)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# This has the effect of moving all the higher items up one.
|
|
217
|
+
def decrement_positions_on_higher_items(position)
|
|
218
|
+
acts_as_list_class.update_all(
|
|
219
|
+
"#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} <= #{position}"
|
|
220
|
+
)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# This has the effect of moving all the lower items up one.
|
|
224
|
+
def decrement_positions_on_lower_items
|
|
225
|
+
return unless in_list?
|
|
226
|
+
acts_as_list_class.where(
|
|
227
|
+
"#{scope_condition} AND #{position_column} > #{send(position_column).to_i}"
|
|
228
|
+
).update_all("#{position_column} = (#{position_column} - 1)")
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# This has the effect of moving all the higher items down one.
|
|
232
|
+
def increment_positions_on_higher_items
|
|
233
|
+
return unless in_list?
|
|
234
|
+
acts_as_list_class.where("#{scope_condition} AND #{position_column} < #{send(position_column).to_i}").update_all("#{position_column} = (#{position_column} + 1)")
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# This has the effect of moving all the lower items down one.
|
|
238
|
+
def increment_positions_on_lower_items(position)
|
|
239
|
+
acts_as_list_class.where("#{scope_condition} AND #{position_column} >= #{position}").update_all(
|
|
240
|
+
"#{position_column} = (#{position_column} + 1)"
|
|
241
|
+
)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# Increments position (<tt>position_column</tt>) of all items in the list.
|
|
245
|
+
def increment_positions_on_all_items
|
|
246
|
+
acts_as_list_class.where("#{scope_condition}").update_all(
|
|
247
|
+
"#{position_column} = (#{position_column} + 1)"
|
|
248
|
+
)
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def insert_at_position(position)
|
|
252
|
+
remove_from_list
|
|
253
|
+
increment_positions_on_lower_items(position)
|
|
254
|
+
self.update_attribute(position_column, position)
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require_relative './browsercms'
|
data/lib/browsercms.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Load all dependencies needed at boot time.
|
|
2
|
+
require 'rails'
|
|
3
|
+
require 'cms/configuration'
|
|
4
|
+
require 'cms/version'
|
|
5
|
+
require 'browsercms'
|
|
6
|
+
|
|
7
|
+
require 'sass-rails'
|
|
8
|
+
require 'compass-rails'
|
|
9
|
+
require 'bootstrap-sass'
|
|
10
|
+
|
|
11
|
+
# Gem name is different than file name
|
|
12
|
+
# Must be required FIRST, so that our assets paths appear before its do.
|
|
13
|
+
# This allows app/assets/ckeditor/config.js to set CMS specific defaults.
|
|
14
|
+
require 'ckeditor-rails'
|
|
15
|
+
|
|
16
|
+
# Explicitly require this, so that CMS projects do not need to add it to their Gemfile
|
|
17
|
+
# especially while upgrading
|
|
18
|
+
require 'jquery-rails'
|
|
19
|
+
require 'jquery-ui-rails'
|
|
20
|
+
|
|
21
|
+
require 'underscore-rails'
|
|
22
|
+
require 'will_paginate'
|
|
23
|
+
require 'will_paginate/active_record'
|
|
24
|
+
require 'actionpack/page_caching'
|
|
25
|
+
require 'panoramic'
|
|
26
|
+
require 'simple_form'
|
|
27
|
+
require 'devise'
|
|
28
|
+
|
|
29
|
+
require 'cms/engine'
|
|
30
|
+
require 'cms/extensions'
|
|
31
|
+
require 'cms/route_extensions'
|
|
32
|
+
require 'cms/caching'
|
|
33
|
+
require 'cms/error_pages'
|
|
34
|
+
|
|
35
|
+
require 'cms/users_service'
|
|
36
|
+
|
|
37
|
+
#Load libraries that are included with CMS
|
|
38
|
+
require 'acts_as_list'
|
|
39
|
+
ActiveRecord::Base.send(:include, ActsAsList)
|
|
40
|
+
|
|
41
|
+
require 'cms/acts'
|
|
42
|
+
require 'cms/authentication'
|
|
43
|
+
require 'cms/content_page'
|
|
44
|
+
require 'cms/configuration/configurable_template'
|
|
45
|
+
require 'cms/domain_support'
|
|
46
|
+
require 'cms/authoring'
|
|
47
|
+
require 'cms/date_picker'
|
|
48
|
+
require 'cms/content_rendering_support'
|
|
49
|
+
require 'cms/mobile_aware'
|
|
50
|
+
require 'cms/attachments/configuration'
|
|
51
|
+
require 'cms/controllers/admin_controller'
|
|
52
|
+
require 'cms/default_accessible'
|
|
53
|
+
require 'cms/admin_tab'
|
|
54
|
+
require 'cms/publish_workflow'
|
|
55
|
+
require 'cms/content_filter'
|
|
56
|
+
require 'cms/polymorphic_single_table_inheritance'
|
|
57
|
+
require 'cms/form_builder/default_input'
|
|
58
|
+
require 'cms/form_builder/content_block_form_builder'
|
|
59
|
+
require 'cms/form_builder/workflow_buttons'
|
|
60
|
+
|
|
61
|
+
# This shouldn't be necessary, except for the need to get into the loadpath for testing.
|
|
62
|
+
require 'command_line'
|
|
63
|
+
|
|
64
|
+
#Include CMS Behaviors
|
|
65
|
+
ActiveRecord::Base.send(:include, Cms::Acts::ContentBlock)
|
|
66
|
+
require 'cms/behaviors'
|
|
67
|
+
require 'cms/concerns'
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
ActiveRecord::Base.send(:include, Cms::Acts::CmsUser)
|
|
71
|
+
require 'cms/responders/content_responder'
|
|
72
|
+
|
|
73
|
+
require "panoramic"
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Acts
|
|
3
|
+
|
|
4
|
+
# Allows any ActiveRecord object to behave like a Cms User. This is a bit of an experiment being added to 3.4, so
|
|
5
|
+
# so it might be deprecated in a future version if we add something like devise.
|
|
6
|
+
#
|
|
7
|
+
# The use case would be something like:
|
|
8
|
+
#
|
|
9
|
+
# class AdminUser < ActiveRecord::Base
|
|
10
|
+
# acts_as_cms_user :groups => [Cms::Group.find_by_code('admin')]
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# where groups could be an array, proc, or instance method (as a symbol).
|
|
14
|
+
# Could be used it with authlogic to grant logins and permissions to
|
|
15
|
+
# everyone in a custom model. It's not quite a drop in authentication
|
|
16
|
+
# schema, but it does make it easier to wire up just about any model to be
|
|
17
|
+
# the current_user on CMS pages.
|
|
18
|
+
module CmsUser
|
|
19
|
+
def self.included(model_class)
|
|
20
|
+
model_class.extend(MacroMethods)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module MacroMethods
|
|
24
|
+
def acts_as_cms_user(options = {})
|
|
25
|
+
include InstanceMethods
|
|
26
|
+
|
|
27
|
+
# Adding a cms_group method to each person object that returns a list of
|
|
28
|
+
# CMS Groups the user belongs to. Can be set with an array, proc, or
|
|
29
|
+
# instance method on the person. Defaults to Cms::Group.guest
|
|
30
|
+
define_method "cms_groups" do
|
|
31
|
+
fetch_group_list = Proc.new do
|
|
32
|
+
if options[:groups].nil?
|
|
33
|
+
[Cms::Group.guest]
|
|
34
|
+
elsif options[:groups].kind_of? Array
|
|
35
|
+
options[:groups]
|
|
36
|
+
elsif options[:groups].is_a? Proc
|
|
37
|
+
options[:groups].call(self)
|
|
38
|
+
elsif self.respond_to?(options[:groups])
|
|
39
|
+
self.send(options[:groups])
|
|
40
|
+
else
|
|
41
|
+
raise ArgumentError, "acts_as_cms_user :groups option expected to be of type Array, Proc, or instance method - #{options[:groups].class} found instead"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
@cms_groups ||= begin
|
|
46
|
+
specified = Array(fetch_group_list.call).select { |x| x.kind_of? Cms::Group }
|
|
47
|
+
specified << Cms::Group.guest if specified.empty?
|
|
48
|
+
specified
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
module InstanceMethods
|
|
55
|
+
|
|
56
|
+
# The following came from Cms::User
|
|
57
|
+
def guest?
|
|
58
|
+
false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# checks for usage
|
|
62
|
+
def cms_user_compatible?
|
|
63
|
+
true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def enable_able?
|
|
67
|
+
false
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def disable_able?
|
|
71
|
+
false
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Determine if this user has permission to view the specific object. Permissions
|
|
75
|
+
# are always tied to a specific section. This method can take different input parameters
|
|
76
|
+
# and will attempt to determine the relevant section to check.
|
|
77
|
+
# Expects object to be of type:
|
|
78
|
+
# 1. Section - Will check the user's groups to see if any of those groups can view this section.
|
|
79
|
+
# 2. Path - Will look up the section based on the path, then check it. (Note that section paths are not currently unique, so this will check the first one it finds).
|
|
80
|
+
# 3. Other - Assumes it has a section attribute and will call that and check the return value.
|
|
81
|
+
#
|
|
82
|
+
# Returns: true if the user can view this object, false otherwise.
|
|
83
|
+
# Raises: ActiveRecord::RecordNotFound if a path to a not existent section is passed in.
|
|
84
|
+
def able_to_view?(object)
|
|
85
|
+
section = object
|
|
86
|
+
if object.is_a?(String)
|
|
87
|
+
section = Cms::Section.find_by_path(object)
|
|
88
|
+
raise ActiveRecord::RecordNotFound.new("Could not find section with path = '#{object}'") unless section
|
|
89
|
+
elsif !object.is_a?(Cms::Section)
|
|
90
|
+
section = object.section
|
|
91
|
+
end
|
|
92
|
+
viewable_sections.include?(section) || cms_access?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# The following came from Cms::GuestUser or Cms::User
|
|
97
|
+
|
|
98
|
+
# Expects a list of names of Permissions
|
|
99
|
+
# true if the user has any of the permissions
|
|
100
|
+
def able_to?(*required_permissions)
|
|
101
|
+
perms = required_permissions.map(&:to_sym)
|
|
102
|
+
permissions.any? do |p|
|
|
103
|
+
perms.include?(p.name.to_sym)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# Guests never get access to the CMS.
|
|
109
|
+
def cms_access?
|
|
110
|
+
false
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Return a list of the sections associated with this user that can be viewed.
|
|
114
|
+
# Overridden from user so that able_to_view? will work correctly.
|
|
115
|
+
def viewable_sections
|
|
116
|
+
@viewable_sections ||= Cms::Section.includes(:groups).where(["#{Cms::Group.table_name}.id in (?)", cms_groups.collect(&:id)])
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def permissions
|
|
120
|
+
@permissions ||= Cms::Permission.includes(:groups).where(["#{Cms::Group.table_name}.id in (?)", cms_groups.collect(&:id)])
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def able_to_edit?(section)
|
|
124
|
+
false
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Acts
|
|
3
|
+
module ContentBlock
|
|
4
|
+
|
|
5
|
+
def self.included(model_class)
|
|
6
|
+
model_class.extend(MacroMethods)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module MacroMethods
|
|
10
|
+
|
|
11
|
+
# Adds Content Block behavior to this class
|
|
12
|
+
#
|
|
13
|
+
# @param [Hash] options
|
|
14
|
+
# @option options [Boolean] :allow_attachments (true) Determines whether this content block can be marked as having attachments.
|
|
15
|
+
def acts_as_content_block(options={})
|
|
16
|
+
defaults = {
|
|
17
|
+
# Set default values here.
|
|
18
|
+
:allow_attachments => true,
|
|
19
|
+
:content_module => true
|
|
20
|
+
}
|
|
21
|
+
options = defaults.merge(options)
|
|
22
|
+
|
|
23
|
+
if options[:belongs_to_attachment].present?
|
|
24
|
+
raise ArgumentError.new ":belongs_to_attachment option is no longer supported. Please use :has_attachments option"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
extend Cms::DefaultAccessible
|
|
28
|
+
allow_attachments if options[:allow_attachments]
|
|
29
|
+
is_archivable(options[:archiveable].is_a?(Hash) ? options[:archiveable] : {}) unless options[:archiveable] == false
|
|
30
|
+
is_connectable(options[:connectable].is_a?(Hash) ? options[:connectable] : {}) unless options[:connectable] == false
|
|
31
|
+
flush_cache_on_change(options[:flush_cache_on_change].is_a?(Hash) ? options[:flush_cache_on_change] : {}) unless options[:flush_cache_on_change] == false
|
|
32
|
+
is_renderable({:instance_variable_name_for_view => "@content_block"}.merge(options[:renderable].is_a?(Hash) ? options[:renderable] : {})) unless options[:renderable] == false
|
|
33
|
+
is_publishable(options[:publishable].is_a?(Hash) ? options[:publishable] : {}) unless options[:publishable] == false
|
|
34
|
+
is_searchable(options[:searchable].is_a?(Hash) ? options[:searchable] : {}) unless options[:searchable] == false
|
|
35
|
+
uses_soft_delete(options[:soft_delete].is_a?(Hash) ? options[:soft_delete] : {}) unless options[:soft_delete] == false
|
|
36
|
+
is_taggable(options[:taggable].is_a?(Hash) ? options[:taggable] : {}) if options[:taggable]
|
|
37
|
+
is_userstamped(options[:userstamped].is_a?(Hash) ? options[:userstamped] : {}) unless options[:userstamped] == false
|
|
38
|
+
is_versioned(options[:versioned].is_a?(Hash) ? options[:versioned] : {}) unless options[:versioned] == false
|
|
39
|
+
|
|
40
|
+
include InstanceMethods
|
|
41
|
+
|
|
42
|
+
unless options[:content_module] == false
|
|
43
|
+
has_content_type
|
|
44
|
+
end
|
|
45
|
+
extend Cms::Behaviors::Naming
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
module InstanceMethods
|
|
50
|
+
def to_s
|
|
51
|
+
"#{self.class.name.demodulize.titleize} '#{name}'"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|