zen 0.3 → 0.4

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 (373) hide show
  1. data/.gems +3 -2
  2. data/.rvmrc +1 -1
  3. data/.travis.yml +5 -0
  4. data/.yardopts +2 -1
  5. data/LICENSE +1 -1
  6. data/README.md +28 -24
  7. data/Rakefile +5 -2
  8. data/guide/asset_management.md +6 -6
  9. data/guide/autosaving_forms.md +42 -0
  10. data/guide/changelog.md +41 -0
  11. data/guide/faq.md +49 -0
  12. data/guide/getting_started.md +24 -13
  13. data/guide/hacking.md +40 -9
  14. data/guide/images/categories/categories.png +0 -0
  15. data/guide/images/categories/category_groups.png +0 -0
  16. data/guide/images/categories/new_category.png +0 -0
  17. data/guide/images/categories/new_category_group.png +0 -0
  18. data/guide/images/comments/comments.png +0 -0
  19. data/guide/images/comments/edit_comment.png +0 -0
  20. data/guide/images/custom_fields/custom_field_groups.png +0 -0
  21. data/guide/images/custom_fields/custom_field_types.png +0 -0
  22. data/guide/images/custom_fields/custom_fields.png +0 -0
  23. data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
  24. data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
  25. data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
  26. data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
  27. data/guide/images/dashboard/added.png +0 -0
  28. data/guide/images/dashboard/columns.png +0 -0
  29. data/guide/images/dashboard/dashboard.png +0 -0
  30. data/guide/images/dashboard/options.png +0 -0
  31. data/guide/images/menus/edit_menu.png +0 -0
  32. data/guide/images/menus/edit_menu_item.png +0 -0
  33. data/guide/images/menus/menu_item_hierarchy.png +0 -0
  34. data/guide/images/menus/menu_items.png +0 -0
  35. data/guide/images/menus/menus.png +0 -0
  36. data/guide/images/sections/edit_entry.png +0 -0
  37. data/guide/images/sections/edit_entry_categories.png +0 -0
  38. data/guide/images/sections/edit_entry_general.png +0 -0
  39. data/guide/images/sections/edit_entry_meta.png +0 -0
  40. data/guide/images/sections/edit_section_comments.png +0 -0
  41. data/guide/images/sections/edit_section_general.png +0 -0
  42. data/guide/images/sections/edit_section_groups.png +0 -0
  43. data/guide/images/sections/entries.png +0 -0
  44. data/guide/images/sections/sections.png +0 -0
  45. data/guide/images/settings/overview_general.png +0 -0
  46. data/guide/images/settings/overview_security.png +0 -0
  47. data/guide/images/settings/overview_user.png +0 -0
  48. data/guide/images/users/edit_user.png +0 -0
  49. data/guide/images/users/edit_user_group.png +0 -0
  50. data/guide/images/users/edit_user_group_permissions.png +0 -0
  51. data/guide/images/users/edit_user_permissions.png +0 -0
  52. data/guide/images/users/overview.png +0 -0
  53. data/guide/images/users/user_groups_overview.png +0 -0
  54. data/guide/installation.md +7 -1
  55. data/guide/javascript.md +36 -273
  56. data/guide/javascript/zen_autosave.md +26 -0
  57. data/guide/javascript/zen_editor.md +83 -0
  58. data/guide/javascript/zen_hash.md +34 -0
  59. data/guide/javascript/zen_htmltable.md +78 -0
  60. data/guide/javascript/zen_tabs.md +44 -0
  61. data/guide/javascript/zen_window.md +49 -0
  62. data/guide/zen_compared.md +201 -0
  63. data/lib/vendor/sequel_sluggable.rb +1 -1
  64. data/lib/zen.rb +64 -44
  65. data/lib/zen/asset_groups.rb +10 -10
  66. data/lib/zen/bin/create.rb +8 -1
  67. data/lib/zen/helper/breadcrumb.rb +4 -12
  68. data/lib/zen/helper/controller.rb +209 -6
  69. data/lib/zen/helper/locale.rb +19 -0
  70. data/lib/zen/helper/search.rb +1 -1
  71. data/lib/zen/helper/stacked_aspect.rb +7 -43
  72. data/lib/zen/helper/theme.rb +3 -3
  73. data/lib/zen/language.rb +5 -10
  74. data/lib/zen/language/translation.rb +1 -1
  75. data/lib/zen/layout/admin.xhtml +41 -25
  76. data/lib/zen/layout/login.xhtml +8 -3
  77. data/lib/zen/migrator.rb +54 -0
  78. data/lib/zen/model/helper.rb +20 -1
  79. data/lib/zen/model/init.rb +2 -0
  80. data/lib/zen/model/plugin/events.rb +158 -0
  81. data/lib/zen/package.rb +32 -6
  82. data/lib/zen/package/all.rb +1 -0
  83. data/lib/zen/package/categories/lib/categories.rb +6 -6
  84. data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
  85. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
  86. data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
  87. data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
  88. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
  89. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
  90. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
  91. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
  92. data/lib/zen/package/comments/lib/comments.rb +5 -5
  93. data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
  94. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
  95. data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
  96. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
  97. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
  98. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
  99. data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
  100. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
  101. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
  102. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
  103. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
  104. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
  105. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
  106. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
  107. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
  108. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
  109. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
  110. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
  111. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
  112. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
  113. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
  114. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
  115. data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
  116. data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
  117. data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
  118. data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
  119. data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
  120. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
  121. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
  122. data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
  123. data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
  124. data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
  125. data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
  126. data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
  127. data/lib/zen/package/extensions/lib/extensions.rb +5 -5
  128. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
  129. data/lib/zen/package/menu.rb +6 -1
  130. data/lib/zen/package/menus/lib/menus.rb +6 -4
  131. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
  132. data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
  133. data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
  134. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
  135. data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
  136. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
  137. data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
  138. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
  139. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
  140. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
  141. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
  142. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
  143. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
  144. data/lib/zen/package/sections/lib/sections.rb +9 -4
  145. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
  146. data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
  147. data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
  148. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
  149. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
  150. data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
  151. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
  152. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
  153. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
  154. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
  155. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
  156. data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
  157. data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
  158. data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
  159. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
  160. data/lib/zen/package/settings/lib/settings.rb +14 -5
  161. data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
  162. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
  163. data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
  164. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
  165. data/lib/zen/package/users/lib/users.rb +18 -19
  166. data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
  167. data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
  168. data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
  169. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
  170. data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
  171. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
  172. data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
  173. data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
  174. data/lib/zen/package/users/lib/users/model/user.rb +57 -4
  175. data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
  176. data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
  177. data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
  178. data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
  179. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
  180. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
  181. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
  182. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
  183. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
  184. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
  185. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
  186. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
  187. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
  188. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
  189. data/lib/zen/public/admin/zen/css/buttons.css +106 -0
  190. data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
  191. data/lib/zen/public/admin/zen/css/editor.css +69 -0
  192. data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
  193. data/lib/zen/public/admin/zen/css/general.css +183 -0
  194. data/lib/zen/public/admin/zen/css/layout.css +224 -0
  195. data/lib/zen/public/admin/zen/css/messages.css +34 -0
  196. data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
  197. data/lib/zen/public/admin/zen/css/tables.css +57 -0
  198. data/lib/zen/public/admin/zen/css/tabs.css +84 -0
  199. data/lib/zen/public/admin/zen/css/window.css +74 -0
  200. data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
  201. data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
  202. data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
  203. data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
  204. data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
  205. data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
  206. data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
  207. data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
  208. data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
  209. data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
  210. data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
  211. data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
  212. data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
  213. data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
  214. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
  215. data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
  216. data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
  217. data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
  218. data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
  219. data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
  220. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
  221. data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
  222. data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
  223. data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
  224. data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
  225. data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
  226. data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
  227. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
  228. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
  229. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
  230. data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
  231. data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
  232. data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
  233. data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
  234. data/lib/zen/security.rb +50 -0
  235. data/lib/zen/spec/helper.rb +5 -120
  236. data/lib/zen/spec/helper/capybara.rb +75 -0
  237. data/lib/zen/spec/helper/general.rb +75 -0
  238. data/lib/zen/spec/simplecov.rb +1 -0
  239. data/lib/zen/task/build.rake +2 -21
  240. data/lib/zen/task/clean.rake +1 -10
  241. data/lib/zen/task/db.rake +4 -10
  242. data/lib/zen/task/package.rake +2 -5
  243. data/lib/zen/task/setup.rake +1 -1
  244. data/lib/zen/task/test.rake +6 -6
  245. data/lib/zen/task/theme.rake +2 -5
  246. data/lib/zen/theme.rb +26 -22
  247. data/lib/zen/version.rb +1 -1
  248. data/lib/zen/view/bottom.xhtml +2 -3
  249. data/lib/zen/view/search.xhtml +3 -5
  250. data/proto/app/config/config.rb.erb +1 -1
  251. data/proto/app/theme/default/index.xhtml +116 -20
  252. data/proto/app/theme/partials/head.xhtml +9 -0
  253. data/proto/app/theme/partials/sidebar.xhtml +40 -0
  254. data/proto/app/theme/theme.rb +3 -0
  255. data/spec/Rakefile +1 -2
  256. data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
  257. data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
  258. data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
  259. data/spec/fixtures/zen/theme/theme.rb +2 -2
  260. data/spec/helper.rb +19 -10
  261. data/spec/zen/controller/admin_controller.rb +3 -3
  262. data/spec/zen/controller/main_controller.rb +7 -7
  263. data/spec/zen/controller/preview.rb +3 -3
  264. data/spec/zen/event.rb +4 -4
  265. data/spec/zen/helper/breadcrumb.rb +4 -8
  266. data/spec/zen/helper/controller.rb +47 -4
  267. data/spec/zen/helper/locale.rb +3 -3
  268. data/spec/zen/helper/message.rb +4 -4
  269. data/spec/zen/helper/stacked_aspect.rb +40 -0
  270. data/spec/zen/helper/theme.rb +9 -9
  271. data/spec/zen/language.rb +8 -8
  272. data/spec/zen/markup.rb +6 -6
  273. data/spec/zen/package.rb +11 -9
  274. data/spec/zen/package/categories/controller/categories.rb +56 -24
  275. data/spec/zen/package/categories/controller/category_groups.rb +55 -23
  276. data/spec/zen/package/categories/helper/category.rb +5 -5
  277. data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
  278. data/spec/zen/package/comments/anti_spam.rb +4 -4
  279. data/spec/zen/package/comments/controller/comments.rb +95 -24
  280. data/spec/zen/package/comments/controller/comments_form.rb +31 -26
  281. data/spec/zen/package/comments/helper/comment.rb +3 -3
  282. data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
  283. data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
  284. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
  285. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
  286. data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
  287. data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
  288. data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
  289. data/spec/zen/package/dashboard/widget.rb +56 -0
  290. data/spec/zen/package/extensions/controller/extensions.rb +4 -4
  291. data/spec/zen/package/menus/controller/menu_items.rb +48 -39
  292. data/spec/zen/package/menus/controller/menus.rb +55 -24
  293. data/spec/zen/package/menus/helper/menu.rb +6 -14
  294. data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
  295. data/spec/zen/package/menus/model/menu.rb +121 -0
  296. data/spec/zen/package/menus/model/menu_item.rb +34 -0
  297. data/spec/zen/package/sections/controller/section_entries.rb +104 -39
  298. data/spec/zen/package/sections/controller/sections.rb +60 -27
  299. data/spec/zen/package/sections/helper/section.rb +5 -5
  300. data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
  301. data/spec/zen/package/sections/widget.rb +44 -0
  302. data/spec/zen/package/settings/controller/settings.rb +18 -16
  303. data/spec/zen/package/settings/settings.rb +12 -12
  304. data/spec/zen/package/users/controller/user_groups.rb +61 -29
  305. data/spec/zen/package/users/controller/users.rb +118 -39
  306. data/spec/zen/package/users/helper/access.rb +3 -3
  307. data/spec/zen/package/users/helper/acl.rb +4 -4
  308. data/spec/zen/package/users/helper/users.rb +5 -5
  309. data/spec/zen/security.rb +25 -0
  310. data/spec/zen/theme.rb +20 -18
  311. data/spec/zen/validation.rb +5 -5
  312. data/spec/zen/vendor/sequel_sluggable.rb +12 -0
  313. data/zen.gemspec +27 -4
  314. metadata +182 -124
  315. data/AUTHORS +0 -4
  316. data/guide/_static/categories/categories.png +0 -0
  317. data/guide/_static/categories/category_groups.png +0 -0
  318. data/guide/_static/categories/new_category.png +0 -0
  319. data/guide/_static/categories/new_category_group.png +0 -0
  320. data/guide/_static/comments/comments.png +0 -0
  321. data/guide/_static/comments/edit_comment.png +0 -0
  322. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  323. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  324. data/guide/_static/custom_fields/custom_fields.png +0 -0
  325. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  326. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  327. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  328. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  329. data/guide/_static/menus/edit_menu.png +0 -0
  330. data/guide/_static/menus/edit_menu_item.png +0 -0
  331. data/guide/_static/menus/menu_items.png +0 -0
  332. data/guide/_static/menus/menus.png +0 -0
  333. data/guide/_static/sections/edit_entry.png +0 -0
  334. data/guide/_static/sections/edit_entry_categories.png +0 -0
  335. data/guide/_static/sections/edit_entry_general.png +0 -0
  336. data/guide/_static/sections/edit_entry_meta.png +0 -0
  337. data/guide/_static/sections/edit_section_comments.png +0 -0
  338. data/guide/_static/sections/edit_section_general.png +0 -0
  339. data/guide/_static/sections/edit_section_groups.png +0 -0
  340. data/guide/_static/sections/entries.png +0 -0
  341. data/guide/_static/sections/sections.png +0 -0
  342. data/guide/_static/settings/overview_general.png +0 -0
  343. data/guide/_static/settings/overview_security.png +0 -0
  344. data/guide/_static/settings/overview_user.png +0 -0
  345. data/guide/_static/users/edit_user.png +0 -0
  346. data/guide/_static/users/edit_user_group.png +0 -0
  347. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  348. data/guide/_static/users/edit_user_permissions.png +0 -0
  349. data/guide/_static/users/overview.png +0 -0
  350. data/guide/_static/users/user_groups_overview.png +0 -0
  351. data/lib/zen/controller/translations.rb +0 -49
  352. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
  353. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
  354. data/lib/zen/public/admin/css/zen/buttons.css +0 -46
  355. data/lib/zen/public/admin/css/zen/editor.css +0 -88
  356. data/lib/zen/public/admin/css/zen/general.css +0 -109
  357. data/lib/zen/public/admin/css/zen/grid.css +0 -100
  358. data/lib/zen/public/admin/css/zen/layout.css +0 -184
  359. data/lib/zen/public/admin/css/zen/messages.css +0 -54
  360. data/lib/zen/public/admin/css/zen/tables.css +0 -97
  361. data/lib/zen/public/admin/css/zen/tabs.css +0 -47
  362. data/lib/zen/public/admin/css/zen/window.css +0 -73
  363. data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
  364. data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
  365. data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
  366. data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
  367. data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
  368. data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
  369. data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
  370. data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
  371. data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
  372. data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
  373. data/lib/zen/view/main.xhtml +0 -19
