zena 1.2.7 → 1.2.8

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 (407) hide show
  1. data/History.txt +80 -25
  2. data/Rakefile +2 -2
  3. data/app/controllers/columns_controller.rb +2 -2
  4. data/app/controllers/nodes_controller.rb +22 -29
  5. data/app/controllers/user_sessions_controller.rb +35 -10
  6. data/app/controllers/users_controller.rb +2 -2
  7. data/app/controllers/versions_controller.rb +2 -2
  8. data/app/models/group.rb +15 -1
  9. data/app/models/node.rb +109 -8
  10. data/app/models/role.rb +4 -0
  11. data/app/models/site.rb +64 -58
  12. data/app/models/template.rb +1 -1
  13. data/app/models/user.rb +135 -29
  14. data/app/models/user_session.rb +0 -1
  15. data/app/models/virtual_class.rb +11 -6
  16. data/app/views/columns/_form.html.erb +3 -1
  17. data/app/views/columns/_li.html.erb +1 -1
  18. data/app/views/columns/create.rjs +1 -1
  19. data/app/views/groups/_form.rhtml +16 -13
  20. data/app/views/relations/_form.erb +18 -6
  21. data/app/views/sites/_form.erb +12 -6
  22. data/app/views/users/_form.rhtml +23 -8
  23. data/app/views/users/_li.rhtml +14 -3
  24. data/app/views/users/index.rhtml +1 -1
  25. data/app/views/virtual_classes/_form.erb +12 -2
  26. data/app/views/zafu/default/Node-+login.zafu +8 -1
  27. data/app/views/zafu/default/Node-+search.zafu +1 -1
  28. data/bricks/acls/lib/bricks/acls.rb +1 -0
  29. data/bricks/acls/zena/migrate/20130903150356_longer_names_for_acl.rb +9 -0
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +2 -2
  31. data/bricks/currency/lib/bricks/currency.rb +120 -0
  32. data/bricks/currency/zena/test/unit/currency_test.rb +43 -0
  33. data/bricks/fs_skin/lib/bricks/fs_skin.rb +1 -1
  34. data/bricks/fs_skin/zena/skins/blog/Node-+search.zafu +1 -1
  35. data/bricks/fs_skin/zena/skins/blog/Node.zafu +1 -1
  36. data/bricks/fs_skin/zena/test/unit/fs_skin_view_test.rb +35 -0
  37. data/bricks/pdf/lib/bricks/pdf.rb +1 -1
  38. data/bricks/sphinx/lib/bricks/sphinx.rb +2 -0
  39. data/bricks/sphinx/zena/init.rb +14 -0
  40. data/bricks/tags/zena/test/zafu/tags.yml +5 -1
  41. data/bricks/worker/lib/bricks/worker.rb +3 -2
  42. data/bricks/zena/zena/migrate/20130829093753_add_versioned_flag_to_column.rb +10 -0
  43. data/bricks/zena/zena/migrate/20130903084909_count_login_attempts.rb +11 -0
  44. data/bricks/zena/zena/migrate/20131104153126_index_fullpath.rb +10 -0
  45. data/bricks/zena/zena/migrate/20131104210011_rebuild_fullpath_after_change.rb +10 -0
  46. data/bricks/zena/zena/migrate/20131105160420_add_skin_id_to_sites.rb +9 -0
  47. data/bricks/zena/zena/migrate/20131105175822_add_profile_to_users.rb +11 -0
  48. data/bricks/zena/zena/migrate/20140213120038_fix_idx_scope.rb +13 -0
  49. data/bricks/zena/zena/migrate/20140628140247_add_site_readonly.rb +9 -0
  50. data/config/bricks.yml +8 -4
  51. data/config/gems.yml +5 -3
  52. data/db/init/base/skins/default/Node-+login.zafu +8 -1
  53. data/db/init/base/skins/default/Node-+search.zafu +1 -1
  54. data/lib/bricks/loader.rb +5 -5
  55. data/lib/gettext_strings.rb +3 -0
  56. data/lib/tasks/zena.rake +25 -22
  57. data/lib/zafu/process/context.rb +4 -0
  58. data/lib/zena/acts/secure_node.rb +3 -3
  59. data/lib/zena/app.rb +1 -0
  60. data/lib/zena/deploy.rb +1 -1
  61. data/lib/zena/deploy/template.rb +1 -1
  62. data/lib/zena/foxy_parser.rb +5 -2
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/site_worker.rb +2 -2
  65. data/lib/zena/test_controller.rb +5 -2
  66. data/lib/zena/use/action.rb +9 -2
  67. data/lib/zena/use/ajax.rb +20 -4
  68. data/lib/zena/use/ancestry.rb +89 -15
  69. data/lib/zena/use/authlogic.rb +8 -2
  70. data/lib/zena/use/context.rb +1 -0
  71. data/lib/zena/use/display.rb +1 -97
  72. data/lib/zena/use/forms.rb +28 -8
  73. data/lib/zena/use/html_tags.rb +16 -7
  74. data/lib/zena/use/i18n.rb +1 -1
  75. data/lib/zena/use/prop_eval.rb +6 -1
  76. data/lib/zena/use/query_node.rb +69 -4
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/refactor.rb +5 -2
  79. data/lib/zena/use/relations.rb +1 -0
  80. data/lib/zena/use/rendering.rb +7 -4
  81. data/lib/zena/use/test_helper.rb +8 -4
  82. data/lib/zena/use/upload.rb +14 -0
  83. data/lib/zena/use/urls.rb +39 -23
  84. data/lib/zena/use/version_hash.rb +5 -2
  85. data/lib/zena/use/workflow.rb +116 -70
  86. data/lib/zena/use/zafu_eval.rb +41 -0
  87. data/lib/zena/use/zafu_safe_definitions.rb +1 -0
  88. data/lib/zena/use/zafu_templates.rb +32 -26
  89. data/lib/zena/use/zazen.rb +8 -7
  90. data/locale/app.pot +5 -1
  91. data/locale/de/LC_MESSAGES/zena.mo +0 -0
  92. data/locale/de/zena.po +385 -281
  93. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  94. data/locale/en/zena.po +378 -271
  95. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  96. data/locale/fr/zena.po +387 -272
  97. data/locale/it/LC_MESSAGES/zena.mo +0 -0
  98. data/locale/it/zena.po +433 -404
  99. data/locale/zena.pot +362 -268
  100. data/public/javascripts/grid.js +280 -104
  101. data/public/javascripts/zena.js +43 -15
  102. data/public/stylesheets/admin.css +8 -2
  103. data/public/stylesheets/grid.css +5 -2
  104. data/public/stylesheets/popup.css +1 -1
  105. data/test/fixtures/files/TestNode.zafu +51 -0
  106. data/test/functional/nodes_controller_test.rb +20 -5
  107. data/test/functional/user_sessions_controller_test.rb +41 -6
  108. data/test/functional/users_controller_test.rb +1 -2
  109. data/test/integration/navigation_test.rb +22 -4
  110. data/test/integration/query_node/basic.yml +7 -0
  111. data/test/integration/query_node/complex.yml +1 -1
  112. data/test/integration/query_node/errors.yml +1 -1
  113. data/test/integration/query_node/filters.yml +34 -1
  114. data/test/integration/query_node/relations.yml +6 -13
  115. data/test/integration/query_node_test.rb +22 -3
  116. data/test/integration/zafu_compiler/action.yml +1 -1
  117. data/test/integration/zafu_compiler/alias_site.yml +52 -0
  118. data/test/integration/zafu_compiler/complex.yml +1 -1
  119. data/test/integration/zafu_compiler/complex_ok.yml +5 -5
  120. data/test/integration/zafu_compiler/context.yml +1 -1
  121. data/test/integration/zafu_compiler/display.yml +56 -5
  122. data/test/integration/zafu_compiler/forms.yml +35 -2
  123. data/test/integration/zafu_compiler/meta.yml +4 -0
  124. data/test/integration/zafu_compiler/rubyless.yml +1 -1
  125. data/test/integration/zafu_compiler/safe_definitions.yml +4 -0
  126. data/test/integration/zafu_compiler/security.yml +10 -0
  127. data/test/integration/zafu_compiler/site.yml +5 -1
  128. data/test/integration/zafu_compiler/urls.yml +8 -2
  129. data/test/integration/zafu_compiler/zafu_attributes.yml +2 -1
  130. data/test/integration/zafu_compiler/zazen.yml +4 -0
  131. data/test/integration/zafu_compiler_test.rb +47 -4
  132. data/test/selenium/Grid/grid1.rsel +8 -8
  133. data/test/sites/complex/sites.yml +2 -2
  134. data/test/sites/complex/users.yml +1 -0
  135. data/test/sites/zena/columns.yml +4 -0
  136. data/test/sites/zena/sites.yml +1 -0
  137. data/test/sites/zena/users.yml +1 -0
  138. data/test/unit/node_test.rb +53 -5
  139. data/test/unit/note_test.rb +1 -1
  140. data/test/unit/relation_proxy_test.rb +20 -0
  141. data/test/unit/role_test.rb +2 -0
  142. data/test/unit/site_test.rb +28 -6
  143. data/test/unit/user_test.rb +332 -1
  144. data/test/unit/virtual_class_test.rb +55 -0
  145. data/test/unit/workflow_test.rb +175 -0
  146. data/test/unit/zena/use/ancestry_test.rb +52 -10
  147. data/test/unit/zena/use/prop_eval_test.rb +44 -0
  148. data/test/unit/zena/use/rendering_test.rb +48 -2
  149. data/test/unit/zena/use/upload_test.rb +15 -13
  150. data/test/unit/zena/use/urls_test.rb +1 -0
  151. data/vendor/plugins/ar_mysql_full_text/lib/ar_mysql_full_text.rb +39 -25
  152. data/zena.gemspec +69 -307
  153. metadata +143 -368
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +0 -24
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +0 -58
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +0 -88
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +0 -27
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +0 -23
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +0 -19
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +0 -19
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +0 -16
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +0 -16
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +0 -16
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +0 -18
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +0 -18
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +0 -16
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +0 -18
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +0 -16
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +0 -16
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +0 -16
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +0 -16
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +0 -16
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +0 -16
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +0 -18
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +0 -16
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +0 -17
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +0 -17
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +0 -18
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +0 -22
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +0 -23
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +0 -25
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +0 -18
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +0 -18
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +0 -18
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +0 -16
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +0 -16
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +0 -20
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +0 -20
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +0 -16
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +0 -16
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +0 -16
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +0 -16
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +0 -16
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +0 -16
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +0 -16
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +0 -18
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +0 -16
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +0 -16
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +0 -16
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +0 -16
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +0 -16
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +0 -16
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +0 -16
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +0 -16
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +0 -16
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +0 -16
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +0 -16
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +0 -16
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +0 -16
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +0 -16
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +0 -16
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +0 -16
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +0 -16
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +0 -16
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +0 -16
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +0 -16
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +0 -16
  218. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +0 -16
  219. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +0 -16
  220. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +0 -16
  221. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +0 -16
  222. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +0 -16
  223. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +0 -16
  224. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +0 -16
  225. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +0 -16
  226. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +0 -16
  227. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +0 -16
  228. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +0 -16
  229. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  230. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +0 -104
  231. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  232. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +0 -17
  233. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +0 -13
  234. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +0 -25
  235. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +0 -166
  236. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +0 -304
  237. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +0 -37
  238. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +0 -52
  239. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  240. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +0 -118
  241. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  242. data/vendor/TextMate/Zena.tmbundle/info.plist +0 -17
  243. data/vendor/plugins/selenium-on-rails/CHANGELOG +0 -125
  244. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +0 -202
  245. data/vendor/plugins/selenium-on-rails/README.md +0 -202
  246. data/vendor/plugins/selenium-on-rails/Rakefile +0 -38
  247. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +0 -265
  248. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +0 -148
  249. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +0 -126
  250. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +0 -231
  251. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +0 -195
  252. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +0 -295
  253. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +0 -219
  254. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +0 -156
  255. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +0 -179
  256. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +0 -223
  257. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +0 -441
  258. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +0 -3098
  259. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +0 -2080
  260. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +0 -116
  261. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +0 -116
  262. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +0 -150
  263. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +0 -422
  264. data/vendor/plugins/selenium-on-rails/doc/files/README.html +0 -321
  265. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +0 -108
  266. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +0 -101
  267. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +0 -222
  268. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +0 -109
  269. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +0 -111
  270. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +0 -101
  271. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +0 -101
  272. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +0 -118
  273. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +0 -101
  274. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +0 -101
  275. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +0 -114
  276. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +0 -113
  277. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +0 -120
  278. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +0 -108
  279. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +0 -115
  280. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +0 -42
  281. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +0 -43
  282. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +0 -182
  283. data/vendor/plugins/selenium-on-rails/doc/index.html +0 -24
  284. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +0 -208
  285. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +0 -19
  286. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +0 -50
  287. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +0 -16
  288. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +0 -14
  289. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +0 -11
  290. data/vendor/plugins/selenium-on-rails/init.rb +0 -15
  291. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +0 -122
  292. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +0 -16
  293. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +0 -8
  294. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +0 -11
  295. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +0 -215
  296. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +0 -57
  297. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +0 -36
  298. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +0 -61
  299. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +0 -20
  300. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +0 -44
  301. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +0 -87
  302. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +0 -56
  303. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +0 -116
  304. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +0 -1002
  305. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +0 -514
  306. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +0 -91
  307. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +0 -24
  308. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +0 -30
  309. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +0 -18
  310. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +0 -5
  311. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +0 -9
  312. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +0 -67
  313. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +0 -26
  314. data/vendor/plugins/selenium-on-rails/routes.rb +0 -24
  315. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +0 -7
  316. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +0 -8
  317. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +0 -110
  318. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +0 -109
  319. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +0 -145
  320. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +0 -55
  321. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +0 -177
  322. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +0 -177
  323. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +0 -298
  326. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +0 -16
  327. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +0 -205
  328. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +0 -1759
  337. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +0 -1800
  338. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  339. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  340. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  341. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  342. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  343. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +0 -2006
  344. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +0 -101
  345. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +0 -815
  346. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  347. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +0 -958
  348. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  349. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +0 -283
  350. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +0 -383
  351. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +0 -91
  352. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +0 -69
  353. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +0 -1616
  354. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +0 -72
  355. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +0 -3184
  356. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +0 -2300
  357. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +0 -153
  358. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  359. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +0 -175
  360. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +0 -148
  361. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +0 -695
  362. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +0 -1362
  363. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +0 -5
  364. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +0 -803
  365. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +0 -1537
  366. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +0 -979
  367. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +0 -3
  368. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +0 -75
  369. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +0 -153
  370. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  371. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +0 -43
  372. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +0 -316
  373. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +0 -566
  374. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +0 -2816
  375. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +0 -549
  376. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +0 -149
  377. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +0 -2450
  378. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +0 -8
  379. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +0 -37
  380. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +0 -27
  381. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +0 -72
  382. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +0 -157
  383. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +0 -708
  384. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +0 -242
  385. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +0 -67
  386. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +0 -43
  387. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +0 -35
  388. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +0 -31
  389. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +0 -109
  390. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +0 -17
  391. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +0 -51
  392. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +0 -101
  393. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +0 -1
  394. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +0 -12
  395. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +0 -6
  396. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +0 -2
  397. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +0 -6
  398. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +0 -1
  399. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +0 -5
  400. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +0 -5
  401. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +0 -7
  402. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +0 -8
  403. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +0 -7
  404. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +0 -1
  405. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +0 -1
  406. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +0 -1
  407. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +0 -1
