zena 1.0.0.beta3 → 1.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. data/History.txt +29 -0
  2. data/Rakefile +2 -0
  3. data/TODO_ZENA_1_0 +13 -23
  4. data/app/controllers/columns_controller.rb +1 -1
  5. data/app/controllers/comments_controller.rb +4 -3
  6. data/app/controllers/documents_controller.rb +8 -11
  7. data/app/controllers/nodes_controller.rb +39 -21
  8. data/app/controllers/users_controller.rb +8 -3
  9. data/app/controllers/versions_controller.rb +2 -2
  10. data/app/controllers/virtual_classes_controller.rb +17 -11
  11. data/app/helpers/documents_helper.rb +0 -3
  12. data/app/helpers/users_helper.rb +17 -0
  13. data/app/models/cache.rb +36 -31
  14. data/app/models/column.rb +48 -5
  15. data/app/models/comment.rb +14 -5
  16. data/app/models/data_entry.rb +2 -2
  17. data/app/models/document.rb +23 -33
  18. data/app/models/idx_nodes_datetime.rb +4 -0
  19. data/app/models/idx_nodes_float.rb +4 -0
  20. data/app/models/idx_project.rb +3 -0
  21. data/app/models/node.rb +372 -308
  22. data/app/models/page.rb +1 -31
  23. data/app/models/relation.rb +4 -4
  24. data/app/models/relation_proxy.rb +128 -17
  25. data/app/models/role.rb +27 -2
  26. data/app/models/site.rb +64 -56
  27. data/app/models/template.rb +11 -12
  28. data/app/models/text_document.rb +6 -7
  29. data/app/models/user.rb +95 -46
  30. data/app/models/version.rb +2 -2
  31. data/app/models/virtual_class.rb +418 -73
  32. data/app/views/columns/_form.html.erb +1 -1
  33. data/app/views/columns/_li.html.erb +1 -1
  34. data/app/views/comments/_form.rhtml +1 -1
  35. data/app/views/comments/_li.rhtml +1 -1
  36. data/app/views/comments/_li_simple.rhtml +1 -1
  37. data/app/views/groups/_form.rhtml +1 -1
  38. data/app/views/links/_li.rhtml +1 -1
  39. data/app/views/nodes/_groups.rhtml +1 -1
  40. data/app/views/nodes/_import_results.rhtml +1 -1
  41. data/app/views/nodes/_parent.rhtml +1 -1
  42. data/app/views/nodes/_results.rhtml +1 -1
  43. data/app/views/nodes/create.rjs +4 -2
  44. data/app/views/relations/_li.erb +2 -2
  45. data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
  46. data/app/views/templates/document_create_tabs/_template.rhtml +2 -2
  47. data/app/views/templates/document_create_tabs/_text_document.rhtml +2 -2
  48. data/app/views/templates/edit_tabs/_help.rhtml +1 -1
  49. data/app/views/templates/edit_tabs/_title.rhtml +0 -3
  50. data/app/views/users/_form.rhtml +2 -6
  51. data/app/views/users/_li.rhtml +1 -3
  52. data/app/views/users/create.rjs +4 -4
  53. data/app/views/users/preferences.html.erb +1 -4
  54. data/app/views/versions/custom_tab.rhtml +5 -0
  55. data/app/views/virtual_classes/_form.erb +20 -10
  56. data/app/views/virtual_classes/_li.erb +21 -8
  57. data/app/views/zafu/default/Node-+search.zafu +1 -1
  58. data/app/views/zafu/default/Node.zafu +3 -3
  59. data/bricks/captcha/lib/bricks/captcha.rb +1 -1
  60. data/bricks/mongrel/zena/deploy.rb +14 -0
  61. data/bricks/{data2pdf → pdf}/.document +0 -0
  62. data/bricks/pdf/README +33 -0
  63. data/bricks/{data2pdf → pdf}/Rakefile +0 -0
  64. data/bricks/pdf/VERSION +1 -0
  65. data/bricks/pdf/lib/bricks/pdf.rb +110 -0
  66. data/bricks/pdf/lib/bricks/pdf/engine/prince.rb +38 -0
  67. data/bricks/pdf/lib/bricks/pdf/engine/xhtml2pdf.rb +9 -0
  68. data/bricks/pdf/lib/bricks/pdf/install.rb +121 -0
  69. data/bricks/pdf/test/engines/test_prince.rb +15 -0
  70. data/bricks/pdf/test/engines/test_xhtml2pdf.rb +15 -0
  71. data/bricks/{data2pdf → pdf}/test/fixtures/application.css +0 -0
  72. data/bricks/{data2pdf → pdf}/test/fixtures/contact.html +0 -0
  73. data/bricks/{data2pdf → pdf}/test/fixtures/pisa-default.css +0 -0
  74. data/bricks/{data2pdf → pdf}/test/fixtures/sheet1.css +0 -0
  75. data/bricks/{data2pdf → pdf}/test/fixtures/sheet2.css +0 -0
  76. data/bricks/{data2pdf → pdf}/test/fixtures/simple-html.html +0 -0
  77. data/bricks/{data2pdf → pdf}/test/fixtures/simple-text.txt +0 -0
  78. data/bricks/{data2pdf → pdf}/test/helper.rb +4 -5
  79. data/bricks/pdf/test/shoulda_macros/shoulda_pdf.rb +72 -0
  80. data/bricks/pdf/zena/init.rb +5 -0
  81. data/bricks/pdf/zena/tasks.rb +17 -0
  82. data/bricks/sphinx/lib/{use_sphinx.rb → bricks/sphinx.rb} +1 -1
  83. data/bricks/tags/zena/init.rb +2 -2
  84. data/bricks/tags/zena/test/zafu/tags.yml +4 -4
  85. data/bricks/zena/zena/migrate/01_base.rb +482 -0
  86. data/config/bricks.yml +22 -6
  87. data/config/gems.yml +8 -6
  88. data/db/20100628074512_zena0x_to1x.rb +6 -1
  89. data/db/fix/024_correct_vclass_kpath.rb +11 -0
  90. data/db/fix/025_move_tag_into_vclass.rb +13 -0
  91. data/db/{migrate → fix}/026_rename_templates.rb +0 -0
  92. data/db/{migrate → fix}/045_avoid_star_in_templates.rb +0 -0
  93. data/db/{migrate → fix}/046_fix_zazen_image_tag.rb +0 -0
  94. data/db/{migrate → fix}/047_change_default_link_id_to_zero.rb +1 -3
  95. data/db/{migrate → fix}/049_fix_publish_from_is_null.rb +0 -0
  96. data/db/{migrate → fix}/20090924141459_zafu_fix_sept09.rb +0 -0
  97. data/db/{migrate → fix}/20091013100351_rename_publish_group_to_drive_group.rb +1 -3
  98. data/db/{migrate → fix}/20091124161608_rebuild_fullpath.rb +0 -1
  99. data/db/{migrate → fix}/20100115134729_rebuild_fullpath_after_fix.rb +0 -0
  100. data/db/{migrate → fix}/20100526090140_renamed_contact_model_to_base_contact.rb +2 -4
  101. data/db/{migrate → fix/old_migrations}/001_create_base.rb +0 -1
  102. data/db/{migrate → fix/old_migrations}/002_add_time_zone_to_users.rb +0 -0
  103. data/db/{migrate → fix/old_migrations}/003_add_custom_base_flag.rb +0 -0
  104. data/db/{migrate → fix/old_migrations}/004_rename_template_skin.rb +0 -0
  105. data/db/{migrate → fix/old_migrations}/005_create_cached_pages.rb +0 -0
  106. data/db/{migrate → fix/old_migrations}/006_create_sites.rb +0 -0
  107. data/db/{migrate → fix/old_migrations}/007_replace_id_by_zip.rb +0 -0
  108. data/db/{migrate → fix/old_migrations}/008_user_status.rb +0 -0
  109. data/db/{migrate → fix/old_migrations}/009_fulltext.rb +0 -0
  110. data/db/fix/old_migrations/010_create_template_content.rb +17 -0
  111. data/db/{migrate → fix/old_migrations}/011_project_to_section.rb +0 -0
  112. data/db/{migrate → fix/old_migrations}/012_add_project_id.rb +0 -0
  113. data/db/{migrate → fix/old_migrations}/013_remove_defaults.rb +0 -0
  114. data/db/{migrate → fix/old_migrations}/014_add_sort_field.rb +0 -0
  115. data/db/{migrate → fix/old_migrations}/015_add_dyn_attributes.rb +0 -0
  116. data/db/{migrate → fix/old_migrations}/016_remove_translations.rb +0 -0
  117. data/db/{migrate → fix/old_migrations}/017_rename_authorize.rb +0 -0
  118. data/db/{migrate → fix/old_migrations}/018_add_auth_option.rb +0 -0
  119. data/db/{migrate → fix/old_migrations}/019_remove_user_status.rb +0 -0
  120. data/db/{migrate → fix/old_migrations}/020_create_participation.rb +0 -0
  121. data/db/{migrate → fix/old_migrations}/021_create_relations.rb +0 -0
  122. data/db/{migrate → fix/old_migrations}/022_create_virtual_classes.rb +0 -0
  123. data/db/{migrate → fix/old_migrations}/023_ip_on_anonymous_comment.rb +0 -0
  124. data/db/{migrate → fix/old_migrations}/027_add_country_to_contacts.rb +0 -0
  125. data/db/{migrate → fix/old_migrations}/028_change_size_of_conten_type_field.rb +0 -0
  126. data/db/{migrate → fix/old_migrations}/029_create_data_entries.rb +0 -0
  127. data/db/{migrate → fix/old_migrations}/030_redit_auto_publish_site_settings.rb +0 -0
  128. data/db/{migrate → fix/old_migrations}/031_create_iformats.rb +0 -0
  129. data/db/{migrate → fix/old_migrations}/032_caches_context_as_hash.rb +0 -0
  130. data/db/{migrate → fix/old_migrations}/033_documents_kpath_change.rb +0 -0
  131. data/db/{migrate → fix/old_migrations}/034_change_file_storage.rb +0 -0
  132. data/db/{migrate → fix/old_migrations}/035_add_status_to_link.rb +0 -0
  133. data/db/{migrate → fix/old_migrations}/036_add_flag_fields_on_nodes.rb +0 -0
  134. data/db/{migrate → fix/old_migrations}/037_add_auto_create_discussion_to_v_class.rb +0 -0
  135. data/db/{migrate → fix/old_migrations}/038_create_site_attributes.rb +0 -0
  136. data/db/{migrate → fix/old_migrations}/039_default_position.rb +0 -0
  137. data/db/{migrate → fix/old_migrations}/040_second_value_for_data_entry.rb +0 -0
  138. data/db/{migrate → fix/old_migrations}/041_add_attributes_to_v_class.rb +0 -0
  139. data/db/{migrate → fix/old_migrations}/042_fix_position_should_be_float.rb +0 -0
  140. data/db/{migrate → fix/old_migrations}/043_move_user_lang_into_participation.rb +0 -0
  141. data/db/{migrate → fix/old_migrations}/044_remove_monolingual_site_option.rb +0 -0
  142. data/db/{migrate → fix/old_migrations}/048_link_source_target_can_be_null.rb +0 -0
  143. data/db/{migrate → fix/old_migrations}/050_date_in_links.rb +0 -0
  144. data/db/{migrate → fix/old_migrations}/051_add_exif_tags_to_images.rb +0 -0
  145. data/db/{migrate → fix/old_migrations}/20090825201159_insert_zero_link.rb +0 -0
  146. data/db/{migrate → fix/old_migrations}/20090825201200_merge_bricks_migrations_with_std_migrations.rb +0 -0
  147. data/db/{migrate → fix/old_migrations}/20090927125912_allow_null_in_text_fields.rb +0 -0
  148. data/db/{migrate → fix/old_migrations}/20090928133440_no_more_private_nodes.rb +0 -0
  149. data/db/{migrate → fix/old_migrations}/20090928143754_version_status_change.rb +0 -0
  150. data/db/{migrate → fix/old_migrations}/20091001084025_change_status_values_for_comments.rb +0 -0
  151. data/db/{migrate → fix/old_migrations}/20091009084057_add_vhash_in_node.rb +0 -0
  152. data/db/{migrate → fix/old_migrations}/20091014130833_fix_template_title.rb +0 -0
  153. data/db/{migrate → fix/old_migrations}/20091014183726_merge_participation_into_users.rb +0 -0
  154. data/db/{migrate → fix/old_migrations}/20091018200734_add_popup_info_to_image_format.rb +0 -0
  155. data/db/{migrate → fix/old_migrations}/20091026161708_add_persistence_token.rb +0 -0
  156. data/db/{migrate → fix/old_migrations}/20091101184952_add_session_table.rb +0 -0
  157. data/db/{migrate → fix/old_migrations}/20091123175137_add_single_access_token.rb +0 -0
  158. data/db/{migrate → fix/old_migrations}/20100125062254_add_dynamo_to_version.rb +0 -0
  159. data/db/{migrate → fix/old_migrations}/20100201133242_remove_default_status_on_version.rb +0 -0
  160. data/db/{migrate → fix/old_migrations}/20100208194210_create_attachments.rb +0 -0
  161. data/db/{migrate → fix/old_migrations}/20100210112319_change_dynamo_to_property.rb +0 -0
  162. data/db/{migrate → fix/old_migrations}/20100320145726_transform_template_contents_into_index.rb +0 -0
  163. data/db/{migrate → fix/old_migrations}/20100328125634_change_skin_name_to_id.rb +0 -0
  164. data/db/{migrate → fix/old_migrations}/20100417061257_add_properties_to_sites.rb +0 -0
  165. data/db/{migrate → fix/old_migrations}/20100419163149_rename_name_to_node_name.rb +0 -0
  166. data/db/{migrate → fix/old_migrations}/20100422091606_change_v_class_table_into_roles.rb +0 -0
  167. data/db/{migrate → fix/old_migrations}/20100422094048_node_habtm_roles.rb +0 -0
  168. data/db/{migrate → fix/old_migrations}/20100422115935_create_columns.rb +0 -0
  169. data/db/{migrate → fix/old_migrations}/20100513181529_add_site_id_to_columns.rb +0 -0
  170. data/db/{migrate → fix/old_migrations}/20100519091711_add_index_definition_to_columns.rb +0 -0
  171. data/db/{migrate → fix/old_migrations}/20100519091940_create_idx_nodes_string.rb +0 -0
  172. data/db/{migrate → fix/old_migrations}/20100519232432_create_idx_nodes_ml_string.rb +0 -0
  173. data/db/{migrate → fix/old_migrations}/20100525113858_add_porperties_to_users.rb +0 -0
  174. data/db/{migrate → fix/old_migrations}/20100527130937_change_column_index_to_string.rb +0 -0
  175. data/db/{migrate → fix/old_migrations}/20100531135128_add_fulltext_builder_fields.rb +0 -0
  176. data/db/{migrate → fix/old_migrations}/20100915062903_add_api_group_id_to_site.rb +0 -0
  177. data/db/fix/old_migrations/20100923154807_remove_base_contact.rb +84 -0
  178. data/db/fix/old_migrations/20100926192223_remove_su_user.rb +8 -0
  179. data/db/fix/old_migrations/20100927141658_add_eval_attributes_to_v_class.rb +12 -0
  180. data/db/fix/old_migrations/20100928185257_add_obvious_idx.rb +52 -0
  181. data/db/fix/old_migrations/20100929143111_remove_node_name.rb +11 -0
  182. data/db/fix/old_migrations/20101006090454_store_properties_in_long_text.rb +9 -0
  183. data/db/fix/old_migrations/20101014185753_remove_user_prototype_id.rb +9 -0
  184. data/db/fix/old_migrations/20101101084318_create_scope_index.rb +35 -0
  185. data/db/fix/old_migrations/20101109074232_create_idx_nodes_tables.rb +65 -0
  186. data/db/fix/old_migrations/20101110184235_add_role_update_to_site.rb +9 -0
  187. data/db/fix/old_migrations/20101116103920_change_scope_index.rb +31 -0
  188. data/db/fix/old_migrations/20101123125822_add_integer_idx.rb +17 -0
  189. data/db/fix/old_migrations/20101130134522_add_index_field.rb +13 -0
  190. data/db/fix/old_migrations/20101213133816_add_group_to_relation.rb +9 -0
  191. data/db/init/base/help.fr.zml +1 -1
  192. data/db/init/base/skins/default.zml +0 -1
  193. data/db/init/base/skins/default/Node-+search.zafu +1 -1
  194. data/db/init/base/skins/default/Node-tree.zafu +3 -3
  195. data/db/init/base/skins/default/Node.zafu +3 -3
  196. data/lib/bricks/loader.rb +4 -1
  197. data/lib/bricks/requirements_validation.rb +11 -6
  198. data/lib/log_recorder/lib/log_recorder.rb +2 -2
  199. data/lib/tasks/zena.rake +25 -15
  200. data/lib/zena.rb +42 -9
  201. data/lib/zena/acts/enrollable.rb +81 -99
  202. data/lib/zena/acts/secure.rb +27 -23
  203. data/lib/zena/acts/secure_node.rb +10 -55
  204. data/lib/zena/acts/serializable.rb +9 -10
  205. data/lib/zena/app.rb +0 -2
  206. data/lib/zena/code_syntax.rb +1 -1
  207. data/lib/zena/controller/test_case.rb +0 -5
  208. data/lib/zena/core_ext/string.rb +48 -20
  209. data/lib/zena/db.rb +10 -442
  210. data/lib/zena/db_helper/abstract_db.rb +184 -0
  211. data/lib/zena/db_helper/mysql.rb +150 -0
  212. data/lib/zena/db_helper/postgresql.rb +79 -0
  213. data/lib/zena/db_helper/sqlite3.rb +135 -0
  214. data/lib/zena/deploy.rb +4 -1
  215. data/lib/zena/deploy/httpd.rhtml +3 -3
  216. data/lib/zena/deploy/vhost.rhtml +1 -1
  217. data/lib/zena/foxy_parser.rb +37 -18
  218. data/lib/zena/info.rb +3 -13
  219. data/lib/zena/migrator.rb +0 -1
  220. data/lib/zena/parser/zafu_rules.rb +9 -4
  221. data/lib/zena/parser/zazen_rules.rb +5 -5
  222. data/lib/zena/parser/zena_rules.rb +1 -1
  223. data/lib/zena/remote/interface.rb +1 -1
  224. data/lib/zena/site_worker.rb +3 -3
  225. data/lib/zena/test_controller.rb +10 -10
  226. data/lib/zena/use/action.rb +66 -6
  227. data/lib/zena/use/ajax.rb +39 -13
  228. data/lib/zena/use/ancestry.rb +210 -0
  229. data/lib/zena/use/authlogic.rb +30 -1
  230. data/lib/zena/use/calendar.rb +158 -0
  231. data/lib/zena/use/conditional.rb +3 -2
  232. data/lib/zena/use/context.rb +42 -12
  233. data/lib/zena/use/dates.rb +15 -14
  234. data/lib/zena/use/display.rb +54 -7
  235. data/lib/zena/use/error_rendering.rb +1 -0
  236. data/lib/zena/use/field_index.rb +20 -0
  237. data/lib/zena/use/fixtures.rb +12 -9
  238. data/lib/zena/use/forms.rb +230 -106
  239. data/lib/zena/use/fulltext.rb +28 -14
  240. data/lib/zena/use/html_tags.rb +1 -24
  241. data/lib/zena/use/i18n.rb +69 -14
  242. data/lib/zena/use/kpath.rb +60 -0
  243. data/lib/zena/use/ml_index.rb +6 -4
  244. data/lib/zena/use/node_context.rb +63 -0
  245. data/lib/zena/use/prop_eval.rb +90 -0
  246. data/lib/zena/use/query_builder.rb +159 -29
  247. data/lib/zena/use/query_comment.rb +1 -1
  248. data/lib/zena/use/query_node.rb +147 -56
  249. data/lib/zena/use/recursion.rb +2 -2
  250. data/lib/zena/use/relations.rb +31 -19
  251. data/lib/zena/use/rendering.rb +111 -121
  252. data/lib/zena/use/scope_index.rb +230 -0
  253. data/lib/zena/use/search.rb +7 -7
  254. data/lib/zena/use/urls.rb +87 -25
  255. data/lib/zena/use/version_hash.rb +113 -113
  256. data/lib/zena/use/workflow.rb +5 -1
  257. data/lib/zena/use/zafu_attributes.rb +11 -14
  258. data/lib/zena/use/zafu_eval.rb +1 -1
  259. data/lib/zena/use/zafu_safe_definitions.rb +91 -9
  260. data/lib/zena/use/zafu_templates.rb +146 -102
  261. data/lib/zena/use/zazen.rb +5 -4
  262. data/lib/zena/zafu_compiler.rb +1 -0
  263. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  264. data/locale/en/zena.po +0 -1
  265. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  266. data/locale/fr/zena.mo +0 -0
  267. data/locale/fr/zena.po +4 -4
  268. data/misc/zena +35 -0
  269. data/misc/zena_init +41 -0
  270. data/public/images/ext/{basecontact.png → contact.png} +0 -0
  271. data/public/javascripts/zena.js +35 -7
  272. data/public/stylesheets/admin.css +5 -2
  273. data/public/stylesheets/default.css +2 -1
  274. data/public/stylesheets/popup.css +1 -1
  275. data/public/stylesheets/zena.css +2 -2
  276. data/test/custom_queries/complex.host.yml +12 -5
  277. data/test/fixtures/files/Node-test.zafu +3 -3
  278. data/test/fixtures/files/translations_fr.yml +4 -2
  279. data/test/functional/documents_controller_test.rb +31 -0
  280. data/test/functional/nodes_controller_commit_test.rb +1 -5
  281. data/test/functional/nodes_controller_test.rb +92 -12
  282. data/test/functional/user_sessions_controller_test.rb +2 -2
  283. data/test/functional/users_controller_test.rb +31 -29
  284. data/test/functional/versions_controller_test.rb +2 -2
  285. data/test/functional/virtual_classes_controller_test.rb +2 -2
  286. data/test/integration/multiple_hosts_test.rb +19 -8
  287. data/test/integration/navigation_test.rb +91 -12
  288. data/test/integration/query_node/basic.yml +40 -37
  289. data/test/integration/query_node/complex.yml +23 -18
  290. data/test/integration/query_node/dates.yml +3 -3
  291. data/test/integration/query_node/errors.yml +7 -1
  292. data/test/integration/query_node/filters.yml +41 -35
  293. data/test/integration/query_node/idx_fields.yml +11 -0
  294. data/test/integration/query_node/idx_key_value.yml +77 -0
  295. data/test/integration/query_node/idx_scope.yml +33 -0
  296. data/test/integration/query_node/relations.yml +13 -13
  297. data/test/integration/query_node_test.rb +6 -10
  298. data/test/integration/zafu_compiler/action.yml +19 -6
  299. data/test/integration/zafu_compiler/ajax.yml +111 -51
  300. data/test/integration/zafu_compiler/apphelper.yml +1 -1
  301. data/test/integration/zafu_compiler/asset.yml +1 -1
  302. data/test/integration/zafu_compiler/basic.yml +42 -52
  303. data/test/integration/zafu_compiler/calendar.yml +3 -3
  304. data/test/integration/zafu_compiler/complex.yml +16 -16
  305. data/test/integration/zafu_compiler/complex_ok.yml +2 -2
  306. data/test/integration/zafu_compiler/conditional.yml +42 -33
  307. data/test/integration/zafu_compiler/data.yml +3 -3
  308. data/test/integration/zafu_compiler/dates.yml +25 -10
  309. data/test/integration/zafu_compiler/display.yml +49 -12
  310. data/test/integration/zafu_compiler/errors.yml +26 -6
  311. data/test/integration/zafu_compiler/eval.yml +4 -4
  312. data/test/integration/zafu_compiler/forms.yml +89 -15
  313. data/test/integration/zafu_compiler/i18n.yml +23 -18
  314. data/test/integration/zafu_compiler/idx_scope.yml +7 -0
  315. data/test/integration/zafu_compiler/later.yml +10 -16
  316. data/test/integration/zafu_compiler/off/off.yml +2 -2
  317. data/test/integration/zafu_compiler/query.yml +207 -0
  318. data/test/integration/zafu_compiler/recursion.yml +2 -2
  319. data/test/integration/zafu_compiler/relations.yml +144 -168
  320. data/test/integration/zafu_compiler/roles.yml +86 -10
  321. data/test/integration/zafu_compiler/rubyless.yml +49 -6
  322. data/test/integration/zafu_compiler/safe_definitions.yml +35 -6
  323. data/test/integration/zafu_compiler/search.yml +1 -1
  324. data/test/integration/zafu_compiler/security.yml +37 -0
  325. data/test/integration/zafu_compiler/urls.yml +50 -40
  326. data/test/integration/zafu_compiler/user.yml +21 -6
  327. data/test/integration/zafu_compiler/version.yml +6 -6
  328. data/test/integration/zafu_compiler/zafu_attributes.yml +43 -34
  329. data/test/integration/zafu_compiler/zazen.yml +10 -10
  330. data/test/integration/zafu_compiler_test.rb +19 -13
  331. data/test/sites/complex/nodes.yml +0 -2
  332. data/test/sites/complex/roles.yml +9 -1
  333. data/test/sites/complex/sites.yml +0 -1
  334. data/test/sites/complex/users.yml +2 -5
  335. data/test/sites/ocean/nodes.yml +2 -5
  336. data/test/sites/ocean/roles.yml +8 -0
  337. data/test/sites/ocean/sites.yml +0 -1
  338. data/test/sites/ocean/users.yml +0 -13
  339. data/test/sites/zena/columns.yml +27 -5
  340. data/test/sites/zena/idx_projects.yml +5 -0
  341. data/test/sites/zena/nodes.yml +8 -32
  342. data/test/sites/zena/relations.yml +5 -0
  343. data/test/sites/zena/roles.yml +25 -3
  344. data/test/sites/zena/sites.yml +2 -2
  345. data/test/sites/zena/users.yml +1 -21
  346. data/test/sites/zena/versions.yml +35 -12
  347. data/test/test_helper.rb +7 -0
  348. data/test/unit/after_commit_test.rb +7 -7
  349. data/test/unit/cache_test.rb +32 -0
  350. data/test/unit/cached_page_test.rb +1 -1
  351. data/test/unit/column_test.rb +31 -7
  352. data/test/unit/comment_test.rb +2 -2
  353. data/test/unit/core_ext_test.rb +38 -7
  354. data/test/unit/document_test.rb +14 -42
  355. data/test/unit/node_test.rb +311 -324
  356. data/test/unit/note_test.rb +23 -31
  357. data/test/unit/page_test.rb +16 -58
  358. data/test/unit/project_test.rb +2 -2
  359. data/test/unit/relation_proxy_test.rb +148 -21
  360. data/test/unit/relation_test.rb +23 -3
  361. data/test/unit/remote_test.rb +15 -9
  362. data/test/unit/role_test.rb +9 -0
  363. data/test/unit/site_test.rb +49 -47
  364. data/test/unit/skin_test.rb +16 -0
  365. data/test/unit/template_test.rb +60 -69
  366. data/test/unit/text_document_test.rb +15 -14
  367. data/test/unit/user_test.rb +101 -41
  368. data/test/unit/version_test.rb +4 -4
  369. data/test/unit/virtual_class_test.rb +577 -36
  370. data/test/unit/workflow_test.rb +58 -21
  371. data/test/unit/zena/acts/enrollable_test.rb +36 -127
  372. data/test/unit/zena/acts/secure_test.rb +6 -22
  373. data/test/unit/zena/acts/serializable_test.rb +18 -0
  374. data/test/unit/zena/db_test.rb +14 -14
  375. data/test/unit/zena/parser/zafu.yml +5 -3
  376. data/test/unit/zena/use/ancestry_test.rb +198 -0
  377. data/test/unit/zena/use/calendar_test.rb +8 -8
  378. data/test/unit/zena/use/dates_test.rb +2 -0
  379. data/test/unit/zena/use/fulltext_test.rb +9 -1
  380. data/test/unit/zena/use/html_tags_test.rb +2 -16
  381. data/test/unit/zena/use/i18n_test.rb +2 -2
  382. data/test/unit/zena/use/kpath_test.rb +13 -0
  383. data/test/unit/zena/use/ml_index_test.rb +60 -12
  384. data/test/unit/zena/use/prop_eval_test.rb +170 -0
  385. data/test/unit/zena/use/query_node_test.rb +9 -2
  386. data/test/unit/zena/use/rendering_test.rb +98 -1
  387. data/test/unit/zena/use/scope_index_test.rb +464 -0
  388. data/test/unit/zena/use/urls_test.rb +23 -13
  389. data/test/unit/zena/use/version_hash_test.rb +2 -2
  390. data/test/unit/zena/use/zafu_template_test.rb +21 -8
  391. data/test/unit/zena/use/zazen_test.rb +47 -47
  392. data/zena.gemspec +177 -143
  393. metadata +222 -141
  394. data/app/models/base_contact.rb +0 -79
  395. data/app/models/book.rb +0 -242
  396. data/app/models/contact_content.rb +0 -70
  397. data/app/models/contact_version.rb +0 -40
  398. data/app/models/reference.rb +0 -18
  399. data/app/views/templates/edit_tabs/_basecontact.rhtml +0 -8
  400. data/bricks/data2pdf/README +0 -19
  401. data/bricks/data2pdf/VERSION +0 -1
  402. data/bricks/data2pdf/lib/data2pdf.rb +0 -60
  403. data/bricks/data2pdf/lib/engines/prince.rb +0 -39
  404. data/bricks/data2pdf/lib/engines/xhtml2pdf.rb +0 -41
  405. data/bricks/data2pdf/lib/install.rb +0 -111
  406. data/bricks/data2pdf/test/engines/test_prince.rb +0 -14
  407. data/bricks/data2pdf/test/engines/test_xhtml2pdf.rb +0 -14
  408. data/bricks/data2pdf/test/shoulda_macros/shoulda_data2pdf.rb +0 -91
  409. data/bricks/data2pdf/test/unit/test_rendering.rb +0 -37
  410. data/config/routes.rb +0 -3
  411. data/db/migrate/010_create_template_content.rb +0 -17
  412. data/db/migrate/024_correct_vclass_kpath.rb +0 -13
  413. data/db/migrate/025_move_tag_into_vclass.rb +0 -15
  414. data/lib/version_off.rb +0 -323
  415. data/lib/zena/use/node_name.rb +0 -94
  416. data/test/integration/query_node/properties.yml +0 -41
  417. data/test/unit/base_contact_test.rb +0 -242
  418. data/test/unit/node_name_test.rb +0 -137
