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,113 +1,168 @@
1
- #:nodoc:
1
+ ##
2
+ # Package for managing users, user groups and the permissions of users and user
3
+ # groups.
4
+ #
5
+ # ## Controllers
6
+ #
7
+ # * {Users::Controller::Users}
8
+ # * {Users::Controller::UserGroups}
9
+ #
10
+ # ## Helpers
11
+ #
12
+ # * {Ramaze::Helper::Users}
13
+ # * {Ramaze::Helper::ACL}
14
+ #
15
+ # ## Models
16
+ #
17
+ # * {Users::Model::User}
18
+ # * {Users::Model::UserGroup}
19
+ # * {Users::Model::Permission}
20
+ #
2
21
  module Users
3
22
  #:nodoc:
4
23
  module Controller
5
24
  ##
6
- # Controller for managing users. Users in this case are people that have
7
- # access to the backend. However, users might be able to access the backend
8
- # but that doesn't mean they can actuall use it. The permission system will
9
- # block anybody that don't have the correct permissions for each module. In
10
- # case of a module like a forum it's probably better to add some additional
11
- # checks to ensure people can't mess around with your system.
25
+ # Zen makes it easy for users to manage their own account as well as other
26
+ # users depending on their permissions. In Zen there's no special type of
27
+ # user such as an administrator or a contributor, instead users have access
28
+ # to various parts of your websites based on their permissions and the
29
+ # groups they have been assigned to (see {Users::Controller::UserGroups
30
+ # Managing User Groups} for more information).
31
+ #
32
+ # Users can be managed in the admin interface by going to ``/admin/users``.
33
+ # Just like other parts of the application you may not be able to manage
34
+ # users (or only partially) depending on your permissions.
35
+ #
36
+ # When navigating to the user overview (assuming you have the correct
37
+ # permissions) you should see a page that looks like the one shown in the
38
+ # image below.
39
+ #
40
+ # ![Users](../../_static/users/overview.png)
41
+ #
42
+ # This overview allows you to edit users (by clicking on their Email
43
+ # addresses), create new ones or delete existing users. When editing or
44
+ # creating a user you'll be presented a form as shown in the images below.
45
+ #
46
+ # ![Edit User](../../_static/users/edit_user.png)
47
+ # ![Edit Permissions](../../_static/users/edit_user_permissions.png)
48
+ #
49
+ # In this form the following fields can be filled:
50
+ #
51
+ # * **Name** (required): the full name of the user.
52
+ # * **Email** (required): the Email address of the user, used for logging
53
+ # in.
54
+ # * **Website**: the website of the user (if he/she has any).
55
+ # * **Password** (required for new users): the raw password the user will
56
+ # use in order to log in.
57
+ # * **Confirm password** (required for new users): an extra field to confirm
58
+ # that the specified password is the right one. This field should match
59
+ # the password specified in the "Password" field.
60
+ # * **Status**: field that indicates if a user is active or not. If the
61
+ # status is set to "Closed" the user will not be able to log in.
62
+ # * **User Groups**: all the user groups the user belongs to.
63
+ # * **Language**: the language to use for the admin interface.
64
+ # * **Frontend language**: the language to use for the frontend of the
65
+ # application.
66
+ # * **Date format**: the date format to use in the admin interface.
67
+ #
68
+ # Besides these fields there's also the tab "Permissions". This tab contains
69
+ # a collection of all installed packages and their permissions. This makes
70
+ # it possible to fine tune the access of a certain user.
71
+ #
72
+ # ## Used Permissions
73
+ #
74
+ # This controller uses the following permissions:
75
+ #
76
+ # * show_user
77
+ # * new_user
78
+ # * edit_user
79
+ # * delete_user
80
+ #
81
+ # ## Events
82
+ #
83
+ # Events in this controller receive an instance of {Users::Model::User}, the
84
+ # ``after_delete_user`` event receives an instance that has already been
85
+ # destroyed. Keep in mind that changing the Email address or password of a
86
+ # user will cause their session to no longer be valid, requiring them to log
87
+ # in again.
88
+ #
89
+ # @example Sending an Email for a new user
90
+ # Zen::Event.listen(:after_new_user) do |user|
91
+ # Mail.deliver do
92
+ # from 'user@domain.tld'
93
+ # to user.email
94
+ # subject 'Your new account'
95
+ # body "Dear #{user.name}, your account has been created."
96
+ # end
97
+ # end
12
98
  #
13
- # @author Yorick Peterse
14
99
  # @since 0.1
100
+ # @map /admin/users
101
+ # @event before_new_user
102
+ # @event after_new_user
103
+ # @event before_edit_user
104
+ # @event after_edit_user
105
+ # @event before_delete_user
106
+ # @event after_delete_user
107
+ # @event user_login
108
+ # @event before_register_user
109
+ # @event after_register_user
15
110
  #
