zen 0.2.7 → 0.2.8

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 (303) hide show
  1. data/.gitignore +15 -0
  2. data/.mailmap +2 -0
  3. data/.rvmrc +2 -0
  4. data/.travis.yml +8 -3
  5. data/AUTHORS +1 -2
  6. data/CHANGELOG.md +48 -17
  7. data/README.md +44 -39
  8. data/Rakefile +4 -0
  9. data/bin/zen +5 -30
  10. data/lib/zen.rb +13 -19
  11. data/lib/zen/asset.rb +99 -64
  12. data/lib/zen/bin/create.rb +94 -0
  13. data/lib/zen/bin/runner.rb +118 -0
  14. data/lib/zen/controller/admin_controller.rb +52 -36
  15. data/lib/zen/controller/base_controller.rb +5 -5
  16. data/lib/zen/controller/frontend_controller.rb +7 -7
  17. data/lib/zen/controller/main_controller.rb +12 -10
  18. data/lib/zen/controller/preview.rb +15 -11
  19. data/lib/zen/helper/acl.rb +73 -53
  20. data/lib/zen/helper/blue_form_vendor.rb +689 -0
  21. data/lib/zen/helper/breadcrumb.rb +23 -19
  22. data/lib/zen/helper/message.rb +3 -3
  23. data/lib/zen/helper/theme.rb +18 -13
  24. data/lib/zen/language.rb +62 -58
  25. data/lib/zen/language/en/zen_general.yml +2 -4
  26. data/lib/zen/language/nl/zen_general.yml +2 -4
  27. data/lib/zen/layout/admin.xhtml +3 -12
  28. data/lib/zen/layout/login.xhtml +1 -6
  29. data/lib/zen/model/methods.rb +6 -6
  30. data/lib/zen/model/settings.rb +5 -4
  31. data/lib/zen/package.rb +47 -38
  32. data/lib/zen/package/all.rb +3 -5
  33. data/lib/zen/package/base.rb +7 -7
  34. data/lib/zen/package/categories/lib/categories.rb +8 -3
  35. data/lib/zen/package/categories/lib/categories/controller/categories.rb +81 -55
  36. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +45 -44
  37. data/lib/zen/package/categories/lib/categories/helper/category.rb +88 -0
  38. data/lib/zen/package/categories/lib/categories/language/en/categories.yml +5 -4
  39. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +5 -4
  40. data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +5 -4
  41. data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +5 -4
  42. data/lib/zen/package/categories/lib/categories/model/category.rb +15 -13
  43. data/lib/zen/package/categories/lib/categories/model/category_group.rb +3 -3
  44. data/lib/zen/package/categories/lib/categories/plugin/categories.rb +36 -25
  45. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +49 -56
  46. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +48 -35
  47. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +36 -29
  48. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +42 -37
  49. data/lib/zen/package/comments/lib/comments.rb +4 -1
  50. data/lib/zen/package/comments/lib/comments/controller/comments.rb +39 -32
  51. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +45 -26
  52. data/lib/zen/package/comments/lib/comments/helper/comment.rb +35 -0
  53. data/lib/zen/package/comments/lib/comments/language/en/comments.yml +9 -7
  54. data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +10 -8
  55. data/lib/zen/package/comments/lib/comments/model/comment.rb +31 -17
  56. data/lib/zen/package/comments/lib/comments/model/comment_status.rb +15 -0
  57. data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +27 -18
  58. data/lib/zen/package/comments/lib/comments/plugin/comments.rb +25 -20
  59. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +61 -54
  60. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +38 -23
  61. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +60 -0
  62. data/lib/zen/package/custom_fields/lib/custom_fields.rb +33 -7
  63. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +209 -0
  64. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +50 -47
  65. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +215 -0
  66. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +111 -73
  67. data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +79 -0
  68. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +20 -19
  69. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +40 -0
  70. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +34 -32
  71. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +5 -4
  72. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +40 -0
  73. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +18 -16
  74. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +31 -11
  75. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +15 -0
  76. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +50 -0
  77. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +28 -7
  78. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +33 -28
  79. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +48 -46
  80. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +61 -0
  81. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +93 -0
  82. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +105 -99
  83. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +43 -39
  84. data/lib/zen/package/custom_fields/migrations/1295255665_create_schema.rb +47 -16
  85. data/lib/zen/package/custom_fields/migrations/1310659580_custom_field_types.rb +148 -0
  86. data/lib/zen/package/custom_fields/migrations/1311694920_rename_css_class.rb +11 -0
  87. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +40 -35
  88. data/lib/zen/package/menus/lib/menus/controller/menus.rb +47 -43
  89. data/lib/zen/package/menus/lib/menus/helper/{menu_item.rb → menu.rb} +42 -15
  90. data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +5 -5
  91. data/lib/zen/package/menus/lib/menus/language/en/menus.yml +9 -8
  92. data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +8 -8
  93. data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +11 -10
  94. data/lib/zen/package/menus/lib/menus/model/menu.rb +5 -5
  95. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +6 -5
  96. data/lib/zen/package/menus/lib/menus/plugin/menus.rb +41 -43
  97. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +59 -63
  98. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +35 -30
  99. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +46 -37
  100. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +37 -37
  101. data/lib/zen/package/menus/migrations/1297184342_create_schema.rb +5 -5
  102. data/lib/zen/package/menus/migrations/1308671733_rename_order_column.rb +11 -0
  103. data/lib/zen/package/menus/migrations/1311695030_rename_css_class.rb +17 -0
  104. data/lib/zen/package/sections/lib/sections.rb +18 -11
  105. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +115 -109
  106. data/lib/zen/package/sections/lib/sections/controller/sections.rb +72 -50
  107. data/lib/zen/package/sections/lib/sections/helper/section.rb +53 -0
  108. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +5 -4
  109. data/lib/zen/package/sections/lib/sections/language/en/sections.yml +5 -4
  110. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +5 -4
  111. data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +5 -4
  112. data/lib/zen/package/sections/lib/sections/model/section.rb +17 -9
  113. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +192 -13
  114. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +13 -0
  115. data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +60 -39
  116. data/lib/zen/package/sections/lib/sections/plugin/sections.rb +14 -11
  117. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +100 -97
  118. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +41 -39
  119. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +95 -215
  120. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +48 -40
  121. data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +40 -0
  122. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +58 -0
  123. data/lib/zen/package/settings/lib/settings/controller/settings.rb +5 -8
  124. data/lib/zen/package/settings/lib/settings/model/setting.rb +2 -37
  125. data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +18 -1
  126. data/lib/zen/package/settings/lib/settings/plugin/settings.rb +13 -7
  127. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +2 -1
  128. data/lib/zen/package/users/lib/users.rb +3 -1
  129. data/lib/zen/package/users/lib/users/controller/access_rules.rb +77 -60
  130. data/lib/zen/package/users/lib/users/controller/user_groups.rb +41 -36
  131. data/lib/zen/package/users/lib/users/controller/users.rb +48 -42
  132. data/lib/zen/package/users/lib/users/helper/users.rb +72 -0
  133. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +6 -5
  134. data/lib/zen/package/users/lib/users/language/en/user_groups.yml +5 -4
  135. data/lib/zen/package/users/lib/users/language/en/users.yml +1 -0
  136. data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +5 -4
  137. data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +5 -4
  138. data/lib/zen/package/users/lib/users/language/nl/users.yml +1 -0
  139. data/lib/zen/package/users/lib/users/model/access_rule.rb +5 -1
  140. data/lib/zen/package/users/lib/users/model/user.rb +17 -10
  141. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +10 -37
  142. data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +49 -0
  143. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +105 -96
  144. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +48 -41
  145. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +42 -32
  146. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +43 -38
  147. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +76 -67
  148. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +43 -41
  149. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +12 -9
  150. data/lib/zen/package/users/migrations/1295281013_create_schema.rb +2 -2
  151. data/lib/zen/plugin.rb +56 -50
  152. data/lib/zen/plugin/markup/lib/markup/markup.rb +33 -21
  153. data/lib/zen/public/admin/css/zen/buttons.css +11 -7
  154. data/lib/zen/public/admin/css/zen/datepicker.css +6 -6
  155. data/lib/zen/public/admin/css/zen/forms.css +2 -1
  156. data/lib/zen/public/admin/css/zen/general.css +15 -10
  157. data/lib/zen/public/admin/css/zen/layout.css +51 -20
  158. data/lib/zen/public/admin/css/zen/tables.css +39 -11
  159. data/lib/zen/public/admin/css/zen/tabs.css +6 -4
  160. data/lib/zen/public/admin/css/zen/window.css +11 -11
  161. data/lib/zen/public/{favicon.ico → admin/favicon.ico} +0 -0
  162. data/lib/zen/public/admin/images/zen/icons/asc.png +0 -0
  163. data/lib/zen/public/admin/images/zen/icons/desc.png +0 -0
  164. data/lib/zen/public/admin/js/vendor/datepicker.js +0 -11
  165. data/lib/zen/public/admin/js/{mootools → vendor/mootools}/core.js +0 -1
  166. data/lib/zen/public/admin/js/{mootools → vendor/mootools}/more.js +100 -29
  167. data/lib/zen/public/admin/js/zen/index.js +48 -0
  168. data/lib/zen/public/admin/js/zen/lib/asset.js +111 -0
  169. data/lib/zen/public/admin/js/zen/{editor.js → lib/editor.js} +107 -127
  170. data/lib/zen/public/admin/js/zen/{editor → lib/editor}/markdown.js +7 -9
  171. data/lib/zen/public/admin/js/zen/{editor → lib/editor}/textile.js +7 -9
  172. data/lib/zen/public/admin/js/zen/lib/html_table.js +143 -0
  173. data/lib/zen/public/admin/js/zen/{tabs.js → lib/tabs.js} +40 -37
  174. data/lib/zen/public/admin/js/zen/{window.js → lib/window.js} +24 -20
  175. data/lib/zen/spec/bacon/color_output.rb +39 -0
  176. data/lib/zen/spec/helper.rb +152 -0
  177. data/lib/zen/spec/simplecov.rb +22 -0
  178. data/lib/zen/task/build.rake +20 -43
  179. data/lib/zen/task/clean.rake +2 -6
  180. data/lib/zen/task/db.rake +8 -12
  181. data/lib/zen/task/package.rake +4 -10
  182. data/lib/zen/task/plugin.rake +3 -9
  183. data/lib/zen/task/proto.rake +0 -62
  184. data/lib/zen/task/test.rake +6 -3
  185. data/lib/zen/task/theme.rake +4 -11
  186. data/lib/zen/theme.rb +22 -24
  187. data/lib/zen/validation.rb +34 -27
  188. data/lib/zen/version.rb +2 -8
  189. data/lib/zen/view/head.xhtml +7 -0
  190. data/lib/zen/view/main.xhtml +7 -22
  191. data/{proto/package/migrations → pkg}/.gitkeep +0 -0
  192. data/proto/app/app.rb +1 -0
  193. data/proto/app/config/config.rb +5 -4
  194. data/proto/app/config/database.rb +19 -41
  195. data/proto/app/config/middlewares.rb +32 -29
  196. data/proto/{package/lib/package/view/admin/package/index.xhtml → app/log/database/dev/.gitkeep} +0 -0
  197. data/proto/app/log/database/live/.gitkeep +0 -0
  198. data/spec/Rakefile +26 -0
  199. data/spec/fixtures/zen/asset.rb +18 -0
  200. data/spec/fixtures/zen/helper/acl.rb +39 -0
  201. data/spec/fixtures/zen/helper/message.rb +19 -0
  202. data/spec/fixtures/zen/language/en/spec.yml +10 -0
  203. data/spec/fixtures/zen/language/nl/spec.yml +7 -0
  204. data/spec/fixtures/zen/package.rb +17 -0
  205. data/spec/fixtures/zen/package/comments/controller/comments_form.rb +27 -0
  206. data/spec/fixtures/zen/package/settings/plugin/settings.rb +20 -0
  207. data/spec/fixtures/zen/plugin.rb +7 -0
  208. data/spec/fixtures/zen/theme/404.xhtml +1 -0
  209. data/spec/fixtures/zen/theme/default-section/index.xhtml +1 -0
  210. data/spec/fixtures/zen/theme/helper/404.xhtml +1 -0
  211. data/spec/fixtures/zen/theme/helper/partial.xhtml +1 -0
  212. data/spec/fixtures/zen/theme/helper/wrong_partial.xhtml +1 -0
  213. data/spec/fixtures/zen/theme/partials/partial.xhtml +1 -0
  214. data/spec/fixtures/zen/theme/theme.rb +11 -0
  215. data/spec/fixtures/zen/validation.rb +22 -0
  216. data/spec/helper.rb +41 -0
  217. data/spec/zen/all.rb +5 -0
  218. data/spec/zen/asset.rb +97 -0
  219. data/spec/zen/bin/create.rb +89 -0
  220. data/spec/zen/bin/runner.rb +47 -0
  221. data/spec/zen/controller/admin_controller.rb +26 -0
  222. data/spec/zen/controller/main_controller.rb +81 -0
  223. data/spec/zen/controller/preview.rb +33 -0
  224. data/spec/zen/helper/acl.rb +149 -0
  225. data/spec/zen/helper/breadcrumb.rb +38 -0
  226. data/spec/zen/helper/message.rb +31 -0
  227. data/spec/zen/helper/theme.rb +58 -0
  228. data/spec/zen/language.rb +55 -0
  229. data/spec/zen/package.rb +23 -0
  230. data/spec/zen/package/categories/controller/categories.rb +123 -0
  231. data/spec/zen/package/categories/controller/category_groups.rb +108 -0
  232. data/spec/zen/package/categories/helper/category.rb +75 -0
  233. data/spec/zen/package/categories/plugin/categories.rb +92 -0
  234. data/spec/zen/package/comments/controller/comments.rb +134 -0
  235. data/spec/zen/package/comments/controller/comments_form.rb +343 -0
  236. data/spec/zen/package/comments/helper/comment.rb +47 -0
  237. data/spec/zen/package/comments/plugin/anti_spam.rb +59 -0
  238. data/spec/zen/package/comments/plugin/comments.rb +107 -0
  239. data/spec/zen/package/custom_fields/blue_form_parameters.rb +183 -0
  240. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +120 -0
  241. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +169 -0
  242. data/spec/zen/package/custom_fields/controller/custom_fields.rb +158 -0
  243. data/spec/zen/package/custom_fields/helper/custom_field.rb +86 -0
  244. data/spec/zen/package/menus/controller/menu_items.rb +110 -0
  245. data/spec/zen/package/menus/controller/menus.rb +110 -0
  246. data/spec/zen/package/menus/helper/menu.rb +75 -0
  247. data/spec/zen/package/menus/plugin/menus.rb +120 -0
  248. data/spec/zen/package/sections/controller/section_entries.rb +201 -0
  249. data/spec/zen/package/sections/controller/sections.rb +116 -0
  250. data/spec/zen/package/sections/helper/section.rb +74 -0
  251. data/spec/zen/package/sections/plugin/section_entries.rb +161 -0
  252. data/spec/zen/package/sections/plugin/sections.rb +75 -0
  253. data/spec/zen/package/settings/controller/settings.rb +36 -0
  254. data/spec/zen/package/settings/plugin/settings.rb +33 -0
  255. data/spec/zen/package/users/controller/access_rules.rb +90 -0
  256. data/spec/zen/package/users/controller/user_groups.rb +101 -0
  257. data/spec/zen/package/users/controller/users.rb +130 -0
  258. data/spec/zen/package/users/helper/users.rb +97 -0
  259. data/spec/zen/plugin.rb +64 -0
  260. data/spec/zen/plugin/helper.rb +11 -0
  261. data/spec/zen/plugin/markup.rb +44 -0
  262. data/spec/zen/theme.rb +41 -0
  263. data/spec/zen/validation.rb +63 -0
  264. data/zen.gemspec +36 -0
  265. metadata +159 -113
  266. data/MANIFEST +0 -266
  267. data/lib/zen/bin/app.rb +0 -40
  268. data/lib/zen/ext/string.rb +0 -185
  269. data/lib/zen/helper/common.rb +0 -106
  270. data/lib/zen/package/categories/lib/categories/view/admin/categories/edit.xhtml +0 -7
  271. data/lib/zen/package/categories/lib/categories/view/admin/categories/new.xhtml +0 -7
  272. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/edit.xhtml +0 -7
  273. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/new.xhtml +0 -7
  274. data/lib/zen/package/comments/lib/comments/view/admin/comments/edit.xhtml +0 -7
  275. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/edit.xhtml +0 -7
  276. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/new.xhtml +0 -7
  277. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/edit.xhtml +0 -7
  278. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/new.xhtml +0 -7
  279. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/edit.xhtml +0 -7
  280. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/new.xhtml +0 -7
  281. data/lib/zen/package/menus/lib/menus/view/admin/menus/edit.xhtml +0 -7
  282. data/lib/zen/package/menus/lib/menus/view/admin/menus/new.xhtml +0 -7
  283. data/lib/zen/package/sections/lib/sections/view/admin/edit.xhtml +0 -7
  284. data/lib/zen/package/sections/lib/sections/view/admin/new.xhtml +0 -7
  285. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/edit.xhtml +0 -7
  286. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/new.xhtml +0 -7
  287. data/lib/zen/package/users/lib/users/view/admin/access-rules/edit.xhtml +0 -7
  288. data/lib/zen/package/users/lib/users/view/admin/access-rules/new.xhtml +0 -7
  289. data/lib/zen/package/users/lib/users/view/admin/user-groups/edit.xhtml +0 -7
  290. data/lib/zen/package/users/lib/users/view/admin/user-groups/new.xhtml +0 -7
  291. data/lib/zen/package/users/lib/users/view/admin/users/edit.xhtml +0 -7
  292. data/lib/zen/package/users/lib/users/view/admin/users/new.xhtml +0 -7
  293. data/lib/zen/plugin/controller.rb +0 -59
  294. data/lib/zen/public/admin/css/zen/notifications.css +0 -84
  295. data/lib/zen/public/admin/images/zen/icons/large/error.png +0 -0
  296. data/lib/zen/public/admin/images/zen/icons/large/notice.png +0 -0
  297. data/lib/zen/public/admin/images/zen/icons/large/success.png +0 -0
  298. data/lib/zen/public/admin/js/zen/core.js +0 -73
  299. data/lib/zen/public/admin/js/zen/init.js +0 -80
  300. data/proto/package/lib/package.rb +0 -21
  301. data/proto/package/lib/package/controller/controllers.rb +0 -50
  302. data/proto/package/lib/package/language/en/languages.yml +0 -4
  303. data/proto/package/lib/package/model/model.rb +0 -12
