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
@@ -1,10 +1,11 @@
1
- # Loads all core packages that ship with Zen. Note that it's important to load
2
- # these packages in the correct order as otherwise migrations that create
1
+ # Loads all core packages that ship with Zen. Note that it's important to load
2
+ # these packages in the correct order as otherwise migrations that create
3
3
  # foreign keys might not work.
4
- require __DIR__('users/lib/users')
5
4
  require __DIR__('settings/lib/settings')
5
+ require __DIR__('users/lib/users')
6
6
  require __DIR__('sections/lib/sections')
7
7
  require __DIR__('comments/lib/comments')
8
8
  require __DIR__('categories/lib/categories')
9
9
  require __DIR__('custom_fields/lib/custom_fields')
10
10
  require __DIR__('menus/lib/menus')
11
+ require __DIR__('extensions/lib/extensions')
@@ -1,47 +1,35 @@
1
- # Update the helper path before loading the controllers
2
- Ramaze::HelpersHelper.options.paths.push(__DIR__('categories'))
1
+ Zen::Package.add do |p|
2
+ p.name = :categories
3
+ p.title = 'categories.titles.index'
4
+ p.author = 'Yorick Peterse'
5
+ p.url = 'http://zen-cms.com/'
6
+ p.about = 'category_groups.description'
7
+ p.root = __DIR__('categories')
8
+ p.migrations = __DIR__('../migrations')
3
9
 
4
- require __DIR__('categories/model/category_group')
5
- require __DIR__('categories/model/category')
6
- require __DIR__('categories/controller/category_groups')
7
- require __DIR__('categories/controller/categories')
8
- require __DIR__('categories/plugin/categories')
10
+ p.menu(
11
+ 'categories.titles.index',
12
+ '/admin/category-groups',
13
+ :permission => :show_category_group
14
+ )
9
15
 
10
- # Load the language pack manually so it can be used in the block below
11
- Zen::Language.options.paths.push(__DIR__('categories'))
12
- Zen::Language.load('categories')
13
- Zen::Language.load('category_groups')
16
+ p.permission :show_category_group , 'category_groups.permissions.show'
17
+ p.permission :edit_category_group , 'category_groups.permissions.edit'
18
+ p.permission :new_category_group , 'category_groups.permissions.new'
19
+ p.permission :delete_category_group, 'category_groups.permissions.delete'
14
20
 
15
- # Describe what this package is all about
16
- Zen::Package.add do |p|
17
- p.name = 'categories'
18
- p.author = 'Yorick Peterse'
19
- p.url = 'http://yorickpeterse.com/'
20
- p.about = "Module for managing categories. Categories can be used to
21
- organize section entries."
21
+ p.permission :show_category , 'categories.permissions.show'
22
+ p.permission :edit_category , 'categories.permissions.edit'
23
+ p.permission :new_category , 'categories.permissions.new'
24
+ p.permission :delete_category, 'categories.permissions.delete'
25
+ end
22
26
 
23
- p.directory = __DIR__('categories')
24
- p.migration_dir = __DIR__('../migrations')
25
-
26
- p.menu = [{
27
- :title => lang('categories.titles.index'),
28
- :url => "admin/category-groups"
29
- }]
27
+ Zen::Language.load('categories')
28
+ Zen::Language.load('category_groups')
30
29
 
31
- # Register all controllers
32
- p.controllers = {
33
- lang('categories.titles.index') => Categories::Controller::Categories,
34
- lang('category_groups.titles.index') => Categories::Controller::CategoryGroups
35
- }
36
- end
30
+ require __DIR__('categories/model/category_group')
31
+ require __DIR__('categories/model/category')
32
+ require __DIR__('categories/controller/category_groups')
33
+ require __DIR__('categories/controller/categories')
37
34
 
