zen 0.2.8 → 0.3b

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 (422) hide show
  1. data/.gems +20 -0
  2. data/.mailmap +3 -2
  3. data/.rvmrc +1 -1
  4. data/.travis.yml +13 -2
  5. data/.yardopts +13 -0
  6. data/AUTHORS +1 -1
  7. data/README.md +115 -77
  8. data/Rakefile +6 -7
  9. data/bin/zen +12 -5
  10. data/guide/_static/categories/categories.png +0 -0
  11. data/guide/_static/categories/category_groups.png +0 -0
  12. data/guide/_static/categories/new_category.png +0 -0
  13. data/guide/_static/categories/new_category_group.png +0 -0
  14. data/guide/_static/comments/comments.png +0 -0
  15. data/guide/_static/comments/edit_comment.png +0 -0
  16. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  17. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  18. data/guide/_static/custom_fields/custom_fields.png +0 -0
  19. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  20. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  21. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  22. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  23. data/guide/_static/menus/edit_menu.png +0 -0
  24. data/guide/_static/menus/edit_menu_item.png +0 -0
  25. data/guide/_static/menus/menu_items.png +0 -0
  26. data/guide/_static/menus/menus.png +0 -0
  27. data/guide/_static/sections/edit_entry.png +0 -0
  28. data/guide/_static/sections/edit_entry_categories.png +0 -0
  29. data/guide/_static/sections/edit_entry_general.png +0 -0
  30. data/guide/_static/sections/edit_entry_meta.png +0 -0
  31. data/guide/_static/sections/edit_section_comments.png +0 -0
  32. data/guide/_static/sections/edit_section_general.png +0 -0
  33. data/guide/_static/sections/edit_section_groups.png +0 -0
  34. data/guide/_static/sections/entries.png +0 -0
  35. data/guide/_static/sections/sections.png +0 -0
  36. data/guide/_static/settings/overview_general.png +0 -0
  37. data/guide/_static/settings/overview_security.png +0 -0
  38. data/guide/_static/settings/overview_user.png +0 -0
  39. data/guide/_static/users/edit_user.png +0 -0
  40. data/guide/_static/users/edit_user_group.png +0 -0
  41. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  42. data/guide/_static/users/edit_user_permissions.png +0 -0
  43. data/guide/_static/users/overview.png +0 -0
  44. data/guide/_static/users/user_groups_overview.png +0 -0
  45. data/guide/asset_management.md +117 -0
  46. data/{CHANGELOG.md → guide/changelog.md} +42 -0
  47. data/guide/css/common.css +20 -0
  48. data/guide/getting_started.md +61 -0
  49. data/guide/hacking.md +52 -0
  50. data/guide/installation.md +44 -0
  51. data/guide/javascript.md +352 -0
  52. data/lib/vendor/sequel_sluggable.rb +137 -0
  53. data/lib/yard/tags.rb +13 -0
  54. data/lib/zen.rb +148 -78
  55. data/lib/zen/asset_groups.rb +85 -0
  56. data/lib/zen/bin/create.rb +267 -56
  57. data/lib/zen/bin/default.rb +84 -0
  58. data/lib/zen/controller/admin_controller.rb +1 -82
  59. data/lib/zen/controller/base_controller.rb +9 -5
  60. data/lib/zen/controller/frontend_controller.rb +0 -1
  61. data/lib/zen/controller/main_controller.rb +30 -42
  62. data/lib/zen/controller/preview.rb +9 -8
  63. data/lib/zen/controller/translations.rb +49 -0
  64. data/lib/zen/error.rb +17 -0
  65. data/lib/zen/event.rb +118 -0
  66. data/lib/zen/helper/asset.rb +63 -0
  67. data/lib/zen/helper/breadcrumb.rb +1 -4
  68. data/lib/zen/helper/controller.rb +73 -0
  69. data/lib/zen/helper/locale.rb +42 -0
  70. data/lib/zen/helper/message.rb +0 -3
  71. data/lib/zen/helper/search.rb +54 -0
  72. data/lib/zen/helper/stacked_aspect.rb +249 -0
  73. data/lib/zen/helper/theme.rb +3 -10
  74. data/lib/zen/language.rb +356 -181
  75. data/lib/zen/language/en/zen_general.rb +52 -0
  76. data/lib/zen/language/en/zen_models.rb +19 -0
  77. data/lib/zen/language/nl/zen_general.rb +57 -0
  78. data/lib/zen/language/nl/zen_models.rb +22 -0
  79. data/lib/zen/language/translation.rb +132 -0
  80. data/lib/zen/languages.rb +9 -0
  81. data/lib/zen/layout/admin.xhtml +3 -3
  82. data/lib/zen/layout/login.xhtml +1 -1
  83. data/lib/zen/markup.rb +189 -0
  84. data/lib/zen/model/helper.rb +65 -0
  85. data/lib/zen/model/init.rb +62 -0
  86. data/lib/zen/model/methods.rb +6 -7
  87. data/lib/zen/package.rb +312 -201
  88. data/lib/zen/package/all.rb +4 -3
  89. data/lib/zen/package/categories/lib/categories.rb +29 -41
  90. data/lib/zen/package/categories/lib/categories/controller/categories.rb +185 -130
  91. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +172 -102
  92. data/lib/zen/package/categories/lib/categories/helper/category.rb +4 -9
  93. data/lib/zen/package/categories/lib/categories/helper/category_frontend.rb +86 -0
  94. data/lib/zen/package/categories/lib/categories/language/en/categories.rb +40 -0
  95. data/lib/zen/package/categories/lib/categories/language/en/category_groups.rb +39 -0
  96. data/lib/zen/package/categories/lib/categories/language/nl/categories.rb +42 -0
  97. data/lib/zen/package/categories/lib/categories/language/nl/category_groups.rb +42 -0
  98. data/lib/zen/package/categories/lib/categories/model/category.rb +21 -25
  99. data/lib/zen/package/categories/lib/categories/model/category_group.rb +21 -15
  100. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +25 -26
  101. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +24 -24
  102. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +18 -20
  103. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +21 -18
  104. data/lib/zen/package/comments/lib/comments.rb +30 -50
  105. data/lib/zen/package/comments/lib/comments/anti_spam.rb +138 -0
  106. data/lib/zen/package/comments/lib/comments/controller/comments.rb +159 -92
  107. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +122 -34
  108. data/lib/zen/package/comments/lib/comments/helper/comment.rb +0 -3
  109. data/lib/zen/package/comments/lib/comments/helper/comment_frontend.rb +90 -0
  110. data/lib/zen/package/comments/lib/comments/language/en/comments.rb +57 -0
  111. data/lib/zen/package/comments/lib/comments/language/nl/comments.rb +61 -0
  112. data/lib/zen/package/comments/lib/comments/model/comment.rb +147 -49
  113. data/lib/zen/package/comments/lib/comments/model/comment_status.rb +0 -2
  114. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +37 -40
  115. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +23 -42
  116. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +12 -4
  117. data/lib/zen/package/comments/migrations/1313851786_remove_defensio_signature.rb +11 -0
  118. data/lib/zen/package/custom_fields/lib/custom_fields.rb +40 -43
  119. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +72 -17
  120. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +154 -118
  121. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +147 -90
  122. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +161 -131
  123. data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +4 -9
  124. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +42 -0
  125. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.rb +51 -0
  126. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.rb +60 -0
  127. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.rb +41 -0
  128. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.rb +49 -0
  129. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.rb +61 -0
  130. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +18 -23
  131. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +20 -19
  132. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +1 -3
  133. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +19 -9
  134. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +18 -15
  135. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +18 -18
  136. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +30 -24
  137. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +15 -10
  138. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +24 -19
  139. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +18 -13
  140. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +30 -20
  141. data/lib/zen/package/extensions/lib/extensions.rb +20 -0
  142. data/lib/zen/package/extensions/lib/extensions/controller/extensions.rb +41 -0
  143. data/lib/zen/package/extensions/lib/extensions/language/en/extensions.rb +23 -0
  144. data/lib/zen/package/extensions/lib/extensions/language/nl/extensions.rb +25 -0
  145. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +86 -0
  146. data/lib/zen/package/menu.rb +109 -0
  147. data/lib/zen/package/menus/lib/menus.rb +25 -34
  148. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +143 -107
  149. data/lib/zen/package/menus/lib/menus/controller/menus.rb +166 -115
  150. data/lib/zen/package/menus/lib/menus/helper/menu.rb +2 -8
  151. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +114 -0
  152. data/lib/zen/package/menus/lib/menus/language/en/menu_items.rb +48 -0
  153. data/lib/zen/package/menus/lib/menus/language/en/menus.rb +48 -0
  154. data/lib/zen/package/menus/lib/menus/language/nl/menu_items.rb +48 -0
  155. data/lib/zen/package/menus/lib/menus/language/nl/menus.rb +50 -0
  156. data/lib/zen/package/menus/lib/menus/model/menu.rb +24 -17
  157. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +37 -13
  158. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +32 -25
  159. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +23 -17
  160. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +31 -26
  161. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +20 -22
  162. data/lib/zen/package/sections/lib/sections.rb +25 -68
  163. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +178 -138
  164. data/lib/zen/package/sections/lib/sections/controller/sections.rb +173 -140
  165. data/lib/zen/package/sections/lib/sections/helper/section.rb +3 -6
  166. data/lib/zen/package/sections/lib/sections/helper/section_frontend.rb +146 -0
  167. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +50 -0
  168. data/lib/zen/package/sections/lib/sections/language/en/sections.rb +55 -0
  169. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +50 -0
  170. data/lib/zen/package/sections/lib/sections/language/nl/sections.rb +55 -0
  171. data/lib/zen/package/sections/lib/sections/model/section.rb +36 -36
  172. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +52 -59
  173. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -2
  174. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +24 -21
  175. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +24 -26
  176. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +33 -31
  177. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +24 -25
  178. data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +14 -10
  179. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +12 -6
  180. data/lib/zen/package/settings/lib/settings.rb +25 -120
  181. data/lib/zen/package/settings/lib/settings/blue_form_parameters.rb +157 -0
  182. data/lib/zen/package/settings/lib/settings/controller/settings.rb +94 -69
  183. data/lib/zen/package/settings/lib/settings/language/en/settings.rb +41 -0
  184. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +41 -0
  185. data/lib/zen/package/settings/lib/settings/model/setting.rb +0 -2
  186. data/lib/zen/package/settings/lib/settings/setting.rb +379 -0
  187. data/lib/zen/package/settings/lib/settings/setting_groups.rb +11 -0
  188. data/lib/zen/package/settings/lib/settings/settings.rb +83 -0
  189. data/lib/zen/package/settings/lib/settings/settings_group.rb +84 -0
  190. data/lib/zen/package/settings/lib/settings/singleton_methods.rb +35 -0
  191. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +15 -57
  192. data/lib/zen/package/settings/migrations/1321197919_remove_unused_columns.rb +17 -0
  193. data/lib/zen/package/users/lib/users.rb +51 -36
  194. data/lib/zen/package/users/lib/users/controller/user_groups.rb +133 -98
  195. data/lib/zen/package/users/lib/users/controller/users.rb +253 -136
  196. data/lib/zen/package/users/lib/users/helper/access.rb +102 -0
  197. data/lib/zen/package/users/lib/users/helper/acl.rb +113 -0
  198. data/lib/zen/package/users/lib/users/helper/users.rb +41 -24
  199. data/lib/zen/package/users/lib/users/language/en/permissions.rb +16 -0
  200. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +39 -0
  201. data/lib/zen/package/users/lib/users/language/en/users.rb +73 -0
  202. data/lib/zen/package/users/lib/users/language/nl/permissions.rb +16 -0
  203. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +41 -0
  204. data/lib/zen/package/users/lib/users/language/nl/users.rb +74 -0
  205. data/lib/zen/package/users/lib/users/model/permission.rb +28 -0
  206. data/lib/zen/package/users/lib/users/model/user.rb +104 -65
  207. data/lib/zen/package/users/lib/users/model/user_group.rb +28 -24
  208. data/lib/zen/package/users/lib/users/model/user_status.rb +27 -0
  209. data/lib/zen/package/users/lib/users/public/admin/css/users/permissions.css +22 -0
  210. data/lib/zen/package/users/lib/users/public/admin/js/users/permissions.js +33 -0
  211. data/lib/zen/package/users/lib/users/settings.rb +19 -0
  212. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +58 -28
  213. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +19 -15
  214. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +93 -62
  215. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +23 -36
  216. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +13 -6
  217. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +33 -0
  218. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +52 -0
  219. data/lib/zen/package/users/migrations/1313786058_update_default_date.rb +41 -0
  220. data/lib/zen/package/users/migrations/1316432327_permissions.rb +36 -0
  221. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +67 -0
  222. data/lib/zen/public/admin/css/zen/buttons.css +3 -11
  223. data/lib/zen/public/admin/css/zen/datepicker.css +23 -13
  224. data/lib/zen/public/admin/css/zen/editor.css +6 -14
  225. data/lib/zen/public/admin/css/zen/forms.css +19 -12
  226. data/lib/zen/public/admin/css/zen/general.css +22 -18
  227. data/lib/zen/public/admin/css/zen/grid.css +1 -20
  228. data/lib/zen/public/admin/css/zen/layout.css +26 -11
  229. data/lib/zen/public/admin/css/zen/messages.css +3 -10
  230. data/lib/zen/public/admin/css/zen/reset.css +13 -15
  231. data/lib/zen/public/admin/css/zen/tables.css +8 -10
  232. data/lib/zen/public/admin/css/zen/tabs.css +2 -10
  233. data/lib/zen/public/admin/css/zen/window.css +2 -8
  234. data/lib/zen/public/admin/js/vendor/datepicker.js +540 -240
  235. data/lib/zen/public/admin/js/vendor/mootools/core.js +273 -283
  236. data/lib/zen/public/admin/js/vendor/mootools/more.js +131 -136
  237. data/lib/zen/public/admin/js/zen/index.js +8 -14
  238. data/lib/zen/public/admin/js/zen/lib/editor.js +36 -33
  239. data/lib/zen/public/admin/js/zen/lib/editor/markdown.js +0 -6
  240. data/lib/zen/public/admin/js/zen/lib/editor/textile.js +0 -6
  241. data/lib/zen/public/admin/js/zen/lib/html_table.js +0 -5
  242. data/lib/zen/public/admin/js/zen/lib/tabs.js +22 -79
  243. data/lib/zen/public/admin/js/zen/lib/window.js +12 -22
  244. data/lib/zen/spec/bacon/color_output.rb +1 -1
  245. data/lib/zen/spec/helper.rb +6 -11
  246. data/lib/zen/spec/simplecov.rb +3 -3
  247. data/lib/zen/task.rb +0 -1
  248. data/lib/zen/task/build.rake +46 -26
  249. data/lib/zen/task/clean.rake +14 -7
  250. data/lib/zen/task/db.rake +31 -29
  251. data/lib/zen/task/package.rake +19 -23
  252. data/lib/zen/task/proto.rake +3 -5
  253. data/lib/zen/task/setup.rake +4 -0
  254. data/lib/zen/task/test.rake +31 -6
  255. data/lib/zen/task/theme.rake +13 -19
  256. data/lib/zen/theme.rb +377 -52
  257. data/lib/zen/validation.rb +22 -30
  258. data/lib/zen/version.rb +1 -2
  259. data/lib/zen/view/bottom.xhtml +9 -1
  260. data/lib/zen/view/head.xhtml +1 -1
  261. data/lib/zen/view/main.xhtml +1 -1
  262. data/lib/zen/view/search.xhtml +9 -0
  263. data/proto/app/Rakefile +0 -1
  264. data/proto/app/app.rb +21 -16
  265. data/proto/app/config/config.rb.erb +41 -0
  266. data/proto/app/config/{database.rb → database.rb.erb} +17 -14
  267. data/proto/app/config/middlewares.rb +1 -1
  268. data/proto/app/theme/default/index.xhtml +25 -0
  269. data/proto/app/theme/theme.rb +19 -0
  270. data/proto/app/{log/database/dev → tmp}/.gitkeep +0 -0
  271. data/proto/migration.rb +3 -5
  272. data/proto/rack/thin.yml +41 -0
  273. data/proto/rack/unicorn.rb +38 -0
  274. data/spec/Rakefile +15 -11
  275. data/spec/fixtures/zen/helper/controller.rb +13 -0
  276. data/spec/fixtures/zen/helper/locale.rb +7 -0
  277. data/spec/fixtures/zen/helper/message.rb +0 -4
  278. data/spec/fixtures/zen/language.rb +31 -0
  279. data/spec/fixtures/zen/language/en/spec.rb +11 -0
  280. data/spec/fixtures/zen/language/nl/spec.rb +11 -0
  281. data/spec/fixtures/zen/package.rb +0 -10
  282. data/spec/fixtures/zen/package/categories/helper/category_frontend.rb +16 -0
  283. data/spec/fixtures/zen/package/comments/helper/comment_frontend.rb +16 -0
  284. data/spec/fixtures/zen/package/sections/helper/section_frontend.rb +16 -0
  285. data/spec/fixtures/zen/package/settings/controller/settings.rb +17 -0
  286. data/spec/fixtures/zen/package/users/helper/access.rb +18 -0
  287. data/spec/fixtures/zen/package/users/helper/acl.rb +23 -0
  288. data/spec/fixtures/zen/theme/{default-section → default}/index.xhtml +0 -0
  289. data/spec/helper.rb +12 -27
  290. data/{proto/app/log/database/live → spec/public}/.gitkeep +0 -0
  291. data/spec/zen/controller/admin_controller.rb +5 -6
  292. data/spec/zen/controller/main_controller.rb +29 -35
  293. data/spec/zen/controller/preview.rb +9 -10
  294. data/spec/zen/event.rb +44 -0
  295. data/spec/zen/helper/breadcrumb.rb +4 -5
  296. data/spec/zen/helper/controller.rb +21 -0
  297. data/spec/zen/helper/locale.rb +25 -0
  298. data/spec/zen/helper/message.rb +4 -11
  299. data/spec/zen/helper/theme.rb +11 -14
  300. data/spec/zen/language.rb +48 -22
  301. data/spec/zen/markup.rb +39 -0
  302. data/spec/zen/package.rb +48 -11
  303. data/spec/zen/package/categories/controller/categories.rb +99 -45
  304. data/spec/zen/package/categories/controller/category_groups.rb +109 -33
  305. data/spec/zen/package/categories/helper/category.rb +19 -32
  306. data/spec/zen/package/categories/helper/category_frontend.rb +61 -0
  307. data/spec/zen/package/comments/anti_spam.rb +50 -0
  308. data/spec/zen/package/comments/controller/comments.rb +121 -61
  309. data/spec/zen/package/comments/controller/comments_form.rb +120 -94
  310. data/spec/zen/package/comments/helper/comment.rb +13 -13
  311. data/spec/zen/package/comments/helper/comment_frontend.rb +92 -0
  312. data/spec/zen/package/custom_fields/blue_form_parameters.rb +50 -50
  313. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +135 -43
  314. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +153 -48
  315. data/spec/zen/package/custom_fields/controller/custom_fields.rb +130 -51
  316. data/spec/zen/package/custom_fields/helper/custom_field.rb +8 -8
  317. data/spec/zen/package/extensions/controller/extensions.rb +38 -0
  318. data/spec/zen/package/menus/controller/menu_items.rb +121 -42
  319. data/spec/zen/package/menus/controller/menus.rb +125 -38
  320. data/spec/zen/package/menus/helper/menu.rb +26 -26
  321. data/spec/zen/package/menus/helper/menu_frontend.rb +104 -0
  322. data/spec/zen/package/sections/controller/section_entries.rb +145 -89
  323. data/spec/zen/package/sections/controller/sections.rb +130 -35
  324. data/spec/zen/package/sections/helper/section.rb +27 -38
  325. data/spec/zen/package/sections/helper/section_frontend.rb +160 -0
  326. data/spec/zen/package/settings/controller/settings.rb +73 -8
  327. data/spec/zen/package/settings/settings.rb +119 -0
  328. data/spec/zen/package/users/controller/user_groups.rb +134 -34
  329. data/spec/zen/package/users/controller/users.rb +189 -44
  330. data/spec/zen/package/users/helper/access.rb +29 -0
  331. data/spec/zen/package/users/helper/acl.rb +46 -0
  332. data/spec/zen/package/users/helper/users.rb +20 -64
  333. data/spec/zen/theme.rb +7 -9
  334. data/spec/zen/validation.rb +1 -2
  335. data/zen.gemspec +25 -22
  336. metadata +303 -222
  337. data/lib/zen/asset.rb +0 -292
  338. data/lib/zen/bin/runner.rb +0 -118
  339. data/lib/zen/error/language_error.rb +0 -10
  340. data/lib/zen/error/package_error.rb +0 -10
  341. data/lib/zen/error/plugin_error.rb +0 -10
  342. data/lib/zen/error/theme_error.rb +0 -10
  343. data/lib/zen/error/validation_error.rb +0 -10
  344. data/lib/zen/helper/acl.rb +0 -182
  345. data/lib/zen/helper/blue_form_vendor.rb +0 -689
  346. data/lib/zen/language/en/zen_general.yml +0 -25
  347. data/lib/zen/language/en/zen_models.yml +0 -13
  348. data/lib/zen/language/nl/zen_general.yml +0 -25
  349. data/lib/zen/language/nl/zen_models.yml +0 -13
  350. data/lib/zen/model/settings.rb +0 -78
  351. data/lib/zen/package/base.rb +0 -62
  352. data/lib/zen/package/categories/lib/categories/language/en/categories.yml +0 -36
  353. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +0 -34
  354. data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +0 -40
  355. data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +0 -34
  356. data/lib/zen/package/categories/lib/categories/plugin/categories.rb +0 -141
  357. data/lib/zen/package/comments/lib/comments/language/en/comments.yml +0 -48
  358. data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +0 -50
  359. data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +0 -156
  360. data/lib/zen/package/comments/lib/comments/plugin/comments.rb +0 -115
  361. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +0 -33
  362. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +0 -40
  363. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +0 -54
  364. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +0 -33
  365. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +0 -40
  366. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +0 -54
  367. data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +0 -41
  368. data/lib/zen/package/menus/lib/menus/language/en/menus.yml +0 -40
  369. data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +0 -41
  370. data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +0 -40
  371. data/lib/zen/package/menus/lib/menus/plugin/menus.rb +0 -152
  372. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +0 -44
  373. data/lib/zen/package/sections/lib/sections/language/en/sections.yml +0 -48
  374. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +0 -44
  375. data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +0 -48
  376. data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +0 -244
  377. data/lib/zen/package/sections/lib/sections/plugin/sections.rb +0 -87
  378. data/lib/zen/package/settings/lib/settings/language/en/settings.yml +0 -36
  379. data/lib/zen/package/settings/lib/settings/language/nl/settings.yml +0 -37
  380. data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +0 -39
  381. data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +0 -133
  382. data/lib/zen/package/settings/lib/settings/plugin/settings.rb +0 -251
  383. data/lib/zen/package/users/lib/users/controller/access_rules.rb +0 -284
  384. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +0 -38
  385. data/lib/zen/package/users/lib/users/language/en/user_groups.yml +0 -32
  386. data/lib/zen/package/users/lib/users/language/en/users.yml +0 -57
  387. data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +0 -38
  388. data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +0 -32
  389. data/lib/zen/package/users/lib/users/language/nl/users.yml +0 -57
  390. data/lib/zen/package/users/lib/users/model/access_rule.rb +0 -42
  391. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +0 -65
  392. data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +0 -49
  393. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +0 -120
  394. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +0 -102
  395. data/lib/zen/plugin.rb +0 -182
  396. data/lib/zen/plugin/base.rb +0 -46
  397. data/lib/zen/plugin/helper.rb +0 -47
  398. data/lib/zen/plugin/markup/lib/markup.rb +0 -14
  399. data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +0 -6
  400. data/lib/zen/plugin/markup/lib/markup/markup.rb +0 -165
  401. data/lib/zen/public/admin/js/zen/lib/asset.js +0 -111
  402. data/lib/zen/task/plugin.rake +0 -18
  403. data/lib/zen/theme/base.rb +0 -65
  404. data/proto/app/config/config.rb +0 -18
  405. data/spec/fixtures/zen/language/en/spec.yml +0 -10
  406. data/spec/fixtures/zen/language/nl/spec.yml +0 -7
  407. data/spec/fixtures/zen/package/settings/plugin/settings.rb +0 -20
  408. data/spec/zen/asset.rb +0 -97
  409. data/spec/zen/bin/create.rb +0 -89
  410. data/spec/zen/bin/runner.rb +0 -47
  411. data/spec/zen/helper/acl.rb +0 -149
  412. data/spec/zen/package/categories/plugin/categories.rb +0 -92
  413. data/spec/zen/package/comments/plugin/anti_spam.rb +0 -59
  414. data/spec/zen/package/comments/plugin/comments.rb +0 -107
  415. data/spec/zen/package/menus/plugin/menus.rb +0 -120
  416. data/spec/zen/package/sections/plugin/section_entries.rb +0 -161
  417. data/spec/zen/package/sections/plugin/sections.rb +0 -75
  418. data/spec/zen/package/settings/plugin/settings.rb +0 -33
  419. data/spec/zen/package/users/controller/access_rules.rb +0 -90
  420. data/spec/zen/plugin.rb +0 -64
  421. data/spec/zen/plugin/helper.rb +0 -11
  422. data/spec/zen/plugin/markup.rb +0 -44
