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
@@ -1,184 +1,172 @@
1
1
  module Cms
2
- class ContentController < Cms::ApplicationController
3
- include Cms::ContentRenderingSupport
4
-
5
- skip_before_filter :redirect_to_cms_site
6
- before_filter :redirect_non_cms_users_to_public_site, :only => [:show, :show_page_route]
7
- before_filter :construct_path, :only => [:show]
8
- before_filter :construct_path_from_route, :only => [:show_page_route]
9
- before_filter :try_to_redirect, :only => [:show]
10
- before_filter :try_to_stream_file, :only => [:show]
11
- before_filter :check_access_to_page, :only => [:show, :show_page_route]
12
-
13
-
14
-
15
- # ----- Actions --------------------------------------------------------------
16
- def show
17
- render_page_with_caching
18
- end
2
+ class ContentController < Cms::ApplicationController
3
+ include Cms::ContentRenderingSupport
4
+ include Cms::Attachments::Serving
5
+
6
+ include Cms::MobileAware
7
+ helper MobileHelper
8
+
9
+ skip_before_filter :redirect_to_cms_site
10
+ before_filter :redirect_non_cms_users_to_public_site, :only => [:show, :show_page_route]
11
+ before_filter :construct_path, :only => [:show]
12
+ before_filter :construct_path_from_route, :only => [:show_page_route]
13
+ before_filter :try_to_redirect, :only => [:show]
14
+ before_filter :try_to_stream_file, :only => [:show]
15
+ before_filter :check_access_to_page, :only => [:show, :show_page_route]
16
+ before_filter :select_cache_directory
17
+
18
+
19
+ # ----- Actions --------------------------------------------------------------
20
+ def show
21
+ render_page_with_caching
22
+ end
19
23
 
20
- def show_page_route
21
- render_page_with_caching
22
- end
24
+ def show_page_route
25
+ render_page_with_caching
26
+ end
23
27
 
24
28
 
25
- # Used by the rendering behavior
26
- def instance_variables_for_rendering
27
- instance_variables - (@initial_ivars || []) - ["@initial_ivars"]
28
- end
29
+ # Used by the rendering behavior
30
+ def instance_variables_for_rendering
31
+ instance_variables - (@initial_ivars || []) - ["@initial_ivars"]
32
+ end
29
33
 
30
- protected
34
+ protected
31
35
 
32
- # This will assign the value to an instance variable
33
- def assign(key, value)
34
- instance_variable_set("@#{key}", value)
35
- end
36
+ # This will assign the value to an instance variable
37
+ def assign(key, value)
38
+ instance_variable_set("@#{key}", value)
39
+ end
36
40
 
37
- private
38
-
39
- # This is the method all actions delegate to
40
- # check_access_to_page will also call this directly
41
- # if caching is not enabled
42
- def render_page
43
- @_page_route.execute(self) if @_page_route
44
- prepare_connectables_for_render
45
- render :layout => @page.layout, :action => 'show'
46
- end
47
-
48
- def render_page_with_caching
49
- render_page
50
- cache_page if perform_caching
51
- end
52
-
53
- # ----- Before Filters -------------------------------------------------------
54
- def construct_path
55
- # @paths = params[:cms_page_path] || params[:path] || []
56
- @path = "/#{params[:path]}"
57
- @paths = @path.split("/")
58
- end
59
-
60
- def construct_path_from_route
61
- @_page_route = PageRoute.find(params[:_page_route_id])
62
- @path = @_page_route.page.path
63
- @initial_ivars = instance_variables
64
- eval @_page_route.code
65
- end
66
-
67
- def redirect_non_cms_users_to_public_site
68
- @show_toolbar = false
69
- if perform_caching
70
- logger.info "Caching is enabled"
71
- if cms_site?
72
- logger.info "This is the cms site"
73
- if current_user.able_to?(:edit_content, :publish_content, :administrate)
74
- logger.info "User has access to cms"
75
- @show_toolbar = true
41
+ private
42
+
43
+ # This is the method all actions delegate to
44
+ # check_access_to_page will also call this directly
45
+ # if caching is not enabled
46
+ def render_page
47
+ logger.warn "Render page (id: #{@page.id})"
48
+ @_page_route.execute(self) if @_page_route
49
+ prepare_connectables_for_render
50
+ page_layout = determine_page_layout
51
+ render :layout => page_layout, :action => 'show'
52
+ end
53
+
54
+ def render_page_with_caching
55
+ render_page
56
+ cache_page if should_write_to_page_cache?
57
+ end
58
+
59
+ # ----- Before Filters -------------------------------------------------------
60
+ def construct_path
61
+ # @paths = params[:cms_page_path] || params[:path] || []
62
+ @path = "/#{params[:path]}"
63
+ @paths = @path.split("/")
64
+ end
65
+
66
+ def construct_path_from_route
67
+ @_page_route = PageRoute.find(params[:_page_route_id])
68
+ @path = @_page_route.page.path
69
+ @initial_ivars = instance_variables
70
+ eval @_page_route.code
71
+ end
72
+
73
+ def redirect_non_cms_users_to_public_site
74
+ @show_toolbar = false
75
+ if using_cms_subdomains?
76
+ logger.debug "Using cms subdomain is enabled"
77
+ if request_is_for_cms_subdomain?
78
+ logger.debug "User has required a page on the cms subdomain."
79
+ if current_user.able_to?(:edit_content, :publish_content, :administrate)
80
+ logger.debug "User has access to cms"
81
+ @show_toolbar = true
82
+ else
83
+ logger.debug "User does not have access to cms"
84
+ redirect_to url_without_cms_domain_prefix
85
+ end
76
86
  else