38
- # Register our plugins
39
- Zen::Plugin.add do |p|
40
- p.name = 'categories'
41
- p.author = 'Yorick Peterse'
42
- p.url = 'http://yorickpeterse.com/'
43
- p.about = 'Plugin that makes it easier to retrieve categories and category
44
- groups.'
45
-
46
- p.plugin = Categories::Plugin::Categories
47
- end
35
+ Zen::Controller::FrontendController.helper(:category_frontend)
@@ -1,68 +1,107 @@
1
- #:nodoc:
2
1
  module Categories
3
2
  #:nodoc:
4
3
  module Controller
5
4
  ##
6
- # Categories can be seen as "tags" for your section entries. They describe
7
- # the type of entry just like tags except that categories generally cover
8
- # larger elements. When adding a new entry categories aren't required so
9
- # you're free to ignore them if you don't need them.
5
+ # Categories are data containers that work similar to tags. Categories can
6
+ # be used to group section entries that share similar topics together. A
7
+ # category is always related to a category group and thus you must first
8
+ # create such a group before you can add individual categories. Read the
9
+ # chapter about {Categories::Controller::CategoryGroups Category groups} for
10
+ # more information.
11
+ #
12
+ # In order to manage categories you must first navigate to the category
13
+ # groups overview. In this overview you can click the link "Manage
14
+ # categories" of a certain group to add, edit or remove categories. Once
15
+ # you've reached the categories overview you'll be presented with an
16
+ # overview that looks like the following image:
17
+ #
18
+ # ![Categories Overview](../../_static/categories/categories.png)
19
+ #
20
+ # ## Adding/Editing Categories
21
+ #
22
+ # Editing a category can be done by clicking on the name of that category.
23
+ # If you want to create a new category instead you should click the button
24
+ # "Add category". In both cases you'll end up with the following form:
25
+ #
26
+ # ![New Category](../../_static/categories/new_category.png)
27
+ #
28
+ # In this form you can specify the following fields:
29
+ #
30
+ # * **Name** (required): the name of the category. This name can be anything
31
+ # and there's no restriction to it's format. An example of such a name
32
+ # would be "Code" or "Products".
33
+ # * **Slug**: a URL friendly version of a category name. If no slug is
34
+ # specified one will be generated based on the category name.
35
+ # * **Parent**: the name of the parent category.
36
+ # * **Description**: a description of the category. While not required it
37
+ # can help you remember what the category is meant for in case the name
38
+ # doesn't already make this clear enough.
39
+ #
40
+ # Note that both the name of a category and it's slug can not be longer than
41
+ # 255 characters.
42
+ #
43
+ # ## Used Permissions
44
+ #
45
+ # This controller uses the following permissions:
46
+ #
47
+ # * show_category
48
+ # * edit_category
49
+ # * new_category
50
+ # * delete_category
51
+ #
52
+ # ## Events
53
+ #
54
+ # All available events will receive an instance of
55
+ # {Categories::Model::Category}. Do note that the event
56
+ # ``after_delete_category`` will receive an instance of this model *after*
57
+ # ``#destroy()`` has been invoked on the instance. This means that you can
58
+ # not save any changes made to the object as the database no longer
59
+ # exists.
60
+ #
61
+ # Say you want to notify a user whenever a category is removed you could do
62
+ # the following:
63
+ #
64
+ # # "mail" can be installed by running gem install mail.
65
+ # require 'mail'
66
+ #
67
+ # Zen::Event.listen(:delete_category) do |category|
68
+ # user = Users::Model::User[:name => 'admin']
69
+ # Mail.deliver do
70
+ # from 'example@domain.com'
71
+ # to user.email
72
+ # subject "Category \"#{category.name}\" has been removed"
73
+ # "has been removed from the database."
74
+ # end
75
+ # end
10
76
  #
11
- # @author Yorick Peterse
12
77
  # @since 0.1
78
+ # @map /admin/categories
79
+ # @event before_new_category
80
+ # @event after_new_category
81
+ # @event before_edit_category
82
+ # @event after_edit_category
83
+ # @event before_delete_category
84
+ # @event after_delete_category
13
85
  #