@@ -28,7 +28,7 @@ Sequel.migration do
28
28
  status_id = Zen.database[:comment_statuses].insert({:name => status})
29
29
 
30
30
  comments.each do |comment|
31
- if comment[:status] === status
31
+ if comment[:status] == status
32
32
  Zen.database[:comments].filter(:id => comment[:id]) \
33
33
  .update(:comment_status_id => status_id)
34
34
  end
@@ -45,9 +45,17 @@ Sequel.migration do
45
45
  statuses[status[:id]] = status[:name]
46
46
  end
47
47
 
48
- # Put the old columns back in place
49
- drop_column(:comments, :comment_status_id)
50
- add_column(:comments, :status, String, :default => 'closed')
48
+ alter_table(:comments) do
49
+ # MySQL doesn't automatically drop foreign keys, because of this the one
50
+ # for the comment status ID has to be removed manually. Luckily the name
51
+ # of the foreign key is rather easy to figure out.
52
+ if Zen.database.adapter_scheme.to_s.include?('mysql')
53
+ drop_constraint(:comments_ibfk_2, :type => :foreign_key)
54
+ end
55
+
56
+ drop_column(:comment_status_id)
57
+ add_column(:status, String, :default => 'closed')
58
+ end
51
59
 
52
60
  # Put the old statuses back in place
