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,102 @@
1
+ module Ramaze
2
+ module Helper
3
+ ##
4
+ # Whenever this module is included into a controller *all* its methods
5
+ # require the user to be logged in. If you want to make certain methods
6
+ # available to non logged in users you can do so using
7
+ # {Ramaze::Helper::Access::ClassMethods#allow}:
8
+ #
9
+ # class Users < Zen::Controller::AdminController
10
+ # allow [:login]
11
+ #
12
+ # def login
13
+ #
14
+ # end
15
+ # end
16
+ #
17
+ # @since 0.3
18
+ #
19
+ module Access
20
+ # Hash containing various controllers and methods that the user can access
21
+ # without logging in.
22
+ PUBLIC_ACTIONS = {}
23
+
24
+ ##
25
+ # Called whenever this module is included into a controller.
26
+ #
27
+ # @since 0.3
28
+ #
29
+ def self.included(into)
30
+ into.extend(ClassMethods)
31
+ end
32
+
33
+ ##
34
+ # Adds the stacked block to a given class.
35
+ #
36
+ # since 0.3
37
+ # @param [Class] klass The class to add the block to.
38
+ #
39
+ def self.add_block(klass)
40
+ klass.stacked_before_all(:validate_user_login) do
41
+ deny = true
42
+ klass = self.class
43
+ method = action.method
44
+
45
+ if method
46
+ method = method.to_sym
47
+
48
+ if PUBLIC_ACTIONS.key?(klass) \
49
+ and PUBLIC_ACTIONS[klass].include?(method)
50
+ deny = false
51
+ end
52
+
53
+ if deny == true and logged_in? == false
54
+ message(:error, lang('zen_general.errors.require_login'))
55
+ redirect(::Users::Controller::Users.r(:login))
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ ##
62
+ # Module that contains various class methods for the including controller.
63
+ #
64
+ # @since 0.3
65
+ #
66
+ module ClassMethods
67
+ ##
68
+ # Called whenever the class that included this module is extended.
69
+ #
70
+ # @since 07-11-2011
71
+ # @param [Class] by The class that extended the current class.
72
+ #
73
+ def inherited(by)
74
+ Ramaze::Helper::Access.add_block(by)
75
+ end
76
+
77
+ ##
78
+ # Allows users to access the given methods without having to log in.
79
+ #
80
+ # @example
81
+ # class Users < Zen::Controller::AdminController
82
+ # allow [:login]
83
+ #
84
+ # # The user can access this method without having to log in.
85
+ # def login
86
+ #
87
+ # end
88
+ # end
89
+ #
90
+ # @since 0.3
91
+ # @param [Array] actions An array of action names that users can access.
92
+ #
93
+ def allow(actions)
94
+ actions = actions.map { |a| a.to_sym }
95
+
96
+ Ramaze::Helper::Access::PUBLIC_ACTIONS[self] ||= []
97
+ Ramaze::Helper::Access::PUBLIC_ACTIONS[self] += actions
98
+ end
99
+ end # ClassMethods
100
+ end # Access
101
+ end # Helper
102
+ end # Ramaze
@@ -0,0 +1,113 @@
1
+ module Ramaze
2
+ module Helper
3
+ ##
4
+ # The ACL helper makes it easy for developers to allow or deny access to
5
+ # certain resources based on the permissions of a user. This helper is
6
+ # loaded by default and provides the following two methods:
7
+ #
8
+ # * user_authorized?()
9
+ # * authorize_user!()
10
+ #
11
+ # ## Example
12
+ #
13
+ # class Foo < Zen::Controller::AdminController
14
+ # map '/admin/foo'
15
+ #
16
+ # def index
17
+ # authorize_user!(:show_foo)
18
+ # end
19
+ # end
20
+ #
21
+ # @since 0.1
22
+ #
23
+ module ACL
24
+ ##
25
+ # Checks if a user has all the specified permissions and returns a
26
+ # TrueClass or FalseClass based on the results. Note that since Zen 0.3
27
+ # *all* permissions set will be required, you're no longer able to
28
+ # specify a list of which only 1 permission is required.
29
+ #
30
+ # This method is useful for hiding certain elements of a page based on a
31
+ # user's permissions. If you want to deny access to an entire method or
32
+ # class you should use ``Ramaze::Helper::ACL#authorize_user!()`` instead.
33
+ #
34
+ # @example
35
+ # if user_authorized?(:show_user)
36
+ # # ...
37
+ # end
38
+ #
39
+ # @since 0.1
40
+ # @param [Array] *required An array of permissions that are required.
41
+ # @return [TrueClass|FalseClass]
42
+ #
43
+ def user_authorized?(*required)
44
+ super_group, permissions = get_permissions
45
+
46
+ required.each do |req|
47
+ req = req.to_sym if req.respond_to?(:to_sym)
48
+
49
+ if !permissions.include?(req) and super_group == false
50
+ return false
51
+ end
52
+ end
53
+
54
+ return true
55
+ end
56
+
57
+ ##
58
+ # Method that checks if the user has the given permissions. If this isn't
59
+ # the case an error message is displayed and the user won't be able to
60
+ # access the page.
61
+ #
62
+ # @example
63
+ # authorize_user!(:edit_user)
64
+ #
65
+ # @since 0.2.8
66
+ # @param [Array] *args An array of permissions that are required.
67
+ #
68
+ def authorize_user!(*args)
69
+ if !user_authorized?(*args)
70
+ respond(lang('zen_general.errors.not_authorized'), 403)
71
+ end
72
+ end
73
+
74
+ private
75
+
76
+ ##
77
+ # Retrieves all the permissions of the currently logged in user and stores
78
+ # them in the session.
79
+ #
80
+ # @since 0.3
81
+ # @return [Array] An array where the first item is a TrueClass or
82
+ # FalseClass that indicates if the user is member of a super group or
83
+ # not. The second item is an array of all the user's permissions (each
84
+ # permission is a symbol).
85
+ #
86
+ def get_permissions
87
+ if !session[:super_group].nil? or !session[:permissions].nil?
88
+ return [session[:super_group], session[:permissions]]
89
+ end
90
+
91
+ super_group = false
92
+ perms = user.permissions.map { |p| p.permission.to_sym }
93
+ group_ids = []
94
+
95
+ user.user_groups.each do |group|
96
+ super_group = true if group.super_group == true
97
+ group_ids << group.id
98
+ end
99
+
100
+ ::Users::Model::Permission \
101
+ .filter(:user_group_id => group_ids) \
102
+ .each { |p| perms << p.permission.to_sym }
103
+
104
+ perms = perms.uniq
105
+
106
+ session[:super_group] = super_group
107
+ session[:permissions] = perms
108
+
109
+ return [session[:super_group], session[:permissions]]
110
+ end
111
+ end # ACL
112
+ end # Helper
113
+ end # Ramaze
@@ -1,39 +1,16 @@
1
- #:nodoc:
2
1
  module Ramaze