@@ -2,21 +2,22 @@
2
2
  <header>
3
3
  <h1>#{get_breadcrumbs}</h1>
4
4
  </header>
5
-
6
- <form method="post" action="#{@form_delete_url}">
5
+
6
+ <form method="post"
7
+ action="#{Sections::Controller::SectionEntries.r(:delete)}">
7
8
  <input type="hidden" name="csrf_token" value="#{get_csrf_token}" />
8
-
9
- <?r if @entries and !@entries.empty? ?>
10
-
11
- <table class="table">
9
+
10
+ <?r if !@entries.empty? ?>
11
+
12
+ <table>
12
13
  <thead>
13
14
  <tr>
14
15
  <?r if user_authorized?([:delete]) ?>
15
- <th>
16
+ <th class="no_sort">
16
17
  <input type="checkbox" />
17
18
  </th>
18
19
  <?r end ?>
19
-
20
+
20
21
  <th>#{lang('section_entries.labels.id')}</th>
21
22
  <th>#{lang('section_entries.labels.title')}</th>
22
23
  <th>#{lang('section_entries.labels.slug')}</th>
@@ -30,59 +31,66 @@
30
31
  <tr>
31
32
  <?r if user_authorized?([:delete]) ?>
32
33
  <td>
33
- <input type="checkbox" name="section_entry_ids[]" value="#{entry.id}" />
34
+ <input type="checkbox" name="section_entry_ids[]"
35
+ value="#{entry.id}" />
34
36
  </td>