@@ -15,7 +15,7 @@ module CustomFields
15
15
  # URL called "Custom field types". Clicking this URL will take you to an
16
16
  # overview of all existing field types.
17
17
  #
18
- # ![Types](../../_static/custom_fields/custom_field_types.png)
18
+ # ![Types](../../images/custom_fields/custom_field_types.png)
19
19
  #
20
20
  # ## Adding/Editing Field Types
21
21
  #
@@ -24,7 +24,7 @@ module CustomFields
24
24
  # button. In both cases you'll end up at a form that looks like the image
25
25
  # below.
26
26
  #
27
- # ![Edit Type](../../_static/custom_fields/edit_custom_field_type.png)
27
+ # ![Edit Type](../../images/custom_fields/edit_custom_field_type.png)
28
28
  #
29
29
  # In this form you can specify the following fields:
30
30
  #
@@ -56,22 +56,8 @@ module CustomFields
56
56
  # * new_custom_field_type
57
57
  # * delete_custom_field_type
58
58
  #
59
- # ## Events
60
- #
61
- # All events in this controller will receive an instance of
62
- # {CustomFields::Model::CustomFieldType}. Just like other packages the event
63
- # ``after_delete_custom_field_type`` receives an instance that has already
64
- # been destroyed. This means that this event can not be used to make changes
65
- # to the object and save them.
66
- #
67
59
  # @since 0.2.8
