browsercms 3.1.5 → 3.3.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (425) hide show
  1. data/app/controllers/cms/base_controller.rb +3 -3
  2. data/app/controllers/cms/content_block_controller.rb +2 -2
  3. data/app/controllers/cms/content_controller.rb +5 -4
  4. data/app/controllers/cms/error_handling.rb +1 -1
  5. data/app/controllers/cms/routes_controller.rb +4 -5
  6. data/app/controllers/cms/section_nodes_controller.rb +1 -6
  7. data/app/controllers/cms/sections_controller.rb +2 -3
  8. data/app/controllers/cms/tasks_controller.rb +3 -0
  9. data/app/controllers/cms/users_controller.rb +1 -1
  10. data/app/helpers/cms/application_helper.rb +137 -34
  11. data/app/helpers/cms/form_builder.rb +33 -21
  12. data/app/helpers/cms/page_helper.rb +43 -10
  13. data/app/helpers/cms/path_helper.rb +1 -1
  14. data/app/helpers/cms/rendering_helper.rb +3 -4
  15. data/app/helpers/cms/section_nodes_helper.rb +5 -43
  16. data/app/models/abstract_file_block.rb +1 -16
  17. data/app/models/attachment.rb +57 -22
  18. data/app/models/category.rb +4 -4
  19. data/app/models/category_type.rb +2 -2
  20. data/app/models/cms/view_context.rb +46 -0
  21. data/app/models/connector.rb +7 -6
  22. data/app/models/content_type.rb +3 -3
  23. data/app/models/dynamic_view.rb +1 -1
  24. data/app/models/email_message.rb +2 -2
  25. data/app/models/file_block.rb +12 -0
  26. data/app/models/group.rb +4 -4
  27. data/app/models/group_type.rb +4 -4
  28. data/app/models/html_block.rb +1 -1
  29. data/app/models/image_block.rb +12 -0
  30. data/app/models/link.rb +22 -5
  31. data/app/models/page.rb +87 -46
  32. data/app/models/page_route.rb +61 -6
  33. data/app/models/permission.rb +1 -1
  34. data/app/models/portlet.rb +14 -4
  35. data/app/models/section.rb +48 -86
  36. data/app/models/section_node.rb +25 -40
  37. data/app/models/site.rb +1 -1
  38. data/app/models/tag.rb +1 -1
  39. data/app/models/task.rb +8 -7
  40. data/app/models/user.rb +2 -7
  41. data/app/portlets/forgot_password_portlet.rb +6 -2
  42. data/app/portlets/reset_password_portlet.rb +1 -1
  43. data/app/views/cms/blocks/_toolbar.html.erb +1 -1
  44. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +3 -6
  45. data/app/views/cms/blocks/_toolbar_for_member.html.erb +3 -5
  46. data/app/views/cms/blocks/edit.html.erb +4 -4
  47. data/app/views/cms/blocks/index.html.erb +7 -7
  48. data/app/views/cms/blocks/new.html.erb +4 -4
  49. data/app/views/cms/blocks/show.html.erb +2 -2
  50. data/app/views/cms/blocks/usages.html.erb +2 -2
  51. data/app/views/cms/blocks/versions.html.erb +4 -4
  52. data/app/views/cms/cache/show.html.erb +2 -2
  53. data/app/views/cms/categories/_form.html.erb +2 -2
  54. data/app/views/cms/connectors/new.html.erb +6 -8
  55. data/app/views/cms/content/no_page.html.erb +1 -1
  56. data/app/views/cms/content/show.html.erb +2 -7
  57. data/app/views/cms/dashboard/_page_drafts.html.erb +1 -1
  58. data/app/views/cms/dashboard/_tasks.html.erb +1 -1
  59. data/app/views/cms/dashboard/index.html.erb +1 -1
  60. data/app/views/cms/dynamic_views/_form.html.erb +2 -2
  61. data/app/views/cms/dynamic_views/index.html.erb +7 -10
  62. data/app/views/cms/email_messages/show.html.erb +2 -2
  63. data/app/views/cms/file_blocks/_form.html.erb +4 -4
  64. data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +2 -2
  65. data/app/views/cms/form_builder/_cms_file_field.html.erb +2 -2
  66. data/app/views/cms/form_builder/_cms_tag_list.html.erb +2 -2
  67. data/app/views/cms/form_builder/_cms_text_editor.html.erb +2 -2
  68. data/app/views/cms/groups/_form.html.erb +5 -5
  69. data/app/views/cms/groups/_permissions.html.erb +4 -4
  70. data/app/views/cms/groups/_sections.html.erb +1 -2
  71. data/app/views/cms/groups/index.html.erb +1 -1
  72. data/app/views/cms/html_blocks/render.html.erb +1 -1
  73. data/app/views/cms/image_blocks/_form.html.erb +4 -5
  74. data/app/views/cms/links/_form.html.erb +1 -1
  75. data/app/views/cms/links/edit.html.erb +2 -2
  76. data/app/views/cms/links/new.html.erb +2 -2
  77. data/app/views/cms/page_routes/_form.html.erb +2 -2
  78. data/app/views/cms/page_routes/index.html.erb +6 -9
  79. data/app/views/cms/page_routes/show.html.erb +5 -8
  80. data/app/views/cms/pages/_edit_connector.html.erb +1 -1
  81. data/app/views/cms/pages/_form.html.erb +3 -3
  82. data/app/views/cms/pages/edit.html.erb +2 -2
  83. data/app/views/cms/pages/new.html.erb +7 -7
  84. data/app/views/cms/pages/versions.html.erb +4 -4
  85. data/app/views/cms/redirects/_form.html.erb +2 -2
  86. data/app/views/cms/redirects/index.html.erb +8 -7
  87. data/app/views/cms/routes/index.html.erb +2 -2
  88. data/app/views/cms/section_nodes/_link.html.erb +3 -6
  89. data/app/views/cms/section_nodes/_node.html.erb +4 -13
  90. data/app/views/cms/section_nodes/_page.html.erb +7 -13
  91. data/app/views/cms/section_nodes/_section.html.erb +8 -24
  92. data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
  93. data/app/views/cms/section_nodes/index.html.erb +18 -30
  94. data/app/views/cms/sections/_form.html.erb +4 -6
  95. data/app/views/cms/sections/edit.html.erb +2 -2
  96. data/app/views/cms/sections/index.html.erb +3 -3
  97. data/app/views/cms/sections/new.html.erb +3 -3
  98. data/app/views/cms/sessions/new.html.erb +3 -3
  99. data/app/views/cms/shared/_pagination.html.erb +1 -1
  100. data/app/views/cms/shared/error.html.erb +1 -1
  101. data/app/views/cms/tags/render.html.erb +2 -2
  102. data/app/views/cms/tasks/new.html.erb +4 -4
  103. data/app/views/cms/users/_form.html.erb +3 -3
  104. data/app/views/cms/users/_toolbar.html.erb +3 -3
  105. data/app/views/cms/users/change_password.html.erb +5 -5
  106. data/app/views/cms/users/edit.html.erb +2 -2
  107. data/app/views/cms/users/index.html.erb +4 -4
  108. data/app/views/cms/users/new.html.erb +2 -2
  109. data/app/views/cms/users/show.html.erb +16 -16
  110. data/app/views/layouts/_cms_toolbar.html.erb +5 -5
  111. data/app/views/layouts/_page_toolbar.html.erb +11 -11
  112. data/app/views/layouts/cms/_footer.erb +1 -1
  113. data/app/views/layouts/cms/_head.html.erb +2 -6
  114. data/app/views/layouts/cms/administration.html.erb +32 -32
  115. data/app/views/layouts/cms/content_library.html.erb +5 -5
  116. data/app/views/layouts/cms/toolbar.html.erb +1 -1
  117. data/app/views/portlets/email_page/render.html.erb +2 -2
  118. data/app/views/portlets/forgot_password/render.html.erb +1 -1
  119. data/app/views/portlets/login/render.html.erb +4 -2
  120. data/app/views/portlets/reset_password/render.html.erb +1 -1
  121. data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
  122. data/bin/bcms +0 -0
  123. data/bin/bcms-upgrade +232 -0
  124. data/bin/browsercms +2 -2
  125. data/browsercms.gemspec +16 -14
  126. data/db/migrate/20100705083859_browsercms_3_3_0.rb +56 -0
  127. data/db/seeds.rb +58 -0
  128. data/doc/guides/html/authentication.html +448 -192
  129. data/doc/guides/html/build_it_yourself.html +454 -175
  130. data/doc/guides/html/building_modules.html +451 -220
  131. data/doc/guides/html/building_templates.html +448 -498
  132. data/doc/guides/html/content_blocks.html +450 -470
  133. data/doc/guides/html/customizing_browsercms.html +453 -169
  134. data/doc/guides/html/deployment_guide.html +443 -82
  135. data/doc/guides/html/files/bcmsorg.js +28 -0
  136. data/doc/guides/html/files/clearfix.css +8 -0
  137. data/doc/guides/html/files/cufon.js +7 -0
  138. data/doc/guides/html/files/global.css +190 -0
  139. data/doc/guides/html/files/helvetica.js +91 -0
  140. data/doc/guides/html/files/jquery.js +11 -0
  141. data/doc/guides/html/getting_started.html +454 -213
  142. data/doc/guides/html/index.html +454 -174
  143. data/doc/guides/html/installing_modules.html +454 -186
  144. data/doc/guides/html/portlets.html +451 -232
  145. data/doc/guides/html/user_guide.html +452 -270
  146. data/doc/guides/html/writing_guides.html +454 -161
  147. data/lib/acts_as_list.rb +1 -1
  148. data/lib/browsercms.rb +10 -6
  149. data/lib/cms/acts.rb +7 -0
  150. data/lib/cms/authentication.rb +4 -0
  151. data/lib/cms/authentication/controller.rb +1 -1
  152. data/lib/cms/behaviors.rb +1 -1
  153. data/lib/cms/behaviors/archiving.rb +2 -2
  154. data/lib/cms/behaviors/attaching.rb +28 -43
  155. data/lib/cms/behaviors/categorizing.rb +1 -1
  156. data/lib/cms/behaviors/connecting.rb +27 -12
  157. data/lib/cms/behaviors/dynamic_attributes.rb +8 -5
  158. data/lib/cms/behaviors/hiding.rb +2 -2
  159. data/lib/cms/behaviors/publishing.rb +32 -22
  160. data/lib/cms/behaviors/rendering.rb +41 -18
  161. data/lib/cms/behaviors/searching.rb +1 -1
  162. data/lib/cms/behaviors/soft_deleting.rb +58 -29
  163. data/lib/cms/behaviors/taggable.rb +1 -1
  164. data/lib/cms/behaviors/userstamping.rb +5 -4
  165. data/lib/cms/behaviors/versioning.rb +192 -111
  166. data/lib/cms/content_rendering_support.rb +3 -3
  167. data/lib/cms/date_picker.rb +23 -0
  168. data/lib/cms/engine.rb +46 -0
  169. data/lib/cms/extensions.rb +1 -1
  170. data/lib/cms/extensions/active_record/errors.rb +2 -2
  171. data/lib/cms/extensions/hash.rb +4 -2
  172. data/lib/cms/extensions/string.rb +7 -2
  173. data/lib/cms/init.rb +32 -21
  174. data/lib/cms/module.rb +22 -0
  175. data/lib/cms/module_installation.rb +38 -0
  176. data/lib/cms/routes.rb +127 -115
  177. data/lib/cms/version.rb +2 -2
  178. data/lib/generators/browser_cms.rb +12 -0
  179. data/lib/generators/browser_cms/cms/USAGE +2 -0
  180. data/lib/generators/browser_cms/cms/cms_generator.rb +36 -0
  181. data/{rails_generators/browser_cms → lib/generators/browser_cms/cms}/templates/README +0 -0
  182. data/{rails_generators/browser_cms_demo_site → lib/generators/browser_cms/demo_site}/USAGE +0 -0
  183. data/lib/generators/browser_cms/demo_site/demo_site_generator.rb +138 -0
  184. data/lib/generators/browser_cms/demo_site/templates/demo_site.rake +11 -0
  185. data/{rails_generators/browser_cms_demo_site/templates/migration.rb → lib/generators/browser_cms/demo_site/templates/migration.erb} +2 -8
  186. data/lib/generators/cms/content_block/USAGE +22 -0
  187. data/lib/generators/cms/content_block/content_block_generator.rb +55 -0
  188. data/{rails_generators → lib/generators/cms}/content_block/templates/_form.html.erb +0 -0
  189. data/{rails_generators → lib/generators/cms}/content_block/templates/content_block.rb +0 -0
  190. data/{rails_generators → lib/generators/cms}/content_block/templates/controller.rb +0 -0
  191. data/{rails_generators → lib/generators/cms}/content_block/templates/functional_test.erb +0 -0
  192. data/{rails_generators/content_block/templates/migration.rb → lib/generators/cms/content_block/templates/migration.erb} +1 -1
  193. data/{rails_generators → lib/generators/cms}/content_block/templates/render.html.erb +0 -0
  194. data/{rails_generators → lib/generators/cms}/content_block/templates/unit_test.erb +0 -0
  195. data/lib/generators/cms/install/USAGE +8 -0
  196. data/lib/generators/cms/install/install_generator.rb +20 -0
  197. data/{rails_generators → lib/generators/cms}/portlet/USAGE +3 -16
  198. data/lib/generators/cms/portlet/portlet_generator.rb +38 -0
  199. data/{rails_generators → lib/generators/cms}/portlet/templates/_form.html.erb +0 -0
  200. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet.rb +0 -0
  201. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet_helper.rb +0 -0
  202. data/{rails_generators → lib/generators/cms}/portlet/templates/render.html.erb +0 -0
  203. data/{rails_generators → lib/generators/cms}/portlet/templates/unit_test.erb +0 -0
  204. data/{rails_generators → lib/generators/cms}/template/USAGE +1 -1
  205. data/lib/generators/cms/template/template_generator.rb +18 -0
  206. data/lib/generators/cms/template/templates/template.erb +2 -0
  207. data/lib/generators/cms/upgrade_module/README.txt +3 -0
  208. data/lib/generators/cms/upgrade_module/templates/20100705083859_browsercms_3_3_0.rb +56 -0
  209. data/lib/generators/cms/upgrade_module/templates/README +1 -0
  210. data/lib/generators/cms/upgrade_module/templates/USAGE.erb +10 -0
  211. data/lib/generators/cms/upgrade_module/templates/build_gem.rake +5 -0
  212. data/lib/generators/cms/upgrade_module/templates/engine.erb +7 -0
  213. data/lib/generators/cms/upgrade_module/templates/gemspec.erb +25 -0
  214. data/lib/generators/cms/upgrade_module/templates/gitignore.erb +11 -0
  215. data/lib/generators/cms/upgrade_module/templates/install.erb +9 -0
  216. data/lib/generators/cms/upgrade_module/templates/module_file.erb +3 -0
  217. data/lib/generators/cms/upgrade_module/templates/routes.erb +7 -0
  218. data/lib/generators/cms/upgrade_module/upgrade_module_generator.rb +61 -0
  219. data/lib/tasks/build_gem.rake +1 -0
  220. data/lib/tasks/cms.rake +34 -6
  221. data/lib/tasks/cucumber.rake +53 -0
  222. data/lib/tasks/db.rake +2 -2
  223. data/public/javascripts/cms/application.js +144 -135
  224. data/public/javascripts/cms/sitemap.js +383 -357
  225. data/public/javascripts/jquery-ui.js +782 -591
  226. data/public/javascripts/jquery.cookie.js +38 -43
  227. data/public/javascripts/jquery.js +13 -8
  228. data/public/javascripts/jquery.taglist.js +7 -0
  229. data/public/stylesheets/cms/date_picker.css +49 -40
  230. data/rails/init.rb +2 -3
  231. data/templates/blank.rb +13 -7
  232. data/templates/demo.rb +15 -7
  233. data/templates/module.rb +12 -75
  234. metadata +87 -407
  235. data/app/helpers/cms/content_block_helper.rb +0 -27
  236. data/app/views/layouts/cms/thickbox.html.erb +0 -24
  237. data/db/migrate/20120117144039_browsercms315.rb +0 -94
  238. data/db/migrate/20121114172307_load_seeds.rb +0 -70
  239. data/lib/cms/addressable.rb +0 -83
  240. data/lib/cms/error_pages.rb +0 -8
  241. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  242. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  243. data/public/javascripts/jquery.contextMenu.js +0 -211
  244. data/public/javascripts/jquery.dimensions.js +0 -119
  245. data/public/javascripts/jquery.thickbox.js +0 -10
  246. data/public/stylesheets/cms/jquery.contextMenu.css +0 -61
  247. data/public/stylesheets/cms/thickbox.css +0 -163
  248. data/rails_generators/browser_cms/USAGE +0 -2
  249. data/rails_generators/browser_cms/browser_cms_generator.rb +0 -35
  250. data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +0 -63
  251. data/rails_generators/content_block/USAGE +0 -32
  252. data/rails_generators/content_block/content_block_generator.rb +0 -69
  253. data/rails_generators/portlet/portlet_generator.rb +0 -35
  254. data/rails_generators/template/template_generator.rb +0 -18
  255. data/rails_generators/template/templates/template.erb +0 -3
  256. data/test/custom_assertions.rb +0 -74
  257. data/test/factories.rb +0 -111
  258. data/test/factories/sitemap_factories.rb +0 -28
  259. data/test/fixtures/connectors.yml +0 -97
  260. data/test/fixtures/content_type_groups.yml +0 -13
  261. data/test/fixtures/content_types.yml +0 -50
  262. data/test/fixtures/dynamic_view_versions.yml +0 -26
  263. data/test/fixtures/dynamic_views.yml +0 -26
  264. data/test/fixtures/group_permissions.yml +0 -16
  265. data/test/fixtures/group_sections.yml +0 -31
  266. data/test/fixtures/group_type_permissions.yml +0 -11
  267. data/test/fixtures/group_types.yml +0 -25
  268. data/test/fixtures/groups.yml +0 -25
  269. data/test/fixtures/html_block_versions.yml +0 -67
  270. data/test/fixtures/html_blocks.yml +0 -63
  271. data/test/fixtures/page_versions.yml +0 -265
  272. data/test/fixtures/pages.yml +0 -85
  273. data/test/fixtures/permissions.yml +0 -28
  274. data/test/fixtures/section_nodes.yml +0 -46
  275. data/test/fixtures/sections.yml +0 -19
  276. data/test/fixtures/sites.yml +0 -9
  277. data/test/fixtures/user_group_memberships.yml +0 -11
  278. data/test/fixtures/users.yml +0 -15
  279. data/test/functional/cms/cache_controller_test.rb +0 -14
  280. data/test/functional/cms/categories_controller_test.rb +0 -25
  281. data/test/functional/cms/connectors_controller_test.rb +0 -60
  282. data/test/functional/cms/content_block_controller_test.rb +0 -120
  283. data/test/functional/cms/content_controller_test.rb +0 -439
  284. data/test/functional/cms/content_types_controller_test.rb +0 -18
  285. data/test/functional/cms/dashboard_controller_test.rb +0 -16
  286. data/test/functional/cms/dynamic_views_controller_test.rb +0 -52
  287. data/test/functional/cms/file_blocks_controller_test.rb +0 -52
  288. data/test/functional/cms/groups_controller_test.rb +0 -50
  289. data/test/functional/cms/home_controller_test.rb +0 -156
  290. data/test/functional/cms/html_blocks_controller_test.rb +0 -164
  291. data/test/functional/cms/image_blocks_controller_test.rb +0 -82
  292. data/test/functional/cms/links_controller_test.rb +0 -148
  293. data/test/functional/cms/pages_controller_test.rb +0 -227
  294. data/test/functional/cms/portlets_controller_test.rb +0 -67
  295. data/test/functional/cms/section_nodes_controller_test.rb +0 -112
  296. data/test/functional/cms/sections_controller_test.rb +0 -227
  297. data/test/functional/cms/sessions_controller_test.rb +0 -76
  298. data/test/functional/cms/toolbar_controller_test.rb +0 -64
  299. data/test/functional/cms/users_controller_test.rb +0 -231
  300. data/test/functional/tests/pretend_controller_test.rb +0 -57
  301. data/test/integration/cms/ckeditor_test.rb +0 -30
  302. data/test/integration/cms/password_management_test.rb +0 -56
  303. data/test/integration/login_test.rb +0 -14
  304. data/test/integration/sitemap_performance_test.rb +0 -26
  305. data/test/selenium-core/Blank.html +0 -7
  306. data/test/selenium-core/InjectedRemoteRunner.html +0 -8
  307. data/test/selenium-core/RemoteRunner.html +0 -110
  308. data/test/selenium-core/SeleniumLog.html +0 -109
  309. data/test/selenium-core/TestPrompt.html +0 -145
  310. data/test/selenium-core/TestRunner-splash.html +0 -55
  311. data/test/selenium-core/TestRunner.hta +0 -176
  312. data/test/selenium-core/TestRunner.html +0 -176
  313. data/test/selenium-core/domviewer/butmin.gif +0 -0
  314. data/test/selenium-core/domviewer/butplus.gif +0 -0
  315. data/test/selenium-core/domviewer/domviewer.css +0 -298
  316. data/test/selenium-core/domviewer/domviewer.html +0 -16
  317. data/test/selenium-core/domviewer/selenium-domviewer.js +0 -205
  318. data/test/selenium-core/icons/all.png +0 -0
  319. data/test/selenium-core/icons/continue.png +0 -0
  320. data/test/selenium-core/icons/continue_disabled.png +0 -0
  321. data/test/selenium-core/icons/pause.png +0 -0
  322. data/test/selenium-core/icons/pause_disabled.png +0 -0
  323. data/test/selenium-core/icons/selected.png +0 -0
  324. data/test/selenium-core/icons/step.png +0 -0
  325. data/test/selenium-core/icons/step_disabled.png +0 -0
  326. data/test/selenium-core/iedoc-core.xml +0 -1515
  327. data/test/selenium-core/iedoc.xml +0 -1469
  328. data/test/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  329. data/test/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  330. data/test/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  331. data/test/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  332. data/test/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  333. data/test/selenium-core/lib/prototype.js +0 -2006
  334. data/test/selenium-core/lib/scriptaculous/builder.js +0 -101
  335. data/test/selenium-core/lib/scriptaculous/controls.js +0 -815
  336. data/test/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  337. data/test/selenium-core/lib/scriptaculous/effects.js +0 -958
  338. data/test/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  339. data/test/selenium-core/lib/scriptaculous/slider.js +0 -283
  340. data/test/selenium-core/lib/scriptaculous/unittest.js +0 -383
  341. data/test/selenium-core/scripts/find_matching_child.js +0 -69
  342. data/test/selenium-core/scripts/htmlutils.js +0 -894
  343. data/test/selenium-core/scripts/injection.html +0 -72
  344. data/test/selenium-core/scripts/js2html.js +0 -70
  345. data/test/selenium-core/scripts/narcissus-defs.js +0 -175
  346. data/test/selenium-core/scripts/narcissus-exec.js +0 -1054
  347. data/test/selenium-core/scripts/narcissus-parse.js +0 -1003
  348. data/test/selenium-core/scripts/se2html.js +0 -63
  349. data/test/selenium-core/scripts/selenium-api.js +0 -2409
  350. data/test/selenium-core/scripts/selenium-browserbot.js +0 -2203
  351. data/test/selenium-core/scripts/selenium-browserdetect.js +0 -150
  352. data/test/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  353. data/test/selenium-core/scripts/selenium-executionloop.js +0 -175
  354. data/test/selenium-core/scripts/selenium-logging.js +0 -147
  355. data/test/selenium-core/scripts/selenium-remoterunner.js +0 -571
  356. data/test/selenium-core/scripts/selenium-testrunner.js +0 -1333
  357. data/test/selenium-core/scripts/selenium-version.js +0 -5
  358. data/test/selenium-core/scripts/user-extensions.js +0 -3
  359. data/test/selenium-core/scripts/user-extensions.js.sample +0 -75
  360. data/test/selenium-core/scripts/xmlextras.js +0 -153
  361. data/test/selenium-core/selenium-logo.png +0 -0
  362. data/test/selenium-core/selenium-test.css +0 -43
  363. data/test/selenium-core/selenium.css +0 -299
  364. data/test/selenium-core/xpath/dom.js +0 -428
  365. data/test/selenium-core/xpath/misc.js +0 -252
  366. data/test/selenium-core/xpath/xpath.js +0 -2223
  367. data/test/selenium/_login_as_cmsadmin.rsel +0 -4
  368. data/test/selenium/dashboard.rsel +0 -5
  369. data/test/selenium/html_blocks.rsel +0 -4
  370. data/test/selenium/login/failed_login.rsel +0 -8
  371. data/test/selenium/login/successful_login.rsel +0 -9
  372. data/test/selenium/page_templates.rsel +0 -12
  373. data/test/selenium/pages/edit_properties.rsel +0 -5
  374. data/test/selenium/site/view_home_page.rsel +0 -4
  375. data/test/selenium/sitemap/move_page.rsel +0 -9
  376. data/test/selenium/sitemap/open_section.rsel +0 -6
  377. data/test/selenium/sitemap/select_page.rsel +0 -12
  378. data/test/selenium/sitemap/select_section.rsel +0 -17
  379. data/test/test_helper.rb +0 -193
  380. data/test/test_logging.rb +0 -67
  381. data/test/unit/behaviors/attaching_test.rb +0 -357
  382. data/test/unit/behaviors/connectable_test.rb +0 -29
  383. data/test/unit/behaviors/dynamic_attributes_test.rb +0 -38
  384. data/test/unit/behaviors/publishable_test.rb +0 -84
  385. data/test/unit/behaviors/searching_test.rb +0 -102
  386. data/test/unit/behaviors/taggable_test.rb +0 -109
  387. data/test/unit/behaviors/versioning_test.rb +0 -36
  388. data/test/unit/extensions/active_record/base_test.rb +0 -10
  389. data/test/unit/extensions/hash_test.rb +0 -17
  390. data/test/unit/extensions/integer_test.rb +0 -10
  391. data/test/unit/helpers/application_helper_test.rb +0 -77
  392. data/test/unit/helpers/form_builder_test.rb +0 -36
  393. data/test/unit/helpers/menu_helper_test.rb +0 -242
  394. data/test/unit/helpers/page_helper_test.rb +0 -67
  395. data/test/unit/helpers/path_helper_test.rb +0 -57
  396. data/test/unit/lib/acts_as_content_page_test.rb +0 -72
  397. data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
  398. data/test/unit/lib/cms/sitemap_test.rb +0 -206
  399. data/test/unit/lib/cms_domain_support_test.rb +0 -43
  400. data/test/unit/lib/command_line_test.rb +0 -70
  401. data/test/unit/lib/content_block_test.rb +0 -203
  402. data/test/unit/lib/content_rendering_support_test.rb +0 -40
  403. data/test/unit/lib/generators_test.rb +0 -40
  404. data/test/unit/lib/routes_test.rb +0 -57
  405. data/test/unit/models/attachment_test.rb +0 -116
  406. data/test/unit/models/category_test.rb +0 -40
  407. data/test/unit/models/category_type_test.rb +0 -8
  408. data/test/unit/models/connector_test.rb +0 -152
  409. data/test/unit/models/content_type_test.rb +0 -56
  410. data/test/unit/models/email_page_portlet_test.rb +0 -14
  411. data/test/unit/models/file_block_test.rb +0 -230
  412. data/test/unit/models/group_test.rb +0 -13
  413. data/test/unit/models/html_block_test.rb +0 -102
  414. data/test/unit/models/link_test.rb +0 -52
  415. data/test/unit/models/page_partial_test.rb +0 -29
  416. data/test/unit/models/page_route_test.rb +0 -29
  417. data/test/unit/models/page_template_test.rb +0 -40
  418. data/test/unit/models/page_test.rb +0 -792
  419. data/test/unit/models/permission_test.rb +0 -10
  420. data/test/unit/models/portlet_test.rb +0 -69
  421. data/test/unit/models/sections_test.rb +0 -264
  422. data/test/unit/models/site_test.rb +0 -50
  423. data/test/unit/models/task_test.rb +0 -141
  424. data/test/unit/models/user_test.rb +0 -352
  425. data/test/unit/schema_statements_test.rb +0 -41