35
37
  <?r end ?>
36
-
38
+
37
39
  <td>#{entry.id}</td>
38
-
40
+
39
41
  <?r if user_authorized?([:update]) ?>
40
42
  <td>
41
- #{anchor_to(
42
- entry.title,
43
- Sections::Controller::SectionEntries.r(:edit, @section_id, entry.id)
43
+ #{Sections::Controller::SectionEntries.a(
44
+ entry.title, :edit, @section_id, entry.id
44
45
  )}
45
46
  </td>
46
47
  <?r else ?>
47
48
  <td>#{entry.title}</td>
48
49
  <?r end ?>
49
-
50
+
50
51
  <td>#{entry.slug}</td>
51
- <td>#{@status_hash[entry.status]}</td>
52
- <td>#{entry.created_at.strftime(session[:user].date_format)}</td>
53
52
  <td>
54
- #{
55
- if entry.updated_at
53
+ #{lang(
54
+ "section_entries.special.status_hash.#{entry. \
55
+ section_entry_status.name}"
56
+ )}
57
+ </td>
58
+ <td>
59
+ #{entry.created_at.strftime(session[:user].date_format)}
60
+ </td>
61
+ <td>
62
+ #{if entry.updated_at
56
63
  entry.updated_at.strftime(session[:user].date_format)