data/History.txt CHANGED
@@ -1,3 +1,32 @@
1
+ == 1.0.0.rc1 2011-02-11
2
+
3
+ * major changes
4
+ * Changed 'date' for 'main_date'
5
+ * Added 'redir' option on node update/create (also added 'mode')
6
+
7
+ == 1.0.0.beta5
8
+
9
+ * major changes
10
+ * Using VirtualClass as proxy for type compilation (RubyLess, Zafu).
11
+ * Caching Roles and VirtualClass.
12
+ * Added 'integer' property with index.
13
+ * Added query_parse (parse form content such as '>34' or '10..34').
14
+ * Enable setting relations with SQLiss.
15
+ * Changed class filter from '<r:Contact>' to '<r:Contact?>'.
16
+ * Added VirtualClass introspection from zafu with [grid] and Node [send] methods.
17
+ * Added relation groups.
18
+ * Added 'map' and 'join' support to Array in RubyLess.
19
+ * Added dynamic values support for [toggle].
20
+
21
+ == 1.0.0.beta4
22
+
23
+ * major changes
24
+ * Removed BaseContact and Reference classes.
25
+ * Removed super user (not needed anymore).
26
+ * Upgraded to Property 2.0 (should resolve memory leak)
27
+ * Added support for Scoped indices.
28
+ * Added support for field indices.
29
+
1
30
  == 1.0.0.beta3 2010-09-17
