zen 0.3 → 0.4

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 (373) hide show
  1. data/.gems +3 -2
  2. data/.rvmrc +1 -1
  3. data/.travis.yml +5 -0
  4. data/.yardopts +2 -1
  5. data/LICENSE +1 -1
  6. data/README.md +28 -24
  7. data/Rakefile +5 -2
  8. data/guide/asset_management.md +6 -6
  9. data/guide/autosaving_forms.md +42 -0
  10. data/guide/changelog.md +41 -0
  11. data/guide/faq.md +49 -0
  12. data/guide/getting_started.md +24 -13
  13. data/guide/hacking.md +40 -9
  14. data/guide/images/categories/categories.png +0 -0
  15. data/guide/images/categories/category_groups.png +0 -0
  16. data/guide/images/categories/new_category.png +0 -0
  17. data/guide/images/categories/new_category_group.png +0 -0
  18. data/guide/images/comments/comments.png +0 -0
  19. data/guide/images/comments/edit_comment.png +0 -0
  20. data/guide/images/custom_fields/custom_field_groups.png +0 -0
  21. data/guide/images/custom_fields/custom_field_types.png +0 -0
  22. data/guide/images/custom_fields/custom_fields.png +0 -0
  23. data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
  24. data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
  25. data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
  26. data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
  27. data/guide/images/dashboard/added.png +0 -0
  28. data/guide/images/dashboard/columns.png +0 -0
  29. data/guide/images/dashboard/dashboard.png +0 -0
  30. data/guide/images/dashboard/options.png +0 -0
  31. data/guide/images/menus/edit_menu.png +0 -0
  32. data/guide/images/menus/edit_menu_item.png +0 -0
  33. data/guide/images/menus/menu_item_hierarchy.png +0 -0
  34. data/guide/images/menus/menu_items.png +0 -0
  35. data/guide/images/menus/menus.png +0 -0
  36. data/guide/images/sections/edit_entry.png +0 -0
  37. data/guide/images/sections/edit_entry_categories.png +0 -0
  38. data/guide/images/sections/edit_entry_general.png +0 -0
  39. data/guide/images/sections/edit_entry_meta.png +0 -0
  40. data/guide/images/sections/edit_section_comments.png +0 -0
  41. data/guide/images/sections/edit_section_general.png +0 -0
  42. data/guide/images/sections/edit_section_groups.png +0 -0
  43. data/guide/images/sections/entries.png +0 -0
  44. data/guide/images/sections/sections.png +0 -0
  45. data/guide/images/settings/overview_general.png +0 -0
  46. data/guide/images/settings/overview_security.png +0 -0
  47. data/guide/images/settings/overview_user.png +0 -0
  48. data/guide/images/users/edit_user.png +0 -0
  49. data/guide/images/users/edit_user_group.png +0 -0
  50. data/guide/images/users/edit_user_group_permissions.png +0 -0
  51. data/guide/images/users/edit_user_permissions.png +0 -0
  52. data/guide/images/users/overview.png +0 -0
  53. data/guide/images/users/user_groups_overview.png +0 -0
  54. data/guide/installation.md +7 -1
  55. data/guide/javascript.md +36 -273
  56. data/guide/javascript/zen_autosave.md +26 -0
  57. data/guide/javascript/zen_editor.md +83 -0
  58. data/guide/javascript/zen_hash.md +34 -0
  59. data/guide/javascript/zen_htmltable.md +78 -0
  60. data/guide/javascript/zen_tabs.md +44 -0
  61. data/guide/javascript/zen_window.md +49 -0
  62. data/guide/zen_compared.md +201 -0
  63. data/lib/vendor/sequel_sluggable.rb +1 -1
  64. data/lib/zen.rb +64 -44
  65. data/lib/zen/asset_groups.rb +10 -10
  66. data/lib/zen/bin/create.rb +8 -1
  67. data/lib/zen/helper/breadcrumb.rb +4 -12
  68. data/lib/zen/helper/controller.rb +209 -6
  69. data/lib/zen/helper/locale.rb +19 -0
  70. data/lib/zen/helper/search.rb +1 -1
  71. data/lib/zen/helper/stacked_aspect.rb +7 -43
  72. data/lib/zen/helper/theme.rb +3 -3
  73. data/lib/zen/language.rb +5 -10
  74. data/lib/zen/language/translation.rb +1 -1
  75. data/lib/zen/layout/admin.xhtml +41 -25
  76. data/lib/zen/layout/login.xhtml +8 -3
  77. data/lib/zen/migrator.rb +54 -0
  78. data/lib/zen/model/helper.rb +20 -1
  79. data/lib/zen/model/init.rb +2 -0
  80. data/lib/zen/model/plugin/events.rb +158 -0
  81. data/lib/zen/package.rb +32 -6
  82. data/lib/zen/package/all.rb +1 -0
  83. data/lib/zen/package/categories/lib/categories.rb +6 -6
  84. data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
  85. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
  86. data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
  87. data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
  88. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
  89. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
  90. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
  91. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
  92. data/lib/zen/package/comments/lib/comments.rb +5 -5
  93. data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
  94. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
  95. data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
  96. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
  97. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
  98. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
  99. data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
  100. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
  101. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
  102. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
  103. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
  104. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
  105. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
  106. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
  107. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
  108. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
  109. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
  110. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
  111. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
  112. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
  113. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
  114. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
  115. data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
  116. data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
  117. data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
  118. data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
  119. data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
  120. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
  121. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
  122. data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
  123. data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
  124. data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
  125. data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
  126. data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
  127. data/lib/zen/package/extensions/lib/extensions.rb +5 -5
  128. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
  129. data/lib/zen/package/menu.rb +6 -1
  130. data/lib/zen/package/menus/lib/menus.rb +6 -4
  131. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
  132. data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
  133. data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
  134. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
  135. data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
  136. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
  137. data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
  138. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
  139. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
  140. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
  141. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
  142. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
  143. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
  144. data/lib/zen/package/sections/lib/sections.rb +9 -4
  145. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
  146. data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
  147. data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
  148. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
  149. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
  150. data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
  151. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
  152. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
  153. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
  154. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
  155. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
  156. data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
  157. data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
  158. data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
  159. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
  160. data/lib/zen/package/settings/lib/settings.rb +14 -5
  161. data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
  162. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
  163. data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
  164. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
  165. data/lib/zen/package/users/lib/users.rb +18 -19
  166. data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
  167. data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
  168. data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
  169. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
  170. data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
  171. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
  172. data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
  173. data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
  174. data/lib/zen/package/users/lib/users/model/user.rb +57 -4
  175. data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
  176. data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
  177. data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
  178. data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
  179. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
  180. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
  181. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
  182. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
  183. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
  184. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
  185. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
  186. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
  187. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
  188. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
  189. data/lib/zen/public/admin/zen/css/buttons.css +106 -0
  190. data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
  191. data/lib/zen/public/admin/zen/css/editor.css +69 -0
  192. data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
  193. data/lib/zen/public/admin/zen/css/general.css +183 -0
  194. data/lib/zen/public/admin/zen/css/layout.css +224 -0
  195. data/lib/zen/public/admin/zen/css/messages.css +34 -0
  196. data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
  197. data/lib/zen/public/admin/zen/css/tables.css +57 -0
  198. data/lib/zen/public/admin/zen/css/tabs.css +84 -0
  199. data/lib/zen/public/admin/zen/css/window.css +74 -0
  200. data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
  201. data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
  202. data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
  203. data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
  204. data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
  205. data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
  206. data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
  207. data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
  208. data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
  209. data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
  210. data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
  211. data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
  212. data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
  213. data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
  214. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
  215. data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
  216. data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
  217. data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
  218. data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
  219. data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
  220. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
  221. data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
  222. data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
  223. data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
  224. data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
  225. data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
  226. data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
  227. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
  228. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
  229. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
  230. data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
  231. data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
  232. data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
  233. data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
  234. data/lib/zen/security.rb +50 -0
  235. data/lib/zen/spec/helper.rb +5 -120
  236. data/lib/zen/spec/helper/capybara.rb +75 -0
  237. data/lib/zen/spec/helper/general.rb +75 -0
  238. data/lib/zen/spec/simplecov.rb +1 -0
  239. data/lib/zen/task/build.rake +2 -21
  240. data/lib/zen/task/clean.rake +1 -10
  241. data/lib/zen/task/db.rake +4 -10
  242. data/lib/zen/task/package.rake +2 -5
  243. data/lib/zen/task/setup.rake +1 -1
  244. data/lib/zen/task/test.rake +6 -6
  245. data/lib/zen/task/theme.rake +2 -5
  246. data/lib/zen/theme.rb +26 -22
  247. data/lib/zen/version.rb +1 -1
  248. data/lib/zen/view/bottom.xhtml +2 -3
  249. data/lib/zen/view/search.xhtml +3 -5
  250. data/proto/app/config/config.rb.erb +1 -1
  251. data/proto/app/theme/default/index.xhtml +116 -20
  252. data/proto/app/theme/partials/head.xhtml +9 -0
  253. data/proto/app/theme/partials/sidebar.xhtml +40 -0
  254. data/proto/app/theme/theme.rb +3 -0
  255. data/spec/Rakefile +1 -2
  256. data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
  257. data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
  258. data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
  259. data/spec/fixtures/zen/theme/theme.rb +2 -2
  260. data/spec/helper.rb +19 -10
  261. data/spec/zen/controller/admin_controller.rb +3 -3
  262. data/spec/zen/controller/main_controller.rb +7 -7
  263. data/spec/zen/controller/preview.rb +3 -3
  264. data/spec/zen/event.rb +4 -4
  265. data/spec/zen/helper/breadcrumb.rb +4 -8
  266. data/spec/zen/helper/controller.rb +47 -4
  267. data/spec/zen/helper/locale.rb +3 -3
  268. data/spec/zen/helper/message.rb +4 -4
  269. data/spec/zen/helper/stacked_aspect.rb +40 -0
  270. data/spec/zen/helper/theme.rb +9 -9
  271. data/spec/zen/language.rb +8 -8
  272. data/spec/zen/markup.rb +6 -6
  273. data/spec/zen/package.rb +11 -9
  274. data/spec/zen/package/categories/controller/categories.rb +56 -24
  275. data/spec/zen/package/categories/controller/category_groups.rb +55 -23
  276. data/spec/zen/package/categories/helper/category.rb +5 -5
  277. data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
  278. data/spec/zen/package/comments/anti_spam.rb +4 -4
  279. data/spec/zen/package/comments/controller/comments.rb +95 -24
  280. data/spec/zen/package/comments/controller/comments_form.rb +31 -26
  281. data/spec/zen/package/comments/helper/comment.rb +3 -3
  282. data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
  283. data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
  284. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
  285. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
  286. data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
  287. data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
  288. data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
  289. data/spec/zen/package/dashboard/widget.rb +56 -0
  290. data/spec/zen/package/extensions/controller/extensions.rb +4 -4
  291. data/spec/zen/package/menus/controller/menu_items.rb +48 -39
  292. data/spec/zen/package/menus/controller/menus.rb +55 -24
  293. data/spec/zen/package/menus/helper/menu.rb +6 -14
  294. data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
  295. data/spec/zen/package/menus/model/menu.rb +121 -0
  296. data/spec/zen/package/menus/model/menu_item.rb +34 -0
  297. data/spec/zen/package/sections/controller/section_entries.rb +104 -39
  298. data/spec/zen/package/sections/controller/sections.rb +60 -27
  299. data/spec/zen/package/sections/helper/section.rb +5 -5
  300. data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
  301. data/spec/zen/package/sections/widget.rb +44 -0
  302. data/spec/zen/package/settings/controller/settings.rb +18 -16
  303. data/spec/zen/package/settings/settings.rb +12 -12
  304. data/spec/zen/package/users/controller/user_groups.rb +61 -29
  305. data/spec/zen/package/users/controller/users.rb +118 -39
  306. data/spec/zen/package/users/helper/access.rb +3 -3
  307. data/spec/zen/package/users/helper/acl.rb +4 -4
  308. data/spec/zen/package/users/helper/users.rb +5 -5
  309. data/spec/zen/security.rb +25 -0
  310. data/spec/zen/theme.rb +20 -18
  311. data/spec/zen/validation.rb +5 -5
  312. data/spec/zen/vendor/sequel_sluggable.rb +12 -0
  313. data/zen.gemspec +27 -4
  314. metadata +182 -124
  315. data/AUTHORS +0 -4
  316. data/guide/_static/categories/categories.png +0 -0
  317. data/guide/_static/categories/category_groups.png +0 -0
  318. data/guide/_static/categories/new_category.png +0 -0
  319. data/guide/_static/categories/new_category_group.png +0 -0
  320. data/guide/_static/comments/comments.png +0 -0
  321. data/guide/_static/comments/edit_comment.png +0 -0
  322. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  323. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  324. data/guide/_static/custom_fields/custom_fields.png +0 -0
  325. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  326. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  327. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  328. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  329. data/guide/_static/menus/edit_menu.png +0 -0
  330. data/guide/_static/menus/edit_menu_item.png +0 -0
  331. data/guide/_static/menus/menu_items.png +0 -0
  332. data/guide/_static/menus/menus.png +0 -0
  333. data/guide/_static/sections/edit_entry.png +0 -0
  334. data/guide/_static/sections/edit_entry_categories.png +0 -0
  335. data/guide/_static/sections/edit_entry_general.png +0 -0
  336. data/guide/_static/sections/edit_entry_meta.png +0 -0
  337. data/guide/_static/sections/edit_section_comments.png +0 -0
  338. data/guide/_static/sections/edit_section_general.png +0 -0
  339. data/guide/_static/sections/edit_section_groups.png +0 -0
  340. data/guide/_static/sections/entries.png +0 -0
  341. data/guide/_static/sections/sections.png +0 -0
  342. data/guide/_static/settings/overview_general.png +0 -0
  343. data/guide/_static/settings/overview_security.png +0 -0
  344. data/guide/_static/settings/overview_user.png +0 -0
  345. data/guide/_static/users/edit_user.png +0 -0
  346. data/guide/_static/users/edit_user_group.png +0 -0
  347. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  348. data/guide/_static/users/edit_user_permissions.png +0 -0
  349. data/guide/_static/users/overview.png +0 -0
  350. data/guide/_static/users/user_groups_overview.png +0 -0
  351. data/lib/zen/controller/translations.rb +0 -49
  352. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
  353. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
  354. data/lib/zen/public/admin/css/zen/buttons.css +0 -46
  355. data/lib/zen/public/admin/css/zen/editor.css +0 -88
  356. data/lib/zen/public/admin/css/zen/general.css +0 -109
  357. data/lib/zen/public/admin/css/zen/grid.css +0 -100
  358. data/lib/zen/public/admin/css/zen/layout.css +0 -184
  359. data/lib/zen/public/admin/css/zen/messages.css +0 -54
  360. data/lib/zen/public/admin/css/zen/tables.css +0 -97
  361. data/lib/zen/public/admin/css/zen/tabs.css +0 -47
  362. data/lib/zen/public/admin/css/zen/window.css +0 -73
  363. data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
  364. data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
  365. data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
  366. data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
  367. data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
  368. data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
  369. data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
  370. data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
  371. data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
  372. data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
  373. data/lib/zen/view/main.xhtml +0 -19
