browsercms 3.4.2 → 3.5.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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