2
31
 
3
32
  * major changes
data/Rakefile CHANGED
@@ -26,6 +26,8 @@ begin
26
26
  gemspec.version = Zena::VERSION
27
27
  gemspec.rubyforge_project = 'zena'
28
28
 
29
+ gemspec.files.exclude 'config/routes.rb'
30
+
29
31
  # Gem dependecies
30
32
  Zena.gem_configuration.each do |gem_name, gem_config|
31
33
  if gem_config
data/TODO_ZENA_1_0 CHANGED
@@ -1,23 +1,13 @@
1
- List of things to discuss
2
- =========================
3
-
4
- Relation between zena, custom applications and bricks:
5
-
6
- 1. custom models
7
- 2. custom migrations
8
- 3. custom zafu rules
9
- 4. custom tests
10
-
11
- Folder structure should be like a rails application with some elements missing (all zena controllers, views, helpers, etc). It
12
- should still launch in Passenger and all other servers like mongrel.
13
-
14
- my_app
15
- +-- app (same structure as a brick)
16
- | +-- models (custom application stuff)
17
- | +-- controllers
18
- | +-- helpers
19
- | +-- zafu (custom zafu tags)
20
- +-- bricks
21
- +-- config
22
- +-- sites
23
- +-- vendor
1
+ TODO
2
+ ====
3
+
4
+ 0. change url ! to /fr/pasdfj94859
5
+ 1. POST ! instead of GET during preview (long articles !!!)
6
+ 2. Change fullpath to zip/zip/zip
7
+ 3. Update tags API: tags => [String] (tag_names), tag_list => String, tag_links => ['Link']
8
+ 3. Rename virtual_classes_controller to roles_controller
9
+ 4. kill node_name
10
+
11
+ 5. secure XML API (get cookie: do not send login each time)
12
+ 6. index log_at/event_at/custom_a/custom_b with idx_datetime1, ...
13
+ 7. move values from log_at/event_at/custom_a/custom_b in properties
@@ -9,7 +9,7 @@ class ColumnsController < ApplicationController
9
9
  def index
