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
@@ -2,36 +2,34 @@ module Cms
2
2
 
3
3
  class EngineAwarePathBuilder
4
4
 
5
- def initialize(model_class_or_content_type_or_model)
6
- # ContentType
7
- if model_class_or_content_type_or_model.respond_to? :model_class
8
- @path_subject = model_class_or_content_type_or_model.model_class
9
- else # Class or Model
10
- @path_subject = model_class_or_content_type_or_model
11
- end
12
- end
13
5
 
14
- # The object that will be added to the constructed path.
15
- def path_subject
16
- @path_subject
6
+ attr_reader :path_subject
7
+
8
+ def initialize(model_class_or_content_type_or_model)
9
+ normalize_subject_class(model_class_or_content_type_or_model)
17
10
  end
18
11
 
19
12
  def subject_class
20
- if @path_subject.instance_of?(Class)
21
- @path_subject
13
+ if path_subject.instance_of?(Class)
14
+ path_subject
22
15
  else
23
- @path_subject.class
16
+ path_subject.class
24
17
  end
25
18
  end
26
19
 
27
- def build(view)
20
+ def build_preview(view)
28
21
  path = []
29
22
  path << engine_name
30
- path << "cms" if main_app_model?
31
23
  path << path_subject
24
+ path
25
+ end
32
26
 
33
- path[0] = view.send(path[0]) # Replace the engine name with an actual lookup of the proper Engine routeset
27
+ def build(view)
28
+ path = []
29
+ path << engine(view)
30
+ path << path_subject
34
31
  path
32
+
35
33
  end
36
34
 
37
35
  def main_app_model?
@@ -40,7 +38,8 @@ module Cms
40
38
 
41
39
  # Determine which 'Engine' this model is from based on the class
42
40
  def engine_name
43
- name = EngineHelper.module_name(subject_class)
41
+ model_class = subject_class.model_name
42
+ name = EngineAware.module_name(model_class)
44
43
  return "main_app" unless name
45
44
 
46
45
  begin
@@ -51,52 +50,43 @@ module Cms
51
50
  end
52
51
  engine.engine_name
53
52
  end
54
- end
55
53
 
56
- module EngineHelper
57
54
 
58
- def main_app_model?
59
- engine_name == "main_app"
55
+ def engine_class
56
+ if main_app_model?
57
+ Rails.application
58
+ else
59
+ guess_engine_class(subject_class)
60
+ end
60
61
  end
61
62
 
62
- def engine_exists?
63
- !main_app_model?
64
- end
63
+ private
65
64
 
66
- def engine_name
67
- name = EngineHelper.module_name(target_class)
68
- return "main_app" unless name
65
+ # Will raise NameError if klass::Engine doesn't exist.
66
+ def guess_engine_class(klass)
67
+ name = EngineAware.module_name(klass)
68
+ "#{name}::Engine".constantize
69
+ end
69
70
 
70
- begin
71
- engine = "#{name}::Engine".constantize
72
- rescue NameError
73
- # This means there is no Engine for this model, so its from the main Rails App.
74
- return "main_app"
71
+ # Allows ContentType, Class, or model to be passed.
72
+ def normalize_subject_class(model_class_or_content_type_or_model)
73
+ if model_class_or_content_type_or_model.respond_to? :model_class # i.e. ContentType
74
+ @path_subject = model_class_or_content_type_or_model.model_class
75
+ else # Class or Model
76
+ @path_subject = model_class_or_content_type_or_model
75
77
  end
76
- engine.engine_name
77
78
  end
78
79
 
79
- def path_elements
80
- path = []
81
- path << "cms" if main_app_model?
82
- path << path_subject
80
+ # Loads the actual engine (which contains the RouteSet.)
81
+ # See http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html
82
+ def engine(view)
83
+ view.send(engine_name)
83
84
  end
84
85
 
85
- # Subclasses can override this as necessary
86
- def target_class
87
- return self.class unless self.instance_of?(Class)
88
- self
89
- end
90
86
 
91
- # Subclasses can override this as necessary
92
- def path_subject
93
- self
94
- end
87
+ end
95
88
 
96
- # Add this module if its not already.
97
- def self.decorate(instance)
98
- instance.extend EngineHelper unless instance.respond_to?(:engine_name)
99
- end
89
+ module EngineAware
100
90
 
101
91
  # Finds the top level module for a given class.
