browsercms 3.5.7 → 4.0.0.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. checksums.yaml +7 -0
  2. data/COPYRIGHT.txt +2 -1
  3. data/README.markdown +3 -3
  4. data/app/assets/fonts/icomoon.dev.svg +61 -0
  5. data/app/assets/fonts/icomoon.eot +0 -0
  6. data/app/assets/fonts/icomoon.svg +61 -0
  7. data/app/assets/fonts/icomoon.ttf +0 -0
  8. data/app/assets/fonts/icomoon.woff +0 -0
  9. data/app/assets/images/ckeditor/plugins/delete_content/icons/deletecontent.png +0 -0
  10. data/app/assets/images/ckeditor/plugins/edit_content/icons/editcontent.png +0 -0
  11. data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentdown.png +0 -0
  12. data/app/assets/images/ckeditor/plugins/move_content/icons/movecontentup.png +0 -0
  13. data/app/assets/images/cms/arrow-down.png +0 -0
  14. data/app/assets/images/cms/arrow-up.png +0 -0
  15. data/app/assets/images/cms/cogs.png +0 -0
  16. data/app/assets/images/cms/dashboard/home.png +0 -0
  17. data/app/assets/images/cms/home.png +0 -0
  18. data/app/assets/images/cms/logo.png +0 -0
  19. data/app/assets/images/cms/pencil.png +0 -0
  20. data/app/assets/images/cms/plus.png +0 -0
  21. data/app/assets/images/cms/user.png +0 -0
  22. data/app/assets/javascripts/bcms/ckeditor_inline.js +23 -0
  23. data/app/assets/javascripts/bcms/ckeditor_standard_config.js +1 -1
  24. data/app/assets/javascripts/ckeditor/plugins/delete_content/plugin.js +36 -0
  25. data/app/assets/javascripts/ckeditor/plugins/edit_content/plugin.js +24 -0
  26. data/app/assets/javascripts/ckeditor/plugins/move_content/plugin.js +25 -0
  27. data/app/assets/javascripts/cms/ajax.js +60 -0
  28. data/app/assets/javascripts/cms/application.js +6 -1
  29. data/app/assets/javascripts/cms/attachment_manager.js.erb +3 -10
  30. data/app/assets/javascripts/cms/content_library.js +31 -12
  31. data/app/assets/javascripts/cms/core_library.js.erb +68 -36
  32. data/app/assets/javascripts/cms/form_builder.js +250 -0
  33. data/app/assets/javascripts/cms/namespace.js +2 -0
  34. data/app/assets/javascripts/cms/new_content_button.js +27 -0
  35. data/app/assets/javascripts/cms/page_editor.js +188 -0
  36. data/app/assets/javascripts/cms/page_toolbar.js +13 -0
  37. data/app/assets/javascripts/cms/site.js +2 -0
  38. data/app/assets/javascripts/cms/sitemap.js +219 -0
  39. data/app/assets/javascripts/cms/toolbar.js +17 -1
  40. data/app/assets/javascripts/cms/user.js +40 -0
  41. data/app/assets/javascripts/jquery.exists.js +5 -0
  42. data/app/assets/javascripts/jquery.taglist.js +37 -23
  43. data/app/assets/stylesheets/cms/_assets.css.scss +55 -0
  44. data/app/assets/stylesheets/cms/_base.css.scss +42 -0
  45. data/app/assets/stylesheets/cms/_cms-buttons.css.scss +73 -0
  46. data/app/assets/stylesheets/cms/_cms-forms.css.scss +70 -0
  47. data/app/assets/stylesheets/cms/_colors.css.scss +20 -0
  48. data/app/assets/stylesheets/cms/_dashboard.css.scss +25 -0
  49. data/app/assets/stylesheets/cms/_glyph.css.scss +60 -0
  50. data/app/assets/stylesheets/cms/_main-area.css.scss +62 -0
  51. data/app/assets/stylesheets/cms/_nav.css.scss +197 -0
  52. data/app/assets/stylesheets/cms/_sidebar.css.scss +64 -0
  53. data/app/assets/stylesheets/cms/_sitemap.css.scss +196 -0
  54. data/app/assets/stylesheets/cms/_submenu.css.scss +48 -0
  55. data/app/assets/stylesheets/cms/application.css.scss +49 -0
  56. data/app/assets/stylesheets/cms/core.css.scss +96 -0
  57. data/app/assets/stylesheets/cms/default-forms.css.scss +3 -0
  58. data/app/assets/stylesheets/cms/includes/_animation.css.scss +2 -0
  59. data/app/assets/stylesheets/cms/includes/_rem.css.scss +120 -0
  60. data/app/assets/stylesheets/cms/includes/animation/_animate.css.scss +31 -0
  61. data/app/assets/stylesheets/cms/includes/animation/_core.css.scss +127 -0
  62. data/app/assets/stylesheets/cms/includes/animation/_shared.css.scss +22 -0
  63. data/app/assets/stylesheets/cms/includes/animation/animate/_attention-seekers.css.scss +152 -0
  64. data/app/assets/stylesheets/cms/includes/animation/animate/_bouncing.css.scss +3 -0
  65. data/app/assets/stylesheets/cms/includes/animation/animate/_classes.css.scss +21 -0
  66. data/app/assets/stylesheets/cms/includes/animation/animate/_fading.css.scss +3 -0
  67. data/app/assets/stylesheets/cms/includes/animation/animate/_flippers.css.scss +87 -0
  68. data/app/assets/stylesheets/cms/includes/animation/animate/_lightspeed.css.scss +24 -0
  69. data/app/assets/stylesheets/cms/includes/animation/animate/_rotating.css.scss +3 -0
  70. data/app/assets/stylesheets/cms/includes/animation/animate/_specials.css.scss +42 -0
  71. data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-entrances.css.scss +68 -0
  72. data/app/assets/stylesheets/cms/includes/animation/animate/bouncing/_bouncing-exits.css.scss +60 -0
  73. data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-entrances.css.scss +86 -0
  74. data/app/assets/stylesheets/cms/includes/animation/animate/fading/_fading-exits.css.scss +86 -0
  75. data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-entrances.css.scss +58 -0
  76. data/app/assets/stylesheets/cms/includes/animation/animate/rotating/_rotating-exits.css.scss +58 -0
  77. data/app/assets/stylesheets/cms/page_content_editing.css.scss +4 -0
  78. data/app/assets/stylesheets/cms/page_editor.css.scss +4 -0
  79. data/app/assets/stylesheets/cms/style.css.scss +138 -0
  80. data/app/assets/stylesheets/cms/styles/_alerts.css.scss +150 -0
  81. data/app/assets/stylesheets/cms/styles/_base-grid.css.scss +299 -0
  82. data/app/assets/stylesheets/cms/styles/_buttons.css.scss +247 -0
  83. data/app/assets/stylesheets/cms/styles/_dropdown.css.scss +155 -0
  84. data/app/assets/stylesheets/cms/styles/_forms.css.scss +728 -0
  85. data/app/assets/stylesheets/cms/styles/_glyph.css.scss +86 -0
  86. data/app/assets/stylesheets/cms/styles/_images.css.scss +75 -0
  87. data/app/assets/stylesheets/cms/styles/_lists.css.scss +115 -0
  88. data/app/assets/stylesheets/cms/styles/_modal.css.scss +174 -0
  89. data/app/assets/stylesheets/cms/styles/_progress.css.scss +43 -0
  90. data/app/assets/stylesheets/cms/styles/_tables.css.scss +141 -0
  91. data/app/assets/stylesheets/cms/styles/_text.css.scss +134 -0
  92. data/app/controllers/cms/application_controller.rb +3 -68
  93. data/app/controllers/cms/attachments_controller.rb +5 -5
  94. data/app/controllers/cms/base_controller.rb +20 -13
  95. data/app/controllers/cms/cache_controller.rb +16 -17
  96. data/app/controllers/cms/category_types_controller.rb +6 -1
  97. data/app/controllers/cms/connectors_controller.rb +12 -7
  98. data/app/controllers/cms/content_block_controller.rb +128 -71
  99. data/app/controllers/cms/content_controller.rb +54 -56
  100. data/app/controllers/cms/dashboard_controller.rb +5 -6
  101. data/app/controllers/cms/dynamic_views_controller.rb +12 -9
  102. data/app/controllers/cms/email_messages_controller.rb +18 -13
  103. data/app/controllers/cms/form_entries_controller.rb +119 -0
  104. data/app/controllers/cms/form_fields_controller.rb +74 -0
  105. data/app/controllers/cms/forms_controller.rb +35 -0
  106. data/app/controllers/cms/groups_controller.rb +13 -16
  107. data/app/controllers/cms/html_blocks_controller.rb +2 -2
  108. data/app/controllers/cms/inline_content_controller.rb +48 -0
  109. data/app/controllers/cms/links_controller.rb +58 -46
  110. data/app/controllers/cms/page_components_controller.rb +20 -0
  111. data/app/controllers/cms/page_routes_controller.rb +44 -40
  112. data/app/controllers/cms/pages_controller.rb +111 -97
  113. data/app/controllers/cms/passwords_controller.rb +17 -0
  114. data/app/controllers/cms/portlet_controller.rb +0 -1
  115. data/app/controllers/cms/portlets_controller.rb +20 -27
  116. data/app/controllers/cms/redirects_controller.rb +13 -9
  117. data/app/controllers/cms/resource_controller.rb +15 -4
  118. data/app/controllers/cms/routes_controller.rb +2 -4
  119. data/app/controllers/cms/section_nodes_controller.rb +6 -37
  120. data/app/controllers/cms/sections_controller.rb +13 -8
  121. data/app/controllers/cms/sessions_controller.rb +8 -66
  122. data/app/controllers/cms/sites/passwords_controller.rb +27 -0
  123. data/app/controllers/cms/sites/sessions_controller.rb +20 -0
  124. data/app/controllers/cms/tags_controller.rb +12 -12
  125. data/app/controllers/cms/tasks_controller.rb +45 -46
  126. data/app/controllers/cms/user_controller.rb +8 -0
  127. data/app/controllers/cms/users_controller.rb +91 -68
  128. data/app/helpers/cms/application_helper.rb +58 -52
  129. data/app/helpers/cms/content_block_helper.rb +8 -7
  130. data/app/helpers/cms/form_tag_helper.rb +21 -25
  131. data/app/helpers/cms/menu_helper.rb +1 -3
  132. data/app/helpers/cms/mobile_helper.rb +12 -2
  133. data/app/helpers/cms/nav_menu_helper.rb +23 -0
  134. data/app/helpers/cms/page_helper.rb +72 -30
  135. data/app/helpers/cms/path_helper.rb +46 -70
  136. data/app/helpers/cms/rendering_helper.rb +68 -12
  137. data/app/helpers/cms/section_nodes_helper.rb +92 -31
  138. data/app/helpers/cms/sites/authentication_helper.rb +25 -0
  139. data/app/helpers/cms/sites/devise_shim_helper.rb +31 -0
  140. data/app/helpers/cms/template_support.rb +1 -7
  141. data/app/helpers/cms/ui_elements_helper.rb +147 -6
  142. data/app/helpers/forgot_password_portlet_helper.rb +9 -0
  143. data/app/helpers/login_portlet_helper.rb +10 -0
  144. data/app/inputs/attachments_input.rb +14 -0
  145. data/app/inputs/cms_text_area_input.rb +10 -0
  146. data/app/inputs/cms_text_field_input.rb +29 -0
  147. data/app/inputs/date_picker_input.rb +8 -0
  148. data/app/inputs/file_picker_input.rb +75 -0
  149. data/app/inputs/path_input.rb +18 -0
  150. data/app/inputs/tag_list_input.rb +3 -0
  151. data/app/inputs/template_editor_input.rb +24 -0
  152. data/app/inputs/text_editor_input.rb +19 -0
  153. data/app/models/cms/abstract_file_block.rb +10 -6
  154. data/app/models/cms/attachment.rb +20 -27
  155. data/app/models/cms/category.rb +17 -7
  156. data/app/models/cms/category_type.rb +8 -4
  157. data/app/models/cms/connector.rb +32 -20
  158. data/app/models/cms/content.rb +31 -0
  159. data/app/models/cms/content_type.rb +114 -62
  160. data/app/models/cms/dynamic_view.rb +19 -45
  161. data/app/models/cms/email_message.rb +32 -2
  162. data/app/models/cms/external_user.rb +60 -0
  163. data/app/models/cms/file_block.rb +1 -0
  164. data/app/models/cms/form.rb +47 -0
  165. data/app/models/cms/form_entry.rb +71 -0
  166. data/app/models/cms/form_field.rb +78 -0
  167. data/app/models/cms/group.rb +19 -9
  168. data/app/models/cms/group_permission.rb +1 -1
  169. data/app/models/cms/group_section.rb +1 -1
  170. data/app/models/cms/group_type.rb +5 -5
  171. data/app/models/cms/group_type_permission.rb +1 -1
  172. data/app/models/cms/html_block.rb +14 -19
  173. data/app/models/cms/image_block.rb +1 -0
  174. data/app/models/cms/link.rb +8 -6
  175. data/app/models/cms/page.rb +156 -59
  176. data/app/models/cms/page_component.rb +43 -0
  177. data/app/models/cms/page_partial.rb +16 -8
  178. data/app/models/cms/page_route.rb +1 -1
  179. data/app/models/cms/page_route_condition.rb +1 -1
  180. data/app/models/cms/page_route_option.rb +1 -1
  181. data/app/models/cms/page_route_requirement.rb +1 -1
  182. data/app/models/cms/page_template.rb +14 -9
  183. data/app/models/cms/permission.rb +4 -2
  184. data/app/models/cms/persistent_user.rb +208 -0
  185. data/app/models/cms/portlet.rb +56 -9
  186. data/app/models/cms/redirect.rb +1 -1
  187. data/app/models/cms/search_filter.rb +18 -0
  188. data/app/models/cms/section.rb +39 -28
  189. data/app/models/cms/section_node.rb +32 -5
  190. data/app/models/cms/site.rb +3 -3
  191. data/app/models/cms/tag.rb +14 -12
  192. data/app/models/cms/tagging.rb +2 -2
  193. data/app/models/cms/task.rb +14 -21
  194. data/app/models/cms/templates.rb +1 -2
  195. data/app/models/cms/user.rb +21 -160
  196. data/app/models/cms/user_group_membership.rb +2 -2
  197. data/app/portlets/deprecated_placeholder.rb +12 -0
  198. data/app/portlets/dynamic_portlet.rb +1 -1
  199. data/app/portlets/email_page_portlet.rb +10 -3
  200. data/app/portlets/forgot_password_portlet.rb +9 -28
  201. data/app/portlets/login_portlet.rb +8 -5
  202. data/app/portlets/tag_cloud_portlet.rb +3 -1
  203. data/app/presenters/cms/user_presenter.rb +24 -0
  204. data/app/views/cms/application/_add_content_modal.html.erb +3 -0
  205. data/app/views/cms/application/_buttons.html.erb +7 -0
  206. data/app/views/cms/{shared → application}/_exception.html.erb +0 -0
  207. data/app/views/cms/application/_form_errors.html.erb +7 -0
  208. data/app/views/cms/application/_form_with_buttons.html.erb +10 -0
  209. data/app/views/cms/application/_main_content.html.erb +3 -0
  210. data/app/views/cms/application/_main_with_sidebar.html.erb +8 -0
  211. data/app/views/cms/application/_mobile_toolbar.html.erb +16 -0
  212. data/app/views/cms/application/_page_title.html.erb +5 -0
  213. data/app/views/cms/application/_pagination.html.erb +26 -0
  214. data/app/views/cms/application/_row.html.erb +1 -0
  215. data/app/views/cms/application/_save_buttons.html.erb +7 -0
  216. data/app/views/cms/application/_sidebar_layout.html.erb +3 -0
  217. data/app/views/cms/application/_version.html.erb +23 -0
  218. data/app/views/cms/{shared → application}/_version_conflict_diff.html.erb +0 -0
  219. data/app/views/cms/{shared → application}/_version_conflict_error.html.erb +0 -0
  220. data/app/views/cms/attachments/_attachment_manager.html.erb +22 -0
  221. data/app/views/cms/attachments/_no_attachments_defined.html.erb +1 -0
  222. data/app/views/cms/cache/show.html.erb +5 -10
  223. data/app/views/cms/categories/_form.html.erb +15 -24
  224. data/app/views/cms/category_types/_form.html.erb +1 -1
  225. data/app/views/cms/connectors/new.html.erb +33 -64
  226. data/app/views/cms/content/editing_frame.html.erb +1 -0
  227. data/app/views/cms/content/no_page.html.erb +9 -27
  228. data/app/views/cms/content/show.html.erb +14 -15
  229. data/app/views/cms/content_block/_block_form.html.erb +15 -0
  230. data/app/views/cms/content_block/_buttonbar.html.erb +29 -0
  231. data/app/views/cms/content_block/_buttons.html.erb +13 -0
  232. data/app/views/cms/content_block/_hidden_fields.html.erb +13 -0
  233. data/app/views/cms/content_block/_sidebar.html.erb +35 -0
  234. data/app/views/cms/content_block/edit.html.erb +3 -0
  235. data/app/views/cms/content_block/index.html.erb +87 -0
  236. data/app/views/cms/content_block/new.html.erb +3 -0
  237. data/app/views/cms/content_block/render_block_in_main_container.html.erb +10 -0
  238. data/app/views/cms/content_block/show.html.erb +1 -0
  239. data/app/views/cms/content_block/show_in_isolation.html.erb +15 -0
  240. data/app/views/cms/content_block/versions.html.erb +24 -0
  241. data/app/views/cms/dashboard/_page_drafts.html.erb +12 -22
  242. data/app/views/cms/dashboard/_tasks.html.erb +32 -45
  243. data/app/views/cms/dashboard/index.html.erb +11 -13
  244. data/app/views/cms/dynamic_views/_form.html.erb +8 -10
  245. data/app/views/cms/dynamic_views/edit.html.erb +2 -3
  246. data/app/views/cms/dynamic_views/index.html.erb +22 -44
  247. data/app/views/cms/dynamic_views/new.html.erb +2 -3
  248. data/app/views/cms/email_messages/index.html.erb +31 -34
  249. data/app/views/cms/email_messages/show.html.erb +45 -52
  250. data/app/views/cms/file_blocks/_form.html.erb +2 -4
  251. data/app/views/cms/form_entries/_buttons.html.erb +2 -0
  252. data/app/views/cms/form_entries/_form.html.erb +7 -0
  253. data/app/views/cms/form_entries/_internal_form.html.erb +9 -0
  254. data/app/views/cms/form_entries/edit.html.erb +5 -0
  255. data/app/views/cms/form_entries/error.html.erb +3 -0
  256. data/app/views/cms/form_entries/index.html.erb +4 -0
  257. data/app/views/cms/form_entries/new.html.erb +5 -0
  258. data/app/views/cms/form_entries/show.html.erb +13 -0
  259. data/app/views/cms/form_entries/submit.html.erb +1 -0
  260. data/app/views/cms/form_fields/_form.html.erb +8 -0
  261. data/app/views/cms/form_fields/_select.html.erb +3 -0
  262. data/app/views/cms/form_fields/_text_area.html.erb +3 -0
  263. data/app/views/cms/form_fields/_text_field.html.erb +3 -0
  264. data/app/views/cms/form_fields/edit.html.erb +0 -0
  265. data/app/views/cms/form_fields/new.html.erb +26 -0
  266. data/app/views/cms/form_fields/preview.html.erb +16 -0
  267. data/app/views/cms/forms/_form.html.erb +66 -0
  268. data/app/views/cms/forms/render.html.erb +15 -0
  269. data/app/views/cms/forms/show.html.erb +6 -0
  270. data/app/views/cms/groups/_form.html.erb +32 -38
  271. data/app/views/cms/groups/_permissions.html.erb +11 -34
  272. data/app/views/cms/groups/_sections.html.erb +11 -17
  273. data/app/views/cms/groups/edit.html.erb +1 -3
  274. data/app/views/cms/groups/index.html.erb +10 -32
  275. data/app/views/cms/groups/new.html.erb +2 -4
  276. data/app/views/cms/html_blocks/_form.html.erb +2 -2
  277. data/app/views/cms/html_blocks/render.html.erb +1 -1
  278. data/app/views/cms/image_blocks/_form.html.erb +3 -3
  279. data/app/views/cms/links/_form.html.erb +6 -11
  280. data/app/views/cms/links/edit.html.erb +3 -12
  281. data/app/views/cms/links/new.html.erb +4 -13
  282. data/app/views/cms/page_components/_content.html.erb +18 -0
  283. data/app/views/cms/page_components/new.html.erb +12 -0
  284. data/app/views/cms/page_routes/_form.html.erb +11 -10
  285. data/app/views/cms/page_routes/edit.html.erb +2 -3
  286. data/app/views/cms/page_routes/index.html.erb +25 -48
  287. data/app/views/cms/page_routes/new.html.erb +2 -3
  288. data/app/views/cms/pages/_edit_content.html.erb +28 -0
  289. data/app/views/cms/pages/_form.html.erb +20 -37
  290. data/app/views/cms/pages/_main_form.html.erb +23 -0
  291. data/app/views/cms/pages/_simple_container.html.erb +8 -0
  292. data/app/views/cms/pages/edit.html.erb +2 -23
  293. data/app/views/cms/pages/new.html.erb +2 -16
  294. data/app/views/cms/pages/versions.html.erb +18 -87
  295. data/app/views/cms/redirects/_form.html.erb +6 -14
  296. data/app/views/cms/redirects/edit.html.erb +2 -3
  297. data/app/views/cms/redirects/index.html.erb +24 -50
  298. data/app/views/cms/redirects/new.html.erb +2 -3
  299. data/app/views/cms/routes/index.html.erb +15 -20
  300. data/app/views/cms/section_nodes/_children.html.erb +3 -0
  301. data/app/views/cms/section_nodes/_row_buttons.html.erb +11 -0
  302. data/app/views/cms/section_nodes/_section_node.html.erb +24 -10
  303. data/app/views/cms/section_nodes/_sitemap_buttons.html.erb +47 -0
  304. data/app/views/cms/section_nodes/_status.html.erb +5 -0
  305. data/app/views/cms/section_nodes/show.html.erb +9 -0
  306. data/app/views/cms/sections/_buttons.html.erb +6 -0
  307. data/app/views/cms/sections/_form.html.erb +22 -49
  308. data/app/views/cms/sections/edit.html.erb +3 -8
  309. data/app/views/cms/sections/new.html.erb +4 -20
  310. data/app/views/cms/sessions/new.html.erb +16 -31
  311. data/app/views/cms/shared/access_denied.html.erb +1 -2
  312. data/app/views/cms/shared/error.html.erb +5 -5
  313. data/app/views/cms/sites/_flash.html.erb +8 -0
  314. data/app/views/cms/sites/passwords/new.html.erb +2 -0
  315. data/app/views/cms/sites/sessions/new.html.erb +2 -0
  316. data/app/views/cms/tags/_form.html.erb +1 -1
  317. data/app/views/cms/tags/render.html.erb +0 -1
  318. data/app/views/cms/tasks/new.html.erb +18 -32
  319. data/app/views/cms/toolbar/_new_pages_menu.html.erb +10 -0
  320. data/app/views/cms/users/_form.html.erb +8 -11
  321. data/app/views/cms/users/_password.html.erb +2 -8
  322. data/app/views/cms/users/_user_fields.html.erb +7 -20
  323. data/app/views/cms/users/change_password.html.erb +12 -21
  324. data/app/views/cms/users/edit.html.erb +1 -15
  325. data/app/views/cms/users/index.html.erb +61 -58
  326. data/app/views/cms/users/new.html.erb +1 -12
  327. data/app/views/devise/confirmations/new.html.erb +16 -0
  328. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  329. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  330. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  331. data/app/views/devise/passwords/edit.html.erb +19 -0
  332. data/app/views/devise/passwords/new.html.erb +15 -0
  333. data/app/views/devise/registrations/edit.html.erb +28 -0
  334. data/app/views/devise/registrations/new.html.erb +18 -0
  335. data/app/views/devise/shared/_links.erb +25 -0
  336. data/app/views/devise/unlocks/new.html.erb +16 -0
  337. data/app/views/layouts/cms/_content_types.html.erb +13 -0
  338. data/app/views/layouts/cms/_footer.erb +2 -2
  339. data/app/views/layouts/cms/_head.html.erb +8 -18
  340. data/app/views/layouts/cms/_main_menu.html.erb +78 -0
  341. data/app/views/layouts/cms/application.html.erb +19 -24
  342. data/app/views/layouts/cms/content_page.html.erb +5 -0
  343. data/app/views/layouts/cms/page_editor.html.erb +90 -0
  344. data/app/views/portlets/deprecated_placeholders/_form.html.erb +1 -0
  345. data/app/views/portlets/deprecated_placeholders/render.html.erb +8 -0
  346. data/app/views/portlets/dynamic/_form.html.erb +3 -3
  347. data/app/views/portlets/email_page/_form.html.erb +5 -6
  348. data/app/views/portlets/forgot_password/_form.html.erb +2 -3
  349. data/app/views/portlets/forgot_password/render.html.erb +2 -14
  350. data/app/views/portlets/login/_form.html.erb +4 -6
  351. data/app/views/portlets/login/render.html.erb +8 -27
  352. data/app/views/portlets/portlets/_form.html.erb +7 -6
  353. data/app/views/portlets/tag_cloud/_form.html.erb +4 -4
  354. data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
  355. data/bin/bcms +13 -16
  356. data/config/routes.rb +58 -29
  357. data/db/browsercms.seeds.rb +0 -6
  358. data/db/migrate/{20080815014337_browsercms_3_0_0.rb → 20080815014337_browsercms300.rb} +94 -73
  359. data/db/migrate/20130327184912_browsercms400.rb +90 -0
  360. data/db/migrate/20131206214021_devise_create_users.rb +47 -0
  361. data/db/migrate/20131211223908_kill_reset_password.rb +5 -0
  362. data/db/migrate/20131218222005_create_cms_external_users.rb +10 -0
  363. data/doc/features/design_integration.md +45 -0
  364. data/doc/features/external_user.md +7 -0
  365. data/doc/features/form_builder.md +40 -0
  366. data/doc/features/simple_form_refactor.md +60 -0
  367. data/doc/release_notes.md +224 -10
  368. data/lib/acts_as_list.rb +72 -71
  369. data/lib/browsercms.rb +41 -1
  370. data/lib/cms/acts/content_block.rb +12 -2
  371. data/lib/cms/acts/content_page.rb +3 -4
  372. data/lib/cms/admin_tab.rb +15 -0
  373. data/lib/cms/attachments/configuration.rb +1 -1
  374. data/lib/cms/authentication/controller.rb +83 -177
  375. data/lib/cms/authentication/test_password_strategy.rb +19 -0
  376. data/lib/cms/behaviors.rb +1 -0
  377. data/lib/cms/behaviors/archiving.rb +2 -2
  378. data/lib/cms/behaviors/attaching.rb +21 -45
  379. data/lib/cms/behaviors/connecting.rb +14 -4
  380. data/lib/cms/behaviors/dynamic_attributes.rb +3 -3
  381. data/lib/cms/behaviors/hiding.rb +2 -2
  382. data/lib/cms/behaviors/namespacing.rb +6 -36
  383. data/lib/cms/behaviors/publishing.rb +92 -45
  384. data/lib/cms/behaviors/rendering.rb +15 -7
  385. data/lib/cms/behaviors/searching.rb +5 -4
  386. data/lib/cms/behaviors/soft_deleting.rb +13 -16
  387. data/lib/cms/behaviors/taggable.rb +17 -10
  388. data/lib/cms/behaviors/versioning.rb +12 -16
  389. data/lib/cms/commands/to_version400.rb +10 -0
  390. data/lib/cms/concerns.rb +7 -0
  391. data/lib/cms/concerns/can_be_addressable.rb +326 -0
  392. data/lib/cms/concerns/has_content_type.rb +46 -0
  393. data/lib/cms/concerns/ignores_publishing.rb +9 -0
  394. data/lib/cms/configuration.rb +14 -4
  395. data/lib/cms/configuration/configurable_template.rb +24 -0
  396. data/lib/cms/configuration/devise.rb +256 -0
  397. data/lib/cms/configure_simple_form.rb +142 -0
  398. data/lib/cms/configure_simple_form_bootstrap.rb +49 -0
  399. data/lib/cms/content_filter.rb +18 -0
  400. data/lib/cms/content_page.rb +77 -0
  401. data/lib/cms/content_rendering_support.rb +25 -16
  402. data/lib/cms/controllers/admin_controller.rb +78 -0
  403. data/lib/cms/data_loader.rb +30 -11
  404. data/lib/cms/default_accessible.rb +6 -6
  405. data/lib/cms/domain_support.rb +0 -4
  406. data/lib/cms/engine.rb +52 -20
  407. data/lib/cms/engine_helper.rb +41 -51
  408. data/{app/controllers → lib}/cms/error_handling.rb +11 -5
  409. data/lib/cms/extensions.rb +2 -1
  410. data/lib/cms/extensions/active_model/name.rb +13 -0
  411. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +49 -89
  412. data/lib/cms/extensions/hash.rb +0 -12
  413. data/lib/cms/form_builder/content_block_form_builder.rb +45 -0
  414. data/lib/cms/form_builder/default_input.rb +13 -0
  415. data/lib/cms/form_builder/deprecated_inputs.rb +40 -0
  416. data/lib/cms/form_builder/workflow_buttons.rb +38 -0
  417. data/lib/cms/module.rb +1 -7
  418. data/lib/cms/polymorphic_single_table_inheritance.rb +19 -0
  419. data/lib/cms/publish_workflow.rb +26 -0
  420. data/lib/cms/responders/content_responder.rb +14 -0
  421. data/lib/cms/route_extensions.rb +112 -20
  422. data/lib/cms/version.rb +1 -1
  423. data/lib/generators/browser_cms/demo_site/templates/demo.seeds.rb +0 -2
  424. data/lib/generators/cms/content_block/content_block_generator.rb +19 -46
  425. data/lib/generators/cms/content_block/templates/_form.html.erb +22 -28
  426. data/lib/generators/cms/project/templates/devise.rb.erb +7 -0
  427. metadata +383 -150
  428. data/app/assets/javascripts/cms/sitemap.js.erb +0 -464
  429. data/app/assets/stylesheets/browsercms/application.css +0 -7
  430. data/app/assets/stylesheets/cms/administration.css.erb +0 -91
  431. data/app/assets/stylesheets/cms/application.css.erb +0 -171
  432. data/app/assets/stylesheets/cms/attachment_manager.css.scss +0 -28
  433. data/app/assets/stylesheets/cms/block.css +0 -26
  434. data/app/assets/stylesheets/cms/buttons.css.erb +0 -120
  435. data/app/assets/stylesheets/cms/content_library.css.erb +0 -139
  436. data/app/assets/stylesheets/cms/content_types.css +0 -4
  437. data/app/assets/stylesheets/cms/dashboard.css.erb +0 -118
  438. data/app/assets/stylesheets/cms/data_table.css.erb.erb +0 -156
  439. data/app/assets/stylesheets/cms/date_picker.css.erb +0 -82
  440. data/app/assets/stylesheets/cms/form_layout.css.erb +0 -282
  441. data/app/assets/stylesheets/cms/login.css.erb +0 -78
  442. data/app/assets/stylesheets/cms/menu.css.erb +0 -116
  443. data/app/assets/stylesheets/cms/nav.css.erb +0 -99
  444. data/app/assets/stylesheets/cms/page_toolbar.css.erb +0 -135
  445. data/app/assets/stylesheets/cms/reset.css +0 -46
  446. data/app/assets/stylesheets/cms/selectbox.css.erb +0 -56
  447. data/app/assets/stylesheets/cms/sitemap.css.erb +0 -390
  448. data/app/assets/stylesheets/cms/taglist.css +0 -18
  449. data/app/controllers/application_controller.rb +0 -14
  450. data/app/controllers/cms/content_types_controller.rb +0 -9
  451. data/app/helpers/application_helper.rb +0 -5
  452. data/app/helpers/cms/form_builder.rb +0 -241
  453. data/app/models/cms/content_type_group.rb +0 -15
  454. data/app/models/cms/forgot_password_mailer.rb +0 -14
  455. data/app/portlets/reset_password_portlet.rb +0 -28
  456. data/app/views/cms/blocks/_hidden_fields.html.erb +0 -10
  457. data/app/views/cms/blocks/_toolbar.html.erb +0 -9
  458. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +0 -23
  459. data/app/views/cms/blocks/_toolbar_for_member.html.erb +0 -36
  460. data/app/views/cms/blocks/edit.html.erb +0 -28
  461. data/app/views/cms/blocks/index.html.erb +0 -86
  462. data/app/views/cms/blocks/new.html.erb +0 -19
  463. data/app/views/cms/blocks/show.html.erb +0 -43
  464. data/app/views/cms/blocks/usages.html.erb +0 -44
  465. data/app/views/cms/blocks/versions.html.erb +0 -90
  466. data/app/views/cms/content_types/index.html.erb +0 -14
  467. data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +0 -27
  468. data/app/views/cms/form_builder/_cms_check_box.html.erb +0 -7
  469. data/app/views/cms/form_builder/_cms_date_picker.html.erb +0 -12
  470. data/app/views/cms/form_builder/_cms_datetime_select.html.erb +0 -12
  471. data/app/views/cms/form_builder/_cms_drop_down.html.erb +0 -12
  472. data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +0 -9
  473. data/app/views/cms/form_builder/_cms_file_field.html.erb +0 -28
  474. data/app/views/cms/form_builder/_cms_instructions.html.erb +0 -4
  475. data/app/views/cms/form_builder/_cms_tag_list.html.erb +0 -15
  476. data/app/views/cms/form_builder/_cms_template_editor.html.erb +0 -9
  477. data/app/views/cms/form_builder/_cms_text_area.html.erb +0 -10
  478. data/app/views/cms/form_builder/_cms_text_editor.html.erb +0 -19
  479. data/app/views/cms/form_builder/_cms_text_field.html.erb +0 -12
  480. data/app/views/cms/links/destroy.js.rjs +0 -2
  481. data/app/views/cms/page_routes/show.html.erb +0 -10
  482. data/app/views/cms/pages/_edit_connector.html.erb +0 -19
  483. data/app/views/cms/pages/_edit_container.html.erb +0 -11
  484. data/app/views/cms/section_nodes/_link.html.erb +0 -14
  485. data/app/views/cms/section_nodes/_node.html.erb +0 -44
  486. data/app/views/cms/section_nodes/_page.html.erb +0 -20
  487. data/app/views/cms/section_nodes/_section.html.erb +0 -28
  488. data/app/views/cms/section_nodes/index.html.erb +0 -43
  489. data/app/views/cms/sections/_page.html.erb +0 -4
  490. data/app/views/cms/sections/_section.html.erb +0 -8
  491. data/app/views/cms/sections/destroy.js.rjs +0 -2
  492. data/app/views/cms/sections/index.html.erb +0 -23
  493. data/app/views/cms/shared/_admin_sidebar.html.erb +0 -36
  494. data/app/views/cms/shared/_pagination.html.erb +0 -31
  495. data/app/views/cms/toolbar/_mobile_toggle.html.erb +0 -33
  496. data/app/views/cms/toolbar/index.html.erb +0 -1
  497. data/app/views/cms/users/_groups.html.erb +0 -12
  498. data/app/views/cms/users/_toolbar.html.erb +0 -24
  499. data/app/views/cms/users/show.html.erb +0 -50
  500. data/app/views/layouts/_cms_toolbar.html.erb +0 -54
  501. data/app/views/layouts/_page_toolbar.html.erb +0 -119
  502. data/app/views/layouts/cms/administration.html.erb +0 -51
  503. data/app/views/layouts/cms/content_library.html.erb +0 -96
  504. data/app/views/layouts/cms/dashboard.html.erb +0 -16
  505. data/app/views/layouts/cms/login.html.erb +0 -31
  506. data/app/views/layouts/cms/section_nodes.html.erb +0 -20
  507. data/app/views/layouts/cms/toolbar.html.erb +0 -23
  508. data/app/views/portlets/reset_password/_form.html.erb +0 -3
  509. data/app/views/portlets/reset_password/render.html.erb +0 -22
  510. data/bin/bcms-upgrade +0 -332
  511. data/db/migrate/20091109175123_browsercms_3_0_5.rb +0 -9
  512. data/db/migrate/20100117144038_browsercms314.rb +0 -20
  513. data/db/migrate/20100117144039_browsercms315.rb +0 -95
  514. data/db/migrate/20100705083859_browsercms_3_3_0.rb +0 -56
  515. data/db/migrate/20111130221145_browsercms340.rb +0 -56
  516. data/db/migrate/20120329144406_browsercms350.rb +0 -32
  517. data/db/migrate/20120717182827_browsercms353.rb +0 -19
  518. data/db/migrate/20120813180110_browsercms354.rb +0 -9
  519. data/lib/cms/addressable.rb +0 -93
  520. data/lib/cms/authentication/model.rb +0 -116
  521. data/lib/cms/behaviors/pagination.rb +0 -212
  522. data/lib/cms/upgrades/v3_4_0.rb +0 -31
  523. data/lib/cms/upgrades/v3_5_0.rb +0 -227