@@ -10,15 +10,15 @@ module Users
10
10
  # will show an overview of all existing groups or a message saying no groups
11
11
  # have been added yet.
12
12
  #
13
- # ![User Groups](../../_static/users/user_groups_overview.png)
13
+ # ![User Groups](../../images/users/user_groups_overview.png)
14
14
  #
15
15
  # Editing a user group can be done by clicking on the name of the group,
16
16
  # creating a new one can be done by clicking the button "New group". When
17
17
  # creating or editing a group you'll be presented with the form shown in the
18
18
  # images below.
19
19
  #
20
- # ![Edit Group](../../_static/users/edit_user_group.png)
21
- # ![Group Permissions](../../_static/users/edit_user_group_permissions.png)
20
+ # ![Edit Group](../../images/users/edit_user_group.png)
21
+ # ![Group Permissions](../../images/users/edit_user_group_permissions.png)
22
22
  #
23
23
  # In this form you can fill in the following fields:
24
24
  #
@@ -45,32 +45,21 @@ module Users
45
45
  # * new_user_group
46
46
  # * delete_user_group
47
47
  #
48
- # ## Events
49
- #
50
- # All events in this controller receive an instance of
51
- # {Users::Model::UserGroup}. Just like other controllers the event
52
- # ``after_delete_user_group`` will receive a user group that has already
53
- # been destroyed using ``#destroy()``.
54
- #
55
48
  # @since 0.1
