browsercms 3.5.7 → 4.0.0.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. checksums.yaml +7 -0
  2. data/COPYRIGHT.txt +2 -1
  3. data/README.markdown +3 -3
  4. data/app/assets/fonts/icomoon.dev.svg +61 -0
  5. data/app/assets/fonts/icomoon.eot +0 -0
  6. data/app/assets/fonts/icomoon.svg +61 -0
  7. data/app/assets/fonts/icomoon.ttf +0 -0
  8. data/app/assets/fonts/icomoon.woff +0 -0
  9. data/app/assets/images/ckeditor/plugins/delete_content/icons/deletecontent.png +0 -0
  10. data/app/assets/images/ckeditor/plugins/edit_content/icons/editcontent.png +0 -0
  11. data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentdown.png +0 -0
  12. data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentup.png +0 -0
  13. data/app/assets/images/cms/arrow-down.png +0 -0
  14. data/app/assets/images/cms/arrow-up.png +0 -0
  15. data/app/assets/images/cms/cogs.png +0 -0
  16. data/app/assets/images/cms/dashboard/home.png +0 -0
  17. data/app/assets/images/cms/home.png +0 -0
  18. data/app/assets/images/cms/logo.png +0 -0
  19. data/app/assets/images/cms/pencil.png +0 -0
  20. data/app/assets/images/cms/plus.png +0 -0
  21. data/app/assets/images/cms/user.png +0 -0
  22. data/app/assets/javascripts/bcms/ckeditor_inline.js +23 -0
  23. data/app/assets/javascripts/bcms/ckeditor_standard_config.js +1 -1
  24. data/app/assets/javascripts/ckeditor/plugins/delete_content/plugin.js +36 -0
  25. data/app/assets/javascripts/ckeditor/plugins/edit_content/plugin.js +24 -0
  26. data/app/assets/javascripts/ckeditor/plugins/move_content/plugin.js +25 -0
  27. data/app/assets/javascripts/cms/ajax.js +60 -0
  28. data/app/assets/javascripts/cms/application.js +6 -1
  29. data/app/assets/javascripts/cms/attachment_manager.js.erb +3 -10
  30. data/app/assets/javascripts/cms/content_library.js +31 -12
  31. data/app/assets/javascripts/cms/core_library.js.erb +68 -36
  32. data/app/assets/javascripts/cms/form_builder.js +250 -0
  33. data/app/assets/javascripts/cms/namespace.js +2 -0
  34. data/app/assets/javascripts/cms/new_content_button.js +27 -0
  35. data/app/assets/javascripts/cms/page_editor.js +188 -0
  36. data/app/assets/javascripts/cms/page_toolbar.js +13 -0
  37. data/app/assets/javascripts/cms/site.js +2 -0
  38. data/app/assets/javascripts/cms/sitemap.js +219 -0
  39. data/app/assets/javascripts/cms/toolbar.js +17 -1
  40. data/app/assets/javascripts/cms/user.js +40 -0
  41. data/app/assets/javascripts/jquery.exists.js +5 -0
  42. data/app/assets/javascripts/jquery.taglist.js +37 -23
  43. data/app/assets/stylesheets/cms/_assets.css.scss +55 -0
  44. data/app/assets/stylesheets/cms/_base.css.scss +42 -0
  45. data/app/assets/stylesheets/cms/_cms-buttons.css.scss +73 -0
  46. data/app/assets/stylesheets/cms/_cms-forms.css.scss +70 -0
  47. data/app/assets/stylesheets/cms/_colors.css.scss +20 -0
  48. data/app/assets/stylesheets/cms/_dashboard.css.scss +25 -0
  49. data/app/assets/stylesheets/cms/_glyph.css.scss +60 -0
  50. data/app/assets/stylesheets/cms/_main-area.css.scss +62 -0
  51. data/app/assets/stylesheets/cms/_nav.css.scss +197 -0
  52. data/app/assets/stylesheets/cms/_sidebar.css.scss +64 -0
  53. data/app/assets/stylesheets/cms/_sitemap.css.scss +196 -0
  54. data/app/assets/stylesheets/cms/_submenu.css.scss +48 -0
  55. data/app/assets/stylesheets/cms/application.css.scss +49 -0
  56. data/app/assets/stylesheets/cms/core.css.scss +96 -0
  57. data/app/assets/stylesheets/cms/default-forms.css.scss +3 -0
  58. data/app/assets/stylesheets/cms/includes/_animation.css.scss +2 -0
  59. data/app/assets/stylesheets/cms/includes/_rem.css.scss +120 -0
  60. data/app/assets/stylesheets/cms/includes/animation/_animate.css.scss +31 -0
  61. data/app/assets/stylesheets/cms/includes/animation/_core.css.scss +127 -0
  62. data/app/assets/stylesheets/cms/includes/animation/_shared.css.scss +22 -0
  63. data/app/assets/stylesheets/cms/includes/animation/animate/_attention-seekers.css.scss +152 -0
  64. data/app/assets/stylesheets/cms/includes/animation/animate/_bouncing.css.scss +3 -0
  65. data/app/assets/stylesheets/cms/includes/animation/animate/_classes.css.scss +21 -0
  66. data/app/assets/stylesheets/cms/includes/animation/animate/_fading.css.scss +3 -0
  67. data/app/assets/stylesheets/cms/includes/animation/animate/_flippers.css.scss +87 -0
  68. data/app/assets/stylesheets/cms/includes/animation/animate/_lightspeed.css.scss +24 -0
  69. data/app/assets/stylesheets/cms/includes/animation/animate/_rotating.css.scss +3 -0
  70. data/app/assets/stylesheets/cms/includes/animation/animate/_specials.css.scss +42 -0
  71. data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-entrances.css.scss +68 -0
  72. data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-exits.css.scss +60 -0
  73. data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-entrances.css.scss +86 -0
  74. data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-exits.css.scss +86 -0
  75. data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-entrances.css.scss +58 -0
  76. data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-exits.css.scss +58 -0
  77. data/app/assets/stylesheets/cms/page_content_editing.css.scss +4 -0
  78. data/app/assets/stylesheets/cms/page_editor.css.scss +4 -0
  79. data/app/assets/stylesheets/cms/style.css.scss +138 -0
  80. data/app/assets/stylesheets/cms/styles/_alerts.css.scss +150 -0
  81. data/app/assets/stylesheets/cms/styles/_base-grid.css.scss +299 -0
  82. data/app/assets/stylesheets/cms/styles/_buttons.css.scss +247 -0
  83. data/app/assets/stylesheets/cms/styles/_dropdown.css.scss +155 -0
  84. data/app/assets/stylesheets/cms/styles/_forms.css.scss +728 -0
  85. data/app/assets/stylesheets/cms/styles/_glyph.css.scss +86 -0
  86. data/app/assets/stylesheets/cms/styles/_images.css.scss +75 -0
  87. data/app/assets/stylesheets/cms/styles/_lists.css.scss +115 -0
  88. data/app/assets/stylesheets/cms/styles/_modal.css.scss +174 -0
  89. data/app/assets/stylesheets/cms/styles/_progress.css.scss +43 -0
  90. data/app/assets/stylesheets/cms/styles/_tables.css.scss +141 -0
  91. data/app/assets/stylesheets/cms/styles/_text.css.scss +134 -0
  92. data/app/controllers/cms/application_controller.rb +3 -68
  93. data/app/controllers/cms/attachments_controller.rb +5 -5
  94. data/app/controllers/cms/base_controller.rb +20 -13
  95. data/app/controllers/cms/cache_controller.rb +16 -17
  96. data/app/controllers/cms/category_types_controller.rb +6 -1
  97. data/app/controllers/cms/connectors_controller.rb +12 -7
  98. data/app/controllers/cms/content_block_controller.rb +128 -71
  99. data/app/controllers/cms/content_controller.rb +54 -56
  100. data/app/controllers/cms/dashboard_controller.rb +5 -6
  101. data/app/controllers/cms/dynamic_views_controller.rb +12 -9
  102. data/app/controllers/cms/email_messages_controller.rb +18 -13
  103. data/app/controllers/cms/form_entries_controller.rb +119 -0
  104. data/app/controllers/cms/form_fields_controller.rb +74 -0
  105. data/app/controllers/cms/forms_controller.rb +35 -0
  106. data/app/controllers/cms/groups_controller.rb +13 -16
  107. data/app/controllers/cms/html_blocks_controller.rb +2 -2
  108. data/app/controllers/cms/inline_content_controller.rb +48 -0
  109. data/app/controllers/cms/links_controller.rb +58 -46
  110. data/app/controllers/cms/page_components_controller.rb +20 -0
  111. data/app/controllers/cms/page_routes_controller.rb +44 -40
  112. data/app/controllers/cms/pages_controller.rb +111 -97
  113. data/app/controllers/cms/passwords_controller.rb +17 -0
  114. data/app/controllers/cms/portlet_controller.rb +0 -1
  115. data/app/controllers/cms/portlets_controller.rb +20 -27
  116. data/app/controllers/cms/redirects_controller.rb +13 -9
  117. data/app/controllers/cms/resource_controller.rb +15 -4
  118. data/app/controllers/cms/routes_controller.rb +2 -4
  119. data/app/controllers/cms/section_nodes_controller.rb +6 -37
  120. data/app/controllers/cms/sections_controller.rb +13 -8
  121. data/app/controllers/cms/sessions_controller.rb +8 -66
  122. data/app/controllers/cms/sites/passwords_controller.rb +27 -0
  123. data/app/controllers/cms/sites/sessions_controller.rb +20 -0
  124. data/app/controllers/cms/tags_controller.rb +12 -12
  125. data/app/controllers/cms/tasks_controller.rb +45 -46
  126. data/app/controllers/cms/user_controller.rb +8 -0
  127. data/app/controllers/cms/users_controller.rb +91 -68
  128. data/app/helpers/cms/application_helper.rb +58 -52
  129. data/app/helpers/cms/content_block_helper.rb +8 -7
  130. data/app/helpers/cms/form_tag_helper.rb +21 -25
  131. data/app/helpers/cms/menu_helper.rb +1 -3
  132. data/app/helpers/cms/mobile_helper.rb +12 -2
  133. data/app/helpers/cms/nav_menu_helper.rb +23 -0
  134. data/app/helpers/cms/page_helper.rb +72 -30
  135. data/app/helpers/cms/path_helper.rb +46 -70
  136. data/app/helpers/cms/rendering_helper.rb +68 -12
  137. data/app/helpers/cms/section_nodes_helper.rb +92 -31
  138. data/app/helpers/cms/sites/authentication_helper.rb +25 -0
  139. data/app/helpers/cms/sites/devise_shim_helper.rb +31 -0
  140. data/app/helpers/cms/template_support.rb +1 -7
  141. data/app/helpers/cms/ui_elements_helper.rb +147 -6
  142. data/app/helpers/forgot_password_portlet_helper.rb +9 -0
  143. data/app/helpers/login_portlet_helper.rb +10 -0
  144. data/app/inputs/attachments_input.rb +14 -0
  145. data/app/inputs/cms_text_area_input.rb +10 -0
  146. data/app/inputs/cms_text_field_input.rb +29 -0
  147. data/app/inputs/date_picker_input.rb +8 -0
  148. data/app/inputs/file_picker_input.rb +75 -0
  149. data/app/inputs/path_input.rb +18 -0
  150. data/app/inputs/tag_list_input.rb +3 -0
  151. data/app/inputs/template_editor_input.rb +24 -0
  152. data/app/inputs/text_editor_input.rb +19 -0
  153. data/app/models/cms/abstract_file_block.rb +10 -6
  154. data/app/models/cms/attachment.rb +20 -27
  155. data/app/models/cms/category.rb +17 -7
  156. data/app/models/cms/category_type.rb +8 -4
  157. data/app/models/cms/connector.rb +32 -20
  158. data/app/models/cms/content.rb +31 -0
  159. data/app/models/cms/content_type.rb +114 -62
  160. data/app/models/cms/dynamic_view.rb +19 -45
  161. data/app/models/cms/email_message.rb +32 -2
  162. data/app/models/cms/external_user.rb +60 -0
  163. data/app/models/cms/file_block.rb +1 -0
  164. data/app/models/cms/form.rb +47 -0
  165. data/app/models/cms/form_entry.rb +71 -0
  166. data/app/models/cms/form_field.rb +78 -0
  167. data/app/models/cms/group.rb +19 -9
  168. data/app/models/cms/group_permission.rb +1 -1
  169. data/app/models/cms/group_section.rb +1 -1
  170. data/app/models/cms/group_type.rb +5 -5
  171. data/app/models/cms/group_type_permission.rb +1 -1
  172. data/app/models/cms/html_block.rb +14 -19
  173. data/app/models/cms/image_block.rb +1 -0
  174. data/app/models/cms/link.rb +8 -6
  175. data/app/models/cms/page.rb +156 -59
  176. data/app/models/cms/page_component.rb +43 -0
  177. data/app/models/cms/page_partial.rb +16 -8
  178. data/app/models/cms/page_route.rb +1 -1
  179. data/app/models/cms/page_route_condition.rb +1 -1
  180. data/app/models/cms/page_route_option.rb +1 -1
  181. data/app/models/cms/page_route_requirement.rb +1 -1
  182. data/app/models/cms/page_template.rb +14 -9
  183. data/app/models/cms/permission.rb +4 -2
  184. data/app/models/cms/persistent_user.rb +208 -0
  185. data/app/models/cms/portlet.rb +56 -9
  186. data/app/models/cms/redirect.rb +1 -1
  187. data/app/models/cms/search_filter.rb +18 -0
  188. data/app/models/cms/section.rb +39 -28
  189. data/app/models/cms/section_node.rb +32 -5
  190. data/app/models/cms/site.rb +3 -3
  191. data/app/models/cms/tag.rb +14 -12
  192. data/app/models/cms/tagging.rb +2 -2
  193. data/app/models/cms/task.rb +14 -21
  194. data/app/models/cms/templates.rb +1 -2
  195. data/app/models/cms/user.rb +21 -160
  196. data/app/models/cms/user_group_membership.rb +2 -2
  197. data/app/portlets/deprecated_placeholder.rb +12 -0
  198. data/app/portlets/dynamic_portlet.rb +1 -1
  199. data/app/portlets/email_page_portlet.rb +10 -3
  200. data/app/portlets/forgot_password_portlet.rb +9 -28
  201. data/app/portlets/login_portlet.rb +8 -5
  202. data/app/portlets/tag_cloud_portlet.rb +3 -1
  203. data/app/presenters/cms/user_presenter.rb +24 -0
  204. data/app/views/cms/application/_add_content_modal.html.erb +3 -0
  205. data/app/views/cms/application/_buttons.html.erb +7 -0
  206. data/app/views/cms/{shared → application}/_exception.html.erb +0 -0
  207. data/app/views/cms/application/_form_errors.html.erb +7 -0
  208. data/app/views/cms/application/_form_with_buttons.html.erb +10 -0
  209. data/app/views/cms/application/_main_content.html.erb +3 -0
  210. data/app/views/cms/application/_main_with_sidebar.html.erb +8 -0
  211. data/app/views/cms/application/_mobile_toolbar.html.erb +16 -0
  212. data/app/views/cms/application/_page_title.html.erb +5 -0
  213. data/app/views/cms/application/_pagination.html.erb +26 -0
  214. data/app/views/cms/application/_row.html.erb +1 -0
  215. data/app/views/cms/application/_save_buttons.html.erb +7 -0
  216. data/app/views/cms/application/_sidebar_layout.html.erb +3 -0
  217. data/app/views/cms/application/_version.html.erb +23 -0
  218. data/app/views/cms/{shared → application}/_version_conflict_diff.html.erb +0 -0
  219. data/app/views/cms/{shared → application}/_version_conflict_error.html.erb +0 -0
  220. data/app/views/cms/attachments/_attachment_manager.html.erb +22 -0
  221. data/app/views/cms/attachments/_no_attachments_defined.html.erb +1 -0
  222. data/app/views/cms/cache/show.html.erb +5 -10
  223. data/app/views/cms/categories/_form.html.erb +15 -24
  224. data/app/views/cms/category_types/_form.html.erb +1 -1
  225. data/app/views/cms/connectors/new.html.erb +33 -64
  226. data/app/views/cms/content/editing_frame.html.erb +1 -0
  227. data/app/views/cms/content/no_page.html.erb +9 -27
  228. data/app/views/cms/content/show.html.erb +14 -15
  229. data/app/views/cms/content_block/_block_form.html.erb +15 -0
  230. data/app/views/cms/content_block/_buttonbar.html.erb +29 -0
  231. data/app/views/cms/content_block/_buttons.html.erb +13 -0
  232. data/app/views/cms/content_block/_hidden_fields.html.erb +13 -0
  233. data/app/views/cms/content_block/_sidebar.html.erb +35 -0
  234. data/app/views/cms/content_block/edit.html.erb +3 -0
  235. data/app/views/cms/content_block/index.html.erb +87 -0
  236. data/app/views/cms/content_block/new.html.erb +3 -0
  237. data/app/views/cms/content_block/render_block_in_main_container.html.erb +10 -0
  238. data/app/views/cms/content_block/show.html.erb +1 -0
  239. data/app/views/cms/content_block/show_in_isolation.html.erb +15 -0
  240. data/app/views/cms/content_block/versions.html.erb +24 -0
  241. data/app/views/cms/dashboard/_page_drafts.html.erb +12 -22
  242. data/app/views/cms/dashboard/_tasks.html.erb +32 -45
  243. data/app/views/cms/dashboard/index.html.erb +11 -13
  244. data/app/views/cms/dynamic_views/_form.html.erb +8 -10
  245. data/app/views/cms/dynamic_views/edit.html.erb +2 -3
  246. data/app/views/cms/dynamic_views/index.html.erb +22 -44
  247. data/app/views/cms/dynamic_views/new.html.erb +2 -3
  248. data/app/views/cms/email_messages/index.html.erb +31 -34
  249. data/app/views/cms/email_messages/show.html.erb +45 -52
  250. data/app/views/cms/file_blocks/_form.html.erb +2 -4
  251. data/app/views/cms/form_entries/_buttons.html.erb +2 -0
  252. data/app/views/cms/form_entries/_form.html.erb +7 -0
  253. data/app/views/cms/form_entries/_internal_form.html.erb +9 -0
  254. data/app/views/cms/form_entries/edit.html.erb +5 -0
  255. data/app/views/cms/form_entries/error.html.erb +3 -0
  256. data/app/views/cms/form_entries/index.html.erb +4 -0
  257. data/app/views/cms/form_entries/new.html.erb +5 -0
  258. data/app/views/cms/form_entries/show.html.erb +13 -0
  259. data/app/views/cms/form_entries/submit.html.erb +1 -0
  260. data/app/views/cms/form_fields/_form.html.erb +8 -0
  261. data/app/views/cms/form_fields/_select.html.erb +3 -0
  262. data/app/views/cms/form_fields/_text_area.html.erb +3 -0
  263. data/app/views/cms/form_fields/_text_field.html.erb +3 -0
  264. data/app/views/cms/form_fields/edit.html.erb +0 -0
  265. data/app/views/cms/form_fields/new.html.erb +26 -0
  266. data/app/views/cms/form_fields/preview.html.erb +16 -0
  267. data/app/views/cms/forms/_form.html.erb +66 -0
  268. data/app/views/cms/forms/render.html.erb +15 -0
  269. data/app/views/cms/forms/show.html.erb +6 -0
  270. data/app/views/cms/groups/_form.html.erb +32 -38
  271. data/app/views/cms/groups/_permissions.html.erb +11 -34
  272. data/app/views/cms/groups/_sections.html.erb +11 -17
  273. data/app/views/cms/groups/edit.html.erb +1 -3
  274. data/app/views/cms/groups/index.html.erb +10 -32
  275. data/app/views/cms/groups/new.html.erb +2 -4
  276. data/app/views/cms/html_blocks/_form.html.erb +2 -2
  277. data/app/views/cms/html_blocks/render.html.erb +1 -1
  278. data/app/views/cms/image_blocks/_form.html.erb +3 -3
  279. data/app/views/cms/links/_form.html.erb +6 -11
  280. data/app/views/cms/links/edit.html.erb +3 -12
  281. data/app/views/cms/links/new.html.erb +4 -13
  282. data/app/views/cms/page_components/_content.html.erb +18 -0
  283. data/app/views/cms/page_components/new.html.erb +12 -0
  284. data/app/views/cms/page_routes/_form.html.erb +11 -10
  285. data/app/views/cms/page_routes/edit.html.erb +2 -3
  286. data/app/views/cms/page_routes/index.html.erb +25 -48
  287. data/app/views/cms/page_routes/new.html.erb +2 -3
  288. data/app/views/cms/pages/_edit_content.html.erb +28 -0
  289. data/app/views/cms/pages/_form.html.erb +20 -37
  290. data/app/views/cms/pages/_main_form.html.erb +23 -0
  291. data/app/views/cms/pages/_simple_container.html.erb +8 -0
  292. data/app/views/cms/pages/edit.html.erb +2 -23
  293. data/app/views/cms/pages/new.html.erb +2 -16
  294. data/app/views/cms/pages/versions.html.erb +18 -87
  295. data/app/views/cms/redirects/_form.html.erb +6 -14
  296. data/app/views/cms/redirects/edit.html.erb +2 -3
  297. data/app/views/cms/redirects/index.html.erb +24 -50
  298. data/app/views/cms/redirects/new.html.erb +2 -3
  299. data/app/views/cms/routes/index.html.erb +15 -20
  300. data/app/views/cms/section_nodes/_children.html.erb +3 -0
  301. data/app/views/cms/section_nodes/_row_buttons.html.erb +11 -0
  302. data/app/views/cms/section_nodes/_section_node.html.erb +24 -10
  303. data/app/views/cms/section_nodes/_sitemap_buttons.html.erb +47 -0
  304. data/app/views/cms/section_nodes/_status.html.erb +5 -0
  305. data/app/views/cms/section_nodes/show.html.erb +9 -0
  306. data/app/views/cms/sections/_buttons.html.erb +6 -0
  307. data/app/views/cms/sections/_form.html.erb +22 -49
  308. data/app/views/cms/sections/edit.html.erb +3 -8
  309. data/app/views/cms/sections/new.html.erb +4 -20
  310. data/app/views/cms/sessions/new.html.erb +16 -31
  311. data/app/views/cms/shared/access_denied.html.erb +1 -2
  312. data/app/views/cms/shared/error.html.erb +5 -5
  313. data/app/views/cms/sites/_flash.html.erb +8 -0
  314. data/app/views/cms/sites/passwords/new.html.erb +2 -0
  315. data/app/views/cms/sites/sessions/new.html.erb +2 -0
  316. data/app/views/cms/tags/_form.html.erb +1 -1
  317. data/app/views/cms/tags/render.html.erb +0 -1
  318. data/app/views/cms/tasks/new.html.erb +18 -32
  319. data/app/views/cms/toolbar/_new_pages_menu.html.erb +10 -0
  320. data/app/views/cms/users/_form.html.erb +8 -11
  321. data/app/views/cms/users/_password.html.erb +2 -8
  322. data/app/views/cms/users/_user_fields.html.erb +7 -20
  323. data/app/views/cms/users/change_password.html.erb +12 -21
  324. data/app/views/cms/users/edit.html.erb +1 -15
  325. data/app/views/cms/users/index.html.erb +61 -58
  326. data/app/views/cms/users/new.html.erb +1 -12
  327. data/app/views/devise/confirmations/new.html.erb +16 -0
  328. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  329. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  330. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  331. data/app/views/devise/passwords/edit.html.erb +19 -0
  332. data/app/views/devise/passwords/new.html.erb +15 -0
  333. data/app/views/devise/registrations/edit.html.erb +28 -0
  334. data/app/views/devise/registrations/new.html.erb +18 -0
  335. data/app/views/devise/shared/_links.erb +25 -0
  336. data/app/views/devise/unlocks/new.html.erb +16 -0
  337. data/app/views/layouts/cms/_content_types.html.erb +13 -0
  338. data/app/views/layouts/cms/_footer.erb +2 -2
  339. data/app/views/layouts/cms/_head.html.erb +8 -18
  340. data/app/views/layouts/cms/_main_menu.html.erb +78 -0
  341. data/app/views/layouts/cms/application.html.erb +19 -24
  342. data/app/views/layouts/cms/content_page.html.erb +5 -0
  343. data/app/views/layouts/cms/page_editor.html.erb +90 -0
  344. data/app/views/portlets/deprecated_placeholders/_form.html.erb +1 -0
  345. data/app/views/portlets/deprecated_placeholders/render.html.erb +8 -0
  346. data/app/views/portlets/dynamic/_form.html.erb +3 -3
  347. data/app/views/portlets/email_page/_form.html.erb +5 -6
  348. data/app/views/portlets/forgot_password/_form.html.erb +2 -3
  349. data/app/views/portlets/forgot_password/render.html.erb +2 -14
  350. data/app/views/portlets/login/_form.html.erb +4 -6
  351. data/app/views/portlets/login/render.html.erb +8 -27
  352. data/app/views/portlets/portlets/_form.html.erb +7 -6
  353. data/app/views/portlets/tag_cloud/_form.html.erb +4 -4
  354. data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
  355. data/bin/bcms +13 -16
  356. data/config/routes.rb +58 -29
  357. data/db/browsercms.seeds.rb +0 -6
  358. data/db/migrate/{20080815014337_browsercms_3_0_0.rb → 20080815014337_browsercms300.rb} +94 -73
  359. data/db/migrate/20130327184912_browsercms400.rb +90 -0
  360. data/db/migrate/20131206214021_devise_create_users.rb +47 -0
  361. data/db/migrate/20131211223908_kill_reset_password.rb +5 -0
  362. data/db/migrate/20131218222005_create_cms_external_users.rb +10 -0
  363. data/doc/features/design_integration.md +45 -0
  364. data/doc/features/external_user.md +7 -0
  365. data/doc/features/form_builder.md +40 -0
  366. data/doc/features/simple_form_refactor.md +60 -0
  367. data/doc/release_notes.md +224 -10
  368. data/lib/acts_as_list.rb +72 -71
  369. data/lib/browsercms.rb +41 -1
  370. data/lib/cms/acts/content_block.rb +12 -2
  371. data/lib/cms/acts/content_page.rb +3 -4
  372. data/lib/cms/admin_tab.rb +15 -0
  373. data/lib/cms/attachments/configuration.rb +1 -1
  374. data/lib/cms/authentication/controller.rb +83 -177
  375. data/lib/cms/authentication/test_password_strategy.rb +19 -0
  376. data/lib/cms/behaviors.rb +1 -0
  377. data/lib/cms/behaviors/archiving.rb +2 -2
  378. data/lib/cms/behaviors/attaching.rb +21 -45
  379. data/lib/cms/behaviors/connecting.rb +14 -4
  380. data/lib/cms/behaviors/dynamic_attributes.rb +3 -3
  381. data/lib/cms/behaviors/hiding.rb +2 -2
  382. data/lib/cms/behaviors/namespacing.rb +6 -36
  383. data/lib/cms/behaviors/publishing.rb +92 -45
  384. data/lib/cms/behaviors/rendering.rb +15 -7
  385. data/lib/cms/behaviors/searching.rb +5 -4
  386. data/lib/cms/behaviors/soft_deleting.rb +13 -16
  387. data/lib/cms/behaviors/taggable.rb +17 -10
  388. data/lib/cms/behaviors/versioning.rb +12 -16
  389. data/lib/cms/commands/to_version400.rb +10 -0
  390. data/lib/cms/concerns.rb +7 -0
  391. data/lib/cms/concerns/can_be_addressable.rb +326 -0
  392. data/lib/cms/concerns/has_content_type.rb +46 -0
  393. data/lib/cms/concerns/ignores_publishing.rb +9 -0
  394. data/lib/cms/configuration.rb +14 -4
  395. data/lib/cms/configuration/configurable_template.rb +24 -0
  396. data/lib/cms/configuration/devise.rb +256 -0
  397. data/lib/cms/configure_simple_form.rb +142 -0
  398. data/lib/cms/configure_simple_form_bootstrap.rb +49 -0
  399. data/lib/cms/content_filter.rb +18 -0
  400. data/lib/cms/content_page.rb +77 -0
  401. data/lib/cms/content_rendering_support.rb +25 -16
  402. data/lib/cms/controllers/admin_controller.rb +78 -0
  403. data/lib/cms/data_loader.rb +30 -11
  404. data/lib/cms/default_accessible.rb +6 -6
  405. data/lib/cms/domain_support.rb +0 -4
  406. data/lib/cms/engine.rb +52 -20
  407. data/lib/cms/engine_helper.rb +41 -51
  408. data/{app/controllers → lib}/cms/error_handling.rb +11 -5
  409. data/lib/cms/extensions.rb +2 -1
  410. data/lib/cms/extensions/active_model/name.rb +13 -0
  411. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +49 -89
  412. data/lib/cms/extensions/hash.rb +0 -12
  413. data/lib/cms/form_builder/content_block_form_builder.rb +45 -0
  414. data/lib/cms/form_builder/default_input.rb +13 -0
  415. data/lib/cms/form_builder/deprecated_inputs.rb +40 -0
  416. data/lib/cms/form_builder/workflow_buttons.rb +38 -0
  417. data/lib/cms/module.rb +1 -7
  418. data/lib/cms/polymorphic_single_table_inheritance.rb +19 -0
  419. data/lib/cms/publish_workflow.rb +26 -0
  420. data/lib/cms/responders/content_responder.rb +14 -0
  421. data/lib/cms/route_extensions.rb +112 -20
  422. data/lib/cms/version.rb +1 -1
  423. data/lib/generators/browser_cms/demo_site/templates/demo.seeds.rb +0 -2
  424. data/lib/generators/cms/content_block/content_block_generator.rb +19 -46
  425. data/lib/generators/cms/content_block/templates/_form.html.erb +22 -28
  426. data/lib/generators/cms/project/templates/devise.rb.erb +7 -0
  427. metadata +383 -150
  428. data/app/assets/javascripts/cms/sitemap.js.erb +0 -464
  429. data/app/assets/stylesheets/browsercms/application.css +0 -7
  430. data/app/assets/stylesheets/cms/administration.css.erb +0 -91
  431. data/app/assets/stylesheets/cms/application.css.erb +0 -171
  432. data/app/assets/stylesheets/cms/attachment_manager.css.scss +0 -28
  433. data/app/assets/stylesheets/cms/block.css +0 -26
  434. data/app/assets/stylesheets/cms/buttons.css.erb +0 -120
  435. data/app/assets/stylesheets/cms/content_library.css.erb +0 -139
  436. data/app/assets/stylesheets/cms/content_types.css +0 -4
  437. data/app/assets/stylesheets/cms/dashboard.css.erb +0 -118
  438. data/app/assets/stylesheets/cms/data_table.css.erb.erb +0 -156
  439. data/app/assets/stylesheets/cms/date_picker.css.erb +0 -82
  440. data/app/assets/stylesheets/cms/form_layout.css.erb +0 -282
  441. data/app/assets/stylesheets/cms/login.css.erb +0 -78
  442. data/app/assets/stylesheets/cms/menu.css.erb +0 -116
  443. data/app/assets/stylesheets/cms/nav.css.erb +0 -99
  444. data/app/assets/stylesheets/cms/page_toolbar.css.erb +0 -135
  445. data/app/assets/stylesheets/cms/reset.css +0 -46
  446. data/app/assets/stylesheets/cms/selectbox.css.erb +0 -56
  447. data/app/assets/stylesheets/cms/sitemap.css.erb +0 -390
  448. data/app/assets/stylesheets/cms/taglist.css +0 -18
  449. data/app/controllers/application_controller.rb +0 -14
  450. data/app/controllers/cms/content_types_controller.rb +0 -9
  451. data/app/helpers/application_helper.rb +0 -5
  452. data/app/helpers/cms/form_builder.rb +0 -241
  453. data/app/models/cms/content_type_group.rb +0 -15
  454. data/app/models/cms/forgot_password_mailer.rb +0 -14
  455. data/app/portlets/reset_password_portlet.rb +0 -28
  456. data/app/views/cms/blocks/_hidden_fields.html.erb +0 -10
  457. data/app/views/cms/blocks/_toolbar.html.erb +0 -9
  458. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +0 -23
  459. data/app/views/cms/blocks/_toolbar_for_member.html.erb +0 -36
  460. data/app/views/cms/blocks/edit.html.erb +0 -28
  461. data/app/views/cms/blocks/index.html.erb +0 -86
  462. data/app/views/cms/blocks/new.html.erb +0 -19
  463. data/app/views/cms/blocks/show.html.erb +0 -43
  464. data/app/views/cms/blocks/usages.html.erb +0 -44
  465. data/app/views/cms/blocks/versions.html.erb +0 -90
  466. data/app/views/cms/content_types/index.html.erb +0 -14
  467. data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +0 -27
  468. data/app/views/cms/form_builder/_cms_check_box.html.erb +0 -7
  469. data/app/views/cms/form_builder/_cms_date_picker.html.erb +0 -12
  470. data/app/views/cms/form_builder/_cms_datetime_select.html.erb +0 -12
  471. data/app/views/cms/form_builder/_cms_drop_down.html.erb +0 -12
  472. data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +0 -9
  473. data/app/views/cms/form_builder/_cms_file_field.html.erb +0 -28
  474. data/app/views/cms/form_builder/_cms_instructions.html.erb +0 -4
  475. data/app/views/cms/form_builder/_cms_tag_list.html.erb +0 -15
  476. data/app/views/cms/form_builder/_cms_template_editor.html.erb +0 -9
  477. data/app/views/cms/form_builder/_cms_text_area.html.erb +0 -10
  478. data/app/views/cms/form_builder/_cms_text_editor.html.erb +0 -19
  479. data/app/views/cms/form_builder/_cms_text_field.html.erb +0 -12
  480. data/app/views/cms/links/destroy.js.rjs +0 -2
  481. data/app/views/cms/page_routes/show.html.erb +0 -10
  482. data/app/views/cms/pages/_edit_connector.html.erb +0 -19
  483. data/app/views/cms/pages/_edit_container.html.erb +0 -11
  484. data/app/views/cms/section_nodes/_link.html.erb +0 -14
  485. data/app/views/cms/section_nodes/_node.html.erb +0 -44
  486. data/app/views/cms/section_nodes/_page.html.erb +0 -20
  487. data/app/views/cms/section_nodes/_section.html.erb +0 -28
  488. data/app/views/cms/section_nodes/index.html.erb +0 -43
  489. data/app/views/cms/sections/_page.html.erb +0 -4
  490. data/app/views/cms/sections/_section.html.erb +0 -8
  491. data/app/views/cms/sections/destroy.js.rjs +0 -2
  492. data/app/views/cms/sections/index.html.erb +0 -23
  493. data/app/views/cms/shared/_admin_sidebar.html.erb +0 -36
  494. data/app/views/cms/shared/_pagination.html.erb +0 -31
  495. data/app/views/cms/toolbar/_mobile_toggle.html.erb +0 -33
  496. data/app/views/cms/toolbar/index.html.erb +0 -1
  497. data/app/views/cms/users/_groups.html.erb +0 -12
  498. data/app/views/cms/users/_toolbar.html.erb +0 -24
  499. data/app/views/cms/users/show.html.erb +0 -50
  500. data/app/views/layouts/_cms_toolbar.html.erb +0 -54
  501. data/app/views/layouts/_page_toolbar.html.erb +0 -119
  502. data/app/views/layouts/cms/administration.html.erb +0 -51
  503. data/app/views/layouts/cms/content_library.html.erb +0 -96
  504. data/app/views/layouts/cms/dashboard.html.erb +0 -16
  505. data/app/views/layouts/cms/login.html.erb +0 -31
  506. data/app/views/layouts/cms/section_nodes.html.erb +0 -20
  507. data/app/views/layouts/cms/toolbar.html.erb +0 -23
  508. data/app/views/portlets/reset_password/_form.html.erb +0 -3
  509. data/app/views/portlets/reset_password/render.html.erb +0 -22
  510. data/bin/bcms-upgrade +0 -332
  511. data/db/migrate/20091109175123_browsercms_3_0_5.rb +0 -9
  512. data/db/migrate/20100117144038_browsercms314.rb +0 -20
  513. data/db/migrate/20100117144039_browsercms315.rb +0 -95
  514. data/db/migrate/20100705083859_browsercms_3_3_0.rb +0 -56
  515. data/db/migrate/20111130221145_browsercms340.rb +0 -56
  516. data/db/migrate/20120329144406_browsercms350.rb +0 -32
  517. data/db/migrate/20120717182827_browsercms353.rb +0 -19
  518. data/db/migrate/20120813180110_browsercms354.rb +0 -9
  519. data/lib/cms/addressable.rb +0 -93
  520. data/lib/cms/authentication/model.rb +0 -116
  521. data/lib/cms/behaviors/pagination.rb +0 -212
  522. data/lib/cms/upgrades/v3_4_0.rb +0 -31
  523. data/lib/cms/upgrades/v3_5_0.rb +0 -227
