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,38 +1,101 @@
1
- #:nodoc:
2
1
  module Comments
3
2
  #:nodoc:
4
3
  module Controller
5
4
  ##
6
- # Frontend controller for the comments system used for saving user-submitted
7
- # comments. When the anti-spam system is enabled Zen will use Defensio to
8
- # check if the comment is spam or ham.
5
+ # Controller that makes it possible for users to submit comments to section
6
+ # entries. Zen does not provide any way of generating a comment form for
7
+ # you and thus you'll have to do this yourself. When creating such a form
8
+ # you must add the following fields to it:
9
+ #
10
+ # * **section_entry** (required): an ID of a section entry where the
11
+ # comments belong to.
12
+ # * **user_id**: the ID of the currently logged in user (if any). If this ID
13
+ # isn't specified the "name" and "Email" fields are required.
14
+ # * **comment**: the text of the comment.
15
+ # * **name**: the name of the author, required when the "user_id" field is
16
+ # empty.
17
+ # * **website**: the website of the user, if any.
18
+ # * **email**: the Email address of the user, required if the "user_id"
19
+ # field is empty.
20
+ #
21
+ # An example of such a form looks like the code below. Note that this block
22
+ # of code should be wrapped in a ``#{}`` tag.
23
+ #
24
+ # form_for(
25
+ # flash[:form_data],
26
+ # :method => :post,
27
+ # :action => Comments::Controller::CommentsForm.r(:save)
28
+ # ) do |f|
29
+ # if logged_in?
30
+ # f.input_hidden(:user_id, user.id)
31
+ # end
32
+ #
33
+ # f.input_hidden(:section_entry, 10)
34
+ #
35
+ # # No need to show these, they'll be filled in based on the user ID.
36
+ # unless logged_in?
37
+ # f.input_text('Name', :name)
38
+ # f.input_text('Email', :email)
39
+ # f.input_text('Website', :website)
40
+ # end
41
+ #
42
+ # f.textarea('Comment', :comment)
43
+ #
44
+ # f.input_submit('Submit')
45
+ # end
46
+ #
47
+ # In the above example ``flash[:form_data]`` is used. This controller sets
48
+ # two objects in the flash just like the backend controllers. These are the
49
+ # following two items:
50
+ #
51
+ # * **form_data**: an instance of {Comments::Model::Comment}
52
+ # * **form_errros**: a hash containing all errors, automatically used by
53
+ # ``Ramaze::Helper::BlueForm`` if the form was created using the
54
+ # ``form_for()`` method.
55
+ #
56
+ # Note that both these objects are only set if the comment contained invalid
57
+ # data or the user wasn't allowed to submit the comment.
58
+ #
59
+ # In the above example the BlueForm helper was used but you're free to use
60
+ # plain old HTML or another helper if you like. If you want to use a helper
61
+ # you'll have to load it into {Zen::Controller::MainController}. This can
62
+ # be done as following:
63
+ #
64
+ # Zen::Controller::MainController.helper(:some_helper_name)
65
+ #
66
+ # ## Events
67
+ #
68
+ # Just like {Comments::Controller::Comments} newly created comments are
69
+ # passed to an event called "new_comment".
70
+ #
71
+ # @example Logging whenever a new comment is created
72
+ # Zen::Event.call(:new_comment) do |comment|
73
+ # Ramaze::Log.info(
74
+ # "A new comment has been created with ID ##{comment.id}"
75
+ # )
76
+ # end
9
77
  #
10
- # @author Yorick Peterse
11
78
  # @since 0.1
79
+ # @map /comments-form
80
+ # @event before_new_comment
81
+ # @event after_new_comment
12
82
  #
13
83
  class CommentsForm < Zen::Controller::FrontendController
14
- include ::Comments::Model
15
-
16
- map '/comments-form'
84
+ map '/comments-form'
17
85
  helper :message
18
86
 
19
- before_all do
20
- csrf_protection(:save) do
21
- respond(lang('zen_general.errors.not_authorized'), 403)
22
- end
23
- end
87
+ csrf_protection :save
24
88
 
25
89
  ##
26
90
  # Creates a new comment for the section entry. Once the comment has been
27
91
  # saved the user will be redirected back to the previous page.
28
92
  #
29
- # @author Yorick Peterse
30
93
  # @since 0.1
94
+ # @event before_new_comment
95
+ # @event after_new_comment
31
96
  #
32
97
  def save