68
60
  # @map /admin/custom-field-types
69
- # @event before_new_custom_field_type
70
- # @event after_new_custom_field_type
71
- # @event before_edit_custom_field_type
72
- # @event after_edit_custom_field_type
73
- # @event before_delete_custom_field_type
74
- # @event after_delete_custom_field_type
75
61
  #
76
62
  class CustomFieldTypes < Zen::Controller::AdminController
77
63
  map '/admin/custom-field-types'
@@ -80,8 +66,10 @@ module CustomFields
80
66
 
81
67
  csrf_protection :save, :delete
82
68
 
83
- # Blck that's executed before CustomFieldTypes#edit() and
84
- # CustomFieldTypes#new().
69
+ autosave Model::CustomFieldType,
70
+ Model::CustomFieldType::COLUMNS,
71
+ :edit_custom_field_type
72
+
85
73
  before(:index, :edit, :new) do
86
74
  @boolean_hash = {
87
75
  true => lang('zen_general.special.boolean_hash.true'),
@@ -103,10 +91,10 @@ module CustomFields
103
91
  set_breadcrumbs(lang('custom_field_types.titles.index'))
104
92
 
105
93
  @field_types = search do |query|
106
- ::CustomFields::Model::CustomFieldType.search(query).order(:id.asc)
94
+ Model::CustomFieldType.search(query).order(:id.asc)
107
95
  end
108
96
 
109
- @field_types ||= ::CustomFields::Model::CustomFieldType \
97
+ @field_types ||= Model::CustomFieldType \
110
98
  .eager(:custom_field_method) \
111
99
  .order(:id.asc)
112
100
 
@@ -128,9 +116,10 @@ module CustomFields
128
116
  lang('custom_field_types.titles.edit')
129
117
  )