102
92
  # Cms::Thing -> Cms
@@ -3,7 +3,7 @@ module Cms
3
3
  def self.included(controller)
4
4
  controller.class_eval do
5
5
  rescue_from Exception, :with => :handle_server_error unless Rails.env == "test"
6
- rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied
6
+ rescue_from Cms::Errors::AccessDenied, :with => :handle_internal_access_denied
7
7
  end
8
8
  end
9
9
 
@@ -17,21 +17,27 @@ module Cms
17
17
  result
18
18
  end
19
19
 
20
- def handle_server_error(exception)
21
- logger.error "Handling Exception: #{exception}"
20
+ def handle_server_error(exception, status=:internal_server_error)
21
+ log_complete_stacktrace(exception)
22
22
  with_format('html') do
23
23
  render :layout => 'cms/application',
24
24
  :template => 'cms/shared/error',
25
- :status => :internal_server_error,
25
+ :status => status,
26
26
  :locals => {:exception => exception}
27
27
  end
28
28
  end
29
29
 
30
- def handle_access_denied(exception)
30
+ def handle_internal_access_denied(exception)
31
31
  render :layout => 'cms/application',
32
32
  :template => 'cms/shared/access_denied',
33
33
  :status => 403
34
34
  end
35
35
 
36
+ # Print the underlying stack trace to the logs for debugging.
37
+ # Should be human readable (i.e. line breaks)
38
+ # See http://stackoverflow.com/questions/228441/how-do-i-log-the-entire-trace-back-of-a-ruby-exception-using-the-default-rails-l for discussion of implementation
39
+ def log_complete_stacktrace(exception)
40
+ logger.error "#{exception.message}\n#{exception.backtrace.join("\n")}"
41
+ end
36
42
  end
37
43
  end
@@ -1,4 +1,5 @@
1
- Dir["#{File.join(File.dirname(__FILE__), "extensions")}/**/*.rb"].each do |f|
1
+ # All files in cms/extensions will automatically be loaded.
2
+ Dir["#{File.join(File.dirname(__FILE__), "extensions")}/**/*.rb"].each do |f|
2
3
  Rails.logger.info "~~ Loading extensions from #{f}" if Rails.logger
3
4
  require f
4
5
  end
@@ -0,0 +1,13 @@
1
+ module Cms
2
+ module ActiveModel
3
+ module Name
4
+
5
+ # Provide backwards capablity with Rails 3.2.x method.
6
+ # Hopefully only has_dynamic_attributes requires this.
7
+ def foreign_key
8
+ "#{self.param_key}_id"
9
+ end
10
+ end
11
+ end
12
+ end
13
+ ActiveModel::Name.send(:include, Cms::ActiveModel::Name)
@@ -2,130 +2,90 @@ module ActiveRecord
2
2
  module ConnectionAdapters # :nodoc:
3
3
  module SchemaStatements
4
4
 
5
- # Applies the current CMS prefix to the given table name.
6
- # Useful for where you need CMS related migrations using stock rails migrations (like add_index or create_table)
7
- # but still want to dynamically apply the CMS prefixes.
8
- def prefix(table_name)
9
- Cms::Namespacing.prefixed_table_name(table_name)
5
+ # Sticks :cms_ in front of a table name.
6
+ def cms_(table_name)
7
+ "cms_#{table_name}"
10
8
  end
11
9
 
12
- # Pass in ":versioned => false" in the options hash to create a non-versioned table.
10
+ # Create a table and its versioned counterpart. Example:
11
+ # create_content_table :cms_events
12
+ # => :cms_events
13
+ # => :cms_event_versions
13
14
  #
14
- # @param table_name
15
+ # @param table_name [Symbol] The namespaced versioned of the content table (i.e. :cms_events or :bcms_news_articles)
15
16
  # @param options
16
- # @option :prefix [Boolean]
17
+ # @option :versioned [Boolean] false creates a non-versioned table. (Default: true)
18
+ # @option :name [Boolean] Create a :name column in the generated table. (Default: true)
17
19
  def create_content_table(table_name, options={}, &block)
18
20
  defaults = {
19
21
  versioned: true,
20
- prefix: true
22
+ name: true
21
23
  }
22
24
  options = defaults.merge(options)
23
25
 