57
- end
58
- }
64
+ end}
59
65
  </td>
60
66
  </tr>
61
67
  <?r end ?>
62
68
  </tbody>
63
69
  </table>
64
-
70
+
71
+ #{
72
+ if @entries.respond_to?(:navigation) and @entries.page_count > 1
73
+ @entries.navigation
74
+ end
75
+ }
76
+
65
77
  <?r else ?>
66
78
  <p>#{lang('section_entries.messages.no_entries')}</p>
67
79
  <?r end ?>
68
-
69
- <div class="clearfix">
70
-
71
- <?r if user_authorized?([:create]) ?>
72
- <div class="button">
73
- #{anchor_to(
74
- lang('section_entries.buttons.new'),
75
- Sections::Controller::SectionEntries.r(:new, @section_id)
76
- )}
77
- </div>
78
- <?r end ?>
79
-
80
- <?r if user_authorized?([:delete]) and @entries and !@entries.empty? ?>
81
- <div class="button">
82
- <input type="submit" value="#{lang('section_entries.buttons.delete')}" />
83
- </div>
84
- <?r end ?>
80
+
81
+ <?r if user_authorized?([:create]) ?>
82
+ <div class="button">
83
+ #{Sections::Controller::SectionEntries.a(
84
+ lang('section_entries.buttons.new'), :new, @section_id
85
+ )}
86
+ </div>
87
+ <?r end ?>
88
+
89
+ <?r if user_authorized?([:delete]) and !@entries.empty? ?>
90
+ <div class="button">
91
+ <input type="submit"
92
+ value="#{lang('section_entries.buttons.delete')}" />
85
93
  </div>