130
118
 
131
- @custom_field_type = flash[:form_data] || validate_custom_field_type(id)
132
- @custom_field_methods = ::CustomFields::Model::CustomFieldMethod \
133
- .pk_hash(:name)
119
+ @custom_field_type = validate_custom_field_type(id)
120
+ @custom_field_methods = Model::CustomFieldMethod.pk_hash(:name)
121
+
122
+ @custom_field_type.set(flash[:form_data]) if flash[:form_data]
134
123
 
135
124
  render_view(:form)
136
125
  end
@@ -149,14 +138,10 @@ module CustomFields
149
138
  lang('custom_field_types.titles.new')
150
139
  )
151
140
 
152
- @custom_field_methods = ::CustomFields::Model::CustomFieldMethod \
153
- .pk_hash(:name)
141
+ @custom_field_methods = Model::CustomFieldMethod.pk_hash(:name)
142
+ @custom_field_type = Model::CustomFieldType.new
154
143
 
155
- if flash[:form_data]
156
- @custom_field_type = flash[:form_data]
157
- else
158
- @custom_field_type = ::CustomFields::Model::CustomFieldType.new
159
- end
144
+ @custom_field_type.set(flash[:form_data]) if flash[:form_data]
160
145
 
161
146
  render_view(:form)
162
147
  end