@@ -1,19 +1,35 @@
1
1
  module Cms
2
2
  module PageHelper
3
+
4
+ # Outputs the title for this page. Used by both internal CMS pages, as well as page templates. If not explicitily set,
5
+ # returns the title of the page.
6
+ #
7
+ # @param [String] The name this page should be set to.
8
+ # @return [String] The title of the page.
3
9
  def page_title(*args)
4
10
  if args.first
5
- @controller.instance_variable_get("@template").instance_variable_set("@page_title", args.first)
11
+ # Removed unneeded indirection/fixed issue where @template is frozen in r1.9.1
12
+ @page_title = args.first
6
13
  else
7
- @controller.instance_variable_get("@template").instance_variable_get("@page_title")
14
+ @page_title ? @page_title : current_page.page_title
8
15
  end
9
16
  end
10
17
 
11
18
  def current_page
12
19
  @page
13
20
  end
14
-
21
+
22
+
23
+ # Outputs the content of a particular container. If the user is in 'edit' mode the container and block controls will
24
+ # be rendered.
25
+ #
26
+ # Note: As of Jan 19, 2010, all render.html.erb templates must handle marking their content as 'html_safe'. This is
27
+ # bit of a pain, but I can't figure out how (or if) i can globally do that or not.
28
+ #
29
+ # @returns [String] The HTML content for the container.
15
30
  def container(name)
