zena 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. data/History.txt +23 -1
  2. data/MIT-LICENSE +2 -2
  3. data/README.rdoc +2 -15
  4. data/app/controllers/acls_controller.rb +1 -1
  5. data/app/controllers/documents_controller.rb +12 -3
  6. data/app/controllers/nodes_controller.rb +1 -3
  7. data/app/controllers/sites_controller.rb +7 -0
  8. data/app/controllers/versions_controller.rb +1 -1
  9. data/app/controllers/virtual_classes_controller.rb +7 -8
  10. data/app/models/acl.rb +3 -2
  11. data/app/models/relation_proxy.rb +2 -1
  12. data/app/models/role.rb +16 -0
  13. data/app/models/site.rb +48 -0
  14. data/app/models/text_document.rb +2 -1
  15. data/app/models/user.rb +2 -1
  16. data/app/models/zip.rb +2 -1
  17. data/app/views/acls/index.rhtml +11 -1
  18. data/app/views/documents/show.rhtml +1 -1
  19. data/app/views/relations/_add.erb +2 -2
  20. data/app/views/relations/_form.erb +5 -2
  21. data/app/views/relations/_li.erb +4 -1
  22. data/app/views/relations/index.erb +3 -3
  23. data/app/views/sites/_form.erb +1 -1
  24. data/app/views/sites/_job.erb +4 -0
  25. data/app/views/sites/index.erb +1 -1
  26. data/app/views/sites/jobs.erb +10 -0
  27. data/app/views/templates/document_create_tabs/_file.rhtml +3 -0
  28. data/app/views/zafu/default/Node-+search.zafu +2 -2
  29. data/bricks/acls/zena/init.rb +2 -1
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +5 -5
  31. data/bricks/acls/zena/test/sites/erebus/acls.yml +2 -2
  32. data/bricks/acls/zena/test/unit/acl_test.rb +2 -2
  33. data/bricks/grid/lib/bricks/grid.rb +110 -0
  34. data/bricks/grid/zena/init.rb +4 -0
  35. data/bricks/math/lib/bricks/math.rb +1 -0
  36. data/bricks/pdf/lib/bricks/pdf.rb +10 -1
  37. data/bricks/sphinx/zena/tasks.rb +8 -40
  38. data/bricks/spreadsheet/README +31 -0
  39. data/bricks/spreadsheet/lib/bricks/spreadsheet.rb +293 -0
  40. data/bricks/spreadsheet/zena/init.rb +3 -0
  41. data/bricks/spreadsheet/zena/test/sites/zena/links.yml +11 -0
  42. data/bricks/spreadsheet/zena/test/unit/xlsx_test.rb +5 -0
  43. data/bricks/spreadsheet/zena/test/zafu/README +27 -0
  44. data/bricks/spreadsheet/zena/test/zafu/spreadsheet.yml +19 -0
  45. data/bricks/worker/lib/bricks/worker.rb +11 -5
  46. data/bricks/worker/zena/init.rb +8 -0
  47. data/bricks/worker/zena/migrate/20120501091514_add_site_id_to_jobs.rb +9 -0
  48. data/bricks/zena/zena/migrate/01_base.rb +0 -7
  49. data/bricks/zena/zena/migrate/20111214112233_add_comment_to_relations.rb +9 -0
  50. data/config/bricks.yml +15 -1
  51. data/config/environments/production.rb +2 -2
  52. data/config/gems.yml +6 -1
  53. data/doc/zafu_changes.yml +1 -1
  54. data/lib/tasks/zena.rake +6 -2
  55. data/lib/zena/app.rb +1 -1
  56. data/lib/zena/code/default_syntax.rb +5 -1
  57. data/lib/zena/db_helper/mysql.rb +5 -1
  58. data/lib/zena/deploy/app_init.rhtml +11 -7
  59. data/lib/zena/deploy/awstats.conf.rhtml +1 -1
  60. data/lib/zena/deploy/start_stop.rhtml +5 -5
  61. data/lib/zena/deploy/vhost.rhtml +16 -2
  62. data/lib/zena/deploy.rb +5 -3
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/parser/zazen_rules.rb +7 -7
  65. data/lib/zena/remote/node.rb +7 -0
  66. data/lib/zena/routes.rb +4 -5
  67. data/lib/zena/test_controller.rb +18 -1
  68. data/lib/zena/use/action.rb +13 -4
  69. data/lib/zena/use/ajax.rb +10 -4
  70. data/lib/zena/use/authlogic.rb +1 -1
  71. data/lib/zena/use/calendar.rb +4 -0
  72. data/lib/zena/use/conditional.rb +3 -0
  73. data/lib/zena/use/dates.rb +44 -4
  74. data/lib/zena/use/display.rb +45 -15
  75. data/lib/zena/use/forms.rb +59 -30
  76. data/lib/zena/use/query_builder.rb +12 -12
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/rendering.rb +18 -17
  79. data/lib/zena/use/urls.rb +2 -1
  80. data/lib/zena/use/zafu_safe_definitions.rb +0 -9
  81. data/lib/zena/use/zafu_templates.rb +2 -2
  82. data/lib/zena/use/zazen.rb +1 -3
  83. data/lib/zena/use.rb +13 -2
  84. data/lib/zena.rb +8 -2
  85. data/public/images/bullet_back.png +0 -0
  86. data/public/javascripts/grid.js +535 -0
  87. data/public/javascripts/tablekit.js +0 -0
  88. data/public/javascripts/window.js +0 -0
  89. data/public/javascripts/zena.js +17 -7
  90. data/public/stylesheets/admin.css +5 -1
  91. data/public/stylesheets/grid.css +19 -0
  92. data/test/fixtures/files/TestNode.zafu +123 -311
  93. data/test/fixtures/files/translations_fr.yml +6 -1
  94. data/test/functional/acls_controller_test.rb +2 -2
  95. data/test/functional/nodes_controller_test.rb +17 -11
  96. data/test/functional/virtual_classes_controller_test.rb +1 -1
  97. data/test/integration/query_node/basic.yml +9 -0
  98. data/test/integration/query_node/dates.yml +1 -1
  99. data/test/integration/zafu_compiler/ajax.yml +9 -9
  100. data/test/integration/zafu_compiler/basic.yml +0 -24
  101. data/test/integration/zafu_compiler/dates.yml +24 -7
  102. data/test/integration/zafu_compiler/display.yml +45 -2
  103. data/test/integration/zafu_compiler/errors.yml +0 -6
  104. data/test/integration/zafu_compiler/forms.yml +41 -3
  105. data/test/integration/zafu_compiler/query.yml +29 -3
  106. data/test/integration/zafu_compiler/roles.yml +0 -4
  107. data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
  108. data/test/integration/zafu_compiler_test.rb +11 -3
  109. data/test/selenium/Add/add3.rsel +8 -8
  110. data/test/selenium/Drop/drop1.rsel +12 -12
  111. data/test/selenium/Drop/drop2.rsel +14 -14
  112. data/test/selenium/Drop/drop3.rsel +21 -21
  113. data/test/selenium/Drop/drop4.rsel +1 -1
  114. data/test/selenium/Edit/edit2.rsel +9 -9
  115. data/test/selenium/Edit/edit4.rsel +55 -0
  116. data/test/selenium/Edit/edit5.rsel +41 -0
  117. data/test/selenium/Edit/edit6.rsel +53 -0
  118. data/test/selenium/Filter/0setup.rsel +12 -0
  119. data/test/selenium/Filter/filter1.rsel +9 -0
  120. data/test/selenium/Filter/filter2.rsel +9 -0
  121. data/test/selenium/Form/form1.rsel +1 -1
  122. data/test/selenium/Form/form2.rsel +1 -1
  123. data/test/selenium/Form/form3.rsel +15 -0
  124. data/test/selenium/Grid/0setup.rsel +13 -0
  125. data/test/selenium/Grid/grid1.rsel +11 -0
  126. data/test/selenium/Swap/0setup.rsel +12 -0
  127. data/test/selenium/Swap/swap1.rsel +13 -0
  128. data/test/selenium/Swap/swap2.rsel +11 -0
  129. data/test/selenium/Toggle/toggle1.rsel +6 -6
  130. data/test/sites/zena/versions.yml +1 -1
  131. data/test/unit/relation_proxy_test.rb +36 -0
  132. data/test/unit/site_test.rb +10 -2
  133. data/test/unit/zena/use/rendering_test.rb +7 -6
  134. data/test/unit/zena/use/zazen_test.rb +1 -2
  135. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +24 -0
  136. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +58 -0
  137. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +88 -0
  138. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +27 -0
  139. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +23 -0
  140. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +19 -0
  141. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +19 -0
  142. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +16 -0
  143. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +16 -0
  144. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +16 -0
  145. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +18 -0
  146. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +18 -0
  147. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +16 -0
  148. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +18 -0
  149. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +16 -0
  150. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +16 -0
  151. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +16 -0
  152. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +16 -0
  153. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +16 -0
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +16 -0
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +18 -0
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +16 -0
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +17 -0
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +17 -0
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +18 -0
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +22 -0
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +23 -0
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +25 -0
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +18 -0
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +18 -0
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +18 -0
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +16 -0
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +16 -0
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +20 -0
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +20 -0
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +16 -0
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +16 -0
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +16 -0
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +16 -0
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +16 -0
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +16 -0
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +16 -0
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +18 -0
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +16 -0
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +16 -0
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +16 -0
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +16 -0
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +16 -0
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +16 -0
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +16 -0
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +16 -0
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +16 -0
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +16 -0
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +16 -0
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +16 -0
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +16 -0
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +16 -0
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +16 -0
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +16 -0
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +16 -0
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +16 -0
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +16 -0
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +16 -0
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +16 -0
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +16 -0
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +16 -0
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +16 -0
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +16 -0
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +16 -0
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +16 -0
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +16 -0
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +16 -0
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +16 -0
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +16 -0
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +16 -0
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +104 -0
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +17 -0
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +13 -0
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +25 -0
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +166 -0
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +304 -0
  218. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +37 -0
  219. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +52 -0
  220. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  221. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +118 -0
  222. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  223. data/vendor/TextMate/Zena.tmbundle/info.plist +17 -0
  224. data/vendor/plugins/selenium-on-rails/CHANGELOG +125 -0
  225. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +202 -0
  226. data/vendor/plugins/selenium-on-rails/README.md +202 -0
  227. data/vendor/plugins/selenium-on-rails/Rakefile +38 -0
  228. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +265 -0
  229. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +148 -0
  230. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +231 -0
  231. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +195 -0
  232. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +295 -0
  233. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +219 -0
  234. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +156 -0
  235. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +179 -0
  236. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +223 -0
  237. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +441 -0
  238. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +3098 -0
  239. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +2080 -0
  240. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +116 -0
  241. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +116 -0
  242. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +126 -0
  243. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +150 -0
  244. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +422 -0
  245. data/vendor/plugins/selenium-on-rails/doc/files/README.html +321 -0
  246. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +108 -0
  247. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +101 -0
  248. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +222 -0
  249. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +109 -0
  250. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +111 -0
  251. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +101 -0
  252. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +101 -0
  253. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +118 -0
  254. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +101 -0
  255. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +101 -0
  256. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +114 -0
  257. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +113 -0
  258. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +120 -0
  259. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +108 -0
  260. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +115 -0
  261. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +42 -0
  262. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +43 -0
  263. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +182 -0
  264. data/vendor/plugins/selenium-on-rails/doc/index.html +24 -0
  265. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +208 -0
  266. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +19 -0
  267. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +50 -0
  268. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +16 -0
  269. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +14 -0
  270. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +11 -0
  271. data/vendor/plugins/selenium-on-rails/init.rb +15 -0
  272. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +122 -0
  273. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +16 -0
  274. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +8 -0
  275. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +215 -0
  276. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +57 -0
  277. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +36 -0
  278. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +61 -0
  279. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +20 -0
  280. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +44 -0
  281. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +87 -0
  282. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +56 -0
  283. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +116 -0
  284. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +1002 -0
  285. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +514 -0
  286. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +91 -0
  287. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +24 -0
  288. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +11 -0
  289. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +30 -0
  290. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +18 -0
  291. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +5 -0
  292. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +9 -0
  293. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +67 -0
  294. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +26 -0
  295. data/vendor/plugins/selenium-on-rails/routes.rb +24 -0
  296. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +7 -0
  297. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +8 -0
  298. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +110 -0
  299. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +109 -0
  300. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +145 -0
  301. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +55 -0
  302. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +177 -0
  303. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +177 -0
  304. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  305. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  306. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +298 -0
  307. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +16 -0
  308. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +205 -0
  309. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  310. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  311. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  312. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  313. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  314. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  315. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  316. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  317. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +1759 -0
  318. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +1800 -0
  319. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
  320. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  321. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  322. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  323. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +2006 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +101 -0
  326. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +815 -0
  327. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
  328. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +958 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +283 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +383 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +91 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +69 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +1616 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +72 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +3184 -0
  337. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +2300 -0
  338. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +153 -0
  339. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +377 -0
  340. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +175 -0
  341. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +148 -0
  342. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +695 -0
  343. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +1362 -0
  344. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +5 -0
  345. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +803 -0
  346. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +1537 -0
  347. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +979 -0
  348. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +3 -0
  349. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +75 -0
  350. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +153 -0
  351. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  352. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +43 -0
  353. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +316 -0
  354. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +566 -0
  355. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +2816 -0
  356. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +549 -0
  357. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +149 -0
  358. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +2450 -0
  359. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +8 -0
  360. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +37 -0
  361. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +27 -0
  362. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +72 -0
  363. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +157 -0
  364. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +708 -0
  365. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +242 -0
  366. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +67 -0
  367. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +43 -0
  368. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +35 -0
  369. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +31 -0
  370. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +109 -0
  371. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +17 -0
  372. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +51 -0
  373. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +101 -0
  374. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +1 -0
  375. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +12 -0
  376. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +6 -0
  377. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +2 -0
  378. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +6 -0
  379. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +1 -0
  380. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +5 -0
  381. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +5 -0
  382. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +7 -0
  383. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +8 -0
  384. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +7 -0
  385. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +1 -0
  386. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +1 -0
  387. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +1 -0
  388. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +1 -0
  389. data/zena.gemspec +290 -7
  390. metadata +346 -52
  391. data/app/views/nodes/_table.rhtml +0 -14
  392. data/lib/zena/use/grid.rb +0 -154