16
111
  class Users < Zen::Controller::AdminController
17
- include ::Users::Model
112
+ helper :users, :layout
113
+ map '/admin/users'
114
+ title 'users.titles.%s'
115
+ allow [:login, :logout, :register]
18
116
 
19
- helper :users
20
- map '/admin/users'
117
+ csrf_protection :save, :delete
21
118
 
22
- before_all do
23
- csrf_protection(:save, :delete) do
24
- respond(lang('zen_general.errors.csrf'), 403)
25
- end
26
- end
119
+ serve :javascript, ['/admin/js/users/permissions'], :minify => false
120
+ serve :css, ['/admin/css/users/permissions'], :minify => false
27
121
 
28
- # Every action should use the admin layout except the 'login' method,
29
- # that one will use a trimmed down version of the admin layout.
30
- layout do |path, format|
31
- if path == 'login'
32
- :login
33
- else
34
- :admin
35
- end
36
- end
122
+ load_asset_group :tabs
37
123
 
38
- ##
39
- # Load our language packs, set the form URLs and define our page title.
40
- #
41
- # This method loads the following language files:
42
- #
43
- # * users
44
- #
45
- # @author Yorick Peterse
46
- # @since 0.1
47
- #
48
- def initialize
49
- super
50
-
51
- Zen::Language.load('users')
52
-
53
- # Set the page title
54
- if !action.method.nil?
55
- method = action.method.to_sym
56
- @page_title = lang("users.titles.#{method}") rescue nil
57
- end
58
-
59
- @status_hash = {
60
- 'open' => lang('users.special.status_hash.open'),
61
- 'closed' => lang('users.special.status_hash.closed')
62
- }
63
- end
124
+ set_layout :admin => [:index, :edit, :new],
125
+ :login => [:login, :register]
64
126
 
65
127
  ##
66
128
  # Show an overview of all users and allow the current user
67
129
  # to manage these users.
68
130
  #
69
- # This method requires the following permissions:
70
- #
71
- # * read
72
- #
73
- # @author Yorick Peterse
74
- # @since 0.1
131
+ # @since 0.1
132
+ # @permission show_user
75
133
  #
76
134
  def index
77
- require_permissions(:read)
135
+ authorize_user!(:show_user)
78
136
 
79
137
  set_breadcrumbs(lang('users.titles.index'))
80
138
 
81
- @users = paginate(User)
139
+ @users = search do |query|
140
+ ::Users::Model::User.search(query).order(:id.asc)
141
+ end
142
+
143
+ @users ||= ::Users::Model::User.order(:id.asc)
144
+ @users = @users.eager(:user_status)
145
+ @users = paginate(@users)
82
146
  end
83
147
 
84
148
  ##
85
149
  # Edit an existing user based on the ID.
86
150
  #
87
- # This method requires the following permissions:
88
- #
89
- # * read
90
- # * update
91
- #
92
- # @author Yorick Peterse
93
- # @param [Integer] id The ID of the user to edit.
94
- # @since 0.1
151
+ # @param [Fixnum] id The ID of the user to edit.
152
+ # @since 0.1
153
+ # @permission edit_user
95
154
  #
96
155
  def edit(id)
97
- require_permissions(:read, :update)
156
+ authorize_user!(:edit_user)
98
157
 
99
158
  set_breadcrumbs(
100
159
  Users.a(lang('users.titles.index'), :index),
101
160
  lang('users.titles.edit')
102
161
  )
103
162
 
104
- if flash[:form_data]
105
- @user = flash[:form_data]
106
- else
107
- @user = validate_user(id)
108
- end
109
-
110
- @user_group_pks = UserGroup.pk_hash(:name)
163
+ @user = flash[:form_data] || validate_user(id)
164
+ @user_group_pks = ::Users::Model::UserGroup.pk_hash(:name).invert
165
+ @permissions = @user.permissions.map { |p| p.permission.to_sym }
111
166
 
112
167
  render_view(:form)
113
168
  end
@@ -115,24 +170,19 @@ module Users
115
170
  ##
116
171
  # Create a new user.
117
172
  #
118
- # This method requires the following permissions:
119
- #
120
- # * read
121
- # * create
122
- #
123
- # @author Yorick Peterse
124
- # @since 0.1
173
+ # @since 0.1
174
+ # @permission new_user
125
175
  #
126
176
  def new
127
- require_permissions(:read, :create)
177
+ authorize_user!(:new_user)
128
178
 