94
+ <?r end ?>
86
95
  </form>
87
-
88
96
  </article>
@@ -0,0 +1,40 @@
1
+ Sequel.migration do
2
+ # Updates the database with the changes specified in the block.
3
+ up do
4
+ # Make sure the settings table has been migrated
5
+ ::Zen::Plugin.plugin(:settings, :migrate)
6
+
7
+ if !Zen.database[:sections].all.empty?
8
+ default_section = Zen.database[:settings] \
9
+ .filter(:name => 'default_section') \
10
+ .all[0][:value]
11
+
12
+ default_section = Zen.database[:sections] \
13
+ .filter(:slug => default_section) \
14
+ .all[0][:id]
15
+
16
+ # Change the slug to an ID
17
+ Zen.database[:settings].filter(:name => 'default_section') \
18
+ .update(:value => default_section)
19
+ end
20
+ end
21
+
22
+ # Reverts the changes made in the up() block.
23
+ down do
24
+ default_section = Zen.database[:settings] \
25
+ .filter(:name => 'default_section') \
26
+ .all[0][:value]
27
+
28
+ section = Zen.database[:sections] \
29
+ .filter(:id => default_section) \
30
+ .all[0]
31
+
32
+ if !section.nil?
33
+ default_section = section[:slug]
34
+
35
+ # Change the ID back to a slug
36
+ Zen.database[:settings].filter(:name => 'default_section') \
37
+ .update(:value => default_section)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,58 @@
1
+ Sequel.migration do
2
+ # Updates the database with the changes specified in the block.
3
+ up do
4
+ create_table(:section_entry_statuses) do
5
+ primary_key :id
6
+
7
+ String :name, :null => false, :unique => true
8
+ end
9
+
10
+ # Get all existing entries
11
+ entries = Zen.database[:section_entries].all
12
+
13
+ # Replace the status column
14
+ drop_column(:section_entries, :status)
15
+
16
+ alter_table(:section_entries) do
17
+ add_foreign_key(
18
+ :section_entry_status_id,
19
+ :section_entry_statuses,
20
+ :on_delete => :cascade,
21
+ :on_update => :cascade,
22
+ :key => :id
23
+ )
24
+ end
25
+
26
+ # Insert the statuses and migrate the existing entries
27
+ ['published', 'draft'].each do |status|
28
+ status_id = Zen.database[:section_entry_statuses].insert(:name => status)
29
+
30
+ entries.each do |entry|
31
+ if entry[:status] === status
32
+ Zen.database[:section_entries].filter(:id => entry[:id]) \
33
+ .update(:section_entry_status_id => status_id)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # Reverts the changes made in the up() block.
40
+ down do
41
+ statuses = {}
42
+ entries = Zen.database[:section_entries].all
43
+
44
+ Zen.database[:section_entry_statuses].all.each do |status|
45
+ statuses[status[:id]] = status[:name]
46
+ end
47
+
48
+ drop_column(:section_entries, :section_entry_status_id)
49
+ add_column(:section_entries, :status, String, :default => 'draft')
50
+
51
+ entries.each do |entry|
52
+ Zen.database.filter(:id => entry[:id]) \
53
+ .update(:status => statuses[entry[:section_entry_status_id]])
54
+ end
55
+
56
+ drop_table(:section_entry_statuses)
57
+ end
58
+ end
@@ -15,7 +15,7 @@ module Settings
15
15
  map '/admin/settings'