@@ -0,0 +1,9 @@
1
+ module ForgotPasswordPortletHelper
2
+
3
+ # Acts like this is Cms::Sites::PasswordsController
4
+ def controller_name
5
+ 'passwords'
6
+ end
7
+
8
+ include Cms::Sites::DeviseShimHelper
9
+ end
@@ -0,0 +1,10 @@
1
+ module LoginPortletHelper
2
+
3
+
4
+ # Acts like this is Cms::Sites::SessionsController
5
+ def controller_name
6
+ 'sessions'
7
+ end
8
+
9
+ include Cms::Sites::DeviseShimHelper
10
+ end
@@ -0,0 +1,14 @@
1
+ class AttachmentsInput < SimpleForm::Inputs::Base
2
+
3
+ def input
4
+ definitions = Cms::Attachment.definitions_for(object.class.name, :multiple)
5
+ if definitions.empty?
6
+ template.render(partial: 'cms/attachments/no_attachments_defined', locals: {object: object})
7
+ else
8
+ names = definitions.keys.sort
9
+ names.unshift "Select a type to upload a file" if names.size > 1
10
+ template.render(partial: 'cms/attachments/attachment_manager', locals: {:asset_definitions => definitions, :asset_types => names, f: @builder, object: object})
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,10 @@
1
+ # Adds additional options to the TextArea
2
+ # @option [String] :default A default value
3
+ class CmsTextAreaInput < SimpleForm::Inputs::TextInput
4
+
5
+ include Cms::FormBuilder::DefaultInput
6
+ def input
7
+ extract_default
8
+ @builder.text_area(attribute_name, input_html_options).html_safe
9
+ end
10
+ end
@@ -0,0 +1,29 @@
1
+ # Adds additional attributes to text field.
2
+ class CmsTextFieldInput < SimpleForm::Inputs::TextInput
3
+
4
+ include Cms::FormBuilder::DefaultInput
5
+
6
+ # @todo Generating a slug probably shouldn't be done as a side effect of a :name field.
7
+ def input
8
+
9
+ if should_autogenerate_slug?(attribute_name)
10
+ input_html_options[:class] << 'slug-source'
11
+ end
12
+
13
+ extract_default
14
+ html = @builder.text_field(attribute_name, input_html_options).html_safe
15
+
16
+ html
17
+ end
18
+
19
+
20
+ protected
21
+
22
+ def should_autogenerate_slug?(method)
23
+ content_requires_slug_field?(method) && (object.new_record? || (object.name.blank? && object.slug.blank?))
24
+ end
25
+
26
+ def content_requires_slug_field?(method)
27
+ method == :name && object.class.requires_slug?
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ # Displays a text field with a JQuery DatePicker widget.
2
+ # 1. Allows for empty dates (i.e. no date)
3
+ class DatePickerInput < SimpleForm::Inputs::TextInput
4
+
5
+ def input
6
+ @builder.text_field(attribute_name, input_html_options).html_safe
7
+ end
8
+ end
@@ -0,0 +1,75 @@
1
+ # Returns a file upload input tag for a given block, along with label and instructions.
2
+ #
3
+ # @param [Symbol] method The name of the model this form upload is associated with
4
+ # @param [Hash] options
5
+ # @option options [String] :label (method) If no label is specified, the human readable name for method will be used.
6
+ # @option options [String] :hint (blank) Helpful tips for the person entering the field, appears blank if nothing is specified.
7
+ class FilePickerInput < SimpleForm::Inputs::Base
8
+
9
+ def input
10
+ # New blocks will not have their attachments created yet.
11
+ object.ensure_attachment_exists if object.respond_to?(:ensure_attachment_exists)
12
+
13
+ # Need to explictly use correct id (i.e. image_block_file) rather than the autogenerated one (i.e. image_block_attachments_attributes_0_attachment_name)
14
+ # Otherwise <label for=""/> won't be right.
15
+ tag = ActionView::Helpers::Tags::Base.new(object_name, attribute_name, template, options)
16
+ tag_id = tag.send(:tag_id)
17
+
18
+ html = ""
19
+ if render_section_picker?
20
+ sections = sections_with_full_paths
21
+ sections.each do |s|
22
+ html << template.content_tag(:span, "", {:class => "section_id_map", style: 'display: hidden', :data => {:id => s.id, :path => s.prependable_path}})
23
+ end
24
+ end
25
+ @builder.simple_fields_for :attachments do |a|
26
+ if matching_attachment?(a)
27
+ html << a.hidden_field("attachment_name", value: attribute_name.to_s)
28
+ html << a.file_field(:data, input_html_options.merge('data-purpose' => "cms_file_field", id: tag_id))
29
+ html << a.hint(options.delete(:hint)) if has_hint?
30
+ if render_section_picker?
31
+ html << a.input(:section_id, collection: sections, label_method: :full_path, include_blank: false, label: "Section", wrapper_html: {class: "inline-section-picker"}, input_html: {'data-purpose' => "section_selector"})
32
+ end
33
+ if render_path_input?
34
+ klass = object.new_record? ? "suggest_file_path" : "keep_existing_path"
35
+ html << a.input(:data_file_path, label: "Path", wrapper_html: {class: "inline-path"}, input_html: {class: klass})
36
+ end
37
+ end
38
+ html << a.input(:id, as: :hidden, wrapper: false)
39
+ end
40
+ html.html_safe
41
+
42
+ end
43
+
44
+ protected
45
+
46
+ # @override Find errors on attachments rather than the provide attribute name.
47
+ def errors_on_attribute
48
+ object.errors[:attachment]
49
+ end
50
+
51
+ # Because #attachments holds ALL attachments by all names, need to verify we only render one form control for each one.
52
+ def matching_attachment?(a)
53
+ a.object.attachment_name == attribute_name.to_s
54
+ end
55
+
56
+ def render_path_input?
57
+ object.respond_to?(:set_attachment_path)
58
+ end
59
+
60
+ def render_section_picker?
61
+ object.respond_to?(:set_attachment_section)
62
+ end
63
+
64
+
65
+ def sections_with_full_paths
66
+ root = Cms::Section.root.first
67
+ root.full_path = root.name
68
+ sections = []
69
+ sections << root
70
+ sections += root.master_section_list
71
+ sections.each { |s| s.full_path = "/" + s.full_path unless s == root }
72
+ sections
73
+ end
74
+
75
+ end
@@ -0,0 +1,18 @@
1
+ class PathInput < SimpleForm::Inputs::TextInput
2
+
3
+ def input
4
+ if forecasting_a_new_section?
5
+ options[:hint] = "Forecast: Saving this first #{object.class.display_name} will create a new section at #{object.class.path}."
6
+ end
7
+ html = template.content_tag(:span, object.class.base_path, data:{type: 'base-path'})
8
+ html << @builder.text_field(:slug, class: ['input-xxlarge', 'slug-dest'])
9
+ html
10
+ end
11
+
12
+ protected
13
+
14
+ def forecasting_a_new_section?
15
+ Cms::Section.with_path(object.class.path).first.nil?
16
+ end
17
+
18
+ end
@@ -0,0 +1,3 @@
1
+ class TagListInput < SimpleForm::Inputs::StringInput
2
+
3
+ end
@@ -0,0 +1,24 @@
1
+ class TemplateEditorInput < SimpleForm::Inputs::TextInput
2
+
3
+ include Cms::FormBuilder::DefaultInput
4
+
5
+ def label
6
+ super if render_template_input?
7
+ end
8
+
9
+ def input
10
+ if render_template_input?
11
+ options[:default] = object.class.default_template
12
+ options[:default_handler] = "erb" unless options[:default_handler]
13
+ view = @builder.select "#{attribute_name}_handler", ActionView::Template.template_handler_extensions, selected: options[:default_handler]
14
+ view << '<br />'.html_safe
15
+ extract_default
16
+ view << @builder.text_area(attribute_name, input_html_options).html_safe
17
+ end
18
+ end
19
+
20
+ private
21
+ def render_template_input?
22
+ object.class.render_inline
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ class TextEditorInput < SimpleForm::Inputs::TextInput
2
+
3
+ def input
4
+ tag_id = "#{object_name}_#{attribute_name}"
5
+ s = template.select_tag(:dhtml_selector,
6
+ template.options_for_select([["Rich Text", ""],["Simple Text", "disabled"]],
7
+ template.cookies[:editorEnabled] == 'true' ? "" : "disabled"),
8
+ :class => "#{object_name}_#{attribute_name}_dhtml_selector",
9
+ :tabindex => '-1',
10
+ :onchange => "toggleEditor('#{tag_id}', this)".html_safe)
11
+ s += template.content_tag(:div, super, class: 'editor')
12
+
13
+ end
14
+
15
+ # Mark textarea with class for WYSIWYG editor.
16
+ def input_html_classes
17
+ super.push('editor')
18
+ end
19
+ end
@@ -1,16 +1,20 @@
1
1
  module Cms