129
179
  set_breadcrumbs(
130
180
  Users.a(lang('users.titles.index'), :index),
131
181
  lang('users.titles.new')
132
182
  )
133
183
 
134
- @user = User.new
135
- @user_group_pks = UserGroup.pk_hash(:name)
184
+ @user = flash[:form_data] || ::Users::Model::User.new
185
+ @user_group_pks = ::Users::Model::UserGroup.pk_hash(:name).invert
136
186
 
137
187
  render_view(:form)
138
188
  end
@@ -140,29 +190,29 @@ module Users
140
190
  ##
141
191
  # Show a form that allows a user to log in.
142
192
  #
143
- # @author Yorick Peterse
144
193
  # @since 0.1
194
+ # @event user_login
145
195
  #
146
196
  def login
147
197
  if request.post?
148
198
  # Let's see if we can authenticate
149
199
  if user_login(request.subset(:email, :password))
150
- # Update the last time the user logged in
151
- User[:email => request.params['email']] \
152
- .update(:last_login => Time.new)
200
+ user.update(:last_login => Time.new)
153
201
 
202
+ Zen::Event.call(:user_login, user)
154
203
  message(:success, lang('users.success.login'))
155
204
  redirect(::Sections::Controller::Sections.r(:index))
156
205
  else
157
206
  message(:error, lang('users.errors.login'))
158
207
  end
208
+
209
+ redirect(r(:login))
159
210
  end
160
211
  end
161
212
 
162
213
  ##
163
214
  # Logout and destroy the user's session.
164
215
  #
165
- # @author Yorick Peterse
166
216
  # @since 0.1
167
217
  #
168
218
  def logout
@@ -170,19 +220,72 @@ module Users
170
220
  session.clear
171
221
 
172
222
  message(:success, lang('users.success.logout'))
173
- redirect(Users.r(:login))
223
+ redirect(r(:login))
174
224
  end
175
225
 
176
226
  ##
177
- # Saves or creates a new user based on the POST data and a field named 'id'.
227
+ # Allows non registered users to create an account as long as the setting
228
+ # "allow_registration" allows this. In case of errors this method will
229
+ # redirect to itself, this works around those rather annoying "Do you want
230
+ # to resubmit this form?" messages most browsers give you.
178
231
  #
179
- # This method requires the following permissions:
232
+ # The events ``before_register_user`` and ``after_register_user`` will
233
+ # receive an instance of {Users::Model::User} as well as the raw password
234
+ # specified by the user.
180
235
  #
181
- # * create
182
- # * update
236
+ # @since 0.3
237
+ # @event before_register_user
238
+ # @event after_register_user
183
239
  #
184
- # @author Yorick Peterse
185
- # @since 0.1
240
+ def register
241
+ redirect(::Sections::Controller::Sections.r(:index)) if logged_in?
242
+ redirect(r(:login)) unless get_setting(:allow_registration).true?
243
+
244
+ if request.post?
245
+ post = request.subset(:name, :email, :password)
246
+ user = Model::User.new(post)
247
+
248
+ # Check if the passwords match.
249
+ if post['password'] != request.params['confirm_password']
250
+ flash[:form_data] = user
251
+
252
+ message(:error, lang('users.errors.no_password_match'))
253
+ redirect(r(:register))
254
+ end
255
+
256
+ Zen::Event.call(:before_register_user, user, post['password'])
257
+
258
+ begin
259
+ user.save
260
+ rescue => e
261
+ Ramaze::Log.error(e.inspect)
262
+ message(:error, lang('users.errors.register'))
263
+
264
+ flash[:form_errors] = user.errors
265
+ flash[:form_data] = user
266
+
267
+ redirect(r(:register))
268
+ end
269
+
270
+ Zen::Event.call(:after_register_user, user, post['password'])
271
+ message(:success, lang('users.success.register'))
272
+
273
+ redirect(r(:login))
274
+ end
275
+
276
+ @user = flash[:form_data] || Model::User.new
277
+ end
278
+
279
+ ##
280
+ # Saves or creates a new user based on the POST data.
281
+ #
282
+ # @since 0.1
283
+ # @permission new_user (when creating a new user)
284
+ # @permission edit_user (when editing a user)
285
+ # @event before_new_user
286
+ # @event after_new_user
287
+ # @event before_edit_user
288
+ # @event after_edit_user
186
289
  #
187
290
  def save
188
291
  post = request.subset(
@@ -190,9 +293,9 @@ module Users
190
293
  :email,
191
294
  :name,
192
295
  :website,
193
- :new_password,
296
+ :password,
194
297
  :confirm_password,
195
- :status,
298
+ :user_status_id,
196
299
  :language,
197
300
  :frontend_language,
198
301
  :date_format,
@@ -200,43 +303,42 @@ module Users
200
303
  )