16
- content = instance_variable_get("@content_for_#{name}")
31
+ page_content = instance_variable_get("@_content_for")
32
+ content = page_content[name]
17
33
  if logged_in? && @page && @mode == "edit" && current_user.able_to_edit?(@page)
18
34
  render :partial => 'cms/pages/edit_container', :locals => {:name => name, :content => content}
19
35
  else
@@ -21,6 +37,18 @@ module Cms
21
37
  end
22
38
  end
23
39
 
40
+ # Determine if a given container has any blocks within it. Useful for determine if markup should be conditionally included
41
+ # when a block is present, but not shown if no block was added. For example:
42
+ #
43
+ # <% unless container_has_block? :sidebar %>
44
+ # <div id="sidebar">
45
+ # <%= container :sidebar %>
46
+ # </div>
47
+ # <% end %>
48
+ #
49
+ # @param [Symbol] name The name of the container to check
50
+ # @param [Proc] block
51
+ # @return [Boolean] True if the container has one or more blocks, or if we are in edit mode. False otherwise.
24
52
  def container_has_block?(name, &block)
25
53
  has_block = (@mode == "edit") || current_page.connectable_count_for_container(name) > 0
26
54
  logger.info "mode = #{@mode}, has_block = #{has_block}"
@@ -30,12 +58,17 @@ module Cms
30
58
  has_block