data/History.txt CHANGED
@@ -1,3 +1,25 @@
1
+ == 1.2.0
2
+
3
+ * Major changes
4
+ * Added 'remove_from_db' method to remove a site from the database.
5
+ * Fixed asset caching PLEASE FIX YOUR VHOST FILES: rake zena:create_vhost -s host='xxxxx'.
6
+ * Fixed deadlock_retry (a bug in the error message aborted the retry).
7
+ * Created 'spreadsheet' brick to ease xlsx and csv generation. <===== TODO: Document
8
+ * Better JS based grid editor.
9
+
10
+ * Minor changes
11
+ * Enabled Acl during document upload.
12
+ * Fixed a bug when using [edit] in a list with [add].
13
+ * Fixed 'unknown this' bug in [calendar] when rendering in a [block].
14
+ * Enabled 'alt_class' to work on multiple elements ([each]).
15
+ * Fixed ajax bugs with dom_ids in nested partials.
16
+ * Better Acl display, comments on relations.
17
+ * Support for 'to_date' on time object with proper timezone translation. <===== TODO: Document
18
+ * Time to 'year' should use timezone.
19
+ * Added tprefix to [select] (with default value) to ease translated options for select. <===== TODO: Document
20
+ * Fixed bug when using [input] checkbox with param.
21
+ * Added jobs list in admin links.
22
+
1
23
  == 1.1.3 2011-11-09
