zen 0.1a → 0.2

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 (414) hide show
  1. data/CHANGELOG.md +17 -0
  2. data/MANIFEST +161 -264
  3. data/README.md +114 -0
  4. data/ROADMAP.md +31 -0
  5. data/Thorfile +8 -0
  6. data/lib/zen.rb +13 -10
  7. data/lib/zen/base/database.rb +34 -28
  8. data/lib/zen/base/language.rb +174 -92
  9. data/lib/zen/base/logger.rb +8 -6
  10. data/lib/zen/base/package.rb +36 -29
  11. data/lib/zen/base/version.rb +2 -1
  12. data/lib/zen/bin/zen_binary.rb +7 -71
  13. data/lib/zen/controller/admin_controller.rb +31 -11
  14. data/lib/zen/controller/base_controller.rb +13 -13
  15. data/lib/zen/controller/frontend_controller.rb +2 -0
  16. data/lib/zen/controller/main_controller.rb +9 -8
  17. data/lib/zen/helper/acl.rb +4 -1
  18. data/lib/zen/helper/asset.rb +5 -3
  19. data/lib/zen/helper/breadcrumb.rb +10 -8
  20. data/lib/zen/helper/common.rb +28 -13
  21. data/lib/zen/language/en/zen_general.yml +31 -0
  22. data/lib/zen/language/en/zen_models.yml +13 -0
  23. data/lib/zen/layout/admin.xhtml +76 -68
  24. data/lib/zen/layout/login.xhtml +48 -42
  25. data/lib/zen/liquid/controller_behavior.rb +2 -0
  26. data/lib/zen/liquid/general.rb +60 -9
  27. data/lib/zen/liquid/redirect.rb +29 -6
  28. data/lib/zen/liquid/strip.rb +3 -1
  29. data/lib/zen/model/methods.rb +7 -5
  30. data/lib/zen/model/settings.rb +69 -18
  31. data/lib/zen/package/all.rb +7 -0
  32. data/lib/zen/{packages → package}/categories/lib/categories.rb +3 -3
  33. data/lib/zen/package/categories/lib/categories/controller/categories.rb +250 -0
  34. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +216 -0
  35. data/lib/zen/package/categories/lib/categories/language/en/categories.yml +35 -0
  36. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +32 -0
  37. data/lib/zen/package/categories/lib/categories/liquid/categories.rb +16 -0
  38. data/lib/zen/{packages → package}/categories/lib/categories/model/category.rb +9 -9
  39. data/lib/zen/{packages → package}/categories/lib/categories/model/category_group.rb +6 -4
  40. data/lib/zen/package/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
  41. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +59 -0
  42. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +78 -0
  43. data/lib/zen/package/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
  44. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/edit.xhtml +7 -0
  45. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +31 -0
  46. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +85 -0
  47. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/new.xhtml +7 -0
  48. data/lib/zen/{packages → package}/categories/migrations/.gitkeep +0 -0
  49. data/lib/zen/{packages → package}/categories/migrations/1295282303_create_schema.rb +3 -2
  50. data/lib/zen/{packages → package}/comments/lib/comments.rb +1 -1
  51. data/lib/zen/{packages → package}/comments/lib/comments/controller/comments.rb +81 -41
  52. data/lib/zen/{packages → package}/comments/lib/comments/controller/comments_form.rb +15 -13
  53. data/lib/zen/package/comments/lib/comments/language/en/comments.yml +42 -0
  54. data/lib/zen/{packages → package}/comments/lib/comments/liquid/comment_form.rb +43 -13
  55. data/lib/zen/{packages → package}/comments/lib/comments/liquid/comments.rb +10 -12
  56. data/lib/zen/{packages → package}/comments/lib/comments/model/comment.rb +24 -0
  57. data/lib/zen/package/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
  58. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +57 -0
  59. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +79 -0
  60. data/lib/zen/{packages → package}/comments/migrations/.gitkeep +0 -0
  61. data/lib/zen/{packages → package}/comments/migrations/1295282202_create_schema.rb +6 -4
  62. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields.rb +2 -2
  63. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +224 -0
  64. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +259 -0
  65. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +32 -0
  66. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +52 -0
  67. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field.rb +12 -7
  68. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field_group.rb +14 -4
  69. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field_value.rb +4 -2
  70. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/edit.xhtml +7 -0
  71. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +30 -0
  72. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +100 -0
  73. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/new.xhtml +7 -0
  74. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/edit.xhtml +7 -0
  75. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +107 -0
  76. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +84 -0
  77. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/new.xhtml +7 -0
  78. data/lib/zen/{packages → package}/custom_fields/migrations/.gitkeep +0 -0
  79. data/lib/zen/{packages → package}/custom_fields/migrations/1295255665_create_schema.rb +8 -7
  80. data/lib/zen/package/menus/lib/menus.rb +59 -0
  81. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +244 -0
  82. data/lib/zen/package/menus/lib/menus/controller/menus.rb +231 -0
  83. data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +93 -0
  84. data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +41 -0
  85. data/lib/zen/package/menus/lib/menus/language/en/menus.yml +39 -0
  86. data/lib/zen/package/menus/lib/menus/liquid/menus.rb +152 -0
  87. data/lib/zen/package/menus/lib/menus/model/menu.rb +38 -0
  88. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +33 -0
  89. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/edit.xhtml +7 -0
  90. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +64 -0
  91. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +84 -0
  92. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/new.xhtml +7 -0
  93. data/lib/zen/package/menus/lib/menus/view/admin/menus/edit.xhtml +7 -0
  94. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +42 -0
  95. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +95 -0
  96. data/lib/zen/package/menus/lib/menus/view/admin/menus/new.xhtml +7 -0
  97. data/lib/zen/{packages/sections → package/menus}/migrations/.gitkeep +0 -0
  98. data/lib/zen/package/menus/migrations/1297184342_create_schema.rb +33 -0
  99. data/lib/zen/{packages → package}/sections/lib/sections.rb +0 -0
  100. data/lib/zen/{packages → package}/sections/lib/sections/controller/section_entries.rb +132 -68
  101. data/lib/zen/{packages → package}/sections/lib/sections/controller/sections.rb +96 -48
  102. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +43 -0
  103. data/lib/zen/package/sections/lib/sections/language/en/sections.yml +48 -0
  104. data/lib/zen/{packages → package}/sections/lib/sections/liquid/section_entries.rb +55 -43
  105. data/lib/zen/{packages → package}/sections/lib/sections/liquid/sections.rb +9 -8
  106. data/lib/zen/package/sections/lib/sections/model/section.rb +62 -0
  107. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +53 -0
  108. data/lib/zen/package/sections/lib/sections/view/admin/edit.xhtml +7 -0
  109. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +107 -0
  110. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +93 -0
  111. data/lib/zen/package/sections/lib/sections/view/admin/new.xhtml +7 -0
  112. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/edit.xhtml +7 -0
  113. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +233 -0
  114. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +82 -0
  115. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/new.xhtml +7 -0
  116. data/lib/zen/{packages/settings → package/sections}/migrations/.gitkeep +0 -0
  117. data/lib/zen/{packages → package}/sections/migrations/1295251836_create_schema.rb +6 -6
  118. data/lib/zen/{packages → package}/settings/lib/settings.rb +0 -0
  119. data/lib/zen/{packages → package}/settings/lib/settings/controller/settings.rb +33 -24
  120. data/lib/zen/package/settings/lib/settings/language/en/settings.yml +26 -0
  121. data/lib/zen/{packages → package}/settings/lib/settings/liquid/setting.rb +5 -3
  122. data/lib/zen/package/settings/lib/settings/model/setting.rb +113 -0
  123. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +111 -0
  124. data/lib/zen/{packages/users → package/settings}/migrations/.gitkeep +0 -0
  125. data/lib/zen/{packages → package}/settings/migrations/1295597111_create_schema.rb +2 -2
  126. data/lib/zen/package/settings/migrations/1299538742_add_language_key.rb +62 -0
  127. data/lib/zen/{packages → package}/users/lib/users.rb +6 -2
  128. data/lib/zen/package/users/lib/users/controller/access_rules.rb +238 -0
  129. data/lib/zen/package/users/lib/users/controller/user_groups.rb +217 -0
  130. data/lib/zen/{packages → package}/users/lib/users/controller/users.rb +115 -57
  131. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +35 -0
  132. data/lib/zen/package/users/lib/users/language/en/user_groups.yml +31 -0
  133. data/lib/zen/package/users/lib/users/language/en/users.yml +50 -0
  134. data/lib/zen/{packages → package}/users/lib/users/liquid/user.rb +8 -6
  135. data/lib/zen/{packages → package}/users/lib/users/liquid/users.rb +5 -3
  136. data/lib/zen/{packages → package}/users/lib/users/model/access_rule.rb +11 -3
  137. data/lib/zen/{packages → package}/users/lib/users/model/user.rb +5 -1
  138. data/lib/zen/{packages → package}/users/lib/users/model/user_group.rb +6 -3
  139. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +42 -0
  140. data/lib/zen/package/users/lib/users/view/admin/access-rules/edit.xhtml +7 -0
  141. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +108 -0
  142. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +93 -0
  143. data/lib/zen/package/users/lib/users/view/admin/access-rules/new.xhtml +7 -0
  144. data/lib/zen/package/users/lib/users/view/admin/user-groups/edit.xhtml +7 -0
  145. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +37 -0
  146. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +76 -0
  147. data/lib/zen/package/users/lib/users/view/admin/user-groups/new.xhtml +7 -0
  148. data/lib/zen/package/users/lib/users/view/admin/users/edit.xhtml +7 -0
  149. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +53 -0
  150. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +81 -0
  151. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +27 -0
  152. data/lib/zen/package/users/lib/users/view/admin/users/new.xhtml +7 -0
  153. data/{pkg → lib/zen/package/users/migrations}/.gitkeep +0 -0
  154. data/lib/zen/{packages → package}/users/migrations/1295281013_create_schema.rb +2 -2
  155. data/lib/zen/public/admin/css/boilerplate.css +62 -60
  156. data/lib/zen/public/admin/css/buttons.css +46 -0
  157. data/lib/zen/public/admin/css/datepicker.css +163 -0
  158. data/lib/zen/public/admin/css/editor.css +91 -0
  159. data/lib/zen/public/admin/css/forms.css +68 -0
  160. data/lib/zen/public/admin/css/general.css +34 -419
  161. data/lib/zen/public/admin/css/grid.css +26 -26
  162. data/lib/zen/public/admin/css/layout.css +73 -62
  163. data/lib/zen/public/admin/css/modals.css +63 -0
  164. data/lib/zen/public/admin/css/notifications.css +84 -0
  165. data/lib/zen/public/admin/css/tables.css +71 -0
  166. data/lib/zen/public/admin/css/tabs.css +53 -0
  167. data/lib/zen/public/admin/js/mootools/more.js +139 -51
  168. data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +137 -0
  169. data/lib/zen/public/admin/js/vendor/datepicker/Picker.Date.js +576 -0
  170. data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +291 -0
  171. data/lib/zen/public/admin/js/vendor/datepicker/README.md +325 -0
  172. data/lib/zen/public/admin/js/vendor/datepicker/locale.js +16 -0
  173. data/lib/zen/public/admin/js/zen/editor/base.js +173 -183
  174. data/lib/zen/public/admin/js/zen/editor/drivers/html.js +74 -89
  175. data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +72 -87
  176. data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +72 -87
  177. data/lib/zen/public/admin/js/zen/init.js +65 -51
  178. data/lib/zen/public/admin/js/zen/modal.js +108 -121
  179. data/lib/zen/public/admin/js/zen/notification.js +163 -165
  180. data/lib/zen/public/admin/js/zen/tabs.js +203 -210
  181. data/lib/zen/task/build.rb +123 -0
  182. data/lib/zen/task/clean.rb +46 -0
  183. data/lib/zen/task/db.rb +120 -0
  184. data/lib/zen/task/package.rb +82 -0
  185. data/lib/zen/task/proto.rb +116 -0
  186. data/{LICENSE → license.txt} +2 -2
  187. data/proto/app/Thorfile +4 -0
  188. data/proto/app/config/middlewares.rb +3 -3
  189. data/proto/app/config/requires.rb +1 -6
  190. data/proto/app/start.rb +5 -10
  191. data/{lib/zen/packages/settings → proto/package}/LICENSE +0 -0
  192. data/{lib/zen/packages/categories → proto/package}/README.textile +0 -0
  193. data/proto/package/lib/package.rb +41 -0
  194. data/proto/{module/lib/module → package/lib/package}/controller/controllers.rb +3 -2
  195. data/proto/{module/lib/module → package/lib/package}/language/en/languages.rb +0 -0
  196. data/proto/{module/lib/module → package/lib/package}/model/model.rb +0 -0
  197. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/edit.xhtml +0 -0
  198. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/form.xhtml +0 -0
  199. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/index.xhtml +0 -0
  200. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/new.xhtml +0 -0
  201. data/proto/{module → package}/migrations/.gitkeep +0 -0
  202. metadata +199 -280
  203. data/README.textile +0 -42
  204. data/Rakefile +0 -6
  205. data/doc/Categories.html +0 -93
  206. data/doc/Categories/Controllers.html +0 -93
  207. data/doc/Categories/Controllers/Categories.html +0 -995
  208. data/doc/Categories/Controllers/CategoryGroups.html +0 -878
  209. data/doc/Categories/Models.html +0 -97
  210. data/doc/Categories/Models/Category.html +0 -269
  211. data/doc/Categories/Models/CategoryGroup.html +0 -231
  212. data/doc/Comments.html +0 -93
  213. data/doc/Comments/Controllers.html +0 -93
  214. data/doc/Comments/Controllers/Comments.html +0 -797
  215. data/doc/Comments/Controllers/CommentsForm.html +0 -487
  216. data/doc/Comments/Liquid.html +0 -93
  217. data/doc/Comments/Liquid/CommentForm.html +0 -522
  218. data/doc/Comments/Liquid/Comments.html +0 -543
  219. data/doc/Comments/Models.html +0 -95
  220. data/doc/Comments/Models/Comment.html +0 -260
  221. data/doc/CustomFields.html +0 -93
  222. data/doc/CustomFields/Controllers.html +0 -93
  223. data/doc/CustomFields/Controllers/CustomFieldGroups.html +0 -902
  224. data/doc/CustomFields/Controllers/CustomFields.html +0 -974
  225. data/doc/CustomFields/Models.html +0 -97
  226. data/doc/CustomFields/Models/CustomField.html +0 -272
  227. data/doc/CustomFields/Models/CustomFieldGroup.html +0 -259
  228. data/doc/CustomFields/Models/CustomFieldValue.html +0 -154
  229. data/doc/Ramaze.html +0 -93
  230. data/doc/Ramaze/Helper.html +0 -93
  231. data/doc/Ramaze/Helper/ACL.html +0 -531
  232. data/doc/Ramaze/Helper/Asset.html +0 -617
  233. data/doc/Ramaze/Helper/Breadcrumb.html +0 -411
  234. data/doc/Ramaze/Helper/Common.html +0 -738
  235. data/doc/Sections.html +0 -93
  236. data/doc/Sections/Controllers.html +0 -93
  237. data/doc/Sections/Controllers/SectionEntries.html +0 -1100
  238. data/doc/Sections/Controllers/Sections.html +0 -953
  239. data/doc/Sections/Liquid.html +0 -93
  240. data/doc/Sections/Liquid/SectionEntries.html +0 -674
  241. data/doc/Sections/Liquid/Sections.html +0 -494
  242. data/doc/Sections/Models.html +0 -97
  243. data/doc/Sections/Models/Section.html +0 -272
  244. data/doc/Sections/Models/SectionEntry.html +0 -264
  245. data/doc/Sequel.html +0 -91
  246. data/doc/Sequel/Model.html +0 -243
  247. data/doc/Settings.html +0 -93
  248. data/doc/Settings/Controllers.html +0 -91
  249. data/doc/Settings/Controllers/Settings.html +0 -565
  250. data/doc/Settings/Liquid.html +0 -91
  251. data/doc/Settings/Liquid/Setting.html +0 -426
  252. data/doc/Settings/Models.html +0 -95
  253. data/doc/Settings/Models/Setting.html +0 -293
  254. data/doc/Users.html +0 -93
  255. data/doc/Users/Controllers.html +0 -93
  256. data/doc/Users/Controllers/AccessRules.html +0 -904
  257. data/doc/Users/Controllers/UserGroups.html +0 -879
  258. data/doc/Users/Controllers/Users.html +0 -1124
  259. data/doc/Users/Liquid.html +0 -93
  260. data/doc/Users/Liquid/User.html +0 -480
  261. data/doc/Users/Liquid/Users.html +0 -495
  262. data/doc/Users/Models.html +0 -97
  263. data/doc/Users/Models/AccessRule.html +0 -257
  264. data/doc/Users/Models/User.html +0 -649
  265. data/doc/Users/Models/UserGroup.html +0 -267
  266. data/doc/Zen.html +0 -391
  267. data/doc/Zen/Bin.html +0 -113
  268. data/doc/Zen/Bin/Base.html +0 -727
  269. data/doc/Zen/Controllers.html +0 -115
  270. data/doc/Zen/Controllers/AdminController.html +0 -298
  271. data/doc/Zen/Controllers/BaseController.html +0 -272
  272. data/doc/Zen/Controllers/FrontendController.html +0 -164
  273. data/doc/Zen/Controllers/MainController.html +0 -421
  274. data/doc/Zen/Database.html +0 -498
  275. data/doc/Zen/Language.html +0 -660
  276. data/doc/Zen/Liquid.html +0 -117
  277. data/doc/Zen/Liquid/ControllerBehavior.html +0 -448
  278. data/doc/Zen/Liquid/General.html +0 -444
  279. data/doc/Zen/Liquid/Redirect.html +0 -435
  280. data/doc/Zen/Liquid/Strip.html +0 -447
  281. data/doc/Zen/Logger.html +0 -393
  282. data/doc/Zen/Package.html +0 -909
  283. data/doc/_index.html +0 -724
  284. data/doc/class_list.html +0 -36
  285. data/doc/css/common.css +0 -1
  286. data/doc/css/full_list.css +0 -53
  287. data/doc/css/style.css +0 -310
  288. data/doc/file.README.html +0 -86
  289. data/doc/file_list.html +0 -38
  290. data/doc/frames.html +0 -13
  291. data/doc/index.html +0 -86
  292. data/doc/js/app.js +0 -203
  293. data/doc/js/full_list.js +0 -149
  294. data/doc/js/jquery.js +0 -154
  295. data/doc/method_list.html +0 -1139
  296. data/doc/top-level-namespace.html +0 -88
  297. data/lib/zen/language/en/zen_general.rb +0 -21
  298. data/lib/zen/language/en/zen_models.rb +0 -39
  299. data/lib/zen/packages/categories/LICENSE +0 -19
  300. data/lib/zen/packages/categories/lib/categories/controller/categories.rb +0 -202
  301. data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +0 -173
  302. data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +0 -38
  303. data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +0 -37
  304. data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +0 -7
  305. data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +0 -36
  306. data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +0 -70
  307. data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +0 -7
  308. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +0 -7
  309. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +0 -18
  310. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +0 -72
  311. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +0 -7
  312. data/lib/zen/packages/comments/LICENSE +0 -19
  313. data/lib/zen/packages/comments/README.textile +0 -0
  314. data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +0 -52
  315. data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +0 -7
  316. data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +0 -31
  317. data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +0 -74
  318. data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +0 -11
  319. data/lib/zen/packages/custom_fields/LICENSE +0 -19
  320. data/lib/zen/packages/custom_fields/README.textile +0 -0
  321. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +0 -179
  322. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +0 -194
  323. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +0 -45
  324. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +0 -64
  325. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +0 -7
  326. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +0 -18
  327. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +0 -88
  328. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +0 -7
  329. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +0 -7
  330. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +0 -50
  331. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +0 -75
  332. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +0 -7
  333. data/lib/zen/packages/sections/LICENSE +0 -19
  334. data/lib/zen/packages/sections/README.textile +0 -43
  335. data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +0 -58
  336. data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +0 -63
  337. data/lib/zen/packages/sections/lib/sections/model/section.rb +0 -43
  338. data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +0 -43
  339. data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +0 -7
  340. data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +0 -54
  341. data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +0 -77
  342. data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +0 -7
  343. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +0 -7
  344. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +0 -147
  345. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +0 -74
  346. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +0 -7
  347. data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +0 -18
  348. data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +0 -11
  349. data/lib/zen/packages/settings/README.textile +0 -0
  350. data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +0 -56
  351. data/lib/zen/packages/settings/lib/settings/model/setting.rb +0 -38
  352. data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +0 -79
  353. data/lib/zen/packages/users/LICENSE +0 -19
  354. data/lib/zen/packages/users/README.textile +0 -0
  355. data/lib/zen/packages/users/lib/users/controller/access_rules.rb +0 -186
  356. data/lib/zen/packages/users/lib/users/controller/user_groups.rb +0 -171
  357. data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +0 -49
  358. data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +0 -42
  359. data/lib/zen/packages/users/lib/users/language/en/users.rb +0 -63
  360. data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +0 -43
  361. data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +0 -7
  362. data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +0 -68
  363. data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +0 -85
  364. data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +0 -7
  365. data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +0 -7
  366. data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +0 -19
  367. data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +0 -69
  368. data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +0 -7
  369. data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +0 -7
  370. data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +0 -25
  371. data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +0 -73
  372. data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +0 -22
  373. data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +0 -7
  374. data/lib/zen/tasks.rb +0 -6
  375. data/proto/app/Rakefile +0 -2
  376. data/proto/module/LICENSE +0 -0
  377. data/proto/module/README.textile +0 -0
  378. data/proto/module/lib/module.rb +0 -15
  379. data/spec/javascript/css/base.css +0 -177
  380. data/spec/javascript/css/style.css +0 -204
  381. data/spec/javascript/css/typography.css +0 -70
  382. data/spec/javascript/editor/index.html +0 -65
  383. data/spec/javascript/images/close.png +0 -0
  384. data/spec/javascript/images/info.png +0 -0
  385. data/spec/javascript/js/editor.js +0 -16
  386. data/spec/javascript/js/modal.js +0 -12
  387. data/spec/javascript/js/namespace.js +0 -2
  388. data/spec/javascript/js/notification.js +0 -43
  389. data/spec/javascript/js/tabs.js +0 -8
  390. data/spec/javascript/modal/index.html +0 -45
  391. data/spec/javascript/notification/index.html +0 -48
  392. data/spec/javascript/tabs/index.html +0 -73
  393. data/spec/javascript/tabs/tab_1.html +0 -1
  394. data/spec/javascript/tabs/tab_2.html +0 -1
  395. data/spec/zen/base/language.rb +0 -31
  396. data/spec/zen/base/logger.rb +0 -34
  397. data/spec/zen/base/package.rb +0 -47
  398. data/spec/zen/config/database.rb +0 -8
  399. data/spec/zen/helper/asset.rb +0 -26
  400. data/spec/zen/helper/breadcrumb.rb +0 -24
  401. data/spec/zen/language/en/general.rb +0 -4
  402. data/spec/zen/language/nl/general.rb +0 -4
  403. data/spec/zen/liquid/general.rb +0 -42
  404. data/spec/zen/logs/.gitkeep +0 -0
  405. data/spec/zen/spec.rb +0 -9
  406. data/spec/zen/spec_database.db +0 -0
  407. data/tasks/bacon.rake +0 -99
  408. data/tasks/build.rake +0 -72
  409. data/tasks/clean.rake +0 -18
  410. data/tasks/db.rake +0 -81
  411. data/tasks/doc.rake +0 -5
  412. data/tasks/extension.rake +0 -65
  413. data/tasks/proto.rake +0 -37
  414. data/tasks/theme.rake +0 -63
