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
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'nl'
5
+ trans.name = 'user_groups'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Gebruikers groepen'
9
+ t['titles.edit'] = 'Gebruikers groep aanpassen'
10
+ t['titles.new'] = 'Gebruikers groep aanmaken'
11
+
12
+ t['labels.id'] = '#'
13
+ t['labels.name'] = 'Naam'
14
+ t['labels.slug'] = 'Slug'
15
+ t['labels.description'] = 'Beschrijving'
16
+ t['labels.super_group'] = 'Beheerders groep'
17
+
18
+ t['messages.no_groups'] = 'Er zijn geen gebruikers groepen gevonden.'
19
+
20
+ t['success.new'] = 'De gebruikers groep is aangemaakt.'
21
+ t['success.save'] = 'De gebruikers groep is aangepast.'
22
+ t['success.delete'] = 'De geselecteerde groepen zijn verwijderd.'
23
+
24
+ t['errors.new'] = 'De gebruikers groep kon niet worden aangemaakt.'
25
+ t['errors.save'] = 'De gebruikers groep kon niet worden aangepast.'
26
+ t['errors.delete'] = 'De gebruikers groep met ID #%s kon niet ' \
27
+ 'worden verwijderd.'
28
+ t['errors.no_delete'] = 'U moet ten minste 1 groep specificeren ' \
29
+ 'om te verwijderen.'
30
+ t['errors.invalid_group'] = 'De opgegeven gebruikers groep is ongeldig.'
31
+
32
+ t['buttons.new'] = 'Groep toevoegen'
33
+ t['buttons.delete'] = 'Geselecteerde groepen verwijderen'
34
+ t['buttons.save'] = 'Groep opslaan'
35
+
36
+ t['permissions.show'] = 'Groep weergeven'
37
+ t['permissions.edit'] = 'Groep aanpassen'
38
+ t['permissions.new'] = 'Groep aanmaken'
39
+ t['permissions.delete'] = 'Groep verwijderen'
40
+ end
41
+ end
@@ -0,0 +1,74 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'nl'
5
+ trans.name = 'users'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Gebruikers'
9
+ t['titles.edit'] = 'Gebruiker aanpassen'
10
+ t['titles.new'] = 'Gebruiker aanmaken'
11
+ t['titles.login'] = 'Inloggen'
12
+ t['titles.register'] = 'Registreren'
13
+
14
+ t['labels.id'] = '#'
15
+ t['labels.email'] = 'Email'
16
+ t['labels.name'] = 'Naam'
17
+ t['labels.website'] = 'Website'
18
+ t['labels.password'] = 'Wachtwoord'
19
+ t['labels.confirm_password'] = 'Bevestig wachtwoord'
20
+ t['labels.status'] = 'Status'
21
+ t['labels.created_at'] = 'Aanmaak datum'
22
+ t['labels.updated_at'] = 'Aanpas datum'
23
+ t['labels.last_login'] = 'Login datum'
24
+ t['labels.user_groups'] = 'Gebruikers groepen'
25
+ t['labels.language'] = 'Taal'
26
+ t['labels.frontend_language'] = 'Bezoekers taal'
27
+ t['labels.date_format'] = 'Datum formaat'
28
+ t['labels.allow_registration'] = 'Registratie toegestaan'
29
+
30
+ t['descriptions.date_format'] = 'Het formaat van de datums in het ' \
31
+ 'admin gedeelte.'
32
+ t['descriptions.allow_registration'] = 'Sta niet geregistreerde gebruikers ' \
33
+ 'toe om een account te registreren.'
34
+
35
+ t['special.status_hash.active'] = 'Actief'
36
+ t['special.status_hash.closed'] = 'Gesloten'
37
+
38
+ t['messages.no_users'] = 'Er zijn geen gebruikers gevonden.'
39
+
40
+ t['success.new'] = 'De gebruiker is aangemaakt.'
41
+ t['success.save'] = 'De gebruiker is aangepast.'
42
+ t['success.delete'] = 'Alle gespecificeerde gebruikers zijn verwijderd.'
43
+ t['success.login'] = 'U bent nu ingelogd.'
44
+ t['success.logout'] = 'U bent nu uitgelogd.'
45
+ t['success.success'] = 'De account is geregistreerd.'
46
+
47
+ t['errors.new'] = 'De gebruiker kon niet worden aangemaakt.'
48
+ t['errors.save'] = 'De gebruiker kon niet worden aangepast.'
49
+ t['errors.delete'] = 'De gebruiker met ID #%s kon niet worden verwijderd.'
50
+ t['errors.no_delete'] = 'U moet ten minste 1 gebruiker specificeren ' \
51
+ 'om te verwijderen.'
52
+ t['errors.no_password_match'] = 'De opgegeven wachtwoorden komen niet overeen.'
53
+ t['errors.login'] = 'U kon niet worden ingelogd.'
54
+ t['errors.logout'] = 'U kon niet worden uitgelogd, misschien bent ' \
55
+ 'u al uitgelogd.'
56
+ t['errors.invalid_user'] = 'De opgegeven gebruiker is ongeldig.'
57
+ t['errors.register'] = 'De account kon niet worden geregistreerd.'
58
+
59
+ t['buttons.login'] = 'Inloggen'
60
+ t['buttons.new'] = 'Gebruiker toevoegen'
61
+ t['buttons.save'] = 'Gebruiker opslaan'
62
+ t['buttons.delete'] = 'Geselecteerde gebruikers verwijderen'
63
+ t['buttons.register'] = 'Registreer'
64
+
65
+ t['description'] = 'Beheer gebruikers, gebruikers groepen en rechten.'
66
+
67
+ t['permissions.show'] = 'Rechten weergeven'
68
+ t['permissions.edit'] = 'Rechten aanpassen'
69
+ t['permissions.new'] = 'Rechten aanmaken'
70
+ t['permissions.delete'] = 'Rechten verwijderen'
71
+
72
+ t['tabs.settings'] = 'Gebruikers instellingen'
73
+ end
74
+ end
@@ -0,0 +1,28 @@
1
+ module Users
2
+ module Model
3
+ ##
4
+ # Model for managing permissions.
5
+ #
6
+ # @since 0.3
7
+ #
8
+ class Permission < Sequel::Model
9
+ many_to_one :user , :class => 'Users::Model::User'
10
+ many_to_one :user_group, :class => 'Users::Model::UserGroup'
11
+
12
+ ##
13
+ # Validates the model's attributes before saving it.
14
+ #
15
+ # @since 0.3
16
+ #
17
+ def validate
18
+ validates_presence(:permission)
19
+
20
+ if self.user_id.nil?
21
+ validates_presence(:user_group_id)
22
+ else
23
+ validates_presence(:user_id)
24
+ end
25
+ end
26
+ end # Permission
27
+ end # Model
28
+ end # Users
@@ -1,75 +1,72 @@
1
- #:nodoc:
2
1
  module Users