@@ -0,0 +1,49 @@
1
+ # Use this setup block to configure all options available in SimpleForm.
2
+ SimpleForm.setup do |config|
3
+ config.wrappers :bootstrap, tag: 'div', class: 'control-group row-fluid', error_class: 'error' do |b|
4
+ b.use :html5
5
+ b.use :placeholder
6
+ b.use :label
7
+ b.use :input
8
+ b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
9
+ b.use :hint, wrap_with: {tag: 'p', class: 'help-block'}
10
+ end
11
+
12
+ config.wrappers :checkbox, :tag => 'div', :class => 'control-group row-fluid', :error_class => 'error' do |b|
13
+ b.use :html5
14
+ b.use :placeholder
15
+ b.use :label_input
16
+ b.use :hint, :wrap_with => {:tag => 'span', :class => 'help-block'}
17
+ b.use :error, :wrap_with => {:tag => 'span', :class => 'help-inline'}
18
+ end
19
+
20
+ config.wrapper_mappings = { :boolean => :checkbox }
21
+
22
+ config.wrappers :prepend, tag: 'div', class: "control-group", error_class: 'error' do |b|
23
+ b.use :html5
24
+ b.use :placeholder
25
+ b.use :label
26
+ b.wrapper tag: 'div', class: 'input-prepend' do |prepend|
27
+ prepend.use :input
28
+ end
29
+ b.use :hint, wrap_with: {tag: 'span', class: 'help-block'}
30
+ b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
31
+ end
32
+
33
+ config.wrappers :append, tag: 'div', class: "control-group", error_class: 'error' do |b|
34
+ b.use :html5
35
+ b.use :placeholder
36
+ b.use :label
37
+ b.wrapper tag: 'div', class: 'input-append' do |append|
38
+ append.use :input
39
+ end
40
+ b.use :hint, wrap_with: {tag: 'span', class: 'help-block'}
41
+ b.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
42
+ end
43
+
44
+ # Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
45
+ # Check the Bootstrap docs (http://twitter.github.com/bootstrap)
46
+ # to learn about the different styles for forms and inputs,
47
+ # buttons and other elements.
48
+ config.default_wrapper = :bootstrap
49
+ end
@@ -0,0 +1,18 @@
1
+ module Cms
2
+ class ContentFilter
3
+
4
+ # Strips HTML from any attribute that's not :content
5
+ #
6
+ # Handles CKEditor's habit of adding opening/closing <p> tags to everything.
7
+ # @TODO Have this inspect the underlying model to determine the actual attribute.
8
+ def filter(content)
9
+ c = content.clone
10
+ c.keys.each do |key|
11
+ if(key != :content && key != "content")
12
+ c[key] = HTML::FullSanitizer.new.sanitize(c[key]).strip
13
+ end
14
+ end
15
+ c
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,77 @@
1
+ module Cms
2
+
3
+ # Add to controllers to allow them to behave like pages. A newer version of Acts::ContentPage
4
+ module ContentPage
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ helper_method :cms_template
9
+ layout :determine_layout
10
+ class_attribute :template_name
11
+ class_attribute :template_options
12
+
13
+ include Cms::Authentication::Controller
14
+ include Cms::PageHelper
15
+ helper Cms::PageHelper
16
+ helper Cms::RenderingHelper
17
+ helper Cms::MenuHelper
18
+ include Cms::Configuration::ConfigurableTemplate
19
+ end
20
+
21
+ module ClassMethods
22
+
23
+ # Specify which CMS template should be used for this controller. Works similarly to ActionController::Base#layout.
24
+ # Will use the named template from the appropriate directory (typically app/views/layouts/templates)
25
+ #
26
+ # The default CMS layout will be used if no template is specified.
27
+ #
28
+ # @example
29
+ # template :subpage, only: [:new, :create]
30
+ # template :subpage, except: [:new, :create]
31
+ # template :subpage, only: [:new, :create]
32
+ #
33
+ # @param [Symbol] template_name Name of the template with no directory prefixes or file type. (i.e. subpage, homepage)
34
+ # @param [Hash] options (Optional)
35
+ # @option options [Array<Symbol>] :only The actions to apply the template to.
36
+ # @option options [Array<Symbol>] :exception The actions to not apply the template to.
37
+ def template(template_name, options={})
38
+ self.template_name = template_name.to_s
39
+ self.template_options = options
40
+ end
41
+
42
+ end
43
+
44
+ # Returns the page template that should be used to render this page.
45
+ def cms_template
46
+ "layouts/#{normalize_layout(self.class, self.class.template_name)}"
47
+ end
48
+
49
+ def content_page_layout
50
+ 'cms/content_page'
51
+ end
52
+
53
+ protected
54
+
55
+ def template_options
56
+ self.class.template_options
57
+ end
58
+
59
+ def use_template?
60
+ if template_name.blank?
61
+ false
62
+ elsif template_options.empty?
63
+ true
64
+ elsif template_options[:only] && template_options[:only].include?(action_name.to_sym)
65
+ true
66
+ elsif template_options[:except] && !template_options[:except].include?(action_name.to_sym)
67
+ true
68
+ else
69
+ false
70
+ end
71
+ end
72
+
73
+ def determine_layout
74
+ use_template? ? content_page_layout : 'cms/application'
75
+ end
76
+ end
77
+ end
@@ -1,3 +1,4 @@
1
+ require 'cms/error_handling'
1
2
  #