@@ -0,0 +1,42 @@
1
+ ---
2
+ titles:
3
+ index : 'Comments'
4
+ edit : 'Edit Comment'
5
+
6
+ labels:
7
+ id : '#'
8
+ website : 'Website'
9
+ entry : 'Section Entry'
10
+ email : 'Email'
11
+ status : 'Status'
12
+ comment : 'Comment'
13
+ name : 'Name'
14
+ created_at : 'Created'
15
+ updated_at : 'Updated'
16
+ defensio_signature : 'Defensio Signature'
17
+ open : 'Open'
18
+ closed : 'Closed'
19
+ spam : 'Spam'
20
+
21
+ messages:
22
+ no_comments: 'No comments have been added yet.'
23
+
24
+ success:
25
+ new : 'The new comment has been created.'
26
+ save : 'The comment has been modified.'
27
+ delete : 'All selected comments have been deleted.'
28
+ moderate : "The comment has been posted but mush be approved by an administrator before it's displayed."
29
+
30
+ errors:
31
+ new : 'Failed to create the new comment.'
32
+ save : 'Failed to modify the comment.'
33
+ delete : 'Failed to delete the comment with ID #%s.'
34
+ no_delete : "You haven't specified any comments to delete."
35
+ invalid_entry : 'The specified section entry is invalid.'
36
+ comments_not_allowed : "Comments aren't allowed for this section."
37
+ no_api_key : 'You need to specify an API key for the Defensio system in your settings panel.'
38
+ defensio_status : 'The comment could not be saved due to a problem with the Defensio server.'
39
+
40
+ buttons:
41
+ delete : 'Delete selected comments'
42
+ save : 'Save comment'
@@ -1,14 +1,38 @@
1
1
  require 'ramaze/gestalt'
