browsercms 3.4.2 → 3.5.0.rc1

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 (367) hide show
  1. data/README.markdown +1 -0
  2. data/app/assets/images/cms/file-uploading.gif +0 -0
  3. data/app/assets/javascripts/cms/application.js +1 -0
  4. data/app/assets/javascripts/cms/attachment_manager.js.erb +87 -0
  5. data/app/assets/javascripts/cms/core_library.js.erb +38 -25
  6. data/app/assets/stylesheets/cms/application.css.erb +1 -0
  7. data/app/assets/stylesheets/cms/attachment_manager.css.scss +28 -0
  8. data/app/controllers/cms/application_controller.rb +1 -1
  9. data/app/controllers/cms/attachments_controller.rb +45 -10
  10. data/app/controllers/cms/cache_controller.rb +1 -1
  11. data/app/controllers/cms/content_block_controller.rb +134 -122
  12. data/app/controllers/cms/content_controller.rb +143 -155
  13. data/app/controllers/cms/dashboard_controller.rb +11 -9
  14. data/app/controllers/cms/error_handling.rb +19 -7
  15. data/app/controllers/cms/file_blocks_controller.rb +2 -2
  16. data/app/controllers/cms/home_controller.rb +3 -0
  17. data/app/controllers/cms/section_nodes_controller.rb +52 -44
  18. data/app/controllers/cms/sections_controller.rb +4 -2
  19. data/app/controllers/cms/toolbar_controller.rb +14 -10
  20. data/app/helpers/cms/application_helper.rb +23 -19
  21. data/app/helpers/cms/form_builder.rb +65 -18
  22. data/app/helpers/cms/mobile_helper.rb +19 -0
  23. data/app/helpers/cms/path_helper.rb +30 -4
  24. data/app/helpers/cms/rendering_helper.rb +9 -1
  25. data/app/models/cms/abstract_file_block.rb +6 -6
  26. data/app/models/cms/attachment.rb +196 -107
  27. data/app/models/cms/category.rb +3 -0
  28. data/app/models/cms/category_type.rb +2 -0
  29. data/app/models/cms/connector.rb +3 -0
  30. data/app/models/cms/content_type.rb +3 -0
  31. data/app/models/cms/content_type_group.rb +2 -0
  32. data/app/models/cms/dynamic_view.rb +4 -0
  33. data/app/models/cms/email_message.rb +2 -0
  34. data/app/models/cms/file_block.rb +9 -2
  35. data/app/models/cms/group.rb +5 -2
  36. data/app/models/cms/group_permission.rb +2 -0
  37. data/app/models/cms/group_section.rb +3 -0
  38. data/app/models/cms/group_type.rb +2 -0
  39. data/app/models/cms/group_type_permission.rb +2 -0
  40. data/app/models/cms/html_block.rb +3 -2
  41. data/app/models/cms/image_block.rb +13 -2
  42. data/app/models/cms/page.rb +14 -3
  43. data/app/models/cms/page_route.rb +4 -0
  44. data/app/models/cms/page_route_condition.rb +1 -0
  45. data/app/models/cms/page_route_option.rb +2 -0
  46. data/app/models/cms/page_route_requirement.rb +1 -0
  47. data/app/models/cms/permission.rb +3 -0
  48. data/app/models/cms/portlet.rb +2 -2
  49. data/app/models/cms/redirect.rb +2 -0
  50. data/app/models/cms/section.rb +15 -1
  51. data/app/models/cms/section_node.rb +1 -0
  52. data/app/models/cms/site.rb +3 -0
  53. data/app/models/cms/tag.rb +2 -0
  54. data/app/models/cms/tagging.rb +3 -0
  55. data/app/models/cms/task.rb +5 -1
  56. data/app/models/cms/user.rb +1 -1
  57. data/app/models/cms/user_group_membership.rb +3 -0
  58. data/app/views/cms/attachments/_attachment.html.erb +14 -0
  59. data/app/views/cms/attachments/_attachment_table.html.erb +17 -0
  60. data/app/views/cms/attachments/_attachment_wrapper.html.erb +4 -0
  61. data/app/views/cms/blocks/index.html.erb +2 -3
  62. data/app/views/cms/blocks/show.html.erb +1 -1
  63. data/app/views/cms/dynamic_views/index.html.erb +1 -1
  64. data/app/views/cms/email_messages/index.html.erb +1 -1
  65. data/app/views/cms/file_blocks/_form.html.erb +1 -27
  66. data/app/views/cms/file_blocks/_section_selector.html.erb +13 -0
  67. data/app/views/cms/file_blocks/render.html.erb +3 -3
  68. data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +26 -0
  69. data/app/views/cms/form_builder/_cms_file_field.html.erb +27 -35
  70. data/app/views/cms/groups/index.html.erb +1 -1
  71. data/app/views/cms/image_blocks/_form.html.erb +1 -27
  72. data/app/views/cms/image_blocks/render.html.erb +4 -1
  73. data/app/views/cms/page_routes/index.html.erb +3 -0
  74. data/app/views/cms/shared/error.xml.erb +8 -0
  75. data/app/views/cms/tags/render.html.erb +1 -1
  76. data/app/views/cms/toolbar/_mobile_toggle.html.erb +33 -0
  77. data/app/views/cms/users/index.html.erb +1 -1
  78. data/app/views/layouts/_page_toolbar.html.erb +2 -1
  79. data/bin/bcms +21 -26
  80. data/config/routes.rb +3 -2
  81. data/db/browsercms.seeds.rb +2 -1
  82. data/db/migrate/20111130221145_browsercms340.rb +5 -4
  83. data/db/migrate/20120329144406_browsercms350.rb +32 -0
  84. data/{test/dummy/db → db}/schema.rb +97 -128
  85. data/{performance_tuning_notes.md → doc/performance_tuning_notes.md} +0 -0
  86. data/doc/release_notes.md +74 -0
  87. data/lib/browsercms.rb +3 -0
  88. data/lib/cms/acts/content_block.rb +10 -2
  89. data/lib/cms/addressable.rb +8 -0
  90. data/lib/cms/attachments/attachment_serving.rb +59 -0
  91. data/lib/cms/attachments/configuration.rb +88 -0
  92. data/lib/cms/behaviors/attaching.rb +305 -136
  93. data/lib/cms/behaviors/connecting.rb +3 -4
  94. data/lib/cms/behaviors/dynamic_attributes.rb +121 -118
  95. data/lib/cms/behaviors/flush_cache_on_change.rb +1 -3
  96. data/lib/cms/behaviors/naming.rb +16 -0
  97. data/lib/cms/behaviors/pagination.rb +4 -1
  98. data/lib/cms/behaviors/publishing.rb +9 -3
  99. data/lib/cms/behaviors/searching.rb +3 -8
  100. data/lib/cms/behaviors/soft_deleting.rb +1 -0
  101. data/lib/cms/behaviors/taggable.rb +2 -0
  102. data/lib/cms/behaviors/versioning.rb +73 -120
  103. data/lib/cms/caching.rb +53 -11
  104. data/lib/cms/commands/actions.rb +19 -2
  105. data/lib/cms/configuration.rb +44 -0
  106. data/lib/cms/content_rendering_support.rb +9 -6
  107. data/lib/cms/default_accessible.rb +13 -0
  108. data/lib/cms/domain_support.rb +22 -0
  109. data/lib/cms/engine.rb +40 -19
  110. data/lib/cms/engine_helper.rb +54 -0
  111. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +14 -2
  112. data/lib/cms/mobile_aware.rb +67 -0
  113. data/lib/cms/route_extensions.rb +3 -0
  114. data/lib/cms/upgrades/v3_5_0.rb +155 -0
  115. data/lib/cms/version.rb +6 -1
  116. data/lib/generators/cms/content_block/content_block_generator.rb +14 -9
  117. data/lib/generators/cms/content_block/templates/_form.html.erb +17 -6
  118. data/lib/generators/cms/content_block/templates/render.html.erb +12 -5
  119. data/lib/generators/cms/template/template_generator.rb +11 -2
  120. data/lib/tasks/cms.rake +23 -0
  121. data/lib/templates/active_record/model/model.rb +6 -0
  122. metadata +127 -517
  123. data/.gitignore +0 -24
  124. data/.rvmrc +0 -2
  125. data/Gemfile +0 -29
  126. data/Gemfile.lock +0 -196
  127. data/Rakefile +0 -97
  128. data/app/assets/images/browsercms/.gitkeep +0 -0
  129. data/app/controllers/browsercms/application_controller.rb +0 -4
  130. data/browsercms.gemspec +0 -35
  131. data/config/cucumber.yml +0 -8
  132. data/config/database.jdbcmysql.yml +0 -30
  133. data/config/database.mysql.yml +0 -27
  134. data/config/database.postgres.yml +0 -25
  135. data/config/database.sqlite3.yml +0 -11
  136. data/config/environment.rb +0 -6
  137. data/config/initializers/query_reviewer_patch.rb +0 -12
  138. data/config/initializers/rack_1_2_1_patch.rb +0 -12
  139. data/config/locales/en.yml +0 -5
  140. data/features/acts_as_content_page.feature +0 -62
  141. data/features/add_content_to_pages.feature +0 -45
  142. data/features/caching.feature +0 -13
  143. data/features/ckeditor.feature +0 -11
  144. data/features/commands/confirm_aruba_works.feature +0 -24
  145. data/features/commands/generate_module.feature +0 -54
  146. data/features/commands/install_browsercms.feature +0 -21
  147. data/features/commands/new_demo_project.feature +0 -30
  148. data/features/commands/new_projects.feature +0 -50
  149. data/features/commands/upgrade_modules_to_3_4_0_from_3_1_x.feature +0 -19
  150. data/features/commands/upgrade_project_to_3_4_0_from_3_3_x.feature +0 -52
  151. data/features/commands/upgrading_modules.feature +0 -67
  152. data/features/content_blocks/manage_custom_blocks.feature +0 -67
  153. data/features/content_blocks/manage_html_blocks.feature +0 -48
  154. data/features/content_blocks/manage_image_blocks.feature +0 -41
  155. data/features/content_files.feature +0 -37
  156. data/features/content_pages.feature +0 -21
  157. data/features/generators/content_blocks_for_modules.feature +0 -58
  158. data/features/generators/content_blocks_for_projects.feature +0 -109
  159. data/features/install_content.feature +0 -25
  160. data/features/jquery-testplan.txt +0 -12
  161. data/features/manage_groups.feature +0 -33
  162. data/features/manage_page_routes.feature +0 -72
  163. data/features/manage_redirects.feature +0 -20
  164. data/features/manage_sections.feature +0 -12
  165. data/features/manage_tasks.feature +0 -25
  166. data/features/manage_users.feature +0 -38
  167. data/features/page_templates.feature +0 -49
  168. data/features/portlets/email_friend_portlet.feature +0 -29
  169. data/features/portlets/portlets.feature +0 -100
  170. data/features/portlets/tag_cloud_portlet.feature +0 -28
  171. data/features/sitemap/create_pages.feature +0 -15
  172. data/features/sitemap/manage_links.feature +0 -29
  173. data/features/sitemap/sitemap.feature +0 -18
  174. data/features/step_definitions/acts_as_content_page_steps.rb.rb +0 -3
  175. data/features/step_definitions/ckeditor_steps.rb +0 -13
  176. data/features/step_definitions/command_line_steps.rb +0 -212
  177. data/features/step_definitions/content_pages_steps.rb +0 -170
  178. data/features/step_definitions/data_steps.rb +0 -48
  179. data/features/step_definitions/edit_page_templates_steps.rb +0 -21
  180. data/features/step_definitions/html_blocks_steps.rb +0 -9
  181. data/features/step_definitions/install_content_steps.rb +0 -4
  182. data/features/step_definitions/manage_content_blocks_steps.rb +0 -26
  183. data/features/step_definitions/manage_image_blocks_steps.rb +0 -31
  184. data/features/step_definitions/manage_sections_steps.rb +0 -18
  185. data/features/step_definitions/manage_user_steps.rb +0 -22
  186. data/features/step_definitions/more_custom_block_steps.rb +0 -34
  187. data/features/step_definitions/page_route_steps.rb +0 -65
  188. data/features/step_definitions/page_template_steps.rb +0 -5
  189. data/features/step_definitions/permissions_steps.rb +0 -13
  190. data/features/step_definitions/portlets_steps.rb +0 -64
  191. data/features/step_definitions/redirect_steps.rb +0 -12
  192. data/features/step_definitions/sitemap_steps.rb +0 -18
  193. data/features/step_definitions/tag_cloud_steps.rb +0 -11
  194. data/features/step_definitions/task_steps.rb +0 -4
  195. data/features/step_definitions/taxonomy_steps.rb +0 -16
  196. data/features/step_definitions/upgrade_module_steps.rb +0 -76
  197. data/features/step_definitions/web_steps.rb +0 -211
  198. data/features/support/async_support.rb +0 -17
  199. data/features/support/command_line_helpers.rb +0 -63
  200. data/features/support/debug_formatter.rb +0 -7
  201. data/features/support/debugging.rb +0 -28
  202. data/features/support/env.rb +0 -73
  203. data/features/support/git_api.rb +0 -9
  204. data/features/support/open_on_first_failure.rb +0 -25
  205. data/features/support/paths.rb +0 -32
  206. data/features/support/rails_api.rb +0 -8
  207. data/features/support/selectors.rb +0 -39
  208. data/features/support/transforms.rb +0 -7
  209. data/features/taxonomy/add_content_with_category.feature +0 -30
  210. data/features/taxonomy/manage_categories.feature +0 -20
  211. data/features/taxonomy/manage_category_types.feature +0 -16
  212. data/lib/cms/init.rb +0 -105
  213. data/lib/tasks/data.rake +0 -43
  214. data/lib/tasks/db.rake +0 -82
  215. data/public/styled_file_field/index.html +0 -72
  216. data/script/cucumber +0 -10
  217. data/script/rails +0 -6
  218. data/test/console_helper.rb +0 -5
  219. data/test/custom_assertions.rb +0 -84
  220. data/test/dummy/Rakefile +0 -7
  221. data/test/dummy/app/assets/javascripts/application.js +0 -9
  222. data/test/dummy/app/assets/javascripts/content_page.js +0 -2
  223. data/test/dummy/app/assets/stylesheets/application.css +0 -7
  224. data/test/dummy/app/assets/stylesheets/content_page.css +0 -4
  225. data/test/dummy/app/controllers/application_controller.rb +0 -3
  226. data/test/dummy/app/controllers/cms/products_controller.rb +0 -2
  227. data/test/dummy/app/controllers/cms/sample_blocks_controller.rb +0 -3
  228. data/test/dummy/app/controllers/content_page_controller.rb +0 -13
  229. data/test/dummy/app/helpers/application_helper.rb +0 -2
  230. data/test/dummy/app/helpers/content_page_helper.rb +0 -2
  231. data/test/dummy/app/mailers/.gitkeep +0 -0
  232. data/test/dummy/app/models/.gitkeep +0 -0
  233. data/test/dummy/app/models/cms/sample_block.rb +0 -22
  234. data/test/dummy/app/models/product.rb +0 -5
  235. data/test/dummy/app/views/cms/products/_form.html.erb +0 -7
  236. data/test/dummy/app/views/cms/products/render.html.erb +0 -3
  237. data/test/dummy/app/views/content_page/custom_page.html.erb +0 -3
  238. data/test/dummy/app/views/content_page/index.html.erb +0 -2
  239. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  240. data/test/dummy/app/views/layouts/templates/default.html.erb +0 -17
  241. data/test/dummy/app/views/layouts/templates/subpage.html.erb +0 -16
  242. data/test/dummy/app/views/test_route/index.html.erb +0 -14
  243. data/test/dummy/config.ru +0 -4
  244. data/test/dummy/config/application.rb +0 -45
  245. data/test/dummy/config/boot.rb +0 -10
  246. data/test/dummy/config/database.yml +0 -27
  247. data/test/dummy/config/environment.rb +0 -5
  248. data/test/dummy/config/environments/development.rb +0 -32
  249. data/test/dummy/config/environments/production.rb +0 -60
  250. data/test/dummy/config/environments/test.rb +0 -46
  251. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  252. data/test/dummy/config/initializers/browsercms.rb +0 -7
  253. data/test/dummy/config/initializers/inflections.rb +0 -10
  254. data/test/dummy/config/initializers/mime_types.rb +0 -5
  255. data/test/dummy/config/initializers/quiet_sprocket_assets.rb +0 -13
  256. data/test/dummy/config/initializers/secret_token.rb +0 -7
  257. data/test/dummy/config/initializers/session_store.rb +0 -8
  258. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  259. data/test/dummy/config/locales/en.yml +0 -5
  260. data/test/dummy/config/routes.rb +0 -23
  261. data/test/dummy/db/migrate/20111228141250_create_products.rb +0 -16
  262. data/test/dummy/db/seeds.rb +0 -1
  263. data/test/dummy/lib/assets/.gitkeep +0 -0
  264. data/test/dummy/public/404.html +0 -26
  265. data/test/dummy/public/422.html +0 -26
  266. data/test/dummy/public/500.html +0 -26
  267. data/test/dummy/public/favicon.ico +0 -0
  268. data/test/dummy/script/rails +0 -6
  269. data/test/dummy/test/functional/content_page_controller_test.rb +0 -9
  270. data/test/dummy/test/unit/helpers/content_page_helper_test.rb +0 -4
  271. data/test/factories.rb +0 -235
  272. data/test/fixtures/multipart/foo.jpg +0 -0
  273. data/test/fixtures/multipart/sample_upload.txt +0 -1
  274. data/test/fixtures/multipart/second_upload.txt +0 -1
  275. data/test/fixtures/multipart/test.jpg +0 -0
  276. data/test/fixtures/multipart/version1.txt +0 -1
  277. data/test/fixtures/multipart/version2.txt +0 -1
  278. data/test/functional/cms/cache_controller_test.rb +0 -16
  279. data/test/functional/cms/categories_controller_test.rb +0 -28
  280. data/test/functional/cms/connectors_controller_test.rb +0 -64
  281. data/test/functional/cms/content_block_controller_test.rb +0 -127
  282. data/test/functional/cms/content_controller_test.rb +0 -351
  283. data/test/functional/cms/dashboard_controller_test.rb +0 -20
  284. data/test/functional/cms/file_blocks_controller_test.rb +0 -55
  285. data/test/functional/cms/home_controller_test.rb +0 -160
  286. data/test/functional/cms/html_blocks_controller_test.rb +0 -159
  287. data/test/functional/cms/image_blocks_controller_test.rb +0 -78
  288. data/test/functional/cms/links_controller_test.rb +0 -92
  289. data/test/functional/cms/log/test.log +0 -0
  290. data/test/functional/cms/pages_controller_test.rb +0 -233
  291. data/test/functional/cms/portlets_controller_test.rb +0 -57
  292. data/test/functional/cms/sections_controller_test.rb +0 -234
  293. data/test/functional/cms/sessions_controller_test.rb +0 -80
  294. data/test/functional/cms/tasks_controller_test.rb +0 -64
  295. data/test/functional/cms/toolbar_controller_test.rb +0 -76
  296. data/test/functional/cms/users_controller_test.rb +0 -218
  297. data/test/integration/cms/password_management_test.rb +0 -66
  298. data/test/integration/sitemap_performance_test.rb +0 -26
  299. data/test/mock_file.rb +0 -33
  300. data/test/performance/browsing_test.rb +0 -9
  301. data/test/support/engine_controller_hacks.rb +0 -34
  302. data/test/support/factory_helpers.rb +0 -57
  303. data/test/support/rails_3_1_routes_hack.rb +0 -70
  304. data/test/test_helper.rb +0 -199
  305. data/test/test_logging.rb +0 -67
  306. data/test/unit/active_record_callbacks.rb +0 -50
  307. data/test/unit/behaviors/attaching_test.rb +0 -370
  308. data/test/unit/behaviors/cms_user_test.rb +0 -67
  309. data/test/unit/behaviors/connectable_test.rb +0 -32
  310. data/test/unit/behaviors/connecting_test.rb +0 -56
  311. data/test/unit/behaviors/dynamic_attributes_test.rb +0 -74
  312. data/test/unit/behaviors/namespacing_test.rb +0 -76
  313. data/test/unit/behaviors/publishable_test.rb +0 -83
  314. data/test/unit/behaviors/rendering_test.rb +0 -68
  315. data/test/unit/behaviors/searching_test.rb +0 -102
  316. data/test/unit/behaviors/taggable_test.rb +0 -110
  317. data/test/unit/behaviors/userstamping_test.rb +0 -27
  318. data/test/unit/behaviors/versioning_test.rb +0 -102
  319. data/test/unit/extensions/active_record/base_test.rb +0 -25
  320. data/test/unit/extensions/hash_test.rb +0 -26
  321. data/test/unit/extensions/integer_test.rb +0 -10
  322. data/test/unit/extensions/string_test.rb +0 -14
  323. data/test/unit/factories_test.rb +0 -50
  324. data/test/unit/generators/install_generator_test.rb +0 -15
  325. data/test/unit/helpers/application_helper_test.rb +0 -104
  326. data/test/unit/helpers/date_picker_test.rb +0 -17
  327. data/test/unit/helpers/menu_helper_test.rb +0 -240
  328. data/test/unit/helpers/page_helper_test.rb +0 -69
  329. data/test/unit/helpers/path_helper_test.rb +0 -38
  330. data/test/unit/helpers/rendering_helper_test.rb +0 -8
  331. data/test/unit/lib/acts_as_content_page_test.rb +0 -72
  332. data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
  333. data/test/unit/lib/cms/engine_helper_test.rb +0 -119
  334. data/test/unit/lib/cms/sitemap_test.rb +0 -210
  335. data/test/unit/lib/cms_domain_support_test.rb +0 -44
  336. data/test/unit/lib/command_line_test.rb +0 -70
  337. data/test/unit/lib/content_block_test.rb +0 -304
  338. data/test/unit/lib/content_rendering_support_test.rb +0 -40
  339. data/test/unit/lib/generators_test.rb +0 -40
  340. data/test/unit/lib/routes_test.rb +0 -98
  341. data/test/unit/mock_file_test.rb +0 -19
  342. data/test/unit/models/attachment_test.rb +0 -160
  343. data/test/unit/models/category_test.rb +0 -40
  344. data/test/unit/models/category_type_test.rb +0 -8
  345. data/test/unit/models/connector_test.rb +0 -152
  346. data/test/unit/models/content_type_group_test.rb +0 -26
  347. data/test/unit/models/content_type_test.rb +0 -177
  348. data/test/unit/models/dynamic_views_test.rb +0 -36
  349. data/test/unit/models/email_page_portlet_test.rb +0 -20
  350. data/test/unit/models/file_block_test.rb +0 -246
  351. data/test/unit/models/group_test.rb +0 -29
  352. data/test/unit/models/html_block_test.rb +0 -121
  353. data/test/unit/models/image_block_test.rb +0 -35
  354. data/test/unit/models/link_test.rb +0 -52
  355. data/test/unit/models/namespaces_test.rb +0 -57
  356. data/test/unit/models/page_partial_test.rb +0 -37
  357. data/test/unit/models/page_route_test.rb +0 -113
  358. data/test/unit/models/page_template_test.rb +0 -50
  359. data/test/unit/models/page_test.rb +0 -879
  360. data/test/unit/models/permission_test.rb +0 -10
  361. data/test/unit/models/portlet_test.rb +0 -99
  362. data/test/unit/models/sections_test.rb +0 -278
  363. data/test/unit/models/site_test.rb +0 -50
  364. data/test/unit/models/task_test.rb +0 -150
  365. data/test/unit/models/user_test.rb +0 -358
  366. data/test/unit/schema_statements_test.rb +0 -137
  367. data/todo_list.markdown +0 -50
