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
@@ -1,4 +1,6 @@
1
+ #:nodoc:
1
2
  module Zen
3
+ #:nodoc:
2
4
  module Liquid
3
5
  ##
4
6
  # Module that can be used to allow Liquid tags to use data that would otherwise
@@ -1,6 +1,6 @@
1
- require 'enumerator'
2
-
1
+ #:nodoc:
3
2
  module Zen
3
+ #:nodoc:
4
4
  module Liquid
5
5
  ##
6
6
  # Module that provides several methods that can be used to ease the process of
@@ -17,14 +17,14 @@ module Zen
17
17
  # and turns it into a key/value hash. This makes it easier to
18
18
  # use tags with key/value variables such as the following:
19
19
  #
20
- # bc. {% my_tag name="yorick" %}
20
+ # {% my_tag name="yorick" %}
21
21
  #
22
22
  # @author Yorick Peterse
23
23
  # @since 0.1
24
24
  # @param [String] string the raw string specified after the tag name.
25
- # @return [Hash]
25
+ # @return [Hash] A key/value hash of all specified arguments.
26
26
  #
27
- def parse_key_values string
27
+ def parse_key_values(string)
28
28
  key_values = {}
29
29
 
30
30
  # Thanks to Michael Trommer (https://github.com/entropie) for coming up with
@@ -36,21 +36,72 @@ module Zen
36
36
  # Returns the data in the format of {'key' => 'value'}
37
37
  return key_values
38
38
  end
39
-
39
+
40
+ ##
41
+ # Merges the values in the given context with the hash. This means that if the
42
+ # Liquid context has a key that matches a value in the hash that key's value
43
+ # will become the value of the key in the hash. Confused? Assume our context has
44
+ # a key of "username" which is set to "YorickPeterse". If our hash had a key
45
+ # who's value is "username" that value would be replaced with "YorickPeterse".
46
+ #
47
+ # If context was a hash (it's an object) this would result in something like the
48
+ # following:
49
+ #
50
+ # context = {'username' => 'YorickPeterse'}
51
+ # hash = {'selected_user' => 'username'}
52
+ #
53
+ # merge_context(hash, context) # => {'selected_user' => 'YorickPeterse'}
54
+ #
55
+ # This method will also automatically escape all variables using the h() method
56
+ # so you don't have to worry about nasty input.
57
+ #
58
+ # @author Yorick Peterse
59
+ # @since 0.2a
60
+ # @param [Hash] hash The input hash that may contain Liquid variables
61
+ # @param [Liquid::Context] context The Liquid context from which to extract any
62
+ # variables set in the hash.
63
+ # @return [Hash] The merged hash.
64
+ #
65
+ def merge_context(hash, context)
66
+ if hash.class != Hash
67
+ raise(
68
+ TypeError,
69
+ "The first argument of this method should be a hash instead of \"#{hash.class}\""
70
+ )
71
+ end
72
+
73
+ hash.each do |k, v|
74
+ v = v.to_s
75
+
76
+ # Check if the Liquid context has a matching key and extract the value of that key
77
+ # if this is the case.
78
+ if context.respond_to?('key?')
79
+ if context.key?(v)
80
+ hash[k] = h(context[v])
81
+ end
82
+ else
83
+ if context.has_key?(v)
84
+ hash[k] = h(context[v])
85
+ end
86
+ end
87
+ end
88
+
89
+ return hash
90
+ end
91
+
40
92
  ##
41
93
  # Converts the given input data to HTML using the specified markup engine.
42
94
  #
43
95
  # @example
44
- #
45
96
  # markup_to_html("h2. Hello world!", :textile)
46
97
  #
47
98
  # @author Yorick Peterse
48
99
  # @since 0.1
49
100
  # @param [String] markup The raw markup that has to be converted to HTML.
50
101
  # @param [Symbol] engine The markup engine to use such as Textile.
51
- # @return [String]
102
+ # @return [String] The HTML generated by the markup engine.
52
103
  #
53
- def markup_to_html markup, engine
104
+ def markup_to_html(markup, engine)
54
105
  engine = engine.to_sym
55
106
 
56
107
  case engine