3
- #:nodoc:
4
2
  module Helper
5
3
  ##
6
4
  # Helper for the users package. Note that this helper is called "Users"
7
5
  # rather than "User" as otherwise Ramaze could get confused and load the
8
6
  # incorrect helper (as it already comes with a helper named "User").
9
7
  #
10
- # @author Yorick Peterse
11
8
  # @since 0.2.8
12
9
  #
13
10
  module Users
14
- ##
15
- # Checks if an access rule is valid and returns it if ithis is the case.
16
- #
17
- # @author Yorick Peterse
18
- # @since 0.2.8
19
- # @param [Fixnum] access_rule_id The ID of the access rule to validate.
20
- # @return [Users::Model::AccessRule]
21
- #
22
- def validate_access_rule(access_rule_id)
23
- rule = ::Users::Model::AccessRule[access_rule_id]
24
-
25
- if rule.nil?
26
- message(:error, lang('access_rules.errors.invalid_rule'))
27
- redirect(::Users::Controller::AccessRules.r(:index))
28
- else
29
- return rule
30
- end
31
- end
32
-
33
11
  ##
34
12
  # Checks if a user group is valid and returns it if this is the case.
35
13
  #
36
- # @author Yorick Peterse
37
14
  # @since 0.2.8
38
15
  # @param [Fixnum] user_group_id The ID of the user group to validate.