2
2
  class AbstractFileBlock < ActiveRecord::Base
3
+ self.table_name = "cms_file_blocks"
3
4
 
5
+ def self.with_parent_id(parent_id)
6
+ if parent_id == 'all'
7
+ where(true) # Empty scope for chaining
8
+ else
9
+ self.includes({:attachments => :section_node})
10
+ .references(:section_node)
11
+ .where(["#{"cms_section_nodes"}.ancestry = ?", Section.find(parent_id).ancestry_path])
4
12
 
5
- self.table_name = Namespacing.prefix("file_blocks")
13
+ end
14
+ end
6
15
 
7
16
  validates_presence_of :name
8
17
 
9
- scope :by_section, lambda { |section| {
10
- :include => {:attachments => :section_node},
11
- :conditions => ["#{SectionNode.table_name}.ancestry = ?", section.node.ancestry_path]}
12
- }
13
-
14
18
  # Return the parent section for this block.
15
19
  # @return [Cms::Section]
16
20
  def parent
@@ -11,8 +11,6 @@ module Cms
11
11
  cattr_accessor :definitions, :instance_writer => false
12
12
  @@definitions = {}.with_indifferent_access
13
13
  cattr_reader :configuration
14
- attr_accessor :attachable_class
15
- attr_accessible :attachable_class
16
14
 