31
59
  end
32
60
  end
33
-
61
+
62
+ # Add the code to render the CMS toolbar.
34
63
  def cms_toolbar
35
- instance_variable_get("@content_for_layout")
64
+ toolbar = <<HTML
65
+ <iframe src="#{cms_toolbar_path(:page_id => @page.id, :page_version => @page.version, :mode => @mode, :page_toolbar => @show_page_toolbar ? 1 : 0) }" width="100%" height="#{@show_page_toolbar ? 159 : 100 }px" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" name="cms_toolbar"></iframe>
66
+ HTML
67
+ toolbar.html_safe if @show_toolbar
36
68
  end
37
69
 
38
70
 
71
+
39
72
  # Renders breadcrumbs based on the current_page. This will generate an unordered list representing the
40
73
  # current page and all it's ancestors including the root name of of the site. The UL can be styled via CSS for
41
74
  # layout purposes. Each breadcrumb except the last will be linked to the page in question.
@@ -61,15 +94,14 @@ module Cms
61
94
  items = []
62
95
  ancestors[start..ancestors.size].each_with_index do |sec,i|
63
96
  items << content_tag(:li,
64
- link_to(h(sec.name), sec.actual_path),
65
- (i == 0 ? {:class => "first"} : {}))
97
+ link_to(h(sec.name), sec.actual_path), (i == 0 ? {:class => "first"} : {}))
66
98
  end