@@ -81,6 +81,10 @@ module Zena
81
81
  end
82
82
  base
83
83
  end
84
+
85
+ def profile_users
86
+ secure(User) {User.find_all_by_is_profile(true) } || []
87
+ end
84
88
  end # ViewMethods
85
89
 
86
90
  module ZafuMethods
@@ -449,7 +453,7 @@ module Zena
449
453
 
450
454
  extract_label(res, attribute || erb_attr)
451
455
  end
452
-
456
+
453
457
  # <r:select name='klass' root_class='...'/>
454
458
  # <r:select name='parent_id' nodes='projects in site'/>
455
459
  # <r:select name='parent_id' values='a,b,c'/>
@@ -524,6 +528,9 @@ module Zena
524
528
  elsif @params[:type] == 'time_zone'
525
529
  # <r:select name='d_tz' type='time_zone'/>
526
530
  select_tag.wrap "<%= options_for_select(TZInfo::Timezone.all_identifiers, #{selected}) %>"
531
+ elsif @params[:type] == 'profile'
532
+ # <r:select name='auth[model]' type='model'/>
533
+ select_tag.wrap "<%= options_for_select(profile_users.map{|u| u.login}.sort, #{selected}) %>"
527
534
  elsif options_list = get_options_for_select
528
535
  select_tag.wrap "<%= options_for_select(#{options_list}, #{selected}) %>"