10
10
  roles = {}
11
11
  secure(Column) do
12
- @columns = Column.paginate(:all, :order => 'role_id ASC, name ASC', :per_page => 20, :page => params[:page]).sort! do |a, b|
12
+ @columns = Column.paginate(:all, :order => 'role_id ASC, name ASC', :per_page => 200, :page => params[:page]).sort! do |a, b|
13
13
  role_a = (roles[a.role_id] ||= a.role).name
14
14
  role_b = (roles[b.role_id] ||= b.role).name
15
15
 
@@ -22,7 +22,7 @@ class CommentsController < ApplicationController
22
22
  def create
23
23
  @discussion.save if @discussion.new_record? && @node.can_comment?
24
24
 
25
- @comment = secure!(Comment) { Comment.new(filter_attributes(params[:comment])) }
25
+ @comment = secure(Comment) { Comment.new(filter_attributes(params[:comment])) }
26
26
 
27
27
  save_if_not_spam(@comment, params)
28
28
 
@@ -90,8 +90,8 @@ class CommentsController < ApplicationController
90
90
 
91
91
  # TODO:test
92
92
  def index
93
- @node = visitor.contact
94
- secure!(Node) do
93
+ @node = visitor.node
94
+ secure(Node) do
95
95
  # TODO: preload node