56
49
  # @map /admin/user-groups
57
- # @event before_new_user_group
58
- # @event after_new_user_user
59
- # @event before_edit_user_group
60
- # @event after_edit_user_group
61
- # @event before_delete_user_group
62
- # @event after_delete_user_group
63
50
  #
64
51
  class UserGroups < Zen::Controller::AdminController
65
52
  helper :users
66
53
  map '/admin/user-groups'
67
54
  title 'user_groups.titles.%s'
68
55
 
56
+ autosave Model::UserGroup, Model::UserGroup::COLUMNS, :edit_user_group
57
+
69
58
  csrf_protection :save, :delete
70
59
  load_asset_group :tabs
71
60
 
72
- serve :javascript, ['/admin/js/users/permissions'], :minify => false
73
- serve :css, ['/admin/css/users/permissions.css'], :minify => false
61
+ serve :javascript, ['/admin/users/js/users'], :name => 'users'
62
+ serve :css, ['/admin/users/css/users.css'], :name => 'users'
74
63
 
75
64
  before(:index, :edit, :new) do
76
65
  @boolean_hash = {
@@ -114,7 +103,8 @@ module Users
114
103
  lang('user_groups.titles.edit')
115
104
  )
116
105
 
117
- @user_group = flash[:form_data] || validate_user_group(id)
106
+ @user_group = validate_user_group(id)
107
+ @user_group.set(flash[:form_data]) if flash[:form_data]
118
108
  @permissions = @user_group.permissions.map { |p| p.permission.to_sym }