529
536
  else
@@ -599,14 +606,27 @@ module Zena
599
606
  else
600
607
  # 'text', 'hidden', 'checkbox', ...
601
608
  return parser_error('Missing name.') unless attribute || html_attributes[:name]
602
- @markup.tag = 'input'
603
- @markup.set_param(:type, @params[:type] || 'text')
604
-
609
+
610
+ if @markup.tag != 'input'
611
+ # Do not rewrite tag, use another one.
612
+ markup = Zafu::Markup.new('input')
613
+ else
614
+ markup = @markup
615
+ end
616
+
617
+ markup.tag = 'input'
618
+ markup.set_param(:type, @params[:type] || 'text')
619
+
605
620
  checked = html_attributes.delete(:checked)
606
- @markup.set_dyn_params(html_attributes)
607
- @markup.append_attribute checked if checked
608
- @markup.done = false
609
- wrap('')
621
+ markup.set_dyn_params(html_attributes)
622
+ markup.append_attribute checked if checked
623
+ markup.done = false
624
+
625
+ if markup == @markup
626
+ wrap('')
627
+ else
628
+ markup.wrap('')
629
+ end
610
630
  end
611
631
 
612
632
  if @params[:type] == 'checkbox'
@@ -163,19 +163,28 @@ module Zena
163
163
  include LinkTags