16
16
 
17
17
  # Load all required Javascript files
18
- javascript ['zen/tabs']
18
+ javascript ['zen/lib/tabs']
19
19
 
20
20
  before_all do
21
21
  csrf_protection(:save, :delete) do
@@ -60,9 +60,7 @@ module Settings
60
60
  # @since 0.1
61
61
  #
62
62
  def index
63
- if !user_authorized?([:read, :update])
64
- respond(lang('zen_general.errors.not_authorized'), 403)
65
- end
63
+ require_permissions(:read, :update)
66
64
 
67
65
  set_breadcrumbs(lang('settings.titles.index'))
68
66
 
@@ -71,7 +69,8 @@ module Settings
71
69
 
72
70
  # Organize the settings so that each item is a child
73
71
  # item of it's group.
74
- ::Settings::Plugin::Settings::Registered[:settings].each do |name, setting|
72
+ ::Settings::Plugin::Settings::Registered[:settings].each \
73
+ do |name, setting|
75
74
  if !@settings_ordered.key?(setting.group)
76
75
  @settings_ordered[setting.group] = []
77
76
  end
@@ -93,9 +92,7 @@ module Settings
93
92
  # @since 0.1
94
93
  #
95
94
  def save
96
- if !user_authorized?([:update])
97
- respond(lang('zen_general.errors.not_authorized'), 403)
98
- end
95
+ require_permissions(:update)
99
96
 
100
97
  post = request.params.dup
101
98
  post.delete('csrf_token')
@@ -3,48 +3,13 @@ module Settings
3
3
  #:nodoc:
4
4
  module Model
5
5
  ##
6
- # Model that represents a single setting. This model is also used to retrieve
7
- # all possible values for a certain settngs. This is done by calling a method
8
- # that matches the format get_SETTING-NAME_values. For example, a setting named "theme"
9
- # would result in a call to Settings::Model::Setting#get_theme_values.
10
- #
11
- # In order to add new method you'll have to monkey patch this model as following:
12
- #
13
- # class Setting < Sequel::Model
14
- # def self.get_my_setting_values
15
- # # Do something and return it...
16
- # end
17
- # end
6
+ # Model that represents a single setting.
18
7
  #
19
8
  # @author Yorick Peterse
20
9
  # @since 0.1
21
- # @todo Monkey patching a model in order to get possible values isn't the nicest way
22
- # of solving this problem but it does allow for extra flexibility. It might be a good
23
- # idea to refactor this and put it in it's own class/plugin/whatever.
24
10
  #
25
11
  class Setting < Sequel::Model
26
- ##
27
- # Retrieves all settings and returns them as a key/value hash.
28
- #
29
- # @author Yorick Peterse
30
- # @since 0.1
31
- # @return [Hash] key/value hash containing all settings and their values.
32
- #
33
- def self.get_settings
34
- settings = {}
35
-
36
- self.all.each do |s|
37
- if s.value.nil?
38
- value = s.default
39
- else
40
- value = s.value
41
- end
42
-
43
- settings[s.name.to_sym] = value
44
- end
45
-
46
- return settings
47
- end
12
+
48
13
  end # Setting
49
14
  end # Model
50
15
  end # Settings
@@ -37,7 +37,7 @@ module Settings
37
37
  attr_accessor :type
38
38
 
39
39
  # The possible values for the setting
40
- attr_accessor :values
40
+ attr_writer :values
41
41
 
42
42
  # The default value of the setting
43
43
  attr_accessor :default
@@ -111,6 +111,23 @@ module Settings
111
111
 
112
112
  return val
113
113
  end
114
+
115
+ ##
116
+ # Retrieves the possible values for the setting. If the value is a Proc or Lambda
117
+ # (or anything else that responds to call()) it will be called and it's return
118
+ # value is used.
119
+ #
120
+ # @author Yorick Peterse
121
+ # @since 0.2.8
122
+ # @return [Mixed]
123
+ #
124
+ def values
125
+ if @values.respond_to?(:call)
126
+ return @values.call
127
+ else
128
+ return @values
129
+ end
130
+ end
114
131
  end # SettingBase
115
132
  end # Plugin
116
133
  end # Settings
@@ -206,16 +206,22 @@ module Settings
206
206
  name = name.to_s
207
207
 
208
208
  if !settings.include?(name)
209
- # Insert the new setting
210
- Setting.new(
211
- :name => setting.name , :group => setting.group,
212
- :default => setting.default, :type => setting.type
213
- ).save
209
+ # For some reason using the Settings model generates nil errors
210
+ # when this method is called from a migration so we'll insert them
211
+ # the non-model way.
212
+ Zen.database[:settings].insert(
213
+ :name => setting.name,
214
+ :group => setting.group,
215
+ :default => setting.default,
216
+ :type => setting.type
217
+ )
214
218
 
215
219
  # Update everything but the value
216
220
  else