119
109
 
120
110
  render_view(:form)
@@ -134,7 +124,8 @@ module Users
134
124
  lang('user_groups.titles.new')
135
125
  )
136
126
 
137
- @user_group = flash[:form_data] || ::Users::Model::UserGroup.new
127
+ @user_group = Model::UserGroup.new
128
+ @user_group.set(flash[:form_data]) if flash[:form_data]
138
129
 
139
130
  render_view(:form)
140
131
  end
@@ -146,45 +137,34 @@ module Users
146
137
  # @since 0.1
147
138
  # @permission new_user_group (when creating a new group)
148
139
  # @permission edit_user_group (when editing a group)
149
- # @event before_new_user_group
150
- # @event after_new_user_group
151
- # @event before_edit_user_group
152
- # @event after_edit_user_group
153
140
  #
154
141
  def save
155
- post = request.subset(:id, :name, :slug, :description, :super_group)
142
+ post = post_fields(*Model::UserGroup::COLUMNS)
143
+ id = request.params['id']
156
144
 
157
- if post['id'] and !post['id'].empty?
145
+ if id and !id.empty?
158
146
  authorize_user!(:edit_user_group)
159
147
 
160
- user_group = validate_user_group(post['id'])
161
- save_action = :save
162
- before_event = :before_edit_user_group
163
- after_event = :after_edit_user_group
148
+ user_group = validate_user_group(id)
149
+ save_action = :save
164
150
  else