2
2
 
3
+ #:nodoc:
3
4
  module Comments
5
+ #:nodoc:
4
6
  module Liquid
5
7
  ##
6
- # Describe...
8
+ # Liquid tag that can be used to generate the required form elements for submitting
9
+ # comments. It's important to remember that you still need to define your own
10
+ # form fields such as those for the name and Email, this tag merely generates
11
+ # the form open/closing tags and a few hidden fields. The following field (names)
12
+ # are required when creating a comment form:
13
+ #
14
+ # * name
15
+ # * website
16
+ # * email
17
+ # * comment
18
+ #
19
+ # Basic usage of this tag is as following:
20
+ #
21
+ # {% comment_form section_entry="hello-world" %}
22
+ #
23
+ # <p>
24
+ # <label for="name">Name</label>
25
+ # <input type="text" name="name" id="name" />
26
+ # </p>
27
+ #
28
+ # <input type="submit" value="Submit comment" />
29
+ #
30
+ # {% endcomment_form %}
7
31
  #
8
32
  # The following arguments can be used:
9
33
  #
10
- # * section_entry
11
- # * section_entry_id
34
+ # * section_entry: the slug of the entry
35
+ # * section_entry_id: the ID of the entry
12
36
  #
13
37
  # @author Yorick Peterse