217
- Setting.filter[:name => setting.name].update(
218
- :group => setting.group, :default => setting.default, :type => setting.type
221
+ Zen.database[:settings].filter[:name => setting.name].update(
222
+ :group => setting.group,
223
+ :default => setting.default,
224
+ :type => setting.type
219
225
  )
220
226
  end
221
227
  end
@@ -14,7 +14,8 @@
14
14
  </div>
15
15
 
16
16
  #{
17
- form_for(@settings_ordered, :method => :post, :action => @form_save_url, :id => :setting_form) do |f|
17
+ form_for(@settings_ordered, :method => :post, :action => @form_save_url,
18
+ :id => :setting_form) do |f|
18
19
  f.input_hidden(:csrf_token, get_csrf_token)
19
20
 
20
21
  @settings_ordered.each do |group, items|
@@ -1,3 +1,5 @@
1
+ Ramaze::HelpersHelper.options.paths.push(__DIR__('users'))
2
+
1
3
  require __DIR__('users/model/user')
2
4
  require __DIR__('users/model/user_group')
3
5
  require __DIR__('users/model/access_rule')
@@ -28,7 +30,7 @@ authorization."
28
30
  :title => lang('users.titles.index'),
29
31
  :url => 'admin/users',
30
32
  :children => [
31
- {:title => lang('user_groups.titles.index') , :url => 'admin/user-groups' },
33
+ {:title => lang('user_groups.titles.index') , :url => 'admin/user-groups'},
32
34
  {:title => lang('access_rules.titles.index'), :url => 'admin/access-rules'}
33
35
  ]
34
36
  }]
@@ -3,8 +3,8 @@ module Users
3
3
  #:nodoc:
4
4
  module Controller
5
5
  ##
6
- # Controller for managing access rules. Each access rule can be used to specify
7
- # whether or not a user can edit or create something.
6
+ # Controller for managing access rules. Each access rule can be used to
7
+ # specify whether or not a user can edit or create something.
8
8
  #
9
9
  # The following permissions are available:
10
10
  #
@@ -19,9 +19,13 @@ module Users
19
19
  class AccessRules < Zen::Controller::AdminController
20
20
  include ::Users::Model
21
21
 
22
- map('/admin/access-rules')
22
+ helper :users
23
+ map '/admin/access-rules'
23
24
 
24
- javascript ['users/access_rules']
25
+ javascript(
26
+ ['users/lib/access_rules', 'users/access_rules'],
27
+ :method => [:edit, :new]
28
+ )
25
29
 
26
30
  before_all do
27
31
  csrf_protection(:save, :delete) do
@@ -42,10 +46,6 @@ module Users
42
46
  def initialize
43
47
  super
44
48
 
45
- @form_save_url = AccessRules.r(:save)
46
- @form_delete_url = AccessRules.r(:delete)
47
- @rules_lang = Zen::Language.load('access_rules')
48
-
49
49
  # Set the page title
50
50
  if !action.method.nil?
51
51
  method = action.method.to_sym
@@ -56,32 +56,16 @@ module Users
56
56
  lang('access_rules.labels.user') => 'div_user_id',
57
57
  lang('access_rules.labels.user_group') => 'div_user_group_id'
58
58
  }
59
- end
60
59
 
61
- ##
62
- # Show an overview of all access rules and allow the current user
63
- # to manage these groups.
64
- #
65
- # This method requires the following permissions:
66
- #
67
- # * read
68
- #
69
- # @author Yorick Peterse
70
- # @since 0.1
71
- #
72
- def index
73
- if !user_authorized?([:read])
74
- respond(lang('zen_general.errors.not_authorized'), 403)
75
- end
76
-
77
- set_breadcrumbs(lang('access_rules.titles.index'))
78
-
79
- @access_rules = AccessRule.all
60
+ @boolean_hash = {
61
+ true => lang('zen_general.special.boolean_hash.true'),
62
+ false => lang('zen_general.special.boolean_hash.false')
63
+ }
80
64
  end
81
65
 
82
66
  ##
83
- # Hook that's executed before the edit and new method. This hook is used to
84
- # pre-process some data used in the form.
67
+ # Hook that's executed before the edit and new method. This hook is used
68
+ # to pre-process some data used in the form.
85
69
  #
86
70
  # @author Yorick Peterse
87
71
  # @since 0.2.5
@@ -100,7 +84,9 @@ module Users
100
84
  ::Zen::Package::Registered.each do |name, pkg|
101
85
  name = name.to_s
102
86
  @form_packages[name] = name
103
- @form_controllers[name] ||= {lang('access_rules.labels.all_controllers') => '*'}
87
+ @form_controllers[name] ||= {
88
+ lang('access_rules.labels.all_controllers') => '*'
89
+ }
104
90
 
105
91
  pkg.controllers.each do |key, value|
106
92
  @form_controllers[name][key] = value.to_s
@@ -112,6 +98,25 @@ module Users
112
98
  end
113
99
  end
114
100
 
101
+ ##
102
+ # Show an overview of all access rules and allow the current user
103
+ # to manage these groups.
104
+ #
105
+ # This method requires the following permissions:
106
+ #
107
+ # * read
108
+ #
109
+ # @author Yorick Peterse
110
+ # @since 0.1
111
+ #
112
+ def index
113
+ require_permissions(:read)
114
+
115
+ set_breadcrumbs(lang('access_rules.titles.index'))
116
+
117
+ @access_rules = paginate(AccessRule)
118
+ end
119
+
115
120
  ##
116
121
  # Edit an existing access rule.
117
122
  #
@@ -121,24 +126,24 @@ module Users
121
126
  # * update
122
127
  #
123
128
  # @author Yorick Peterse