@@ -1,4 +1,6 @@
1
+ #:nodoc:
1
2
  module Zen
3
+ #:nodoc:
2
4
  module Liquid
3
5
  ##
4
6
  # The Redirect tag can be used to redirect a user from one URL to another.
@@ -6,13 +8,20 @@ module Zen
6
8
  # @example
7
9
  # {% redirect "blog/index" %}
8
10
  #
11
+ # Optionally you can redirect a user to a 404 page by doing the following:
12
+ #
13
+ # {% redirect "404" %}
14
+ #
15
+ # This will render the 404 template but without changing the current URL.
16
+ #
9
17
  # @author Yorick Peterse
10
18
  # @since 0.1
11
19
  #
12
20
  class Redirect < ::Liquid::Tag
13
21
  include ::Ramaze::Helper::Redirect
14
22
  include ::Zen::Liquid::ControllerBehavior
15
-
23
+ include ::Ramaze::Helper::Render
24
+
16
25
  ##
17
26
  # Creates a new instance of this tag by passing the tag name, arguments and HTML
18
27
  # tokens to the construct.
@@ -23,8 +32,10 @@ module Zen
23
32
  # @param [String] arguments All additional arguments passed as a string.
24
33
  # @param [String] tokens All tokens (HTML mostly) inside the tag block.
25
34
  #
26
- def initialize tag_name, arguments, tokens
27
- @url = arguments.gsub('"', '').gsub("'", '')
35
+ def initialize(tag_name = 'redirect', arguments = '', tokens = '')
36
+ super
37
+
38
+ @url = arguments.gsub('"', '').gsub("'", '').strip
28
39
  end
29
40
 
30
41
  ##
@@ -35,12 +46,24 @@ module Zen
35
46
  # @since 0.1
36
47
  # @param [Object] context The current Liquid context
37
48
  #
38
- def render context
49
+ def render(context)
39
50
  if @url.nil? or @url.empty?
40
- raise ArgumentError, "You need to specify a URL in order to redirect a user"
51
+ raise(ArgumentError, "You need to specify a URL in order to redirect a user")
41
52
  end
42
53
 
43
- redirect(@url)
54
+ # 404 URLs are treated differently than other URLs
55
+ if @url == '404'
56
+ theme = ::Zen::Package[session[:settings][:theme]]
57
+ not_found = theme.directory + "/templates/404.liquid"
58
+
59
+ if File.exist?(not_found)
60
+ respond(action.instance.render_file(not_found), 404)
61
+ else
62
+ respond("The requested page could not be found", 404)
63
+ end
64
+ else
65
+ redirect(@url)
66
+ end
44
67
  end
45
68
  end
46
69
  end
@@ -1,4 +1,6 @@
1
+ #:nodoc:
1
2
  module Zen
3
+ #:nodoc:
2
4
  module Liquid
3
5
  ##
4
6
  # Tag block that can be used to strip leading and trailing characters from
@@ -31,7 +33,7 @@ module Zen
31
33
  # @param [String] html The HTML inside the block.
32
34
  # @since 0.1
33
35
  #
34
- def initialize tag_name, arguments, html
36
+ def initialize(tag_name = 'strip', arguments = '', html = '')
35
37
  super
36
38
 
37
39
  @arguments = {'start' => '', 'end' => ''}
@@ -1,12 +1,14 @@
1
+ #:nodoc:
1
2
  module Sequel
3
+ #:nodoc:
2
4
  class Model
3
5
  ##
4
- # Retrieves all primary values and an optional column and returns the results as an array of hashes in
5
- # which the keys of these hashes are the IDs and the values the values of the specified column.
6
- # This array can be used when creating <select> elements using the BlueForm helper.
6
+ # Retrieves all primary values and an optional column and returns the results as
7
+ # an array of hashes in which the keys of these hashes are the IDs and the values
8
+ # the values of the specified column. This array can be used when creating <select>
9
+ # elements using the BlueForm helper.
7
10
  #
8
11
  # @example
9
- #
10
12
  # Sections::Models::Section.pk_hash(:name) # => {1 => 'Blog', 2 => 'General'}
11
13
  #
12
14
  # @author Yorick Peterse
