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
@@ -1,4 +1,3 @@
1
1
  class UserSession < Authlogic::Session::Base
2
2
  self.find_by_login_method = :find_allowed_user_by_login
3
- consecutive_failed_logins_limit 10
4
3
  end
@@ -662,9 +662,12 @@ class VirtualClass < Role
662
662
  Zena::Db.execute "UPDATE nodes SET kpath = '#{new_kpath}' WHERE vclass_id = #{self.id} AND site_id = #{current_site.id}"
663
663
  Zena::Db.execute "UPDATE roles SET kpath = '#{new_kpath}' WHERE kpath = '#{old_kpath}' AND site_id = #{current_site.id} AND (type = 'Role' or type IS NULL)"
664
664
  # ========================================= Update templates
665
+ # Find Template through IdxTemplate
665
666
  idx_templates = IdxTemplate.all(
666
667
  :conditions => ['tkpath = ? AND site_id = ? AND node_id IS NOT NULL', old_kpath, site_id]
667
668
  )
669
+ # This is for fs_skin
670
+ Zena::Db.execute "UPDATE idx_templates SET tkpath = '#{new_kpath}' WHERE tkpath = '#{old_kpath}' AND site_id = #{current_site.id}"
668
671
 
669
672
  if !idx_templates.empty?
670
673
  # update related templates
@@ -683,12 +686,14 @@ class VirtualClass < Role
683
686
  end
684
687
 
685
688
  # ========================================= Update relations
686
- Relation.all(
687
- :conditions => ['source_kpath = ? or target_kpath = ?', old_kpath, old_kpath]
688
- ).each do |rel|
689
- rel.source_kpath = new_kpath if rel.source_kpath == old_kpath
690
- rel.target_kpath = new_kpath if rel.target_kpath == old_kpath
691
- rel.save!
689
+ secure(Relation) do
690
+ Relation.all(
691
+ :conditions => ['source_kpath = ? or target_kpath = ?', old_kpath, old_kpath]
692
+ ).each do |rel|
693
+ rel.source_kpath = new_kpath if rel.source_kpath == old_kpath
694
+ rel.target_kpath = new_kpath if rel.target_kpath == old_kpath
695
+ rel.save!
696
+ end
692
697
  end
693
698
 
694
699
  # ========================================= Update sub-classes
@@ -18,16 +18,18 @@
18
18
  <td class='label'><%= _("type")%></td>
19
19
  <td class='label'><%= _("name")%></td>
20
20
  <td class='label'><%= _("index")%></td>
21
+ <td class='label'><label for='column_versioned'><%= _("vers.")%></label></td>
21
22
  </tr>
22
23
  <tr class='ruby'>
23
24
  <td><span class='constant'><%= select('column', 'role_id', Column.roles_for_form ) %></span></td>
24
25
  <td><span class='text'><%= select('column', 'ptype', Column::TYPES_FOR_FORM ) %></span></td>
25
26
  <td><%= text_field('column', 'name', :size=>15 ) %></td>
26
27
  <td><span class='text'><%= select_tag "column[index]", grouped_options_for_select(Column.indices_for_form, @column.index, '') %></span></td>
28
+ <td><span class='text'><%= check_box('column', 'versioned', {}, 1, 0) %></span></td>
27
29
  </tr>
28
30
  <tr>
29
31
  <td class='label'><%= _("comment") %></td>
30
- <td colspan='3'>
32
+ <td colspan='4'>
31
33
  <%= text_area('column', 'comment', :rows => 2, :cols => 50) %>
32
34
  </td>
33
35
  </tr>
@@ -3,7 +3,7 @@
3
3
  :update =>"column#{li[:id]}",
4
4
  :url => edit_column_path(li),
5
5
  :method => :get) %></td>
6
- <td class='name'>
6
+ <td class='name <%= li.versioned? ? 'versioned' : 'not-versioned' %>'>
7
7
  <%= li.name %>
8
8
  </td>
9
9
  <td class='index'>
@@ -1,6 +1,6 @@
1
1
  if @column.errors.empty?
2
2
  page.insert_html :before, 'add_column', :partial=>'columns/li', :collection=>[@column]