17
15
  before_validation :set_cardinality
18
16
  before_save :set_section, :sanitized_file_path_and_name
@@ -20,28 +18,20 @@ module Cms
20
18
 
21
19
  belongs_to :attachable, :polymorphic => true
22
20
 
23
- include DefaultAccessible
24
- attr_accessible :data, :attachable, :attachment_name
21
+ extend DefaultAccessible
25
22
 
26
23
  validates :attachment_name, :attachable_type, :presence => true
27
24
 
28
- include Cms::Addressable
29
- include Cms::Addressable::DeprecatedPageAccessors
30
- has_one :section_node, :as => :node, :class_name => 'Cms::SectionNode'
31
- alias :node :section_node
25
+ is_addressable
26
+ include Cms::Concerns::Addressable::DeprecatedPageAccessors
32
27
 
33
28
  is_archivable; is_publishable; uses_soft_delete; is_userstamped; is_versioned
34
29
 
35
- #TODO change this to a simple method
36
- #def named(mid)
37
- # find_all_by_name mid
38
- # end
39
- # ...or even get rid of it
40
30
  scope :named, lambda { |name|
41
31
  {:conditions => {:attachment_name => name.to_s}}
42
32
  }
43
33
 
44
- scope :multiple, :conditions => {:cardinality => MULTIPLE}
34
+ scope :multiple, -> {where(:cardinality => MULTIPLE)}
45
35
 