53
61
  comments.each do |comment|
@@ -0,0 +1,11 @@
1
+ Sequel.migration do
2
+ # Updates the database with the changes specified in the block.
3
+ up do
4
+ drop_column(:comments, :defensio_signature)
5
+ end
6
+
7
+ # Reverts the changes made in the up() block.
8
+ down do
9
+ add_column(:comments, :defensio_signature, String)
10
+ end
11
+ end
@@ -1,56 +1,53 @@
1
- # Update the helpers path for the controllers
2
- Ramaze::HelpersHelper.options.paths.push(__DIR__('custom_fields'))
1
+ Zen::Package.add do |p|
2
+ p.name = :custom_fields
3
+ p.title = 'custom_fields.titles.index'
4
+ p.author = 'Yorick Peterse'
5
+ p.url = 'http://zen-cms.com/'
6
+ p.about = 'custom_fields.description'
7
+ p.root = __DIR__('custom_fields')
8
+ p.migrations = __DIR__('../migrations')
9
+
10
+ p.menu(
11
+ 'custom_fields.titles.index',
12
+ '/admin/custom-field-groups',
13
+ :permission => :show_custom_field_group
14
+ ) do |sub|
15
+ sub.menu(
16
+ 'custom_field_types.titles.index',
17
+ '/admin/custom-field-types',
18
+ :permission => :show_custom_field
19
+ )
20
+ end
21
+
22
+ p.permission :show_custom_field_group, 'custom_field_groups.permissions.show'
23
+ p.permission :edit_custom_field_group, 'custom_field_groups.permissions.edit'
24
+ p.permission :new_custom_field_group , 'custom_field_groups.permissions.new'
25
+ p.permission :delete_custom_field_group,
26
+ 'custom_field_groups.permissions.delete'
27
+
28
+ p.permission :show_custom_field_type , 'custom_field_types.permissions.show'
29
+ p.permission :edit_custom_field_type , 'custom_field_types.permissions.edit'
30
+ p.permission :new_custom_field_type , 'custom_field_types.permissions.new'
31
+ p.permission :delete_custom_field_type, 'custom_field_types.permissions.delete'
32
+
33
+ p.permission :show_custom_field , 'custom_fields.permissions.show'
34
+ p.permission :edit_custom_field , 'custom_fields.permissions.edit'
35
+ p.permission :new_custom_field , 'custom_fields.permissions.new'
36
+ p.permission :delete_custom_field, 'custom_fields.permissions.delete'
37
+ end
3
38
 