2
24
 
3
25
  * Major changes
@@ -263,4 +285,4 @@
263
285
  == 0.11.1 2009-04-03
264
286
 
265
287
  * Minor enhancements
266
- * Better testing of custom queries using latest querybuilder (0.5.2)
288
+ * Better testing of custom queries using latest querybuilder (0.5.2)
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007-2009 Gaspard Bucher
1
+ Copyright (c) 2007-2012 Gaspard Bucher
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
16
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
17
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
18
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- THE SOFTWARE.
19
+ THE SOFTWARE.
data/README.rdoc CHANGED
@@ -108,18 +108,5 @@ Versions:
108
108
  monit (debian package to monitor your mongrel processes)
109
109
 
110
110
 
111
- === Very experimental webDAV
112
- Should not be used for production.
113
-
114
- add this to nodes_controller macros:
115
- act_as_railsdav
116
- include Zena::WebDav
117
-
118
- add this to 'config/environment.rb'
119
- require File.join(File.dirname(__FILE__), '../lib/webdav_adapter')
120
-
121
- install railsdav
122
- # script/plugin install http://svn.liverail.net/svn/plugins/railsdav
123
-
124
- install dependencies
125
- # sudo gem install mime-types, unicode
111
+ === Install MySQL on Lion (with rbenv: remove the sudo)
112
+ http://stackoverflow.com/questions/6340174/mysql-gem-on-osx-10-7-lion
@@ -6,7 +6,7 @@ class AclsController < ApplicationController
6
6
 