14
38
  # @since 0.1
@@ -29,7 +53,7 @@ module Comments
29
53
  # @param [String] html The HTML inside the block.
30
54
  # @since 0.1
31
55
  #
32
- def initialize(tag_name, arguments, html)
56
+ def initialize(tag_name = 'comments_form', arguments = '', html = '')
33
57
  super
34
58
 
35
59
  @arguments = parse_key_values(arguments)
@@ -57,15 +81,17 @@ module Comments
57
81
  g = Ramaze::Gestalt.new
58
82
  user_html = ''
59
83
 
60
- super(context).each do |h|
61
- user_html += h
62
- end
84
+ super(context).each { |h| user_html += h }
63
85
 
64
86
  # Get our section to which this form belongs
65
87
  if @arguments.key?('section_entry')
66
- section_entry = ::Sections::Models::SectionEntry[:slug => @arguments['section_entry']]
88
+ section_entry = ::Sections::Models::SectionEntry[
89
+ :slug => @arguments['section_entry']
90
+ ]
67
91
  else
68
- section_entry = ::Sections::Models::SectionEntry[@arguments['section_entry_id'].to_i]
92
+ section_entry = ::Sections::Models::SectionEntry[
93
+ @arguments['section_entry_id'].to_i
94
+ ]
69
95
  end
