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,100 @@
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 @field_groups and !@field_groups.empty? ?>
10
+
11
+ <table class="table">
12
+ <thead>
13
+ <tr>
14
+ <?r if user_authorized?([:delete]) ?>
15
+ <th>
16
+ <input type="checkbox" />
17
+ </th>
18
+ <?r end ?>
19
+
20
+ <th>#{lang('custom_field_groups.labels.id')}</th>
21
+ <th>#{lang('custom_field_groups.labels.name')}</th>
22
+ <th>#{lang('custom_field_groups.labels.sections')}</th>
23
+
24
+ <?r if user_authorized?([:create]) ?>
25
+ <th></th>
26
+ <?r end ?>
27
+ </tr>
28
+ </thead>
29
+ <tbody>
30
+ <?r @field_groups.each do |group| ?>
31
+ <tr>
32
+ <?r if user_authorized?([:delete]) ?>
33
+ <td>
34
+ <input type="checkbox" name="custom_field_group_ids[]" value="#{group.id}" />
35
+ </td>
36
+ <?r end ?>
37
+
38
+ <td>#{group.id}</td>
39
+
40
+ <?r if user_authorized?([:update]) ?>
41
+ <td>
42
+ #{anchor_to(
43
+ group.name,
44
+ CustomFields::Controllers::CustomFieldGroups.r(:edit, group.id),
45
+ :title => group.name
46
+ )}
47
+ </td>
48
+ <?r else ?>
49
+ <td>#{group.name}</td>
50
+ <?r end ?>
51
+
52
+ <td>
53
+ <?r sections = group.sections.map { |s| s.name } ?>
54
+ <?r if !sections.empty? ?>
55
+ #{sections.join(', ')}
56
+ <?r else ?>
57
+ #{lang('custom_field_groups.labels.none')}
58
+ <?r end ?>
59
+ </td>
60
+
61
+ <?r if user_authorized?([:create]) ?>
62
+ <td>
63
+ #{anchor_to(
64
+ lang('custom_field_groups.labels.manage_fields'),
65
+ CustomFields::Controllers::CustomFields.r(:index, group.id)
66
+ )}
67
+ </td>
68
+ <?r end ?>
69
+
70
+ </tr>
71
+ <?r end ?>
72
+ </tbody>
73
+ </table>
74
+
75
+ <?r else ?>
76
+
77
+ <p>#{lang('custom_field_groups.messages.no_groups')}</p>
78
+
79
+ <?r end ?>
80
+
81
+ <div class="clearfix">
82
+
83
+ <?r if user_authorized?([:create]) ?>
84
+ <div class="button">
85
+ #{anchor_to(
86
+ lang('custom_field_groups.buttons.new'),
87
+ CustomFields::Controllers::CustomFieldGroups.r(:new)
88
+ )}
89
+ </div>
90
+ <?r end ?>
91
+
92
+ <?r if user_authorized?([:delete]) and @field_groups and !@field_groups.empty? ?>
93
+ <div class="button">
94
+ <input type="submit" value="#{lang('custom_field_groups.buttons.delete')}" />
95
+ </div>
96
+ <?r end ?>
97
+ </div>
98
+
99
+ </form>
100
+ </article>
@@ -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,7 @@
1
+ <article>
2
+ <header>
3
+ <h1>#{get_breadcrumbs}</h1>
4
+ </header>
5
+
6
+ #{render_partial :form}
7
+ </article>
@@ -0,0 +1,107 @@
1
+ <div class='tabs'>
2
+ <ul>
3
+ <li>
4
+ <a href="#general" title="#{lang('custom_fields.tabs.general')}">
5
+ #{lang('custom_fields.tabs.general')}
6
+ </a>
7
+ </li>
8
+ <li>
9
+ <a href="#settings" title="#{lang('custom_fields.tabs.settings')}">
10
+ #{lang('custom_fields.tabs.settings')}
11
+ </a>
12
+ </li>
13
+ </ul>
14
+ </div>
15
+
16
+ #{
17
+ form_for(
18
+ @custom_field, :method => :post, :action => @form_save_url, :id => :custom_field_form
19
+ ) do |f|
20
+
21
+ f.input_hidden(:id, @custom_field.id)
22
+ f.input_hidden(:custom_field_group_id, @custom_field_group_id)
23
+ f.input_hidden(:csrf_token, get_csrf_token)
24
+
25
+ f.g.div(:id => 'general') do
26
+
27
+ f.input_text(
28
+ lang('custom_fields.labels.name'),
29
+ :name
30
+ )
31
+
32
+ f.input_text(
33
+ lang('custom_fields.labels.slug'),
34
+ :slug
35
+ )
36
+
37
+ f.select(
38
+ lang('custom_fields.labels.type'),
39
+ :type,
40
+ :values => @field_type_hash,
41
+ :size => 1,
42
+ :selected => @custom_field.type
43
+ )
44
+
45
+ f.select(
46
+ lang('custom_fields.labels.format'),
47
+ :format,
48
+ :values => @format_hash,
49
+ :size => 1,
50
+ :selected => @custom_field.format
51
+ )
52
+
53
+ f.textarea(
54
+ lang('custom_fields.labels.description'),
55
+ :description,
56
+ :rows => 8
57
+ )
58
+
59
+ f.textarea(
60
+ lang('custom_fields.labels.possible_values'),
61
+ :possible_values,
62
+ :rows => 8
63
+ )
64
+
65
+ end
66
+
67
+ f.g.div(:id => 'settings') do
68
+
69
+ f.input_radio(
70
+ lang('custom_fields.labels.required'),
71
+ :required,
72
+ @custom_field.required,
73
+ :values => @boolean_hash
74
+ )
75
+
76
+ f.input_radio(
77
+ lang('custom_fields.labels.visual_editor'),
78
+ :visual_editor,
79
+ @custom_field.visual_editor,
80
+ :values => @boolean_hash
81
+ )
82
+
83
+ f.input_text(
84
+ lang('custom_fields.labels.textarea_rows'),
85
+ :textarea_rows
86
+ )
87
+
88
+ f.input_text(
89
+ lang('custom_fields.labels.text_limit'),
90
+ :text_limit
91
+ )
92
+
93
+ f.input_text(
94
+ lang('custom_fields.labels.sort_order'),
95
+ :sort_order
96
+ )
97
+
98
+ end
99
+
100
+ f.g.div(:class => 'clearfix') do
101
+ f.g.div(:class => 'button') do
102
+ f.g.input(:type => 'submit', :value => lang('custom_fields.buttons.save'))
103
+ end
104
+ end
105
+
106
+ end
107
+ }
@@ -0,0 +1,84 @@
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
+ <input type="hidden" name="custom_field_group_id" value="#{@custom_field_group_id}" />
9
+
10
+ <?r if @custom_fields and !@custom_fields.empty? ?>
11
+
12
+ <table class="table">
13
+ <thead>
14
+ <tr>
15
+ <?r if user_authorized?([:delete]) ?>
16
+ <th>
17
+ <input type="checkbox" />
18
+ </th>
19
+ <?r end ?>
20
+
21
+ <th>#{lang('custom_fields.labels.id')}</th>
22
+ <th>#{lang('custom_fields.labels.name')}</th>
23
+ <th>#{lang('custom_fields.labels.slug')}</th>
24
+ <th>#{lang('custom_fields.labels.type')}</th>
25
+ <th>#{lang('custom_fields.labels.format')}</th>
26
+ </tr>
27
+ </thead>
28
+
29
+ <tbody>
30
+ <?r @custom_fields.each do |field| ?>
31
+ <tr>
32
+ <?r if user_authorized?([:delete]) ?>
33
+ <td>
34
+ <input type="checkbox" name="custom_field_ids[]" value="#{field.id}" />
35
+ </td>
36
+ <?r end ?>
37
+
38
+ <td>#{field.id}</td>
39
+
40
+ <?r if user_authorized?([:update]) ?>
41
+ <td>
42
+ #{anchor_to(
43
+ field.name,
44
+ CustomFields::Controllers::CustomFields.r(:edit, @custom_field_group_id, field.id),
45
+ :title => field.name
46
+ )}
47
+ </td>
48
+ <?r else ?>
49
+ <td>#{field.name}</td>
50
+ <?r end ?>
51
+
52
+ <td>#{field.slug}</td>
53
+ <td>#{lang("custom_fields.special.type_hash.#{field.type}")}</td>
54
+ <td>#{@format_hash[field.format]}</td>
55
+ </tr>
56
+ <?r end ?>
57
+ </tbody>
58
+ </table>
59
+
60
+ <?r else ?>
61
+
62
+ <p>#{lang('custom_fields.messages.no_fields')}</p>
63
+
64
+ <?r end ?>
65
+
66
+ <div class="clearfix">
67
+ <?r if user_authorized?([:create]) ?>
68
+ <div class="button">
69
+ #{anchor_to(
70
+ lang('custom_fields.buttons.new'),
71
+ CustomFields::Controllers::CustomFields.r(:new, @custom_field_group_id)
72
+ )}
73
+ </div>
74
+ <?r end ?>
75
+
76
+ <?r if user_authorized?([:delete]) and @custom_fields and !@custom_fields.empty? ?>
77
+ <div class="button">
78
+ <input type="submit" value="#{lang('custom_fields.buttons.delete')}" />
79
+ </div>
80
+ <?r end ?>
81
+
82
+ </div>
83
+ </form>
84
+ </article>
@@ -0,0 +1,7 @@
1
+ <article>
2
+ <header>
3
+ <h1>#{get_breadcrumbs}</h1>
4
+ </header>
5
+
6
+ #{render_partial :form}
7
+ </article>
@@ -14,18 +14,19 @@ Sequel.migration do
14
14
  String :name, :null => false