96
96
  @comments = Comment.paginate :all,
97
97
  :select => "comments.*, nodes.zip AS node_zip",
@@ -100,6 +100,7 @@ class CommentsController < ApplicationController
100
100
  :conditions=>"status > #{Zena::Status[:rem]} AND (#{secure_scope('nodes')})",
101
101
  :per_page => 10, :page => params[:page]
102
102
  end
103
+ @comments ||= []
103
104
  end
104
105
 
105
106
  # TODO: test
@@ -11,10 +11,8 @@ class DocumentsController < ApplicationController
11
11
 
12
12
  # add a new document to the current node
13
13
  def new
14
- @node = @parent.new_child(:class => Document)
15
-
16
- # Add Template role so that we can use the same object in forms which need the Template properties.
17
- @node.has_role Template
14
+ # Use the Template class so that we can use the same object in forms which need the Template properties.
15
+ @node = @parent.new_child(:class => Template)
18
16
 
19
17
  respond_to do |format|
20
18
  format.html
@@ -34,16 +32,15 @@ class DocumentsController < ApplicationController
34
32
 
35
33
  respond_to do |format|
36
34
  if @node.new_record?
37
- # If skin id could not be set (invalid parent), make sure we have something to render.
38
35
  @node.skin_id ||= current_site.root_node.skin_id