124
- # @param [Integer] id The ID of the access rule to edit.
129
+ # @param [Fixnum] id The ID of the access rule to edit.
125
130
  # @since 0.1
126
131
  #
127
132
  def edit(id)
128
- if !user_authorized?([:read, :update])
129
- respond(lang('zen_general.errors.not_authorized'), 403)
130
- end
133
+ require_permissions(:read, :update)
131
134
 
132
135
  set_breadcrumbs(
133
- anchor_to(lang('access_rules.titles.index'), AccessRules.r(:index)),
136
+ AccessRules.a(lang('access_rules.titles.index'), :index),
134
137
  lang('access_rules.titles.edit')
135
138
  )
136
139
 
137
140
  if flash[:form_data]
138
141
  @access_rule = flash[:form_data]
139
142
  else
140
- @access_rule = AccessRule[id]
143
+ @access_rule = validate_access_rule(id)
141
144
  end
145
+
146
+ render_view(:form)
142
147
  end
143
148
 
144
149
  ##
@@ -147,26 +152,27 @@ module Users
147
152
  # This method requires the following permissions:
148
153
  #
149
154
  # * read
150
- # * create§
155
+ # * create
151
156
  #
152
157
  # @author Yorick Peterse
153
158
  # @since 0.1
154
159
  #
155
160
  def new
156
- if !user_authorized?([:read, :create])
157
- respond(lang('zen_general.errors.not_authorized'), 403)
158
- end
161
+ require_permissions(:read, :create)
159
162
 
160
163
  set_breadcrumbs(
161
- anchor_to(lang('access_rules.titles.index'), AccessRules.r(:index)),
164
+ AccessRules.a(lang('access_rules.titles.index'), :index),
162
165
  lang('access_rules.titles.new')
163
166
  )
164
167
 
165
168
  @access_rule = AccessRule.new
169
+
170
+ render_view(:form)
166
171
  end
167
172
 
168
173
  ##
169
- # Saves or creates a new access rule based on the POST data and a field named 'id'.
174
+ # Saves or creates a new access rule based on the POST data and a field
175
+ # named 'id'.
170
176
  #
171
177
  # This method requires the following permissions:
172
178
  #
@@ -177,13 +183,17 @@ module Users
177
183
  # @since 0.1
178
184
  #
179
185
  def save
180
- if !user_authorized?([:create, :update])
181
- respond(lang('zen_general.errors.not_authorized'), 403)
182
- end
183
-
184
186
  post = request.subset(
185
- :id, :package, :read_access, :create_access, :update_access, :delete_access,
186
- :user_id, :user_group_id, :controller, :rule_applies
187
+ :id,
188
+ :package,
189
+ :read_access,
190
+ :create_access,
191
+ :update_access,
192
+ :delete_access,
193
+ :user_id,
194
+ :user_group_id,
195
+ :controller,
196
+ :rule_applies
187
197
  )
188
198
 
189
199
  if post['rule_applies'] === 'div_user_id'
@@ -193,10 +203,14 @@ module Users
193
203
  end
194
204
 
195
205
  if post['id'] and !post['id'].empty?
196
- @access_rule = AccessRule[post['id']]
206
+ require_permissions(:update)
207
+
208
+ access_rule = validate_access_rule(post['id'])
197
209
  save_action = :save
198
210
  else
199
- @access_rule = AccessRule.new
211
+ require_permissions(:create)
212
+
213
+ access_rule = AccessRule.new
200
214
  save_action = :new
201
215
  end
202
216
 
@@ -207,7 +221,7 @@ module Users
207
221
  flash_error = lang("access_rules.errors.#{save_action}")
208
222
 
209
223
  begin
210
- @access_rule.update(post)
224
+ access_rule.update(post)
211
225
 
212
226
  # Flush the existing rules from the session
213
227
  session.delete(:access_rules)
@@ -216,12 +230,14 @@ module Users
216
230
  Ramaze::Log.error(e.inspect)
217
231
  message(:error, flash_error)
218
232
 
219
- flash[:form_data] = @access_rule
220
- flash[:form_errors] = @access_rule.errors
233
+ flash[:form_data] = access_rule
234
+ flash[:form_errors] = access_rule.errors
235
+
236
+ redirect_referrer
221
237
  end
222
238
 
223
- if @access_rule.id
224
- redirect(AccessRules.r(:edit, @access_rule.id))
239
+ if access_rule.id
240
+ redirect(AccessRules.r(:edit, access_rule.id))
225
241
  else
226
242
  redirect_referrer
227
243
  end
@@ -238,11 +254,10 @@ module Users
238
254
  # @since 0.1
239
255
  #
240
256
  def delete
241
- if !user_authorized?([:delete])
242
- respond(lang('zen_general.errors.not_authorized'), 403)
243
- end
257
+ require_permissions(:delete)
244
258
 
245
- if !request.params['access_rule_ids'] or request.params['access_rule_ids'].empty?
259
+ if !request.params['access_rule_ids'] \
260
+ or request.params['access_rule_ids'].empty?
246
261
  message(:error, lang('access_rules.errors.no_delete'))
247
262
  redirect_referrer
248
263
  end
@@ -257,6 +272,8 @@ module Users
257
272
  rescue => e
258
273
  Ramaze::Log.error(e.inspect)
259
274
  message(:error, lang('access_rules.errors.delete') % id)
275
+
276
+ redirect_referrer
260
277
  end
261
278
  end
262
279