@@ -164,66 +149,42 @@ module CustomFields
164
149
  ##
165
150
  # Creates a new custom field type or edits an existing one.
166
151
  #
167
- # This method requires either create or update permissions based on the
168
- # supplied data.
169
- #
170
152
  # @since 0.2.8
171
- # @event before_edit_custom_field_type
172
- # @event after_edit_custom_field_type
173
- # @event before_new_custom_field_type
174
- # @event after_new_custom_field_type
175
153
  # @permission edit_custom_field_type (when editing a field type)
176
154
  # @permission new_custom_field_type (when creating a field type)
177
155
  #
178
156
  def save
179
- post = request.subset(
180
- :id,
181
- :name,
182
- :language_string,
183
- :html_class,
184
- :serialize,
185
- :allow_markup,
186
- :custom_field_method_id
187
- )
157
+ post = post_fields(*Model::CustomFieldType::COLUMNS)
158
+ id = request.params['id']
188
159
 
189
- if post['id'] and !post['id'].empty?
160
+ if id and !id.empty?
190
161
  authorize_user!(:edit_custom_field_type)
191
162
 
192
- field_type = validate_custom_field_type(post['id'])
193
- save_action = :save
194
- before_event = :before_edit_custom_field_type
195
- after_event = :after_edit_custom_field_type
163
+ field_type = validate_custom_field_type(id)
164
+ save_action = :save
196
165
  else
197
166
  authorize_user!(:new_custom_field_type)
198
167
 
199
- field_type = ::CustomFields::Model::CustomFieldType.new
200
- save_action = :new
201
- before_event = :before_new_custom_field_type
202
- after_event = :after_new_custom_field_type
168
+ field_type = Model::CustomFieldType.new
169
+ save_action = :new
203
170
  end
204
171
 
205
- post.delete('id')
206
-
207
172
  success = lang("custom_field_types.success.#{save_action}")
208
173
  error = lang("custom_field_types.errors.#{save_action}")
209
174
 
210
175
  begin
211
- post.each { |k, v| field_type.send("#{k}=", v) }
212
- Zen::Event.call(before_event, field_type)
213
-
176
+ field_type.set(post)
214
177
  field_type.save
215
178
  rescue => e
