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,157 +1,224 @@
1
- #:nodoc:
1
+ ##
2
+ # Package for managing categories and category groups.
3
+ #
4
+ # ## Controllers
5
+ #
6
+ # * {Categories::Controller::CategoryGroups}
7
+ # * {Categories::Controller::Categories}
8
+ #
9
+ # ## Helpers
10
+ #
11
+ # * {Ramaze::Helper::Category}
12
+ # * {Ramaze::Helper::CategoryFrontend}
13
+ #
14
+ # ## Models
15
+ #
16
+ # * {Categories::Model::CategoryGroup}
17
+ # * {Categories::Model::Category}
18
+ #
19
+ # @since 0.1
20
+ #
2
21
  module Categories
3
22
  #:nodoc:
4
23
  module Controller
5
24
  ##
6
- # Category groups can be used to group a number of categories into a single
7
- # container. These groups are assigned to a section (rather than individual
8
- # categories). It's important to remember that a section entry can't use a
9
- # category group until it has been added to a section.
25
+ # Category groups are containers for individual categories. A category group
26
+ # can be assigned to multiple sections and it can have multiple categories.
27
+ #
28
+ # In order to manage a category group you must first go to the overview that
29
+ # shows all existing group (or a message telling you no groups have been
30
+ # added if this is the case). This can be done by clicking the "Categories"
31
+ # button in the top navigation menu or by manually pointing your browser to
32
+ # ``/admin/category-groups``. This overview looks like the image displayed
33
+ # below.
34
+ #
35
+ # ![Category Group Overview](../../_static/categories/category_groups.png)
36
+ #
37
+ # Editing an existing group can be done by clicking on the name of a group
38
+ # while managing the categories of a group is done by clicking the link
39
+ # "Manage Categories" (the text may differ depending on the language you're
40
+ # using). If you want to delete a number of groups all you'd have to do is
41
+ # clicking the checkboxes of each row you'd wish to delete followed by
42
+ # pressing the button "Delete selected groups". This will trigger an action
43
+ # that removes all category groups and the categories that belong to those
44
+ # groups.
45
+ #
46
+ # ## Adding/Editing Groups
47
+ #
48
+ # By clicking the name of a group or the "Add group" button you can edit an
49
+ # existing group or create a new one. The form used to manage such a group
50
+ # looks like the one in the image below.
51
+ #
52
+ # ![New Category Group](../../_static/categories/new_category_group.png)
53
+ #
54
+ # In this form you can set the following fields:
55
+ #
56
+ # * **Name**: the name of the category group. It can be any name in any
57
+ # format as long as it's not longer than 255 characters.
58
+ # * **Description**: the description of the category group. While not
59
+ # required it can be used to make it easier to remember that purpose a
60
+ # category group has.
61
+ #
62
+ # ## Used Permissions
63
+ #
64
+ # * show_category_group
65
+ # * edit_category_group
66
+ # * new_category_group
67
+ # * delete_category_group
68
+ #
69
+ # ## Events
70
+ #
71
+ # All available events receive an instance of
72
+ # {Categories::Model::CategoyGroup}. However, the
73
+ # ``after_delete_category_group`` event will receive an instance that has
74
+ # already been removed from the database. This means that you can not make
75
+ # changes to the object and call ``#save()``.
76
+ #
77
+ # Example of logging when a new category group is created:
78
+ #
79
+ # Zen::Event.listen(:after_new_category_group) do |group|
80
+ # Ramaze::Log.info("New category: \"#{group.name}\"")
81
+ # end
82
+ #
83
+ # Maybe you want to automatically add a category group to a section:
84
+ #
85
+ # Zen::Event.listen(:after_new_category_group) do |group|
86
+ # section = Sections::Model::Section[5]
87
+ #
88
+ # begin
89
+ # section.add_category_group(group)
90
+ # rescue => e
91
+ # Ramaze::Log.error(e.inspect)
92
+ # end
93
+ # end
10
94
  #
11
- # @author Yorick Peterse
12
95
  # @since 0.1
96
+ # @map /admin/category-groups
97
+ # @event before_new_category_group
98
+ # @event after_new_category_group
99
+ # @event before_edit_category_group
100
+ # @event after_edit_category_group
101
+ # @event before_delete_category_group
102
+ # @event after_delete_category_group
13
103
  #
14
104
  class CategoryGroups < Zen::Controller::AdminController
15
- include ::Categories::Model
16
-
17
105
  helper :category
18
106
  map '/admin/category-groups'
107
+ title 'category_groups.titles.%s'
19
108
 