2
3
  # This module can be added to Controllers to provide support for rendering CMS content pages.
3
4
  #
@@ -6,10 +7,24 @@ module Cms
6
7
 
7
8
  def self.included(base)
8
9
  base.send :include, Cms::ErrorHandling
9
-
10
10
  base.rescue_from Exception, :with => :handle_server_error_on_page
11
- base.rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied_on_page
12
11
  base.rescue_from ActiveRecord::RecordNotFound, :with => :handle_not_found_on_page
12
+ base.rescue_from Cms::Errors::ContentNotFound, :with => :handle_not_found_on_page
13
+ base.rescue_from Cms::Errors::DraftNotFound, :with => :handle_draft_not_found
14
+ base.rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied_on_page
15
+
16
+ end
17
+
18
+ def show_content_as_page(content)
19
+ @page = content # page templates expect a @page attribute
20
+ @content_block = content # render.html.erb's expect a @content_block attribute
21
+ end
22
+
23
+ def handle_draft_not_found(exception)
24
+ logger.warn "Draft Content Not Found"
25
+ render(:layout => 'cms/application',
26
+ :template => 'cms/content/no_page',
27
+ :status => :not_found)
13
28
  end
14
29
 
15
30
  def handle_not_found_on_page(exception)
@@ -28,12 +43,6 @@ module Cms
28
43
  handle_error_with_cms_page(Cms::ErrorPages::SERVER_ERROR_PATH, exception, :internal_server_error)