@@ -23,4 +25,4 @@ module Sequel
23
25
  return hash
24
26
  end
25
27
  end
26
- end
28
+ end
@@ -1,9 +1,10 @@
1
- # Load the language pack and configure Sequel to use that pack
2
- lang = Zen::Language.load 'zen_models'
1
+ include Zen::Language
3
2
 
4
- # When passing a hash to update() or create() we'll ignore any keys that don't belong in the table.
5
- # This allows you to directly pass request.params to these methods without having to filter the hash
6
- # yourself.
3
+ Zen::Language.load('zen_models')
4
+
5
+ # When passing a hash to update() or create() we'll ignore any keys that don't belong
6
+ # in the table. This allows you to directly pass request.params to these methods
7
+ # without having to filter the hash yourself.
7
8
  Sequel::Model.strict_param_setting = false
8
9
 
9
10
  # Load all the required plugins
@@ -12,16 +13,66 @@ Sequel::Model.plugin :association_pks
12
13
  Sequel::Model.plugin :schema
13
14
 
14
15
  Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS.merge!(
15
- :exact_length => {:message => lang.exact_length},
16
- :format => {:message => lang.format},
17
- :includes => {:message => lang.includes, :allow_nil => false},
18
- :integer => {:message => lang.integer, :allow_nil => true},
19
- :length_range => {:message => lang.length_range},
20
- :max_length => {:message => lang.max_length, :allow_nil => true},
21
- :min_length => {:message => lang.min_length, :allow_nil => true},
22
- :not_string => {:message => lang.not_string},
23
- :numeric => {:message => lang.numeric},
24
- :type => {:message => lang.type},
25
- :presence => {:message => lang.presence},
26
- :unique => {:message => lang.unique}
27
- )
16
+ {
17
+ :exact_length => {
18
+ :message => lambda do |length|
19
+ lang('zen_models.exact_length') & length
20
+ end
21
+ },
22
+
23
+ :format => {
24
+ :message => lang('zen_models.format')
25
+ },
26
+
27
+ :includes => {
28
+ :message => lambda do |arg|
29
+ lang('zen_models.includes') % arg.inspect
30
+ end,
31
+ :allow_nil => false
32
+ },
33
+
34
+ :integer => {
35
+ :message => lang('zen_models.integer'),
36
+ :allow_nil => true
37
+ },
38
+
39
+ :length_range =>
40
+ {
41
+ :message => lang('zen_models.length_range')
42
+ },
43
+
44
+ :max_length => {
45
+ :message => lambda do |length|
46
+ lang('zen_models.max_length') % length
47
+ end,
48
+ :allow_nil => true
49
+ },
50
+
51
+ :min_length => {
52
+ :message => lambda do |length|
53
+ lang('zen_models.min_length') % length
54
+ end
55
+ },
56
+
57
+ :not_string => {
58
+ :message => lang('zen_models.not_string')
59
+ },
60
+
61
+ :numeric => {
62
+ :message => lang('zen_models.numeric')
63
+ },
64
+
65
+ :type => {
66
+ :message => lambda do |type|
67
+ lang('zen_models.type') % type
68
+ end
69
+ },
70
+
71
+ :presence => {
72
+ :message => lang('zen_models.presence')
73
+ },
74
+
75
+ :unique => {
76
+ :message => lang('zen_models.unique')
77
+ }
78
+ })
@@ -0,0 +1,7 @@
1
+ require __DIR__('categories/lib/categories')
2
+ require __DIR__('comments/lib/comments')
3
+ require __DIR__('custom_fields/lib/custom_fields')
4
+ require __DIR__('menus/lib/menus')
5
+ require __DIR__('sections/lib/sections')
6
+ require __DIR__('settings/lib/settings')
7
+ require __DIR__('users/lib/users')
@@ -12,13 +12,13 @@ Zen::Package.add do |p|
12
12
  p.name = 'Categories'
13
13
  p.author = 'Yorick Peterse'
14
14
  p.url = 'http://yorickpeterse.com/'
15
- p.version = '0.1'
15
+ p.version = '1.0'
16
16
  p.about = "Module for managing categories. Categories can be used to organize section entries."
17
17
  p.identifier = 'com.zen.categories'