20
- before_all do
21
- csrf_protection(:save, :delete) do
22
- respond(lang('zen_general.errors.csrf'), 403)
23
- end
24
- end
25
-
26
- ##
27
- # The constructor is used to set various options such as the form URLs and
28
- # load the language pack for the categories module.
29
- #
30
- # The following language files are loaded:
31
- #
32
- # * category_groups
33
- #
34
- # @author Yorick Peterse
35
- # @since 0.1
36
- #
37
- def initialize
38
- super
39
-
40
- Zen::Language.load('category_groups')
41
-
42
- # Set the page title
43
- if !action.method.nil?
44
- method = action.method.to_s
45
- @page_title = lang("category_groups.titles.#{method}") rescue nil
46
- end
47
- end
109
+ # Protects CategoryGroups#save() and CategoryGroups#delete() against CSRF
110
+ # attacks.
111
+ csrf_protection :save, :delete
48
112
 
49
113
  ##
50
114
  # Show an overview of all existing category groups and allow the user
51
115
  # to create new category groups or manage individual categories.
52
116
  #
53
- # This method requires the following permissions:
54
- #
55
- # * read
56
- #
57
- # @author Yorick Peterse
58
- # @since 0.1
117
+ # @since 0.1
118
+ # @permission show_category_group
59
119
  #
60
120
  def index
61
- require_permissions(:read)
121
+ authorize_user!(:show_category_group)
62
122
 
63
123
  set_breadcrumbs(lang('category_groups.titles.index'))
64
124
 
65
- @category_groups = paginate(CategoryGroup)
125
+ @category_groups = search do |query|
126
+ ::Categories::Model::CategoryGroup.search(query).order(:id.asc)
127
+ end
128
+
129
+ @category_groups ||= ::Categories::Model::CategoryGroup.order(:id.asc)
130
+ @category_groups = paginate(@category_groups)
66
131
  end
67
132
 
68
133
  ##
69
- # Edit an existing category group based on the ID specified in the URL.
70
- # This method requires the following permissions:
134
+ # Allows a user to edit an existing category group.
71
135
  #
72
- # * read
73
- # * update
74
- #
75
- # @author Yorick Peterse
76
- # @since 0.1
136
+ # @since 0.1
137
+ # @param [Fixnum] id The ID of the category group to edit.
138
+ # @permission edit_category_group
77
139
  #
78
140
  def edit(id)
79
- require_permissions(:read, :update)
141
+ authorize_user!(:edit_category_group)
80
142
 
81
143
  set_breadcrumbs(
82
144
  CategoryGroups.a(lang('category_groups.titles.index'), :index),
83
145
  lang('category_groups.titles.edit')
84
146
  )
85
147
 
86
- if flash[:form_data]
87
- @category_group = flash[:form_data]
88
- else
89
- @category_group = validate_category_group(id)
90
- end
148
+ @category_group = flash[:form_data] || validate_category_group(id)
91
149
 
92
150
  render_view(:form)
93
151
  end
94
152
 
95
153
  ##
96
- # Create a new category group. This method requires the following
97
- # permissions:
154
+ # Allows the user to add a new category group.
98
155
  #
99
- # * create
100
- # * read
101
- #
102
- # @author Yorick Peterse
103
156
  # @since 0.1
157
+ # @permission new_category_group
104
158
  #
105
159
  def new
106
- require_permissions(:create, :read)
160
+ authorize_user!(:new_category_group)
107
161
 
108
162
  set_breadcrumbs(
109
163
  CategoryGroups.a(lang('category_groups.titles.index'), :index),
110
164
  lang('category_groups.titles.new')
111
165
  )
112
166
 
113
- @category_group = CategoryGroup.new
167
+ if flash[:form_data]
168
+ @category_group = flash[:form_data]
169
+ else
170
+ @category_group = ::Categories::Model::CategoryGroup.new
171
+ end
114
172
 
115
173
  render_view(:form)
116
174
  end
117
175
 
118
176
  ##
119
- # Save or create a new category group based on the current POST data.
120
- # This method requires the following permissions:
177
+ # Creates a new category or updates the data of an existing category. If a
178
+ # category ID is specified (in the POST key "id") that existing category
179
+ # will be updated, otherwise a new one will be created.
121
180
  #
122
- # * create
123
- # * update
124
- #
125
- # @author Yorick Peterse
126
- # @since 0.1
181
+ # @since 0.1
182
+ # @permission edit_category_group (when editing a group)
183
+ # @permission new_category_group (when creating a group)
184
+ # @event before_new_category_group
185
+ # @event after_new_category_group
186
+ # @event before_edit_category_group
187
+ # @event after_edit_category_group
127
188
  #
128
189
  def save
129
190
  post = request.subset(:id, :name, :description)
130
191
 
192
+ # Get/create the group and set the event names.
131
193
  if post['id'] and !post['id'].empty?
