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,121 +1,162 @@
1
- #:nodoc:
1
+ ##
2
+ # Package for managing sections and section entries.
3
+ #
4
+ # ## Controllers
5
+ #
6
+ # * {Sections::Controller::Sections}
7
+ # * {Sections::Controller::SectionEntries}
8
+ #
9
+ # ## Helpers
10
+ #
11
+ # * {Ramaze::Helper::Section}
12
+ # * {Ramaze::Helper::SectionFrontend}
13
+ #
14
+ # ## Models
15
+ #
16
+ # * {Sections::Model::Section}
17
+ # * {Sections::Model::SectionEntry}
18
+ # * {Sections::Model::SectionEntryStatus}
19
+ #
2
20
  module Sections
3
21
  #:nodoc:
4
22
  module Controller
5
23
  ##
6
- # Sections can be seen as mini applications inside your website. Examples
7
- # of sections can be a blog, pages, a products listing, etc. Before being
8
- # able to properly add section entries you need to assign the following data
9
- # to a section:
24
+ # Sections are data containers with a specific purpose. For example, you
25
+ # might have a "Blog" or "Pages" section each with it's own entries,
26
+ # categories, custom fields and so on. A section and it's entries glue all
27
+ # the other data types (such as those mentioned earlier) together to form
28
+ # the content displayed on your website.
10
29
  #
11
- # * a category group
12
- # * a custom field group
30
+ # Sections can be managed by going to ``/admin``. This page will show an
31
+ # overview of all existing sections as well as a few buttons and links that
32
+ # allow you to edit, create or delete sections as well as managing the
33
+ # entries for each existing section.
13
34
  #
14
- # @author Yorick Peterse
15
- # @since 0.1
35
+ # ![Sections](../../_static/sections/sections.png)
36
+ #
37
+ # ## Creating/Editing Sections
38
+ #
39
+ # Creating a new section can be done by clicking the button "Add section"
40
+ # while editing a section can be done by clicking the name of a section. In
41
+ # both cases you'll end up with a form that looks like the one in the images
42
+ # below.
43
+ #
44
+ # ![General](../../_static/sections/edit_section_general.png)
45
+ # ![Comments](../../_static/sections/edit_section_comments.png)
46
+ # ![Groups](../../_static/sections/edit_section_groups.png)
47
+ #
48
+ # In this form you can specify the following fields:
49
+ #
50
+ # * **Name** (required): the name of the section.
51
+ # * **Slug**: a URL friendly version of the section name. If no slug is
52
+ # specified one will be generated automatically.
53
+ # * **Description**: a description of the section to help clarify it's
54
+ # purpose.
55
+ # * **Allow comments** (required): whether or not users can submit comments
56
+ # for entries assigned to the section.
57
+ # * **Comments require an account** (required): when set to "Yes" a user has
58
+ # to be logged in in order to post a comment.
59
+ # * **Moderate comments** (required): when enabled a comment first has to be
60
+ # approved before it's displayed. This option is disabled by default.
61
+ # * **Comment format** (required): the format comments are posted in such as
62
+ # Markdown or plain text.
63
+ # * **Custom field groups**: all the custom field groups to assign to the
64
+ # section. These groups can then be used by all the entries in the
65
+ # section.
66
+ # * **Category groups**: all the category groups that should be available to
67
+ # the section entries of this section.
68
+ #
69
+ # Note that the name and the slug of a section can not be longer than 255
70
+ # characters.
71
+ #
72
+ # ## Used Permissions
73
+ #
74
+ # * show_section
75
+ # * new_section
76
+ # * edit_section
77
+ # * delete_section
78
+ #
79
+ # ## Events
80
+ #
81
+ # All events in this controller receive an instance of
82
+ # {Sections::Model::Section}. The event ``after_delete_section`` receives an
83
+ # instance that has already been removed, thus you can't make any changes to
84
+ # it and save those in the database.
85
+ #
86
+ # Example of creating a dummy section entry:
87
+ #
88
+ # Zen::Event.listen(:new_section) do |section|
89
+ # section.add_section_entry(:title => 'My Entry', :user_id => user.id)
90
+ # end
91
+ #
92
+ # @since 0.1
93
+ # @map /admin
94
+ # @event before_new_section
95
+ # @event after_new_section
96
+ # @event before_edit_section
97
+ # @event after_edit_section
98
+ # @event before_delete_section
99
+ # @event after_delete_section
16
100
  #