165
151
  authorize_user!(:new_user_group)
166
152
 
167
- user_group = ::Users::Model::UserGroup.new
168
- save_action = :new
169
- before_event = :before_new_user_group
170
- after_event = :after_new_user_group
153
+ user_group = Model::UserGroup.new
154
+ save_action = :new
171
155
  end
172
156
 
173
- post.delete('id')
174
-
175
157
  success = lang("user_groups.success.#{save_action}")
176
158
  error = lang("user_groups.errors.#{save_action}")
177
159
 
178
160
  begin
179
- post.each { |k, v| user_group.send("#{k}=", v) }
180
- Zen::Event.call(before_event, user_group)
181
-
161
+ user_group.set(post)
182
162
  user_group.save
183
163
  rescue => e
184
- Ramaze::Log.error(e.inspect)
164
+ Ramaze::Log.error(e)
185
165
  message(:error, error)
186
166
 
187
- flash[:form_data] = user_group
167
+ flash[:form_data] = post
188
168
  flash[:form_errors] = user_group.errors
189
169
 
190
170
  redirect_referrer
@@ -199,8 +179,6 @@ module Users
199
179
  )
200
180
  end
201
181
 
202
- Zen::Event.call(after_event, user_group)
203
-
204
182
  message(:success, success)
205
183
  redirect(UserGroups.r(:edit, user_group.id))