164
164
  include RubyLess
165
165
 
166
- safe_method [:flash_messages] => {:class => String, :method => 'flash_messages', :html_safe => true}
167
- # TODO: replace 'flash_messages' with a FlashHash context or a list
168
- # of Flash messages.
166
+ safe_method :flash => {:class => StringHash, :method => 'zafu_flash'}
167
+ safe_method :flash_messages => {:class => String, :html_safe => true}
168
+
169
+ def zafu_flash
170
+ @zafu_flash ||= if flash[:notice] || flash[:error]
171
+ flash.stringify_keys
172
+ else
173
+ {}
174
+ end
175
+ end
169
176
 
170
177
  def flash_messages(opts={})
171
178
  type = opts[:show] || 'both'
172
179
 
173
- if (type == 'notice' || type == 'both') && flash[:notice]
174
- notice = "<div class='auto_fade notice' onclick='new Effect.Fade(this)'>#{::ERB::Util.html_escape(flash[:notice])}</div>"
180
+ if (type == 'notice' || type == 'both') && (msg = flash[:notice])
181
+ msg = ::ERB::Util.html_escape(msg) unless msg.html_safe?
182
+ notice = "<div class='auto_fade notice' onclick='new Effect.Fade(this)'>#{msg}</div>"
175
183
  end