17
101
  class Sections < Zen::Controller::AdminController
18
- include ::Sections::Model
19
-
20
102
  map '/admin'
21
103
  helper :section
104
+ title 'sections.titles.%s'
22
105
 
23
- # Load all required Javascript files
24
- javascript(['zen/lib/tabs'], :method => [:edit, :new])
25
-
26
- before_all do
27
- csrf_protection(:save, :delete) do
28
- respond(lang('zen_general.errors.csrf'), 403)
29
- end
30
- end
31
-
32
- ##
33
- # Constructor method, called upon initialization. It's used to set the URL
34
- # to which forms send their data and load the language pack.
35
- #
36
- # This method loads the following language files:
37
- #
38
- # * sections
39
- #
40
- # @author Yorick Peterse
41
- # @since 0.1
42
- #
43
- def initialize
44
- super
45
-
46
- Zen::Language.load('sections')
47
-
48
- # Set the page title
49
- if !action.method.nil?
50
- method = action.method.to_sym
51
- @page_title = lang("sections.titles.#{method}") rescue nil
52
- end
106
+ csrf_protection :save, :delete
107
+ load_asset_group :tabs, [:edit, :new]
53
108
 
109
+ # Hook that is executed before Sections#index(), Sections#new() and
110
+ # Sections#edit().
111
+ before(:index, :new, :edit) do
54
112
  @boolean_hash = {
55
113
  true => lang('zen_general.special.boolean_hash.true'),
56
114
  false => lang('zen_general.special.boolean_hash.false')
57
115
  }
116
+
117
+ @custom_field_group_pk_hash = ::CustomFields::Model::CustomFieldGroup \
118
+ .pk_hash(:name).invert
119
+
120
+ @category_group_pk_hash = ::Categories::Model::CategoryGroup \
121
+ .pk_hash(:name).invert
58
122
  end
59
123
 
60
124
  ##
61
125
  # Show an overview of all existing sections. Using this overview a user
62
126
  # can manage an existing section, delete it or create a new one.
63
127
  #
64
- # This method requires the following permissions:
65
- #
66
- # * read
67
- #
68
- # @author Yorick Peterse
69
- # @since 0.1
128
+ # @since 0.1
129
+ # @permission show_section
70
130
  #
71
131
  def index
72
- require_permissions(:read)
132
+ authorize_user!(:show_section)
73
133
 
74
134
  set_breadcrumbs(lang('sections.titles.index'))
75
135
 
76
- @sections = paginate(Section)
77
- end
78
-
79
- ##
80
- # Hook that is executed before the edit() and new() methods.
81
- #
82
- # @author Yorick Peterse
83
- # @since 0.2.8
84
- #
85
- before(:edit, :new) do
86
- @custom_field_group_pk_hash = CustomFields::Model::CustomFieldGroup \
87
- .pk_hash(:name)
136
+ @sections = search do |query|
137
+ ::Sections::Model::Section.search(query).order(:id.asc)
138
+ end
88
139
 
89
- @category_group_pk_hash = Categories::Model::CategoryGroup \
90
- .pk_hash(:name)
140
+ @sections ||= ::Sections::Model::Section.order(:id.asc)
141
+ @sections = paginate(@sections)
91
142
  end
92
143
 
93
144
  ##
94
145
  # Show a form that lets the user edit an existing section.
95
146
  #
96
- # This method requires the following permissions:
97
- #
98
- # * read
99
- # * update
100
- #
101
- # @author Yorick Peterse
102
- # @param [Integer] id The ID of the section to retrieve so that we can
103
- # edit it.
104
- # @since 0.1
147
+ # @param [Fixnum] id The ID of the section to edit.
148
+ # @since 0.1
149
+ # @permission edit_section
105
150
  #
106
151
  def edit(id)