24
- if options[:prefix]
25
- table_name = Cms::Namespacing.prefixed_table_name(table_name)
26
+ versioned = options.delete(:versioned)
27
+ named = options.delete(:name)
28
+
29
+ create_table table_name, options, &block
30
+ change_table table_name do |td|
31
+ if versioned
32
+ td.integer :version
33
+ td.integer :lock_version, :default => 0
34
+ end
35
+ td.string :name if !column_exists?(table_name.to_sym, :name) && named
36
+ td.boolean :published, :default => false
37
+ td.boolean :deleted, :default => false
38
+ td.boolean :archived, :default => false
39
+ td.integer :created_by_id
40
+ td.integer :updated_by_id
41
+ td.timestamps unless column_exists?(table_name.to_sym, :created_at)
26
42
  end
27
43
 
28
- #Create the primary table
29
- t = TableDefinition.new(self)
30
- t.primary_key(options[:primary_key] || Base.get_primary_key(table_name)) unless options[:id] == false
31
-
32
- unless options[:versioned] == false
33
- t.integer :version
34
- t.integer :lock_version, :default => 0
35
- end
36
-
37
- yield t
38
-
39
- # Blocks currently must have a name column, otherwise the UI fails in several places.
40
- # Some migrations may have already specified a name attribute, so we don't want to overwrite it here.
41
- t.string :name unless t[:name]
42
-
43
- t.boolean :published, :default => false
44
- t.boolean :deleted, :default => false
45
- t.boolean :archived, :default => false
46
- t.integer :created_by_id
47
- t.integer :updated_by_id
48
- t.timestamps
49
-
50
- create_table_from_definition(table_name, options, t)
51
-
52
- unless options[:versioned] == false
53
- #Do the versions table
54
- vt = TableDefinition.new(self)
55
- vt.primary_key(options[:primary_key] || Base.get_primary_key(table_name)) unless options[:id] == false
56
-
57
- vt.integer :original_record_id
58
- vt.integer :version
59
- yield vt
60
-
61
- # Create implicit name column in version table as well.
62
- vt.string :name unless vt[:name]
63
-
64
- vt.boolean :published, :default => false
65
- vt.boolean :deleted, :default => false
66
- vt.boolean :archived, :default => false
67
- vt.string :version_comment
68
- vt.integer :created_by_id
69
- vt.integer :updated_by_id
70
- vt.timestamps
71
-
72
- create_table_from_definition("#{table_name.to_s.singularize}_versions".to_sym, options, vt)
44
+ if versioned
45
+ table_name_versioned = versioned_(table_name)
46
+ create_table table_name_versioned, options, &block
47
+ change_table table_name_versioned do |vt|
48
+ vt.integer :original_record_id
49
+ vt.integer :version
50
+ vt.string :name if !column_exists?(table_name_versioned, :name) && named
51
+ vt.boolean :published, :default => false
52
+ vt.boolean :deleted, :default => false
53
+ vt.boolean :archived, :default => false
54
+ vt.string :version_comment
55
+ vt.integer :created_by_id
56
+ vt.integer :updated_by_id
57
+ vt.timestamps unless column_exists?(table_name_versioned, :created_at)
58
+ end
73
59
  end
74
60
 
75
61
  end
76
62
 
77
- #
78
- # @deprecated - create_versioned_table should be considered deprecated and may be removed in a future version.
79
- # Use create_content_table instead in your migrations
80
- #
81
- alias :create_versioned_table :create_content_table
82
-
83
- def create_table_from_definition(table_name, options, table_definition)
84
- if options[:force] && table_exists?(table_name)
85
- drop_table(table_name, options)
86
- end
87
-
88
- create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
89
- create_sql << "#{quote_table_name(table_name)} ("
90
- create_sql << table_definition.to_sql
91
- create_sql << ") #{options[:options]}"
92
- execute create_sql
93
- end
94
-
95
- def drop_versioned_table(table_name)
96
- table_name = Cms::Namespacing.prefixed_table_name(table_name)
97
- drop_table "#{table_name.singularize}_versions".to_sym
63
+ def drop_content_table(table_name)
64
+ drop_table versioned_(table_name)
98
65
  drop_table table_name
99
66
  end
100
67
 
101
- alias :drop_content_table :drop_versioned_table
102
-
103
68
  # Rename a column for both its
104
69
  def rename_content_column(table_name, old_name, new_name)
105
70
  rename_column table_name, old_name, new_name