4
- # Update the language path
5
- Zen::Language.options.paths.push(__DIR__('custom_fields'))
39
+ Zen::Language.load('custom_fields')
40
+ Zen::Language.load('custom_field_groups')
41
+ Zen::Language.load('custom_field_types')
6
42
 
7
- # Load all models
8
43
  require __DIR__('custom_fields/model/custom_field_method')
9
44
  require __DIR__('custom_fields/model/custom_field_type')
10
45
  require __DIR__('custom_fields/model/custom_field')
11
46
  require __DIR__('custom_fields/model/custom_field_group')
12
47
  require __DIR__('custom_fields/model/custom_field_value')
13
48
 
14
- # Load all controllers
15
49
  require __DIR__('custom_fields/controller/custom_field_groups')
16
50
  require __DIR__('custom_fields/controller/custom_fields')
17
51
  require __DIR__('custom_fields/controller/custom_field_types')
18
52
 
19
53
  require __DIR__('custom_fields/blue_form_parameters')
20
-
21
- # Load all the language files
22
- Zen::Language.load('custom_fields')
23
- Zen::Language.load('custom_field_groups')
24
- Zen::Language.load('custom_field_types')
25
-
26
- # Define the package
27
- Zen::Package.add do |p|
28
- p.name = 'custom_fields'
29
- p.author = 'Yorick Peterse'
30
- p.url = 'http://yorickpeterse.com/'
31
- p.about = "The Custom Fields module is used to manage custom fields
32
- and custom field groups."
33
-
34
- p.directory = __DIR__('custom_fields')
35
- p.migration_dir = __DIR__('../migrations')
36
-
37
- p.menu = [{
38
- :title => lang('custom_fields.titles.index'),
39
- :url => "admin/custom-field-groups",
40
- :children => [
41
- {
42
- :title => lang('custom_field_types.titles.index'),
43
- :url => 'admin/custom-field-types'
44
- }
45
- ]
46
- }]
47
-
48
- p.controllers = {
49
- lang('custom_fields.titles.index') \
50
- => CustomFields::Controller::CustomFields,
51
- lang('custom_field_groups.titles.index') \
52
- => CustomFields::Controller::CustomFieldGroups,
53
- lang('custom_field_types.titles.index') \
54
- => CustomFields::Controller::CustomFieldTypes
55
- }
56
- end
@@ -1,10 +1,74 @@
1
- #:nodoc:
2
1
  module CustomFields