70
96
 
71
97
  # Get the section entry's ID
@@ -82,10 +108,14 @@ module Comments
82
108
  user_id = nil
83
109
  end
84
110
 
85
- g_html = form_for(nil, :method => :post, :action => "/comments_form/save") do |f|
86
- f.input_hidden :csrf_token, get_csrf_token
87
- f.input_hidden :section_entry, section_entry_id
88
- f.input_hidden :user_id, user_id
111
+ g_html = form_for(
112
+ nil,
113
+ :method => :post,
114
+ :action => Comments::Controllers::CommentsForm.r(:save)
115
+ ) do |f|
116
+ f.input_hidden(:csrf_token , get_csrf_token)
117
+ f.input_hidden(:section_entry, section_entry_id)
118
+ f.input_hidden(:user_id , user_id)
89
119
 
90
120
  user_html
91
121
  end
@@ -1,11 +1,12 @@
1
+ #:nodoc:
1
2
  module Comments
3
+ #:nodoc:
2
4
  module Liquid
3
5
  ##
4
6
  # Tag that can be used to display a number of comments based on the section entry ID
5
7
  # or the slug of a section entry.
6
8
  #
7
9
  # @example
8
- #
9
10
  # {% comments section_entry="hello-world" limit="10" %}
10
11
  # {{comment}}