@@ -4,6 +4,9 @@ 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
+
8
+ include DefaultAccessible
9
+
7
10
  validates_presence_of :category_type_id, :name
8
11
  validates_uniqueness_of :name, :scope => :category_type_id
9
12
 
@@ -1,5 +1,7 @@
1
1
  module Cms
2
2
  class CategoryType < ActiveRecord::Base
3
+ attr_accessible :name
4
+
3
5
  has_many :categories, :class_name => 'Cms::Category'
4
6
  validates_presence_of :name
5
7
  validates_uniqueness_of :name
@@ -1,7 +1,10 @@
1
1
  module Cms
2
2
  class Connector < ActiveRecord::Base
3
+ include DefaultAccessible
4
+
3
5
  belongs_to :page, :class_name => 'Cms::Page'
4
6
  belongs_to :connectable, :polymorphic => true
7
+ attr_accessible :connectable
5
8
 
6
9
  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}'"
7
10
  alias :move_up :move_higher
@@ -1,5 +1,8 @@
1
1
  module Cms
2
2
  class ContentType < ActiveRecord::Base
3
+
4
+ attr_accessible :name, :group_name
5
+
3
6
  attr_accessor :group_name
4
7
  belongs_to :content_type_group, :class_name => 'Cms::ContentTypeGroup'