14
86
  class Categories < Zen::Controller::AdminController
15
- include ::Categories::Model
16
-
17
- map '/admin/categories'
87
+ map '/admin/categories'
18
88
  helper :category
89
+ title 'categories.titles.%s'
19
90
 
20
- before_all do
21
- csrf_protection(:save, :delete) do
22
- respond(lang('zen_general.errors.csrf'), 403)
23
- end
24
- end
25
-
26
- ##
27
- # The constructor is used to set various options such as the form URLs and
28
- # load the language pack for the categories module.
29
- #
30
- # The following language files are loaded:
31
- #
32
- # * categories
33
- # * category_groups
34
- #
35
- # @author Yorick Peterse
36
- # @since 0.1
37
- #
38
- def initialize
39
- super
40
-
41
- Zen::Language.load('categories')
42
- Zen::Language.load('category_groups')
43
-
44
- # Set the page title
45
- if !action.method.nil?
46
- method = action.method.to_s
47
- @page_title = lang("categories.titles.#{method}") rescue nil
48
- end
49
- end
91
+ # Protect Categories#save() and Categories#delete() against CSRF attacks.
92
+ csrf_protection :save, :delete
50
93
 
51
94
  ##
52
95
  # Show an overview of all existing categories and allow the user
53
- # to create and manage these categories.
54
- #
55
- # This method requires the following permissions:
56
- #
57
- # * read
96
+ # manage these categories.
58
97
  #
59
- # @author Yorick Peterse
60
- # @param [Fixnum] category_group_id The ID of the category group that's
61
- # currently being managed by the user.
62
- # @since 0.1
98
+ # @param [Fixnum] category_group_id The ID of the category group for
99
+ # which to retrieve all categories.
100
+ # @since 0.1
101
+ # @permission show_category
63
102
  #
64
103
  def index(category_group_id)
65
- require_permissions(:read)
104
+ authorize_user!(:show_category)
66
105
 