11
12
  # {% endcomments %}
@@ -33,7 +34,7 @@ module Comments
33
34
  # @param [String] html The HTML inside the block.
34
35
  # @since 0.1
35
36
  #
36
- def initialize tag_name, arguments, html
37
+ def initialize(tag_name = 'comments', arguments = '', html = '')
37
38
  super
38
39
 
39
40
  @arguments = {
@@ -44,7 +45,10 @@ module Comments
44
45
  @args_parsed = false
45
46
 
46
47
  if !@arguments.key?('section_entry') or @arguments['section_entry'].empty?
47
- raise ArgumentError, "You need to specify a section entry's slug in order to retrieve a set of comments"
48
+ raise(
49
+ ArgumentError,
50
+ "You need to specify a section entry's slug in order to retrieve a set of comments"
51
+ )
48
52
  end
49
53
  end
50
54
 
@@ -56,13 +60,7 @@ module Comments
56
60
  #
57
61
  def render context
58
62
  if @args_parsed == false
59
- @arguments.each do |k, v|
60
- v = v.to_s
61
-
62
- if context.has_key?(v)
63
- @arguments[k] = h(context[v])
64
- end
65
- end
63
+ @arguments = merge_context(@arguments, context)
66
64
  end
67
65
 
68
66
  @args_parsed = true
@@ -104,10 +102,10 @@ module Comments
104
102
  end
105
103
  end
106
104
 
107
- result << render_all(@nodelist, context)
105
+ result.push(render_all(@nodelist, context))
108
106
  end
109
107
 
110
- result << render_all(@nodelist, context) if result.empty?
108
+ result.push(render_all(@nodelist, context)) if result.empty?
111
109
  return result
112
110
  end
113
111
  end
@@ -1,4 +1,6 @@
1
+ #:nodoc:
1
2
  module Comments
3
+ #:nodoc:
2
4
  module Models
3
5
  ##
4
6
  # Model that represents a single comment. This model has the following relations:
@@ -14,6 +16,8 @@ module Comments
14
16
  # @since 0.1
15
17
  #
16
18
  class Comment < Sequel::Model
19
+ include ::Zen::Language
20
+
17
21
  many_to_one :section_entry, :class => "Sections::Models::SectionEntry"
18
22
  many_to_one :user, :class => "Users::Models::User"
19
23
 
@@ -29,6 +33,26 @@ module Comments
29
33
  validates_presence :comment
30
34
  validates_presence :email
31
35
  end
36
+
37
+ ##
38
+ # Returns a hash containing all available statuses for each comment.
39
+ #
40
+ # @example
41
+ # Comments::Models::Comment.status_hash
42
+ #
43
+ # @author Yorick Peterse
44
+ # @since 0.2
45
+ # @return [Hash]
46
+ #
47
+ def self.status_hash
48
+ ::Zen::Language.load('comments')
49
+
50
+ return {
51
+ 'open' => lang('comments.labels.open'),
52
+ 'closed' => lang('comments.labels.closed'),
53
+ 'spam' => lang('comments.labels.spam')
54
+ }
55
+ end
32
56
  end
33
57
  end
34
58
  end
@@ -0,0 +1,7 @@
1
+ <article>
2
+ <header>
3
+ <h1>#{get_breadcrumbs}</h1>
4
+ </header>
5
+
6
+ #{render_partial :form}
7
+ </article>
@@ -0,0 +1,57 @@
1
+ #{
2
+ form_for(
3
+ @comment, :method => :post, :action => @form_save_url, :id => :comment_form
4
+ ) do |f|
5
+ f.input_hidden(:csrf_token, get_csrf_token)
6
+ f.input_hidden(:id , @comment.id)
7
+
8
+ if !@comment.user_id
9
+ name = @comment.name
10
+ website = @comment.website
11
+ email = @comment.email
12
+ else
13
+ name = @comment.user.name
14
+ website = @comment.user.website
15
+ email = @comment.user.email
16
+ end
17
+
18
+ f.input_text(
19
+ lang('comments.labels.name'),
20
+ :name,
21
+ :value => name,
22
+ :disabled => :disabled
23
+ )
24
+
25
+ f.input_text(
26
+ lang('comments.labels.website'),
27
+ :website,
28
+ :value => website
29
+ )
30
+
31
+ f.input_text(
32
+ lang('comments.labels.email'),
33
+ :email,
34
+ :value => email
35
+ )
36
+
37
+ f.select(
38
+ lang('comments.labels.status'),
39
+ :status,
40
+ :values => Comments::Models::Comment.status_hash,
41
+ :selected => @comment.status,
42
+ :size => 1
43
+ )
44
+
45
+ f.textarea(
46
+ lang('comments.labels.comment'),
47
+ :comment,
48
+ :rows => 10
49
+ )
50
+
51
+ f.g.div(:class => 'clearfix') do
52
+ f.g.div(:class => 'button') do
53
+ f.g.input(:type => 'submit', :value => lang('comments.buttons.save'))
54
+ end
55
+ end
56
+ end
57
+ }
@@ -0,0 +1,79 @@
1
+ <article>
2
+ <header>
3
+ <h1>#{get_breadcrumbs}</h1>
4
+ </header>
5
+
6
+ <form method="post" action="#{@form_delete_url}">
7
+ <input type="hidden" name="csrf_token" value="#{get_csrf_token}" />
8
+
9
+ <?r if @comments and !@comments.empty? ?>
10
+ <table class="table">
11
+ <thead>
12
+ <?r if user_authorized?([:delete]) ?>
13
+ <th>
14
+ <input type="checkbox" />
15
+ </th>
16
+ <?r end ?>
17
+ <th>#{lang('comments.labels.id')}</th>
18
+ <th>#{lang('comments.labels.comment')}</th>
19
+ <th>#{lang('comments.labels.entry')}</th>
20
+ <th>#{lang('comments.labels.status')}</th>
21
+ <th>#{lang('comments.labels.name')}</th>
22
+ <th>#{lang('comments.labels.email')}</th>
23
+ <th>#{lang('comments.labels.website')}</th>
24
+ <th>#{lang('comments.labels.defensio_signature')}</th>
25
+ </thead>
26
+ <tbody>
27
+ <?r @comments.each do |comment| ?>
28
+ <tr>
29
+ <?r if user_authorized?([:delete]) ?>
30
+ <td>
31
+ <input type="checkbox" name="comment_ids[]" value="#{comment.id}" />
32
+ </td>
33
+ <?r end ?>
34
+
35
+ <td>#{comment.id}</td>
36
+
37
+ <?r if user_authorized?([:update]) ?>
38
+ <td>
39
+ #{anchor_to(
40
+ "#{comment.comment[0, 15]}...",
41
+ Comments::Controllers::Comments.r(:edit, comment.id)
42
+ )}
43
+ </td>
44
+ <?r else ?>
45
+ <td>#{comment.comment[0, 15]}...</td>
46
+ <?r end ?>
47
+
48
+ <td>#{comment.section_entry.title}</td>
49
+ <td>#{Comments::Models::Comment.status_hash[comment.status]}</td>
50
+
51
+ <?r if !comment.user_id ?>
52
+ <td>#{comment.name}</td>
53
+ <td>#{comment.email}</td>
54
+ <td>#{comment.website}</td>
55
+ <?r else ?>
56
+ <?r user = comment.user ?>
57
+ <td>#{user.name}</td>
58
+ <td>#{user.email}</td>
59
+ <td>#{user.website}</td>
60
+ <?r end ?>
61
+ <td>#{comment.defensio_signature}</td>
62
+ </tr>
63
+ <?r end ?>
64
+ </tbody>
65
+ </table>
66
+ <?r else ?>
67
+ <p>#{lang('comments.messages.no_comments')}</p>
68
+ <?r end ?>
69
+
70
+ <?r if user_authorized?([:delete]) and @comments and !@comments.empty? ?>
71
+ <div class="clearfix">
72
+ <div class="button">
73
+ <input type="submit" value="#{lang('comments.buttons.delete')}" />
74
+ </div>
75
+ </div>
76
+ <?r end ?>
77
+
78
+ </form>
79
+ </article>
@@ -8,12 +8,14 @@ Sequel.migration do
8
8
  String :name