39
16
  # @return [Users::Model::UserGroup]
@@ -52,7 +29,6 @@ module Ramaze
52
29
  ##
53
30
  # Validates a user and returns the object if it's a valid user.
54
31
  #
55
- # @author Yorick Peterse
56
32
  # @since 0.2.8
57
33
  # @param [Fixnum] user_id The ID of the user to validate.
58
34
  # @return [Users::Model::User]
@@ -67,6 +43,47 @@ module Ramaze
67
43
  return user
68
44
  end
69
45
  end
46
+
47
+ ##
48
+ # Updates the permissions for a user or a user group.
49
+ #
50
+ # @example
51
+ # update_permissions(:user_id, 5, [:show_user], [:edit_user])
52
+ #
53
+ # @since 0.3
54
+ # @param [Symbol] column The name of the column to use in the permissions
55
+ # table. Can either be :user_id or :user_group_id.
56
+ # @param [Fixnum] id The primary value of the column attribute.
57
+ # @param [Array] new_perms An array of new permissions.
58
+ # @param [Array] old_perms An array of existing permissions.
59
+ #
60
+ def update_permissions(column, id, new_perms = [], old_perms = [])
61
+ add_perms = []
62
+ rm_perms = []
63
+
64
+ # Insert all the new permissions
65
+ new_perms.each do |perm|
66
+ if !old_perms.include?(perm)
67
+ add_perms << {column => id, :permission => perm}
68
+ end
69
+ end
70
+
71
+ # Remove permissions if they weren't checked
72
+ old_perms.each do |perm|
73
+ if !new_perms.include?(perm)
74
+ rm_perms << {column => id, :permission => perm}
75
+ end
76
+ end
77
+
78
+ ::Users::Model::Permission.insert_multiple(add_perms)
79
+ ::Users::Model::Permission.filter(
80
+ column => rm_perms.map { |p| p[column] },
81
+ :permission => rm_perms.map { |p| p[:permission] }
82
+ ).delete
83
+
84
+ session[:super_group] = nil
85
+ session[:permissions] = nil
86
+ end
70
87
  end # Users
71
88
  end # Helper