67
99
  if !show_parent && current_page.section.path == current_page.path
68
100
  items[items.size-1] = content_tag(:li, h(current_page.section.name))
69
101
  else
70
102
  items << content_tag(:li, h(current_page.page_title))
71
103
  end
72
- content_tag(:ul, "\n #{items.join("\n ")}\n", :class => "breadcrumbs")
104
+ content_tag(:ul, "\n #{items.join("\n ")}\n".html_safe, :class => "breadcrumbs")
73
105
  end
74
106
 
75
107
  def render_portlet(name)
@@ -85,7 +117,8 @@ module Cms
85
117
 
86
118
  # Determines if the current_user is able to do specific permissions.
87
119
  def able_to?(*perms, &block)
88
- yield if current_user.able_to?(*perms)
120
+ block.call if current_user.able_to?(*perms)
121
+ return ''
89
122
  end
90
123
 
91
124
  end
@@ -33,7 +33,7 @@ module Cms
33
33
  end
34
34
 
35
35
  private
36
- # Returns the name of the collection that this resouce belongs to
36
+ # Returns the name of the collection that this resource belongs to
37
37
  # the resource can be a ContentType, ActiveRecord::Base instance
38
38
  # or just a string or symbol
39
39
  def resource_collection_name(resource)
@@ -6,8 +6,7 @@ module Cms
6
6
  module RenderingHelper