3
- @column = Column.new(:role_id => @column.role_id, :ptype => @column.ptype)
3
+ @column = Column.new(:role_id => @column.role_id, :ptype => @column.ptype, :versioned => true)
4
4
  page.replace_html 'add_column_form', :partial=>'columns/form'
5
5
  page << "$('column_name').focus();"
6
6
  else
@@ -16,19 +16,21 @@
16
16
  <% end %>
17
17
  <table cellspacing='0'>
18
18
  <tr><td class='label'><%= _('name')%> </td><td><%= text_field('group', 'name', :size=>15 ) %></td></tr>
19
- <tr><td class='label'><%= _('users')%> </td><td>
20
- <%= @users.inject([]) do |list, u|
21
- unless u.is_anon?
22
- if (@group[:id] == visitor.site.public_group_id) || (@group[:id] == visitor.site.site_group_id)
23
- list << "<input type='checkbox' name='group[user_ids][]' value='#{u.id}' class='box' checked='1' disabled='1'/>#{u.login}"
24
- else
25
- list << "<input type='checkbox' name='group[user_ids][]' value='#{u.id}' class='box' #{(@group && @group.user_ids.include?(u[:id])) ? "checked='1'" : ''}/>#{u.login}"
19
+ <tr><td class='label'><%= _('users')%> </td>
20
+ <td class='boxes'>
21
+ <p><%= @users.inject([]) do |list, u|
22
+ unless u.is_anon?
23
+ if (@group[:id] == visitor.site.public_group_id) || (@group[:id] == visitor.site.site_group_id)
24
+ list << "<input type='checkbox' name='group[user_ids][]' value='#{u.id}' class='box' checked='1' disabled='1'/>#{u.login}"
25
+ else
26
+ list << "<input id='user#{u.id}' type='checkbox' name='group[user_ids][]' value='#{u.id}' class='box' #{(@group && @group.user_ids.include?(u[:id])) ? "checked='1'" : ''}/><label for='user#{u.id}'>#{u.login}</label>"
27
+ end
26
28
  end
27
- end
28
- list
29
- end.join(' ') %>
30
- <input type='hidden' name='group[user_ids][]' value=''/>
31
- </td></tr>
29
+ list
30
+ end.join('</p><p>') %></p>
31
+ <input type='hidden' name='group[user_ids][]' value=''/>
32
+ </td>
33
+ </tr>
32
34
  <% if !@group.new_record? -%>
33
35
  <tr><td class='label'><%= _('replace by') %></td><td><%= select('group', 'replace_by', @groups.map{|g| [g[:name], g[:id]]} , {:include_blank => true}) %></td></tr>
34
36
  <% end -%>
@@ -36,7 +38,8 @@
36
38
  <td class='label'><%= _('auto_publish') %></td>
37
39
  <td>
38
40
  <input type='hidden' name='group[auto_publish]' value=''/>
39
- <input type='checkbox' name='group[auto_publish]' value='1'<%= @group.auto_publish? ? " checked='checked'" : '' %>/> <%= _('auto_publish') %>
41
+ <input id='auto_publish' type='checkbox' name='group[auto_publish]' value='1'<%= @group.auto_publish? ? " checked='checked'" : '' %>/>
42
+ <label for='auto_publish'><%= _('auto_publish') %></label>
40
43
  </td>
41
44
  </tr>
42
45
  <tr><td colspan='2'><input type='submit' class='btn_validate' value='<%= _('validate') %>'/></td></tr>
@@ -19,13 +19,25 @@
19
19
  <td class="dark"><%= select('relation', 'target_kpath', Node.kpaths_for_form ) %></td>
20
20
  </tr>
21
21
  <tr><td class="label" ><%= _('type') %></td>
22
- <td class="light" >
23
- <%= radio_button("relation", "target_unique", true , :checked => @relation.target_unique?) %> <%= _('has_one') %><br/>
24
- <%= radio_button("relation", "target_unique", false, :checked => !@relation.target_unique?) %> <%= _('has_many') %>
22
+ <td class="light boxes" >
23
+ <p>
24
+ <%= radio_button("relation", "target_unique", true , :checked => @relation.target_unique?) %>
25
+ <label for='relation_target_unique_true'><%= _('has_one') %></label>
26
+ </p>
27
+ <p>
28
+ <%= radio_button("relation", "target_unique", false, :checked => !@relation.target_unique?) %>
29
+ <label for='relation_target_unique_false'><%= _('has_many') %></label>
30
+ </p>
25
31
  </td>