46
36
  FILE_BLOCKS = "Cms::AbstractFileBlock"
47
37
  validates_presence_of :data_file_path, :if => Proc.new { |a| a.attachable_type == FILE_BLOCKS }
@@ -49,6 +39,9 @@ module Cms
49
39
 
50
40
  class << self
51
41
 
42
+ def permitted_params
43
+ super + [:attachable_class, :data]
44
+ end
52
45
  # Makes file paths more URL friendly
53
46
  def sanitize_file_path(file_path)
54
47
  SANITIZATION_REGEXES.inject(file_path.to_s) do |s, (regex, replace)|
@@ -104,7 +97,8 @@ module Cms
104
97
  :whiny => configuration.whiny,
105
98
  :storage => rail_config(:storage),
106
99
  :s3_credentials => rail_config(:s3_credentials),
107
- :bucket => rail_config(:s3_bucket)
100
+ :bucket => rail_config(:s3_bucket),
101
+ :s3_host_alias => rail_config(:s3_host_alias)
108
102
 
109
103
  end
110
104
 
@@ -117,11 +111,10 @@ module Cms
117
111
  # @param [Class] block_class The class of a block which has an attachment.
118
112
  # @param [String] name_of_attachment The name of the attachment association (i.e. if was 'has_attachment :photos' then pass 'photo')