216
- Ramaze::Log.error(e.inspect)
179
+ Ramaze::Log.error(e)
217
180
  message(:error, error)
218
181
 
219
- flash[:form_data] = field_type
182
+ flash[:form_data] = post
220
183
  flash[:form_errors] = field_type.errors
221
184
 
222
185
  redirect_referrer
223
186
  end
224
187
 
225
- Zen::Event.call(after_event, field_type)
226
-
227
188
  message(:success, success)
228
189
  redirect(CustomFieldTypes.r(:edit, field_type.id))
229
190
  end
@@ -233,8 +194,6 @@ module CustomFields
233
194
  # in the POST array "custom_field_type_ids".
234
195
  #
235
196
  # @since 0.2.8
236
- # @event before_delete_custom_field_type
237
- # @event after_delete_custom_field_type
238
197
  # @permission delete_custom_field_type
239
198
  #
240
199
  def delete
@@ -247,21 +206,18 @@ module CustomFields
247
206
  end
248
207
 
249
208
  request.params['custom_field_type_ids'].each do |id|
250
- type = ::CustomFields::Model::CustomFieldType[id]
209
+ type = Model::CustomFieldType[id]
251
210
 
252
211
  next if type.nil?
253
- Zen::Event.call(:before_delete_custom_field_type, type)
254
212
 
255
213
  begin
256
214
  type.destroy
257
215
  rescue => e
258
- Ramaze::Log.error(e.inspect)
216
+ Ramaze::Log.error(e)
259
217
  message(:error, lang('custom_field_types.errors.delete') % id)
260
218
 
261
219
  redirect_referrer
262
220
  end
263
-
264
- Zen::Event.call(:after_delete_custom_field_type, type)
265
221
  end
266
222
 
267
223
  message(:success, lang('custom_field_types.success.delete'))
@@ -12,15 +12,15 @@ module CustomFields
12
12
  # you've reached this page you'll see an overview of all your custom fields
13
13
  # or a message saying no fields were found (if this is the case).
14
14
  #
15
- # ![Custom Fields](../../_static/custom_fields/custom_fields.png)
15
+ # ![Custom Fields](../../images/custom_fields/custom_fields.png)
16
16
  #
17
17
  # Editing a custom field can be done by clicking on the name of the field,
18
18
  # creating a new one can be done by clicking on the button "Add custom
19
19
  # field". In both cases you'll be shown a form that looks like the one in
20
20
  # the image below.
21
21
  #
22
- # ![General](../../_static/custom_fields/edit_custom_field_general.png)
23
- # ![Settings](../../_static/custom_fields/edit_custom_field_settings.png)
22
+ # ![General](../../images/custom_fields/edit_custom_field_general.png)
23
+ # ![Settings](../../images/custom_fields/edit_custom_field_settings.png)
24
24
  #
25
25
  # In this form you can specify the following fields:
26
26
  #
@@ -58,33 +58,23 @@ module CustomFields
58
58
  # * edit_custom_field
59
59
  # * delete_custom_field
60
60
  #
61
- # ## Events
62
- #
63
- # All events in this controller receive an instance of
64
- # {CustomFields::Model::CustomField}. Just like other packages the event
65
- # ``after_delete_custom_field`` receives an instance that has already been
66
- # destroyed, thus you won't be able to make any changes to the object and
67
- # save them in the database.
68
- #
69
61
  # @since 0.1
70
62
  # @map /admin/custom-fields
71
- # @event before_new_custom_field
72
- # @event after_new_custom_field
73
- # @event before_edit_custom_field
74
- # @event after_edit_custom_field
75
- # @event before_delete_custom_field
76
- # @event after_delete_custom_field
77
63
  #
78
64
  class CustomFields < Zen::Controller::AdminController
79
65
  helper :custom_field
80
66
  map '/admin/custom-fields'
81
67
  title 'custom_fields.titles.%s'
82
68
 
69
+ autosave Model::CustomField,
70
+ Model::CustomField::COLUMNS,
71
+ :edit_custom_field
72
+
83
73
  csrf_protection :save; :delete
84
74
  load_asset_group :tabs, [:edit, :new]
85
75
 
86
76
  before(:index, :edit, :new) do