206
184
  end
@@ -210,8 +188,6 @@ module Users
210
188
  #
211
189
  # @since 0.1
212
190
  # @permission delete_user_group
213
- # @event before_delete_user_group
214
- # @event after_delete_user_group
215
191
  #
216
192
  def delete
217
193
  authorize_user!(:delete_user_group)
@@ -226,21 +202,18 @@ module Users
226
202
  group = ::Users::Model::UserGroup[id]
227
203
 
228
204
  next if group.nil?
229
- Zen::Event.call(:before_delete_user_group, group)
230
205
 
231
206
  begin
232
207
  group.destroy
233
208
  rescue => e
234
- Ramaze::Log.error(e.inspect)
209
+ Ramaze::Log.error(e)
235
210
  message(:error, lang('user_groups.errors.delete') % id)
236
211
 
237
212
  redirect_referrer
238
213
  end
239
-
240
- Zen::Event.call(:after_delete_user_group, group)
241
214
  end
242
215
 
243
- message(:success, lang('user_groups.success.delete'))
216
+ message(:success, lang('user_groups.success.delete'))
244
217
  redirect_referrer
245
218
  end
246
219
  end # UserGroups
@@ -37,14 +37,14 @@ module Users
37
37
  # permissions) you should see a page that looks like the one shown in the
38
38
  # image below.
39
39
  #
40
- # ![Users](../../_static/users/overview.png)
40
+ # ![Users](../../images/users/overview.png)
41
41
  #
42
42
  # This overview allows you to edit users (by clicking on their Email
43
43
  # addresses), create new ones or delete existing users. When editing or
44
44
  # creating a user you'll be presented a form as shown in the images below.
45
45
  #
46
- # ![Edit User](../../_static/users/edit_user.png)
47
- # ![Edit Permissions](../../_static/users/edit_user_permissions.png)
46
+ # ![Edit User](../../images/users/edit_user.png)
47
+ # ![Edit Permissions](../../images/users/edit_user_permissions.png)
48
48
  #
49
49
  # In this form the following fields can be filled:
50
50
  #
@@ -78,32 +78,8 @@ module Users
78
78
  # * edit_user
79
79
  # * delete_user
80
80
  #
81
- # ## Events
82
- #
83
- # Events in this controller receive an instance of {Users::Model::User}, the
84
- # ``after_delete_user`` event receives an instance that has already been
85
- # destroyed. Keep in mind that changing the Email address or password of a
86
- # user will cause their session to no longer be valid, requiring them to log
87
- # in again.
88
- #
89
- # @example Sending an Email for a new user
90
- # Zen::Event.listen(:after_new_user) do |user|
91
- # Mail.deliver do
92
- # from 'user@domain.tld'
93
- # to user.email
94
- # subject 'Your new account'
95
- # body "Dear #{user.name}, your account has been created."
96
- # end
97
- # end
98
- #
99
81
  # @since 0.1
100
82
  # @map /admin/users
101
- # @event before_new_user
102
- # @event after_new_user
103
- # @event before_edit_user
104
- # @event after_edit_user
105
- # @event before_delete_user
106
- # @event after_delete_user
107
83
  # @event user_login
108
84
  # @event before_register_user
109
85
  # @event after_register_user
@@ -114,13 +90,14 @@ module Users
114
90
  title 'users.titles.%s'
115
91
  allow [:login, :logout, :register]
116
92
 
117
- csrf_protection :save, :delete
118
-
119
- serve :javascript, ['/admin/js/users/permissions'], :minify => false
120
- serve :css, ['/admin/css/users/permissions'], :minify => false
93
+ autosave Model::User, Model::User::COLUMNS, :edit_user
121
94
 
95
+ csrf_protection :save, :delete
122
96
  load_asset_group :tabs
123
97
 
98
+ serve :javascript, ['/admin/users/js/users'], :name => 'users'
99
+ serve :css, ['/admin/users/css/users.css'], :name => 'users'
100
+
124
101
  set_layout :admin => [:index, :edit, :new],
125
102
  :login => [:login, :register]
126
103
 
@@ -137,10 +114,10 @@ module Users
137
114
  set_breadcrumbs(lang('users.titles.index'))
138
115
 
139
116
  @users = search do |query|