3
2
  ##
4
3
  # The BlueFormParameters module is used to build an array of parameters for
5
- # various BlueForm methods based on the type and method of a custom field.
4
+ # various BlueForm methods based on the type and method of a custom field. Out
5
+ # of the box this module provides a set of methods that can be used to
6
+ # generate the parameters for most methods in the BlueForm helper that ships
7
+ # with Ramaze. However, there may be a time when you want to add your own
8
+ # method. Don't worry, this is quite easy.
9
+ #
10
+ # Each method (they should be class methods) in this module takes two
11
+ # parameters, the first one is an instance of
12
+ # {CustomFields::Model::CustomField} and the second one an instance of
13
+ # {CustomFields::Model::CustomFieldValue}. The return value should be an
14
+ # array containing all the parameters that will be passed to BlueForm.
15
+ #
16
+ # Lets start with the basic skeleton of such a method:
17
+ #
18
+ # module CustomFields
19
+ # module BlueFormParameters
20
+ # def self.my_method(field, field_value)
21
+ # params = [:input_text]
22
+ #
23
+ # return params
24
+ # end
25
+ # end
26
+ # end
27
+ #
28
+ # So far the only thing this method does is telling BlueForm that we want to
29
+ # invoke the ``input_text()`` method. Let's add some extra parameters to it
30
+ # such as the label and name:
31
+ #
32
+ # module CustomFields
33
+ # module BlueFormParameters
34
+ # def self.my_method(field, field_value)
35
+ # params = [
36
+ # :input_text,
37
+ # field.label,
38
+ # "custom_field_value_#{field.id}"
39
+ # ]
40
+ #
41
+ # return params
42
+ # end
43
+ # end
44
+ # end
45
+ #
46
+ # The second parameter in this array is the label of the field, the third the
47
+ # name. The names of these fields should be specified in the format of
48
+ # ``custom_field_value_N`` where ``N`` is the ID of the custom field.
49
+ #
50
+ # Let's add our value to the list. BlueForm allows you to specify a hash
51
+ # containing additional parameters (including the value). Adding this hash to
52
+ # the array is as easy as, well, just adding it:
53
+ #
54
+ # module CustomFields
55
+ # module BlueFormParameters
56
+ # def self.my_method(field, field_value)
57
+ # params = [
58
+ # :input_text,
59
+ # field.label,
60
+ # "custom_field_value_#{field.id}",
61
+ # {:value => field_value.value}
62
+ # ]
63
+ #
64
+ # return params
65
+ # end
66
+ # end
67
+ # end
68
+ #
69
+ # And there you have it, a very basic example of how to add custom parameters
70
+ # allowing you to build your own HTML markup for your fields.
6
71
  #