5
8
  validates_presence_of :content_type_group
@@ -1,5 +1,7 @@
1
1
  module Cms
2
2
  class ContentTypeGroup < ActiveRecord::Base
3
+ attr_accessible :name
4
+
3
5
  has_many :content_types, :order => "#{ContentType.table_name}.id", :class_name => 'Cms::ContentType'
4
6
 
5
7
  has_many :types, :order=>"priority, name", :class_name => 'Cms::ContentType'
@@ -4,6 +4,10 @@ module Cms
4
4
  after_save :write_file_to_disk
5
5
  after_destroy :remove_file_from_disk
6
6
 
7
+ include DefaultAccessible
8
+ # Need to explicitly define these, since during new project creation, these files aren't discoverable.
9
+ attr_accessible :name, :body, :format, :handler
10
+
7
11
  scope :with_file_name, lambda { |file_name|
8
12
  conditions = {:name => nil, :format => nil, :handler => nil}
9
13
  if file_name && (parts = file_name.split(".")).size == 3
@@ -1,6 +1,8 @@
1
1
  module Cms
2
2
  class EmailMessage < ActiveRecord::Base
3
3
 
4
+ include DefaultAccessible
5
+
4
6
  scope :undelivered, :conditions => "delivered_at is null"
5
7
  validates_presence_of :recipients
6
8
  after_create :deliver_now
@@ -1,11 +1,18 @@
1
1
  module Cms
2
2
  class FileBlock < Cms::AbstractFileBlock
3
3
 
4
- acts_as_content_block :belongs_to_attachment => true, :taggable => true
4
+ acts_as_content_block :taggable => true
5
+
6
+ has_attachment :file
7
+ validates_attachment_presence :file, :message => "You must upload a file"
5
8
 
6
9
  def self.display_name
7
10
  "File"
8
11
  end
9
12
 
13
+ # Override default behavior to handle STI class when looking up other versions of attachments.
14
+ def attachable_type
15
+ Cms::Attachment::FILE_BLOCKS
16
+ end
10
17
  end
11
- end
18
+ end
@@ -3,8 +3,7 @@
3
3
  # their permissions from all groups combined represents what they can do.
4
4
  #
5
5
  class Cms::Group < ActiveRecord::Base
6
-
7
- GUEST_CODE = "guest"
6
+ GUEST_CODE = "guest"
8
7
 
9
8
  has_many :user_group_memberships, :class_name => 'Cms::UserGroupMembership'
10
9
  has_many :users, :through => :user_group_memberships, :class_name => 'Cms::User'
@@ -17,6 +16,10 @@ class Cms::Group < ActiveRecord::Base
17
16
 
18
17
  belongs_to :group_type, :class_name => 'Cms::GroupType'
19
18
 
19
+ # :group_type might be a bad idea, but only Admins should be modifying groups anyway
20
+ attr_accessible :name, :code, :group_type, :permission_ids, :section_ids
21
+ include Cms::DefaultAccessible
22
+
20
23
  validates_presence_of :name
21
24
 
22
25
  scope :named, lambda { |n| {:conditions => {:name => n}} }
@@ -1,6 +1,8 @@
1
1
  module Cms
2
2
  class GroupPermission < ActiveRecord::Base
3
3
 
4
+ include DefaultAccessible
5
+
4
6
  belongs_to :group, :class_name => 'Cms::Group'
5
7
  belongs_to :permission, :class_name => 'Cms::Permission'
6
8
 
@@ -1,5 +1,8 @@
1
1
  module Cms
2
2
  class GroupSection < ActiveRecord::Base
3
+
4
+ include DefaultAccessible
5
+
3
6
  belongs_to :group, :class_name => 'Cms::Group'
4
7
  belongs_to :section, :class_name => 'Cms::Section'
5
8
  end
@@ -1,5 +1,7 @@
1
1
  module Cms
2
2
  class GroupType < ActiveRecord::Base
3
+ attr_accessible :name, :guest, :cms_access
4
+
3
5
  has_many :groups, :class_name => 'Cms::Group'
4
6
  has_many :group_type_permissions, :class_name => 'Cms::GroupTypePermission'
5
7
  has_many :permissions, :through => :group_type_permissions, :class_name => 'Cms::Permission'
@@ -2,5 +2,7 @@ module Cms
2
2
  class GroupTypePermission < ActiveRecord::Base
3
3
  belongs_to :group_type, :class_name => 'Cms::GroupType'
4
4
  belongs_to :permission, :class_name => 'Cms::Permission'
5
+
6
+ include DefaultAccessible
5
7
  end
6
8
  end
@@ -3,12 +3,14 @@ module Cms
3
3
 
4
4
  acts_as_content_block :taggable => true
5
5
 
6
+ # This shouldn't be necessary but it is for browsercms.seeds.rb'
7
+ attr_accessible :name, :content
8
+
6
9
  validates_presence_of :name
7
10
 
8
11
  # Override of search scope from searching behavior to deal with include_body
9
12
  scope :search, lambda { |search_params|
10
13
  term = search_params.is_a?(Hash) ? search_params[:term] : search_params
11
- order = search_params.is_a?(Hash) && search_params[:order] ? search_params[:order] : table_name.to_s + ".name"
12
14
  include_body = search_params.is_a?(Hash) ? search_params[:include_body] : false
13
15
  conditions = []
14
16
  columns = ["name"]
@@ -26,7 +28,6 @@ module Cms
26
28
  end
27
29
  scope = {}
28
30
  scope[:conditions] = conditions if conditions
29
- scope[:order] = order if order
30
31
  scope
31
32
  }
32
33
 
@@ -1,11 +1,22 @@
1
1
  module Cms
2
2
  class ImageBlock < Cms::AbstractFileBlock
3
3
 
4
- acts_as_content_block :belongs_to_attachment => true, :taggable => true
4
+ acts_as_content_block :taggable => true
5
+ has_attachment :file, :styles => {:thumb => "80x80"}
6
+ validates_attachment_presence :file, :message => "You must upload a file"
7
+
5
8
 
6
9
  def self.display_name
7
10
  "Image"
8
11
  end
9
12
 
13
+ def image
14
+ file
15
+ end
16
+
17
+ # Override default behavior to handle STI class when looking up other versions of attachments.
18
+ def attachable_type
19
+ Cms::Attachment::FILE_BLOCKS
20
+ end
10
21
  end
11
- end
22
+ end
@@ -16,6 +16,8 @@ class Cms::Page < ActiveRecord::Base
16
16
  has_many :page_routes, :class_name => 'Cms::PageRoute'
17
17
  has_many :tasks
18
18
 
19
+ include Cms::DefaultAccessible
20
+
19
21
  scope :named, lambda { |name| {:conditions => ["#{table_name}.name = ?", name]} }
20
22
  scope :with_path, lambda { |path| {:conditions => ["#{table_name}.path = ?", path]} }
21
23
 
@@ -80,6 +82,7 @@ class Cms::Page < ActiveRecord::Base
80
82
  validates_uniqueness_of :path, :scope=>:deleted
81
83
  validate :path_not_reserved
82
84
 
85
+ # Implements Versioning Callback.
83
86
  def after_build_new_version(new_version)
84
87
  copy_connectors(
85
88
  :from_version_number => @copy_connectors_from_version || (new_version.version - 1),
@@ -239,8 +242,16 @@ class Cms::Page < ActiveRecord::Base
239
242
  end
240
243
  end
241
244
 
242
- def layout
243
- template_file_name && "templates/#{template_file_name.split('.').first}"
245
+ # Return the layout used to render this page. Will be something like: 'templates/subpage'
246
+ # @param [Symbol] version Valid values are :full and :mobile.
247
+ def layout(version = :full)
248
+ folder = (version == :mobile) ? "mobile" : "templates"
249
+ template_file_name && "#{folder}/#{layout_name}"
250
+ end
251
+
252
+ # Return the file name of the template
253
+ def layout_name
254
+ template_file_name.split('.').first
244
255
  end
245
256
 
246
257
  # This will be nil if it is a file system based template
@@ -303,7 +314,7 @@ class Cms::Page < ActiveRecord::Base
303
314
  # Cache the results of this since many projects will call it repeatly on current_page in menus.
304
315
  return @top_level_section if @top_level_section
305
316
  a = ancestors
306
- @top_level_section = (a.size > 0 && a[1]) ? a[1] : Section.root.first
317
+ @top_level_section = (a.size > 0 && a[1]) ? a[1] : Cms::Section.root.first
307
318
  end
308
319
 
309
320
  def current_task
@@ -15,10 +15,14 @@
15
15
  # Saving a new PageRoute will reload the Rails routes.
16
16
  #
17
17
  class Cms::PageRoute < ActiveRecord::Base
18
+
19
+
18
20
  belongs_to :page, :class_name => 'Cms::Page'
19
21
  has_many :conditions, :class_name => 'Cms::PageRouteCondition'
20
22
  has_many :requirements, :class_name => 'Cms::PageRouteRequirement'
21
23
 
24
+ include Cms::DefaultAccessible
25
+
22
26
  validates_presence_of :pattern, :page_id
23
27
  validates_uniqueness_of :pattern
24
28
 
@@ -1,4 +1,5 @@
1
1
  module Cms
2
2
  class PageRouteCondition < Cms::PageRouteOption
3
+ include DefaultAccessible
3
4
  end
4
5
  end
@@ -1,5 +1,7 @@
1
1
  module Cms
2
2
  class PageRouteOption < ActiveRecord::Base
3
3
  belongs_to :page_route, :class_name => 'Cms::PageRoute'
4
+
5
+ include DefaultAccessible
4
6
  end
5
7
  end
@@ -1,4 +1,5 @@
1
1
  module Cms
2
2
  class PageRouteRequirement < Cms::PageRouteOption
3
+ include DefaultAccessible
3
4
  end
4
5
  end
@@ -1,5 +1,8 @@
1
1
  module Cms
2
2
  class Permission < ActiveRecord::Base
3
+
4
+ attr_accessible :name, :full_name, :description
5
+
3
6
  has_many :group_permissions, :class_name => 'Cms::GroupPermission'
4
7
  has_many :groups, :through => :group_permissions, :class_name => 'Cms::Group'
5
8
 
@@ -5,9 +5,9 @@ module Cms
5
5
 
6
6
  # These are here simply to temporarily hold these values
7
7
  # Makes it easy to pass them through the process of selecting a portlet type
8
- attr_accessor :connect_to_page_id, :connect_to_container
8
+ attr_accessor :connect_to_page_id, :connect_to_container, :controller
9
+ attr_accessible :connect_to_page_id, :connect_to_container, :controller, :name
9
10
 
10
- attr_accessor :controller
11
11
  delegate :request, :response, :session,
12
12
  :flash, :params, :cookies,
13
13
  :current_user, :logged_in?,
@@ -2,5 +2,7 @@ module Cms
2
2
  class Redirect < ActiveRecord::Base
3
3
  validates_presence_of :from_path, :to_path
4
4
  validates_uniqueness_of :from_path
5
+
6
+ include DefaultAccessible
5
7
  end
6
8
  end
@@ -2,17 +2,22 @@ module Cms
2
2
  class Section < ActiveRecord::Base
3
3
  flush_cache_on_change
4
4
 
5
- #The node that links this section to its parent
6
5
 
6
+
7
+ #The node that links this section to its parent
7
8
  has_one :section_node, :class_name => 'Cms::SectionNode', :as => :node, :inverse_of => :node
8
9
  SECTION = "Cms::Section"
9
10
  PAGE = "Cms::Page"
10
11
  LINK = "Cms::Link"
11
12
  VISIBLE_NODE_TYPES = [SECTION, PAGE, LINK]
12
13
 
14
+ include DefaultAccessible
15
+ attr_accessible :allow_groups, :group_ids
16
+
13
17
  include Cms::Addressable
14
18
  include Cms::Addressable::NodeAccessors
15
19
 
20
+
16
21
  # Cannot use dependent => :destroy to do this. Ancestry's callbacks trigger before the before_destroy callback.
17
22
  # So sections would always get deleted since deletable? would return true
18
23
  after_destroy :destroy_node
@@ -172,6 +177,15 @@ module Cms
172
177
  nil
173
178
  end
174
179
 
180
+ # Returns the path for this section with a trailing slash
181
+ def prependable_path
182
+ if path.ends_with?("/")
183
+ path
184
+ else
185
+ "#{path}/"
186
+ end
187
+ end
188
+
175
189
  def actual_path
176
190
  if root?
177
191
  "/"
@@ -1,6 +1,7 @@
1
1
  require 'ancestry'
2
2
 
3
3
  class Cms::SectionNode < ActiveRecord::Base
4
+ attr_accessible :node, :section, :parent, :node_id, :node_type
4
5
  has_ancestry
5
6
 
6
7
  # This is the parent section for this node
@@ -1,5 +1,8 @@
1
1
  module Cms
2
2
  class Site < ActiveRecord::Base
3
+
4
+ attr_accessible :name, :domain
5
+
3
6
  validates_uniqueness_of :domain
4
7
 
5
8
  before_validation :remove_www
@@ -1,6 +1,8 @@
1
1
  module Cms
2
2
  class Tag < ActiveRecord::Base
3
+
3
4
  has_many :taggings, :class_name => 'Cms::Tagging'
5
+ include DefaultAccessible
4
6
 
5
7
  validates_uniqueness_of :name
6
8
 
@@ -3,6 +3,9 @@ module Cms
3
3
  belongs_to :tag, :class_name => 'Cms::Tag'
4
4
  belongs_to :taggable, :polymorphic => true, :class_name => 'Cms::Taggable', :foreign_type => 'taggable_type'
5
5
 
6
+ include DefaultAccessible
7
+ attr_accessible :tag, :taggable
8
+
6
9
  def content_type
7
10
  Cms::ContentType.first(:conditions => {:name => taggable_type})
8
11
  end
@@ -1,5 +1,6 @@
1
1
  module Cms
2
2
  class Task < ActiveRecord::Base
3
+
3
4
  CANT_ASSIGN_MESSAGE = "must have permission to assign tasks"
4
5
  CANT_BE_ASSIGNED_MESSAGE = "must have permission to be assigned tasks"
5
6
  include Cms::DomainSupport
@@ -7,6 +8,9 @@ module Cms
7
8
  belongs_to :assigned_to, :class_name => 'Cms::User'
8
9
  belongs_to :page, :class_name => 'Cms::Page'
9
10
 
11
+ include DefaultAccessible
12
+ attr_accessible :assigned_by, :assigned_to, :page
13
+
10
14
  after_create :mark_other_tasks_for_the_same_page_as_complete
11
15
  after_create :send_email
12
16
 
@@ -45,7 +49,7 @@ module Cms
45
49
  elsif assigned_to.email.blank?
46
50
  logger.warn "Can't send email for task because assigned to user #{assigned_to.login}:#{assigned_to.id} has no email address"
47
51
  else
48
- domain = SITE_DOMAIN
52
+ domain = Rails.configuration.cms.site_domain
49
53
  if domain =~ /^www/
50
54
  host = domain.sub(/^www\./, "#{cms_domain_prefix}.")
51
55
  else
@@ -2,6 +2,7 @@ require 'digest/sha1'
2
2
 
3
3
  module Cms
4
4
  class User < ActiveRecord::Base
5
+
5
6
  include Cms::Authentication::Model
6
7
 
7
8
  validates_presence_of :login
@@ -15,7 +16,6 @@ module Cms
15
16
  validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => "should be an email address, ex. xx@xx.com"
16
17
  attr_accessible :login, :email, :name, :first_name, :last_name, :password, :password_confirmation, :expires_at
17
18
 
18
-
19
19
  has_many :user_group_memberships, :class_name => 'Cms::UserGroupMembership'
20
20
  has_many :groups, :through => :user_group_memberships, :class_name => 'Cms::Group'
21
21
  has_many :tasks, :foreign_key => "assigned_to_id", :class_name => 'Cms::Task'