176
184
 
177
- if (type == 'error' || type == 'both') && flash[:error ]
178
- error = "<div class='error' onclick='new Effect.Fade(this)'>#{::ERB::Util.html_escape(flash[:error])}</div>"
185
+ if (type == 'error' || type == 'both') && (msg = flash[:error ])
186
+ msg = ::ERB::Util.html_escape(msg) unless msg.html_safe?
187
+ error = "<div class='error' onclick='new Effect.Fade(this)'>#{msg}</div>"
179
188
  end
180
189
 
181
190
  if page = opts[:page]
@@ -181,7 +181,7 @@ module Zena
181
181
 
182
182
  # Redirect on lang change "...?lang=de"
183
183
  def check_lang
184
- if params[:lang]
184
+ if params[:lang] && params[:controller] != 'user_sessions'
185
185
  # redirects other controllers (users controller, etc)
186
186
  redirect_url = params
187
187
  redirect_url.delete(:lang)
@@ -74,7 +74,7 @@ module Zena
74
74
 
75
75
  # TODO: decide if we need to keep this (Zena::Remote makes a much better console the MySQL console...)
76
76
  def set__id
77
- self._id = self.title if @need_set__id
77
+ self._id = self.title.limit(39) if @need_set__id
78
78
  end
79
79
 
80
80
  # Must happend after 'change_klass'
@@ -85,6 +85,11 @@ module Zena
85
85
  if code = vclass.prop_eval
86
86
  hash = safe_eval(code)
87
87
  if hash.kind_of?(Hash)
88
+ if hash.has_key?('title') && hash['title'].blank?
89
+ # Avoid blank title
90
+ hash['title'] = vclass.name
91
+ end
92
+
88
93
  # forces a check on valid properties
89
94
  self.attributes = hash
90
95
  true
@@ -125,11 +125,15 @@ module Zena
125
125
  end
126
126
 
127
127
  class << self
128
- attr_accessor :filter_fields
128
+ attr_accessor :filter_fields, :fulltext_fields
129
129
 
130
130
  def add_filter_field(key, fld_def)
131
131
  self.filter_fields[key] = fld_def
132
132
  end
133
+
134
+ def add_fulltext_field(key, &block)
135
+ self.fulltext_fields[key] = block
136
+ end
133
137
  end
134
138
 
135
139
  # Enables filters like "where id = 45" or "where parent_id = #{params[:parent_id]}"
@@ -140,6 +144,42 @@ module Zena
140
144
  'section_id' => {:key => 'zip', :table => ['jnode', 'nodes', 'nodes', 'TABLE2.id = TABLE1.section_id AND TABLE2.site_id = TABLE1.site_id']},
141
145
  'now' => Zena::Db::NOW,
142
146
  }
147
+
148
+ self.fulltext_fields = {
149
+ # Default fulltext search
150
+ 'fulltext' => Proc.new {|processor, table, right|
151
+ # We use the add_key_value_table rule to avoid inserting the
152
+ # same index access twice.
153
+ tbl = processor.send(:add_key_value_table, 'versions', 'versions', 'idx_text_high') do |tbl_name|
154
+ # This block is only executed once
155
+ on_clause = "#{tbl_name}.node_id = #{table}.id"
156
+ # lang
157
+ on_clause << " AND #{tbl_name}.lang = #{processor.send(:quote, visitor.lang)}"
158
+ # published
159
+ on_clause << " AND #{tbl_name}.status >= #{Zena::Status::Pub}"
160
+
161
+ # 1=1 relation, no need for distinct
162
+ on_clause
163
+ end
164
+
165
+ case right[0]
166
+ when :string, :dstring, :real, :integer
167
+ str = "%#{right[1]}%"
168
+ when :rubyless
169
+ str = "%\#{#{right[1]}}%"
170
+ else
171
+ raise ::QueryBuilder::Error.new("Can only match against literal or rubyless values.")
172
+ end
173
+
174
+ value = RubyLess.translate_string(processor.instance_variable_get(:@rubyless_helper), str)
175
+ if value.literal
176
+ value = processor.send(:quote, value.literal)
177
+ else
178
+ value = processor.send(:insert_bind, value)
179
+ end
180
+ "#{tbl}.idx_text_high LIKE #{value}"
181
+ }
182
+ }
143
183
 
