browsercms 3.5.7 → 4.0.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
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,90 @@
1
+ class Browsercms400 < ActiveRecord::Migration
2
+
3
+ def up
4
+ apply_cms_namespace_to_all_core_tables
5
+
6
+ add_column :cms_section_nodes, :slug, :string
7
+ add_content_column :cms_dynamic_views, :path, :string
8
+ add_content_column :cms_dynamic_views, :locale, :string, default: 'en'
9
+ add_content_column :cms_dynamic_views, :partial, :boolean, default: false
10
+
11
+ Cms::PageTemplate.all.find_each do |pt|
12
+ pt.path = "layout/templates/#{pt.name}"
13
+ pt.locale = "en"
14
+ pt.save!
15
+ end
16
+
17
+ Cms::PagePartial.all.find_each do |pp|
18
+ pp.path = "partials/#{pp.name}"
19
+ pp.locale = "en"
20
+ pp.partial = true
21
+ pp.save!
22
+ end
23
+
24
+ drop_table :cms_content_type_groups
25
+ drop_table :cms_content_types
26
+
27
+ create_content_table :cms_forms do |t|
28
+ t.string :name
29
+ t.text :description
30
+ t.string :confirmation_behavior
31
+ t.text :confirmation_text
32
+ t.string :confirmation_redirect
33
+ t.string :notification_email
34
+ end
35
+
36
+ create_table :cms_form_fields do |t|
37
+ t.integer :form_id
38
+ t.string :label
39
+ t.string :name
40
+ t.string :field_type
41
+ t.boolean :required
42
+ t.integer :position
43
+ t.text :instructions
44
+ t.text :default_value
45
+ t.text :choices
46
+ t.timestamps
47
+ end
48
+
49
+ # Field names should be unique per form
50
+ add_index :cms_form_fields, [:form_id, :name], :unique => true
51
+
52
+ create_table :cms_form_entries do |t|
53
+ t.text :data_columns
54
+ t.integer :form_id
55
+ t.timestamps
56
+ end
57
+
58
+ end
59
+
60
+ private
61
+
62
+ # In 4.x, all core tables MUST start with cms_. See https://github.com/browsermedia/browsercms/issues/639
63
+ def apply_cms_namespace_to_all_core_tables
64
+ unversioned_tables.each do |table_name|
65
+ if (needs_namespacing(table_name))
66
+ rename_table table_name, cms_(table_name)
67
+ end
68
+ end
69
+
70
+ versioned_tables.each do |table_name|
71
+ if (needs_namespacing(table_name))
72
+ rename_table table_name, cms_(table_name)
73
+ rename_table versioned_(table_name), cms_(versioned_(table_name))
74
+ end
75
+ end
76
+ end
77
+
78
+ # All tables that aren't versioned. (I.e. two tables)
79
+ def unversioned_tables
80
+ [:categories, :category_types, :connectors, :content_types, :content_type_groups, :email_messages, :group_permissions, :group_sections, :group_type_permissions, :group_types, :groups, :page_route_options, :page_routes, :permissions, :portlet_attributes, :portlets, :redirects, :section_nodes, :sections, :sites, :taggings, :tags, :tasks, :user_group_memberships, :users]
81
+ end
82
+
83
+ def versioned_tables
84
+ [:attachments, :dynamic_views, :file_blocks, :html_blocks, :links, :pages]
85
+ end
86
+
87
+ def needs_namespacing(table_name)
88
+ table_exists?(table_name) && !table_exists?(cms_(table_name))
89
+ end
90
+ end
@@ -0,0 +1,47 @@
1
+ class DeviseCreateUsers < ActiveRecord::Migration
2
+ def change
3
+ change_table(:cms_users) do |t|
4
+ ## Database authenticatable
5
+ #t.string :email, :null => false, :default => ""
6
+ t.string :encrypted_password, :null => false, :default => ""
7
+
8
+ ## Recoverable
9
+ t.rename :reset_token, :reset_password_token
10
+ t.datetime :reset_password_sent_at
11
+
12
+ ## Rememberable
13
+ t.rename :remember_token_expires_at, :remember_created_at
14
+ t.remove :remember_token # Not needed by devise.
15
+
16
+ # Remove old SHA based encrypted passwords.
17
+ # Comment out the following line if you have a strong need to preserve old hashed passwords
18
+ t.remove :crypted_password
19
+
20
+ ## Trackable
21
+ #t.integer :sign_in_count, :default => 0, :null => false
22
+ #t.datetime :current_sign_in_at
23
+ #t.datetime :last_sign_in_at
24
+ #t.string :current_sign_in_ip
25
+ #t.string :last_sign_in_ip
26
+
27
+ ## Confirmable
28
+ # t.string :confirmation_token
29
+ # t.datetime :confirmed_at
30
+ # t.datetime :confirmation_sent_at
31
+ # t.string :unconfirmed_email # Only if using reconfirmable
32
+
33
+ ## Lockable
34
+ # t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
35
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
36
+ # t.datetime :locked_at
37
+
38
+
39
+ #t.timestamps
40
+ end
41
+
42
+ add_index :cms_users, :email, :unique => true
43
+ add_index :cms_users, :reset_password_token, :unique => true
44
+ # add_index :users, :confirmation_token, :unique => true
45
+ # add_index :users, :unlock_token, :unique => true
46
+ end
47
+ end
@@ -0,0 +1,5 @@
1
+ class KillResetPassword < ActiveRecord::Migration
2
+ def up
3
+ Cms::Portlet.connection.execute("UPDATE cms_portlets SET type = 'DeprecatedPlaceholder' WHERE type = 'ResetPasswordPortlet'")
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ class CreateCmsExternalUsers < ActiveRecord::Migration
2
+ def change
3
+ change_table :cms_users do |t|
4
+ t.column :type, :string, default: 'Cms::User'
5
+ t.column :source, :string
6
+ t.text :external_data
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,45 @@
1
+ # Design Integration
2
+
3
+ This covers some of the remaining design issues that we need to resolve before the beta/final 4.0 release.
4
+
5
+ ## [Ask Kyle]
6
+
7
+ * Fonts for Dashboard table headers/menus are just less bold than in design.
8
+ * Icons for:
9
+ - Edit button (Pencil) for content
10
+ - Links
11
+ - Portlets - Should use 'list' icon
12
+ - Other Content Types (Product, Catalog, Generic Document) - Ideas: Book? Newspaper? Full page?
13
+ - Visual Indicator for a section/page can't be edited. (Currently just removing the buttons)
14
+ - Up and down sorting icons (caret is always down)
15
+ * Need style for Checkbox groups that are labeled. See Add User.
16
+ * Tables that are too wide (/cms/routes)
17
+ * JQuery Date picker - Has no styling.
18
+ * Styling for CKEditor 'selector'.
19
+ * Need help styling 'path' element.
20
+ * Errors - Review the placement of errors on the form.
21
+ * Products
22
+ - Photo 2 is wrapping unnecessarily (Does it without photo 1)
23
+ - Slug path needs styling.
24
+
25
+ ## IA Questions
26
+
27
+ * What Label for first element under Assets? (Assets? Asset library). Or just make Text first.
28
+ * Selecting a section always toggles. Might want to select an open section to add content to it, but not close it.
29
+ * Where should "Settings" link take user to.
30
+
31
+ ## Implied Features by Design
32
+
33
+ Features in the original design/IA that didn't get implemented.
34
+
35
+ * Make 'Assign' on Edit page work.
36
+ * Sitemap filters
37
+ * Sitemap Hide/Archive/Publish
38
+ * Dashboard Activity / My and All
39
+ * [Assets] Filter by publish/notpublished
40
+ * [Assets] Infinite scrolling
41
+
42
+
43
+
44
+
45
+
@@ -0,0 +1,7 @@
1
+ # [#644] External User
2
+
3
+ Support a built in way to authenticate external users and store their information in the database. These users could be from any system (CRM, AMS, Facebook) and they would be authenticated using credentials from those services. Each external user would be given a record in the user table and would be marked as an external user.
4
+
5
+ * Permission: Groups would be dynamically assigned on login and recorded as an association with that user until they reauthentice.
6
+ * External Data: Third Party APIs often provide extra information. Provide an easy way to store this information on the user record without needing new columns.
7
+ * Subclasses: Projects/Engines should be able to subclass ExternalUser to provide additional behavior.
@@ -0,0 +1,40 @@
1
+ # Form Builder
2
+
3
+ Allow content editors to create new form via the interface.
4
+
5
+ ## Remain issues/features
6
+
7
+ * [MINOR] Unique icon for forms (i.e. custom) for sitemap
8
+ * [Improvement] Captcha?
9
+ * [FEATURE] Allow sorting/reporting.
10
+ * [BUG] Preview for dropdowns is inaccurate (doesn't change after updates). To fix, would need to refactor to have HTML returned rather than JSON.
11
+ * [BUG] 500 errors when posting forms within CMS shows errors within double nested toolbar.
12
+ * [Improvement] Default Forms just uses bootstrap, which is probably not a valid option. Need a way to pare it down to avoid changing styles for existing designes.
13
+ * [BUG] After adding a field, it clears but does not correctly show the 'blank' value.
14
+ * [BUG] Addressable content types (product, forms, etc) do not/cannot appear in menus without manually creating a link.
15
+
16
+ ## Documentation
17
+
18
+ ## Forms
19
+
20
+ * Can notify staff when a form is submitted.
21
+ * Email mailbot can be configured in application.rb
22
+
23
+ ### Configuration
24
+
25
+ In config/application.rb, to change which CSS stylesheet is applied to Form pages, update the following:
26
+
27
+ ```
28
+ # Default is 'cms/default-forms'
29
+ config.cms.form_builder_css = 'my-forms' # Returns /assets/my-forms.css
30
+ ```
31
+
32
+ # New Namespacing
33
+
34
+ When upgrading, Content Models should be moved under application namespace. Basis steps:
35
+
36
+ Custom models should have the following added to them:
37
+ Create a directory in the project named app/models/cms
38
+ Move any Content Blocks into that directory.
39
+ Rename from Widget to *Cms::*Widget
40
+ Add self.table_name = :widgets (or migrate the table from widgets to cms_widgets)
@@ -0,0 +1,60 @@
1
+ [#623] Refactor CMS forms to use SimpleForm
2
+
3
+ Converted all the internal forms to use SimpleForm rather than our own custom form builder. This provides better consistency with bootstrap forms, as well as well tested API for defining new form inputs. This will primarily affect developers when they create content blocks. New content will be generated using simple_form syntax like so:
4
+
5
+ <%= f.input :photo, as: :file_picker %>
6
+
7
+ rather than the older syntax that looks like this:
8
+
9
+ <%= f.cms_file_field :photo %>
10
+
11
+ The old form_builder methods like cms_text_field and cms_file_field have been deprecated and will generate warnings when used. These methods are scheduled for removal in BrowserCMS 4.1. It's recommended that custom content blocks be upgraded to use the new syntax when feasible. The deprecation warnings should provide some guideance, but also look at simple_forms documentation http://simple-form.plataformatec.com.br for help.
12
+
13
+ ## Available Input Types
14
+
15
+ All of the existing simple_form input mappings are available. See http://simple-form.plataformatec.com.br/#mappings-inputs-available for the reference. BrowserCMS adds some additional input types for specific CMS features.
16
+
17
+ |# Mapping | Input | Purpose/column type #|
18
+ | file_picker | File Upload | A single attachment with section/path selectors |
19
+ | cms_text_area | text area | Like :text but with a :default |
20
+ | cms_text_field | text field | Like :string with optional path generator (for addressable content types)|
21
+ | date_picker | jquery date select | date |
22
+ | path | text field | A slug/path for addressable content (works with cms_text_field to automatically generate names) |
23
+ | template_editor | text area | For editing templates via ERB or other permitted template languages. |
24
+ | text_editor | WYSIWYG editor | For editing HTML content (has toggle to use a text area |
25
+ | attachments | Multiple File Uploads | Unlimited # of attachments. |
26
+ | tag_list| text field | has_many with :tags |
27
+
28
+ ### Usage
29
+
30
+ Here are some examples showing how to use the CMS specific inputs.
31
+
32
+ ```
33
+ <%= f.input :name, as: :cms_text_field, default: "Some Value" %>
34
+ ```
35
+
36
+ Generates the 'name' field, and a :path input if the content block is addressable. Can supply a default value that will be used when creating a new record.
37
+
38
+ ```
39
+ <%= f.input :expires_on, as: :date_picker %>
40
+ ```
41
+
42
+ Renders a text_field that can be left blank or have a date entered into it as text. Clicking on it will bring up a JQuery Date Picker to select the date.
43
+
44
+ ```
45
+ <%= f.input :template, as: :template_editor %>
46
+ ```
47
+
48
+ Renders a template editor (if the content block has enabled template editing). The default template body for the model will be used when creating a new record.
49
+
50
+
51
+ ### Usage Exceptions
52
+
53
+ Several of the input types above are not used directly, but rather via methods like this that hide some of their complexity:
54
+
55
+ ```
56
+ <%= f.cms_attachment_manager %>
57
+ <%= f.cms_tag_list %>
58
+ ```
59
+
60
+
@@ -1,17 +1,231 @@
1
- v3.5.5
1
+ # v4.0
2
+
3
+
4
+ ## Major Features
5
+
6
+ This release includes the following major features:
7
+
8
+ * User Interface Redesign - User interface has been complete redesigned from the ground up. The new UI is based on Twitter Bootstrap, has usability enhancements as well as an improved design.
9
+ * True In Context Editing [#566] - Editors can directly edit Html content and page titles using CKEditor's inline capability.
10
+ * Rails 4 Upgrade [#617] - BrowserCMS is now designed to work with Rail 4.0.
11
+ * Ruby 2.0 [#651] - BrowserCMS is now designed to work with Ruby 2, matching the recommended specs for Rails 4. Ruby 1.9.3 and 1.9.2 may still work.
12
+ * Form Builder [#124] - Allow editors to create form pages that can be used to collect information from visitors
13
+ * Addressable Content [#588] - Custom content blocks (i.e. Product, Event, News Articles) can be created directly as pages in the sitemap.
14
+ * Improved Template Storage [#608] - Database managed templates are no longer written out to the file system. Sites should have less permission related issued during deployments. Using Heroku to host sites should be easier as well.
15
+ * Devise Integration [#641] - Devise is now used as standard authentication tool. Upgrading projects will have passwords reset (See upgrade notes for more details).
16
+ * External Users [#644] - Better support for authenticating/authorizing users from external data sources rather than using additional solutions like CAS.
17
+
18
+ ## Other Features/Improvements
19
+
20
+ In addition to the other major features above, here are some improvements/features of note.
21
+
22
+ * Portlet Descriptions [#619] - Portlets can now have a description that will be used to provide additional context when users are building/placing them.
23
+ * No need to register Content Types [#621] - Content Blocks will automatically appear in the menus without needing to add them to the database.
24
+ * Using SimpleForm [#623] Reworked all forms to use simple_form (https://github.com/plataformatec/simple_form).
25
+ * Migration Cleanup [#594] Migrations for previous versions have been compressed. This has implications for upgrading, but should make new project cleaner.
26
+ * Consistent table prefixes [#639] All core cms tables will now start with cms_ rather than being configurable.
27
+ * Content Blacklisting - Portlets can be blacklisted via configuration so that they can't be created. Several previously stock types are blacklisted.
28
+ * Refined Content API [#256] [#582][#584] - Make content blocks closer in behavior to ActiveRecord.
29
+
30
+ ## UI Redesign
31
+
32
+ The entire UI has been reworked to be more streamlined and lightweight. It is now built using Twitter Bootstrap, and makes better use of global menus and toolbars. Here are the notable changes.
33
+
34
+ 1. Global Menu - Many commons functions can now be invoked directly from the main menu, including adding new content or users.
35
+ 1. Smart 'New' button - Users can add content from any page in the CMS. The "New" button is a split button that can either add a specific type of content, or will 'guess' based on where a user is in the site.
36
+ 1. Sitemap - Each row now has hover buttons to edit/remove content rather than needing to select a row then click a button menu.
37
+ 1. Assets/Asset Library - The content library has been renamed to be called assets.
38
+
39
+ ## In Context Editing
40
+
41
+ Users can now edit most HTML content directly in the page. Icons indicate the area of the pages that are editable. Here are some of the highlights:
42
+
43
+ 1. No need to toggle the editor on/off. Just click the area of the page you want to edit.
44
+ 1. Full Edit - Click to edit in full text editor. Any changes made will be saved before going to the full editor. There is also a edit button on each block in the upper right hand corner.
45
+ 1. Remove blocks from page - Editors can select a block then remove it from the page via a button on the editor. Users will be prompted before its removed.
46
+ 1. Reorder content - Can move content blocks up or down within a page. Page will refresh after moving.
47
+ 1. Editable Page titles - Page title can be edited directly from the header.
48
+ 1. Preview Page - Editors can now preview the page without a toolbar or editing controls.
49
+ 1. Non-incontext Content - Not all content makes sense to be inline editable (for example portlets). For these content types, the previous move/remove/edit links now float in the upper right hand corner of the content block.
50
+
51
+ ## Addressable Content Blocks
52
+
53
+ Content blocks can created with as their own pages. To make a block addressable, a developer must do the following:
54
+
55
+ 1. Add is_addressable to the model. This will automatically generate a :slug form field when creating/editing instances.
56
+ 2. Set the Page Template that should be used (defaults to 'default').
57
+
58
+ ```
59
+ class Product < ActiveRecord::Base
60
+ is_addressable path: "/products", template: "product"
61
+ end
62
+ ```
63
+
64
+ 3. Add the following field to the _form.html.erb.
65
+
66
+ ```
67
+ <%= f.input :slug, as: :path %>
68
+ ```
69
+
70
+ ## Form Builder
71
+
72
+ Allow editors to create form pages that can be used to collect information from visitors (i.e. Contact Us, Support requests, etc). Basically, any quick collect a few fields using a consistent form styling.
73
+
74
+ ### Features include:
75
+
76
+ 1. Forms can have multiple fields which can be text fields, textareas or multiple choice dropdowns. Field management is done via AJAX and fields can be added/reordered/removed without leaving the page.
77
+ 2. Fields can be required, have instructions and default values. Choices are added as lines of text for each dropdown field. Dropdowns use the first value as the default.
78
+ 3. Entries are stored in the database and can optionally notify someone via email when new submissions are created.
79
+ 4. Editors can manage entries via the admin (CRUD)
80
+ 5. Visitors can be redirected to another URL after submitting their entry or display a customizable 'success' message.
81
+ 6. Forms generate the HTML display using bootstrap's CSS by default. Projects can customize this in the application.rb with config.cms.form_builder_css
82
+
83
+ ## Refined Content API
84
+
85
+ 1. .save now works identically between ActiveRecord and Content Blocks
86
+
87
+ Previously, calling .save on a block would save a draft copy, rather then updating the record in place. This has been changed. To save a draft, you can do either:
88
+
89
+ @block.publish_on_save
90
+ @block.save
91
+ # or
92
+ @block.save_draft
93
+
94
+
95
+ ## Registering Content Types
96
+
97
+ Content blocks no longer need to have a separate registration in the database to appear in menus.
98
+
99
+ Defining a new content model should be sufficient to have it appear in the content library. To specify which module it should appear in, you can configure it like so:
100
+
101
+ class Widget < ActiveRecord::Base
102
+ acts_as_content_block
103
+ content_module :acme
104
+ end
105
+
106
+ The content_types and content_type_groups tables have been removed as they are no longer necessary. If you don't want a block to appear in the menus, you can specify this via:
107
+
108
+ class Widget < ActiveRecord::Base
109
+ acts_as_content_block content_module: false
110
+ end
111
+
112
+ ## Refactor to use SimpleForm
113
+
114
+ Converted all the internal forms to use SimpleForm rather than our own custom form builder. This provides better consistency with bootstrap forms, as well as well tested API for defining new form inputs. This will primarily affect developers when they create content blocks. New content will be generated using simple_form syntax like so:
115
+
116
+ ```
117
+ <%= f.input :photo, as: :file_picker %>
118
+ ```
119
+
120
+ rather than the older syntax that looks like this:
121
+
122
+ ```
123
+ <%= f.cms_file_field :photo %>
124
+ ```
125
+
126
+ The old form_builder methods like cms_text_field and cms_file_field have been deprecated and will generate warnings when used. These methods are scheduled for removal in BrowserCMS 4.1. It's recommended that custom content blocks be upgraded to use the new syntax when feasible. The deprecation warnings should provide some guideance, but also look at simple_forms documentation http://simple-form.plataformatec.com.br for help.
127
+
128
+ ## Portlet Blacklists
129
+
130
+ Portlets can be blacklisted so that new instances cannot be created. This can be used to turn off some portlets for security, convience or otherwise. By default, the following portlet types are blacklisted (as 'deprecated').
131
+
132
+ * LoginPortlet (:login_portlet)
133
+ * DynamicPortlet (:dynamic_portlet)
134
+ * ForgotPasswordPortlet (:forgot_password_portlet)
135
+
136
+ ### Modifying the blacklist
137
+
138
+ ```
139
+ # Prevention creation
140
+ config.cms.content_types.blacklist += [:email_page_portlet]
141
+
142
+ # Allowing creation
143
+ config.cms.content_types.blacklist -= [:login_portlet]
144
+ ```
145
+
146
+ ## Devise Integration
147
+
148
+ Devise is now the standard authentication mechanism for BrowserCMS. This adds some new (and improved) authentication features including:
149
+
150
+ * Reset Password - Admin users have a link to reset passwords.
151
+ * Strong Password storage - Passwords are now encrypted using bcrypt which is a safer method (http://codahale.com/how-to-safely-store-a-password/)
152
+ * Remember Me - Allows users to stay logged in for up to two weeks.
153
+ * Devise/Warden APIs - Developers can use Devise and/or Warden's APIs to customize how authenication works. The previous RESTful Authentication based solution was not really pluggable.
154
+
155
+ ### [Warning] Upgrading/Password Reset
156
+
157
+ Upgrading to 4.0 means all user passwords will need to be reset. This doesn't apply where external user databases are used (i.e. CAS) for authentication. Just user accounts stored in the CMS itself.
158
+
159
+ This reset is a side effect of using a more secure password encryption algorithm (bcrypt). When users try to log in, they will have to request a password reset. This feature is provided on /cms/login as a standard feature. Users will need to provide an email, and a link for reseting their password will be sent to them. Alternatively, developers may choose to change passwords via the admin interface (or rails console) before turning over sites to the site maintainers.
160
+
161
+ ### Avoiding a reset
162
+
163
+ For most sites, the number of admin users is likely limited and part of a cohesive team. So forcing a reset shouldn't be an issue. In the case of sites that have large user databases, a migration strategy to mass update or possibly creating a new Warden/Devise strategy based on the 3.5.x encryption strategy. These two are coding exercises left to the developers working on the project.
164
+
165
+ For sites that need to keep a record of the old encrypted passwords, remove/comment out the following line from the browsercms400 migration which will preserve the old encrypted passwords.
166
+
167
+ ```
168
+ t.remove :crypted_password
169
+ ```
170
+
171
+ Note that preserving the old password data is just the first step. The new encryption strategy will still be used unless modifications are made to the project.
172
+
173
+ ### Forgot Password
174
+
175
+ Users can reset their password via the admin UI. On /cms/login, a link to 'Forgot Password' is available. Users can enter an email and have the reset link mailed to them.
176
+
177
+ Configuration: For Forgot Password to work, need to ensure the following is present for mailer in BrowserCMS setups.
178
+ * config.action_mailer.default_url_options = { :host => "yourhost" }
179
+
180
+ The core 'ForgotPassword' portlet has been reworked and is probably 100% unnecessary on most sites. It is now blacklisted by default. The portlet now just renders the stock /forgot-password view and isn't editable. Use /forgot-password instead.
181
+
182
+ ## External User API [#644]
183
+
184
+ There is now a core API for handling users that are authenticated/authorized against external data sources. There is a new class (Cms::ExternalUser) which represents a user which has been authenticated using some source other than the Core CMS. This user can have extra information retained as attribute and can be authorized to be part of a specific group(s).
185
+
186
+ A sample implementation of an authentication strategy can be found in lib/cms/authentication/test_password_strategy. Strategies are implemented as Devise Strategies and should either login or pass to the next strategy.
187
+
188
+ This implementation is intended to replace CAS based strategies used in BrowserCMS 3.x. It provides the ability to style the login page directly, and avoid having an external CAS server software.
189
+
190
+ ## Upgrading
191
+
192
+ 1. Editable Page Titles: In order to take advantage of the editable pages titles, templates need to use the new Template API Method: page_header(). Used rather that <%= page_title %> within h1/h2 etc, this will output an editable page title element for logging in users.
193
+ 2. match -> get: Update your config/routes.rb to change any use of 'match' to get or post for your controller.
194
+ 3. Install the deprecated finders and other gems to help with upgrade. Once you get rid of the deprecation warnings you can remove the gem.
195
+ 4. Content Types - If you have defined content blocks in custom group names, you should edit them to specify the module name. See 'Registering Content Types' above for details. You can delete any seeds that create content types. There will be a deprecation warning if you call save! or create! on ContentTypes.
196
+ 5. Forms - Rework existing form fields in content blocks to use SimpleForm.
197
+ 6. Table Prefixing - In config/initializers/browsercms.rb remove the `Cms.table_prefix = 'cms_' line, which generated deprecation warnings.
198
+ 7. Password Reset - Users will need to reset their password after the upgrade. See Devise Integration/Avoiding a reset if this is concern.
199
+ 8. Forgot Password - Consider removing any existing ForgotPassword portlets and just use /forgot-password controller. Creation is disabled by default.
200
+ 9. Reset Password Portlet - These have been removed as they were no longer necessary. Any remaining instances have been converted to 'DeprecatedPlaceholders'. Find and remove these portlets (and the page they were on) from your site.
201
+ 10. Login Portlet - Consider removing these and using the built in /login route. Creation is disabled by default.
202
+
203
+ ### Migration Cleanup
204
+
205
+ Projects using versions older than 3.5.4 must first upgrade to the latest 3.5.x version. This is because we have compressed the migrations from 3.0.0 up to 4.0.0 into a single migration (browsercms300). Migrations, especially those that alter data get hard to maintain over time. And new projects don't care when they start with fresh data.
206
+
207
+ After migrating your production environment to 3.5.7 do the following:
208
+
209
+ 1. Record the timestamp for the existing 3_0_0 migration (i.e. 20080815014337).
210
+ 2. Delete all the BrowserCMS migrations (3_0_0, 314, etc) from the project.
211
+ 3. Add the migrations for 4.0.0.
212
+ 4. Change the name of the new browsercms300 migration so it matches the old timestamp of browsercms3_0_0. This will prevent the new migration from running.
213
+
214
+
215
+ ## Deprecations
216
+
217
+ * page_title("Some Name") is deprecated in favor of use_page_title("Some Name") for overriding a page title. This will be remove in 4.1. This probably will probably only effect changes make in modules or customizations to the core.
218
+
219
+ v3.5.6
2
220
  ======
3
221
 
4
- Community contributed bug fixes, including making it easier to start contributing to the project.
222
+ * [#591] Error pages do not render mobile templates
223
+
224
+ v3.5.5
225
+ ======
5
226
 
6
- * [#561] Fix invalid code in generated production.rb file (Thanks RoopeHakulinen)
7
- * [#557] Fix extra column on blocks index page (Thanks metalon)
8
- * [#543] Allow cms_file_field to use default label (Thanks josiahivey)
9
- * [#563] Continuous Integration - Get Travis CI up and working for the project.
10
- * [#539] Fix missing assets on CMS Login page (Thanks korin)
11
- * [#537] Better support core contributions by removing database.yml from checkin. Run `rake project:setup[mysql]` to create a database.yml for your local database. (Thanks josiahivey)
12
- * [#564] Update to Rails 3.2.12 - Ensure tests to pass (there appeared to be some changes in inflection and html_safe between 3.2.5 and 3.2.8)
227
+ * Update to Rails 3.2.8 - Ensure tests to pass (there appeared to be some changes in inflection and html_safe between 3.2.5 and 3.2.8)
13
228
 
14
- See https://github.com/browsermedia/browsercms/issues?milestone=18&page=1&state=closed for more details.
15
229
 
16
230
  v3.5.4
17
231
  ======