zena 0.16.9 → 1.0.0.beta1

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 (572) hide show
  1. data/.gitignore +16 -3
  2. data/CREDITS +8 -4
  3. data/History.txt +12 -15
  4. data/app/controllers/application_controller.rb +1 -0
  5. data/app/controllers/columns_controller.rb +130 -0
  6. data/app/controllers/documents_controller.rb +16 -4
  7. data/app/controllers/groups_controller.rb +1 -5
  8. data/app/controllers/iformats_controller.rb +1 -5
  9. data/app/controllers/nodes_controller.rb +116 -41
  10. data/app/controllers/preferences_controller.rb +2 -0
  11. data/app/controllers/relations_controller.rb +1 -5
  12. data/app/controllers/sites_controller.rb +1 -5
  13. data/app/controllers/user_sessions_controller.rb +8 -3
  14. data/app/controllers/users_controller.rb +23 -11
  15. data/app/controllers/versions_controller.rb +29 -46
  16. data/app/controllers/virtual_classes_controller.rb +20 -12
  17. data/app/helpers/documents_helper.rb +5 -1
  18. data/app/models/attachment.rb +41 -0
  19. data/app/models/base_contact.rb +79 -0
  20. data/app/models/cache.rb +2 -2
  21. data/app/models/cached_page.rb +5 -4
  22. data/app/models/column.rb +90 -0
  23. data/app/models/comment.rb +3 -1
  24. data/app/models/contact_content.rb +5 -5
  25. data/app/models/contact_version.rb +2 -2
  26. data/app/models/data_entry.rb +9 -8
  27. data/app/models/discussion.rb +4 -0
  28. data/app/models/document.rb +170 -42
  29. data/app/models/document_content.rb +5 -9
  30. data/app/models/group.rb +4 -3
  31. data/app/models/idx_nodes_ml_string.rb +5 -0
  32. data/app/models/idx_nodes_string.rb +5 -0
  33. data/app/models/idx_template.rb +35 -0
  34. data/app/models/iformat.rb +4 -4
  35. data/app/models/image.rb +193 -26
  36. data/app/models/link.rb +1 -1
  37. data/app/models/node.rb +358 -338
  38. data/app/models/note.rb +2 -4
  39. data/app/models/page.rb +10 -8
  40. data/app/models/reference.rb +1 -1
  41. data/app/models/relation.rb +40 -1
  42. data/app/models/relation_proxy.rb +37 -40
  43. data/app/models/role.rb +19 -0
  44. data/app/models/site.rb +54 -24
  45. data/app/models/skin.rb +1 -16
  46. data/app/models/template.rb +92 -62
  47. data/app/models/template_content.rb +12 -6
  48. data/app/models/text_document.rb +69 -36
  49. data/app/models/text_document_content.rb +3 -3
  50. data/app/models/user.rb +34 -13
  51. data/app/models/version.rb +47 -291
  52. data/app/models/virtual_class.rb +26 -29
  53. data/app/views/columns/_add.html.erb +6 -0
  54. data/app/views/columns/_form.html.erb +36 -0
  55. data/app/views/columns/_li.html.erb +11 -0
  56. data/app/views/columns/create.rjs +8 -0
  57. data/app/views/columns/destroy.rjs +6 -0
  58. data/app/views/columns/edit.html.erb +5 -0
  59. data/app/views/columns/index.html.erb +15 -0
  60. data/app/views/columns/new.html.erb +2 -0
  61. data/app/views/columns/show.rjs +1 -0
  62. data/app/views/columns/update.rjs +5 -0
  63. data/app/views/comments/_li.rhtml +1 -1
  64. data/app/views/comments/create.rjs +1 -1
  65. data/app/views/comments/index.rhtml +1 -1
  66. data/app/views/comments/publish.rjs +1 -1
  67. data/app/views/comments/remove.rjs +1 -1
  68. data/app/views/data_entries/_li.html.erb +1 -1
  69. data/app/views/discussions/create.rjs +1 -1
  70. data/app/views/documents/_crop.rhtml +4 -4
  71. data/app/views/documents/crop_form.rjs +1 -1
  72. data/app/views/documents/new.rhtml +1 -1
  73. data/app/views/documents/show.rhtml +4 -4
  74. data/app/views/groups/_form.rhtml +1 -1
  75. data/app/views/groups/index.rhtml +1 -1
  76. data/app/views/iformats/_form.rhtml +1 -1
  77. data/app/views/iformats/create.rjs +1 -1
  78. data/app/views/iformats/index.rhtml +1 -1
  79. data/app/views/links/create.rjs +1 -1
  80. data/app/views/links/destroy.rjs +1 -1
  81. data/app/views/links/show.rjs +1 -1
  82. data/app/views/nodes/_dates.rhtml +2 -2
  83. data/app/views/nodes/_gallery.rhtml +2 -2
  84. data/app/views/nodes/_list_nodes.rhtml +2 -2
  85. data/app/views/nodes/_parent.rhtml +1 -1
  86. data/app/views/nodes/_position.rhtml +2 -2
  87. data/app/views/nodes/_results.rhtml +1 -1
  88. data/app/views/nodes/create.rjs +1 -4
  89. data/app/views/nodes/destroy.erb +0 -0
  90. data/app/views/nodes/import.rhtml +1 -1
  91. data/app/views/nodes/save_text.rjs +3 -3
  92. data/app/views/nodes/table_update.rjs +1 -2
  93. data/app/views/nodes/update.rjs +1 -1
  94. data/app/views/relations/_form.erb +15 -15
  95. data/app/views/relations/_li.erb +5 -11
  96. data/app/views/relations/create.rjs +1 -1
  97. data/app/views/relations/index.erb +1 -1
  98. data/app/views/sites/_form.erb +3 -3
  99. data/app/views/sites/_li.erb +1 -1
  100. data/app/views/sites/index.erb +1 -1
  101. data/app/views/templates/document_create_tabs/_file.rhtml +3 -3
  102. data/app/views/templates/document_create_tabs/_template.rhtml +9 -9
  103. data/app/views/templates/document_create_tabs/{_text_doc.rhtml → _text_document.rhtml} +4 -4
  104. data/app/views/templates/edit_tabs/{_contact.rhtml → _basecontact.rhtml} +2 -2
  105. data/app/views/templates/edit_tabs/_document.rhtml +3 -3
  106. data/app/views/templates/edit_tabs/_help.rhtml +2 -2
  107. data/app/views/templates/edit_tabs/_image.rhtml +4 -4
  108. data/app/views/templates/edit_tabs/_template.rhtml +6 -6
  109. data/app/views/templates/edit_tabs/_text.rhtml +1 -1
  110. data/app/views/templates/edit_tabs/_textdocument.rhtml +4 -4
  111. data/app/views/templates/edit_tabs/_title.rhtml +9 -14
  112. data/app/views/users/_form.rhtml +1 -1
  113. data/app/views/users/change_info.rjs +1 -1
  114. data/app/views/users/change_password.rjs +1 -1
  115. data/app/views/users/index.rhtml +1 -1
  116. data/app/views/users/preferences.html.erb +10 -4
  117. data/app/views/users/update.rjs +1 -1
  118. data/app/views/versions/_list.rhtml +1 -1
  119. data/app/views/versions/_tr.rhtml +1 -1
  120. data/app/views/versions/backup.rjs +1 -1
  121. data/app/views/versions/destroy.rjs +6 -2
  122. data/app/views/versions/diff.rjs +1 -1
  123. data/app/views/versions/edit.rhtml +14 -6
  124. data/app/views/versions/preview.rjs +1 -1
  125. data/app/views/versions/show.rjs +1 -1
  126. data/app/views/virtual_classes/_add.erb +1 -1
  127. data/app/views/virtual_classes/_form.erb +15 -10
  128. data/app/views/virtual_classes/_li.erb +13 -7
  129. data/app/views/virtual_classes/create.rjs +2 -2
  130. data/app/views/virtual_classes/edit.html.erb +7 -0
  131. data/app/views/virtual_classes/index.erb +2 -2
  132. data/app/views/zafu/default/Node-+adminLayout.zafu +47 -0
  133. data/app/views/zafu/default/Node-+index.zafu +1 -0
  134. data/app/views/{templates/defaults/+login.zafu → zafu/default/Node-+login.zafu} +9 -7
  135. data/app/views/zafu/default/Node-+notFound.zafu +14 -0
  136. data/app/views/zafu/default/Node-+popupLayout.zafu +24 -0
  137. data/app/views/zafu/default/Node-+search.zafu +23 -0
  138. data/app/views/zafu/default/Node.zafu +95 -0
  139. data/bin/zena +0 -2
  140. data/bricks/captcha/lib/bricks/captcha.rb +62 -0
  141. data/bricks/captcha/zena/init.rb +11 -0
  142. data/bricks/data2pdf/.document +5 -0
  143. data/bricks/data2pdf/README +19 -0
  144. data/bricks/data2pdf/Rakefile +36 -0
  145. data/bricks/data2pdf/VERSION +1 -0
  146. data/bricks/data2pdf/lib/data2pdf.rb +60 -0
  147. data/bricks/data2pdf/lib/engines/prince.rb +39 -0
  148. data/bricks/data2pdf/lib/engines/xhtml2pdf.rb +41 -0
  149. data/bricks/data2pdf/lib/install.rb +111 -0
  150. data/bricks/data2pdf/test/engines/test_prince.rb +14 -0
  151. data/bricks/data2pdf/test/engines/test_xhtml2pdf.rb +14 -0
  152. data/bricks/data2pdf/test/fixtures/application.css +241 -0
  153. data/bricks/data2pdf/test/fixtures/contact.html +153 -0
  154. data/bricks/data2pdf/test/fixtures/pisa-default.css +207 -0
  155. data/bricks/data2pdf/test/fixtures/sheet1.css +207 -0
  156. data/bricks/data2pdf/test/fixtures/sheet2.css +207 -0
  157. data/bricks/data2pdf/test/fixtures/simple-html.html +337 -0
  158. data/bricks/data2pdf/test/fixtures/simple-text.txt +1 -0
  159. data/bricks/data2pdf/test/helper.rb +23 -0
  160. data/bricks/data2pdf/test/shoulda_macros/shoulda_data2pdf.rb +91 -0
  161. data/bricks/data2pdf/test/unit/test_rendering.rb +37 -0
  162. data/bricks/math/{patch/application_helper.rb → lib/bricks/math.rb} +0 -4
  163. data/bricks/math/zena/init.rb +4 -0
  164. data/bricks/sphinx/README +2 -2
  165. data/bricks/sphinx/lib/use_sphinx.rb +7 -11
  166. data/bricks/sphinx/{misc → zena}/deploy.rb +0 -0
  167. data/bricks/sphinx/{patch/node.rb → zena/init.rb} +1 -3
  168. data/bricks/sphinx/{migrate → zena/migrate}/20091102171258_add_delta_for_sphinx.rb +0 -0
  169. data/bricks/sphinx/{misc → zena}/sphinx.yml +0 -0
  170. data/bricks/sphinx/{misc → zena}/tasks.rb +0 -0
  171. data/bricks/tags/lib/{has_tags.rb → bricks/tags.rb} +12 -24
  172. data/bricks/tags/zena/init.rb +21 -0
  173. data/bricks/tags/{test → zena/test}/sites/zena/links.yml +0 -0
  174. data/bricks/tags/{test → zena/test}/unit/tags_test.rb +1 -1
  175. data/bricks/tags/zena/test/zafu/tags.yml +41 -0
  176. data/bricks/worker/README +2 -2
  177. data/bricks/worker/{misc → zena}/deploy.rb +0 -0
  178. data/bricks/worker/{misc → zena}/init.rb +2 -1
  179. data/bricks/worker/{migrate → zena/migrate}/20091104191643_create_delayed_jobs_table.rb +0 -0
  180. data/bricks/worker/{misc → zena}/tasks.rb +0 -0
  181. data/bricks/worker/{misc → zena}/worker +0 -0
  182. data/config/bricks.yml +2 -0
  183. data/config/deploy.rb +2 -7
  184. data/config/environment.rb +3 -5
  185. data/config/gems.yml +9 -4
  186. data/db/20100628074512_zena0x_to1x.rb +223 -0
  187. data/db/init/base/help.en.zml +3 -3
  188. data/db/init/base/help.fr.zml +3 -3
  189. data/db/init/base/skins.zml +2 -2
  190. data/db/init/base/skins/default.zml +4 -4
  191. data/db/init/base/skins/default/Node-+adminLayout.zafu +8 -7
  192. data/db/init/base/skins/default/Node-+login.zafu +9 -7
  193. data/db/init/base/skins/default/Node-+search.zafu +4 -1
  194. data/db/init/base/skins/default/Node-tree.zafu +3 -3
  195. data/db/init/base/skins/default/Node.zafu +20 -20
  196. data/db/init/base/skins/default/Project.zafu +1 -1
  197. data/db/init/base/skins/default/notes.zafu +5 -5
  198. data/db/init/base/skins/default/style.css +17 -12
  199. data/db/migrate/001_create_base.rb +1 -1
  200. data/db/migrate/008_user_status.rb +1 -1
  201. data/db/migrate/020_create_participation.rb +3 -3
  202. data/db/migrate/024_correct_vclass_kpath.rb +5 -3
  203. data/db/migrate/025_move_tag_into_vclass.rb +7 -5
  204. data/db/migrate/030_redit_auto_publish_site_settings.rb +2 -2
  205. data/db/migrate/032_caches_context_as_hash.rb +4 -2
  206. data/db/migrate/046_fix_zazen_image_tag.rb +2 -2
  207. data/db/migrate/047_change_default_link_id_to_zero.rb +4 -2
  208. data/db/migrate/20090825201159_insert_zero_link.rb +1 -1
  209. data/db/migrate/20090924141459_zafu_fix_sept09.rb +2 -2
  210. data/db/migrate/20100125062254_add_dynamo_to_version.rb +9 -0
  211. data/db/migrate/20100201133242_remove_default_status_on_version.rb +9 -0
  212. data/db/migrate/20100208194210_create_attachments.rb +17 -0
  213. data/db/migrate/20100210112319_change_dynamo_to_property.rb +9 -0
  214. data/db/migrate/20100320145726_transform_template_contents_into_index.rb +13 -0
  215. data/db/migrate/20100328125634_change_skin_name_to_id.rb +31 -0
  216. data/db/migrate/20100417061257_add_properties_to_sites.rb +9 -0
  217. data/db/migrate/20100419163149_rename_name_to_node_name.rb +9 -0
  218. data/db/migrate/20100422091606_change_v_class_table_into_roles.rb +27 -0
  219. data/db/migrate/20100422094048_node_habtm_roles.rb +13 -0
  220. data/db/migrate/20100422115935_create_columns.rb +15 -0
  221. data/db/migrate/20100513181529_add_site_id_to_columns.rb +9 -0
  222. data/db/migrate/20100519091711_add_index_definition_to_columns.rb +9 -0
  223. data/db/migrate/20100519091940_create_idx_nodes_string.rb +14 -0
  224. data/db/migrate/20100519232432_create_idx_nodes_ml_string.rb +15 -0
  225. data/db/migrate/20100525113858_add_porperties_to_users.rb +9 -0
  226. data/db/migrate/20100526090140_renamed_contact_model_to_base_contact.rb +13 -0
  227. data/db/migrate/20100527130937_change_column_index_to_string.rb +9 -0
  228. data/db/migrate/20100531135128_add_fulltext_builder_fields.rb +28 -0
  229. data/doc/zafu_changes.yml +2 -2
  230. data/lib/bricks/loader.rb +48 -26
  231. data/lib/exif_data.rb +21 -1
  232. data/lib/gettext_strings.rb +8 -1
  233. data/lib/tasks/zena.rake +55 -20
  234. data/lib/version_off.rb +323 -0
  235. data/lib/zazen_parser.rb +9 -0
  236. data/lib/zena.rb +13 -14
  237. data/lib/zena/acts/enrollable.rb +232 -0
  238. data/lib/zena/acts/secure.rb +86 -506
  239. data/lib/zena/acts/secure_node.rb +483 -0
  240. data/lib/zena/acts/serializable.rb +149 -0
  241. data/lib/zena/app.rb +36 -23
  242. data/lib/zena/code_syntax.rb +26 -2
  243. data/lib/zena/controller/test_case.rb +23 -2
  244. data/lib/zena/core_ext/file_utils.rb +3 -3
  245. data/lib/zena/core_ext/string.rb +2 -2
  246. data/lib/zena/db.rb +180 -24
  247. data/lib/zena/deploy.rb +140 -183
  248. data/lib/zena/deploy/awstats.conf.rhtml +4 -4
  249. data/lib/zena/deploy/httpd.rhtml +1 -2
  250. data/lib/zena/deploy/stats.vhost.rhtml +7 -7
  251. data/lib/zena/deploy/vhost.rhtml +1 -1
  252. data/lib/zena/deploy/vhost_www.rhtml +4 -4
  253. data/lib/zena/foxy_parser.rb +345 -295
  254. data/lib/zena/info.rb +1 -2
  255. data/lib/zena/integration/test_case.rb +70 -0
  256. data/lib/zena/loader/yaml_loader.rb +80 -0
  257. data/lib/zena/migrator.rb +2 -2
  258. data/lib/zena/parser.rb +19 -17
  259. data/lib/zena/parser/zafu_rules.rb +7 -0
  260. data/lib/zena/parser/zafu_tags.rb +2 -2
  261. data/lib/zena/parser/zazen_rules.rb +9 -29
  262. data/lib/zena/parser/zena_rules.rb +2 -2
  263. data/lib/zena/refactor/act_as_content.rb +6 -0
  264. data/lib/zena/routes.rb +9 -3
  265. data/lib/zena/site_worker.rb +48 -0
  266. data/lib/zena/test_controller.rb +49 -12
  267. data/lib/zena/use.rb +47 -0
  268. data/lib/zena/use/action.rb +230 -0
  269. data/lib/zena/use/ajax.rb +287 -13
  270. data/lib/zena/use/authlogic.rb +28 -12
  271. data/lib/zena/use/calendar.rb +2 -2
  272. data/lib/zena/use/conditional.rb +41 -0
  273. data/lib/zena/use/context.rb +187 -0
  274. data/lib/zena/use/dates.rb +87 -30
  275. data/lib/zena/use/display.rb +598 -0
  276. data/lib/zena/use/dyn_attributes.rb +4 -4
  277. data/lib/zena/use/error_rendering.rb +3 -1
  278. data/lib/zena/use/fixtures.rb +56 -22
  279. data/lib/zena/use/forms.rb +584 -0
  280. data/lib/zena/use/fulltext.rb +90 -0
  281. data/lib/zena/use/grid.rb +12 -7
  282. data/lib/zena/use/html_tags.rb +8 -459
  283. data/lib/zena/use/i18n.rb +172 -109
  284. data/lib/zena/use/image_builder.rb +1 -2
  285. data/lib/zena/use/ml_index.rb +56 -0
  286. data/lib/zena/use/nested_attributes_alias.rb +2 -2
  287. data/lib/zena/use/node_name.rb +94 -0
  288. data/lib/zena/use/query_builder.rb +355 -0
  289. data/lib/zena/use/query_comment.rb +63 -73
  290. data/lib/zena/use/query_node.rb +404 -317
  291. data/lib/zena/use/recursion.rb +71 -0
  292. data/lib/zena/use/refactor.rb +27 -40
  293. data/lib/zena/use/relations.rb +9 -3
  294. data/lib/zena/use/rendering.rb +143 -116
  295. data/lib/zena/use/search.rb +79 -21
  296. data/lib/zena/use/test_helper.rb +17 -9
  297. data/lib/zena/use/upload.rb +1 -1
  298. data/lib/zena/use/urls.rb +534 -28
  299. data/lib/zena/use/version_hash.rb +154 -0
  300. data/lib/zena/use/workflow.rb +635 -0
  301. data/lib/zena/use/zafu_attributes.rb +205 -0
  302. data/lib/zena/use/zafu_eval.rb +21 -0
  303. data/lib/zena/use/zafu_safe_definitions.rb +36 -0
  304. data/lib/zena/use/zafu_templates.rb +459 -0
  305. data/lib/zena/use/zazen.rb +53 -23
  306. data/lib/zena/view/test_case.rb +56 -7
  307. data/lib/zena/webdav_adapter.rb +8 -8
  308. data/lib/zena/zafu_compiler.rb +25 -0
  309. data/locale/de/LC_MESSAGES/zena.mo +0 -0
  310. data/locale/de/zena.mo +0 -0
  311. data/locale/de/zena.po +920 -781
  312. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  313. data/locale/en/zena.mo +0 -0
  314. data/locale/en/zena.po +530 -405
  315. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  316. data/locale/fr/zena.mo +0 -0
  317. data/locale/fr/zena.po +588 -432
  318. data/locale/zena.pot +391 -353
  319. data/old_zafu/action.rb +129 -0
  320. data/{lib/zafu → old_zafu}/ajax.rb +0 -24
  321. data/{lib/zafu → old_zafu}/attributes.rb +2 -2
  322. data/{lib/zafu → old_zafu}/calendar.rb +1 -1
  323. data/{lib/zafu → old_zafu}/context.rb +4 -8
  324. data/{lib/zafu → old_zafu}/core/html.rb +1 -1
  325. data/old_zafu/core/move_to_parser.rb +74 -0
  326. data/old_zafu/dates.rb +20 -0
  327. data/{lib/zafu → old_zafu}/display.rb +33 -146
  328. data/{lib/zafu → old_zafu}/eval.rb +0 -0
  329. data/{lib/zafu → old_zafu}/experimental.rb +1 -1
  330. data/{lib/zafu → old_zafu}/i18n.rb +1 -1
  331. data/{lib/zafu → old_zafu}/meta.rb +0 -0
  332. data/old_zafu/query_node.rb +278 -0
  333. data/{lib/zafu → old_zafu}/refactor.rb +2 -12
  334. data/old_zafu/support/context.rb +146 -0
  335. data/{lib/zafu → old_zafu}/support/dom.rb +1 -43
  336. data/{lib/zafu → old_zafu}/support/erb.rb +0 -0
  337. data/{lib/zafu → old_zafu}/support/flow.rb +1 -13
  338. data/old_zafu/support/forms.rb +7 -0
  339. data/old_zafu/support/links.rb +75 -0
  340. data/{lib → old_zafu}/zafu_parser.rb +2 -2
  341. data/public/images/attach_window.png +0 -0
  342. data/public/images/dettach_window.png +0 -0
  343. data/public/images/ext/{contact.png → basecontact.png} +0 -0
  344. data/public/images/toggle_off.png +0 -0
  345. data/public/images/toggle_on.png +0 -0
  346. data/public/images/window/bottom_left.png +0 -0
  347. data/public/images/window/bottom_mid.png +0 -0
  348. data/public/images/window/bottom_right.png +0 -0
  349. data/public/images/window/center_left.png +0 -0
  350. data/public/images/window/center_right.png +0 -0
  351. data/public/images/window/close.png +0 -0
  352. data/public/images/window/maximize.png +0 -0
  353. data/public/images/window/minimize.png +0 -0
  354. data/public/images/window/overlay.png +0 -0
  355. data/public/images/window/sizer.png +0 -0
  356. data/public/images/window/top_left.png +0 -0
  357. data/public/images/window/top_mid.png +0 -0
  358. data/public/images/window/top_right.png +0 -0
  359. data/public/javascripts/builder.js +1 -3
  360. data/public/javascripts/controls.js +3 -5
  361. data/public/javascripts/dragdrop.js +5 -8
  362. data/public/javascripts/effects.js +6 -15
  363. data/public/javascripts/prototype.js +1574 -1020
  364. data/public/javascripts/scriptaculous.js +13 -7
  365. data/public/javascripts/slider.js +5 -7
  366. data/public/javascripts/sound.js +6 -4
  367. data/public/javascripts/unittest.js +69 -71
  368. data/public/javascripts/window.js +1843 -0
  369. data/public/javascripts/zena.js +216 -16
  370. data/public/stylesheets/admin.css +18 -13
  371. data/public/stylesheets/default.css +18 -17
  372. data/public/stylesheets/popup.css +4 -4
  373. data/public/stylesheets/window.css +155 -0
  374. data/public/stylesheets/zena.css +9 -8
  375. data/test/custom_queries/complex.host.yml +8 -8
  376. data/test/fixtures/files/Node-test.zafu +11 -11
  377. data/test/fixtures/files/import.tgz +0 -0
  378. data/test/fixtures/files/simple.zml.gz +0 -0
  379. data/test/fixtures/import/photos.en.zml +3 -3
  380. data/test/fixtures/import/photos/bird.jpg.en.zml +1 -1
  381. data/test/fixtures/import/photos/bird.jpg.fr.zml +1 -1
  382. data/test/fixtures/import/simple.zml +2 -2
  383. data/test/functional/application_controller_test.rb +2 -41
  384. data/test/functional/columns_controller_test.rb +140 -0
  385. data/test/functional/data_entries_controller_test.rb +1 -1
  386. data/test/functional/documents_controller_test.rb +88 -5
  387. data/test/functional/nodes_controller_commit_test.rb +71 -0
  388. data/test/functional/nodes_controller_test.rb +393 -93
  389. data/test/functional/note_controller_test.rb +5 -5
  390. data/test/functional/relations_controller_test.rb +1 -1
  391. data/test/functional/users_controller_test.rb +72 -14
  392. data/test/functional/versions_controller_test.rb +9 -8
  393. data/test/functional/virtual_classes_controller_test.rb +142 -65
  394. data/test/integration/multiple_hosts_test.rb +28 -20
  395. data/test/integration/navigation_test.rb +121 -83
  396. data/test/integration/query_node/basic.yml +128 -0
  397. data/test/integration/query_node/comments.yml +23 -0
  398. data/test/integration/query_node/complex.yml +111 -0
  399. data/test/integration/query_node/dates.yml +22 -0
  400. data/test/integration/query_node/errors.yml +12 -0
  401. data/test/integration/query_node/filters.yml +123 -0
  402. data/test/integration/query_node/properties.yml +41 -0
  403. data/test/integration/query_node/relations.yml +75 -0
  404. data/test/integration/query_node_test.rb +189 -0
  405. data/test/integration/xml_api_test.rb +166 -0
  406. data/test/integration/zafu_compiler/action.yml +67 -0
  407. data/test/integration/zafu_compiler/ajax.yml +263 -0
  408. data/test/{unit/zena/zena_tags → integration/zafu_compiler}/apphelper.yml +0 -0
  409. data/test/integration/zafu_compiler/asset.yml +13 -0
  410. data/test/integration/zafu_compiler/basic.yml +518 -0
  411. data/test/integration/zafu_compiler/calendar.yml +35 -0
  412. data/test/{unit/zena/zena_tags → integration/zafu_compiler}/complex.yml +16 -16
  413. data/test/integration/zafu_compiler/conditional.yml +173 -0
  414. data/test/{unit/zena/zena_tags → integration/zafu_compiler}/data.yml +3 -3
  415. data/test/integration/zafu_compiler/dates.yml +58 -0
  416. data/test/integration/zafu_compiler/display.yml +273 -0
  417. data/test/integration/zafu_compiler/errors.yml +79 -0
  418. data/test/{unit/zena/zena_tags → integration/zafu_compiler}/eval.yml +6 -2
  419. data/test/integration/zafu_compiler/forms.yml +130 -0
  420. data/test/integration/zafu_compiler/i18n.yml +107 -0
  421. data/test/integration/zafu_compiler/later.yml +31 -0
  422. data/test/integration/zafu_compiler/off/off.yml +15 -0
  423. data/test/integration/zafu_compiler/recursion.yml +28 -0
  424. data/test/integration/zafu_compiler/relations.yml +487 -0
  425. data/test/integration/zafu_compiler/roles.yml +28 -0
  426. data/test/{unit/zena/zena_tags → integration/zafu_compiler}/rubyless.yml +10 -9
  427. data/test/integration/zafu_compiler/safe_definitions.yml +65 -0
  428. data/test/integration/zafu_compiler/search.yml +13 -0
  429. data/test/integration/zafu_compiler/security.yml +30 -0
  430. data/test/integration/zafu_compiler/site.yml +14 -0
  431. data/test/integration/zafu_compiler/urls.yml +189 -0
  432. data/test/integration/zafu_compiler/user.yml +32 -0
  433. data/test/integration/zafu_compiler/version.yml +47 -0
  434. data/test/integration/zafu_compiler/workflow.yml +36 -0
  435. data/test/integration/zafu_compiler/zafu_attributes.yml +169 -0
  436. data/test/{unit/zena/zena_tags → integration/zafu_compiler}/zazen.yml +7 -3
  437. data/test/{unit/zena/zena_tags_test.rb → integration/zafu_compiler_test.rb} +137 -57
  438. data/test/sites/complex/nodes.yml +48 -47
  439. data/test/sites/complex/{virtual_classes.yml → roles.yml} +2 -1
  440. data/test/sites/ocean/nodes.yml +7 -7
  441. data/test/sites/ocean/versions.yml +30 -21
  442. data/test/sites/zena/columns.yml +12 -0
  443. data/test/sites/zena/nodes.yml +33 -32
  444. data/test/sites/zena/{virtual_classes.yml → roles.yml} +11 -1
  445. data/test/sites/zena/sites.yml +4 -1
  446. data/test/sites/zena/users.yml +5 -4
  447. data/test/sites/zena/versions.yml +398 -279
  448. data/test/test_helper.rb +2 -1
  449. data/test/test_zena.rb +3 -8
  450. data/test/unit/after_commit_test.rb +103 -0
  451. data/test/unit/attachment_test.rb +266 -0
  452. data/test/unit/base_contact_test.rb +242 -0
  453. data/test/unit/cached_page_test.rb +6 -6
  454. data/test/unit/column_test.rb +77 -0
  455. data/test/unit/comment_test.rb +1 -1
  456. data/test/unit/data_entry_test.rb +8 -2
  457. data/test/unit/document_test.rb +393 -211
  458. data/test/unit/exif_data_test.rb +1 -1
  459. data/test/unit/iformat_test.rb +9 -9
  460. data/test/unit/image_test.rb +358 -284
  461. data/test/unit/multi_version_test.rb +4 -0
  462. data/test/unit/multiversion_test.rb +2 -1013
  463. data/test/unit/node_name_test.rb +137 -0
  464. data/test/unit/node_test.rb +374 -461
  465. data/test/unit/note_test.rb +23 -23
  466. data/test/unit/page_test.rb +23 -23
  467. data/test/unit/project_test.rb +2 -2
  468. data/test/unit/relation_proxy_test.rb +25 -6
  469. data/test/unit/relation_test.rb +156 -24
  470. data/test/unit/role_test.rb +122 -0
  471. data/test/unit/section_test.rb +2 -2
  472. data/test/unit/site_test.rb +48 -12
  473. data/test/unit/skin_test.rb +0 -13
  474. data/test/unit/template_test.rb +361 -314
  475. data/test/unit/text_document_test.rb +105 -33
  476. data/test/unit/transparent_version_test.rb +4 -0
  477. data/test/unit/user_test.rb +10 -10
  478. data/test/unit/version_test.rb +209 -301
  479. data/test/unit/virtual_class_test.rb +21 -29
  480. data/test/unit/workflow_test.rb +1075 -0
  481. data/test/unit/zena/acts/enrollable_test.rb +211 -0
  482. data/test/unit/{secure_test.rb → zena/acts/secure_test.rb} +190 -105
  483. data/test/unit/zena/acts/serializable_test.rb +85 -0
  484. data/test/unit/zena/db_test.rb +27 -14
  485. data/test/unit/zena/parser/zazen.yml +1 -1
  486. data/test/unit/zena/use/action_test.rb +109 -0
  487. data/test/unit/zena/use/calendar_test.rb +8 -8
  488. data/test/unit/zena/use/dates_test.rb +10 -0
  489. data/test/unit/zena/use/dates_view_methods_test.rb +8 -12
  490. data/test/unit/zena/use/fulltext_test.rb +82 -0
  491. data/test/unit/zena/use/html_tags_test.rb +225 -201
  492. data/test/unit/zena/use/i18n_test.rb +56 -26
  493. data/test/unit/zena/use/ml_index_test.rb +129 -0
  494. data/test/unit/zena/use/nested_attributes_alias_view_test.rb +10 -10
  495. data/test/unit/zena/use/query_node_test.rb +104 -0
  496. data/test/unit/zena/use/refactor_test.rb +4 -15
  497. data/test/unit/zena/use/rendering_test.rb +23 -16
  498. data/test/unit/zena/use/upload_test.rb +2 -2
  499. data/test/unit/zena/use/urls_test.rb +2 -0
  500. data/test/unit/zena/use/version_hash_test.rb +126 -0
  501. data/test/unit/zena/use/zafu_template_test.rb +135 -0
  502. data/test/unit/zena/use/zazen_test.rb +85 -61
  503. data/vendor/plugins/gettext_i18n_rails/README.markdown +26 -22
  504. data/vendor/plugins/gettext_i18n_rails/Rakefile +31 -5
  505. data/vendor/plugins/gettext_i18n_rails/VERSION +1 -0
  506. data/vendor/plugins/gettext_i18n_rails/gettext_i18n_rails.gemspec +64 -0
  507. data/vendor/plugins/gettext_i18n_rails/init.rb +7 -3
  508. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails.rb +5 -6
  509. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/active_record.rb +6 -2
  510. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/backend.rb +1 -1
  511. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/model_attributes_finder.rb +2 -2
  512. data/vendor/plugins/gettext_i18n_rails/{tasks → lib/tasks}/gettext_rails_i18n.rake +10 -9
  513. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/action_controller_spec.rb +7 -3
  514. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/active_record_spec.rb +7 -5
  515. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/backend_spec.rb +7 -7
  516. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails_spec.rb +4 -0
  517. data/vendor/plugins/gettext_i18n_rails/spec/spec_helper.rb +11 -9
  518. data/vendor/plugins/mysql_timezone_utc/init.rb +1 -0
  519. data/vendor/plugins/mysql_timezone_utc/lib/mysql_timezone_utc.rb +14 -0
  520. data/vendor/plugins/postgresql_timezone_utc/init.rb +1 -0
  521. data/vendor/plugins/postgresql_timezone_utc/lib/postgresql_timezone_utc.rb +14 -0
  522. data/zena.gemspec +281 -123
  523. metadata +354 -160
  524. data/app/models/contact.rb +0 -32
  525. data/app/models/document_version.rb +0 -13
  526. data/app/models/image_version.rb +0 -21
  527. data/app/models/text_document_version.rb +0 -29
  528. data/app/views/templates/defaults/+adminLayout.zafu +0 -69
  529. data/bricks/captcha/patch/application_controller.rb +0 -10
  530. data/bricks/captcha/patch/application_helper.rb +0 -32
  531. data/bricks/captcha/patch/site.rb +0 -2
  532. data/bricks/captcha/zafu/captcha.rb +0 -29
  533. data/bricks/tags/patch/node.rb +0 -15
  534. data/bricks/tags/test/zafu/tags.yml +0 -40
  535. data/db/schema.rb +0 -295
  536. data/lib/zafu/action.rb +0 -285
  537. data/lib/zafu/core/move_to_parser.rb +0 -167
  538. data/lib/zafu/dates.rb +0 -58
  539. data/lib/zafu/support/context.rb +0 -265
  540. data/lib/zafu/support/forms.rb +0 -461
  541. data/lib/zafu/support/links.rb +0 -306
  542. data/lib/zena/acts/multiversion.rb +0 -755
  543. data/lib/zena/fix/mysql_connection.rb +0 -17
  544. data/lib/zena/use/query_node_finders.rb +0 -91
  545. data/lib/zena/use/zafu.rb +0 -514
  546. data/test/helpers/query_node/basic.yml +0 -149
  547. data/test/helpers/query_node/comments.yml +0 -18
  548. data/test/helpers/query_node/complex.yml +0 -98
  549. data/test/helpers/query_node/filters.yml +0 -110
  550. data/test/helpers/query_node/relations.yml +0 -43
  551. data/test/helpers/query_node_test.rb +0 -116
  552. data/test/sites/ocean/contact_contents.yml +0 -19
  553. data/test/sites/ocean/template_contents.yml +0 -8
  554. data/test/sites/zena/contact_contents.yml +0 -55
  555. data/test/sites/zena/document_contents.yml +0 -76
  556. data/test/sites/zena/dyn_attributes.yml +0 -43
  557. data/test/sites/zena/template_contents.yml +0 -103
  558. data/test/unit/contact_content_test.rb +0 -33
  559. data/test/unit/contact_test.rb +0 -39
  560. data/test/unit/contact_version_test.rb +0 -48
  561. data/test/unit/document_content_test.rb +0 -110
  562. data/test/unit/document_version_test.rb +0 -11
  563. data/test/unit/dyn_attributes_test.rb +0 -229
  564. data/test/unit/image_content_test.rb +0 -154
  565. data/test/unit/image_version_test.rb +0 -18
  566. data/test/unit/template_content_test.rb +0 -9
  567. data/test/unit/text_document_version_test.rb +0 -37
  568. data/test/unit/zena/use/zafu_test.rb +0 -41
  569. data/test/unit/zena/zena_tags/ajax.yml +0 -233
  570. data/test/unit/zena/zena_tags/basic.yml +0 -1306
  571. data/test/unit/zena/zena_tags/errors.yml +0 -71
  572. data/test/unit/zena/zena_tags/relations.yml +0 -405