144
184
  # Scope current context with previous context.
145
185
  # For example:
@@ -160,6 +200,19 @@ module Zena
160
200
  nil
161
201
  end
162
202
  end
203
+
204
+ def apply_scope(scope)
205
+ case scope
206
+ when 'sub_nodes'
207
+ context[:processing] = :scope
208
+ add_filter("#{field_or_attr('fullpath')} LIKE CONCAT(#{field_or_attr('fullpath', table(main_table, -1))},'/%')")
209
+ when 'home'
210
+ context[:processing] = :scope
211
+ add_filter("#{field_or_attr('fullpath')} LIKE CONCAT(#{insert_bind('current_site.home_node.fullpath')},'/%')")
212
+ else
213
+ super
214
+ end
215
+ end
163
216
 
164
217
  def process_attr(attribute)
165
218
  case attribute
@@ -328,13 +381,25 @@ module Zena
328
381
  if klass = Node.get_class(right[1])
329
382
  "#{field_or_attr('kpath')} #{is_not ? 'NOT ' : ''}LIKE #{quote(klass.kpath + '%')}"
330
383
  else
331
- raise ::QueryBuilder::QueryException.new("Unknown class #{right.last.inspect}.")
384
+ raise ::QueryBuilder::Error.new("Unknown class #{right.last.inspect}.")
332
385
  end
333
386
  else
334
387
  process_op(:like, left, right)
335
388
  end
336
389
  end
337
390
 
391
+ def process_match(left, right)
392
+ if left[0] == :field
393
+ if proc = self.class.fulltext_fields[left[1]]
394
+ proc.call(self, table, right)
395
+ else
396
+ raise ::QueryBuilder::Error.new("Unknown matching field #{left[1].inspect}.")
397
+ end
398
+ else
399
+ raise ::QueryBuilder::Error.new("Left argument for 'match' should be a fulltext index type.")
400
+ end
401
+ end
402
+
338
403
  # [:like, [:field, "class"], [:field, "Image"]]
339
404
  def process_not(arg)
340
405
  if (arg[1] == [:field, 'class'] || arg[1] == [:field, 'klass']) && arg[0] == :like
@@ -553,7 +618,7 @@ module Zena
553
618
  # Special pseudo-context
554
619
  add_table(main_table)
555
620
  set_main_class(current_site.home_node.vclass)
556
- add_filter "#{table}.id = #{current_site.home_id}"
621
+ add_filter "#{table}.id = #{insert_bind('current_site.home_id')}"
557
622
  return true
558
623
  #when 'author', 'traductions', 'versions'
559
624
  # # TODO: not implemented yet...
@@ -583,7 +648,7 @@ module Zena
583
648
  set_main_class(klass)
584
649
  kpath_filter = ".kpath LIKE #{quote("#{klass.kpath}%")}" unless klass.kpath == 'N'
585
650
  else
586
- raise ::QueryBuilder::QueryException.new("Unknown class #{klass} in scope '#{class_name}:#{scope}'.")
651
+ raise ::QueryBuilder::Error.new("Unknown class #{klass} in scope '#{class_name}:#{scope}'.")
587
652
  end
588
653
  else
589
654
  klass = nil
@@ -10,7 +10,7 @@ module Zena
10
10
  # recursion
11
11
  def r_include
12
12
  return '' if @context[:saved_template]
13
- return super if @params[:template] || !@params[:part]
13
+ return parser_error("missing 'template' or 'part' parameter") if !@params[:part]
14
14
  recursion = get_context_var('recursion', @params[:part])
15
15
  return parser_error("no parent named '#{@params[:part]}'") unless recursion
16
16
  klass = recursion[:klass]
@@ -23,7 +23,8 @@ module Zena
23
23
  module ViewMethods
24
24
 
25
25
  include Common
26
-
26
+ include RubyLess
27
+ safe_method [:fsize, Number] => String
27
28
 
28
29
  # TODO: see if this is still needed. Creates a pseudo random string to avoid browser side ajax caching
29
30
  def rnd