140
- ::Users::Model::User.search(query).order(:id.asc)
117
+ Model::User.search(query).order(:id.asc)
141
118
  end
142
119
 
143
- @users ||= ::Users::Model::User.order(:id.asc)
120
+ @users ||= Model::User.order(:id.asc)
144
121
  @users = @users.eager(:user_status)
145
122
  @users = paginate(@users)
146
123
  end
@@ -153,15 +130,17 @@ module Users
153
130
  # @permission edit_user
154
131
  #
155
132
  def edit(id)
156
- authorize_user!(:edit_user)
133
+ authorize_user!(:edit_user) unless user.id == id.to_i
157
134
 
158
135
  set_breadcrumbs(
159
136
  Users.a(lang('users.titles.index'), :index),
160
137
  lang('users.titles.edit')
161
138
  )
162
139
 
163
- @user = flash[:form_data] || validate_user(id)
164
- @user_group_pks = ::Users::Model::UserGroup.pk_hash(:name).invert
140
+ @user = validate_user(id)
141
+ @user.set(flash[:form_data]) if flash[:form_data]
142
+
143
+ @user_group_pks = Model::UserGroup.pk_hash(:name).invert
165
144
  @permissions = @user.permissions.map { |p| p.permission.to_sym }
166
145
 
167
146
  render_view(:form)
@@ -181,8 +160,10 @@ module Users
181
160
  lang('users.titles.new')
182
161
  )
183
162
 
184
- @user = flash[:form_data] || ::Users::Model::User.new
185
- @user_group_pks = ::Users::Model::UserGroup.pk_hash(:name).invert
163
+ @user = Model::User.new
164
+ @user_group_pks = Model::UserGroup.pk_hash(:name).invert
165
+
166
+ @user.set(flash[:form_data]) if flash[:form_data]
186
167
 
187
168
  render_view(:form)
188
169
  end
@@ -196,12 +177,12 @@ module Users
196
177
  def login
197
178
  if request.post?
198
179
  # Let's see if we can authenticate
199
- if user_login(request.subset(:email, :password))
180
+ if user_login(post_fields(:email, :password))
200
181
  user.update(:last_login => Time.new)
201
182
 
202
183
  Zen::Event.call(:user_login, user)
203
184
  message(:success, lang('users.success.login'))
204
- redirect(::Sections::Controller::Sections.r(:index))
185
+ redirect(Dashboard::Controller::Dashboard.r(:index))
205
186
  else
206
187
  message(:error, lang('users.errors.login'))
207
188
  end
@@ -238,16 +219,17 @@ module Users
238
219
  # @event after_register_user
239
220
  #
240
221
  def register
241
- redirect(::Sections::Controller::Sections.r(:index)) if logged_in?
222
+ redirect(Dashboard::Controller::Dashboard.r(:index)) if logged_in?
242
223
  redirect(r(:login)) unless get_setting(:allow_registration).true?
243
224
 
244
225
  if request.post?
245
- post = request.subset(:name, :email, :password)
226
+ post = post_fields(:name, :email, :password)
246
227
  user = Model::User.new(post)
247
228
 
248
229
  # Check if the passwords match.
249
230
  if post['password'] != request.params['confirm_password']
250
- flash[:form_data] = user
231
+ post.delete('password')
232
+ flash[:form_data] = post
251
233
 
252
234
  message(:error, lang('users.errors.no_password_match'))
253
235
  redirect(r(:register))
@@ -258,11 +240,13 @@ module Users
258
240
  begin
259
241
  user.save
260
242
  rescue => e
261
- Ramaze::Log.error(e.inspect)
243
+ Ramaze::Log.error(e)
262
244
  message(:error, lang('users.errors.register'))
263
245
 
246
+ post.delete('password')
247
+
264
248
  flash[:form_errors] = user.errors
265
- flash[:form_data] = user
249
+ flash[:form_data] = post
266
250
 
267
251
  redirect(r(:register))
268
252
  end
@@ -273,7 +257,8 @@ module Users
273
257
  redirect(r(:login))
274
258
  end
275
259
 
276
- @user = flash[:form_data] || Model::User.new
260
+ @user = Model::User.new
261
+ @uset.set(flash[:form_data]) if flash[:form_data]
277
262
  end
278
263
 
279
264
  ##
@@ -282,40 +267,21 @@ module Users
282
267
  # @since 0.1
