browsercms 3.1.5 → 3.3.0.beta

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 (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
data/lib/acts_as_list.rb CHANGED
@@ -7,7 +7,7 @@ module ActsAsList
7
7
  # The class that has this specified needs to have a +position+ column defined as an integer on
8
8
  # the mapped database table.
9
9
  #
10
- # To Do list example:
10
+ # Todo list example:
11
11
  #
12
12
  # class TodoList < ActiveRecord::Base
13
13
  # has_many :todo_items, :order => "position"
data/lib/browsercms.rb CHANGED
@@ -1,14 +1,18 @@
1
+ require 'cms/engine'
1
2
  require 'cms/extensions'
2
- require 'cms/init'
3
3
  require 'cms/routes'
4
4
  require 'cms/caching'
5
- require 'cms/addressable'
6
- require 'cms/error_pages'
7
5
 
8
6
  #Load libraries that are included with CMS
9
7
  require 'acts_as_list'
10
8
  ActiveRecord::Base.send(:include, ActsAsList)
11
9
 
12
- #Include CMS Behaviors
13
- ActiveRecord::Base.send(:include, Cms::Acts::ContentBlock)
14
- require 'cms/behaviors'
10
+ require 'cms/acts'
11
+ require 'cms/authentication'
12
+ require 'cms/behaviors'
13
+ require 'cms/domain_support'
14
+ require 'cms/date_picker'
15
+ require 'cms/content_rendering_support'
16
+
17
+ # This shouldn't be necessary, except for the need to get into the loadpath for testing.
18
+ require 'command_line'
data/lib/cms/acts.rb ADDED
@@ -0,0 +1,7 @@
1
+ # Requires all files in the Acts As directory
2
+ #
3
+ # This adds the ContentBlock behavior to all Active Record objects.
4
+ Dir["#{File.dirname(__FILE__)}/acts/*.rb"].each do |b|
5
+ require File.join("cms", "acts", File.basename(b, ".rb"))
6
+ end
7
+ ActiveRecord::Base.send(:include, Cms::Acts::ContentBlock)
@@ -0,0 +1,4 @@
1
+ # Require all files in the cms/authentication directory
2
+ Dir["#{File.dirname(__FILE__)}/authentication/*.rb"].each do |b|
3
+ require File.join("cms", "authentication", File.basename(b, ".rb"))
4
+ end
@@ -105,7 +105,7 @@ module Cms
105
105
  #
106
106
  # We can return to this location by calling #redirect_back_or_default.
107
107
  def store_location
108
- session[:return_to] = request.request_uri
108
+ session[:return_to] = request.fullpath
109
109
  end
110
110
 
111
111
  # Redirect to the URI stored by the most recent store_location call or
data/lib/cms/behaviors.rb CHANGED
@@ -22,7 +22,7 @@
22
22
  # ClassMethods module and including the InstanceMethods module into the Article class.
23
23
  # Each Behavior typically has one macro method which takes an options Hash, which of course
24
24
  # varies from Behavior to Behavior. The macro method will also sometimes call other
25
- # macro methods, like before_fitler, named_scope, etc. to modify the model.
25
+ # macro methods, like before_fitler, scope, etc. to modify the model.
26
26
  # Consult the documentation for each module for specific details as to what
27
27
  # the Behavior does.
28
28
  module Cms::Behaviors; end
@@ -12,8 +12,8 @@ module Cms
12
12
  @is_archivable = true
13
13
  include InstanceMethods
14
14
 
15
- named_scope :archived, :conditions => {:archived => true}
16
- named_scope :not_archived, :conditions => {:archived => false}
15
+ scope :archived, :conditions => {:archived => true}
16
+ scope :not_archived, :conditions => {:archived => false}
17
17
  end
18
18
  end
19
19
  module InstanceMethods
@@ -1,36 +1,34 @@
1
1
  module Cms
2
2
  module Behaviors
3
3
  module Attaching
4
- SANITIZATION_REGEXES = [[/\s/, '_'], [/[&+()]/, '-'], [/[=?!'"{}\[\]#<>%]/, '']]
5
-
4
+ SANITIZATION_REGEXES = [ [/\s/, '_'], [/[&+()]/, '-'], [/[=?!'"{}\[\]#<>%]/, ''] ]
5
+
6
6
  def self.included(model_class)
7
7
  model_class.extend(MacroMethods)
8
8
  end
9
-
10
- module MacroMethods
9
+ module MacroMethods
11
10
  def belongs_to_attachment?
12
11
  !!@belongs_to_attachment
13
12
  end
14
-
15
13
  def belongs_to_attachment(options={})
16
14
  @belongs_to_attachment = true
17
15
  include InstanceMethods
18
- before_validation :process_attachment
16
+ before_validation :process_attachment
19
17
  before_save :update_attachment_if_changed
20
18
  after_save :clear_attachment_ivars
21
- belongs_to :attachment, :dependent => :destroy
22
-
19
+ belongs_to :attachment, :dependent => :destroy
20
+
23
21
  validates_each :attachment_file do |record, attr, value|
24
22
  if record.attachment && !record.attachment.valid?
25
23
  record.attachment.errors.each do |err_field, err_value|
26
24
  if err_field.to_sym == :file_path
27
25
  record.errors.add(:attachment_file_path, err_value)
28
- else
26
+ else
29
27
  record.errors.add(:attachment_file, err_value)
30
28
  end
31
- end
29
+ end
32
30
  end
33
- end
31
+ end
34
32
  end
35
33
  end
36
34
  module InstanceMethods
@@ -86,6 +84,7 @@ module Cms
86
84
  end
87
85
 
88
86
  def process_attachment
87
+ Rails.logger.warn "Processing attachment (#{attachment_file})"
89
88
  if attachment.nil? && attachment_file.blank?
90
89
  unless attachment_file_path.blank?
91
90
  errors.add(:attachment_file, "You must upload a file")
@@ -94,30 +93,22 @@ module Cms
94
93
  unless attachment_section_id.blank?
95
94
  errors.add(:attachment_file, "You must upload a file")
96
95
  return false
97
- end
96
+ end
98
97
  else
99
98
  build_attachment if attachment.nil?
100
99
  attachment.temp_file = attachment_file
101
- handle_setting_attachment_path
100
+ Rails.logger.warn "After attachment (#{attachment.temp_file})"
101
+
102
+ set_attachment_file_path
102
103
  if attachment.file_path.blank?
103
104
  errors.add(:attachment_file_path, "File Name is required for attachment")
104
105
  return false
105
106
  end
106
- handle_setting_attachment_section
107
- unless attachment.section
107
+ set_attachment_section
108
+ if attachment.section_id.blank?
108
109
  errors.add(:attachment_file, "Section is required for attachment")
109
110
  return false
110
111
  end
111
-
112
- end
113
- end
114
-
115
- # Define at :set_attachment_path if you would like to override the way file_path is set
116
- def handle_setting_attachment_path
117
- if self.respond_to? :set_attachment_path
118
- set_attachment_path
119
- else
120
- use_default_attachment_path
121
112
  end
122
113
  end
123
114
 
@@ -125,26 +116,18 @@ module Cms
125
116
  @attachment_file = nil
126
117
  @attachment_file_path = nil
127
118
  @attachment_section_id = nil
128
- @attachment_section = nil
119
+ @attachment_section = nil
129
120
  end
130
121
 
131
- # Implement a :set_attachment_section method if you would like to override the way the section is set
132
- def handle_setting_attachment_section
133
- if self.respond_to? :set_attachment_section
134
- set_attachment_section
135
- else
136
- use_default_attachment_section
137
- end
138
- end
139
-
140
- # Default behavior for assigning a section, if a block does not define its own.
141
- def use_default_attachment_section
122
+ # Override this method if you would like to override the way the section is set
123
+ def set_attachment_section
142
124
  if !attachment_file.blank?
143
125
  attachment.section = Section.root.first
144
126
  end
145
127
  end
146
128
 
147
- def use_default_attachment_path
129
+ # Override this method if you would like to override the way file_path is set
130
+ def set_attachment_file_path
148
131
  if !attachment_file.blank?
149
132
  attachment.file_path = "/attachments/#{File.basename(attachment_file.original_filename).to_s.downcase}"
150
133
  end
@@ -157,12 +140,14 @@ module Cms
157
140
  end
158
141
 
159
142
  def update_attachment_if_changed
143
+ logger.debug {"UPDATE ATTACHMENT if changed" }
160
144
  if attachment
161
145
  attachment.archived = archived if self.class.archivable?
162
146
  if respond_to?(:revert_to_version) && revert_to_version
163
147
  attachment.revert_to(revert_to_version.attachment_version)
164
148
  elsif new_record? || attachment.changed? || attachment.temp_file
165
- attachment.save
149
+ saved_attach = attachment.save
150
+ logger.warn "Attachment was saved = #{saved_attach}"
166
151
  end
167
152
  self.attachment_version = attachment.draft.version
168
153
  end
@@ -188,16 +173,16 @@ module Cms
188
173
  (published? && live_version?) ? attachment_file_path : "/cms/attachments/#{attachment_id}?version=#{attachment_version}"
189
174
  else
190
175
  nil
191
- end
176
+ end
192
177
  end
193
-
178
+
194
179
  # Forces this record to be changed, even if nothing has changed
195
180
  # This is necessary if just the section.id has changed, for example
196
181
  def dirty!
197
182
  # Seems like a hack, is there a better way?
198
183
  self.updated_at = Time.now
199
- end
200
-
184
+ end
185
+
201
186
  end
202
187
  end
203
188
  end
@@ -15,7 +15,7 @@ module Cms
15
15
 
16
16
  belongs_to :category
17
17
 
18
- named_scope :in_category, lambda{|cat| {:conditions => ["category_id = ?", cat.id]}}
18
+ scope :in_category, lambda{|cat| {:conditions => ["category_id = ?", cat.id]}}
19
19
 
20
20
  end
21
21
  end
@@ -22,7 +22,9 @@ module Cms
22
22
  attr_accessor :updated_by_page
23
23
 
24
24
  after_create :connect_to_page
25
- after_save :update_connected_pages
25
+ after_save :update_connected_pages, :unless=>:skip_callbacks
26
+
27
+
26
28
  end
27
29
  end
28
30
  module ClassMethods
@@ -39,12 +41,11 @@ module Cms
39
41
  module InstanceMethods
40
42
 
41
43
  def connected_pages
42
- return @connected_pages if @connected_pages
43
- @connected_pages = Page.connected_to(self)
44
+ Page.currently_connected_to(self)
44
45
  end
45
46
 
46
47
  def connected_page_count
47
- Page.connected_to(self).count
48
+ Page.currently_connected_to(self).count
48
49
  end
49
50
 
50
51
  def content_block_type
@@ -67,33 +68,47 @@ module Cms
67
68
  connected_page.create_connector(self, connect_to_container)
68
69
  end
69
70
  true
70
- end
71
-
71
+ end
72
+
73
+ #
74
+ # After blocks are updated, all pages they are connected to should also be updated,
75
+ # connecting the page to the new version of the block, as well as putting the pages into
76
+ # draft status if necessary.
77
+ #
72
78
  def update_connected_pages
73
79
  # If this is versioned, then we need make new versions of all the pages this is connected to
74
- if self.class.versioned?
80
+ if self.class.versioned?
75
81
  #logger.info "..... Updating connected pages for #{self.class} #{id} v#{version}"
76
82
 
77
83
  #Get all the pages the previous version of this connectable was connected to
78
- draft_version = draft.version
79
- Page.connected_to(:connectable => self, :version => (draft_version - 1)).all.each do |p|
84
+ draft_version = draft.version
85
+ connected_pages = Page.connected_to(:connectable => self, :version => (draft_version - 1)).all
86
+ # puts "Found #{connected_pages}"
87
+ connected_pages.each do |p|
80
88
  # This is needed in the case of updating page,
81
89
  # which updates this object, so as not to create a loop
82
- if p != updated_by_page
90
+ if p != updated_by_page
83
91
  #This just creates a new version of the page
84
92
  action = deleted? ? "Deleted" : "Edited"
85
93
  p.update_attributes(:version_comment => "#{self.class.name} ##{id} was #{action}")
86
94
 
87
95
  #The previous step will copy over a connector pointing to the previous version of this connectable
88
96
  #We need to change that to point at the new version of this connectable
89
- p.connectors.for_page_version(p.draft.version).for_connectable(self).each do |con|
97
+ connectors_for_page = p.connectors
98
+ # puts "cfp #{connectors_for_page}"
99
+ page_draft_version = p.draft.version
100
+ cnn = connectors_for_page.for_page_version(page_draft_version)
101
+ # puts "Connectors for page version #{page_draft_version} are #{cnn.all}"
102
+ connectors = cnn.for_connectable(self)
103
+ # puts "Found connectors #{connectors.all}"
104
+ connectors.each do |con|
90
105
  con.update_attribute(:connectable_version, draft_version)
91
106
  end
92
107
  end
93
108
  end
94
109
  end
95
110
  true
96
- end
111
+ end
97
112
  end
98
113
  end
99
114
  end
@@ -127,10 +127,10 @@ module Cms
127
127
  include InstanceMethods
128
128
 
129
129
  # Provide default options
130
- options[:class_name] ||= self.class_name + 'Attribute'
130
+ options[:class_name] ||= self.model_name + 'Attribute'
131
131
  options[:table_name] ||= options[:class_name].tableize
132
132
  options[:relationship_name] ||= options[:class_name].tableize.to_sym
133
- options[:foreign_key] ||= self.class_name.foreign_key
133
+ options[:foreign_key] ||= self.model_name.foreign_key
134
134
  options[:base_foreign_key] ||= self.name.underscore.foreign_key
135
135
  options[:name_field] ||= 'name'
136
136
  options[:value_field] ||= 'value'
@@ -178,7 +178,8 @@ module Cms
178
178
  unless private_method_defined? :method_missing_without_dynamic_attributes
179
179
 
180
180
  # Carry out delayed actions before save
181
- after_validation_on_update :save_modified_dynamic_attributes
181
+ after_validation :save_modified_dynamic_attributes
182
+ # after_validation_on_update :save_modified_dynamic_attributes
182
183
 
183
184
  # Make attributes seem real
184
185
  alias_method :method_missing_without_dynamic_attributes, :method_missing
@@ -222,6 +223,7 @@ module Cms
222
223
  # like normal attributes in the fact that the database is not touched
223
224
  # until save is called.
224
225
  def save_modified_dynamic_attributes
226
+ return if new_record?
225
227
  return if @save_dynamic_attr.nil?
226
228
  @save_dynamic_attr.each do |s|
227
229
  model, attr_name = s
@@ -339,7 +341,8 @@ module Cms
339
341
  kls
340
342
  end
341
343
 
342
- # This overrides the attributes= defined in ActiveRecord::Base
344
+ # Overrides the attributes= defined in ActiveRecord::Base
345
+ #
343
346
  # The only difference is that this doesn't check to see if the
344
347
  # model responds_to the method before sending it
345
348
  # This is needed for Rails 2.2
@@ -349,7 +352,7 @@ module Cms
349
352
  attributes.stringify_keys!
350
353
 
351
354
  multi_parameter_attributes = []
352
- attributes = remove_attributes_protected_from_mass_assignment(attributes) if guard_protected_attributes
355
+ attributes = sanitize_for_mass_assignment(attributes) if guard_protected_attributes
353
356
 
354
357
  attributes.each do |k, v|
355
358
  if k.include?("(")
@@ -13,8 +13,8 @@ module Cms
13
13
  extend ClassMethods
14
14
  include InstanceMethods
15
15
 
16
- named_scope :hidden, :conditions => {:hidden => true}
17
- named_scope :not_hidden, :conditions => {:hidden => false}
16
+ scope :hidden, :conditions => {:hidden => true}
17
+ scope :not_hidden, :conditions => {:hidden => false}
18
18
  end
19
19
  end
20
20
  module ClassMethods
@@ -1,5 +1,8 @@
1
1
  module Cms
2
2
  module Behaviors
3
+
4
+ # Allows content to be marked as publishable or not. In practice, this has a direct dependency on
5
+ # Versioning, so it may not make sense to be separated out this way.
3
6
  module Publishing
4
7
  def self.included(model_class)
5
8
  model_class.extend(MacroMethods)
@@ -22,8 +25,8 @@ module Cms
22
25
 
23
26
  after_save :publish_for_non_versioned
24
27
 
25
- named_scope :published, :conditions => {:published => true}
26
- named_scope :unpublished, lambda {
28
+ scope :published, :conditions => {:published => true}
29
+ scope :unpublished, lambda {
27
30
  if versioned?
28
31
  { :joins => :versions,
29
32
  :conditions =>
@@ -64,12 +67,23 @@ module Cms
64
67
  logger.warn("Could not publish, #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}")
65
68
  false
66
69
  end
67
-
70
+
71
+ # Force the publishing of this block.
72
+ #
73
+ # Warning: The behavior of calling the following on an existing block:
74
+ # block.save_on_publish
75
+ # block.save!
76
+ #
77
+ # Is different than calling:
78
+ # block.publish!
79
+ #
80
+ # And it probably shouldn't be. Try to merge the 'else' with the 'Versioning#create_or_update' method to eliminate duplication
68
81
  def publish!
69
82
  if new_record?
70
83
  self.publish_on_save = true
71
84
  save!
72
85
  else
86
+ # Do this for publishing existing blocks.
73
87
  transaction do
74
88
  if self.class.versioned?
75
89
  d = draft
@@ -81,15 +95,20 @@ module Cms
81
95
  d.update_attributes(:published => true)
82
96
 
83
97
  # copy values from the draft to the main record
84
- quoted_attributes = d.send(:attributes_with_quotes, false, false, self.class.versioned_columns)
98
+ quoted_attributes = d.send(:arel_attributes_values, false, false, self.class.versioned_columns)
99
+
100
+ #the values from the draft MAY have a relation of the versioned module
101
+ #as opposed to the actual class itself
102
+ #eg Page::Version, and not Page
103
+ #so remap to the actual arel_table´
104
+ #I haven't figured out why this is, but I know it happens when you call save! on Page
105
+ #during seeding of data
106
+ if self.class.arel_table.name != quoted_attributes.keys[0].relation.name
107
+ quoted_attributes = quoted_attributes.inject({}){|hash, pair| hash[self.class.arel_table[pair[0].name]] = pair[1]; hash}
108
+ end
85
109
 
86
110
  # Doing the SQL ourselves to avoid callbacks
87
- connection.update(
88
- "UPDATE #{self.class.quoted_table_name} " +
89
- "SET #{quoted_comma_pair_list(connection, quoted_attributes)} " +
90
- "WHERE #{connection.quote_column_name(self.class.primary_key)} = #{quote_value(id)}",
91
- "#{self.class.name} Publish"
92
- )
111
+ self.class.unscoped.where(self.class.arel_table[self.class.primary_key].eq(id)).arel.update(quoted_attributes)
93
112
  end
94
113
  else
95
114
  connection.update(
@@ -106,24 +125,15 @@ module Cms
106
125
  end
107
126
 
108
127
  def status
109
- return @status if @status
110
- @status = live? ? :published : :draft
111
- end
128
+ live? ? :published : :draft
129
+ end
112
130
 
113
131
  def status_name
114
132
  status.to_s.titleize
115
133
  end
116
134
 
117
135
  def live?
118
- if self.class.versioned?
119
- if (respond_to?(:latest_version) && self.latest_version)
120
- version == latest_version && published?
121
- else
122
- live_version.version == draft.version && published?
123
- end
124
- else
125
- true
126
- end
136
+ self.class.versioned? ? live_version.version == draft.version && published? : true
127
137
  end
128
138
 
129
139
  end