39
- parent_id = (params[:node] || {})[:parent_id] || 0
40
- class << @node
41
- def parent_zip
42
- parent_id
43
- end
44
- end
45
36
 
46
37
  flash[:error] = _("Upload failed.")
38
+ unless @node.respond_to?('target_klass')
39
+ # Could we find another way to fake the new object as acting like a template ?
40
+ class << @node
41
+ def target_klass; nil; end
42
+ end
43
+ end
47
44
  format.html { render :action => 'new'}
48
45
  else
49
46
  flash[:notice] = _("Upload succeeded.")
@@ -57,7 +57,7 @@ class NodesController < ApplicationController
57
57
  format.html do
58
58
  begin
59
59
  do_search
60
- rescue QueryBuilder::Error => err
60
+ rescue ::QueryBuilder::Error => err
61
61
  flash[:error] = err.message
62
62
  end
63
63
  render_and_cache :mode => '+search', :cache => false
@@ -74,7 +74,7 @@ class NodesController < ApplicationController
74
74
  else
75
75
  render :xml => [].to_xml(:root => 'nodes')
76
76
  end
77
- rescue QueryBuilder::Error => err
77
+ rescue ::QueryBuilder::Error => err
78
78
  render :xml => [{:message => err.message}].to_xml(:root => 'errors'), :status => 401
79
79
  end
80
80
  end
@@ -170,7 +170,7 @@ class NodesController < ApplicationController
170
170
  @node.file(img_format)
171
171
  end
172
172
  elsif @node.kind_of?(TextDocument)