26
- <td class="dark" >
27
- <%= radio_button("relation", "source_unique", true , :checked => @relation.source_unique?) %> <%= _('has_one') %><br/>
28
- <%= radio_button("relation", "source_unique", false, :checked => !@relation.source_unique?) %> <%= _('has_many') %>
32
+ <td class="dark boxes" >
33
+ <p>
34
+ <%= radio_button("relation", "source_unique", true , :checked => @relation.source_unique?) %>
35
+ <label for='relation_source_unique_true'><%= _('has_one') %></label>
36
+ </p>
37
+ <p>
38
+ <%= radio_button("relation", "source_unique", false, :checked => !@relation.source_unique?) %>
39
+ <label for='relation_source_unique_false'><%= _('has_many') %></label>
40
+ </p>
29
41
  </td>
30
42
  </tr>
31
43
  <tr><td class="label" ><%= _('role') %></td>
@@ -15,6 +15,7 @@
15
15
  <table cellspacing='0' class='edit_site'>
16
16
  <tr><td class='label'><%= _('host') %></td><td><%= @site[:host] %></td></tr>
17
17
  <tr><td class='label'><%= _('home') %></td><td><%= text_field('site', :home_zip, :size=>15, :value => @site.home_zip) %></td></tr>
18
+ <tr><td class='label'><%= _('skin') %></td><td><%= text_field('site', :skin_zip, :size=>15, :value => @site.skin_zip) %></td></tr>
18
19
  <% Site.attributes_for_form(@site.is_alias?)[:text].each do |name| -%>
19
20
  <tr><td class='label'><%= _(name) %></td><td><%= text_field('site', name, :size=>nil) %></td></tr>
20
21
  <% end -%>
@@ -25,12 +26,17 @@
25
26
  <tr><td class='label'><%= _('API group') %></td><td><%= select('site', 'api_group_id', visitor.all_groups.map{|g| [g.name, g.id]}, {:include_blank => true, :selected => @site.api_group_id} ) %></td></tr>
26
27
  <% end %>
27
28
 
28
- <tr><td class='label'><%= _('options') %></td><td>
29
- <% Site.attributes_for_form(@site.is_alias?)[:bool].each do |sym| -%>
30
- <input type='hidden' name='site[<%= sym %>]' value=''/>
31
- <input type='checkbox' name='site[<%= sym %>]' value='1'<%= @site.send(sym) ? " checked='checked'" : '' %>/> <%= _(sym.to_s) %><br/>
32
- <% end -%>
33
- </td></tr>
29
+ <tr><td class='label'><%= _('options') %></td>
30
+ <td class='boxes'>
31
+ <% Site.attributes_for_form(@site.is_alias?)[:bool].each do |sym| -%>
32
+ <p>
33
+ <input type='hidden' name='site[<%= sym %>]' value=''/>
34
+ <input id='site_<%= sym %>' type='checkbox' name='site[<%= sym %>]' value='1'<%= @site.send(sym) ? " checked='checked'" : '' %>/>
35
+ <label for='site_<%= sym %>'><%= _(sym.to_s) %></label>
36
+ </p>
37
+ <% end -%>
38
+ </td>
39
+ </tr>
34
40
  <% if !@site.new_record? && !@site.is_alias? %>
35
41
  <tr><td class='label'><%= _('action') %></td><td id='messages<%= @site[:id] %>'>
36
42
  <ul>
@@ -5,7 +5,7 @@
5
5
  link_to_function _('btn_x'), "['add_user', 'add_user_form'].each(Element.toggle)"
6
6
  end %>
7
7
  </td>
8
- <td class="add" colspan="4">
8
+ <td class="add" colspan="6">
9
9
  <div id='user_errors'><%= error_messages_for(:user, :object => @user) %></div>
10
10
  <% if user_id %>
11
11
  <%= form_remote_tag(:url => user_path(@user), :method => :put ) %>
@@ -21,25 +21,40 @@
21
21
  <% else -%>