7
7
  def render_connector_and_connectable(connector, connectable)
8
8
  if logged_in? && @mode == "edit" && current_user.able_to_edit?(connector.page)
9
- render :partial => 'cms/pages/edit_connector',
10
- :locals => { :connector => connector, :connectable => connectable}
9
+ render(:partial => 'cms/pages/edit_connector', :locals => { :connector => connector, :connectable => connectable})
11
10
  else
12
11
  render_connectable(connectable)
13
12
  end
@@ -16,8 +15,8 @@ module Cms
16
15
  def render_connectable(content_block)
17
16
  if content_block
18
17
  if content_block.class.renderable?
19
- logger.info "..... Rendering connectable #{content_block.class} ##{content_block.id} #{"v#{content_block.version}" if content_block.respond_to?(:version)}"
20
- content_block.perform_render(@controller)
18
+ logger.debug "Rendering connectable #{content_block.class} ##{content_block.id} #{"v#{content_block.version}" if content_block.respond_to?(:version)}"
19
+ content_block.perform_render(controller)
21
20
  else
22
21
  logger.warn "Connectable #{content_block.class} ##{content_block.id} is not renderable"
23
22
  end
@@ -1,51 +1,13 @@
1
1
  module Cms
2
2
  module SectionNodesHelper
3
-
4
- def access_status(section_node, public_sections)
5
- access_icon = :unlocked
6
- unless public_sections.include?(section_node)
7
- access_icon = :locked
8
- end
9
- access_icon
10
- end
11
-
12
- def section_icons(section_node, children=[])
13
- folder_style = ""
14
- expander_image = "expand.png"
15
- if top_level_section?(section_node)
16
- folder_style = " large"
17
- expander_image = "gray_expand.png"
18
- end
19
- if children.empty?
20
- image_tag("cms/sitemap/no_contents.png", :class => "no_folder_toggle#{folder_style}")
3
+ def section_icons(node)
4
+
5
+ if (node.root? || node.parent.root? || node.parent.parent.root?)
6
+ node.child_nodes.empty? ? image_tag("cms/sitemap/no_contents.png", :class => "no_folder_toggle large") : image_tag("cms/sitemap/gray_expand.png", :class => "folder_toggle large")
21
7
  else
22
- image_tag("cms/sitemap/#{expander_image}", :class => "folder_toggle#{folder_style}")
8
+ node.child_nodes.empty? ? image_tag("cms/sitemap/no_contents.png", :class => "no_folder_toggle") : image_tag("cms/sitemap/expand.png", :class => "folder_toggle")
23
9
  end
24
10
  end
25
11
 
