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,90 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Can be included into Controllers in your project to allow them to act as though they are CMS pages.
|
|
3
|
+
# This means they can be:
|
|
4
|
+
#
|
|
5
|
+
# 1. Marked as having requiring permission as though they were in a particular section.
|
|
6
|
+
# 2. Handle errors thrown from within the methods in the same way that CMS Pages do.
|
|
7
|
+
# 3. Use CMS page templates as layouts (like TemplateSupport)
|
|
8
|
+
#
|
|
9
|
+
# This is intend to replace and deprecate TemplateSupport (which will be supported for a while for backwards compatibility)
|
|
10
|
+
#
|
|
11
|
+
# Minor Issue:
|
|
12
|
+
# Error handling for Page not found behaves slightly differently than ContentController currently. If the user is logged
|
|
13
|
+
# in as an editor, they will get a 500 page rather than 404. This would require reworking how the error processing
|
|
14
|
+
# works in Cms::ContentRenderingSupport.
|
|
15
|
+
module Cms
|
|
16
|
+
module Acts
|
|
17
|
+
|
|
18
|
+
# Override some of the behavior defined in Cms::PageHelper so templates display correctly Rails Controllers
|
|
19
|
+
module PageHelper
|
|
20
|
+
|
|
21
|
+
# Do not show the toolbar on Acts::As::ContentPages
|
|
22
|
+
def cms_toolbar
|
|
23
|
+
""
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# If we are showing an error page, use that. Otherwise, just a blank page object that has a default title.
|
|
27
|
+
def current_page
|
|
28
|
+
super ? super : OpenStruct.new(page_title: controller.class.name.gsub("Controller", ""))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
module ContentPage
|
|
32
|
+
|
|
33
|
+
def self.included(base)
|
|
34
|
+
base.send :include, Cms::ContentRenderingSupport
|
|
35
|
+
base.send :include, Cms::Authentication::Controller
|
|
36
|
+
base.extend ClassMethods
|
|
37
|
+
|
|
38
|
+
base.helper Cms::PageHelper
|
|
39
|
+
base.helper Cms::RenderingHelper
|
|
40
|
+
base.helper Cms::MenuHelper
|
|
41
|
+
base.helper Cms::Acts::PageHelper
|
|
42
|
+
base.helper Cms::UiElementsHelper
|
|
43
|
+
base.helper Cms::PathHelper
|
|
44
|
+
base.send :include, Cms::NavMenuHelper
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Allows a Controller method to set a page title for an action.
|
|
48
|
+
def page_title=(title)
|
|
49
|
+
@page_title = title
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Before filter that determines if the current user can access a specific section.
|
|
53
|
+
def check_access_to_section
|
|
54
|
+
user = current_user
|
|
55
|
+
logger.warn "Checking that current_user '#{user.login}' has access to view section with path '#{self.class.in_section}'."
|
|
56
|
+
unless user.able_to_view?(self.class.in_section)
|
|
57
|
+
store_location
|
|
58
|
+
raise Cms::Errors::AccessDenied
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
module ClassMethods
|
|
63
|
+
|
|
64
|
+
# Requires that some or all of the actions on this controller require the same permissions as a specific section of the website.
|
|
65
|
+
# Note that section paths aren't currently unique so the 'first' section found will be looked at.
|
|
66
|
+
#
|
|
67
|
+
# Params:
|
|
68
|
+
# path - Should match the 'path' attribute for a given section.
|
|
69
|
+
# options - Hash of options that will be passed to the before_filter call. See before_filter for valid options.
|
|
70
|
+
#
|
|
71
|
+
# Example:
|
|
72
|
+
# MyController < ApplicationController
|
|
73
|
+
# include Cms::Acts::ContentPage
|
|
74
|
+
# requires_permission_for_section "/somepath", :except=>"action_name"
|
|
75
|
+
# ...
|
|
76
|
+
#
|
|
77
|
+
def requires_permission_for_section(path, options={})
|
|
78
|
+
logger.warn "Setting path #{path}"
|
|
79
|
+
@section_path = path
|
|
80
|
+
before_filter :check_access_to_section, options
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def in_section
|
|
84
|
+
@section_path
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
end
|
data/lib/cms/acts.rb
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Requires all files in the Acts As directory
|
|
2
|
+
#
|
|
3
|
+
# This adds the ContentBlock behavior to all Active Record objects.
|
|
4
|
+
Dir["#{File.dirname(__FILE__)}/acts/*.rb"].each do |b|
|
|
5
|
+
require File.join("cms", "acts", File.basename(b, ".rb"))
|
|
6
|
+
end
|
|
7
|
+
ActiveRecord::Base.send(:include, Cms::Acts::ContentBlock)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
|
|
3
|
+
# Any controller that is considered to be on the 'Admin' tab should include this.
|
|
4
|
+
module AdminTab
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
before_filter :set_menu_section
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def new_button_path
|
|
12
|
+
cms.new_user_path
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Attachments
|
|
3
|
+
|
|
4
|
+
# Can be added to Controllers to handle serving files.
|
|
5
|
+
module Serving
|
|
6
|
+
|
|
7
|
+
# Send the file if:
|
|
8
|
+
# 1. It exists:
|
|
9
|
+
# 2. The user has permissions to see it.
|
|
10
|
+
#
|
|
11
|
+
# The strategy used to send the file can be configured based on the config.cms.attachments.storage parameter.
|
|
12
|
+
# Default is:
|
|
13
|
+
# storage = :filesystem -> Cms::Attachments::FilesystemStrategy
|
|
14
|
+
def send_attachment(attachment)
|
|
15
|
+
if attachment
|
|
16
|
+
raise Cms::Errors::AccessDenied unless current_user.able_to_view?(attachment)
|
|
17
|
+
strategy_class = send_attachments_with
|
|
18
|
+
strategy_class.send_attachment(attachment, self)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def send_attachments_with
|
|
23
|
+
Cms::Attachments::Serving.send_attachments_with
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @return [#send_attachments] The strategy that will be used to serve files.
|
|
27
|
+
def self.send_attachments_with
|
|
28
|
+
storage = Rails.configuration.cms.attachments.storage
|
|
29
|
+
"Cms::Attachments::#{storage.to_s.classify}Strategy".constantize
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class FilesystemStrategy
|
|
35
|
+
|
|
36
|
+
def self.attachments_storage_location
|
|
37
|
+
Rails.configuration.cms.attachments.storage_directory
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.send_attachment(attachment, controller)
|
|
41
|
+
style = controller.params[:style]
|
|
42
|
+
style = "original" unless style
|
|
43
|
+
path_to_file = attachment.path(style)
|
|
44
|
+
if File.exists?(path_to_file)
|
|
45
|
+
Rails.logger.debug "Sending file #{path_to_file}"
|
|
46
|
+
controller.send_file(path_to_file,
|
|
47
|
+
:filename => attachment.file_name,
|
|
48
|
+
:type => attachment.file_type,
|
|
49
|
+
:disposition => "inline"
|
|
50
|
+
)
|
|
51
|
+
else
|
|
52
|
+
msg = "Couldn't find file #{path_to_file}'"
|
|
53
|
+
Rails.logger.error msg
|
|
54
|
+
raise ActiveRecord::RecordNotFound.new(msg)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'paperclip'
|
|
2
|
+
require 'cms/attachments/attachment_serving'
|
|
3
|
+
|
|
4
|
+
module Cms
|
|
5
|
+
# Cms::Attachments::Configuration exposes an interface to setup paperclip for BrowserCMS.
|
|
6
|
+
#
|
|
7
|
+
# Provides defaults that are suitable for the CMS and that probably make sense for most installations.
|
|
8
|
+
#
|
|
9
|
+
#This module also declares Paperclip interpolations that are used
|
|
10
|
+
#to construct the default url and path.
|
|
11
|
+
#
|
|
12
|
+
# For example, the default path:
|
|
13
|
+
#
|
|
14
|
+
# ":attachments_root/:id_partition/:style/:fingerprint"
|
|
15
|
+
#
|
|
16
|
+
# expands to something like:
|
|
17
|
+
#
|
|
18
|
+
# #{Rails.root}/tmp/uploads/2011/1/30/thumb/thcu098rc87dgd
|
|
19
|
+
#
|
|
20
|
+
# but can be changed by using paperclip interpolations, either
|
|
21
|
+
# the ones already defined by Paperlip itself, the Cms::Assets
|
|
22
|
+
# module, or user defined.
|
|
23
|
+
module Attachments
|
|
24
|
+
mattr_accessor :configuration
|
|
25
|
+
|
|
26
|
+
def self.configure
|
|
27
|
+
configuration = self.configuration
|
|
28
|
+
yield configuration if block_given?
|
|
29
|
+
@@configuration = configuration
|
|
30
|
+
Attachment.configure_paperclip
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.configuration
|
|
34
|
+
@@configuration || Configuration.new
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Allows each Attachment to have a customized configuration, even though there is a single Attachment class.
|
|
38
|
+
# Designed to allow 'typical' Paperclip configuration to be specified per attachment.
|
|
39
|
+
class Configuration
|
|
40
|
+
attr_accessor :url, :path, :styles, :processors, :default_url, :default_style, :storage, :whiny
|
|
41
|
+
attr_accessor :s3_credentials, :bucket
|
|
42
|
+
attr_accessor :file_permissions
|
|
43
|
+
|
|
44
|
+
attr_reader :use_timestamp
|
|
45
|
+
|
|
46
|
+
# Set default configurations for Attachments.
|
|
47
|
+
def initialize
|
|
48
|
+
self.url = Rails.configuration.cms.attachments[:url] || ":attachment_file_path"
|
|
49
|
+
self.path = ":attachments_root/:id_partition/:style/:fingerprint"
|
|
50
|
+
self.styles = {}
|
|
51
|
+
self.processors = [:thumbnail]
|
|
52
|
+
self.default_url = "/:attachment/:style/missing.png"
|
|
53
|
+
self.default_style = :original
|
|
54
|
+
self.storage = :filesystem
|
|
55
|
+
self.whiny = false
|
|
56
|
+
|
|
57
|
+
@use_timestamp = false
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# This is the typical url for attachments
|
|
63
|
+
# Some attachments will have a custom path (data_file_path) specified by users
|
|
64
|
+
# while others will just be 'defaults'. This dynamically returns path at runtime based
|
|
65
|
+
# on the instance of the specific instance.
|
|
66
|
+
Paperclip.interpolates :attachment_file_path do |asset, style|
|
|
67
|
+
path = asset.instance.data_file_path
|
|
68
|
+
unless path
|
|
69
|
+
path = "/attachments/#{asset.instance.id}/#{asset.instance.data_file_name}"
|
|
70
|
+
end
|
|
71
|
+
if style && style != :original
|
|
72
|
+
"#{path}?style=#{style}"
|
|
73
|
+
else
|
|
74
|
+
path
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
Paperclip.interpolates :attachments_root do |_, _|
|
|
79
|
+
strategy = Cms::Attachments::Serving.send_attachments_with
|
|
80
|
+
strategy.attachments_storage_location
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
Paperclip.interpolates :full_filename do |asset, _|
|
|
84
|
+
"#{asset.instance.content_block_class}_#{asset.instance.data_file_name}"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Defines the authentication behavior for controllers in BrowserCMS. It can be added to any controller that needs to
|
|
3
|
+
# hook into the BrowserCMS Authentication behavior like so:
|
|
4
|
+
#
|
|
5
|
+
# class MySuperSecureController < ApplicationController
|
|
6
|
+
# include Cms::Authentication::Controller
|
|
7
|
+
#
|
|
8
|
+
# 1. Guests - These represents users that are not logged in. What guests can see and do can be modified via the CMS UI. Guests
|
|
9
|
+
# are not considered to be 'logged in'.
|
|
10
|
+
# 2. 'Current' User - The currently logged in user is stored in a thread local, and can be accessed anywhere via 'Cms::User.current'.
|
|
11
|
+
# This allows model code to easily record which user is making changes to records, for versioning, etc.
|
|
12
|
+
#
|
|
13
|
+
# 3. 'Admin' Access Denied Page - If users try to access a protected controller, they are redirected to the CMS administration Login page
|
|
14
|
+
# which may be different than the 'front end' user login page. (Cms::Controller handles that differently)
|
|
15
|
+
#
|
|
16
|
+
#
|
|
17
|
+
# To Dos: It appears as though we are storing the 'current' user in two places, @current_user and Cms::User.current. This is probably not DRY, but
|
|
18
|
+
# more testing would be needed.
|
|
19
|
+
#
|
|
20
|
+
module Cms
|
|
21
|
+
module Authentication
|
|
22
|
+
module Controller
|
|
23
|
+
# Inclusion hook to make #current_user and #logged_in?
|
|
24
|
+
# available as ActionView helper methods.
|
|
25
|
+
def self.included(base)
|
|
26
|
+
base.send :helper_method, :current_user, :logged_in? if base.respond_to? :helper_method
|
|
27
|
+
base.extend ClassMethods
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
module ClassMethods
|
|
32
|
+
|
|
33
|
+
# Determines if the current user has at least one of the following permissions. Sets up a before_action that
|
|
34
|
+
# enforces permissions.
|
|
35
|
+
#
|
|
36
|
+
# @param [Symbol, Array<Symbol>] perms One or more permissions.
|
|
37
|
+
# @raise [Cms::Errors::AccessDenied] If the current_user doesn't have ANY of the given permissions.
|
|
38
|
+
#
|
|
39
|
+
# Example:
|
|
40
|
+
# class MyCustomController < Cms::ApplicationController
|
|
41
|
+
# check_permissions :publish_content, :except => [:index]
|
|
42
|
+
# end
|
|
43
|
+
def check_permissions(*perms)
|
|
44
|
+
opts = Hash === perms.last ? perms.pop : {}
|
|
45
|
+
before_filter(opts) do |controller|
|
|
46
|
+
raise Cms::Errors::AccessDenied unless controller.send(:current_user).able_to?(*perms)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
protected
|
|
52
|
+
# Returns true or false if the user is logged in.
|
|
53
|
+
# Preloads Cms::User.current with the user model if they're logged in.
|
|
54
|
+
def logged_in?
|
|
55
|
+
!current_user.nil? && !current_user.guest?
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Returns the current user if logged in. If no user is logged in, returns the 'Guest' user which represents a
|
|
59
|
+
# what a visitor can do without being logged in.
|
|
60
|
+
def current_user
|
|
61
|
+
@current_user ||= begin
|
|
62
|
+
Cms::PersistentUser.current = current_cms_user || Cms::User.guest
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Redirect as appropriate when an access request fails.
|
|
67
|
+
#
|
|
68
|
+
# The default action is to redirect to the BrowserCMS admin login screen.
|
|
69
|
+
#
|
|
70
|
+
# Override this method in your controllers if you want to have special
|
|
71
|
+
# behavior in case the user is not authorized
|
|
72
|
+
# to access the requested action. For example, a popup window might
|
|
73
|
+
# simply close itself.
|
|
74
|
+
def access_denied
|
|
75
|
+
respond_to do |format|
|
|
76
|
+
format.html do
|
|
77
|
+
store_location
|
|
78
|
+
redirect_to cms.login_path
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Store the URI of the current request in the session.
|
|
84
|
+
#
|
|
85
|
+
# We can return to this location by calling #redirect_back_or_default.
|
|
86
|
+
def store_location
|
|
87
|
+
session[:return_to] = request.fullpath
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Redirect to the URI stored by the most recent store_location call or
|
|
91
|
+
# to the passed default. Set an appropriately modified
|
|
92
|
+
# after_filter :store_location, :only => [:index, :new, :show, :edit]
|
|
93
|
+
# for any controller you want to be bounce-backable.
|
|
94
|
+
def redirect_back_or_default(default)
|
|
95
|
+
redirect_to(session[:return_to] || default)
|
|
96
|
+
session[:return_to] = nil
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# This is ususally what you want; resetting the session willy-nilly wreaks
|
|
100
|
+
# havoc with forgery protection, and is only strictly necessary on login.
|
|
101
|
+
# However, **all session state variables should be unset here**.
|
|
102
|
+
def logout_keeping_session!
|
|
103
|
+
# Kill server-side auth cookie
|
|
104
|
+
Cms::PersistentUser.current.forget_me if Cms::User.current.is_a? User
|
|
105
|
+
Cms::PersistentUser.current = false # not logged in, and don't do it for me
|
|
106
|
+
session[:user_id] = nil # keeps the session but kill our variable
|
|
107
|
+
# explicitly kill any other session variables you set
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# The session should only be reset at the tail end of a form POST --
|
|
111
|
+
# otherwise the request forgery protection fails. It's only really necessary
|
|
112
|
+
# when you cross quarantine (logged-out to logged-in).
|
|
113
|
+
def logout_killing_session!
|
|
114
|
+
logout_keeping_session!
|
|
115
|
+
reset_session
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Authentication
|
|
3
|
+
# For testing external authentication.
|
|
4
|
+
class TestPasswordStrategy < Devise::Strategies::Authenticatable
|
|
5
|
+
EXPECTED_LOGIN = EXPECTED_PASSWORD = 'test'
|
|
6
|
+
def authenticate!
|
|
7
|
+
if(authentication_hash[:login] == password && password == EXPECTED_PASSWORD)
|
|
8
|
+
user = Cms::ExternalUser.authenticate(authentication_hash[:login], 'Test Password', {first_name: "Test", last_name: "User"})
|
|
9
|
+
user.authorize('cms-admin', 'content-editor')
|
|
10
|
+
success!(user)
|
|
11
|
+
else
|
|
12
|
+
pass
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Warden::Strategies.add(:test_password, Cms::Authentication::TestPasswordStrategy)
|
|
20
|
+
|
|
21
|
+
# NOTE: To enable a custom password strategy for BrowserCMS you must also add it to to the devise configuration.
|
|
22
|
+
#
|
|
23
|
+
# For example enable the test_password strategy above by adding the following to config/initializers/devise.rb
|
|
24
|
+
|
|
25
|
+
# # Add test_password strategy BEFORE other CMS authentication strategies
|
|
26
|
+
# config.warden do |manager|
|
|
27
|
+
# manager.default_strategies(:scope => :cms_user).unshift :test_password
|
|
28
|
+
# end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Cms::Authoring
|
|
2
|
+
|
|
3
|
+
# Represents the common permissions that are common for CMS operations.
|
|
4
|
+
PERMISSIONS = [:edit_content, :administrate, :publish_content]
|
|
5
|
+
|
|
6
|
+
# A full fledged editor can do these things.
|
|
7
|
+
EDITOR_PERMISSIONS = [:edit_content, :publish_content]
|
|
8
|
+
|
|
9
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Cms
|
|
2
|
+
module Behaviors
|
|
3
|
+
module Archiving
|
|
4
|
+
def self.included(model_class)
|
|
5
|
+
model_class.extend(MacroMethods)
|
|
6
|
+
end
|
|
7
|
+
module MacroMethods
|
|
8
|
+
def archivable?
|
|
9
|
+
!!@is_archivable
|
|
10
|
+
end
|
|
11
|
+
def is_archivable(options={})
|
|
12
|
+
@is_archivable = true
|
|
13
|
+
include InstanceMethods
|
|
14
|
+
|
|
15
|
+
scope :archived, ->{where(:archived => true)}
|
|
16
|
+
scope :not_archived, ->{where(:archived => false)}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
module InstanceMethods
|
|
20
|
+
def archive
|
|
21
|
+
self.archived = true
|
|
22
|
+
self.version_comment = "Archived"
|
|
23
|
+
self.save
|
|
24
|
+
end
|
|
25
|
+
def archive!
|
|
26
|
+
self.archived = true
|
|
27
|
+
self.version_comment = "Archived"
|
|
28
|
+
self.save!
|
|
29
|
+
end
|
|
30
|
+
def unarchive
|
|
31
|
+
self.archived = false
|
|
32
|
+
self.version_comment = "Unarchived"
|
|
33
|
+
self.save
|
|
34
|
+
end
|
|
35
|
+
def unarchive!
|
|
36
|
+
self.archived = false
|
|
37
|
+
self.version_comment = "Unarchived"
|
|
38
|
+
self.save!
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|