zena 1.2.7 → 1.2.8

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