26
- # Renders the ul for a given node (Page/Section/Link/etc)
27
- # Default look:
28
- # - First level pages/sections use 'big' icons
29
- # - All non-first level items should be hidden.
30
- def sitemap_ul_tag(node)
31
- opts = {
32
- :id => "section_node_#{node.section_node.id}",
33
- :class => "section_node"
34
- }
35
- opts[:class] += " rootlet" if in_first_level?(node)
36
- opts[:style] = "display: none" unless in_first_level?(node)
37
- tag("ul", opts, true)
38
- end
39
-
40
- def in_first_level?(node)
41
- node.section_node.depth == 1
42
- end
43
-
44
- private
45
-
46
- def top_level_section?(node)
47
- node.depth <= 2
48
- end
49
-
50
12
  end
51
13
  end
@@ -4,10 +4,7 @@ class AbstractFileBlock < ActiveRecord::Base
4
4
 
5
5
  validates_presence_of :name
6
6
 
7
- named_scope :by_section, lambda { |section| {
8
- :include => {:attachment => :section_node },
9
- :conditions => ["section_nodes.ancestry = ?", section.node.ancestry_path] }
10
- }
7
+ scope :by_section, lambda { |section| { :include => {:attachment => :section_node }, :conditions => ["section_nodes.section_id = ?", section.id] } }
11
8
 
12
9
  def path
13
10
  attachment_file_path
@@ -17,16 +14,4 @@ class AbstractFileBlock < ActiveRecord::Base
17
14
  true
18
15
  end
19
16
 
20
- def set_attachment_path
21
- if @attachment_file_path && @attachment_file_path != attachment.file_path
22
- attachment.file_path = @attachment_file_path
23
- end
24
- end
25
-
26
- def set_attachment_section
27
- if @attachment_section_id && @attachment_section_id != attachment.section
28
- attachment.section_id = @attachment_section_id
29
- end
30
- end
31
-
32
17
  end
@@ -3,6 +3,9 @@ require 'fileutils'
3
3
 
4
4
  class Attachment < ActiveRecord::Base
5
5
 
6
+ #----- Constants ----------------------------------------------------------------
7
+ UNKNOWN_MIME_TYPE = 'application/octet-stream'
8
+
6
9
  #----- Macros ----------------------------------------------------------------
7
10
 
8
11
  is_archivable
@@ -10,37 +13,64 @@ class Attachment < ActiveRecord::Base
10
13
  uses_soft_delete
11
14
  is_userstamped
12
15
  is_versioned
13
- attr_accessor :temp_file
14
16
 
15
- #----- Callbacks -------------------------------------------------------------
17
+ # Rails 3 uses a new ActionDispatch::Http::UploadedFile. This holds that during the file processing.
18
+ attr_accessor :uploaded_file
19
+
20
+ # This exists for backwards compatibility
21
+ alias_method :temp_file, :uploaded_file
22
+ alias_method :temp_file=, :uploaded_file=
16
23
 
24
+ #----- Callbacks -------------------------------------------------------------
17
25
  before_validation :make_dirty_if_temp_file
18
26
  before_validation :prepend_file_path_with_slash
19
27
  before_validation :extract_file_extension_from_file_name
20
28
  before_validation :extract_file_type_from_temp_file
21
29
  before_validation :extract_file_size_from_temp_file
22
30
  before_validation :set_file_location
31
+ before_save :process_section
23
32
 
24
33
  after_save :write_temp_file_to_storage_location
25
34
  after_save :clear_ivars
26
-
35
+
36
+
27
37
  #----- Associations ----------------------------------------------------------
28
38
 
29
- include Addressable
30
- include Addressable::DeprecatedPageAccessors
31
39
  has_one :section_node, :as => :node
32
- alias :node :section_node
33
40
 
34
41
  #----- Validations -----------------------------------------------------------
35
42
 
36
43
  validates_presence_of :temp_file, :message => "You must upload a file", :on => :create
37
44
  validates_presence_of :file_path
38
45
  validates_uniqueness_of :file_path
46
+ validates_presence_of :section_id
47
+
48
+ #----- Virtual Attributes ----------------------------------------------------
49
+
50
+ def section_id
51
+ @section_id ||= section_node ? section_node.section_id : nil
52
+ end
53
+
54
+ def section_id=(section_id)
55
+ if @section_id != section_id
56
+ dirty!
57
+ @section_id = section_id
58
+ end
59
+ end
60
+
61
+ def section
62
+ @section ||= section_node ? section_node.section : nil
63
+ end
39
64
 
40
65
  def section=(section)
41
- dirty! if self.section != section
42
- super(section)
66
+ logger.debug {"Attachment#section=(#{section})"}
67
+ if @section != section
68
+ dirty!
69
+ @section_id = section ? section.id : nil
70
+ @section = section
71
+ end
43
72
  end
73
+
44
74
  #----- Callbacks Methods -----------------------------------------------------
45
75
 
46
76
  def make_dirty_if_temp_file
@@ -62,6 +92,11 @@ class Attachment < ActiveRecord::Base
62
92
  def extract_file_type_from_temp_file
63
93
  unless temp_file.blank?
64
94
  self.file_type = temp_file.content_type
95
+
96
+ # Some
97
+ if self.file_type == nil
98
+ self.file_type = UNKNOWN_MIME_TYPE
99
+ end
65
100
  end
66
101
  end
67
102
 
@@ -82,25 +117,25 @@ class Attachment < ActiveRecord::Base
82
117
  end
83
118
  end
84
119
 
85
- #def process_section
86
- # if section_node
87
- # section_node.move_to_end(parent)
88
- # #end
89
- # #logger.info "processing section, section_id => #{section_id}, section_node => #{section_node.inspect}"
90
- # #if section_node && !section_node.new_record? && section_node.section_id != section_id
91
- # # section_node.move_to_end(Section.find(section_id))
92
- # else
93
- # build_section_node(:node => self, :parent => parent)
94
- # end
95
- #end
120
+ def process_section
121
+ #logger.info "processing section, section_id => #{section_id}, section_node => #{section_node.inspect}"
122
+ if section_node && !section_node.new_record? && section_node.section_id != section_id
123
+ section_node.move_to_end(Section.find(section_id))
124
+ else
125
+ build_section_node(:node => self, :section_id => section_id)
126
+ end
127
+ end
96
128
 
97
129
  def write_temp_file_to_storage_location