119
113
  # @param [Symbol] key The key for the value to be fetched (i.e. :styles)
120
- #
121
114
  def configuration_value(block_class, name_of_attachment, key)
122
115
  class_definitions = definitions[block_class]
123
116
  if class_definitions == nil
124
- raise "Couldn't find any definitions for '#{block_class}'."
117
+ raise "Couldn't find any definitions for '#{block_class}'. Available definitions are #{definitions.inspect}."
125
118
  end
126
119
  attachment_definition = class_definitions[name_of_attachment]
127
120
  if attachment_definition == nil
@@ -132,6 +125,14 @@ module Cms
132
125
 
133
126
  end
134
127
 
128
+ def attachable_class
129
+ attachable_type
130
+ end
131
+
132
+ # @todo There isn't any good reason I know of why this needs to be a distinct field. Needed to add it to get it working for 4.0 though.
133
+ def attachable_class=(klass)
134
+ self.attachable_type = klass
135
+ end
135
136
 
136
137
  def section=(section)
137
138
  dirty! if self.section != section
@@ -143,7 +144,8 @@ module Cms
143
144
  end
144
145
 
145
146
  def content_block_class
146
- attachable_class || attachable.try(:class).try(:name) || attachable_type
147
+ attachable.try(:class).try(:name) || attachable_type
148
+ #attachable_class || attachable.try(:class).try(:name) || attachable_type
147
149
  end