107
- require_permissions(:read, :update)
152
+ authorize_user!(:edit_section)
108
153
 
109
154
  set_breadcrumbs(
110
155
  Sections.a(lang('sections.titles.index'), :index),
111
156
  @page_title
112
157
  )
113
158
 
114
- if flash[:form_data]
115
- @section = flash[:form_data]
116
- else
117
- @section = validate_section(id)
118
- end
159
+ @section = flash[:form_data] || validate_section(id)
119
160
 
120
161
  render_view(:form)
121
162
  end
@@ -123,40 +164,32 @@ module Sections
123
164
  ##
124
165
  # Show a form that lets the user create a new section.
125
166
  #
126
- # This method requires the following permissions:
127
- #
128
- # * create
129
- # * read
130
- #
131
- # @author Yorick Peterse
132
- # @since 0.1
167
+ # @since 0.1
168
+ # @permission new_section
133
169
  #
134
170
  def new
135
- require_permissions(:create, :read)
171
+ authorize_user!(:new_section)
136
172
 
137
173
  set_breadcrumbs(
138
174
  Sections.a(lang('sections.titles.index'), :index),
139
175
  @page_title
140
176
  )
141
177
 
142
- @section = Section.new
178
+ @section = flash[:form_data] || ::Sections::Model::Section.new
143
179
 
144
180
  render_view(:form)
145
181
  end
146
182
 
147
183
  ##
148
- # Method used for processing the form data and redirecting the user back
149
- # to the proper URL. Based on the value of a hidden field named "id" we'll
150
- # determine if the data will be used to create a new section or to update
151
- # an existing one.
152
- #
153
- # This method requires the following permissions:
184
+ # Saves any changes made to an existing section or creates a new one.
154
185
  #
155
- # * create
156
- # * update
157
- #
158
- # @author Yorick Peterse
159
- # @since 0.1
186
+ # @since 0.1
187
+ # @event before_new_section
188
+ # @event after_new_section
189
+ # @event before_edit_section
190
+ # @event ater_edit_section
191
+ # @permission new_section (when creating a section)
192
+ # @permission edit_section (when editing a section)
160
193
  #
161
194
  def save
162
195
  post = request.subset(
@@ -173,92 +206,92 @@ module Sections
173
206
  )
174
207
 
175
208
  if post['id'] and !post['id'].empty?
176
- require_permissions(:update)
209
+ authorize_user!(:edit_section)
177
210
 
178
- @section = validate_section(post['id'])
179
- save_action = :save
211
+ section = validate_section(post['id'])
212
+ save_action = :save
213
+ before_event = :before_edit_section
214
+ after_event = :after_edit_section
180
215
  else
181
- require_permissions(:create)
216
+ authorize_user!(:new_section)
182
217
 
183
- @section = Section.new
184
- save_action = :new
218
+ section = ::Sections::Model::Section.new
219
+ save_action = :new
220
+ before_event = :before_new_section
221
+ after_event = :after_new_section
185
222
  end
186
223
 
187
- flash_success = lang("sections.success.#{save_action}")
188
- flash_error = lang("sections.errors.#{save_action}")
224
+ success = lang("sections.success.#{save_action}")
225
+ error = lang("sections.errors.#{save_action}")
189
226
 
190
227
  post['custom_field_group_pks'] ||= []
191
228
  post['category_group_pks'] ||= []
192
229
 
193
- # The primary keys have to be integers otherwise Sequel will soil it's
194
- # pants
195
- ['custom_field_group_pks', 'category_group_pks'].each do |k|
196
- post[k].map! { |value| value.to_i }
197
- end
198
-
199
- # Auto generate the slug if it's empty
200
- post.delete('slug') if post['slug'].empty?
201
230
  post.delete('id')
202
231
 
203
232
  begin
204
- @section.update(post)
233
+ post.each { |k, v| section.send("#{k}=", v) }
234
+ Zen::Event.call(before_event, section)
235
+
236
+ section.save
205
237
 
206
238
  if save_action == :new