98
130
  unless temp_file.blank?
131
+ actual_temp_file = temp_file.tempfile
132
+
133
+ Rails.logger.warn "I want to write out #{temp_file.tempfile}"
99
134
  FileUtils.mkdir_p File.dirname(full_file_location)
100
- if temp_file.local_path
101
- FileUtils.copy temp_file.local_path, full_file_location
135
+ if actual_temp_file.path
136
+ FileUtils.copy actual_temp_file.path, full_file_location
102
137
  else
103
- open(full_file_location, 'w') {|f| f << temp_file.read }
138
+ open(full_file_location, 'w') {|f| f << actual_temp_file.read }
104
139
  end
105
140
 
106
141
  if Cms.attachment_file_permission
@@ -6,12 +6,12 @@ class Category < ActiveRecord::Base
6
6
  validates_presence_of :category_type_id, :name
7
7
  validates_uniqueness_of :name, :scope => :category_type_id
8
8
 
9
- named_scope :named, lambda{|name| {:conditions => ['categories.name = ?', name]}}
9
+ scope :named, lambda{|name| {:conditions => ['categories.name = ?', name]}}
10
10
 
11
- named_scope :of_type, lambda{|type_name| {:include => :category_type, :conditions => ['category_types.name = ?', type_name], :order => 'categories.name'}}
12
- named_scope :top_level, :conditions => ['categories.parent_id is null']
11
+ scope :of_type, lambda{|type_name| {:include => :category_type, :conditions => ['category_types.name = ?', type_name], :order => 'categories.name'}}
12
+ scope :top_level, :conditions => ['categories.parent_id is null']
13
13
 
14
- named_scope :list, :include => :category_type
14
+ scope :list, :include => :category_type
15
15
 
16
16
  def ancestors
17
17
  fn = lambda do |cat, parents|
@@ -3,7 +3,7 @@ class CategoryType < ActiveRecord::Base
3
3
  validates_presence_of :name
4
4
  validates_uniqueness_of :name
5
5
  is_searchable
6
- named_scope :named, lambda {|name| {:conditions => ['category_types.name = ?', name] } }
6
+ scope :named, lambda {|name| {:conditions => ['category_types.name = ?', name] } }
7
7
 
8
8
  # Return a map when the key is category type id as a string
9
9
  # and the value is an array of arrays, each entry having
@@ -28,7 +28,7 @@ class CategoryType < ActiveRecord::Base
28
28
  end
29
29
 
30
30
  def cannot_be_deleted_message
31
- categories.count.zero? ? nil : "This cannot be deleted because it is in use in #{categories.count} #{"category".pluralize(categories.count)}"
31
+ categories.count.zero? ? nil : "This cannot be deleted because it is in use in #{categories.count} #{"category".pluralize_unless_one(categories.count)}"
32
32
  end
33
33
 
34
34
  end
@@ -0,0 +1,46 @@
1
+ module Cms
2
+
3
+ # Trying to get rendering working:
4
+ #
5
+ # Things that need to happen:
6
+ # 1. Need to add all helpers from that the Cms::ContentController has access to:
7
+ # 2. Add helpers for the portlet or content block
8
+ #
9
+ # Understanding how Cms::ContentController renders a template:
10
+ # 1. It starts with a layout, which is a CMS template.
11
+ # 2. show.html.erb is called, which iterates over the connectables, adding content_for for each of the yields.
12
+ #
13
+ # TODOS
14
+ # There are currently way to many values getting copied into this view, including:
15
+ # content_block (desired) - From ContentController
16
+ # content - An attribute of the block itself.
17
+ class ViewContext < ActionView::Base
18
+
19
+ # @param [ActionController::Base] controller The CMS controller rendering the overall page
20
+ # @param [Hash] attributes_to_assign All the values that should be passed to this View as @attributes available.
21
+ def initialize(controller, attributes_to_assign)
22
+ @controller = controller
23
+ super(@controller.view_paths, attributes_to_assign, @controller)
24
+
25
+
26
+ helpers = controller.class._helpers
27
+ self.class.send(:include, helpers)
28
+
29
+ # Make all Route helpers available in the view, i.e. cms_xyz_path and cms_xyz_url
30
+ self.class.send(:include, Rails.application.routes.url_helpers)
31
+
32
+ # See what values are getting copied into template
33
+ # Rails.logger.warn "Assigned these variables: #{attributes_to_assign}"
34
+
35
+ end
36
+
37
+ # We want content_for to be called on the controller's view, not this inner view
38
+ def content_for(name, content=nil, &block)
39
+ Rails.logger.warn "content_for(#{name}, #{content}, block) called."
40
+ @controller.instance_variable_get("@template").content_for(name, content, &block)
41
+ end
42
+
43
+ end
44
+
45
+
46
+ end
@@ -6,14 +6,15 @@ class Connector < ActiveRecord::Base
6
6
  alias :move_up :move_higher
7
7
  alias :move_down :move_lower
8
8
 
9
- named_scope :for_page_version, lambda{|pv| {:conditions => {:page_version => pv}}}
10
- named_scope :for_connectable_version, lambda{|cv| {:conditions => {:connectable_version => cv}}}
11
- named_scope :for_connectable, lambda{|c|
9
+ scope :for_page_version, lambda{|pv| {:conditions => {:page_version => pv}}}
10
+ scope :for_connectable_version, lambda{|cv| {:conditions => {:connectable_version => cv}}}
11
+ scope :for_connectable, lambda{|c|
12
+ # puts "Finding for_connectable for #{c.id} and #{c.class.base_class.name}"
12
13
  {:conditions => { :connectable_id => c.id, :connectable_type => c.class.base_class.name }}
13
14
  }
14
- named_scope :in_container, lambda{|container| {:conditions => {:container => container}}}
15
- named_scope :at_position, lambda{|position| {:conditions => {:position => position}}}
16
- named_scope :like, lambda{|connector|
15
+ scope :in_container, lambda{|container| {:conditions => {:container => container}}}
16
+ scope :at_position, lambda{|position| {:conditions => {:position => position}}}
17
+ scope :like, lambda{|connector|
17
18
  {:conditions => {
18
19
  :connectable_id => connector.connectable_id,
19
20
  :connectable_type => connector.connectable_type,