29
44
  end
30
45
 
31
- # Basic implementation for looking up the template based on the page layout.
32
- # This will be overwritten by Cms::MobileAware to show mobile aware templates.
33
- def determine_page_layout
34
- @page.layout
35
- end
36
-
37
46
  private
38
47
 
39
48
  # This is the method all error handlers delegate to
@@ -41,9 +50,9 @@ module Cms
41
50
 
42
51
  # If we are in the CMS, we just want to show the exception
43
52
  if perform_caching
44
- return handle_server_error(exception) if cms_site?
53
+ return handle_server_error(exception, status) if cms_site?
45
54
  else
46
- return handle_server_error(exception) if current_user.able_to?(:edit_content, :publish_content)
55
+ return handle_server_error(exception, status) if current_user.able_to?(:edit_content, :publish_content)
47
56
  end
48
57
 
49
58
  # We must be showing the page outside of the CMS
@@ -60,7 +69,7 @@ module Cms
60
69
 
61
70
  # clear out any content already captured
62
71
  # by previous attempts to render the page within this request
63
- @template.instance_variables.select{|v| v =~ /@content_for_/ }.each do |v|
72
+ @template.instance_variables.select { |v| v =~ /@content_for_/ }.each do |v|
64
73
  @template.instance_variable_set("#{v}", nil)