18
18
  p.directory = __DIR__('categories')
19
19
 
20
20
  p.menu = [{
21
21
  :title => "Categories",
22
- :url => "admin/category_groups"
22
+ :url => "admin/category-groups"
23
23
  }]
24
- end
24
+ end
@@ -0,0 +1,250 @@
1
+ #:nodoc:
2
+ module Categories
3
+ #:nodoc:
4
+ module Controllers
5
+ ##
6
+ # Categories can be seen as "tags" for your section entries. They describe the
7
+ # type of entry just like tags except that categories generally cover larger elements.
8
+ # When adding a new entry categories aren't required so you're free to ignore
9
+ # them if you don't need them.
10
+ #
11
+ # @author Yorick Peterse
12
+ # @since 0.1
13
+ #
14
+ class Categories < Zen::Controllers::AdminController
15
+ include ::Categories::Models
16
+
17
+ map '/admin/categories'
18
+ trait :extension_identifier => 'com.zen.categories'
19
+
20
+ before_all do
21
+ csrf_protection(:save, :delete) do
22
+ respond(lang('zen_general.errors.csrf'), 403)
23
+ end
24
+ end
25
+
26
+ ##
27
+ # The constructor is used to set various options such as the form URLs and load
28
+ # the language pack for the categories module.
29
+ #
30
+ # The following language files are loaded:
31
+ #
32
+ # * categories
33
+ # * category_groups
34
+ #
35
+ # @author Yorick Peterse
36
+ # @since 0.1
37
+ #
38
+ def initialize
39
+ super
40
+
41
+ @form_save_url = Categories.r(:save)
42
+ @form_delete_url = Categories.r(:delete)
43
+
44
+ Zen::Language.load('categories')
45
+ Zen::Language.load('category_groups')
46
+
47
+ # Set the page title
48
+ if !action.method.nil?
49
+ method = action.method.to_s
50
+ @page_title = lang("categories.titles.#{method}") rescue nil
51
+ end
52
+ end
53
+
54
+ ##
55
+ # Show an overview of all existing categories and allow the user
56
+ # to create and manage these categories.
57
+ #
58
+ # This method requires the following permissions:
59
+ #
60
+ # * read
61
+ #
62
+ # @author Yorick Peterse
63
+ # @param [Integer] category_group_id The ID of the category group that's currently
64
+ # being managed by the user.
65
+ # @since 0.1
66
+ #
67
+ def index category_group_id
68
+ if !user_authorized?([:read])
69
+ respond(lang('zen_general.errors.not_authorized'), 403)
70
+ end
71
+
72
+ set_breadcrumbs(
73
+ anchor_to(lang('category_groups.titles.index'), CategoryGroups.r(:index)),
74
+ lang('categories.titles.index')
75
+ )
76
+
77
+ @category_group_id = category_group_id.to_i
78
+ @categories = CategoryGroup[@category_group_id].categories
79
+ end
80
+
81
+ ##
82
+ # Edit an existing category based on the ID specified in the URL.
83
+ #
84
+ # This method requires the following permissions:
85
+ #
86
+ # * read
87
+ # * update
88
+ #
89
+ # @author Yorick Peterse
90
+ # @param [Integer] category_group_id The category group ID.
91
+ # @param [Integer] id The ID of the category to edit.
92
+ # @since 0.1
93
+ #
94
+ def edit category_group_id, id
95
+ if !user_authorized?([:read, :update])
96
+ respond(lang('zen_general.errors.not_authorized'), 403)
97
+ end
98
+
99
+ set_breadcrumbs(
100
+ anchor_to(lang('category_groups.titles.index'), CategoryGroups.r(:index)),
101
+ anchor_to(lang('categories.titles.index'), Categories.r(:index, category_group_id)),
102
+ lang('categories.titles.edit')
103
+ )
104
+
105
+ @category_group_id = category_group_id.to_i
106
+
107
+ if flash[:form_data]
108
+ @category = flash[:form_data]
109
+ else
110
+ @category = Category[id.to_i]
111
+ end
112
+ end
113
+
114
+ ##
115
+ # Create a new category.
116
+ #
117
+ # This method requires the following permissions:
118
+ #
119
+ # * read
120
+ # * create
121
+ #
122
+ # @author Yorick Peterse
123
+ # @param [Integer] category_group_id The ID of the category group.
124
+ # @since 0.1
125
+ #
126
+ def new category_group_id
127
+ if !user_authorized?([:read, :create])
128
+ respond(lang('zen_general.errors.not_authorized'), 403)
129
+ end
130
+
131
+ set_breadcrumbs(
132
+ anchor_to(lang('category_groups.titles.index'), CategoryGroups.r(:index)),
133
+ anchor_to(lang('categories.titles.index'), Categories.r(:index, category_group_id)),
134
+ lang('categories.titles.new')
135
+ )
136
+
137
+ @category_group_id = category_group_id.to_i
138
+ @category = Category.new
139
+ end
140
+
141
+ ##
142
+ # Save the changes made to an existing category or create a new one based
143
+ # on the current POST data.
144
+ #
145
+ # This method requires the following permissions:
146
+ #
147
+ # * create
148
+ # * update
149
+ #
150
+ # @author Yorick Peterse
151
+ # @since 0.1
152
+ #
153
+ def save
154
+ if !user_authorized?([:create, :update])
155
+ respond(lang('zen_general.errors.not_authorized'), 403)
156
+ end
157
+
158
+ post = request.params.dup
159
+ category_group_id = post['category_group_id']
160
+
161
+ post.delete('slug') if post['slug'].empty?
162
+
163
+ # Retrieve the category and set the notifications based on if the ID has
164
+ # been specified or not.
165
+ if post['id'] and !post['id'].empty?
166
+ @category = Category[post['id'].to_i]
167
+ save_action = :save
168
+ else
169
+ @category = Category.new
170
+ save_action = :new
171
+ end
172
+
173
+ flash_success = lang("categories.success.#{save_action}")
174
+ flash_error = lang("categories.errors.#{save_action}")
175
+
176
+ # Try to update the category
177
+ begin
178
+ @category.update(post)
179
+ notification(:success, lang('categories.titles.index'), flash_success)
180
+ rescue
181
+ notification(:error, lang('categories.titles.index'), flash_error)
182
+
183
+ flash[:form_errors] = @category.errors
184
+ flash[:form_data] = @category
185
+ end
186
+
187
+ if @category.id
188
+ redirect(Categories.r(:edit, category_group_id, @category.id))
189
+ else
190
+ redirect(Categories.r(:new, category_group_id))
191
+ end
192
+ end
193
+
194
+ ##
195
+ # Delete all specified category groups and their categories. In
196
+ # order to delete a number of groups an array of fields, named "category_group_ids"
197
+ # is required. This array will contain all the primary values of each group that
198
+ # has to be deleted.
199
+ #
200
+ # This method requires the following permissions:
201
+ #
202
+ # * delete
203
+ #
204
+ # @author Yorick Peterse
205
+ # @since 0.1
206
+ #
207
+ def delete
208
+ if !user_authorized?([:delete])
209
+ respond(lang('zen_general.errors.not_authorized'), 403)
210
+ end
211
+
212
+ post = request.params.dup
213
+ category_group_id = post['category_group_id'].to_i
214
+
215
+ # Obviously we'll require some IDs
216
+ if !request.params['category_ids'] or request.params['category_ids'].empty?
217
+ notification(
218
+ :error,
219
+ lang('categories.titles.index'),
220
+ lang('categorieserrors.no_delete')
221
+ )
222
+
223
+ redirect(Categories.r(:index, category_group_id))
224
+ end
225
+
226
+ # Delete each section
227
+ request.params['category_ids'].each do |id|
228
+ begin
229
+ Category[id.to_i].destroy
230
+ notification(
231
+ :success,
232
+ lang('categories.titles.index'),
233
+ lang('categories.success.delete')
234
+ )
235
+
236
+ rescue
237
+ notification(
238
+ :error,
239
+ lang('categories.titles.index'),
240
+ lang('categories.errors.delete') % id
241
+ )
242
+
243
+ end
244
+ end
245
+
246
+ redirect(Categories.r(:index, category_group_id))
247
+ end
248
+ end
249
+ end
250
+ end