3
2
  #:nodoc:
4
3
  module Model
5
4
  ##
6
- # Model that represents the very important user. This model
7
- # can be used for both CRUD actions as well as authenticating a user.
8
- # Passwords are encrypted using Bcrypt using the Ruby Bcrypt gem.
5
+ # Model that represents a single user.
9
6
  #
10
- # This model has the following relations:
11
- #
12
- # * user groups (many to many), eager loads all access rules
13
- # * access rules (one to many)
14
- #
15
- # The following plugins are used by this model:
16
- #
17
- # * timestamps
18
- #
19
- # @author Yorick Peterse
20
7
  # @since 0.1
21
8
  #
22
9
  class User < Sequel::Model
23
- class << self
24
- include ::Innate::Trinity
25
- end
10
+ # Regex to do some basic Email validation. Emails such as foo@bar,
11
+ # foo@bar.com and foo@bar.a.b are all valid but foo bar@bar.com isn't.
12
+ EMAIL_REGEX = '^[^@]\S+@\S+(\.[a-z]+)*[^.]$'
13
+
14
+ include Zen::Model::Helper
15
+
16
+ many_to_many :user_groups, :class => 'Users::Model::UserGroup',
17
+ :eager => [:permissions]
18
+
19
+ many_to_one :user_status, :class => 'Users::Model::UserStatus'
20
+ one_to_many :permissions, :class => 'Users::Model::Permission'
26
21
 
27
22
  plugin :timestamps, :create => :created_at, :update => :updated_at
28
-
29
- many_to_many(
30
- :user_groups,
31
- :class => "Users::Model::UserGroup",
32
- :eager => [:access_rules]
33
- )
34
-
35
- one_to_many(:access_rules, :class => "Users::Model::AccessRule")
36
-
23
+ plugin :association_dependencies, :permissions => :delete
24
+
37
25
  ##