72
89
  end # Ramaze
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'en'
5
+ trans.name = 'permissions'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Permissions'
9
+
10
+ t['permissions.show'] = 'Show permissions'
11
+ t['permissions.edit'] = 'Edit permissions'
12
+
13
+ t['buttons.allow_all'] = 'Allow all'
14
+ t['buttons.deny_all'] = 'Deny all'
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'en'
5
+ trans.name = 'user_groups'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'User Groups'
9
+ t['titles.edit'] = 'Edit User Group'
10
+ t['titles.new'] = 'Add User Group'
11
+
12
+ t['labels.id'] = '#'
13
+ t['labels.name'] = 'Name'
14
+ t['labels.slug'] = 'Slug'
15
+ t['labels.description'] = 'Description'
16
+ t['labels.super_group'] = 'Super group'
17
+
18
+ t['messages.no_groups'] = 'No user groups were found.'
19
+
20
+ t['errors.new'] = 'Failed to create a new user group.'
21
+ t['errors.save'] = 'Failed to modify the user group.'
22
+ t['errors.delete'] = 'Failed to delete the user group with ID #%s.'
23
+ t['errors.no_delete'] = 'You have to specify at least one group to delete.'
24
+ t['errors.invalid_group'] = 'The specified user group is invalid.'
25
+
26
+ t['success.new'] = 'The new user group has been created.'
27
+ t['success.save'] = 'The user group has been modified.'
28
+ t['success.delete'] = 'All selected user groups have been deleted.'
29
+
30
+ t['buttons.new'] = 'New group'
31
+ t['buttons.delete'] = 'Delete selected groups'
32
+ t['buttons.save'] = 'Save group'
33
+
34
+ t['permissions.show'] = 'Show group'
35
+ t['permissions.edit'] = 'Edit group'
36
+ t['permissions.new'] = 'Add group'
37
+ t['permissions.delete'] = 'Delete group'
38
+ end
39
+ end
@@ -0,0 +1,73 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'en'
5
+ trans.name = 'users'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Users'
9
+ t['titles.edit'] = 'Edit User'
10
+ t['titles.new'] = 'Add User'
11
+ t['titles.login'] = 'Login'
12
+ t['titles.register'] = 'Register'
13
+
14
+ t['labels.id'] = '#'
15
+ t['labels.email'] = 'Email'
16
+ t['labels.name'] = 'Name'
17
+ t['labels.website'] = 'Website'
18
+ t['labels.password'] = 'Password'
19
+ t['labels.confirm_password'] = 'Confirm password'
20
+ t['labels.status'] = 'Status'
21
+ t['labels.created_at'] = 'Created'
22
+ t['labels.updated_at'] = 'Updated'
23
+ t['labels.last_login'] = 'Last login'
24
+ t['labels.user_groups'] = 'User groups'
25
+ t['labels.language'] = 'Language'
26
+ t['labels.frontend_language'] = 'Frontend language'
27
+ t['labels.date_format'] = 'Date format'
28
+ t['labels.allow_registration'] = 'Allow registration'
29
+
30
+ t['descriptions.date_format'] = 'A custom format to use for all dates ' \
31
+ 'displayed in the backend.'
32
+ t['descriptions.allow_registration'] = 'Allow non registered users to ' \
33
+ 'register a new account.'
34
+
35
+ t['special.status_hash.active'] = 'Active'
36
+ t['special.status_hash.closed'] = 'Closed'
37
+
38
+ t['messages.no_users'] = 'No users were found.'
39
+
40
+ t['errors.new'] = 'Failed to create the new user.'
41
+ t['errors.save'] = 'Failed to save the user.'
42
+ t['errors.delete'] = 'Failed to delete the user with ID #%s.'
43
+ t['errors.no_delete'] = 'You have to specify at least one user to delete.'
44
+ t['errors.no_password_match'] = 'The specified passwords did not match.'
45
+ t['errors.login'] = 'Failed to log in with the specified details.'
46
+ t['errors.logout'] = 'Failed to log out, perhaps you are already ' \
47
+ 'logged out.'
48
+ t['errors.invalid_user'] = 'The specified user is invalid.'
49
+ t['errors.register'] = 'The account could not be registered.'
50
+
51
+ t['success.new'] = 'The new user has been created.'
52
+ t['success.save'] = 'The user has been modified.'
53
+ t['success.delete'] = 'All selected users have been deleted.'
54
+ t['success.login'] = 'You have been successfully logged in.'
55
+ t['success.logout'] = 'You have been successfully logged out.'
56
+ t['success.register'] = 'The account has been registered.'
57
+
58
+ t['buttons.login'] = 'Login'
59
+ t['buttons.new'] = 'Add user'
60
+ t['buttons.delete'] = 'Delete selected users'
61
+ t['buttons.save'] = 'Save user'
62
+ t['buttons.register'] = 'Register'
63
+
64
+ t['description'] = 'Manage users, user groups and permissions.'
65
+
66
+ t['permissions.show'] = 'Show user'
67
+ t['permissions.edit'] = 'Edit user'
68
+ t['permissions.new'] = 'Add user'
69
+ t['permissions.delete'] = 'Delete user'
70
+
71
+ t['tabs.settings'] = 'User Settings'
72
+ end
73
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'nl'
5
+ trans.name = 'permissions'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Rechten'
9
+
10
+ t['permissions.show'] = 'Rechten weergeven'
11
+ t['permissions.edit'] = 'Rechten aanpassen'
12
+
13
+ t['buttons.allow_all'] = 'Sta alles toe'
14
+ t['buttons.deny_all'] = 'Sta niks toe'
15
+ end
16
+ end