7
- # @author Yorick Peterse
8
72
  # @since 0.2.8
9
73
  #
10
74
  module BlueFormParameters
@@ -13,12 +77,11 @@ module CustomFields
13
77
  # Generates the required parameters for
14
78
  # Ramaze::Helper::BlueForm::Form#input_text.
15
79
  #
16
- # @author Yorick Peterse
17
80
  # @since 0.2.8
18
81
  # @param [CustomFields::Model::CustomField] field The custom field to use
19
- # for filling in classes, values, etc.
82
+ # for filling in classes, values, etc.
20
83
  # @param [CustomFields::Model::CustomFieldValue] field_value The
21
- # value of the custom field for a given entry.
84
+ # value of the custom field for a given entry.
22
85
  # @return [Array]
23
86
  #
24
87
  def input_text(field, field_value)
@@ -36,11 +99,11 @@ module CustomFields
36
99
  end
37
100
 
38
101
  if !field.description.nil?
39
- params.last[:placeholder] = field.description
102
+ params.last[:title] = field.description
40
103
  end
41
104
 
42
105
  if !field.format.nil? and !field.format.empty? \
43
- and type.allow_markup === true
106
+ and type.allow_markup == true
44
107
  params.last[:'data-format'] = field.format
45
108
  end
46
109
 
@@ -55,7 +118,6 @@ module CustomFields
55
118
  # Generates the required parameters for
56
119
  # Ramaze::Helper::BlueForm::Form#input_password.
57
120
  #
58
- # @author Yorick Peterse
59
121
  # @since 0.2.8
60
122
  # @see CustomFields::BlueFormParameters.input_text
61
123
  #
@@ -72,7 +134,6 @@ module CustomFields
72
134
  # Generates the required parameters for
73
135
  # Ramaze::Helper::BlueForm::Form#textarea.
74
136
  #
75
- # @author Yorick Peterse
76
137
  # @since 0.2.8
77
138
  # @see CustomFields::BlueFormParameters.input_text
78
139
  #
@@ -86,7 +147,7 @@ module CustomFields
86
147
 
87
148
  # Remove the class "text]editor" if the field does not allow the text
88
149
  # editor to be used.
89
- if field.text_editor === false
150
+ if field.text_editor == false
90
151
  params.last[:class].gsub!('text_editor', '')
91
152
  end
92
153
 
@@ -97,7 +158,6 @@ module CustomFields
97
158
  # Generates the required parameters for
98
159
  # Ramaze::Helper::BlueForm::Form#input_radio.
99
160
  #
100
- # @author Yorick Peterse
101
161
  # @since 0.2.8
102
162
  # @see CustomFields::BlueFormParameters.input_text
103
163
  #
@@ -135,7 +195,6 @@ module CustomFields
135
195
  # Generates the required parameters for
136
196
  # Ramaze::Helper::BlueForm::Form#input_checkbox.
137
197
  #
138
- # @author Yorick Peterse
139
198
  # @since 0.2.8
140
199
  # @see CustomFields::BlueFormParameters.input_radio
141
200
  #
@@ -150,7 +209,6 @@ module CustomFields
150
209
  # Generates the required parameters for
151
210
  # Ramaze::Helper::BlueForm::Form#select.
152
211
  #
153
- # @author Yorick Peterse
154
212
  # @since 0.2.8
155
213
  # @see CustomFields::BlueFormParameters.input_text
156
214
  #
@@ -188,7 +246,6 @@ module CustomFields
188
246
  # Ramaze::Helper::BlueForm::Form#select but allows multiple values to be
189
247
  # selected.
190
248
  #
191
- # @author Yorick Peterse
192
249
  # @since 0.2.8
193
250
  # @see CustomFields::BlueFormParameters.select
194
251
  #
@@ -202,8 +259,6 @@ module CustomFields
202
259
 
203
260
  return params
204
261
  end
205
-
206
- private
207
262
  end # class << self
208
263
  end # BlueFormParameters
209
264
  end # CustomFields