87
- @custom_field_types = ::CustomFields::Model::CustomFieldType.type_hash
77
+ @custom_field_types = Model::CustomFieldType.type_hash
88
78
  @boolean_hash = {
89
79
  true => lang('zen_general.special.boolean_hash.true'),
90
80
  false => lang('zen_general.special.boolean_hash.false')
@@ -111,13 +101,13 @@ module CustomFields
111
101
  field_group = validate_custom_field_group(custom_field_group_id)
112
102
  @custom_field_group_id = custom_field_group_id
113
103
  @custom_fields = search do |query|
114
- ::CustomFields::Model::CustomField \
104
+ Model::CustomField \
115
105
  .search(query) \
116
106
  .filter(:custom_field_group_id => custom_field_group_id) \
117
107
  .order(:id.asc)
118
108
  end
119
109
 
120
- @custom_fields ||= ::CustomFields::Model::CustomField \
110
+ @custom_fields ||= Model::CustomField \
121
111
  .filter(:custom_field_group_id => custom_field_group_id) \
122
112
  .order(:id.asc)
123
113
 
@@ -153,12 +143,9 @@ module CustomFields
153
143
  )
154
144
 
155
145
  @custom_field_group_id = custom_field_group_id
146
+ @custom_field = validate_custom_field(id, custom_field_group_id)
156
147
 
157
- if flash[:form_data]
158
- @custom_field = flash[:form_data]
159
- else
160
- @custom_field = validate_custom_field(id, custom_field_group_id)
161
- end
148
+ @custom_field.set(flash[:form_data]) if flash[:form_data]
162
149
 
163
150
  render_view(:form)
164
151
  end
@@ -190,12 +177,9 @@ module CustomFields
190
177
  )
191
178
 
192
179
  @custom_field_group_id = custom_field_group_id
180
+ @custom_field = Model::CustomField.new
193
181
 
194
- if flash[:form_data]
195
- @custom_field = flash[:form_data]
196
- else
197
- @custom_field = ::CustomFields::Model::CustomField.new
198
- end
182
+ @custom_field.set(flash[:form_data]) if flash[:form_data]
199
183
 
200
184
  render_view(:form)
201
185
  end
@@ -204,75 +188,43 @@ module CustomFields
204
188
  # Saves the changes made by {#edit} and {#new}.
205
189
  #
206
190
  # @since 0.1
207
- # @event before_new_custom_field
208
- # @event after_new_custom_field
209
- # @event before_edit_custom_field
210
- # @event after_edit_custom_field
211
191
  # @permission edit_custom_field (when editing a field)
212
192
  # @permission new_custom_field (when creating a new field)
213
193
  #
214
194
  def save
215
- post = request.subset(
216
- :id,
217
- :name,
218
- :slug,
219
- :description,
220
- :sort_order,
221
- :format,
222
- :possible_values,
223
- :required,
224
- :text_editor,
225
- :textarea_rows,
226
- :text_limit,
227
- :custom_field_group_id,
228
- :custom_field_type_id
229
- )
195
+ post = post_fields(*Model::CustomField::COLUMNS)
196
+ id = request.params['id']
230
197
 
231
198
  validate_custom_field_group(post['custom_field_group_id'])
232
199
 
233
- # Get or create a custom field group based on the ID from the hidden
234
- # field.
235
- if post['id'] and !post['id'].empty?
200
+ if id and !id.empty?
236
201
  authorize_user!(:edit_custom_field)
237
202
 
238
- custom_field = validate_custom_field(
239
- post['id'], post['custom_field_group_id']
240
- )
241
-
203
+ custom_field = validate_custom_field(id, post['custom_field_group_id'])
242
204
  save_action = :save
243
- before_event = :before_edit_custom_field
244
- after_event = :after_edit_custom_field
245
205
  else
246
206
  authorize_user!(:new_custom_field)
247
207
 
248
- custom_field = ::CustomFields::Model::CustomField.new
208
+ custom_field = Model::CustomField.new
249
209
  save_action = :new
250
- before_event = :before_new_custom_field
251
- after_event = :after_new_custom_field
252
210
  end
253
211
 
254
- post.delete('id')
255
-
256
212
  success = lang("custom_fields.success.#{save_action}")
257
213
  error = lang("custom_fields.errors.#{save_action}")
258
214
 
259
215
  begin
260
- post.each { |k, v| custom_field.send("#{k}=", v) }
261
- Zen::Event.call(before_event, custom_field)
262
-
216
+ custom_field.set(post)
263
217
  custom_field.save
264
218
  rescue => e
265
- Ramaze::Log.error(e.inspect)
219
+ Ramaze::Log.error(e)
266
220
  message(:error, error)
267
221
 
268
- flash[:form_data] = custom_field
222
+ flash[:form_data] = post
269
223
  flash[:form_errors] = custom_field.errors