@@ -61,7 +62,9 @@ module Zena
61
62
  # TODO: use number_to_human_size instead
62
63
  def fsize(size)
63
64
  size = size.to_f
64
- if size >= 1024 * 1024 * 1024
65
+ if size >= 1024 * 1024 * 1024 * 1024
66
+ sprintf("%.2f Tb", size/(1024*1024*1024*1024))
67
+ elsif size >= 1024 * 1024 * 1024
65
68
  sprintf("%.2f Gb", size/(1024*1024*1024))
66
69
  elsif size >= 1024 * 1024
67
70
  sprintf("%.1f Mb", size/(1024*1024))
@@ -94,6 +94,7 @@ module Zena
94
94
 
95
95
  # Return an array of accessor methods for the matched relation alias.
96
96
  def relation_alias(match)
97
+ return nil if respond_to?("#{match[0]}=") # native method
97
98
  return nil if match[0] == 'parent_id'
98
99
  role = match[1]
99
100
  field = match[2]
@@ -169,7 +169,7 @@ module Zena
169
169
  opts[:cache] = false
170
170
 
171
171
  render :inline => result[:data]
172
-
172
+
173
173
  else
174
174
 
175
175
  if disposition = zafu_headers.delete('Content-Disposition')
@@ -195,9 +195,9 @@ module Zena
195
195
  return
196
196
  end
197
197
 
198
- if data = result.delete(:data)
198
+ if data = result[:data]
199
199
  send_data(data , result)
200
- elsif file = result.delete(:file)
200
+ elsif file = result[:file]
201
201
  send_file(file , result)
202
202
  else
203
203
  # Should never happen
@@ -279,7 +279,10 @@ module Zena
279
279
 
280
280
  # Return true if we can cache the current page
281
281
  def caching_allowed(opts = {})
282
- return false if current_site.authentication? || (query_params != {} && !@cache_query)
282
+ return false if current_site.authentication? ||
283
+ (query_params != {} && !@cache_query) ||
284
+ flash[:notice] ||
285
+ flash[:error]
283
286
  # Cache even if authenticated (public content).
284
287
  # Content viewed by anonymous user should be cached anyway.
285
288
  opts[:authenticated] || visitor.is_anon?
@@ -7,10 +7,11 @@ module Zena
7
7
  include Zena::Use::Upload::UploadedFile
8
8
 
9
9
  # Set visitor for unit testing
10
- def login(fixture, site_name = nil)
11
- user = users(fixture)
12
- if site_name
13
- site = Site.setup_master(Site.find_by_name(site_name))
10
+ def login(fixture, host = nil)
11
+ user = fixture.kind_of?(Fixnum) ? User.find(fixture) : users(fixture)
12
+ if host
13
+ raise 'FIXME' unless host =~ /\./
14
+ site = Site.setup_master(Site.find_by_host(host))
14
15
  else
15
16
  # Not an alias
16
17
  site = user.site
@@ -19,6 +20,9 @@ module Zena
19
20
  user.ip = '10.0.0.44'
20
21
  $_test_site = site.name
21
22
  ::I18n.locale = user.lang
23
+ rescue => err
24
+ puts "#{host.inspect}"
25
+ puts err.backtrace
22
26
  end
23
27
 
24
28
  # Show object's errors
@@ -31,6 +31,11 @@ module Zena
31
31
 
32
32
  module ControllerMethods
33
33
  include UploadedFile
34
+
35
+ def self.included(base)
36
+ base.send(:helper_method, :fetch_html)
37
+ end
38
+
34
39
  protected
35
40
  include ActionView::Helpers::NumberHelper # number_to_human_size
36
41
  def get_attachment
@@ -44,6 +49,14 @@ module Zena
44
49
  [att, error]
45
50
  end
46
51
 
52
+ def fetch_html(uri_str)
53
+ response, error = fetch_response(uri_str)
54
+ if response
55
+ response.body
56
+ else
57
+ ''
58
+ end
59
+ end
47
60
 
48
61
  private
49
62
  def fetch_uri(uri_str, max_file_size = 10)
@@ -176,6 +189,7 @@ module Zena
176
189
 
177
190
  module ViewMethods
178
191
  include RubyLess
192
+ safe_method [:fetch_html, String] => String
179
193
 
180
194
  def upload_form_tag(url_opts, html_opts = {})
181
195
  @uuid = UUIDTools::UUID.random_create.to_s.gsub('-','')
@@ -88,6 +88,7 @@ module Zena
88
88
 
89
89
  pre = opts.delete(:prefix) || (visitor.is_anon? && opts.delete(:lang)) || prefix
90
90
  mode = opts.delete(:mode)
91
+ mode = nil if mode.blank?
91
92
  if ep = opts[:encode_params]