22
22
  <tr id='user_set_pass'><td class='label'><%= _("password")%></td><td><%= password_field('user', 'password', :size=>15, :value=>"" ) %></td></tr>
23
23
  <% end -%>
24
+ <tr>
25
+ <td class='label'><%= _("profile")%></td>
26
+ <td class='profile'>
27
+ <%= select('user', 'profile', profile_users.reject {|u| u.id == @user.id}.map{|u| u.login}.sort, :include_blank => true) %>
28
+ </td>
29
+ </tr>
24
30
  <% end -%>
25
31
  <tr><td class='label'><%= _("status")%> </td><td><%= select('user', 'status', User::Status.reject {|k,v| v > User::Status[:admin]}.map{|k,v| [_(k.to_s),v]}.sort{|a,b| b[1] <=> a[1]}) %></td></tr>
26
32
  <tr><td class='label'><%= _("single_access_token")%> </td><td><%= @user.single_access_token %></td></tr>
27
33
  <tr><td class='label'><%= _('language')%> </td><td><%= select('user', 'lang', visitor.site.lang_list.map {|l| [_(l),l]}) %></td></tr>
28
34
  <tr><td class='label'><%= _("time zone")%> </td><td><select name='user[time_zone]'><%= options_for_select([''] + TZInfo::Timezone.all_identifiers, @user[:time_zone] || '') %></select></td></tr>
35
+ <tr><td class='label'><%= _("login_attempt_count")%> </td><td><%= check_box('user', 'login_attempt_count', {}, 0, @user.login_attempt_count) %> reset</td></tr>
29
36
  <% unless @user.is_anon? -%>
30
- <tr><td class='label'><%= _("groups")%> </td><td>
31
- <%= @groups.inject([]) do |list, g|
37
+ <tr><td class='label'><%= _("groups")%> </td><td class='boxes'>
38
+ <p><%= @groups.inject([]) do |list, g|
32
39
  if g[:id] == visitor.site.public_group_id || g[:id] == visitor.site.site_group_id
33
- list << "<input type='checkbox' name='user[group_ids][]' value='#{g.id}' class='box' checked='1' disabled='1' />#{g.name}"
40
+ list << "<input id='group#{g.id}' type='checkbox' name='user[group_ids][]' value='#{g.id}' class='box' checked='1' disabled='1' /><label for='group#{g.id}'>#{g.name}</label>"
34
41
  else
35
- list << "<input type='checkbox' name='user[group_ids][]' value='#{g.id}' class='box' #{(@user && @user.group_set_ids.include?(g[:id])) ? "checked='1'" : ''}/>#{g.name}"
42
+ list << "<input id='group#{g.id}' type='checkbox' name='user[group_ids][]' value='#{g.id}' class='box' #{(@user && @user.group_set_ids.include?(g[:id])) ? "checked='1'" : ''}/><label for='group#{g.id}'>#{g.name}</label>"
36
43
  end
37
44
  list
38
- end.join(" ") %>
45
+ end.join("</p><p>") %></p>
39
46
  <input type='hidden' name='user[group_ids][]' value=''/>
40
47
  </td></tr>
41
48
  <% end -%>
42
-
49
+
50
+ <tr>
51
+ <td class='label'><%= _("is profile")%></td>
52
+ <td class='is_profile'>
53
+ <input type='hidden' name='user[is_profile]' value='0'/>
54
+ <input type='checkbox' name='user[is_profile]' value='1' class='box'<%= @user.is_profile? ? " checked='checked'" : ''%>/>
55
+ </td>
56
+ </tr>
57
+
43
58
  <tr>
44
59
  <td class='label'><%= _("use acls")%></td>
45
60
  <td class='use_acls'>
@@ -47,7 +62,7 @@
47
62
  <input type='checkbox' name='user[use_acls]' value='1' class='box'<%= @user.use_acls? ? " checked='checked'" : ''%>/>
48
63
  </td>
49
64
  </tr>
50
- <tr><td colspan='2'><%= node_form %></td></tr>
65
+ <tr><td colspan='2' class='nform'><%= node_form %></td></tr>
51
66
  <tr><td colspan='2'><p class='btn_validate'><input type='submit' value='<%= _('validate') %>'/></p></td></tr>
52
67
  </table>
53
68
  </form>