148
150
 
149
151
  def icon
@@ -260,14 +262,5 @@ module Cms
260
262
  end
261
263
 
262
264
  end
263
-
264
- # Forces this record to be changed, even if nothing has changed
265
- # This is necessary if just the section.id has changed, for example
266
- # test if this is necessary now that the attributes are in the
267
- # model itself.
268
- def dirty!
269
- # Seems like a hack, is there a better way?
270
- self.updated_at = Time.now
271
- end
272
265
  end
273
266
  end
@@ -4,18 +4,28 @@ module Cms
4
4
  belongs_to :parent, :class_name => 'Cms::Category'
5
5
  has_many :children, :class_name => 'Cms::Category', :foreign_key => "parent_id"
6
6
  is_searchable
7
+ has_content_type :module => :categorization
7
8
 
8
- include DefaultAccessible
9
-
10
- attr_accessible :category_type
9
+ extend DefaultAccessible
10
+ include Concerns::IgnoresPublishing
11
11
 
12
12
  validates_presence_of :category_type_id, :name
13
13
  validates_uniqueness_of :name, :scope => :category_type_id
14
14
 
15
- scope :named, lambda { |name| {:conditions => ["#{table_name}.name = ?", name]} }
16
- scope :of_type, lambda { |type_name| {:include => :category_type, :conditions => ["#{CategoryType.table_name}.name = ?", type_name], :order => "#{Category.table_name}.name"} }
17
- scope :top_level, :conditions => ["#{Category.table_name}.parent_id is null"]
18
- scope :list, :include => :category_type
15
+ class << self
16
+ def named(name)
17
+ where(["#{table_name}.name = ?", name])
18
+ end
19
+
20
+ def of_type(type_name)
21
+ where(["#{CategoryType.table_name}.name = ?", type_name])
22
+ .order("#{Category.table_name}.name")
23
+ .includes(:category_type)
24
+ .references(:category_type)
25
+ end
26
+ end
27
+ scope :top_level, -> { where(["#{Category.table_name}.parent_id is null"]) }
28
+ scope :list, -> { includes(:category_type) }
19
29
 