132
- require_permissions(:update)
194
+ authorize_user!(:edit_category_group)
133
195
 
134
196
  category_group = validate_category_group(post['id'])
135
197
  save_action = :save
198
+ before_event = :before_edit_category_group
199
+ after_event = :after_edit_category_group
136
200
  else
137
- require_permissions(:create)
201
+ authorize_user!(:new_category_group)
138
202
 
139
- category_group = CategoryGroup.new
203
+ category_group = ::Categories::Model::CategoryGroup.new
140
204
  save_action = :new
205
+ before_event = :before_new_category_group
206
+ after_event = :after_new_category_group
141
207
  end
142
208
 
143
- # Set the messages
144
- flash_success = lang("category_groups.success.#{save_action}")
145
- flash_error = lang("category_groups.errors.#{save_action}")
209
+ success = lang("category_groups.success.#{save_action}")
210
+ error = lang("category_groups.errors.#{save_action}")
146
211
 
147
212
  post.delete('id')
148
213
 
149
- # Try to run the query
214
+ # Set the values, call the events and try to save the category group.
150
215
  begin
151
- category_group.update(post)
152
- message(:success, flash_success)
216
+ post.each { |k, v| category_group.send("#{k}=", v) }
217
+ Zen::Event.call(before_event, category_group)
218
+
219
+ category_group.save
153
220
  rescue => e
154
- message(:error, flash_error)
221
+ message(:error, error)
155
222
  Ramaze::Log.error(e.inspect)
156
223
 
157
224
  flash[:form_data] = category_group
@@ -160,49 +227,52 @@ module Categories
160
227
  redirect_referrer
161
228
  end
162
229
 
163
- if !category_group.nil? and category_group.id
164
- redirect(CategoryGroups.r(:edit, category_group.id))
165
- else
166
- redirect(CategoryGroups.r(:new))
167
- end
230
+ Zen::Event.call(after_event, category_group)
231
+
232
+ message(:success, success)
233
+ redirect(CategoryGroups.r(:edit, category_group.id))
168
234
  end
169
235
 
170
236
  ##
171
- # Delete all specified category groups and their categories. In
172
- # order to delete a number of groups an array of fields, named
173
- # "category_group_ids" is required. This array will contain all the
174
- # primary values of each group that has to be deleted.
237
+ # Deletes a number of category groups. The IDs of these groups should be
238
+ # specified in the POST array "category_group_ids".
175
239
  #
176
- # This method requires the following permissions:
177
- #
178
- # * delete
179
- #
180
- # @author Yorick Peterse
181
- # @since 0.1
240
+ # @since 0.1
241
+ # @permission delete_category_group
242
+ # @event before_delete_category_group
243
+ # @event after_delete_category_group
182
244
  #
183
245
  def delete
184
- require_permissions(:delete)
246
+ authorize_user!(:delete_category_group)
185
247
 
186
248
  post = request.subset(:category_group_ids)
187
249
 
188
- if !post['category_group_ids'] or post['category_group_ids'].empty?
250
+ if post['category_group_ids'].nil? or post['category_group_ids'].empty?
189
251
  message(:error, lang('category_groups.errors.no_delete'))
190
252
  redirect(CategoryGroups.r(:index))
191
253
  end
192
254
 
193
255
  post['category_group_ids'].each do |id|
256
+ group = ::Categories::Model::CategoryGroup[id]
257
+
258
+ next if group.nil?
259
+
260
+ Zen::Event.call(:before_delete_category_group, group)
261
+
194
262
  begin
195
- CategoryGroup[id].destroy
196
- message(:success, lang('category_groups.success.delete'))
263
+ group.destroy
197
264
  rescue => e
198
265
  Ramaze::Log.error(e.inspect)
199
266
  message(:error, lang('category_groups.errors.delete') % id)
200
267
 
201
268
  redirect_referrer
202
269
  end
270
+
271
+ Zen::Event.call(:after_delete_category_group, group)
203
272
  end
204
273
 
205
- redirect(CategoryGroups.r(:index))
274
+ message(:success, lang('category_groups.success.delete'))
275
+ redirect_referrer
206
276
  end
207
277
  end # CategoryGroups
208
278
  end # Controller
@@ -1,4 +1,3 @@
1
- #:nodoc:
2
1
  module Ramaze
3
2
  #:nodoc:
4
3
  module Helper
@@ -6,7 +5,6 @@ module Ramaze
6
5
  # Helper for the Categories package. Note that this helper requires the
7
6
  # helper Ramaze::Helper::Message to be loaded.
8
7
  #
9
- # @author Yorick Peterse
10
8
  # @since 0.2.8
11
9
  #
12
10
  module Category
@@ -16,10 +14,9 @@ module Ramaze
16
14
  # returned, otherwise the user is redirected back to the overview of all