201
304
 
202
305
  if post['id'] and !post['id'].empty?
203
- require_permissions(:update)
306
+ authorize_user!(:edit_user)
204
307
 
205
- user = validate_user(post['id'])
206
- save_action = :save
308
+ user = validate_user(post['id'])
309
+ save_action = :save
310
+ before_event = :before_edit_user
311
+ after_event = :after_edit_user
207
312
  else
208
- require_permissions(:create)
313
+ authorize_user!(:new_user)
209
314
 
210
- user = User.new
211
- save_action = :new
315
+ user = ::Users::Model::User.new
316
+ save_action = :new
317
+ before_event = :before_new_user
318
+ after_event = :after_new_user
212
319
  end
213
320
 
214
- if !post['new_password'].nil? and !post['new_password'].empty?
215
- if post['new_password'] != post['confirm_password']
216
- message(:error, lang('users.errors.no_password_match'))
217
- redirect_referrer
218
- else
219
- post['password'] = post['new_password']
220
-
221
- post.delete('new_password')
222
- post.delete('confirm_password')
223
- end
321
+ if post['password'] != post['confirm_password']
322
+ message(:error, lang('users.errors.no_password_match'))
323
+ redirect_referrer
224
324
  end
225
325
 
326
+ post.delete('confirm_password')
226
327
  post.delete('id')
227
328
 
228
329
  post['user_group_pks'] ||= []
229
- post['user_group_pks'] = post['user_group_pks'].map { |value| value.to_i }
230
-
231
- flash_success = lang("users.success.#{save_action}")
232
- flash_error = lang("users.errors.#{save_action}")
330
+ success = lang("users.success.#{save_action}")
331
+ error = lang("users.errors.#{save_action}")
233
332
 
234
333
  begin
235
- user.update(post)
236
- message(:success, flash_success)
334
+ post.each { |k, v| user.send("#{k}=", v) }
335
+ Zen::Event.call(before_event, user)
336
+
337
+ user.save
338
+ user.user_group_pks = post['user_group_pks'] if save_action == :new
237
339
  rescue => e
238
340
  Ramaze::Log.error(e.inspect)
239
- message(:error, flash_error)
341
+ message(:error, error)
240
342
 
241
343
  flash[:form_data] = user
242
344
  flash[:form_errors] = user.errors
@@ -244,25 +346,32 @@ module Users
244
346
  redirect_referrer
245
347
  end
246
348
 
247
- if user.id
248
- redirect(Users.r(:edit, user.id))
249
- else
250
- redirect_referrer
349
+ # Add or update the permissions if the user is allowed to do so.
350
+ if user_authorized?(:edit_permission)
351
+ update_permissions(
352
+ :user_id,
353
+ user.id,
354
+ request.params['permissions'] || [],
355
+ user.permissions.map { |p| p.permission }
356
+ )
251
357
  end
358
+
359
+ Zen::Event.call(after_event, user)
360
+
361
+ message(:success, success)
362
+ redirect(Users.r(:edit, user.id))
252
363
  end
253
364
 
254
365
  ##
255
366
  # Delete all specified users.
256
367
  #
257
- # This method requires the following permissions:
258
- #
259
- # * delete
260
- #
261
- # @author Yorick Peterse
262
- # @since 0.1
368
+ # @since 0.1
369
+ # @permission delete_user
370
+ # @event before_delete_user
371
+ # @event after_delete_user
263
372
  #
264
373
  def delete
265
- require_permissions(:delete)
374
+ authorize_user!(:delete_user)
266
375
 
267
376
  if !request.params['user_ids'] or request.params['user_ids'].empty?
268
377
  message(:error, lang('users.errors.no_delete'))
@@ -270,17 +379,25 @@ module Users
270
379
  end
271
380
 
272
381
  request.params['user_ids'].each do |id|
382
+ user = ::Users::Model::User[id]
383
+
384
+ next if user.nil?
385
+ Zen::Event.call(:before_delete_user, user)
386
+
273
387
  begin
274
- User[id].destroy
275
- message(:success, lang('users.success.delete'))
388
+ user.user_group_pks = []
389
+ user.destroy
276
390
  rescue => e
277
391
  Ramaze::Log.error(e.inspect)
278
- message(:error,lang('users.errors.delete') % id)
392
+ message(:error, lang('users.errors.delete') % id)
279
393
 
280
394
  redirect_referrer
281
395
  end
396
+
397
+ Zen::Event.call(:after_delete_user, user)
282
398
  end
283
399
 
400
+ message(:success, lang('users.success.delete'))
284
401
  redirect_referrer
285
402
  end
286
403
  end # Users