7
7
  def index
8
8
  secure(Acl) do
9
- @acls = Acl.paginate(:all, :order => 'priority DESC, name ASC', :per_page => 20, :page => params[:page])
9
+ @acls = Acl.paginate(:all, :order => 'action ASC, priority DESC, name ASC', :per_page => 20, :page => params[:page])
10
10
  end
11
11
  @acl = Acl.new
12
12
 
@@ -61,7 +61,15 @@ class DocumentsController < ApplicationController
61
61
  else
62
62
  page.call 'UploadProgress.setAsFinished'
63
63
  page.delay(1) do # allow the progress bar fade to complete
64
- page.redirect_to document_url(@node[:zip])
64
+ if params[:redir]
65
+ page << "Zena.reload_and_close(#{params[:redir].inspect})"
66
+ end
67
+ if params[:js]
68
+ page << params[:js]
69
+ end
70
+ if !params[:redir] && !params[:js]
71
+ page.redirect_to document_url(@node[:zip])
72
+ end
65
73
  end
66
74
  end
67
75
  end
@@ -90,9 +98,10 @@ class DocumentsController < ApplicationController
90
98
  def find_node
91
99
 
92
100
  if params[:id]
93
- @node = secure!(Document) { Document.find_by_zip(params[:id]) }
101
+ @node = visitor.find_node(nil, params[:id], nil, request)
102
+ raise ActiveRecord::RecordNotFound unless @node.kind_of?(Document)
94
103
  elsif parent_zip = (params[:node] || params)[:parent_id]
95
- @parent = secure!(Node) { Node.find_by_zip(parent_zip)}
104
+ @parent = visitor.find_node(nil, parent_zip, nil, request)
96
105
  else
97
106
  # TODO: a better error message
98
107
  raise ActiveRecord::RecordNotFound
@@ -25,8 +25,6 @@ class NodesController < ApplicationController
25
25
  before_filter :check_path, :only => [:index, :show]
26
26
  layout :popup_layout, :only => [:edit, :import]
27
27
 
28
- include Zena::Use::Grid::ControllerMethods
29
-
30
28
  def index
31
29
  if @node = secure(Node) { Node.find(current_site.root_id) }
32
30
  respond_to do |format|
@@ -235,7 +233,7 @@ class NodesController < ApplicationController
235
233
  if @node.errors.empty?
236
234
  flash.now[:notice] = 'Node was successfully created.'
237
235
  format.html {
238
- redirect_to params[:redir] || zen_path(@node, :mode => params[:mode])
236
+ redirect_to params[:redir] || zen_path(@node, :mode => params[:mode], :new => 'true')
239
237
  }
240
238
  format.js
241
239
  format.xml { render :xml => @node.to_xml(:root => 'node'), :status => :created, :location => node_url(@node) }
@@ -23,6 +23,13 @@ class SitesController < ApplicationController
23
23
  end
24
24
  end
25
25
 
26
+ def jobs
27
+ @jobs = @site.respond_to?(:jobs) ? @site.jobs : []
28
+ respond_to do |format|
29
+ format.html
30
+ end
31
+ end
32
+
26
33
  def edit
27
34
  respond_to do |format|
28
35
  format.html
@@ -74,7 +74,7 @@ class VersionsController < ApplicationController
74
74
  @edit = true
75
75
  end
76
76
  if params[:close] == 'true'
77
- js_data << "Zena.reloadAndClose();"
77
+ js_data << "Zena.reload_and_close();"
78
78
  else
79
79
  js_data << <<-END_TXT
80
80
  Zena.editor_setup('#{preview_node_version_path(:node_id=>@node[:zip], :id=>(@node.version.number || 0), :escape => false)}');
@@ -63,18 +63,17 @@ class VirtualClassesController < ApplicationController
63
63
  @yaml.gsub!(/\A---\s*\n/, "--- \n")
64
64
  current = current_compared_to(data)
65
65
  a = clean_yaml(current).gsub('{}', '')
66
- #a = Zena::CodeSyntax.new(a, 'yaml').to_html
66
+ a = Zena::CodeSyntax.new(a, 'yaml').to_html
67
67
  b = @yaml
68
- #b = Zena::CodeSyntax.new(b, 'yaml').to_html
68
+ b = Zena::CodeSyntax.new(b, 'yaml').to_html
69
69
  @diff = Differ.diff_by_line(b, a).format_as(:html)
70
70
 
71
71
  # UGLY HACK to not escape <ins> and <del>