92
93
  ep = ep.split(',').map(&:strip)
93
94
  if ep.delete('mode')
@@ -122,36 +123,50 @@ module Zena
122
123
  stamp = make_cachestamp(node, mode)
123
124
  end
124
125
 
125
- path = if !asset && node[:id] == visitor.site[:root_id] && mode.nil? && format == 'html'
126
+ path = if !asset && node[:id] == visitor.site.home_id && mode.nil? && format == 'html'
126
127
  "#{abs_url_prefix}/#{pre}" # index page
127
128
  elsif node[:custom_base]
128
129
  "#{abs_url_prefix}/#{pre}/" +
129
- basepath_as_url(node.basepath) +
130
- (mode ? "_#{mode}" : '') +
131
- (asset ? "=#{asset}" : '') +
132
- (stamp ? ".#{stamp}" : '') +
130
+ basepath_as_url(node, true) +
131
+ (mode ? "_#{mode}" : '') +
132
+ (asset ? "=#{asset}" : '') +
133
+ (stamp ? ".#{stamp}" : '') +
133
134
  (format == 'html' ? '' : ".#{format}")
134
135
  else
135
136
  "#{abs_url_prefix}/#{pre}/" +
136
- (node.basepath.blank? ? '' : "#{basepath_as_url(node.basepath)}/") +
137
- (node.klass.downcase ) +
138
- (node[:zip].to_s ) +
139
- (mode ? "_#{mode}" : '') +
140
- (asset ? "=#{asset}" : '') +
141
- (stamp ? ".#{stamp}" : '') +
137
+ basepath_as_url(node, false)+
138
+ (node.klass.downcase ) +
139
+ (node[:zip].to_s ) +
140
+ (mode ? "_#{mode}" : '') +
141
+ (asset ? "=#{asset}" : '') +
142
+ (stamp ? ".#{stamp}" : '') +
142
143
  ".#{format}"
143
144
  end
144
145
  append_query_params(path, opts)
145
146
  end
146
147
 
147
- def basepath_as_url(path)
148
- path.split('/').map do |zip|
149
- if n = secure(Node) { Node.find_by_zip(zip) }
150
- n.title.url_name
151
- else
152
- nil
148
+ def basepath_as_url(node, is_end)
149
+ path = node.basepath
150
+ if !path.blank?
151
+ @home_base ||= begin
152
+ p = Zena::Use::Ancestry.basepath_from_fullpath(current_site.home_node.fullpath)
153
+ %r{^#{p}/?}
153
154
  end
154
- end.compact.join('/')
155
+ path = path.sub(@home_base, '')
156
+ return '' if path.blank?
157
+ path = path.split('/').map do |zip|
158
+ if n = secure(Node) { Node.find_by_zip(zip) }
159
+ n.title.url_name
160
+ else
161
+ nil
162
+ end
163
+ end.compact.join('/')
164
+ end
165
+ if is_end
166
+ path
167
+ else
168
+ path.blank? ? '' : "#{path}/"
169
+ end
155
170
  end
156
171
 
157
172
  def append_query_params(path, opts)
@@ -438,6 +453,7 @@ module Zena
438
453
 
439
454
  if true
440
455
  # Use onclick with Ajax.
456
+ # FIXME: Use Zena.do so that we can use ajax stamp. This means that we write a variant of "make_href" which returns json for query parameters.
441
457
  if confirm
442
458
  markup.set_dyn_param(:onclick, "if(confirm(this.getAttribute(\"data-confirm\"))) {new Ajax.Request(\"<%= #{href} %>\", {asynchronous:true, evalScripts:true, method:\"#{http_method}\"});} return false;")
443
459
  else
@@ -536,10 +552,10 @@ module Zena
536
552
  # Build the 'href' part of a link.
537
553
  def make_href(remote_target = nil, opts = {})
538
554
  anchor = @params[:anchor]
539
- if anchor && !@params[:href]
540
- # Link on same page
541
- return ::RubyLess.translate(self, "%Q{##{get_anchor_name(anchor)}}")
542
- end
555
+ # if anchor && !@params[:href]
556
+ # # Link on same page (? Why would this be of any use ? We can write <a href='#xxx'>....</a>.)
557
+ # return ::RubyLess.translate(self, "%Q{##{get_anchor_name(anchor)}}")
558
+ # end
543
559
 
544
560
  if opts[:action] == 'edit' && remote_target
545
561
  method = 'zafu_node_path'
@@ -598,7 +614,7 @@ module Zena
598
614
  end
599
615
 
600
616
  method = "#{method}(#{method_args.join(', ')})"
601
-
617
+
602
618
  ::RubyLess.translate(self, method)
603
619
  end
604
620