38
- # Try to authenticate the user based on the specified credentials.
39
- # If the user credentials were incorrect false will be returned,
40
- # true otherwise.
26
+ # Searches for a set of users that match the given query.
41
27
  #
42
- # Note that this method will NOT perform any sanitizing, that should be
43
- # handled by the controller instead.
28
+ # @since 16-10-2011
29
+ # @param [String] query The search query.
30
+ # @return [Mixed]
31
+ #
32
+ def self.search(query)
33
+ return filter(
34
+ search_column(:name, query) | search_column(:email, query)
35
+ )
36
+ end
37
+
38
+ ##
39
+ # Try to authenticate the user based on the specified credentials..
44
40
  #
45
- # @author Yorick Peterse
46
41
  # @since 0.1
47
42
  # @param [Hash] creds The specified credentials
48
- # @return [Object/Boolean] new instance of the given user.
43
+ # @return [Users::Model::User|FalseClass]
49
44
  #
50
45
  def self.authenticate(creds)
51
46
  email = creds['email']
52
47
  password = creds['password']
53
48
 
54
- return false if email.nil? or password.nil?
49
+ if email.nil? or password.nil?
50
+ return false
51
+ end
55
52
 
56
53
  user = self[:email => email]
57
54
 
58
- if !user.nil? and user.password == password and user.status == 'open'
55
+ if !user.nil? and user.password == password \
56
+ and user.user_status.allow_login == true
59
57
  # Overwrite all the global settings with the user specific ones
60
58
  [:language, :frontend_language, :date_format].each do |setting|
61
- value = Zen::Plugin.plugin(:settings, :get, setting).value
59
+ value = get_setting(setting).value
62
60
 
63
61
  if user.respond_to?(setting)
64
62
  got = user.send(setting)
65
-
63
+
66
64
  if got.nil? or got.empty?
67
65
  user.send("#{setting}=", value)
68
66
  end
69
67
  end
70
68
  end
71
69
 
72
- action.node.session[:user] = user
73
70
  return user
74
71
  else
75
72
  return false
@@ -77,48 +74,90 @@ module Users
77
74
  end
78
75
 
79
76
  ##
80
- # Generates a new hash based on the specified password. Each
81
- # password is generated with a cost of 15, this makes the login
82
- # process slower but also more secure.
77
+ # Generates a new BCrypt hash and saves it in the model. The hash is
78
+ # *only* generated when the password isn't nil or empty.
83
79
  #
84
- # @author Yorick Peterse
85
80
  # @since 0.1
86
- # @param [String] raw_password The raw password
87
- # @return [Void]
81
+ # @param [String] password The raw password
88
82
  #
89
- def password= raw_password
90
- pwd = BCrypt::Password.create(raw_password, :cost => 10)
91
- super(pwd)
83
+ def password=(password)
84
+ return if password.nil? or password.empty?
85
+
86
+ password = BCrypt::Password.create(password, :cost => 10)
87
+
88
+ super(password)
92
89
  end
93
-
90
+
94
91
  ##
95
- # Returns the current password
92
+ # Returns the current password.
96
93
  #
97
- # @author Yorick Peterse
98
94
  # @since 0.1
99
- # @return [String]
95
+ # @return [BCrypt::Password|NilClass]
100
96
  #
101
97
  def password
102
- BCrypt::Password.new(super)
98
+ val = super
99
+
100
+ return BCrypt::Password.new(val) unless val.nil?
103
101
  end
104
-
102
+
103
+ ##
104
+ # Hook run before creating or updating an object.
105
+ #
106
+ # @since 0.3
107
+ #
108
+ def before_save
109
+ if self.user_status_id.nil?
110
+ self.user_status_id = Users::Model::UserStatus[:name => 'closed'].id
111
+ end
112
+
113
+ super
114
+ end
115
+
105
116
  ##
106
117
  # Specifies all validation rules
107
118
  #
108
- # @author Yorick Peterse
109
119
  # @since 0.1
110
- # @todo Email validation using regular expressions is bad, a DNS call
111
- # would be much better.
112
120
  #
113
121
  def validate