173
- send_data(@node.text, :filename => @node.filename, :type => 'text/css', :disposition => 'inline')
173
+ send_data(@node.text, :filename => @node.filename, :type => @node.content_type, :disposition => 'inline')
174
174
  else
175
175
  content_path = @node.filepath
176
176
  end
@@ -210,7 +210,9 @@ class NodesController < ApplicationController
210
210
  respond_to do |format|
211
211
  if @node.errors.empty?
212
212
  flash[:notice] = 'Node was successfully created.'
213
- format.html { redirect_to zen_path(@node) }
213
+ format.html {
214
+ redirect_to params[:redir] || zen_path(@node, :mode => params[:mode])
215
+ }
214
216
  format.js
215
217
  format.xml { render :xml => @node.to_xml(:root => 'node'), :status => :created, :location => node_url(@node) }
216
218
  else
@@ -223,11 +225,9 @@ class NodesController < ApplicationController
223
225
 
224
226
  # modifications of the node itself (dates, groups, revert editions, etc)
225
227
  def edit
226
- @node.load_roles!
227
-
228
228
  respond_to do |format|
229
229
  format.html do
230
- @title_for_layout = @node.rootpath
230
+ @title_for_layout = title_for_layout
231
231
  end
232
232
 
233
233
  format.js do
@@ -317,10 +317,11 @@ class NodesController < ApplicationController
317
317
  end
318
318
 
319
319
  def export
320
- send_file(@node.archive.path, :filename=>"#{@node.name}.tgz", :type => 'application/x-gzip', :x_sendfile => ENABLE_XSENDFILE)
320
+ send_file(@node.archive.path, :filename=>"#{@node.title}.tgz", :type => 'application/x-gzip', :x_sendfile => ENABLE_XSENDFILE)
321
321
  end
322
322
 
323
323
  def update
324
+ params['node'] ||= {}
324
325
  file, file_error = get_attachment
325
326
  params['node']['file'] = file if file
326
327
 
@@ -351,12 +352,30 @@ class NodesController < ApplicationController
351
352
  if params[:edit] == 'popup'
352
353
  redirect_to edit_node_version_path(:node_id => @node[:zip], :id => 0, :close => (params[:validate] ? true : nil))
353
354
  else
354
- redirect_to zen_path(@node, :mode => params[:mode])
355
+ redirect_to params[:redir] || zen_path(@node, :mode => params[:mode])
355
356
  end
356
357
  else