@@ -1,19 +1,30 @@
1
1
  <% icon = 'user'
2
2
  if li.is_anon?
3
3
  icon += '_pub'
4
+ elsif li.is_profile?
5
+ icon += '_profile'
4
6
  elsif li.is_admin?
5
7
  icon += '_admin'
8
+ elsif li.is_manager?
9
+ icon += '_manager'
6
10
  end %>
7
11
  <tr id='user<%= li[:id] %>' class='u<%= li.status %>'>
8
12
  <td class="adm_icon"><%= link_to_remote(li.use_acls? ? " #{_('img_acl')}" : _("img_#{icon}"),
9
13
  :update =>"user#{li[:id]}",
10
14
  :url => edit_user_path(li),
11
15
  :method => :get) %></td>
12
- <td class="login"><%= li.is_anon? ? '<i>public</i>' : li.login %></td>
13
- <td class="fullname" ><a href='<%= zen_path(li.node) %>'><%= li.node ? li.node.title : '' %></a></td>
16
+ <td class="login<%= li.is_profile? ? ' profile' : '' %>"><%= li.is_anon? ? '<i>public</i>' : li.login %></td>
17
+ <td class="groups<%= li.profile_id ? ' profile' : '' %>">
18
+ <% if li.profile_id %>
19
+ <%= li.profile %>
20
+ <% else %>
21
+ <%= li.groups.map {|g| g.name }.sort.join('<br/>') %>
22
+ <% end %>
23
+ </td>
14
24
  <td class="login"><%= _(User::Num_to_status[li.status].to_s) %></td>
25
+ <td class="fullname" ><a href='<%= zen_path(li.node) %>'><%= li.node ? li.node.title : '' %></a></td>
15
26
  <% if Bricks::CONFIG['activity'] %>
16
27
  <td class="seen_at"><%= format_date(li.seen_at, :format =>_(Zena::Use::Dates::DATETIME)) %></td>
17
28
  <% end %>
18
- <td class="groups"><%= li.groups.map {|g| g.name }.join(', ') %></td>
29
+ <td class="failed"><% if li.login_attempt_count.to_i > 0 %><%= li.login_attempt_count %> login failures<% end %></td>
19
30
  </tr>
@@ -1,7 +1,7 @@
1
1
  <h2 class='title'><%= _('users') %></h2>
2
2
 
3
3
  <table id='user_list' class='admin' cellspacing="0">
4
- <tr><th class='nav' colspan='6'><%= will_paginate @users %></th></tr>
4
+ <tr><th class='nav' colspan='7'><%= will_paginate @users %></th></tr>
5
5
  <%= render :partial=>'users/li', :collection=>@users %>
6
6
  <%= render :partial=>'users/add', :locals=>{:groups=>@groups} %>
7
7
  </table>
@@ -40,8 +40,18 @@
40
40
  <tr><td class='label'><%= _('prop eval') %></td><td><%= text_area('virtual_class', 'prop_eval', :rows => 2, :cols => 30) %></td></tr>
41
41
 
42
42
  <tr><td class='label'><%= _('edit group') %></td><td><%= select('virtual_class', 'create_group_id', visitor.all_groups.map{|g| [g.name, g.id]} ) %></td></tr>
43
- <tr><td class='label'><%= _('auto create discussion')%></td><td><%= check_box('virtual_class', 'auto_create_discussion') %></td></tr>
44
- <tr><td class='label'><%= _('monolingual') %></td><td><%= check_box('virtual_class', 'monolingual') %></td></tr>
43
+ <tr>
44
+ <td class='label'>
45
+ <label for='virtual_class_auto_create_discussion'><%= _('auto create discussion')%></label>
46
+ </td>
47
+ <td><%= check_box('virtual_class', 'auto_create_discussion') %></td>
48
+ </tr>
49
+ <tr>
50
+ <td class='label'>
51
+ <label for='virtual_class_monolingual'><%= _('monolingual') %></label>
52
+ </td>
53
+ <td><%= check_box('virtual_class', 'monolingual') %></td>
54
+ </tr>
45
55
  <tr><td class='label'><%= _('content_type')%></td><td><%= text_field('virtual_class', 'content_type') %></td></tr>
46
56
  <% end -%>