114
- validates_presence [:email, :name]
115
- validates_presence :status unless new?
116
- validates_presence :password if new?
117
-
118
- validates_format(
119
- /[a-zA-Z0-9\.\_\%\+\-]+@[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}/, :email
122
+ validates_presence([:email, :name])
123
+ validates_unique(:email)
124
+ validates_format(Regexp.new(EMAIL_REGEX), :email)
125
+ validates_presence(:password) if new?
126
+ validates_max_length(255, [:email, :name, :website])
127
+ end
128
+
129
+ ##
130
+ # Gets the name of the user's status and returns it in the current
131
+ # language.
132
+ #
133
+ # @since 03-11-2011
134
+ # @return [String]
135
+ #
136
+ def user_status_name
137
+ return lang("users.special.status_hash.#{user_status.name}")
138
+ end
139
+
140
+ ##
141
+ # Activates the user.
142
+ #
143
+ # @since 03-11-2011
144
+ #
145
+ def activate!
146
+ update(
147
+ :user_status_id => Users::Model::UserStatus[:name => 'active'].id
148
+ )
149
+ end
150
+
151
+ ##
152
+ # Closes the user account.
153
+ #
154
+ # @since 03-11-2011
155
+ #
156
+ def close!
157
+ update(
158
+ :user_status_id => Users::Model::UserStatus[:name => 'closed'].id
120
159
  )
121
160
  end
122
- end
123
- end
124
- end
161
+ end # User
162
+ end # Model
163
+ end # Users
@@ -1,41 +1,45 @@
1
- #:nodoc:
2
1
  module Users
3
2
  #:nodoc:
4
3
  module Model
5
4
  ##
6
- # Model that represents a single user group. This model has the following
7
- # relations:
5
+ # Model that represents a single user group.
8
6
  #
9
- # * users (many to many)
10
- # * access rules (one to many)
11
- #
12
- # This model uses the following plugins:
13
- #
14
- # * sluggable
15
- #
16
- # @author Yorick Peterse
17
7
  # @since 0.1
18
8
  #
19
9
  class UserGroup < Sequel::Model
20
- many_to_many(:users , :class => "Users::Model::User")
21
- one_to_many(:access_rules, :class => "Users::Model::AccessRule")
22
-
23
- plugin :sluggable , :source => :name, :freeze => false
24
-
10
+ include Zen::Model::Helper
11
+
12
+ many_to_many :users , :class => 'Users::Model::User'
13
+ one_to_many :permissions, :class => 'Users::Model::Permission'
14
+
15
+ plugin :sluggable, :source => :name, :freeze => false
16
+ plugin :association_dependencies, :permissions => :delete,
17
+ :users => :nullify
18
+
19
+ ##
20
+ # Searches for a set of users that match the given query.
21
+ #
22
+ # @since 16-10-2011
23
+ # @param [String] query The search query.
24
+ # @return [Mixed]
25
+ #
26
+ def self.search(query)
27
+ return filter(search_column(:name, query))
28
+ end
29
+
25
30
  ##
26
31
  # Validation rules for each user group used when
27
32
  # creating or updating a group.
28
33
  #
29
- # @author Yorick Peterse
30
34
  # @since 0.1
31
35
  #
32
36
  def validate
33
- validates_presence [:name, :super_group]
34
- validates_presence :slug unless new?
35
- validates_unique :slug
37
+ validates_presence([:name, :super_group])
38
+ validates_max_length(255, :name)
39
+ validates_unique(:slug)
36
40
 
37
- validates_type TrueClass, :super_group
41
+ validates_type(TrueClass, :super_group)
38
42
  end
39
- end
40
- end
41
- end
43
+ end # UserGroup
44
+ end # Model
45
+ end # Users
@@ -0,0 +1,27 @@
1
+ module Users
2
+ module Model
3
+ ##
4
+ # Model used for user statuses such as "Open" and "Unconfirmed".
5
+ #
6
+ # @since 03-11-2011
7
+ #
8
+ class UserStatus < Sequel::Model
9
+ ##
10
+ # Returns a hash where the keys are the IDs of the various statuses and
11
+ # the values the translations.
12
+ #
13
+ # @since 03-11-2011
14
+ # @return [Hash]
15
+ #
16
+ def self.dropdown
17
+ hash = {}
18
+
19
+ select(:id, :name).each do |row|
20
+ hash[row.id] = lang("users.special.status_hash.#{row.name}")
21
+ end
22
+
23
+ return hash
24
+ end
25
+ end # UserStatus
26
+ end # Model
27
+ end # Users