357
- # FIXME: Render referring page would be better
358
- # Get mode and details from request.referer
359
- render_and_cache :mode => 'edit', :cache => false
358
+ begin
359
+ if request.referer
360
+ route = ActionController::Routing::Routes.recognize_path(request.referer[%r{https?://[^/]+(.*)},1])
361
+ else
362
+ route = {:action => 'show'}
363
+ end
364
+ if route[:action] == 'index'
365
+ mode = '+index'
366
+ elsif route[:action] == 'search'
367
+ mode = '+search'
368
+ elsif path = route[:path]
369
+ if path.last =~ Zena::Use::Urls::ALLOWED_REGEXP
370
+ zip = $3
371
+ name = $4
372
+ mode = $5 == '' ? nil : $5[1..-1]
373
+ end
374
+ end
375
+ rescue ActionController::RoutingError
376
+ mode = nil
377
+ end
378
+ render_and_cache :mode => mode, :cache => false
360
379
  end
361
380
  end # html
362
381
 
@@ -366,7 +385,7 @@ class NodesController < ApplicationController
366
385
  if @node.errors.empty?
367
386
  render :xml => @node.to_xml, :status => :ok, :location => node_url(@node)
368
387
  else
369
- render :xml => @page.errors, :status => :unprocessable_entity
388
+ render :xml => @node.errors, :status => :unprocessable_entity
370
389
  end
371
390
  end # xml
372
391
  end
@@ -389,6 +408,8 @@ class NodesController < ApplicationController
389
408
  node_id = secure!(Node) { Node.translate_pseudo_id(id_query, :id, @node)}
390
409
  @node = secure!(Node) { Node.find(node_id) }
391
410
  elsif name_query = params[:name]
411
+ # Get attribute by name
412
+ # TODO: test
392
413
  if name_query =~ /^(.*)\.[a-z]{2,3}$/
393
414
  name_query = $1
394
415
  end
@@ -400,11 +421,8 @@ class NodesController < ApplicationController
400
421
  conditions << "#{kpath}%"
401
422
  end
402
423
 
403
- conditions[0] << "node_name LIKE ?"
404
- conditions << "#{name_query}%"
405
-
406
- conditions[0] = conditions[0].join(' AND ')
407
- @node = secure!(Node) { Node.find(:first, :conditions => conditions, :order => "zip DESC")}
424
+ name_query = "#{name_query}%"
425
+ @node = secure!(Node) { Node.find_by_title(name_query, :conditions => conditions, :order => "zip DESC", :like => true)}
408
426
  end
409
427
 
410
428
  if %w{path short_path}.include?(method)
@@ -484,7 +502,7 @@ class NodesController < ApplicationController
484
502
  # archive ---> fullpath
485
503
  def find_node
486
504
  if path = params[:path]
487
- if path.last =~ /\A(([a-zA-Z]+)([0-9]+)|([a-zA-Z0-9\-\*]+))(_[a-zA-Z]+|)(\..+|)\Z/
505
+ if path.last =~ Zena::Use::Urls::ALLOWED_REGEXP
488
506
  zip = $3
489
507
  name = $4
490
508
  params[:mode] = $5 == '' ? nil : $5[1..-1]
@@ -499,7 +517,7 @@ class NodesController < ApplicationController
499
517
  if name =~ /^\d+$/
500
518
  @node = secure!(Node) { Node.find_by_zip(name) }
501
519
  elsif name
502
- basepath = (path[0..-2] + [name]).join('/')
520
+ basepath = (path[0..-2] + [name]).map! {|p| String.from_url_name(p) }.join('/')
503
521
  @node = secure!(Node) { Node.find_by_path(basepath) }
504
522
  else
505
523
  @node = secure!(Node) { Node.find_by_zip(zip) }
@@ -516,7 +534,7 @@ class NodesController < ApplicationController
516
534
  @link = Link.find_through(@node, params[:link_id])
517
535
  end
518
536
 
519
- @title_for_layout = @node.rootpath if @node
537
+ @title_for_layout = title_for_layout
520
538
  end
521
539
 
522
540
  def set_format(format)
@@ -37,6 +37,7 @@ class UsersController < ApplicationController
37
37
  # xx ==> fixed skin
38
38
  def dev_skin(skin_id = params['skin_id'])
39
39
  visitor.update_attributes('dev_skin_id' => skin_id)
40
+
40
41
  if request.referer && !(request.referer =~ /login/)
41
42
  redirect_to request.referer
42
43
  else
@@ -59,8 +60,12 @@ class UsersController < ApplicationController
59
60
  if params[:groups]
60
61
  params[:user][:group_ids] = params[:groups].values
61
62
  end
63
+
62
64
  get_groups_list
63
- @user = User.create(params[:user])
65
+
66
+ params[:user][:node_attributes] = params[:node]
67
+
68
+ @user = secure(User) { User.create(params[:user]) }
64
69
  end
65
70
 
66
71
  # TODO: test
@@ -130,7 +135,7 @@ class UsersController < ApplicationController
130
135
  end
131
136
 
132
137
  def get_groups_list
133
- @groups = secure!(Group) { Group.find(:all, :order=>'name') }
138
+ @groups = secure!(Group) { Group.find(:all, :order => 'name ASC') }
134
139
  end
135
140
 
136
141
  # Only allow if user is admin or the current user is the visitor
@@ -142,7 +147,7 @@ class UsersController < ApplicationController
142
147
  if params[:user]
143
148
  # visitor changing his/her own info : restrict fields
144
149
  params[:user].keys.each do |k|
145
- params[:user].delete(k) unless [:login, :first_name, :name, :time_zone, :lang, :email, :password, :time_zone].include?(k.to_sym)
150
+ params[:user].delete(k) unless [:login, :time_zone, :lang, :password, :time_zone].include?(k.to_sym)
146
151
  end
147
152
  end
148
153
  else
@@ -63,7 +63,7 @@ class VersionsController < ApplicationController
63
63
  end
64
64
  render :action=>'update'
65
65
  else
66
- @title_for_layout = @node.rootpath
66
+ @title_for_layout = title_for_layout
67
67
  if @node.kind_of?(TextDocument)
68
68
  if params['parse_assets']
69
69
  @node.text = @node.parse_assets(@node.text, self, 'text')
@@ -85,7 +85,7 @@ class VersionsController < ApplicationController
85
85
  def custom_tab
86
86
  render :file => template_url(:mode=>'+edit', :format=>'html'), :layout=>false
87
87
  rescue ActiveRecord::RecordNotFound
88
- render :inline => "no custom form for this class (#{@node.klass})"
88
+ render :action => 'custom_tab'
89
89
  end
90
90
 
91
91
  # TODO: test/improve or remove (experiments)
@@ -5,13 +5,19 @@ class VirtualClassesController < ApplicationController
5
5
  layout :admin_layout
6
6
 
7
7
  def index
8
- secure(VirtualClass) do
9
- @virtual_classes = Role.paginate(:all, :order => 'kpath', :per_page => 20, :page => params[:page])
8
+ secure(::Role) do
9
+ @virtual_classes = ::Role.paginate(:all, :order => 'kpath', :per_page => 200, :page => params[:page])
10
10
  end
11
11
 
12
- last_kpath = @virtual_classes.last.kpath
13
- Node.native_classes.each do |kpath, klass|
14
- if kpath < last_kpath
12
+ if last = @virtual_classes.last
13
+ last_kpath = last.kpath
14
+ Node.native_classes.each do |kpath, klass|
15
+ if kpath < last_kpath
16
+ @virtual_classes << klass
17
+ end
18
+ end
19
+ else
20
+ Node.native_classes.each do |kpath, klass|
15
21
  @virtual_classes << klass
16
22
  end
17
23
  end
@@ -19,8 +25,8 @@ class VirtualClassesController < ApplicationController
19
25
  @virtual_classes.sort! do |a, b|
20
26
  if a.kpath == b.kpath
21
27
  # Order VirtualClass first
22
- b_type = b.kind_of?(Role) ? b.class.to_s : 'V' # sort real classes like VirtualClass
23
- a_type = a.kind_of?(Role) ? a.class.to_s : 'V'
28
+ b_type = b.kind_of?(::Role) ? b.class.to_s : 'V' # sort real classes like VirtualClass
29
+ a_type = a.kind_of?(::Role) ? a.class.to_s : 'V'
24
30
 
25
31
  b_type <=> a_type
26
32
  else
@@ -37,8 +43,8 @@ class VirtualClassesController < ApplicationController
37
43
  end
38
44
 
39
45
  def export
40
- data = secure(VirtualClass) do
41
- VirtualClass.export
46
+ data = secure(::Role) do
47
+ ::Role.export
42
48
  end
43
49
 
44
50
  ### TODO
@@ -92,7 +98,7 @@ class VirtualClassesController < ApplicationController
92
98
  def create
93
99
  type = params[:virtual_class].delete(:type)
94
100
  if type == 'Role'
95
- @virtual_class = Role.new(params[:virtual_class])
101
+ @virtual_class = ::Role.new(params[:virtual_class])
96
102
  else
97
103
  @virtual_class = VirtualClass.new(params[:virtual_class])
98
104
  end
@@ -138,6 +144,6 @@ class VirtualClassesController < ApplicationController
138
144
 
139
145
  protected
140
146
  def find_virtual_class
141
- @virtual_class = secure!(VirtualClass) { Role.find(params[:id])}
147
+ @virtual_class = secure!(VirtualClass) { ::Role.find(params[:id])}
142
148
  end
143
149
  end
@@ -7,9 +7,6 @@ module DocumentsHelper
7
7
  Dir.entries(File.join(Zena::ROOT, 'app', 'views', 'templates', 'document_create_tabs')).sort.each do |file|
8
8
  next unless file =~ /^_(.*).rhtml$/
9
9
  tab_name = $1
10
- if !%w{file import}.include?(tab_name) && !@node.has_role?(tab_name.camelize.constantize)
11
- next
12
- end
13
10
  tabs << tab_name
14
11
  end
15
12
  tabs
@@ -0,0 +1,17 @@
1
+ module UsersHelper
2
+
3
+ def node_form
4
+ node_back = @node # store contextual node
5
+ begin
6
+ @node = @user.node || visitor.prototype
7
+ begin
8
+ res =render :file => template_url(:mode => '+user', :format => 'html')
9
+ rescue ActiveRecord::RecordNotFound
10
+ res = render :file => 'versions/custom_tab'
11
+ end
12
+ ensure
13
+ @node = node_back
14
+ end
15
+ res
16
+ end
17
+ end