@@ -1,196 +1,225 @@
1
- #:nodoc:
1
+ ##
2
+ # Package for managing custom field groups, custom fields and custom field
3
+ # types.
4
+ #
5
+ # ## Controllers
6
+ #
7
+ # * {CustomFields::Controller::CustomFieldGroups}
8
+ # * {CustomFields::Controller::CustomFields}
9
+ # * {CustomFields::Controller::CustomFieldTypes}
10
+ #
11
+ # ## Helpers
12
+ #
13
+ # * {Ramaze::Helper::CustomField}
14
+ #
15
+ # ## Models
16
+ #
17
+ # * {CustomFields::Model::CustomFieldGroup}
18
+ # * {CustomFields::Model::CustomField}
19
+ # * {CustomFields::Model::CustomFieldType}
20
+ # * {CustomFields::Model::CustomFieldMethod}
21
+ # * {CustomFields::Model::CustomFieldValue}
22
+ #
23
+ # ## Generic Modules & Classes
24
+ #
25
+ # * {CustomFields::BlueFormParameters}
26
+ #
2
27
  module CustomFields
3
28
  #:nodoc:
4
29
  module Controller
5
30
  ##
6
- # Controller for managing custom field groups. These groups are used to
7
- # organize individual fields into a larger group which in turn will be
8
- # assigned to a section.
31
+ # Custom field groups allow you to group various fields into groups which in
32
+ # turn can be assigned to a number of sections. Managing your groups can be
33
+ # done by navigating to ``/admin/custom-field-groups``. If you have any
34
+ # existing groups these will be displayed, otherwise a message telling you
35
+ # that do don't have any groups will be displayed instead.
9
36
  #
10
- # @author Yorick Peterse
11
- # @since 0.1
37
+ # ![Groups](../../_static/custom_fields/custom_field_groups.png)
38
+ #
39
+ # Just like with other packages you can delete records by clicking the
40
+ # checkboxes followed by the "Delete selected groups" button. Groups can be
41
+ # edited by clicking on the name of a group. If you want to manage the
42
+ # fields of a group you should click on the "Manage custom fields" link.
43
+ #
44
+ # ## Adding/Editing Groups
45
+ #
46
+ # ![Edit Group](../../_static/custom_fields/edit_custom_field_group.png)
47
+ #
48
+ # When creating a new group or editing an existing group you can fill in the
49
+ # following two fields:
50
+ #
51
+ # * **Name** (required): the name of the group, an example of such a name is
52
+ # "General group" or "Meta fields".
53
+ # * **Description**: a description of the group.
54
+ #
55
+ # Note that the length of the group name can not be longer than 255
56
+ # characters.
57
+ #
58
+ # ## Used Permissions
59
+ #
60
+ # * show_custom_field_group
61
+ # * new_custom_field_group
62
+ # * edit_custom_field_group
63
+ # * delete_custom_field_group
64
+ #
65
+ # ## Events
66
+ #
67
+ # All events in this controller receive an instance of
68
+ # {CustomFields::Model::CustomFieldGroup}. The
69
+ # ``after_delete_custom_field_group`` event will receive an instance of this
70
+ # model that has already been destroyed.
71
+ #
72
+ # @since 0.1
73
+ # @map /admin/custom-field-groups
74
+ # @event before_new_custom_field_group
75
+ # @event after_new_custom_field_group
76
+ # @event before_edit_custom_field_group
77
+ # @event after_edit_custom_field_group
78
+ # @event before_delete_custom_field_group
79
+ # @event after_delete_custom_field_group
12
80
  #
13
81
  class CustomFieldGroups < Zen::Controller::AdminController
14
- include ::CustomFields::Model
15
-
16
82
  helper :custom_field
17
83
  map '/admin/custom-field-groups'
84
+ title 'custom_field_groups.titles.%s'
18
85
 
19
- before_all do
20
- csrf_protection(:save, :delete) do
21
- respond(lang('zen_general.errors.csrf'), 403)
22
- end
23
- end
86
+ csrf_protection :save, :delete
24
87
 
25
88
  ##
26
- # Constructor method, called upon initialization. It's used to set the URL
27
- # to which forms send their data and load the language pack.
89
+ # Shows an overview that allows the user to manage existing field groups
90
+ # and create new ones.
28
91
  #
29
- # This method loads the following language files:
30
- #
31
- # * custom_field_groups
32
- #
33
- # @author Yorick Peterse
34
- # @since 0.1
35
- #
36
- def initialize
37
- super
38
-
39
- Zen::Language.load('custom_field_groups')
40
-
41
- # Set the page title
42
- if !action.method.nil?
43
- method = action.method.to_sym
44
- @page_title = lang("custom_field_groups.titles.#{method}") rescue nil
45
- end
46
- end
47
-
48
- ##
49
- # Show an overview of all existing custom field groups. Using this
50
- # overview a user can manage an existing field group, delete it or create
51
- # a new one.
52
- #
53
- # This method requires the following permissions:
54
- #
55
- # * read
56
- #
57
- # @author Yorick Peterse
58
- # @since 0.1
92
+ # @since 0.1
93
+ # @permission show_custom_field_group
59
94
  #
60
95
  def index
61
- require_permissions(:read)
96
+ authorize_user!(:show_custom_field_group)
62
97
 
63
98
  set_breadcrumbs(lang('custom_field_groups.titles.index'))
64
99
 
65
- @field_groups = paginate(CustomFieldGroup)
100
+ @field_groups = search do |query|
101
+ ::CustomFields::Model::CustomFieldGroup \
102
+ .search(query) \
103
+ .order(:id.asc)
104
+ end
105
+
106
+ @field_groups ||= ::CustomFields::Model::CustomFieldGroup.order(:id.asc)
107
+ @field_groups = paginate(@field_groups)
66
108
  end
67
109
 
68
110
  ##
69
111
  # Show a form that lets the user edit an existing custom field group.
70
112
  #
71
- # This method requires the following permissions:
72
- #
73
- # * read
74
- # * update
75
- #
76
- # @author Yorick Peterse
77
- # @param [Integer] id The ID of the custom field group to retrieve so
78
- # that we can edit it.
79
- # @since 0.1
113
+ # @param [Fixnum] id The ID of the custom field group to retrieve so
114
+ # that we can edit it.
115
+ # @since 0.1
116
+ # @permission edit_custom_field_group
80
117
  #
81
118
  def edit(id)
82
- require_permissions(:read, :update)
119
+ authorize_user!(:edit_custom_field_group)
83
120
 
84
121
  set_breadcrumbs(
85
122
  CustomFieldGroups.a(lang('custom_field_groups.titles.index'), :index),
86
123
  @page_title
87
124
  )
88
125
 
89
- if flash[:form_data]
90
- @field_group = flash[:form_data]
91
- else
92
- @field_group = validate_custom_field_group(id)
93
- end
126
+ @field_group = flash[:form_data] || validate_custom_field_group(id)
94
127
 