47
57
  <tr><td class='label'><%= _('icon')%> </td><td><%= text_field('virtual_class', 'icon', :size=>15 ) %></td></tr>
@@ -14,6 +14,7 @@ a:hover { color:#04a;}
14
14
  table { margin:20px;}
15
15
  td { padding:5px; }
16
16
  #login_form { border:1px solid grey; background:#eee; width:400px; margin:120px auto; padding:0;}
17
+ .error {background:#fcc; padding:8px; border-bottom:1px solid #333}
17
18
  </style>
18
19
  </head>
19
20
 
@@ -31,7 +32,13 @@ td { padding:5px; }
31
32
 
32
33
  <td><input name="password" size="20" type="password" /></td>
33
34
  </tr>
34
- <tr><td></td><td><input name="commit" type="submit" value=" login " /> <p class='cancel' do='link' do='t'>cancel</p></td></tr>
35
+ <tr>
36
+ <td></td>
37
+ <td>
38
+ <input name="commit" type="submit" value=" login " /> <p class='cancel' do='link' do='t'>cancel</p>
39
+ <input name='lang' type='hidden' value='#{visitor.lang}'/>
40
+ </td>
41
+ </tr>
35
42
  </table>
36
43
  </form>
37
44
  </div>
@@ -4,7 +4,7 @@
4
4
 
5
5
  <h2 do='t'>search results</h2>
6
6
 
7
- <ul id='search_results' do='search_results'>
7
+ <ul id='search_results' do='nodes where fulltext match #{params[:q]} in site'>
8
8
  <li class='result_entry' do='each'>
9
9
  <p class='result_image' do='Document?'>
10
10
  <r:link format='data' do='img' alt_src='icon' mode='pv'/>
@@ -29,6 +29,7 @@ module Bricks
29
29
  alias_method_chain :find_node, :acls
30
30
  attr_accessible :use_acls
31
31
  end
32
+ ::User::ATTRIBUTES_FROM_PROFILE << :use_acls
32
33
  end
33
34
 
34
35
  def acl_authorized?(action, params, request)
@@ -0,0 +1,9 @@
1
+ class LongerNamesForAcl < ActiveRecord::Migration
2
+ def self.up
3
+ change_column :acls, :name, :string, :limit => 60
4
+ end
5
+
6
+ def self.down
7
+ change_column :acls, :name, :string, :limit => 30
8
+ end
9
+ end
@@ -118,7 +118,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
118
118
  should 'allow t_url in rendering skin' do
119
119
  get @zafu_url
120
120
  assert_response :success
121
- assert_equal %{Element.replace("list1", "Zafu safe ok\\n");\n}, response.body
121
+ assert_equal %{if (Zena.stampOk('list1', 0)) {\nElement.replace(\"list1\", \"Zafu safe ok\\n\");\n\n}}, response.body
122
122
  end
123
123
  end # using zafu ajax
124
124
 
@@ -294,7 +294,7 @@ class AclIntegrationTest < Zena::Integration::TestCase
294
294
  setup do
295
295
  # The visitor can delete objects in assigned_project
296
296
  Zena::Db.execute "UPDATE acls SET query = '%q{nodes in project from assigned_project}', action = 'delete' WHERE id = #{acls_id(:rap)}"
297
- @delete_url = "http://erebus.host/nodes/#{nodes_zip(:persephone)}"
297
+ @delete_url = "http://erebus.host/nodes/#{nodes_zip(:wedding)}"
298
298
  end
299
299
 
300
300
  context 'with wrong user status' do
@@ -0,0 +1,120 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+
4
+ # To use this gem, simply enable the currency gem and set app_id from openexchangerates.org
5
+ # currency:
6
+ # switch: ON
7
+ # app_id: the_secret_app_id
8
+ #
9
+ # You can then get
10
+ module Bricks
11
+ module Currency
12
+ # We have a module accessor so that we can rewrite app_id during testing
13
+ mattr_accessor :app_id
14
+
15
+ self.app_id = Bricks::CONFIG['currency']['app_id']
16
+
17
+ EXCHANGE_URI = "http://openexchangerates.org/api/latest.json"
18
+ CURRENCY_URI = "http://openexchangerates.org/api/currencies.json"
19
+
20
+ @@exchange_rates = {
21
+ :expire_at => Time.now.utc.advance(:year => -1),
22
+ :rates => {},
23
+ :currencies => nil,
24
+ }
25
+
26
+ # Returns a list of rates from the base rate to currency keys in the list with currency full name:
27
+ # ==> [['USD', 1.23, 'US Dollar'], ['EUR', 1.0, 'Euro'], ...]
28
+ def self.get_rates(list, base = 'USD')
29
+ stamp = Time.now.utc
30
+ rates = {}
31
+ if @@exchange_rates[:expire_at] <= stamp
32
+ # Reload exchange rates
33
+
34
+ app_id = self.app_id
35
+ raise "Missing 'currency/app_id' in config/bricks.yml" if app_id.blank?
36
+ exchange_uri = URI.parse("#{EXCHANGE_URI}?app_id=#{app_id}")
37
+ Net::HTTP.new(exchange_uri.host, exchange_uri.port).start do |http|
38
+ response = http.request_get(exchange_uri.request_uri)
39
+ if response.kind_of?(Net::HTTPSuccess)
40
+ rates = JSON.parse(response.body)['rates']
41
+ else
42
+ raise "Could not get exchange rates (#{response.body})."
43
+ end
44
+ end
45
+ @@exchange_rates[:rates] = rates
46
+ @@exchange_rates[:expire_at] = stamp.advance(:hour => 6) # Update currency rate every 6 hours (works with the free plan)
47
+ else
48
+ rates = @@exchange_rates[:rates]
49
+ end
50
+
51
+ curr = self.get_currencies
52
+ # Base for rates = USD
53
+ if base != 'USD'
54
+ ratio = rates[base]
55
+ raise "Invalid base currency '#{base}'" if ratio.nil?
56
+ end
57
+ list.map do |l|
58
+ l = l.strip
59
+ rate = rates[l]
60
+ title = curr[l]
61
+ if !rate
62
+ rate = 0.0
63
+ title = "#{title} (Error: could not get exchange rate)"
64
+ elsif ratio
65
+ rate = rate / ratio
66
+ end
67
+ [l, rate, title]
68
+ end
69
+ end
70
+
71
+ def self.get_currencies
72
+ @@exchange_rates[:currencies] ||= begin
73
+ app_id = self.app_id
74
+ raise "Missing 'currency/app_id' in config/bricks.yml" if app_id.blank?
75
+ currency_uri = URI.parse("#{CURRENCY_URI}?app_id=#{app_id}")
76
+ Net::HTTP.new(currency_uri.host, currency_uri.port).start do |http|
77
+ response = http.request_get(currency_uri.request_uri)
78
+ if response.kind_of?(Net::HTTPSuccess)
79
+ JSON.parse(response.body)
80
+ else
81
+ raise "Could not get currencies (#{response.body})."
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ module ZafuMethods
88
+ # Used to build a currency selector with current exchange rates from openexchangerates API.
89
+ def r_currency_options
90
+ return parser_error('missing list parameter') unless list = @params[:list]
91
+ list = ::RubyLess.translate(self, list)
92
+ base = ::RubyLess.translate(self, @params[:selected] || 'nil')
93
+ out "<%= currency_options(#{list}, #{base}) %>"
94
+ end
95
+ end
96
+
97
+ module ViewMethods
98
+ include RubyLess
99
+
100
+ # Returns jsonp
101
+ safe_method [:currency_rates, [String], String] => String
102
+
103
+ # Returns a list of currency rates compatible with Javascript.
104
+ def currency_rates(list, base)
105
+ Bricks::Currency.get_rates(list, base).inspect
106
+ rescue
107
+ '[]'
108
+ end
109
+
110
+ def currency_options(list, base = 'USD')
111
+ Bricks::Currency.get_rates(list, base).map do |n, c, title|
112
+ "<option data-c='#{c}' value='#{n}'#{n==base ? " selected='selected'" : ""}>#{n} (#{title})</option>"
113
+ end.join("\n")
114
+ rescue => err
115
+ Rails.logger.warn "Could not get exchange rates! (#{err.message})"
116
+ "<!-- Could not get exchange rates -->"
117
+ end
118
+ end
119
+ end # Currency
120
+ end # Bricks