72
- @diff.gsub!(/<((ins|del)[^>]*)>/, '[yaml_diff[\1]]')
73
- @diff.gsub!(/<\/(ins|del)>/, '[yaml_diff[/\1]]')
74
- @diff = Zena::CodeSyntax.new(@diff, 'yaml').to_html
75
- @diff.gsub!(/\[yaml_diff\[([^\]]+)\]\]/) do
76
- "<#{$1.gsub('&quot;', '"')}>"
77
- end
72
+ #@diff.gsub!(/<((ins|del)[^>]*)>/, '_ZYAML__\2_')
73
+ #@diff.gsub!(/<\/(ins|del)>/, '_ZYAMLC__\1_')
74
+ #@diff = Zena::CodeSyntax.new(@diff, 'yaml').to_html
75
+ #@diff.gsub!(/_ZYAML__(\w+)_/, '<\1 class="differ">')
76
+ #@diff.gsub!(/_ZYAMLC__(\w+)_/, '</\1>')
78
77
  end
79
78
  end
80
79
  end
data/app/models/acl.rb CHANGED
@@ -77,9 +77,10 @@ class Acl < ActiveRecord::Base
77
77
  @node = node
78
78
  @params = params
79
79
  @asset_host = request ? request.port.to_i == Zena::ASSET_PORT : false
80
+ query_str = safe_eval(self.query)
80
81
 
81
82
  # We add a stupid order clause to avoid the 'order by title' thing.