77
- logger.info "User does not have access to cms"
78
- redirect_to url_without_cms_domain_prefix
87
+ logger.debug "User has requested a page which is not on the cms domain."
79
88
  end
80
89
  else
81
- logger.info "Not the cms site"
90
+ logger.debug "Using cms subdomain is disabled"
91
+ if current_user.able_to?(:edit_content, :publish_content, :administrate)
92
+ @show_toolbar = true
93
+ end
82
94
  end
83
- else
84
- logger.info "Caching is disabled"
85
- if current_user.able_to?(:edit_content, :publish_content, :administrate)
86
- @show_toolbar = true
95
+ @show_page_toolbar = @show_toolbar
96
+ true
97
+ end
98
+
99
+ def try_to_redirect
100
+ if redirect = Redirect.find_by_from_path(@path)
101
+ redirect_to redirect.to_path, :status => :moved_permanently
87
102
  end
88
103
  end
89
- @show_page_toolbar = @show_toolbar
90
- true
91
- end
92
-
93
- def try_to_redirect
94
- if redirect = Redirect.find_by_from_path(@path)
95
- redirect_to redirect.to_path, :status=>:moved_permanently
96
- end
97
- end
98
104
 
99
- # Determines if the current request is file that needs to be streamed.
100
- # Any URL with a . in it is considered a file.
101
- def is_file?
102
- split = request.url.split('.')
103
- ext = split.size > 1 ? split.last.to_s.downcase : nil
104
- !ext.blank?
105
- end
105
+ # Determines if the current request is file that needs to be streamed.
106
+ # Any URL with a . in it is considered a file.
107
+ def is_file?
108
+ split = request.url.split('.')
109
+ ext = split.size > 1 ? split.last.to_s.downcase : nil
110
+ !ext.blank?
111
+ end
106
112
 
107
- def try_to_stream_file
108
- if is_file?
109
-
110
- #Check access to file
111
- @attachment = Attachment.find_live_by_file_path(request.fullpath)
112
- if @attachment
113
- raise Cms::Errors::AccessDenied unless current_user.able_to_view?(@attachment)
114
-
115
- #Construct a path to where this file would be if it were cached
116
- @file = @attachment.full_file_location
117
-
118
- #Stream the file if it exists
119
- if @path != "/" && File.exists?(@file)
120
- logger.warn "Sending file #{@file}"
121
- send_file(@file,
122
- :filename => @attachment.file_name,
123
- :type => @attachment.file_type,
124
- :disposition => "inline"
125
- )
126
- end
113
+ def try_to_stream_file
114
+ if is_file?
115
+ @attachment = Attachment.find_live_by_file_path(request.fullpath)
116
+ send_attachment(@attachment)
127
117
  end
118
+
128
119
  end
129
-
130
- end
131
120
 
132
- def check_access_to_page
133
- set_page_mode
134
- if current_user.able_to?(:edit_content, :publish_content, :administrate)
135
- logger.debug "Displaying draft version of page"
136
- if page = Page.first(:conditions => {:path => @path})
137
- @page = page.as_of_draft_version
121
+ def check_access_to_page
122
+ set_page_mode
123
+ if current_user.able_to?(:edit_content, :publish_content, :administrate)
124
+ logger.debug "Displaying draft version of page"
125
+ if page = Page.first(:conditions => {:path => @path})
126
+ @page = page.as_of_draft_version
127
+ else
128
+ return render(:layout => 'cms/application',
129
+ :template => 'cms/content/no_page',
130
+ :status => :not_found)
131
+ end
138
132
  else
139
- return render(:layout => 'cms/application',
140
- :template => 'cms/content/no_page',
141
- :status => :not_found)
133
+ logger.debug "Displaying live version of page"
134
+ @page = Page.find_live_by_path(@path)
135
+ page_not_found unless (@page && !@page.archived?)
142
136
  end