65
74
  end
66
75
 
@@ -68,18 +77,18 @@ module Cms
68
77
 
69
78
  # The error pages are ALWAYS html since they are managed by the CMS as normal pages.
70
79
  # So .gif or .jpg requests that throw errors will return html rather than a format warning.
71
- render :layout => determine_page_layout, :template => 'cms/content/show', :status => status, :formats=>[:html]
80
+ render :layout => @page.layout, :template => 'cms/content/show', :status => status, :formats => [:html]
72
81
  else
73
- handle_server_error(exception)
82
+ handle_server_error(exception, status)
74
83
  end
75
84
  end
76
85
 
77
86
  # If any of the page's connectables (portlets, etc) are renderable, they may have a render method
78
87
  # which does "controller" stuff, so we need to get that run before rendering the page.
79
88
  def prepare_connectables_for_render
80
- @_connectors = @page.connectors.for_page_version(@page.version)
81
- @_connectables = @_connectors.map(&:connectable_with_deleted)
82
-
89
+ @_connectors = @page.current_connectors
90
+ @_connectables = @page.contents
91
+
83
92
  unless (logged_in? && current_user.able_to?(:administrate, :edit_content, :publish_content))
84
93
  worst_exception = nil
85
94
  @_connectables.each do |c|
@@ -0,0 +1,78 @@
1
+ module Cms
2
+
3
+ # Before for any controller that is considered an admin page within BrowserCMS.
4
+ module AdminController
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ include Cms::Authentication::Controller
9
+ include Cms::ErrorHandling
10
+ include Cms::DomainSupport
11
+
12
+ helper Cms::ApplicationHelper
13
+ helper Cms::FormTagHelper
14
+ include Cms::PathHelper
15
+ helper Cms::PathHelper
16
+ include Cms::PageHelper
17
+ helper Cms::PageHelper
18
+ helper Cms::MenuHelper
19
+ helper Cms::RenderingHelper
20
+ helper Cms::UiElementsHelper
21
+ include Cms::NavMenuHelper
22
+
23
+ end
24
+
25
+ protected
26
+ def escape_javascript(javascript)
27
+ (javascript || '').gsub('\\', '\0\0').gsub('</', '<\/').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
28
+ end
29
+
30
+ def redirect_to_first(*urls)
31
+ urls.each do |url|
32
+ unless url.blank?
33
+ return redirect_to(url)
34
+ end
35
+ end
36
+ end
37
+
38
+ def current_site
39
+ @current_site ||= Site.find_by_domain(request.host)
40
+ end
41
+
42
+ def redirect_to_cms_site
43
+ if using_cms_subdomains? && !request_is_for_cms_subdomain?
44
+ redirect_to(url_with_cms_domain_prefix)
45
+ end
46
+ end
47
+
48
+ def append_to_query_string(url, *params)
49
+ new_url = url["?"] ? url : "#{url}?"
50
+ new_url << params.map { |k, v| "#{k.to_s}=#{CGI::escape(v.to_s)}" }.join("&")
51
+ end
52
+
53
+ def cms_access_required
54
+ raise Cms::Errors::AccessDenied unless current_user.able_to?(:administrate, :edit_content, :publish_content)
55
+ end
56
+
57
+ def url_with_cms_domain_prefix
58
+ if cms_site?
59
+ request.url
60
+ elsif request.subdomains.first == "www"
61
+ request.url.sub(/www\./, "#{cms_domain_prefix}.")
62
+ else
63
+ request.url.sub(/:\/\//, "://#{cms_domain_prefix}.")
64
+ end
65
+ end
66
+
67
+ def url_without_cms_domain_prefix
68
+ request.url.sub(/#{cms_domain_prefix}\./, '')
69
+ end
70
+
71
+ def ensure_current_user_can_view(content)
72
+ unless current_user.able_to_view?(content)
73
+ store_location
74
+ raise Cms::Errors::AccessDenied
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,20 +1,22 @@
1
1
  module Cms
2
+ # A DSL for creating CMS content in seed data. Creating content in this manner will log the creation of the record
3
+ # and store any created records in a hash.
4
+ # To use, add the following to your seeds.rb.
5
+ # require "cms/data_loader"
6
+ #
7
+ # @example Create a Page in the root section
8
+ # create_page(:hello, name: "Hello", path: "/hello", parent: sections(:root))
9
+ #
10
+ # @example Lookup a previously created page
11
+ # puts pages(:hello).name
2
12
  module DataLoader
3
13
 
4
14
  mattr_accessor :silent_mode
5
15
 
6
16
  def method_missing(method_name, *args)
7
17
  if md = method_name.to_s.match(/^create_(.+)$/)
8
- # We search the CMS namespace first.
9
- # for things like DynamicPortlets "Cms::DynamicPortlet".constantize returns "DynamicPortlet"
10
- model_name = "Cms/#{md[1]}".classify.constantize.name
11
- begin
12
- #Make sure this is an active record class
13
- super unless model_name.classify.constantize.ancestors.include?(ActiveRecord::Base)
14
- rescue NameError => e
15
- super
16
- end
17
- self.create(model_name, args[0], args[1] || {})
18
+ klass = model_class(md[1])
19
+ self.create(klass.name, args[0], args[1] || {})
18
20
  elsif @data && @data.has_key?(method_name)
19
21
  record = @data[method_name][args.first]
20
22
  record ? record.class.find(record.id) : nil
@@ -22,6 +24,22 @@ module Cms
22
24
  super
23
25
  end
24
26
  end
27
+
28
+ # We search the CMS namespace first.
29
+ # for things like DynamicPortlets "Cms::DynamicPortlet".constantize returns "DynamicPortlet"
30
+ def model_class(model_name)
31
+ klass = begin
32
+ "Cms/#{model_name}".classify.constantize
33
+ rescue NameError => e
34
+ model_name.classify.constantize
35
+ end
36
+ unless klass.method_defined?(:save!)
37
+ raise "Can't create an instance of #{klass} because its not an ActiveRecord instance."
38
+ end
39
+ klass
40
+ end
41
+
42
+
25
43
  def create(model_name, record_name, data={})
26
44
  puts "-- create_#{model_name}(:#{record_name})" unless Cms::DataLoader.silent_mode
27
45
  @data ||= {}
@@ -32,4 +50,5 @@ module Cms
32
50
  @data[model_storage_name][record_name] = model
33
51
  end
34
52
  end
35
- end
53
+ end
54
+ extend Cms::DataLoader
@@ -1,12 +1,12 @@
1
1
  module Cms
2
2
  module DefaultAccessible
3
3
 
4
- def self.included(model_class)
5
- model_class.attribute_names.each do |name|
6
- unless [:id, :type, :created_by_id, :updated_by_id, :created_at, :updated_at].include?(name.to_sym)
7
- model_class.attr_accessible name
8
- end
9
- end
4
+ def permitted_params
5
+ attribute_names.map{|string| string.to_sym} - non_permitted_params
6
+ end
7
+
8
+ def non_permitted_params
9
+ [:id, :type, :created_by_id, :updated_by_id, :created_at, :updated_at]
10
10
  end
11
11
 
12
12
  end
@@ -28,10 +28,6 @@ module Cms
28
28
  result
29
29
  end
30
30
 
31
- def should_write_to_page_cache?
32
- using_cms_subdomains?
33
- end
34
-
35
31
  private
36
32
 
37
33
  def wants_to_use_subdomains?
@@ -1,34 +1,32 @@
1
- require 'rails'
1
+ # Load just enough dependencies for this file to be loadable.
2
2
  require 'cms/module'
3
- require 'cms/configuration'
4
- require 'cms/version'
5
- require 'browsercms'
6
-
7
- # Gem name is different than file name
8
- # Must be required FIRST, so that our assets paths appear before its do.
9
- # This allows app/assets/ckeditor/config.js to set CMS specific defaults.
10
- require 'ckeditor-rails'
11
-
12
- # Explicitly require this, so that CMS projects do not need to add it to their Gemfile
13
- # especially while upgrading
14
- require 'jquery-rails'
15
3
 
16
4
  module Cms
17
-
18
5
  class Engine < Rails::Engine
19
6
  include Cms::Module
20
7
  isolate_namespace Cms
21
8
 
22
9
  config.cms = ActiveSupport::OrderedOptions.new
23
10
  config.cms.attachments = ActiveSupport::OrderedOptions.new
24
-
11
+
25
12
  # Allows additional menu items to be added to the 'Tools' menu on the Admin tab.
26
13
  config.cms.tools_menu = ActiveSupport::OrderedOptions.new
27
14
 
28
15
  # Define configuration for the CKEditor
29
16
  config.cms.ckeditor = ActiveSupport::OrderedOptions.new
30
-
31
- # Make sure we use our rails model template (rather then its default) when `rails g cms:content_block` is run.
17
+
18
+ # Configuration for content types.
19
+ config.cms.content_types = ActiveSupport::OrderedOptions.new
20
+
21
+ # Configuration for working on BrowserCMS core.
22
+ # We want these configuration for generators.
23
+ config.generators do |g|
24
+ g.test_framework :mini_test, :spec => true, :fixture => false
25
+ g.stylesheets false
26
+ end
27
+
28
+ # Configuration for projects using BrowserCMS>
29
+ # Need to use our rails model template (rather then its default) when `rails g cms:content_block` is run.
32
30
  config.app_generators do |g|
33
31
  path = File::expand_path('../../templates', __FILE__)
34
32
  g.templates.unshift path
@@ -44,6 +42,7 @@ module Cms
44
42
  # Set reasonable defaults
45
43
  # These default values can be changed by developers in their projects in their application.rb or environment's files.
46
44
  config.before_configuration do |app|
45
+ WillPaginate.per_page = 15
47
46
 
48
47
  # Default cache directories.
49
48
  app.config.cms.mobile_cache_directory = File.join(Rails.root, 'public', 'cache', 'mobile')
@@ -62,13 +61,44 @@ module Cms
62
61
  # I.e.
63
62
  # config.cms.site_domain = "www.browsercms.org"
64
63
  app.config.cms.site_domain = "localhost:3000"
65
-
64
+
65
+ # Determines what email sender will be applied to messages generated by the CMS.
66
+ # By default, this is based on the site_domain, i.e. mailbot@example.com
67
+ app.config.cms.mailbot = :default
68
+
69
+ # Allows Addressable content types and Controllers to set which template will be used for page layouts.
70
+ # This takes precedence over the :template attribute set on models/controllers.
71
+ # Keys are looked up based on Class.name.underscore
72
+ # @example:
73
+ # config.cms.templates['cms/form'] = 'my-form-layout' # app/views/layouts/templates/my-form-layout
74
+ # config.cms.templates['cms/sites/sessions_controller'] = 'subpage' # For /login
75
+ #
76
+ app.config.cms.templates = {}
77
+
66
78
  # Determines which ckeditor file will be used to configure all instances.
67
79
  # There should be at most ONE of these, so use manifest files which require the below one to augement it.
68
80
  app.config.cms.ckeditor.configuration_file = 'bcms/ckeditor_standard_config.js'
69
-
81
+
70
82
  # Define menu items to be added dynamically to the CMS Admin tab.
71
83
  app.config.cms.tools_menu = []
84
+
85
+ # Disable portlets so they don't appear in menus and can't be created. Existing portlets will not be deleted.
86
+ app.config.cms.content_types.blacklist = [:login_portlet, :forgot_password_portlet, :dynamic_portlet]
87
+
88
+ # Initialization
89
+ require 'cms/configure_simple_form'
90
+ require 'cms/configure_simple_form_bootstrap'
91
+ require 'cms/configuration/devise'
92
+
93
+ # Sets the default .css file that will be added to forms created via the Forms module.
94
+ # Projects can override this as needed.
95
+ app.config.cms.form_builder_css = 'cms/default-forms'
96
+ end
97
+
98
+ # Needed to ensure routes added to the main app by the Engine are available. (Since engine draws its routes after the main app)
99
+ # Borrrow from Spree as documenented here: https://github.com/rails/rails/issues/11895
100
+ config.after_initialize do
101
+ Rails.application.routes_reloader.reload!
72
102
  end
73
103
 
74
104
  initializer 'browsercms.add_core_routes', :after => 'action_dispatch.prepare_dispatcher' do |app|
@@ -76,13 +106,15 @@ module Cms
76
106
  end
77
107
 
78
108
  initializer 'browsercms.add_load_paths', :after => 'action_controller.deprecated_routes' do |app|
109
+
79
110
  ActiveSupport::Dependencies.autoload_paths += %W( #{self.root}/vendor #{self.root}/app/mailers #{self.root}/app/helpers)
80
111
  ActiveSupport::Dependencies.autoload_paths += %W( #{self.root}/app/controllers #{self.root}/app/models #{self.root}/app/portlets)
81
112
  ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/portlets )
113
+ ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/presenters )
82
114
  ActiveSupport::Dependencies.autoload_paths += %W( #{Rails.root}/app/portlets/helpers )
83
115
  ActionController::Base.append_view_path DynamicView.base_path
84
116
  ActionController::Base.append_view_path %W( #{self.root}/app/views)
85
- ActionView::Base.default_form_builder = Cms::FormBuilder
117
+ ActionView::Base.default_form_builder = Cms::FormBuilder::ContentBlockFormBuilder
86
118
  require 'jdbc_adapter' if defined?(JRUBY_VERSION)
87
119
  end
88
120