82
- query = Node.build_query(:first, self.query + ' order by id asc',
83
+ query = Node.build_query(:first, query_str + ' order by id asc',
83
84
  :node_name => '@node',
84
85
  :main_class => @node.virtual_class,
85
86
  :rubyless_helper => self
@@ -94,7 +95,7 @@ class Acl < ActiveRecord::Base
94
95
  errors.add(:query, err.message)
95
96
  end
96
97
  nil
97
- rescue ::RubyLess::Error => err
98
+ rescue => err
98
99
  errors.add(:query, err.message)
99
100
  nil
100
101
  end
@@ -160,7 +160,7 @@ class RelationProxy < Relation
160
160
  end
161
161
  attributes_to_update[:id] = v.map{|r| r.id.to_i}
162
162
  else
163
- attributes_to_update[:id] = v.map(&:to_i)
163
+ attributes_to_update[:id] = v.select {|e| !e.blank?}.map(&:to_i)
164
164
  end
165
165
  else
166
166
  attributes_to_update[:id] = v.blank? ? nil : v.to_i
@@ -176,6 +176,7 @@ class RelationProxy < Relation
176
176
  if zip_values.kind_of?(Array)
177
177
  attributes_to_update[:id] = []
178
178
  zip_values.each do |zip|
179
+ next if zip.blank?
179
180
  if id = secure(Node) { Node.translate_pseudo_id(zip, :id, @start) }
180
181
  # ok
181
182
  id_to_zip[id] = zip
data/app/models/role.rb CHANGED
@@ -22,6 +22,7 @@ class Role < ActiveRecord::Base
22
22
  include RubyLess
23
23
  # Columns defined in the role.
24
24
  safe_method :columns => {:class => ['Column'], :method => 'defined_safe_columns'}
25
+ safe_method [:column, String] => {:class => 'Column', :nil => true, :method => 'defined_safe_column'}
25
26
 
26
27
  safe_method :name => String
27
28
 
@@ -191,6 +192,21 @@ class Role < ActiveRecord::Base
191
192
  @safe_column ||= defined_columns.values.sort {|a,b| a.name <=> b.name}
192
193
  end
193
194
 
195
+ # By default, all defined columns are safe (see )
196
+ def defined_safe_column(name)
197
+ if real_class?
198
+ # Get columns from the 'native' schema of the real class (this schema is a Property::Role,
199
+ # not a VirtualClass or ::Role).
200
+ #
201
+ # Only columns explicitly declared safe are safe here
202
+ if real_class.safe_method_type(name)
203
+ real_class.schema.defined_columns[name]
204
+ end
205
+ else
206
+ defined_columns[name]
207
+ end
208
+ end
209
+
194
210
  def export
195
211
  res = Zafu::OrderedHash.new
196
212
  res['type'] = real_class? ? 'Class' : type
data/app/models/site.rb CHANGED
@@ -16,6 +16,39 @@ The #Site model holds configuration information for a site:
16
16
  +default_lang+:: The default language of the site.
17
17
  =end
18
18
  class Site < ActiveRecord::Base
19
+ CLEANUP_SQL = [
20
+ ['attachments' , 'site_id = ?'],
21
+ ['cached_pages' , 'site_id = ?'],
22
+ ['cached_pages_nodes' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
23
+ ['caches' , 'site_id = ?'],
24
+ ['columns' , 'site_id = ?'],
25
+ ['comments' , 'site_id = ?'],
26
+ ['data_entries' , 'site_id = ?'],
27
+ ['discussions' , 'site_id = ?'],
28
+ ['groups_users' , 'group_id IN (SELECT id FROM groups WHERE site_id = ?)'],
29
+ ['groups' , 'site_id = ?'],
30
+
31
+ ['idx_nodes_datetimes' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
32
+ ['idx_nodes_floats' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
33
+ ['idx_nodes_integers' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
34
+ ['idx_nodes_ml_strings', 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
35
+ ['idx_nodes_strings' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
36
+ ['idx_projects' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
37
+ ['idx_templates' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
38
+
39
+ ['iformats' , 'site_id = ?'],
40
+ ['links' , 'source_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
41
+ ['links' , 'target_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
42
+
43
+ ['nodes_roles' , 'node_id IN (SELECT id FROM nodes WHERE site_id = ?)'],
44
+ ['relations' , 'site_id = ?'],
45
+ ['roles' , 'site_id = ?'],
46
+ ['sites' , 'id = ?'],
47
+ ['users' , 'site_id = ?'],
48
+ ['versions' , 'site_id = ?'],
49
+ ['zips' , 'site_id = ?'],
50
+ ['nodes' , 'site_id = ?'],
51
+ ]
19
52
  ACTIONS = %w{clear_cache rebuild_index}
20
53
  include RubyLess
21
54
  safe_method :host => String, :lang_list => [String], :default_lang => String
@@ -439,6 +472,21 @@ class Site < ActiveRecord::Base
439
472
  true
440
473
  end
441
474
 
475
+ # This is only called from the console (not accessible through controllers)
476
+ def remove_from_db
477
+ node_cleanup = nil
478
+ site_id = self.id.to_s
479
+ CLEANUP_SQL.each do |table, clause|
480
+ clause = clause.gsub('?', site_id)
481
+ begin
482
+ Zena::Db.execute("DELETE FROM #{table} WHERE (#{clause})")
483
+ rescue => err
484
+ puts clause
485
+ puts err
486
+ end
487
+ end
488
+ end
489
+
442
490
  private
443
491
  def valid_site
444
492
  errors.add(:host, 'invalid') if self[:host].nil? || (self[:host] =~ /^\./) || (self[:host] =~ /[^\w\.\-]/)
@@ -15,7 +15,8 @@ class TextDocument < Document
15
15
  class << self
16
16
  # Return true if a new text document can be created with the content_type. Used by the superclass Document to choose the corret subclass when creating a new object.
17
17
  def accept_content_type?(content_type)
18
- (content_type =~ /^(text)/ && Zena::TYPE_TO_EXT[content_type.chomp] != ['rtf']) || (content_type =~ /x-javascript|xml/)
18
+ (content_type =~ /^(text|image\/svg\+xml|x-javascript)/) &&
19
+ (Zena::TYPE_TO_EXT[content_type.chomp] != ['rtf'])
19
20
  end
20
21
 
21
22
  # Return true if the content_type can change independantly from the file
data/app/models/user.rb CHANGED
@@ -14,7 +14,8 @@ If you want to give administrative rights to a user, simply put him/her into the
14
14
 
15
15
  Users have access rights defined by the groups they belong to. They also have a 'status' indicating the kind of
16
16
  things they can/cannot do :
17
- +:user+:: (60): can read/write/publish
17
+ +:admin+:: (60): can read/write/publish in any group, can create users/groups
18
+ +:user+:: (50): can read/write/publish
18
19
  +:commentator+:: (40): can write comments
19
20
  +:moderated+:: (30): can write moderated comments
20
21
  +:reader+:: (20): can only read
data/app/models/zip.rb CHANGED
@@ -1,6 +1,7 @@
1
1
 
2
2
  # Dummy model for zip counter...
3
3
  # TODO: there might be a better way to avoid errors when loading fixtures "zips.yml"
4
- class Zip
4
+ class ZipClass < ActiveRecord::Base
5
+ set_table_name :zips
5
6
  end
6
7
 
@@ -12,6 +12,16 @@
12
12
  <th><%= _('exec group') %></th>
13
13
  <th><%= _('exec skin') %></th>
14
14
  </tr>
15
- <%= render :partial=>'acls/li', :collection => @acls %>
15
+
16
+ <% action = nil; @acls.each do |acl| -%>
17
+ <% if acl.action != action; action= acl.action -%>
18
+ <tr>
19
+ <th class='nav sub constant' colspan='9'>
20
+ <%= action %>
21
+ </th>
22
+ </tr>
23
+ <% end -%>
24
+ <%= render :partial=>'acls/li', :collection=>[acl] %>
25
+ <% end -%>
16
26
  <%= render :partial=>'acls/add' %>
17
27
  </table>
@@ -12,6 +12,6 @@
12
12
  <td class='preview'><p><%= img_tag(@node, :mode=>'pv') %></p><p class='size'><%= fsize(@node.size) %></p></td>
13
13
  <td class='description'><h3 class='title s<%= @node.version.status %>'><span class='doc_id'><%= @node[:zip] %></span> <%= @node.title %> <%= node_actions(@node, :actions => :all) %></h3><p class='summary'><%= zazen(@node.summary) %></p></td></tr>
14
14
  </table>
15
- <p class='btn_validate'><%= link_to _("upload more"), new_document_path(:parent_id => @node.parent_zip) %> // <%= link_to_function _('close'), "Zena.reloadAndClose();" %></p>
15
+ <p class='btn_validate'><%= link_to _("upload more"), new_document_path(:parent_id => @node.parent_zip) %> // <%= link_to_function _('close'), "Zena.reload_and_close();" %></p>
16
16
  </div>
17
17
  </div>
@@ -1,7 +1,7 @@
1
1
  <tr id='add_relation' class='btn_add'>
2
2
  <td class='add'><%= link_to_function _('btn_relation_add'), "['add_relation', 'add_relation_form'].each(Element.toggle); $('relation_source_role').focus();" %></td>
3
- <td colspan='3' class='add_relation'></td>
3
+ <td colspan='4' class='add_relation'></td>
4
4
  </tr>
5
5
  <tr id='add_relation_form' style='display:none;'>
6
6
  <%= render :partial=>'relations/form' %>
7
- </tr>
7
+ </tr>
@@ -5,7 +5,7 @@
5
5
  link_to_function _('btn_x'), "['add_relation', 'add_relation_form'].each(Element.toggle)"
6
6
  end %>
7
7
  </td>
8
- <td class="add" colspan="3">
8
+ <td class="add" colspan="4">
9
9
  <div id='relation_errors'><%= error_messages_for(:relation, :object => @relation) %></div>
10
10
  <% unless @relation.new_record? %>
11
11
  <%= form_remote_tag(:url => relation_path(@relation), :method => :put ) %>
@@ -36,6 +36,9 @@
36
36
  <td class="light" ><%= text_field('relation', 'target_icon', :size=>18 ) %></td>
37
37
  <td class="dark" ><%= text_field('relation', 'source_icon', :size=>18 ) %></td>
38
38
  </tr>
39
+ <tr><td colspan='3'>
40
+ <%= text_area('relation', 'comment', :rows => 2, :cols => 40) %></td>
41
+ </td></tr>
39
42
  <tr><td colspan='3'><p class='btn_validate'><input type='submit' value='<%= _('validate') %>'/></p></td></tr>
40
43
  </table>
41
44
  </form>
@@ -44,4 +47,4 @@
44
47
  <p class='destroy'><%= _('destroy relation (with all links)') %> <input type='submit' value='<%= _('destroy') %>'></p>
45
48
  </form>
46
49
  <% end -%>
47
- </td>
50
+ </td>
@@ -25,4 +25,7 @@
25
25
  </td>
26
26
  <% end -%>
27
27
  </td>
28
- </tr>
28
+ <td class='comment zazen'>
29
+ <%= li.comment ? zazen(li.comment) : '' %>
30
+ </td>
31
+ </tr>
@@ -1,9 +1,9 @@
1
1
  <h2 class='title'><%= _('relations') %></h2>
2
2
  <table id='relation_list' class='admin' cellspacing="0">
3
- <tr><th class='nav' colspan='4'><%= will_paginate @relations %></th></tr>
3
+ <tr><th class='nav' colspan='5'><%= will_paginate @relations %></th></tr>
4
4
  <% @classes.keys.sort.each do |kpath| -%>
5
5
  <tr class='virtual_class'>
6
- <th class='nav sub constant' colspan='4'>
6
+ <th class='nav sub constant' colspan='5'>
7
7
  <span class='kpath'><%= kpath %></span> <%= VirtualClass.find_by_kpath(kpath).to_s %>
8
8
  </th>
9
9
  </tr>
@@ -12,4 +12,4 @@
12
12
  <% end -%>
13
13
  <% end -%>
14
14
  <%= render :partial=>'relations/add' %>
15
- </table>
15
+ </table>
@@ -25,7 +25,7 @@
25
25
  <tr><td class='label'><%= _('options') %></td><td>
26
26
  <% Site.attributes_for_form[:bool].each do |sym| -%>
27
27
  <input type='hidden' name='site[<%= sym %>]' value=''/>
28
- <input type='checkbox' name='site[<%= sym %>]' value='1'<%= @site[sym] ? " checked='checked'" : '' %>/> <%= _(sym.to_s) %><br/>
28
+ <input type='checkbox' name='site[<%= sym %>]' value='1'<%= @site.send(sym) ? " checked='checked'" : '' %>/> <%= _(sym.to_s) %><br/>
29
29
  <% end -%>
30
30
  </td></tr>
31
31
  <% if !@site.new_record? %>
@@ -0,0 +1,4 @@
1
+ <tr id='job<%= job[:id] %>'>
2
+ <td><%= format_date(job.run_at, :format =>_(Zena::Use::Dates::DATETIME)) %></td>
3
+ <td><%= job.info %></td>
4
+ </tr>
@@ -1,6 +1,6 @@
1
1
  <h2 class='title'><%= _('sites') %></h2>
2
2
 
3
3
  <table id='site_list' class='admin' cellspacing="0">
4
- <tr><th class='nav' colspan='10'><%= will_paginate @sites %>
4
+ <tr><th class='nav' colspan='10'><%= will_paginate @sites %></th></tr>
5
5
  <%= render :partial=>'sites/li', :collection=>@sites %>
6
6
  </table>
@@ -0,0 +1,10 @@
1
+ <h2 class='title'><%= _('jobs') %></h2>
2
+
3
+ <table id='tasks_list' class='admin jobs' cellspacing="0">
4
+ <tr>
5
+ <th do='t'>execution</th>
6
+ <th do='t'>info</th>
7
+ <th do='t'></th>
8
+ </tr>
9
+ <%= render :partial=>'sites/job', :collection=>@jobs %>
10
+ </table>
@@ -1,5 +1,8 @@
1
1
  <%= upload_form_tag(:action => 'upload') %>
2
2
  <%= hidden_field 'node', 'parent_id', :value=>@node.parent_zip %>
3
+ <% [:redir, :js].each do |p|; next unless params[p] %>
4
+ <input type='hidden' name='<%= p %>' value='<%= h params[p] %>'/>
5
+ <% end %>
3
6
  <p class="btn_validate"><input type="submit" value='<%= _('validate') %>'/></p>
4
7
 
5
8
  <%= upload_field %>
@@ -6,13 +6,13 @@
6
6
 
7
7
  <ul id='search_results' do='search_results'>
8
8
  <li class='result_entry' do='each'>
9
- <p class='result_image' do='Document'>
9
+ <p class='result_image' do='Document?'>
10
10
  <r:link format='data' do='img' alt_src='icon' mode='pv'/>
11
11
  <r:else do='link' do='img' alt_src='icon' mode='pv'/>
12
12
  </p>
13
13
  <p class='result_name'><r:link/></p>
14
14
  <p class='result_path'><r:show attr='short_path'/></p>
15
- <r:summary/>
15
+ <r:zazen attr='summary'/>
16
16
  <div class='clear'></div>
17
17
  </li>
18
18
  <r:else>
@@ -1 +1,2 @@
1
- Zena.use Bricks::Acls
1
+ Zena.use Bricks::Acls
2
+ Site::CLEANUP_SQL.unshift ['acls', 'site_id = ?']
@@ -82,7 +82,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
82
82
  Zena::Db.execute "UPDATE acls SET format = 'csv' WHERE id = #{acls_id(:rap)}"
83
83
  login(:hades)
84
84
  # Create special mode template
85
- secure(Template) { Template.create(:parent_id => nodes_id(:sky), :title => 'Node--csv', :text => 'foo;<r:title/>') }
85
+ secure(Template) { Template.create(:parent_id => nodes_id(:sky), :title => 'Node--csv', :text => %q{<r:spreadsheet><r:row><r:cell>foo</r:cell><r:cell eval='title'/></r:row></r:spreadsheet>}) }
86
86
  post 'http://erebus.host/session', :login=>'demeter', :password=>'demeter'
87
87
  end
88
88
 
@@ -94,7 +94,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
94
94
  should 'allow given mode' do
95
95
  get "http://erebus.host/oo/project#{nodes_zip(:queen)}.csv"
96
96
  assert_response :success
97
- assert_equal 'foo;My Queen', response.body
97
+ assert_equal "foo;My Queen;\n", response.body
98
98
  end
99
99
  end # with fixed format
100
100
 
@@ -144,7 +144,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
144
144
  context 'with acl for create enabled' do
145
145
  setup do
146
146
  # The visitor can create objects in assigned_project as direct parent
147
- Zena::Db.execute "UPDATE acls SET query = 'assigned_project', action = 'create' WHERE id = #{acls_id(:rap)}"
147
+ Zena::Db.execute "UPDATE acls SET query = '%q{assigned_project}', action = 'create' WHERE id = #{acls_id(:rap)}"
148
148
  @create_url = "http://erebus.host/nodes?node[parent_id]=#{nodes_zip(:queen)}&node[klass]=Page&node[title]=foobar"
149
149
  end
150
150
 
@@ -197,7 +197,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
197
197
  context 'with acl for update enabled' do
198
198
  setup do
199
199
  # The visitor can update objects in assigned_project
200
- Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'update' WHERE id = #{acls_id(:rap)}"
200
+ Zena::Db.execute "UPDATE acls SET query = '%q{nodes in project from assigned_project}', action = 'update' WHERE id = #{acls_id(:rap)}"
201
201
  @update_url = "http://erebus.host/nodes/#{nodes_zip(:persephone)}?node[title]=foobar"
202
202
  end
203
203
 
@@ -241,7 +241,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
241
241
  context 'with acl for delete enabled' do
242
242
  setup do
243
243
  # The visitor can delete objects in assigned_project
244
- Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'delete' WHERE id = #{acls_id(:rap)}"
244
+ Zena::Db.execute "UPDATE acls SET query = '%q{nodes in project from assigned_project}', action = 'delete' WHERE id = #{acls_id(:rap)}"
245
245
  @delete_url = "http://erebus.host/nodes/#{nodes_zip(:persephone)}"
246
246
  end
247
247
 
@@ -6,7 +6,7 @@ rap:
6
6
  # can read
7
7
  action: read
8
8
  # all 'assigned_projects' and the visitor's home node
9
- query: assigned_projects or self
9
+ query: "%q{assigned_projects or self}"
10
10
  # by receiving the 'erebus' access group
11
11
  exec_group: erebus
12
12
  # and viewing it through the 'sky' Skin.
@@ -25,7 +25,7 @@ self:
25
25
  # can read
26
26
  action: read
27
27
  # self
28
- query: nodes where 1=0
28
+ query: '%q{nodes where 1=0}'
29
29
  # by receiving the 'erebus' access group
30
30
  exec_group: erebus
31
31
  # and viewing it through the 'sky' Skin.
@@ -59,7 +59,7 @@ class AclTest < Zena::Unit::TestCase
59
59
  visitor.instance_eval do
60
60
  @group_ids = self.group_ids + [erebus_id]
61
61
  end
62
- assert subject.update_attributes(:query => 'nodes where 1 = #{asset_host? ? 1 : 0} in site')
62
+ assert subject.update_attributes(:query => "'nodes where 1 = \#{asset_host? ? 1 : 0} in site'")
63
63
  assert_nil subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request)
64
64
  assert_equal 'A plan to overrule Zeus', subject.authorize?(base_node, {:id => nodes_zip(:over_zeus)}, mock_request(:get, {}, 80)).title
65
65
  end
@@ -103,7 +103,7 @@ class AclTest < Zena::Unit::TestCase
103
103
 
104
104
  context 'with many acls' do
105
105
  setup do
106
- Zena::Db.execute "UPDATE acls SET query = 'nodes in project from assigned_project', action = 'read' WHERE id = #{acls_id(:self)}"
106
+ Zena::Db.execute "UPDATE acls SET query = \"'nodes in project from assigned_project'\", action = 'read' WHERE id = #{acls_id(:self)}"
107
107
  end
108
108
 
109
109
  should 'try acls in turn' do