106
- rename_column version_table_name(table_name), old_name, new_name
71
+ rename_column versioned_(table_name), old_name, new_name
107
72
  end
108
73
 
109
74
  # Adds a column to both the primary and versioned table. Save needing two calls.
110
75
  # This is only needed if your content block is versioned, otherwise add_column will work just fine.
111
76
  def add_content_column(table_name, column_name, type, options={})
112
77
  add_column table_name, column_name, type, options
113
- add_column version_table_name(table_name), column_name, type, options
78
+ add_column versioned_(table_name), column_name, type, options
114
79
  end
115
80
 
116
81
  def remove_content_column(table_name, column_name)
117
82
  remove_column table_name, column_name
118
- remove_column version_table_name(table_name), column_name
119
- end
120
-
121
- # Will namespace the content table
122
- def content_table_exists?(table_name)
123
- table_exists?(Cms::Namespacing.prefixed_table_name(table_name))
83
+ remove_column versioned_(table_name), column_name
124
84
  end
125
85
 
126
- private
86
+ protected
127
87
 
128
- def version_table_name(table_name)
88
+ def versioned_(table_name)
129
89
  "#{table_name.to_s.singularize}_versions".to_sym
130
90
  end
131
91
 
@@ -5,18 +5,6 @@ module Cms
5
5
  def except(*args)
6
6
  reject {|k,v| args.include?(k) }
7
7
  end
8
-
9
- # This takes a list of keys and returns a new hash
10
- # containing the key/values that match the keys passed in.
11
- # This will also remove the keys from this hash
12
- #
13
- # Note: This behavior is slightly different from ActiveSupport Hash#extract! which can add nil keys if they don't exist.
14
- def extract_only!(*keys)
15
- keys.inject({}) do |hash, key|
16
- hash[key] = delete(key) if has_key?(key)
17
- hash
18
- end
19
- end
20
8
  end
21
9
  end
22
10
  end
@@ -0,0 +1,45 @@
1
+ require 'cms/form_builder/deprecated_inputs'
2
+
3
+ module Cms
4
+ module FormBuilder
5
+ # Adds additional methods to the forms for creating content blocks.
6
+ class ContentBlockFormBuilder < SimpleForm::FormBuilder
7
+ include DeprecatedInputs
8
+
9
+ # Allows editors to add multiple files uploader for attachments.
10
+ # Usage:
11
+ # <%= f.attachment_manager %>
12
+ #
13
+ # Generator: The following will generate an attachments field with an associated attachment manager input.
14
+ # rails generate cms:content_block Widget photos:attachments
15
+ def cms_attachment_manager
16
+ input :attachments, as: :attachments
17
+ end
18
+
19
+ # Allows editors add a space separated list of tags. Each tag entered will be created if needed as an instance of a Cms::Tag.
20
+ #
21
+ # Usage:
22
+ # <%= f.cms_tag_list %>
23
+ #
24
+ # There is no generator for this field type.
25
+ #
26
+ def cms_tag_list(options={})
27
+ input :tag_list, as: :tag_list, label: "Tags", input_html: {autocomplete: 'off'}, hint: "A space separated list of tags."
28
+ end
29
+
30
+ # Displays a concise list of error messages. This is may be unnecessary given that simple form will display error inline.
31
+ # Handles 'global' messages that aren't specific to a field.
32
+ def cms_error_messages
33
+ return unless object.respond_to?(:errors) && object.errors.any?
34
+
35
+ errors_list = ""
36
+ errors_list << @template.content_tag(:h2, "#{object.errors.size} error prohibited this #{object_name.humanize} from being saved.".html_safe)
37
+ errors_list << @template.content_tag(:p, "There were problems with the following fields:")
38
+ errors_list << @template.content_tag(:ul, object.errors.full_messages.map { |message| @template.content_tag(:li, message).html_safe }.join("\n").html_safe).html_safe
39
+
40
+ @template.content_tag(:div, errors_list.html_safe, :class => "errorExplanation", :id => "errorExplanation")
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,13 @@
1
+ module Cms
2
+ module FormBuilder
3
+ module DefaultInput
4
+
5
+ # Use a default value if there isn't one specfied already.
6
+ def extract_default
7
+ if options[:default] && object.new_record? && object.send(attribute_name).blank?
8
+ input_html_options[:value] = options[:default]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end