67
106
  set_breadcrumbs(
68
107
  CategoryGroups.a(lang('category_groups.titles.index'), :index),
@@ -72,37 +111,42 @@ module Categories
72
111
  # Validate the category group
73
112
  category_group = validate_category_group(category_group_id)
74
113
  @category_group_id = category_group_id
75
- @categories = Category.filter(
76
- :category_group_id => category_group_id
77
- )
114
+
115
+ @categories = search do |query|
116
+ ::Categories::Model::Category \
117
+ .search(query) \
118
+ .filter(:category_group_id => category_group_id) \
119
+ .order(:id.asc)
120
+ end
121
+
122
+ @categories ||= ::Categories::Model::Category \
123
+ .filter(:category_group_id => category_group_id) \
124
+ .order(:id.asc)
78
125
 
79
126
  @categories = paginate(@categories)
80
127
  end
81
128
 
82
129
  ##
83
- # Edit an existing category based on the ID specified in the URL.
84
- #
85
- # This method requires the following permissions:
86
- #
87
- # * read
88
- # * update
130
+ # Allows the user to create a new category.
89
131
  #
90
- # @author Yorick Peterse
91
- # @param [Integer] category_group_id The category group ID.
92
- # @param [Integer] id The ID of the category to edit.
93
- # @since 0.1
132
+ # @param [Fixnum] category_group_id The ID of the category group.
133
+ # @since 0.1
134
+ # @permission new_category
94
135
  #
95
- def edit(category_group_id, id)
96
- require_permissions(:read, :update)
136
+ def new(category_group_id)
137
+ authorize_user!(:new_category)
97
138
 
98
139
  set_breadcrumbs(
99
140
  CategoryGroups.a(
100
- lang('category_groups.titles.index'), :index
141
+ lang('category_groups.titles.index'),
142
+ :index
101
143
  ),
102
144
  Categories.a(
103
- lang('categories.titles.index'), :index, category_group_id
145
+ lang('categories.titles.index'),
146
+ :index,
147
+ category_group_id
104
148
  ),
105
- lang('categories.titles.edit')
149
+ lang('categories.titles.new')
106
150
  )
107
151
 
108
152
  validate_category_group(category_group_id)
@@ -112,41 +156,45 @@ module Categories
112
156
  if flash[:form_data]
113
157
  @category = flash[:form_data]
114
158
  else
115
- @category = validate_category(id, category_group_id)
159
+ @category = ::Categories::Model::Category.new
116
160
  end
117
161
 
118
162
  render_view(:form)
119
163
  end
120
164
 
121
165
  ##
122
- # Create a new category.
123
- #
124
- # This method requires the following permissions:
125
- #
126
- # * read
127
- # * create
166
+ # Edit an existing category based on the ID specified in the URL.
128
167
  #
129
- # @author Yorick Peterse
130
- # @param [Integer] category_group_id The ID of the category group.
131
- # @since 0.1
168
+ # @param [Fixnum] category_group_id The category group ID.
169
+ # @param [Fixnum] id The ID of the category to edit.
170
+ # @since 0.1
171
+ # @permission edit_category
132
172
  #
133
- def new(category_group_id)
134
- require_permissions(:read, :create)
173
+ def edit(category_group_id, id)
174
+ authorize_user!(:edit_category)
135
175
 
136
176
  set_breadcrumbs(
137
177
  CategoryGroups.a(
138
- lang('category_groups.titles.index'), :index
178
+ lang('category_groups.titles.index'),
179
+ :index
139
180
  ),
140
181
  Categories.a(
141
- lang('categories.titles.index'), :index, category_group_id
182
+ lang('categories.titles.index'),
183
+ :index,
184
+ category_group_id
142
185
  ),
143
- lang('categories.titles.new')
186
+ lang('categories.titles.edit')
144
187
  )
145
188
 
146
189
  validate_category_group(category_group_id)
147
190
 
148
191
  @category_group_id = category_group_id
149
- @category = Category.new
192
+
193
+ if flash[:form_data]
194
+ @category = flash[:form_data]
195
+ else
196
+ @category = validate_category(id, category_group_id)
197
+ end
150
198
 
151
199
  render_view(:form)
152
200
  end
@@ -155,16 +203,15 @@ module Categories
155
203
  # Save the changes made to an existing category or create a new one based
156
204
  # on the current POST data.
157
205
  #
158
- # This method requires the following permissions:
159
- #
160
- # * create
161
- # * update
162
- #
163
- # @author Yorick Peterse
164
- # @since 0.1
206
+ # @since 0.1
207
+ # @permission edit_category (when editing a category)
208
+ # @permission new_category (when creating a category)
209
+ # @event before_edit_category
210
+ # @event after_edit_category
211
+ # @event before_new_category
212
+ # @event after_new_category
165
213
  #
166
214
  def save
167
- # Fetch all the required fields
168
215
  post = request.subset(
169
216
  :id,
170
217
  :parent_id,
@@ -174,36 +221,40 @@ module Categories
174
221
  :category_group_id
175
222
  )
176
223
 
177
- # Validate the category group
178
224
  validate_category_group(post['category_group_id'])
179
225
 
180
226
  # Retrieve the category and set the notifications based on if the ID has
181
227
  # been specified or not.
182
228
  if post['id'] and !post['id'].empty?
183
- require_permissions(:update)
229
+ authorize_user!(:edit_category)
184
230
 
185
- category = validate_category(post['id'], post['category_group_id'])
186
- save_action = :save
231
+ category = validate_category(post['id'], post['category_group_id'])
232
+ save_action = :save
233
+ before_event = :before_edit_category
234
+ after_event = :after_edit_category
187
235
  else
188
- require_permissions(:create)
236
+ authorize_user!(:new_category)
189
237
 
190
- category = Category.new
191
- save_action = :new
238
+ category = ::Categories::Model::Category.new
239
+ save_action = :new
240
+ before_event = :before_new_category
241
+ after_event = :after_new_category
192
242
  end
193
243
 
194
- post.delete('slug') if post['slug'].empty?
195
244
  post.delete('id')
196
245
 
197
- # Set the messages to display
198
- flash_success = lang("categories.success.#{save_action}")
199
- flash_error = lang("categories.errors.#{save_action}")
246
+ success = lang("categories.success.#{save_action}")
247
+ error = lang("categories.errors.#{save_action}")
200
248
 
201
249
  # Try to update the category
202
250
  begin
203
- category.update(post)
204
- message(:success, flash_success)
205
- rescue
206
- message(:error, flash_error)
251
+ post.each { |k, v| category.send("#{k}=", v) }
252
+ Zen::Event.call(before_event, category)
253
+
254
+ category.save
255
+ rescue => e
256
+ Ramaze::Log.error(e.inspect)
257
+ message(:error, error)
207
258
 
208
259
  flash[:form_errors] = category.errors
209
260
  flash[:form_data] = category
@@ -211,52 +262,56 @@ module Categories
211
262
  redirect_referrer
212
263
  end
213
264
 
214
- if category.id
215
- redirect(Categories.r(:edit, post['category_group_id'], category.id))
216
- else
217
- redirect(Categories.r(:new, post['category_group_id']))
218
- end
265
+ Zen::Event.call(after_event, category)
266
+
267
+ message(:success, success)
268
+ redirect(Categories.r(:edit, category.category_group_id, category.id))
219
269
  end
220
270
 
221
271
  ##
222
- # Delete all specified category groups and their categories. In
223
- # order to delete a number of groups an array of fields, named
224
- # "category_group_ids" is required. This array will contain all the
225
- # primary values of each group that has to be deleted.
226
- #
227
- # This method requires the following permissions:
272
+ # Delete all specified category groups and their categories. In order to
273
+ # delete a number of groups an array of fields, named "category_group_ids"
274
+ # is required. This array will contain all the primary values of each
275
+ # group that has to be deleted.
228
276
  #
229
- # * delete
230
- #
231
- # @author Yorick Peterse
232
- # @since 0.1
277
+ # @since 0.1
278
+ # @permission delete_category
279
+ # @event before_delete_category
280
+ # @event after_delete_category
233
281
  #
234
282
  def delete
235
- require_permissions(:delete)
283
+ authorize_user!(:delete_category)
236
284
 
237
- post = request.subset(:category_ids, :category_group_id)
285
+ post = request.subset(:category_ids)
238
286
 
239
287
  # Obviously we'll require some IDs
240
- if !request.params['category_ids'] \
241
- or request.params['category_ids'].empty?
288
+ if post['category_ids'].nil? or post['category_ids'].empty?
242
289
  message(:error, lang('categories.errors.no_delete'))
243
- redirect(Categories.r(:index, post['category_group_id']))
290
+ redirect_referrer
244
291
  end
245
292
 
246
- # Delete each section
293
+ # Remove each category and call the event.
247
294
  request.params['category_ids'].each do |id|
295
+ category = ::Categories::Model::Category[id]
296
+
297
+ next if category.nil?
298
+
299
+ Zen::Event.call(:before_delete_category, category)
300
+
248
301
  begin
249
- Category[id].destroy
250
- message(:success, lang('categories.success.delete'))
302
+ category.destroy
251
303
  rescue => e
252
304
  Ramaze::Log.error(e.inspect)
253
305
  message(:error, lang('categories.errors.delete') % id)
254
306
 
255
307
  redirect_referrer
256
308
  end
309
+
310
+ Zen::Event.call(:after_delete_category, category)
257
311
  end
258
312
 
259
- redirect(Categories.r(:index, post['category_group_id']))
313
+ message(:success, lang('categories.success.delete'))
314
+ redirect_referrer
260
315
  end
261
316
  end # Categories
262
317
  end # Controller