207
- @section.custom_field_group_pks = post['custom_field_group_pks']
208
- @section.category_group_pks = post['category_group_pks']
239
+ section.custom_field_group_pks = post['custom_field_group_pks']
240
+ section.category_group_pks = post['category_group_pks']
209
241
  end
210
-
211
- message(:success, flash_success)
212
242
  rescue => e
213
243
  Ramaze::Log.error(e.inspect)
214
- message(:error, flash_error)
244
+ message(:error, error)
215
245
 
216
- flash[:form_data] = @section
217
- flash[:form_errors] = @section.errors
246
+ flash[:form_data] = section
247
+ flash[:form_errors] = section.errors
218
248
 
219
249
  redirect_referrer
220
250
  end
221
251
 
222
- if @section.id
223
- redirect(Sections.r(:edit, @section.id))
224
- else
225
- redirect_referrer
226
- end
252
+ Zen::Event.call(after_event, section)
253
+
254
+ message(:success, success)
255
+ redirect(Sections.r(:edit, section.id))
227
256
  end
228
257
 
229
258
  ##
230
- # Delete an existing section. Poor section, what did he do wrong? In order
231
- # to delete a section you'll need to send a POST request that contains a
232
- # field named "section_ids[]". This field should contain the primary
233
- # values of each section that has to be deleted.
234
- #
235
- # This method requires the following permissions:
236
- #
237
- # * delete
259
+ # Deletes a number of sections and all the related data. These sections
260
+ # should be specified in the POST array "section_ids[]".
238
261
  #
239
- # @author Yorick Peterse
240
- # @since 0.1
262
+ # @since 0.1
263
+ # @event before_delete_section
264
+ # @event after_delete_section
265
+ # @permission delete_section
241
266
  #
242
267
  def delete
243
- require_permissions(:delete)
268
+ authorize_user!(:delete_section)
244
269
 
245
- if !request.params['section_ids'] or request.params['section_ids'].empty?
270
+ if !request.params['section_ids'] \
271
+ or request.params['section_ids'].empty?
246
272
  message(:error, lang('sections.errors.no_delete'))
247
273
  redirect_referrer
248
274
  end
249
275
 
250
276
  request.params['section_ids'].each do |id|
277
+ section = ::Sections::Model::Section[id]
278
+
279
+ next if section.nil?
280
+ Zen::Event.call(:before_delete_section, section)
281
+
251
282
  begin
252
- Section[id.to_i].destroy
253
- message(:success, lang('sections.success.delete'))
283
+ section.destroy
254
284
  rescue => e
255
285
  Ramaze::Log.error(e.inspect)
256
286
  message(:error, lang('sections.errors.delete') % id)
257
287
 
258
288
  redirect_referrer
259
289
  end
290
+
291
+ Zen::Event.call(:after_delete_section, section)
260
292
  end
261
293
 
294
+ message(:success, lang('sections.success.delete'))
262
295
  redirect_referrer
263
296
  end
264
297
  end # Sections
@@ -3,14 +3,12 @@ module Ramaze
3
3
  ##
4
4
  # Helper for the sections package.
5
5
  #
6
- # @author Yorick Peterse
7
6
  # @since 0.2.8
8
7
  #
9
8
  module Section
10
9
  ##
11
10
  # Validates the section ID and returns the section if it's valid.
12
11
  #
13
- # @author Yorick Peterse
14
12
  # @since 0.2.8
15
13
  # @param [Fixnum] section_id The ID of the section to validate.
16
14
  # @return [Sections::Model::Section]
@@ -29,13 +27,12 @@ module Ramaze
29
27
  ##
30
28
  # Validates a section entry and returns it if it's valid.
31
29
  #
32
- #
33
- # @author Yorick Peterse
30
+ #
34
31
  # @since 0.2.8
35
32
  # @param [Fixnum] section_entry_id The ID of the section entry to
36
- # validate.
33
+ # validate.
37
34
  # @param [Fixnum] section_id The ID of the section to use when
38
- # redirecting the user to the overview of all entries.
35
+ # redirecting the user to the overview of all entries.
39
36
  # @return [Sections::Model::SectionEntry]
40
37
  #
41
38
  def validate_section_entry(section_entry_id, section_id)