270
224
 
271
225
  redirect_referrer
272
226
  end
273
227
 
274
- Zen::Event.call(after_event, custom_field)
275
-
276
228
  message(:success, success)
277
229
  redirect(
278
230
  CustomFields.r(:edit, post['custom_field_group_id'], custom_field.id)
@@ -287,14 +239,12 @@ module CustomFields
287
239
  # should contain the primary values of each field that has to be deleted.
288
240
  #
289
241
  # @since 0.1
290
- # @event before_delete_custom_field
291
- # @event after_delete_custom_field
292
242
  # @permission delete_custom_field
293
243
  #
294
244
  def delete
295
245
  authorize_user!(:delete_custom_field)
296
246
 
297
- post = request.subset(:custom_field_ids)
247
+ post = post_fields(:custom_field_ids)
298
248
 
299
249
  if post['custom_field_ids'].nil? or post['custom_field_ids'].empty?
300
250
  message(:error, lang('custom_fields.errors.no_delete'))
@@ -302,21 +252,18 @@ module CustomFields
302
252
  end
303
253
 
304
254
  request.params['custom_field_ids'].each do |id|
305
- custom_field = ::CustomFields::Model::CustomField[id]
255
+ custom_field = Model::CustomField[id]
306
256
 
307
257
  next if custom_field.nil?
308
- Zen::Event.call(:before_delete_custom_field, custom_field)
309
258
 
310
259
  begin
311
260
  custom_field.destroy
312
261
  rescue => e
313
- Ramaze::Log.error(e.inspect)
262
+ Ramaze::Log.error(e)
314
263
  message(:error, lang('custom_fields.errors.delete') % id)
315
264
 
316
265
  redirect_referrer
317
266
  end
318
-
319
- Zen::Event.call(:after_delete_custom_field, custom_field)
320
267
  end
321
268
 
322
269
  message(:success, lang('custom_fields.success.delete'))
@@ -4,11 +4,37 @@ module CustomFields
4
4
  ##
5
5
  # Model for managing retrieving custom fields.
6
6
  #
7
- # @since 0.1
7
+ # @since 0.1
8
+ # @event before_new_custom_field
9
+ # @event after_new_custom_field
10
+ # @event before_edit_custom_field
11
+ # @event after_edit_custom_field
12
+ # @event before_delete_custom_field
13
+ # @event after_delete_custom_field
8
14
  #
9
15
  class CustomField < Sequel::Model
10
16
  include Zen::Model::Helper
11
17
 
18
+ ##
19
+ # Array containing all the columns the user can set.
20
+ #
21
+ # @since 17-02-2012
22
+ #
23
+ COLUMNS = [
24
+ :name,
25
+ :slug,
26
+ :description,
27
+ :sort_order,
28
+ :format,
29
+ :possible_values,
30
+ :required,
31
+ :text_editor,
32
+ :textarea_rows,
33
+ :text_limit,
34
+ :custom_field_group_id,
35
+ :custom_field_type_id
36
+ ]
37
+
12
38
  one_to_many :custom_field_values,
13
39
  :class => "CustomFields::Model::CustomFieldValue"
14
40
 
@@ -16,8 +42,18 @@ module CustomFields
16
42
  :class => 'CustomFields::Model::CustomFieldType',
17
43
  :eager => [:custom_field_method]
18
44
 
45
+ plugin :association_dependencies, :custom_field_values => :delete
46
+
19
47
  plugin :sluggable, :source => :name, :freeze => false
20
48
 
49
+ plugin :events,
50
+ :before_create => :before_new_custom_field,
51
+ :after_create => :after_new_custom_field,
52
+ :before_update => :before_edit_custom_field,
53
+ :after_update => :after_edit_custom_field,
54
+ :before_destroy => :before_delete_custom_field,
55
+ :after_destroy => :after_delete_custom_field
56
+
21
57
  ##
22
58
  # Searches for a set of custom fields.
23
59
  #
@@ -56,6 +92,17 @@ module CustomFields
56
92
  validates_presence(:slug) unless new?
57
93
  validates_unique(:slug)
58
94
  end
95
+
96
+ ##
97
+ # Hook that is executed before creating or saving an object.
98
+ #
99
+ # @since 03-01-2012
100
+ #
101
+ def before_save
102
+ sanitize_fields([:name, :slug, :description, :format])
103
+
104
+ super
105
+ end
59
106
  end # CustomField
60
107
  end # Model
61
108
  end # CustomFields