33
- Zen::Language.load('comments')
34
-
35
- comment = Comment.new
98
+ comment = ::Comments::Model::Comment.new
36
99
  post = request.subset(
37
100
  :section_entry,
38
101
  :user_id,
@@ -44,7 +107,7 @@ module Comments
44
107
 
45
108
  # Get all the comment statuses.
46
109
  comment_statuses = {}
47
- draft_status = Sections::Model::SectionEntryStatus[
110
+ draft_status = ::Sections::Model::SectionEntryStatus[
48
111
  :name => 'draft'
49
112
  ].id
50
113
 
@@ -71,7 +134,7 @@ module Comments
71
134
  end
72
135
 
73
136
  # Validate the section entry
74
- if entry.nil? or entry.section_entry_status_id === draft_status
137
+ if entry.nil? or entry.section_entry_status_id == draft_status
75
138
  message(:error, lang('comments.errors.invalid_entry'))
76
139
  redirect_referrer
77
140
  end
@@ -86,29 +149,47 @@ module Comments
86
149
  end
87
150
 
88
151
  # Comments allowed?
89
- if section.comment_allow === false
152
+ if section.comment_allow == false
90
153
  message(:error, lang('comments.errors.comments_not_allowed'))
91
154
  redirect_referrer
92
155
  end
93
156
 
94
157
  # Comments require an account?
95
- if section.comment_require_account === true and session[:user].nil?
158
+ if section.comment_require_account == true and !logged_in?
96
159
  message(:error, lang('comments.errors.comments_require_account'))
97
160
  redirect_referrer
98
161
  end
99
162
 
100
163
  # Require moderation?
101
- if section.comment_moderate === true
164
+ if section.comment_moderate == true
102
165
  comment.comment_status_id = comment_statuses['closed']
103
166
  end
104
167
 
105
- # Require anti-spam validation?
106
- if plugin(:settings, :get, :enable_antispam).value === '1'
107
- engine = plugin(:settings, :get, :anti_spam_system).value.to_sym
108
- spam = plugin(:anti_spam, engine, nil, nil, nil, post['comment'])
168
+ # Get the details for the anti spam plugin
169
+ if !post['user_id'].nil? and !post['user_id'].empty?
170
+ user = ::Users::Model::User[post['user_id']]
171
+ name = user.name
172
+ email = user.email
173
+ url = user.website
174
+ else
175
+ name = post['name']
176
+ email = post['email']
177
+ url = post['website']
178
+ end
109
179
 
110
- # Time to validate the Defensio response
111
- if spam === false
180
+ # Require anti-spam validation?
181
+ if get_setting(:enable_antispam).true?
182
+ engine = get_setting(:anti_spam_system).value
183
+ spam = ::Comments::AntiSpam.validate(
184
+ engine,
185
+ name,
186
+ email,
187
+ url,
188
+ post['comment']
189
+ )
190
+
191
+ # Is it spam?
192
+ if spam == false
112
193
  if section.comment_moderate == true
113
194
  comment.comment_status_id = comment_statuses['closed']
114
195
  else
@@ -121,18 +202,25 @@ module Comments
121
202
 
122
203
  # Save the comment
123
204
  begin
205
+ Zen::Event.call(:before_new_comment, comment)
124
206
  comment.save
125
-
126
- if section.comment_moderate == true
127
- message(:success, lang('comments.success.moderate'))
128
- else
129
- message(:success, lang('comments.success.new'))
130
- end
131
207
  rescue => e
132
208
  Ramaze::Log.error(e.inspect)
133
209
  message(:error, lang('comments.errors.new'))
210
+
211
+ flash[:form_data] = comment
212
+ flash[:form_errors] = comment.errors
213
+
214
+ redirect_referrer
215
+ end
216
+
217
+ if section.comment_moderate == true
218
+ message(:success, lang('comments.success.moderate'))
219
+ else
220
+ message(:success, lang('comments.success.new'))
134
221
  end
135
222
 
223
+ Zen::Event.call(:after_new_comment, comment)
136
224
  redirect_referrer
137
225
  end
138
226
  end # CommentsForm
@@ -1,11 +1,9 @@
1
- #:nodoc:
2
1
  module Ramaze
3
2
  #:nodoc:
4
3
  module Helper
5
4
  ##
6
5
  # Helper used by the comments package.
7
6
  #
8
- # @author Yorick Peterse
9
7
  # @since 0.2.8
10
8
  #
11
9
  module Comment
@@ -15,7 +13,6 @@ module Ramaze
15
13
  # returned, otherwise the user is redirected back to the comment overview
16
14
  # and is shown a message.
17
15
  #
18
- # @author Yorick Peterse
19
16
  # @since 0.2.8
20
17
  # @param [Fixnum] comment_id The ID of the comment to validate.
21
18
  # @return [Comments::Model::Comment]
@@ -0,0 +1,90 @@
1
+ module Ramaze
2
+ module Helper
3
+ ##
4
+ # Helper that provides the means to retrieve comments in your templates.
5
+ #
6
+ # @since 0.3
7
+ #
8
+ module CommentFrontend
9
+ ##
10
+ # Retrieves a list of comments by a section entry's ID or slug and
11
+ # optionally paginates these comments.
12
+ #
13
+ # When paginating the results the default values for the ``:var`` and
14
+ # ``:limit`` options are taken from
15
+ # ``Zen::Controller::FrontendController.ancestral_trait[:paginate]``.
16
+ #
17
+ # @example Looping over a set of comments
18
+ # get_comments(5).each do |comment|
19
+ # puts comment.html
20
+ # end
21
+ #
22
+ # @example Paginating the comments
23
+ # comments = get_comments(5, :paginate => true)
24
+ #
25
+ # comments.each do |comment|
26
+ # puts comment.user_name
27
+ # end
28
+ #
29
+ # comments.navigation
30
+ #
31
+ # @since 0.3
32
+ # @param [String|Fixnum] entry Either the slug of an entry or the ID of an
33
+ # entry for which to retrieve all comments.
34
+ # @param [Hash] options A hash containing various options to customize
35
+ # the return value.
36
+ # @option options [TrueClass|FalseClass] :paginate Whether or not the
37
+ # results should be paginated. This only works inside an action.
38
+ # @option options [Fixnum] :limit The amount of comments to retrieve.
39
+ # @option options [String] :var The name of the query string that contains
40
+ # the current page.
41
+ # @return [Mixed]
42
+ #
43
+ def get_comments(entry, options = {})
44
+ trait = Zen::Controller::FrontendController.ancestral_trait[:paginate]
45
+ options = {
46
+ :paginate => false,
47
+ :limit => trait[:limit],
48
+ :var => trait[:var]
49
+ }.merge(options)
50
+
51
+ query = Comments::Model::Comment.select_all(:comments)
52
+ query = query.join(
53
+ :comment_statuses,
54
+ :comments__comment_status_id => :comment_statuses__id
55
+ )
56
+
57
+ # Add the section entry to the comment so that the comments can be
58
+ # filtered by the IDs/slugs without having to use a separate query.
59
+ query = query.join(
60
+ :section_entries,
61
+ :comments__section_entry_id => :section_entries__id
62
+ )
63
+
64
+ if entry.is_a?(String)
65
+ query = query.filter(:section_entries__slug => entry)
66
+ else
67
+ query = query.filter(:section_entries__id => entry)
68
+ end
69
+
70
+ # Only show comments with a status of "Open"
71
+ query = query.filter(:comment_statuses__name => 'open')
72
+ query = query.eager(:user, :section_entry)
73
+
74
+ if options[:paginate] == true and respond_to?(:paginate)
75
+ return paginate(
76
+ query,
77
+ :var => options[:var],
78
+ :limit => options[:limit]
79
+ )
80
+ else
81
+ if options[:limit]
82
+ query = query.limit(options[:limit])
83
+ end
84
+
85
+ return query
86
+ end
87
+ end
88
+ end # CommentFrontend
89
+ end # Helper
90
+ end # Ramaze
@@ -0,0 +1,57 @@
1
+ Zen::Language::Translation.add do |trans|
2
+ trans.language = 'en'
3
+ trans.name = 'comments'
4
+
5
+ trans.translate do |t|
6
+ t['titles.index'] = 'Comments'
7
+ t['titles.edit'] = 'Edit Comment'
8
+
9
+ t['labels.id'] = '#'
10
+ t['labels.website'] = 'Website'
11
+ t['labels.entry'] = 'Section Entry'
12
+ t['labels.email'] = 'Email'
13
+ t['labels.status'] = 'Status'
14
+ t['labels.comment'] = 'Comment'
15
+ t['labels.name'] = 'Name'
16
+ t['labels.created_at'] = 'Created'
17
+ t['labels.updated_at'] = 'Updated'
18
+ t['labels.defensio'] = 'Defensio'
19
+ t['labels.anti_spam_system'] = 'Anti-spam System'
20
+ t['labels.open'] = 'Open'
21
+ t['labels.closed'] = 'Closed'
22
+ t['labels.spam'] = 'Spam'
23
+ t['labels.defensio_key'] = 'Defensio Key'
24
+
25
+ t['messages.no_comments'] = 'No comments were found.'
26
+
27
+ t['descriptions.anti_spam_system'] = 'The anti-spam system to use for ' \
28
+ 'validating comments.'
29
+ t['description.defensio_key'] = 'The API key for the Defensio anti-spam ' \
30
+ 'system.'
31
+
32
+ t['success.new'] = 'The comment has been created.'
33
+ t['success.save'] = 'The comment has been modified.'
34
+ t['success.delete'] = 'The selected comments have been deleted.'
35
+ t['success.moderate'] = 'The comment has been posted but must be approved ' \
36
+ 'by a moderator before it will be displayed.'
37
+
38
+ t['errors.new'] = 'Failed to create the new comment.'
39
+ t['errors.save'] = 'Failed to modify the comment.'
40
+ t['errors.delete'] = 'Failed to delete the comment with ID #%s.'
41
+ t['errors.no_delete'] = 'You need to specify a comment to delete.'
42
+ t['errors.invalid_entry'] = 'The specified section entry is invalid.'
43
+ t['errors.comments_not_allowed'] = 'Comments are not allowed for this section.'
44
+ t['errors.comments_require_account'] = 'You have to be logged in in order ' \
45
+ 'to post a comment.'
46
+ t['errors.invalid_comment'] = 'The specified comment is invalid.'
47
+
48
+ t['buttons.delete'] = 'Delete selected comments'
49
+ t['buttons.save'] = 'Save comment'
50
+
51
+ t['permissions.show'] = 'Show comment'
52
+ t['permissions.edit'] = 'Edit comment'
53
+ t['permissions.delete'] = 'Delete comment'
54
+
55
+ t['description'] = 'Manage comments'
56
+ end
57
+ end
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'nl'
5
+ trans.name = 'comments'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Reacties'
9
+ t['titles.edit'] = 'Reactie aanpassen'
10
+
11
+ t['labels.id'] = '#'
12
+ t['labels.website'] = 'Website'
13
+ t['labels.entry'] = 'Sectie artikel'
14
+ t['labels.email'] = 'Email'
15
+ t['labels.stats'] = 'Status'
16
+ t['labels.comment'] = 'Reactie'
17
+ t['labels.name'] = 'Naam'
18
+ t['labels.created_at'] = 'Aangemaakt'
19
+ t['labels.updated_at'] = 'Aangepast'
20
+ t['labels.defensio'] = 'Defensio'
21
+ t['labels.anti_spam_system'] = 'Anti-spam systeem'
22
+ t['labels.open'] = 'Open'
23
+ t['labels.closed'] = 'Gesloten'
24
+ t['labels.spam'] = 'Spam'
25
+ t['labels.defensio_key'] = 'Defensio sleutel'
26
+
27
+ t['messages.no_comments'] = 'Er konden geen reacties worden gevonden.'
28
+
29
+ t['descriptions.anti_spam_system'] = 'Het anti-spam systeem dat gebruikt ' \
30
+ 'moet worden voor het verifiëren van reacties.'
31
+ t['descriptions.defensio_key'] = 'De API sleutel voor het Defensio ' \
32
+ 'anti-spam systeem.'
33
+
34
+ t['success.new'] = 'De reactie is aangemaakt.'
35
+ t['success.save'] = 'De reactie is aangepast.'
36
+ t['success.delete'] = 'De geselecteerde reacties zijn verwijderd.'
37
+ t['success.moderate'] = 'De reactie is aangemaakt en zal worden ' \
38
+ 'weergegeven zodra deze is goedgekeurd.'
39
+
40
+ t['errors.new'] = 'De reactie kon niet worden aangemaakt.'
41
+ t['errors.save'] = 'De reactie kon niet worden aangepast.'
42
+ t['errors.delete'] = 'De reactie met ID #%s kon niet worden verwijderd.'
43
+ t['errors.no_delete'] = 'U moet een reactie opgeven om te verwijderen.'
44
+ t['errors.invalid_entry'] = 'Het opgegeven artikel is ongeldig.'
45
+
46
+ t['errors.comments_not_allowed'] = 'Reacties zijn niet toegestaan voor ' \
47
+ 'deze sectie.'
48
+ t['errors.comments_require_account'] = 'U moet ingelogd zijn om een ' \
49
+ 'reactie te kunnen plaatsen.'
50
+ t['errors.invalid_comment'] = 'De opgegeven reactie is ongeldig.'
51
+
52
+ t['buttons.delete'] = 'Reacties verwijderen'
53
+ t['buttons.save'] = 'Reactie opslaan'
54
+
55
+ t['permissions.show'] = 'Reactie weergeven'
56
+ t['permissions.edit'] = 'Reactie aanpassen'
57
+ t['permissions.delete'] = 'Reactie verwijderen'
58
+
59
+ t['description'] = 'Reacties beheren'
60
+ end
61
+ end