17
15
  # category groups and is informed about the group being invalid.
18
16
  #
19
- # @author Yorick Peterse
20
17
  # @since 0.2.8
21
18
  # @param [Fixnum] category_group_id The ID of the category group to
22
- # validate.
19
+ # validate.
23
20
  # @return [Categories::Model::CategoryGroup]
24
21
  #
25
22
  def validate_category_group(category_group_id)
@@ -39,11 +36,10 @@ module Ramaze
39
36
  # is displayed and the user is redirected back to the overview of
40
37
  # categories.
41
38
  #
42
- # @author Yorick Peterse
43
39
  # @since 0.2.8
44
40
  # @param [Fixnum] category_id The ID of the category.
45
41
  # @param [Fixnum] category_group_id The ID of the category group, used
46
- # when redirecting the user.
42
+ # when redirecting the user.
47
43
  # @return [Categories::Model::Category]
48
44
  #
49
45
  def validate_category(category_id, category_group_id)
@@ -63,12 +59,11 @@ module Ramaze
63
59
  # Method that extracts all the possible parent categories for a given
64
60
  # category group ID.
65
61
  #
66
- # @author Yorick Peterse
67
62
  # @since 0.2.8
68
63
  # @param [Fixnum[ category_id The ID of the category, this one will be
69
- # excluded from the hash.
64
+ # excluded from the hash.
70
65
  # @param [Fixnum] category_group_id The ID of a category group for which
71
- # to retrieve all the possible parent items.
66
+ # to retrieve all the possible parent items.
72
67
  # @return [Hash]
73
68
  #
74
69
  def parent_categories(category_id, category_group_id)
@@ -0,0 +1,86 @@
1
+ module Ramaze
2
+ module Helper
3
+ ##
4
+ # Helper that makes it easier to retrieve categories and category groups in
5
+ # your templates.
6
+ #
7
+ # @since 0.3
8
+ #
9
+ module CategoryFrontend
10
+ ##
11
+ # Gets a number of categories and optionally paginates them. Keep in mind
12
+ # that this method will either return a dataset or an instance of
13
+ # ``Ramaze::Helper::Paginate::Paginator``.
14
+ #
15
+ # When paginating the results and no custom ``:var`` or ``:limit`` options
16
+ # are given this method will use the ones defined in
17
+ # ``Zen::Controller::FrontendController.ancestral_trait[:paginate]``.
18
+ #
19
+ # @example Looping over a set of categories
20
+ # get_categories('Test Group').each do |category|
21
+ # puts category.name
22
+ # end
23
+ #
24
+ # @example Paginating categories
25
+ # categories = get_categories('Test Group', :paginate => true)
26
+ #
27
+ # unless categories.empty?
28
+ # categories.each do |category|
29
+ # puts category.name
30
+ # end
31
+ # end
32
+ #
33
+ # # Returns the navigation menu for the paginat5ed results.
34
+ # categories.navigation
35
+ #
36
+ # @since 0.3
37
+ # @param [String|Fixnum] group The ID or name of a category group for
38
+ # which to retrieve all categories.
39
+ # @param [Hash] options A hash containing various options to customize
40
+ # the return value.
41
+ # @option options [TrueClass|FalseClass] :paginate When set to true the
42
+ # results will be paginated. Keep in mind that this only works inside
43
+ # an action/template.
44
+ # @option options [String] :var The name of the query string that contains
45
+ # the current page.
46
+ # @option options [Fixnum] :limit The amount of rows to retrieve.
47
+ # @return [Mixed]
48
+ #
49
+ def get_categories(group, options = {})
50
+ trait = Zen::Controller::FrontendController.ancestral_trait[:paginate]
51
+ options = {
52
+ :paginate => false,
53
+ :var => trait[:var],
54
+ :limit => trait[:limit]
55
+ }.merge(options)
56
+
57
+ query = Categories::Model::Category.select_all(:categories)
58
+ query = query.join(
59
+ :category_groups,
60
+ :categories__category_group_id => :category_groups__id
61
+ )
62
+
63
+ if group.is_a?(String)
64
+ query = query.filter(:category_groups__name => group)
65
+ else
66
+ query = query.filter(:category_groups__id => group)
67
+ end
68
+
69
+ # Paginate the results or return the dataset directly.
70
+ if options[:paginate] == true and respond_to?(:paginate)
71
+ return paginate(
72
+ query,
73
+ :var => options[:var],
74
+ :limit => options[:limit]
75
+ )
76
+ else
77
+ if options[:limit]
78
+ query = query.limit(options[:limit])
79
+ end
80
+
81
+ return query
82
+ end
83
+ end
84
+ end # CategoryFrontend
85
+ end # Helper
86
+ end # Ramaze