9
9
  String :website
10
10
  String :email
11
- String :comment, :text => true
12
- Enum :status, :elements => ['open', 'closed', 'spam'], :default => 'closed'
11
+ String :comment, :text => true
12
+ String :defensio_signature
13
+ String :status, :default => 'closed'
13
14
  Time :created_at
14
15
  Time :updated_at
15
16
 
16
- foreign_key :section_entry_id, :section_entries, :on_delete => :cascade, :on_update => :cascade, :key => :id
17
+ foreign_key :section_entry_id, :section_entries, :on_delete => :cascade,
18
+ :on_update => :cascade, :key => :id
17
19
  end
18
20
  end
19
21
 
@@ -21,4 +23,4 @@ Sequel.migration do
21
23
  drop_table :comments
22
24
  end
23
25
 
24
- end
26
+ end
@@ -19,6 +19,6 @@ Zen::Package.add do |p|
19
19
 
20
20
  p.menu = [{
21
21
  :title => "Custom Fields",
22
- :url => "admin/custom_field_groups"
22
+ :url => "admin/custom-field-groups"
23
23
  }]
24
- end
24
+ end
@@ -0,0 +1,224 @@
1
+ #:nodoc:
2
+ module CustomFields
3
+ #:nodoc:
4
+ module Controllers
5
+ ##
6
+ # Controller for managing custom field groups. These groups are used
7
+ # to organize individual fields into a larger group which in turn will
8
+ # be assigned to a section.
9
+ #
10
+ # @author Yorick Peterse
11
+ # @since 0.1
12
+ #
13
+ class CustomFieldGroups < Zen::Controllers::AdminController
14
+ include ::CustomFields::Models
15
+
16
+ map '/admin/custom-field-groups'
17
+ trait :extension_identifier => 'com.zen.custom_fields'
18
+
19
+ before_all do
20
+ csrf_protection(:save, :delete) do
21
+ respond(lang('zen_general.errors.csrf'), 403)
22
+ end
23
+ end
24
+
25
+ ##
26
+ # Constructor method, called upon initialization. It's used to set the
27
+ # URL to which forms send their data and load the language pack.
28
+ #
29
+ # This method loads the following language files:
30
+ #
31
+ # * custom_field_groups
32
+ #
33
+ # @author Yorick Peterse
34
+ # @since 0.1
35
+ #
36
+ def initialize
37
+ super
38
+
39
+ @form_save_url = CustomFieldGroups.r(:save)
40
+ @form_delete_url = CustomFieldGroups.r(:delete)
41
+
42
+ Zen::Language.load('custom_field_groups')
43
+
44
+ # Set the page title
45
+ if !action.method.nil?
46
+ method = action.method.to_sym
47
+ @page_title = lang("custom_field_groups.titles.#{method}") rescue nil
48
+ end
49
+ end
50
+
51
+ ##
52
+ # Show an overview of all existing custom field groups. Using this overview a user
53
+ # can manage an existing field group, delete it or create a new one.
54
+ #
55
+ # This method requires the following permissions:
56
+ #
57
+ # * read
58
+ #
59
+ # @author Yorick Peterse
60
+ # @since 0.1
61
+ #
62
+ def index
63
+ if !user_authorized?([:read])
64
+ respond(lang('zen_general.errors.not_authorized'), 403)
65
+ end
66
+
67
+ set_breadcrumbs(lang('custom_field_groups.titles.index'))
68
+
69
+ @field_groups = CustomFieldGroup.all
70
+ end
71
+
72
+ ##
73
+ # Show a form that lets the user edit an existing custom field group.
74
+ #
75
+ # This method requires the following permissions:
76
+ #
77
+ # * read
78
+ # * update
79
+ #
80
+ # @author Yorick Peterse
81
+ # @param [Integer] id The ID of the custom field group to retrieve so that we
82
+ # can edit it.
83
+ # @since 0.1
84
+ #
85
+ def edit id
86
+ if !user_authorized?([:read, :update])
87
+ respond(lang('zen_general.errors.not_authorized'), 403)
88
+ end
89
+
90
+ set_breadcrumbs(
91
+ anchor_to(lang('custom_field_groups.titles.index'), CustomFieldGroups.r(:index)),
92
+ @page_title
93
+ )
94
+
95
+ if flash[:form_data]
96
+ @field_group = flash[:form_data]
97
+ else
98
+ @field_group = CustomFieldGroup[id.to_i]
99
+ end
100
+ end
101
+
102
+ ##
103
+ # Show a form that lets the user create a new custom field group.
104
+ #
105
+ # This method requires the following permissions:
106
+ #
107
+ # * read
108
+ # * create
109
+ #
110
+ # @author Yorick Peterse
111
+ # @since 0.1
112
+ #
113
+ def new
114
+ if !user_authorized?([:read, :create])
115
+ respond(lang('zen_general.errors.not_authorized'), 403)
116
+ end
117
+
118
+ set_breadcrumbs(
119
+ anchor_to(lang('custom_field_groups.titles.index'), CustomFieldGroups.r(:index)),
120
+ @page_title
121
+ )
122
+
123
+ @field_group = CustomFieldGroup.new
124
+ end
125
+
126
+ ##
127
+ # Method used for processing the form data and redirecting the user back to
128
+ # the proper URL. Based on the value of a hidden field named 'id' we'll determine
129
+ # if the data will be used to create a new group or to update an existing one.
130
+ #
131
+ # This method requires the following permissions:
132
+ #
133
+ # * create
134
+ # * update
135
+ #
136
+ # @author Yorick Peterse
137
+ # @since 0.1
138
+ #
139
+ def save
140
+ if !user_authorized?([:create, :update])
141
+ respond(lang('zen_general.errors.not_authorized'), 403)
142
+ end
143
+
144
+ post = request.params.dup
145
+
146
+ # Get or create a custom field group based on the ID from the hidden field.
147
+ if post['id'] and !post['id'].empty?
148
+ @field_group = CustomFieldGroup[post['id'].to_i]
149
+ save_action = :save
150
+ else
151
+ @field_group = CustomFieldGroup.new
152
+ save_action = :new
153
+ end
154
+
155
+ flash_success = lang("custom_field_groups.success.#{save_action}")
156
+ flash_error = lang("custom_field_groups.errors.#{save_action}")
157
+
158
+ begin
159
+ @field_group.update(post)
160
+ notification(:success, lang("custom_field_groups.titles.index"), flash_success)
161
+ rescue
162
+ notification(:error, lang("custom_field_groups.titles.index"), flash_error)
163
+
164
+ flash[:form_errors] = @field_group.errors
165
+ flash[:form_data] = @field_group
166
+ end
167
+
168
+ if !@field_group.nil? and @field_group.id
169
+ redirect(CustomFieldGroups.r(:edit, @field_group.id))
170
+ else
171
+ redirect(CustomFieldGroups.r(:new))
172
+ end
173
+ end
174
+
175
+ ##
176
+ # Delete an existing custom field group.
177
+ #
178
+ # In order to delete a custom field group you'll need to send a POST request
179
+ # that contains a field named 'custom_field_group_ids[]'. This field should
180
+ # contain the primary values of each field group that has to be deleted.
181
+ #
182
+ # This method requires the following permissions:
183
+ #
184
+ # * delete
185
+ #
186
+ # @author Yorick Peterse
187
+ # @since 0.1
188
+ #
189
+ def delete
190
+ if !user_authorized?([:delete])
191
+ respond(lang('zen_general.errors.not_authorized'), 403)
192
+ end
193
+
194
+ if !request.params['custom_field_group_ids'] or request.params['custom_field_group_ids'].empty?
195
+ notification(
196
+ :error,
197
+ lang('custom_field_groups.titles.index'),
198
+ lang('custom_field_groups.errors.no_delete')
199
+ )
200
+ redirect(CustomFieldGroups.r(:index))
201
+ end
202
+
203
+ request.params['custom_field_group_ids'].each do |id|
204
+ begin
205
+ CustomFieldGroup[id.to_i].destroy
206
+ notification(
207
+ :success,
208
+ lang('custom_field_groups.titles.index'),
209
+ lang('custom_field_groups.success.delete')
210
+ )
211
+ rescue
212
+ notification(
213
+ :error,
214
+ lang('custom_field_groups.titles.index'),
215
+ lang('custom_field_groups.errors.delete') % id
216
+ )
217
+ end
218
+ end
219
+
220
+ redirect_referrer
221
+ end
222
+ end
223
+ end
224
+ end