20
30
  def ancestors
21
31
  fn = lambda do |cat, parents|
@@ -1,13 +1,17 @@
1
1
  module Cms
2
2
  class CategoryType < ActiveRecord::Base
3
- attr_accessible :name
4
3
 
5
4
  has_many :categories, :class_name => 'Cms::Category'
6
5
  validates_presence_of :name
7
6
  validates_uniqueness_of :name
8
7
  is_searchable
8
+ has_content_type :module => :categorization
9
9
 
10
- scope :named, lambda { |name| {:conditions => ["#{table_name}.name = ?", name]} }
10
+ include Concerns::IgnoresPublishing
11
+
12
+ def self.named(name)
13
+ where(name: name)
14
+ end
11
15
 
12
16
  # Return a map when the key is category type id as a string
13
17
  # and the value is an array of arrays, each entry having
@@ -25,9 +29,9 @@ module Cms
25
29
  list = []
26
30
  fn = lambda do |cat|
27
31
  list << cat
28
- cat.children.all(:order => order).each { |c| fn.call(c) }
32
+ cat.children.order(order).each { |c| fn.call(c) }
29
33
  end
30
- categories.top_level.all(:order => order).each { |cat| fn.call(cat) }
34
+ categories.top_level.order(order).each { |cat| fn.call(cat) }
31
35
  list
32
36
  end
33
37
 
@@ -4,30 +4,42 @@ module Cms
4
4
  belongs_to :page, :class_name => 'Cms::Page'
5
5
  belongs_to :connectable, :polymorphic => true
6
6
 
7
- include DefaultAccessible
8
- attr_accessible :connectable, :page_version, :connectable_version, :container # Need to be explicit due to seed data loading
7
+ extend DefaultAccessible
8
+ #attr_accessible :connectable, :page_version, :connectable_version, :container # Need to be explicit due to seed data loading
9
9
 
10
10
  acts_as_list :scope => "#{Connector.table_name}.page_id = \#{page_id} and #{Cms::Connector.table_name}.page_version = \#{page_version} and #{Cms::Connector.table_name}.container = '\#{container}'"
11
11
  alias :move_up :move_higher
12
12
  alias :move_down :move_lower
13
13
 
14
- scope :for_page_version, lambda { |pv| {:conditions => {:page_version => pv}} }
15
- scope :for_connectable_version, lambda { |cv| {:conditions => {:connectable_version => cv}} }
16
- scope :for_connectable, lambda { |c|
17
- # puts "Finding for_connectable for #{c.id} and #{c.class.base_class.name}"
18
- {:conditions => {:connectable_id => c.id, :connectable_type => c.class.base_class.name}}
19
- }
20
- scope :in_container, lambda { |container| {:conditions => {:container => container}} }
21
- scope :at_position, lambda { |position| {:conditions => {:position => position}} }
22
- scope :like, lambda { |connector|
23
- {:conditions => {
24
- :connectable_id => connector.connectable_id,
25
- :connectable_type => connector.connectable_type,
26
- :connectable_version => connector.connectable_version,
27
- :container => connector.container,
28
- :position => connector.position
29
- }}
30
- }
14
+ class << self
15
+ def for_page_version(pv)
16
+ where(:page_version => pv)
17
+ end
18
+
19
+ def for_connectable_version(cv)
20
+ where(:connectable_version => cv)
21
+ end
22
+
23
+ def for_connectable(c)
24
+ where(:connectable_id => c.id, :connectable_type => c.class.base_class.name)
25
+ end
26
+
27
+ def in_container(container)
28
+ where(:container => container)
29
+ end
30
+
31
+ def at_position(position)
32
+ where(:position => position)
33
+ end
34
+
35
+ def like(connector)
36
+ where(:connectable_id => connector.connectable_id,
37
+ :connectable_type => connector.connectable_type,
38
+ :connectable_version => connector.connectable_version,
39
+ :container => connector.container,
40
+ :position => connector.position)
41
+ end
42
+ end
31
43
 
32
44
  validates_presence_of :page_id, :page_version, :connectable_id, :connectable_type, :container
33
45
 
@@ -41,7 +53,7 @@ module Cms
41
53
 
42
54
  def connectable_with_deleted
43
55
  c = if connectable_type.constantize.respond_to?(:find_with_deleted)
44
- connectable_type.constantize.find_with_deleted(connectable_id)
56
+ connectable_type.constantize.find_with_deleted(id: connectable_id)
45
57
  else
46
58
  connectable_type.constantize.find(connectable_id)
47
59
  end