data/.gitignore CHANGED
@@ -1,7 +1,15 @@
1
1
  .DS_Store
2
+ restart.txt
2
3
  config/deploy_config.rb
3
4
  config/database.yml
5
+ config/mysql.yml
6
+ config/psql.yml
7
+ config/sqlite3.yml
4
8
  config/*.sphinx.conf
9
+ coverage
10
+ db/*.sqlite3
11
+ db/development_structure.sql
12
+ db/schema.rb
5
13
  db/sphinx
6
14
  db/development_structure.sql
7
15
  doc/coverage
@@ -16,6 +24,11 @@ sandbox
16
24
  sites/*
17
25
  test/fixtures/*.yml
18
26
  tmp/*
19
- db/*.sqlite3
20
- coverage
21
- vendor/apache2_upload_progress/*
27
+ vendor/apache2_upload_progress/*
28
+ zena_console.rb
29
+ vendor/plugins/property
30
+ vendor/plugins/querybuilder
31
+ vendor/plugins/rubyless
32
+ vendor/plugins/versions
33
+ vendor/plugins/yamltest
34
+ vendor/plugins/zafu
data/CREDITS CHANGED
@@ -9,19 +9,23 @@ tablekit table editor
9
9
  Andrew Tetlaw & Millstream Web Software
10
10
  http://www.millstream.com.au/view/code/tablekit/
11
11
  add/remove columns and drag&drop support added by Gaspard Bucher
12
-
12
+
13
+ javascript window
14
+ -----------------
15
+ Sébastien Gruhier
16
+ http://prototype-window.xilinus.com
17
+
13
18
  soft icons
14
19
  ----------
15
20
  Mark James
16
21
  http://www.famfamfam.com/lab/icons/silk/
17
-
22
+
18
23
  xspf mp3 player
19
24
  ---------------
20
25
  Fabricio Zuardi
21
26
  http://musicplayer.sourceforge.net/
22
-
27
+
23
28
  upload progress bar (sample application demo)
24
29
  -------------------
25
30
  Tim
26
31
  http://itblog.mcgeecorp.com/articles/2007/05/15/mongrel-upload-progress-demo
27
-
data/History.txt CHANGED
@@ -1,18 +1,15 @@
1
- == 0.16.9 2010-09-29
2
-
3
- * 1 major enhancement
4
- * fixed deploy rules for mongrel and passenger
5
- * fixed RubyLess dependency (breaks with newer versions)
6
-
7
- == 0.16.8 2010-08-30
8
-
9
- * 1 minor enhancement
10
- * using QueryBuilder 0.5.9 to fix bug in custom queries
11
-
12
- == 0.16.7 2010-07-11
13
-
14
- * 1 minor enhancement
15
- * fixed rails version in /bin/zena
1
+ == 1.0.0.beta1 2010-07-23
2
+
3
+ * major changes
4
+ * complete rewrite of the storage engine (Property gem)
5
+ * rewrite of the template engine Zafu to use RubyLess
6
+ * rewrite of the query compilation engine to use RubyLess and offer better introspection
7
+ * XML API with support for query builder queries
8
+ * enhanced attributes support (indexing, inheritance, type)
9
+ * changed bricks layout to be like gems
10
+ * pdf generation support
11
+ * started PostgreSQL support
12
+ * inline JS windows instead of popup with attach/dettach support
16
13
 
17
14
  == 0.16.6 2010-04-23
18
15
 
@@ -3,4 +3,5 @@ class ApplicationController < ActionController::Base
3
3
 
4
4
  include Zena::App
5
5
 
6
+ include Zafu::ControllerMethods
6
7
  end
@@ -0,0 +1,130 @@
1
+ class ColumnsController < ApplicationController
2
+ before_filter :visitor_node
3
+ before_filter :find_column, :except => [:index, :create, :new, :import]
4
+ before_filter :check_is_admin
5
+ layout :admin_layout
6
+
7
+ # GET /columns
8
+ # GET /columns.xml
9
+ def index
10
+ secure(Column) do
11
+ @columns = Column.paginate(:all, :order => 'name', :per_page => 20, :page => params[:page])
12
+ end
13
+
14
+ @column = Column.new
15
+
16
+ respond_to do |format|
17
+ format.html # index.html.erb
18
+ format.xml { render :xml => @columns }
19
+ end
20
+ end
21
+
22
+ def export
23
+ data = secure(Column) do
24
+ Column.export
25
+ end
26
+
27
+ ### TODO
28
+ end
29
+
30
+ def import
31
+ attachment = params[:attachment]
32
+ if attachment.nil?
33
+ flass[:error] = "Upload failure: no definitions."
34
+ redirect_to :action => :index
35
+ else
36
+ data = YAML.load(attachment.read) rescue nil
37
+ if data.nil?
38
+ flash[:error] = "Could not parse yaml document"
39
+ redirect_to :action => :index
40
+ else
41
+ @columns = secure(Column) { Column.import(data) }.paginate(:per_page => 200)
42
+ @column = VirtualClass.new('')
43
+ respond_to do |format|
44
+ format.html { render :action => 'index' }
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ # GET /columns/1
51
+ # GET /columns/1.xml
52
+ def show
53
+
54
+ respond_to do |format|
55
+ format.html # show.html.erb
56
+ format.js
57
+ format.xml { render :xml => @column }
58
+ end
59
+ end
60
+
61
+ # GET /columns/new
62
+ # GET /columns/new.xml
63
+ def new
64
+ @column = Column.new
65
+
66
+ respond_to do |format|
67
+ format.html # new.html.erb
68
+ format.xml { render :xml => @column }
69
+ end
70
+ end
71
+
72
+ # GET /columns/1/edit
73
+ def edit
74
+ respond_to do |format|
75
+ format.html { render :partial => 'columns/form' }
76
+ format.js { render :partial => 'columns/form', :layout => false }
77
+ end
78
+ end
79
+
80
+ # POST /columns
81
+ # POST /columns.xml
82
+ def create
83
+ @column = Column.new(params[:column])
84
+
85
+ respond_to do |format|
86
+ if @column.save
87
+ flash[:notice] = 'Column was successfully created.'
88
+ format.html { redirect_to(@column) }
89
+ format.js
90
+ format.xml { render :xml => @column, :status => :created, :location => @column }
91
+ else
92
+ format.html { render :action => "new" }
93
+ format.js
94
+ format.xml { render :xml => @column.errors, :status => :unprocessable_entity }
95
+ end
96
+ end
97
+ end
98
+
99
+ # PUT /columns/1
100
+ # PUT /columns/1.xml
101
+ def update
102
+ respond_to do |format|
103
+ if @column.update_attributes(params[:column])
104
+ flash[:notice] = 'Column was successfully updated.'
105
+ format.html { redirect_to(@column) }
106
+ format.xml { head :ok }
107
+ else
108
+ format.html { render :action => "edit" }
109
+ format.xml { render :xml => @column.errors, :status => :unprocessable_entity }
110
+ end
111
+ end
112
+ end
113
+
114
+ # DELETE /columns/1
115
+ # DELETE /columns/1.xml
116
+ def destroy
117
+ @column.destroy
118
+
119
+ respond_to do |format|
120
+ format.html { redirect_to(columns_url) }
121
+ format.js
122
+ format.xml { head :ok }
123
+ end
124
+ end
125
+
126
+ protected
127
+ def find_column
128
+ @column = secure!(Column) { Column.find(params[:id])}
129
+ end
130
+ end
@@ -1,5 +1,5 @@
1
1
  class DocumentsController < ApplicationController
2
- before_filter :find_node, :except => [ :get_uf, :upload_progress ]
2
+ before_filter :find_node, :except => [ :get_uf, :upload_progress, :create ]
3
3
 
4
4
  skip_before_filter :set_lang, :only => :upload_progress
5
5
  skip_before_filter :authorize, :only => :upload_progress
@@ -13,6 +13,9 @@ class DocumentsController < ApplicationController
13
13
  def new
14
14
  @node = @parent.new_child(:class => Document)
15
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
18
+
16
19
  respond_to do |format|
17
20
  format.html
18
21
  end
@@ -31,6 +34,15 @@ class DocumentsController < ApplicationController
31
34
 
32
35
  respond_to do |format|
33
36
  if @node.new_record?
37
+ # If skin id could not be set (invalid parent), make sure we have something to render.
38
+ @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
+
34
46
  flash[:error] = _("Upload failed.")
35
47
  format.html { render :action => 'new'}
36
48
  else
@@ -47,7 +59,7 @@ class DocumentsController < ApplicationController
47
59
  responds_to_parent do # execute the redirect in the iframe's parent window
48
60
  render :update do |page|
49
61
  if @node.new_record?
50
- page.replace_html 'form_errors', error_messages_for(@node)
62
+ page.replace_html 'form_errors', error_messages_for(:node, :object => @node)
51
63
  page.call 'UploadProgress.setAsError'
52
64
  else
53
65
  page.call 'UploadProgress.setAsFinished'
@@ -93,12 +105,12 @@ class DocumentsController < ApplicationController
93
105
  def create_document
94
106
  attrs = params['node']
95
107
  file, error = get_attachment
96
- attrs['c_file'] = file if file
108
+ attrs['file'] = file if file
97
109
  attrs['klass'] ||= 'Document'
98
110
  if error
99
111
  @node = secure!(Document) { Document.new }
100
112
  @node.attributes = attrs
101
- @node.errors.add('c_file', error)
113
+ @node.errors.add('file', error)
102
114
  else
103
115
  @node = secure!(Document) { Document.create_node(attrs) }
104
116
  end
@@ -1,7 +1,7 @@
1
1
  class GroupsController < ApplicationController
2
2
  before_filter :check_is_admin
3
3
  before_filter :find_group, :except => [:index, :new, :create]
4
- before_filter :find_node
4
+ before_filter :visitor_node
5
5
  before_filter :get_users, :except => [:show, :update]
6
6
  before_filter :get_groups, :except => [:show, :update, :index]
7
7
  before_filter :filter_users_ids, :only => [:create, :update]
@@ -78,10 +78,6 @@ class GroupsController < ApplicationController
78
78
  end
79
79
  end
80
80
 
81
- def find_node
82
- @node = visitor.contact
83
- end
84
-
85
81
  def get_users
86
82
  @users = secure!(User) { User.find(:all, :conditions => "status >= #{User::Status[:reader]}", :order=>'login') }
87
83
  end
@@ -1,7 +1,7 @@
1
1
  class IformatsController < ApplicationController
2
2
  before_filter :check_is_admin
3
3
  before_filter :find_iformat, :except => [:index, :new, :create]
4
- before_filter :find_node
4
+ before_filter :visitor_node
5
5
  layout :admin_layout
6
6
 
7
7
  def show
@@ -71,8 +71,4 @@ class IformatsController < ApplicationController
71
71
  end
72
72
  end
73
73
  end
74
-
75
- def find_node
76
- @node = visitor.contact
77
- end
78
74
  end
@@ -18,12 +18,12 @@ Examples:
18
18
 
19
19
  =end
20
20
  class NodesController < ApplicationController
21
- before_filter :check_is_admin, :only => [:export]
21
+ before_filter :check_is_admin, :only => [:export]
22
22
  before_filter :find_node, :except => [:index, :create, :not_found, :catch_all, :search]
23
23
  before_filter :check_can_drive, :only => [:edit]
24
- before_filter :check_path, :only => [:index, :show]
25
- after_filter :change_lang, :only => [:create, :update, :save_text]
26
- layout :popup_layout, :only => [:edit, :import]
24
+ before_filter :check_path, :only => [:index, :show]
25
+ after_filter :change_lang, :only => [:create, :update, :save_text]
26
+ layout :popup_layout, :only => [:edit, :import]
27
27
 
28
28
  include Zena::Use::Grid::ControllerMethods
29
29
 
@@ -54,6 +54,7 @@ class NodesController < ApplicationController
54
54
  do_search
55
55
  respond_to do |format|
56
56
  format.html { render_and_cache :mode => '+search', :cache => false }
57
+ format.xml { render :xml => @nodes ? @nodes.to_xml : []}
57
58
  format.js
58
59
  end
59
60
  end
@@ -67,7 +68,8 @@ class NodesController < ApplicationController
67
68
  end
68
69
  end
69
70
 
70
- # RJS method. This is *much* better the "format.js" in the "show" controller or JS TextDocuments will pose problems.
71
+ # RJS method. show.js not working... ?
72
+ # FIXME: remove.
71
73
  def zafu
72
74
  return self.update if params[:method] == 'put'
73
75
  respond_to do |format|
@@ -108,11 +110,15 @@ class NodesController < ApplicationController
108
110
  end
109
111
 
110
112
  def show
111
-
112
113
  respond_to do |format|
113
114
 
114
115
  format.html { render_and_cache }
115
116
 
117
+ if !params[:prefix]
118
+ # /nodes/18.xml not treated the same as /en/page18.xml (render_and_cache)
119
+ format.xml { render :xml => @node.to_xml }
120
+ end
121
+
116
122
  format.any do
117
123
  if asset = params[:asset]
118
124
  # math rendered as png, ...
@@ -121,25 +127,25 @@ class NodesController < ApplicationController
121
127
  content_type = (Zena::EXT_TO_TYPE[params[:format]] || ['application/octet-stream'])[0]
122
128
  send_file(content_path, :filename=>filename, :type => content_type, :disposition=>'inline', :x_sendfile => ENABLE_XSENDFILE)
123
129
  cache_page(:content_path => content_path, :authenticated => @node.public?) # content_path is used to cache by creating a symlink
124
- elsif @node.kind_of?(Document) && params[:format] == @node.version.content.ext
130
+ elsif @node.kind_of?(Document) && params[:format] == @node.ext
125
131
  # Get document data (inline if possible)
126
132
  content_path = nil
127
133
 
128
134
  if @node.kind_of?(Image) && !Zena::Use::ImageBuilder.dummy?
129
135
  if img_format = Iformat[params[:mode]]
130
- content_path = @node.version.content.filepath(img_format)
136
+ content_path = @node.filepath(img_format)
131
137
  # force creation of image data
132
- @node.c_file(img_format)
138
+ @node.file(img_format)
133
139
  end
134
140
  elsif @node.kind_of?(TextDocument)
135
- send_data(@node.v_text, :filename => @node.filename, :type => 'text/css', :disposition => 'inline')
141
+ send_data(@node.text, :filename => @node.filename, :type => 'text/css', :disposition => 'inline')
136
142
  else
137
- content_path = @node.version.content.filepath
143
+ content_path = @node.filepath
138
144
  end
139
145
 
140
146
  if content_path
141
147
  # FIXME RAILS: remove 'stream => false' when rails streaming is fixed
142
- send_file(content_path, :filename => @node.filename, :type => @node.c_content_type, :disposition => 'inline', :stream => false, :x_sendfile => ENABLE_XSENDFILE)
148
+ send_file(content_path, :filename => @node.filename, :type => @node.content_type, :disposition => 'inline', :stream => false, :x_sendfile => ENABLE_XSENDFILE)
143
149
  end
144
150
 
145
151
  cache_page(:content_path => content_path, :authenticated => @node.public?) # content_path is used to cache by creating a symlink
@@ -162,33 +168,36 @@ class NodesController < ApplicationController
162
168
  attrs = params['node']
163
169
  file, file_error = get_attachment
164
170
  if file
165
- attrs['c_file'] = file
171
+ attrs['file'] = file
166
172
  attrs['klass'] = 'Document'
167
173
  end
168
174
 
169
175
  @node = secure!(Node) { Node.create_node(attrs) }
170
- @node.errors.add('c_file', file_error) if file_error
176
+ @node.errors.add('file', file_error) if file_error
171
177
 
172
178
  respond_to do |format|
173
179
  if @node.errors.empty?
174
180
  flash[:notice] = 'Node was successfully created.'
175
- format.html { redirect_to node_url(@node) }
181
+ format.html { redirect_to zen_path(@node) }
176
182
  format.js
177
- format.xml { head :created, :location => node_url(@node) }
183
+ format.xml { render :xml => @node, :status => :created, :location => node_url(@node) }
178
184
  else
179
185
  format.html { render :action => "new" }
180
186
  format.js
181
- format.xml { render :xml => @node.errors.to_xml }
187
+ format.xml { render :xml => @node.errors, :status => :unprocessable_entity }
182
188
  end
183
189
  end
184
190
  end
185
191
 
186
192
  # modifications of the node itself (dates, groups, revert editions, etc)
187
193
  def edit
194
+ @node.load_roles!
195
+
188
196
  respond_to do |format|
189
197
  format.html do
190
198
  @title_for_layout = @node.rootpath
191
199
  end
200
+
192
201
  format.js do
193
202
  # zafu edit
194
203
  render :template => 'nodes/edit.rjs' # FIXME: this should not be needed. Rails bug ?
@@ -196,6 +205,34 @@ class NodesController < ApplicationController
196
205
  end
197
206
  end
198
207
 
208
+ def destroy
209
+ respond_to do |format|
210
+
211
+ format.html do
212
+ if @node.destroy
213
+ flash[:notice] = "Node destroyed."
214
+ redirect_to zen_path(@node.parent)
215
+ else
216
+ flash[:notice] = "Could not destroy node."
217
+ render :action => 'show'
218
+ end
219
+ end
220
+
221
+ format.xml do
222
+ node_xml = @node.to_xml #need to be allocated before destroying
223
+ if node_xml && @node.destroy
224
+ render :xml => node_xml, :status => 200
225
+ else
226
+ @node.errors.add(:visitor, visitor.login) if RAILS_ENV == 'development'
227
+ render :xml => @node.errors, :status => :unprocessable_entity
228
+ end
229
+ end
230
+
231
+ format.js
232
+
233
+ end
234
+ end
235
+
199
236
  # TODO: test
200
237
  def save_text
201
238
  update
@@ -253,11 +290,12 @@ class NodesController < ApplicationController
253
290
 
254
291
  def update
255
292
  file, file_error = get_attachment
256
- params['node']['c_file'] = file if file
293
+ params['node']['file'] = file if file
257
294
 
258
295
  @v_status_before_update = @node.v_status
259
296
  @node.update_attributes_with_transformation(params['node'])
260
- @node.errors.add('c_file', file_error) if file_error
297
+ # What is this 'extfile' thing ?
298
+ @node.errors.add('extfile', file_error) if file_error
261
299
 
262
300
  if @node.errors.empty?
263
301
  flash.now[:notice] = _('node updated')
@@ -273,8 +311,8 @@ class NodesController < ApplicationController
273
311
  page.redirect_to edit_node_version_path(:node_id => @node[:zip], :id=>(@node.v_number || 0), :close => (params[:validate] ? true : nil))
274
312
  end
275
313
  end
276
- end
277
- else
314
+ end # parent iframe (upload)
315
+ elsif @node.errors.empty?
278
316
  respond_to do |format|
279
317
  format.html do
280
318
  if params[:edit] == 'popup'
@@ -282,8 +320,17 @@ class NodesController < ApplicationController
282
320
  else
283
321
  redirect_to zen_path(@node, :mode => params[:mode])
284
322
  end
285
- end
323
+ end # html
324
+
286
325
  format.js { @flash = flash }
326
+
327
+ format.xml do
328
+ if @node.errors.empty?
329
+ render :xml => @node.to_xml, :status => :ok, :location => node_url(@node)
330
+ else
331
+ render :xml => @page.errors, :status => :unprocessable_entity
332
+ end
333
+ end # xml
287
334
  end
288
335
  end
289
336
  end
@@ -292,7 +339,7 @@ class NodesController < ApplicationController
292
339
  # TODO: test
293
340
  def attribute
294
341
  method = params[:attr]
295
- if (params[:pseudo_id] || params[:name]).blank? || !%w{v_title v_text v_summary name path short_path}.include?(method)
342
+ if (params[:pseudo_id] || params[:name]).blank? || !%w{title text summary name path short_path}.include?(method)
296
343
  # Error
297
344
  render :text => ''
298
345
  return
@@ -315,7 +362,7 @@ class NodesController < ApplicationController
315
362
  conditions << "#{kpath}%"
316
363
  end
317
364
 
318
- conditions[0] << "name LIKE ?"
365
+ conditions[0] << "node_name LIKE ?"
319
366
  conditions << "#{name_query}%"
320
367
 
321
368
  conditions[0] = conditions[0].join(' AND ')
@@ -327,7 +374,7 @@ class NodesController < ApplicationController
327
374
  render :text => path.join('/ ')
328
375
  else
329
376
  @text = @node.send(method)
330
- if %w{v_text v_summary}.include?(method)
377
+ if %w{text summary}.include?(method)
331
378
  render :text => "<%= zazen(@text) %>"
332
379
  else
333
380
  render :text => @text
@@ -441,17 +488,28 @@ class NodesController < ApplicationController
441
488
  end
442
489
  end
443
490
 
491
+ # Make sure the current url is valid. If it is not, redirect.
444
492
  def check_path
493
+ # show must have a 'path' parameter unless logged in and xml format
494
+ if !params[:prefix] && request.format == Mime::XML
495
+ # xml API
496
+ return true
497
+ end
498
+
445
499
  case params[:action]
446
500
  when 'index'
501
+ # TODO: this should live in I18n (and maybe it is not needed anymore)
447
502
  # bad prefix '/so', '/rx' or '/en?lang=fr'
448
503
  if params[:prefix] != prefix
449
504
  set_visitor_lang(params[:prefix])
450
505
  # redirect if new lang could not be set
451
- redirect_url = "/#{prefix}" if prefix != params[:prefix]
506
+ if prefix != params[:prefix]
507
+ # Invalid prefix
508
+ redirect_to "/#{prefix}" and return false
509
+ end
452
510
  end
453
511
  when 'show'
454
- # show must have a 'path' parameter
512
+
455
513
  if params[:format] != 'html' && params[:cachestamp].nil?
456
514
  # maybe not seen, try to find it
457
515
  params.each do |k,v|
@@ -466,20 +524,30 @@ class NodesController < ApplicationController
466
524
  if params[:prefix] != prefix && !avoid_prefix_redirect
467
525
  # lang changed
468
526
  set_visitor_lang(params[:prefix])
469
- redirect_url = zen_path(@node, path_params)
470
- elsif (append_query_params("/#{params[:prefix]}/#{params[:path].join('/')}", :cachestamp => params[:cachestamp]) !=
471
- zen_path(@node, :format => params[:format], :mode=>params[:mode], :asset=>params[:asset])) ||
472
- (cachestamp_format?(params[:format]) && params[:cachestamp] != make_cachestamp(@node, params[:mode]))
473
- # badly formed url
474
- redirect_url = zen_path(@node, path_params)
475
- elsif params[:mode] == 'edit' && !@node.can_write?
476
- # special 'edit' mode
477
- redirect_url = zen_path(@node, :format => params[:format], :asset => params[:asset])
527
+ redirect_to zen_path(@node, path_params) and return false
528
+ end
529
+
530
+ current_url = append_query_params("/#{params[:prefix]}/#{params[:path].join('/')}", :cachestamp => params[:cachestamp])
531
+ base_url = zen_path(@node,
532
+ :prefix => params[:prefix],
533
+ :format => params[:format],
534
+ :mode => params[:mode],
535
+ :asset => params[:asset])
536
+
537
+ if current_url != base_url
538
+ # Badly formed url, redirect
539
+ redirect_to zen_path(@node, path_params) and return false
540
+ end
541
+
542
+ if cachestamp_format?(params[:format]) && params[:cachestamp] != make_cachestamp(@node, params[:mode])
543
+ # Invalid cachestamp, redirect
544
+ redirect_to zen_path(@node, path_params) and return false
478
545
  end
479
- end
480
546
 
481
- if redirect_url
482
- redirect_to redirect_url and return false
547
+ if params[:mode] == 'edit' && !@node.can_write?
548
+ # Not allowed to edit on special 'edit' mode
549
+ redirect_to zen_path(@node, :format => params[:format], :asset => params[:asset]) and return false
550
+ end
483
551
  end
484
552
 
485
553
  true
@@ -496,15 +564,22 @@ class NodesController < ApplicationController
496
564
  end
497
565
 
498
566
  def do_search
567
+ unless query_params = params[:q]
568
+ query_params = params.dup
569
+ %w{controller action format}.each do |key|
570
+ query_params.delete(key)
571
+ end
572
+ end
573
+
499
574
  @node = current_site.root_node
500
575
  @search_per_page = params[:per_page] ? params[:per_page].to_i : 20
501
- @nodes = secure(Node) { Node.search_records(params[:q], :node => @node, :page => params[:page], :per_page => @search_per_page) }
576
+ @nodes = secure(Node) { Node.search_records(query_params, :node => @node, :page => params[:page], :per_page => @search_per_page) }
502
577
  @search_count = 100 # FIXME: @nodes ? @nodes.total_entries : 0
503
578
  end
504
579
 
505
580
  # Document data do not change session[:lang] and can point at cached content (no nee to redirect to AUTHENTICATED_PREFIX).
506
581
  def avoid_prefix_redirect
507
- @node.kind_of?(Document) && params[:format] == @node.version.content.ext
582
+ @node.kind_of?(Document) && params[:format] == @node.ext
508
583
  end
509
584
 
510
585
  # Transform pseudo id into absolute paths (used after import)