15
15
  String :slug, :null => false, :unique => true
16
16
  String :description, :text => true
17
- Integer :sort_order, :null => false, :default => 0
18
- Enum :type, :null => false, :elements => ['textbox', 'textarea', 'radio', 'checkbox', 'date', 'select', 'select_multiple'], :default => 'textbox'
19
- Enum :format, :null => false, :elements => ['plain', 'html', 'textile', 'markdown'], :default => 'plain'
17
+ Integer :sort_order, :default => 0
18
+ String :type, :null => false, :default => 'textbox'
19
+ String :format, :null => false, :default => 'plain'
20
20
  String :possible_values, :text => true
21
21
 
22
22
  # Custom field settings
23
23
  TrueClass :required, :null => false, :default => false
24
24
  TrueClass :visual_editor, :null => false, :default => true
25
- Integer :textarea_rows, :null => false, :default => 6
26
- Integer :text_limit, :null => false, :default => 255
25
+ Integer :textarea_rows, :default => 10
26
+ Integer :text_limit, :default => 1
27
27
 
28
- foreign_key :custom_field_group_id, :custom_field_groups, :on_delete => :cascade, :on_update => :cascade, :key => :id
28
+ foreign_key :custom_field_group_id, :custom_field_groups, :on_delete => :cascade,
29
+ :on_update => :cascade, :key => :id
29
30
  end