95
128
  render_view(:form)
96
129
  end
97
130
 
98
131
  ##
99
- # Show a form that lets the user create a new custom field group.
132
+ # Allows a user to create a new custom field group.
100
133
  #
101
- # This method requires the following permissions:
102
- #
103
- # * read
104
- # * create
105
- #
106
- # @author Yorick Peterse
107
- # @since 0.1
134
+ # @since 0.1
135
+ # @permission new_custom_field_group
108
136
  #
109
137
  def new
110
- require_permissions(:read, :create)
138
+ authorize_user!(:new_custom_field_group)
111
139
 
112
140
  set_breadcrumbs(
113
141
  CustomFieldGroups.a(lang('custom_field_groups.titles.index'), :index),
114
142
  @page_title
115
143
  )
116
144
 
117
- @field_group = CustomFieldGroup.new
145
+ if flash[:form_data]
146
+ @field_group = flash[:form_data]
147
+ else
148
+ @field_group = ::CustomFields::Model::CustomFieldGroup.new
149
+ end
118
150
 
119
151
  render_view(:form)
120
152
  end
121
153
 
122
154
  ##
123
- # Method used for processing the form data and redirecting the user back
124
- # to the proper URL. Based on the value of a hidden field named 'id' we'll
125
- # determine if the data will be used to create a new group or to update an
126
- # existing one.
127
- #
128
- # This method requires the following permissions:
129
- #
130
- # * create
131
- # * update
132
- #
133
- # @author Yorick Peterse
134
- # @since 0.1
155
+ # Saves or creates a new custom field group. If a valid ID is specified in
156
+ # the POST key "id" an existing row will be updated instead of creating a
157
+ # new one.
158
+ #
159
+ # @since 0.1
160
+ # @permission edit_custom_field_group (when editing a group)
161
+ # @permission new_custom_field_group (when creating a group)
162
+ # @event before_edit_custom_field_group
163
+ # @event after_edit_custom_field_group
164
+ # @event before_new_custom_field_group
165
+ # @event after_new_custom_field_group
135
166
  #
136
167
  def save
137
168
  post = request.subset(:id, :name, :description)
138
169
 
139
170
  if post['id'] and !post['id'].empty?
140
- require_permissions(:update)
171
+ authorize_user!(:edit_custom_field_group)
141
172
 
142
- @field_group = validate_custom_field_group(post['id'])
143
- save_action = :save
173
+ field_group = validate_custom_field_group(post['id'])
174
+ save_action = :save
175
+ before_event = :before_edit_custom_field_group
176
+ after_event = :after_edit_custom_field_group
144
177
  else
145
- require_permissions(:create)
178
+ authorize_user!(:new_custom_field_group)
146
179
 
147
- @field_group = CustomFieldGroup.new
148
- save_action = :new
180
+ field_group = ::CustomFields::Model::CustomFieldGroup.new
181
+ save_action = :new
182
+ before_event = :before_new_custom_field_group
183
+ after_event = :after_new_custom_field_group
149
184
  end
150
185
 
151
186
  post.delete('id')
152
187
 
153
- # Set the messages
154
- flash_success = lang("custom_field_groups.success.#{save_action}")
155
- flash_error = lang("custom_field_groups.errors.#{save_action}")
188
+ success = lang("custom_field_groups.success.#{save_action}")
189
+ error = lang("custom_field_groups.errors.#{save_action}")
156
190
 
157
191
  begin
158
- @field_group.update(post)
159
- message(:success, flash_success)
192
+ post.each { |k, v| field_group.send("#{k}=", v) }
193
+ Zen::Event.call(before_event, field_group)
194
+
195
+ field_group.save
160
196
  rescue => e
161
197
  Ramaze::Log.error(e.inspect)
162
- message(:error, flash_error)
198
+ message(:error, error)
163
199
 
164
- flash[:form_errors] = @field_group.errors
165
- flash[:form_data] = @field_group
200
+ flash[:form_errors] = field_group.errors
201
+ flash[:form_data] = field_group
166
202
 
167
203
  redirect_referrer
168
204
  end
169
205
 
170
- if !@field_group.nil? and @field_group.id
171
- redirect(CustomFieldGroups.r(:edit, @field_group.id))
172
- else
173
- redirect_referrer
174
- end
206
+ Zen::Event.call(after_event, field_group)
207
+
208
+ message(:success, success)
209
+ redirect(CustomFieldGroups.r(:edit, field_group.id))
175
210
  end
176
211
 
177
212
  ##
178
- # Delete an existing custom field group.
213
+ # Delete an existing custom field group. The IDs of the groups to remove
214
+ # should be specified in a POST array called "custom_field_group_ids".
179
215
  #
180
- # In order to delete a custom field group you'll need to send a POST
181
- # request that contains a field named 'custom_field_group_ids[]'. This
182
- # field should contain the primary values of each field group that has to
183
- # be deleted.
184
- #
185
- # This method requires the following permissions:
186
- #
187
- # * delete
188
- #
189
- # @author Yorick Peterse
190
- # @since 0.1
216
+ # @since 0.1
217
+ # @permission delete_custom_field_group
218
+ # @event before_delete_custom_field_group
219
+ # @event after_delete_custom_field_group
191
220
  #
192
221
  def delete
193
- require_permissions(:delete)
222
+ authorize_user!(:delete_custom_field_group)
194
223
 
195
224
  if !request.params['custom_field_group_ids'] \
196
225
  or request.params['custom_field_group_ids'].empty?
@@ -199,17 +228,24 @@ module CustomFields
199
228
  end
200
229
 
201
230
  request.params['custom_field_group_ids'].each do |id|
231
+ group = ::CustomFields::Model::CustomFieldGroup[id]
232
+
233
+ next if group.nil?
234
+ Zen::Event.call(:before_delete_custom_field_group, group)
235
+
202
236
  begin
203
- CustomFieldGroup[id].destroy
204
- message(:success, lang('custom_field_groups.success.delete'))
237
+ group.destroy
205
238
  rescue => e
206
239
  Ramaze::Log.error(e.inspect)
207
240
  message(:error, lang('custom_field_groups.errors.delete') % id)
208
241
 
209
242
  redirect_referrer
210
243
  end
244
+
245
+ Zen::Event.call(:after_delete_custom_field_group, group)
211
246
  end
212
247
 
248
+ message(:success, lang('custom_field_groups.success.delete'))
213
249
  redirect_referrer
214
250
  end
215
251
  end # CustomFieldGroups