283
268
  # @permission new_user (when creating a new user)
284
269
  # @permission edit_user (when editing a user)
285
- # @event before_new_user
286
- # @event after_new_user
287
- # @event before_edit_user
288
- # @event after_edit_user
289
270
  #
290
271
  def save
291
- post = request.subset(
292
- :id,
293
- :email,
294
- :name,
295
- :website,
296
- :password,
297
- :confirm_password,
298
- :user_status_id,
299
- :language,
300
- :frontend_language,
301
- :date_format,
302
- :user_group_pks
303
- )
272
+ post = post_fields(*Model::User::COLUMNS)
273
+ id = request.params['id']
304
274
 
305
- if post['id'] and !post['id'].empty?
306
- authorize_user!(:edit_user)
275
+ if id and !id.empty?
276
+ authorize_user!(:edit_user) unless id.to_i == user.id
307
277
 
308
- user = validate_user(post['id'])
309
- save_action = :save
310
- before_event = :before_edit_user
311
- after_event = :after_edit_user
278
+ user = validate_user(id)
279
+ save_action = :save
312
280
  else
313
281
  authorize_user!(:new_user)
314
282
 
315
- user = ::Users::Model::User.new
316
- save_action = :new
317
- before_event = :before_new_user
318
- after_event = :after_new_user
283
+ user = Model::User.new
284
+ save_action = :new
319
285
  end
320
286
 
321
287
  if post['password'] != post['confirm_password']
@@ -324,23 +290,32 @@ module Users
324
290
  end
325
291
 
326
292
  post.delete('confirm_password')
327
- post.delete('id')
328
293
 
329
294
  post['user_group_pks'] ||= []
330
- success = lang("users.success.#{save_action}")
331
- error = lang("users.errors.#{save_action}")
295
+ success = lang("users.success.#{save_action}")
296
+ error = lang("users.errors.#{save_action}")
297
+
298
+ unless user_authorized?(:assign_user_group)
299
+ post.delete('user_group_pks')
300
+ end
301
+
302
+ unless user_authorized?(:edit_user_status)
303
+ post.delete('user_status_id')
304
+ end
332
305
 
333
306
  begin
334
307
  post.each { |k, v| user.send("#{k}=", v) }
335
- Zen::Event.call(before_event, user)
336
308
 
337
309
  user.save
338
- user.user_group_pks = post['user_group_pks'] if save_action == :new
310
+
311
+ if save_action == :new and post['user_group_pks']
312
+ user.user_group_pks = post['user_group_pks']
313
+ end
339
314
  rescue => e
340
- Ramaze::Log.error(e.inspect)
315
+ Ramaze::Log.error(e)
341
316
  message(:error, error)
342
317
 
343
- flash[:form_data] = user
318
+ flash[:form_data] = post
344
319
  flash[:form_errors] = user.errors
345
320
 
346
321
  redirect_referrer
@@ -356,8 +331,6 @@ module Users
356
331
  )
357
332
  end
358
333
 
359
- Zen::Event.call(after_event, user)
360
-
361
334
  message(:success, success)
362
335
  redirect(Users.r(:edit, user.id))
363
336
  end
@@ -367,8 +340,6 @@ module Users
367
340
  #
368
341
  # @since 0.1
369
342
  # @permission delete_user
370
- # @event before_delete_user
371
- # @event after_delete_user
372
343
  #
373
344
  def delete
374
345
  authorize_user!(:delete_user)
@@ -379,22 +350,19 @@ module Users
379
350
  end
380
351
 
381
352
  request.params['user_ids'].each do |id|
382
- user = ::Users::Model::User[id]
353
+ user = Model::User[id]
383
354
 
384
355
  next if user.nil?
385
- Zen::Event.call(:before_delete_user, user)
386
356
 
387
357
  begin
388
358
  user.user_group_pks = []
389
359
  user.destroy
390
360
  rescue => e
391
- Ramaze::Log.error(e.inspect)
361
+ Ramaze::Log.error(e)
392
362
  message(:error, lang('users.errors.delete') % id)
393
363
 
394
364
  redirect_referrer
395
365
  end
396
-
397
- Zen::Event.call(:after_delete_user, user)
398
366
  end
399
367
 
400
368
  message(:success, lang('users.success.delete'))