143
- else
144
- logger.info "..... Displaying live version of page"
145
- @page = Page.find_live_by_path(@path)
146
- page_not_found unless (@page && !@page.archived?)
137
+
138
+ unless current_user.able_to_view?(@page)
139
+ store_location
140
+ raise Cms::Errors::AccessDenied
141
+ end
142
+
143
+ # Doing this so if you are logged in, you never see the cached page
144
+ # We are calling render_page just like the show action does
145
+ # But since we do it from a before filter, the page doesn't get cached
146
+ if logged_in?
147
+ logger.info "Not Caching, user is logged in"
148
+ render_page
149
+ elsif !@page.cacheable?
150
+ logger.info "Not Caching, page cachable is false"
151
+ render_page
152
+ elsif params[:cms_cache] == "false"
153
+ logger.info "Not Caching, cms_cache is false"
154
+ render_page
155
+ end
156
+
147
157
  end
148
158
 
149
- unless current_user.able_to_view?(@page)
150
- store_location
151
- raise Cms::Errors::AccessDenied
159
+ # ----- Other Methods --------------------------------------------------------
160
+
161
+ def page_not_found
162
+ raise ActiveRecord::RecordNotFound.new("No page at '#{@path}'")
152
163
  end
153
164
 
154
- # Doing this so if you are logged in, you never see the cached page
155
- # We are calling render_page just like the show action does
156
- # But since we do it from a before filter, the page doesn't get cached
157
- if logged_in?
158
- logger.info "Not Caching, user is logged in"
159
- render_page
160
- elsif !@page.cacheable?
161
- logger.info "Not Caching, page cachable is false"
162
- render_page
163
- elsif params[:cms_cache] == "false"
164
- logger.info "Not Caching, cms_cache is false"
165
- render_page
165
+ def set_page_mode
166
+ @mode = @show_toolbar && current_user.able_to?(:edit_content) ? (params[:mode] || session[:page_mode] || "edit") : "view"
167
+ session[:page_mode] = @mode
166
168
  end
167
169
 
168
- end
169
-
170
- # ----- Other Methods --------------------------------------------------------
171
-
172
- def page_not_found
173
- raise ActiveRecord::RecordNotFound.new("No page at '#{@path}'")
174
- end
175
170
 
176
- def set_page_mode
177
- @mode = @show_toolbar && current_user.able_to?(:edit_content) ? (params[:mode] || session[:page_mode] || "edit") : "view"
178
- session[:page_mode] = @mode
179
171
  end
180
-
181
-
182
-
183
- end
184
172
  end
@@ -1,12 +1,14 @@
1
1
  module Cms
2
- class DashboardController < Cms::BaseController
3
-
4
- def index
5
- @unpublished_pages = Page.unpublished.all(:order => "updated_at desc")
6
- @unpublished_pages = @unpublished_pages.select { |page| current_user.able_to_publish?(page) }
7
- @incomplete_tasks = current_user.tasks.incomplete.all(
8
- :include => :page,
9
- :order => "#{Task.table_name}.due_date desc, #{Page.table_name}.name")
2
+ class DashboardController < Cms::BaseController
3
+
4
+ layout 'cms/dashboard'
5
+
6
+ def index
7
+ @unpublished_pages = Page.unpublished.all(:order => "updated_at desc")
8
+ @unpublished_pages = @unpublished_pages.select { |page| current_user.able_to_publish?(page) }
9
+ @incomplete_tasks = current_user.tasks.incomplete.all(
10
+ :include => :page,
11
+ :order => "#{Task.table_name}.due_date desc, #{Page.table_name}.name")
12
+ end
10
13
  end
11
- end
12
14
  end
@@ -6,17 +6,29 @@ module Cms
6
6
  rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied
7
7
  end
8
8
  end
9
-
9
+
10
+ # Ensures the entire render stack applies a specific format
11
+ # For example, this allows missing jpg's to throw the proper error as opposed to 500
12
+ def with_format(format, &block)
13
+ old_formats = self.formats
14
+ self.formats = [format]
15
+ result = block.call
16
+ self.formats = old_formats
17
+ result
18
+ end
19
+
10
20
  def handle_server_error(exception)
11
21
  logger.error "Handling Exception: #{exception}"
12
- render :layout => 'cms/application',
13
- :template => 'cms/shared/error',
14
- :status => :internal_server_error,
15
- :locals => {:exception => exception}
22
+ with_format('html') do
23
+ render :layout => 'cms/application',
24
+ :template => 'cms/shared/error',
25
+ :status => :internal_server_error,
26
+ :locals => {:exception => exception}
27
+ end
16
28
  end