30
31
 
31
32
  create_table :custom_field_groups_sections do
@@ -50,4 +51,4 @@ Sequel.migration do
50
51
  drop_table :custom_field_groups
51
52
  end
52
53
 
53
- end
54
+ end
@@ -0,0 +1,59 @@
1
+
2
+ # Update the list of helper paths
3
+ Ramaze::HelpersHelper.options.paths << __DIR__('menus')
4
+
5
+ # Load all our models
6
+ require __DIR__('menus/model/menu')
7
+ require __DIR__('menus/model/menu_item')
8
+
9
+ # Load all controllers
10
+ require __DIR__('menus/controller/menus')
11
+ require __DIR__('menus/controller/menu_items')
12
+
13
+ # Load all Liquid tags and register them
14
+ require __DIR__('menus/liquid/menus')
15
+
16
+ Liquid::Template.register_tag('menus', Menus::Liquid::Menus)
17
+
18
+ # Describe the package
19
+ Zen::Package.add do |p|
20
+ # The type of extension. Can either be "theme" or "extension".
21
+ p.type = 'extension'
22
+
23
+ # The name of the package
24
+ p.name = 'Menus'
25
+
26
+ # The person/company that made the package
27
+ p.author = 'Yorick Peterse'
28
+
29
+ # A URL to a page about the package
30
+ p.url = 'http://zen-cms.com/userguide/menus'
31
+
32
+ # The version number of the package
33
+ p.version = '1.0'
34
+
35
+ # Describe what your theme or extension does.
36
+ p.about = 'The Menus extension allows you to easily create navigation menus
37
+ for the frontend.'
38
+
39
+ ##
40
+ # An identifier is a unique string for your package in the following format:
41
+ #
42
+ # * com.AUTHOR.NAME for extensions
43
+ # * com.AUTHOR.themes.NAME for themes
44
+ #
45
+ # An example of this would be "com.zen.sections" or "com.zen.themes.zen_website".
46
+ #
47
+ p.identifier = 'com.zen.menus'
48
+
49
+ ##
50
+ # Path to the directory containing the controllers, models, etc.
51
+ #
52
+ p.directory = __DIR__('menus')
53
+
54
+ # Note that themes can not have menu items (they'll be ignored).
55
+ p.menu = [{
56
+ :title => "Menus",
57
+ :url => "/admin/menus"
58
+ }]
59
+ end
@@ -0,0 +1,244 @@
1
+ #:nodoc:
2
+ module Menus
3
+ #:nodoc:
4
+ module Controllers
5
+ ##
6
+ # Controller for managing individual navigation items that belong to a menu.
7
+ #
8
+ # @author Yorick Peterse
9
+ # @since 0.2a
10
+ #
11
+ class MenuItems < ::Zen::Controllers::AdminController
12
+ include ::Menus::Models
13
+
14
+ map '/admin/menu-items'
15
+ trait :extension_identifier => 'com.zen.menus'
16
+ helper :menu_item
17
+
18
+ before_all do
19
+ csrf_protection(:save, :delete) do
20
+ respond(lang('zen_general.errors.csrf'), 403)
21
+ end
22
+ end
23
+
24
+ ##
25
+ # Initializes the class, loads all language packs and sets the form URLs.
26
+ #
27
+ # This method loads the following language files:
28
+ #
29
+ # * menus
30
+ # * menu_items
31
+ #
32
+ # @author Yorick Peterse
33
+ # @since 0.2a
34
+ #
35
+ def initialize
36
+ super
37
+
38
+ @form_save_url = MenuItems.r(:save)
39
+ @form_delete_url = MenuItems.r(:delete)
40
+
41
+ Zen::Language.load('menu_items')
42
+ Zen::Language.load('menus')
43
+
44
+ # Set the page title based on the current method
45
+ if !action.method.nil?
46
+ method = action.method.to_sym
47
+ @page_title = lang("menu_items.titles.#{method}") rescue nil
48
+ end
49
+ end
50
+
51
+ ##
52
+ # Show an overview of all navigation items for the current navigation menu.
53
+ #
54
+ # This method requires the following permissions:
55
+ #
56
+ # * read
57
+ #
58
+ # @author Yorick Peterse
59
+ # @since 0.2a
60
+ # @param [Integer] menu_id The ID of the current navigation menu.
61
+ #
62
+ def index(menu_id = nil)
63
+ if !user_authorized?([:read])
64
+ respond(lang('zen_general.errors.not_authorized'), 403)
65
+ end
66
+
67
+ validate_menu(menu_id)
68
+
69
+ set_breadcrumbs(
70
+ anchor_to(lang('menus.titles.index'), Menus.r(:index)),
71
+ lang('menu_items.titles.index')
72
+ )
73
+
74
+ @menu_id = menu_id
75
+ @menu_items = Menu[menu_id.to_i].menu_items
76
+ end
77
+
78
+ ##
79
+ # Allow the user to edit an existing navigation item.
80
+ #
81
+ # This method requires the following permissions:
82
+ #
83
+ # * read
84
+ # * update
85
+ #
86
+ # @author Yorick Peterse
87
+ # @since 0.2a
88
+ # @param [Integer] menu_id The ID of the current navigation menu.
89
+ # @param [Integer] id The ID of the menu item to edit.
90
+ #
91
+ def edit(menu_id = nil, id)
92
+ if !user_authorized?([:read, :update])
93
+ respond(lang('zen_general.errors.not_authorized'), 403)
94
+ end
95
+
96
+ validate_menu(menu_id)
97
+
98
+ set_breadcrumbs(
99
+ anchor_to(lang('menus.titles.index'), Menus.r(:index)),
100
+ anchor_to(lang('menu_items.titles.index'), MenuItems.r(:index, menu_id)),
101
+ lang('menu_items.titles.edit')
102
+ )
103
+
104
+ @menu_id = menu_id
105
+
106
+ if flash[:form_data]
107
+ @menu_item = flash[:form_data]
108
+ else
109
+ @menu_item = MenuItem[id.to_i]
110
+ end
111
+ end
112
+
113
+ ##
114
+ # Allow the user to create a new menu item for the current menu.
115
+ #
116
+ # This method requires the following permissions:
117
+ #
118
+ # * read
119
+ # * create
120
+ #
121
+ # @author Yorick Peterse
122
+ # @since 0.2a
123
+ # @param [Integer] menu_id The ID of the current navigation menu.
124
+ #
125
+ def new(menu_id = nil)
126
+ if !user_authorized?([:create, :read])
127
+ respond(lang('zen_general.errors.not_authorized'), 403)
128
+ end
129
+
130
+ validate_menu(menu_id)
131
+
132
+ set_breadcrumbs(
133
+ anchor_to(lang('menus.titles.index'), Menus.r(:index)),
134
+ anchor_to(lang('menu_items.titles.index'), MenuItems.r(:index, menu_id)),
135
+ lang('menu_items.titles.new')
136
+ )
137
+
138
+ @menu_id = menu_id
139
+ @menu_item = MenuItem.new
140
+ end
141
+
142
+ ##
143
+ # Saves an existing menu iten or creates a new one using the supplied POST data.
144
+ #
145
+ # This method requires the following permissions:
146
+ #
147
+ # * create
148
+ # * update
149
+ #
150
+ # @author Yorick Peterse
151
+ # @since 0.2a
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
+ if post['parent_id'].empty? or post['parent_id'] == post['id']
160
+ post['parent_id'] = nil
161
+ end
162
+
163
+ # Determine if we're saving changes made to an existing menu item or if we're
164
+ # going to create a new one.
165
+ if !post['id'].empty?
166
+ @menu_item = MenuItem[post['id'].to_i]
167
+ save_action = :save
168
+ else
169
+ @menu_item = MenuItem.new
170
+ save_action = :new
171
+ end
172
+
173
+ # Set our notifications
174
+ flash_success = lang("menu_items.success.#{save_action}")
175
+ flash_error = lang("menu_items.errors.#{save_action}")
176
+
177
+ # Time to save the data
178
+ begin
179
+ @menu_item.update(post)
180
+ notification(:success, lang('menu_items.titles.index'), flash_success)
181
+ rescue
182
+ notification(:error, lang('menu_items.titles.index'), flash_error)
183
+
184
+ flash[:form_data] = @menu_item
185
+ flash[:form_errors] = @menu_item.errors
186
+ end
187
+
188
+ if @menu_item.id
189
+ redirect(MenuItems.r(:edit, @menu_item.menu_id, @menu_item.id))
190
+ else
191
+ redirect_referrer
192
+ end
193
+ end
194
+
195
+ ##
196
+ # Delete all specified menu items based on the values in the POST array
197
+ # "menu_item_ids". This method requires the following permissions:
198
+ #
199
+ # * delete
200
+ #
201
+ # @author Yorick Peterse
202
+ # @since 0.2a
203
+ #
204
+ def delete
205
+ if !user_authorized?([:delete])
206
+ respond(lang('zen_general.errors.not_authorized'), 403)
207
+ end
208
+
209
+ post = request.params.dup
210
+
211
+ if !post['menu_item_ids'] or post['menu_item_ids'].empty?
212
+ notification(
213
+ :error,
214
+ lang('menu_items.titles.index'),
215
+ lang('menu_items.errors.no_delete')
216
+ )
217
+
218
+ redirect_referrer
219
+ end
220
+
221
+ post['menu_item_ids'].each do |id|
222
+ begin
223
+ MenuItem[id.to_i].destroy
224
+ rescue
225
+ notification(
226
+ :error,
227
+ lang('menu_items.titles.index'),
228
+ lang('menu_items.errors.delete') % id
229
+ )
230
+ redirect_referrer
231
+ end
232
+ end
233
+
234
+ notification(
235
+ :success,
236
+ lang('menu_items.titles.index'),
237
+ lang('menu_items.success.delete')
238
+ )
239
+
240
+ redirect_referrer
241
+ end
242
+ end
243
+ end
244
+ end