zen 0.1a → 0.2

Sign up to get free protection for your applications and to get access to all the features.
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