17
-
29
+
18
30
  def handle_access_denied(exception)
19
- render :layout => 'cms/application',
31
+ render :layout => 'cms/application',
20
32
  :template => 'cms/shared/access_denied',
21
33
  :status => 403
22
34
  end
@@ -1,4 +1,4 @@
1
1
  module Cms
2
- class FileBlocksController < Cms::ContentBlockController
3
- end
2
+ class FileBlocksController < Cms::ContentBlockController
3
+ end
4
4
  end
@@ -1,5 +1,8 @@
1
1
  module Cms
2
2
  class HomeController < Cms::BaseController
3
+
4
+ # Only occurs if somebody goes to /cms, they get redirected to /
5
+ # However, based on whether they are an admin or not, it will determine where they get sent.
3
6
  def index
4
7
  redirect_to '/'
5
8
  end
@@ -1,47 +1,55 @@
1
1
  module Cms
2
- class SectionNodesController < Cms::BaseController
3
- check_permissions :publish_content, :except => [:index]
4
-
5
- def index
6
- @toolbar_tab = :sitemap
7
- @modifiable_sections = current_user.modifiable_sections
8
- @public_sections = Group.guest.sections.all # Load once here so that every section doesn't need to.
9
-
10
- @sitemap = Section.sitemap
11
- @root_section_node = @sitemap.keys.first
12
- @section = @root_section_node.node
13
- end
14
- def move_before
15
- move(:before)
16
- end
17
- def move_after
18
- move(:after)
19
- end
20
- def move_to_beginning
21
- move_to(:beginning)
22
- end
23
- def move_to_end
24
- move_to(:end)
25
- end
26
- def move_to_root
27
- @section_node = SectionNode.find(params[:id])
28
- @root = Section.root.find(params[:section_id])
29
- @section_node.move_to(@root, 0)
30
- render :json => {:success => true, :message => "'#{@section_node.node.name}' was moved to '#{@root.name}'"}
31
- end
32
-
33
- private
34
- def move(to)
35
- @section_node = SectionNode.find(params[:id])
36
- @other_node = SectionNode.find(params[:section_node_id])
37
- @section_node.send("move_#{to}", @other_node)
38
- render :json => {:success => true, :message => "'#{@section_node.node.name}' was moved #{to} '#{@other_node.node.name}'"}
39
- end
40
- def move_to(place)
41
- @section_node = SectionNode.find(params[:id])
42
- @other_node = SectionNode.find(params[:section_node_id])
43
- @section_node.send("move_to_#{place}", @other_node.node)
44
- render :json => {:success => true, :message => "'#{@section_node.node.name}' was moved to the #{place} of '#{@other_node.node.name}'"}
2
+ class SectionNodesController < Cms::BaseController
3
+
4
+ layout 'cms/section_nodes'
5
+ check_permissions :publish_content, :except => [:index]
6
+
7
+ def index
8
+ @toolbar_tab = :sitemap
9
+ @modifiable_sections = current_user.modifiable_sections
10
+ @public_sections = Group.guest.sections.all # Load once here so that every section doesn't need to.
11
+
12
+ @sitemap = Section.sitemap
13
+ @root_section_node = @sitemap.keys.first
14
+ @section = @root_section_node.node
15
+ end
16
+
17
+ def move_before
18
+ move(:before)
19
+ end
20
+
21
+ def move_after
22
+ move(:after)
23
+ end
24
+
25
+ def move_to_beginning
26
+ move_to(:beginning)
27
+ end
28
+
29
+ def move_to_end
30
+ move_to(:end)
31
+ end
32
+
33
+ def move_to_root
34
+ @section_node = SectionNode.find(params[:id])
35
+ @root = Section.root.find(params[:section_id])
36
+ @section_node.move_to(@root, 0)
37
+ render :json => {:success => true, :message => "'#{@section_node.node.name}' was moved to '#{@root.name}'"}
38
+ end
39
+
40
+ private
41
+ def move(to)
42
+ @section_node = SectionNode.find(params[:id])
43
+ @other_node = SectionNode.find(params[:section_node_id])
44
+ @section_node.send("move_#{to}", @other_node)
45
+ render :json => {:success => true, :message => "'#{@section_node.node.name}' was moved #{to} '#{@other_node.node.name}'"}
46
+ end
47
+
48
+ def move_to(place)
49
+ @section_node = SectionNode.find(params[:id])
50
+ @other_node = SectionNode.find(params[:section_node_id])
51
+ @section_node.send("move_to_#{place}", @other_node.node)
52
+ render :json => {:success => true, :message => "'#{@section_node.node.name}' was moved to the #{place} of '#{@other_node.node.name}'"}
53
+ end
45
54
  end
46
55
  end
47
- end