zen 0.1a

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 (338) hide show
  1. data/LICENSE +19 -0
  2. data/MANIFEST +337 -0
  3. data/README.textile +42 -0
  4. data/Rakefile +6 -0
  5. data/bin/zen +9 -0
  6. data/doc/Categories.html +93 -0
  7. data/doc/Categories/Controllers.html +93 -0
  8. data/doc/Categories/Controllers/Categories.html +995 -0
  9. data/doc/Categories/Controllers/CategoryGroups.html +878 -0
  10. data/doc/Categories/Models.html +97 -0
  11. data/doc/Categories/Models/Category.html +269 -0
  12. data/doc/Categories/Models/CategoryGroup.html +231 -0
  13. data/doc/Comments.html +93 -0
  14. data/doc/Comments/Controllers.html +93 -0
  15. data/doc/Comments/Controllers/Comments.html +797 -0
  16. data/doc/Comments/Controllers/CommentsForm.html +487 -0
  17. data/doc/Comments/Liquid.html +93 -0
  18. data/doc/Comments/Liquid/CommentForm.html +522 -0
  19. data/doc/Comments/Liquid/Comments.html +543 -0
  20. data/doc/Comments/Models.html +95 -0
  21. data/doc/Comments/Models/Comment.html +260 -0
  22. data/doc/CustomFields.html +93 -0
  23. data/doc/CustomFields/Controllers.html +93 -0
  24. data/doc/CustomFields/Controllers/CustomFieldGroups.html +902 -0
  25. data/doc/CustomFields/Controllers/CustomFields.html +974 -0
  26. data/doc/CustomFields/Models.html +97 -0
  27. data/doc/CustomFields/Models/CustomField.html +272 -0
  28. data/doc/CustomFields/Models/CustomFieldGroup.html +259 -0
  29. data/doc/CustomFields/Models/CustomFieldValue.html +154 -0
  30. data/doc/Ramaze.html +93 -0
  31. data/doc/Ramaze/Helper.html +93 -0
  32. data/doc/Ramaze/Helper/ACL.html +531 -0
  33. data/doc/Ramaze/Helper/Asset.html +617 -0
  34. data/doc/Ramaze/Helper/Breadcrumb.html +411 -0
  35. data/doc/Ramaze/Helper/Common.html +738 -0
  36. data/doc/Sections.html +93 -0
  37. data/doc/Sections/Controllers.html +93 -0
  38. data/doc/Sections/Controllers/SectionEntries.html +1100 -0
  39. data/doc/Sections/Controllers/Sections.html +953 -0
  40. data/doc/Sections/Liquid.html +93 -0
  41. data/doc/Sections/Liquid/SectionEntries.html +674 -0
  42. data/doc/Sections/Liquid/Sections.html +494 -0
  43. data/doc/Sections/Models.html +97 -0
  44. data/doc/Sections/Models/Section.html +272 -0
  45. data/doc/Sections/Models/SectionEntry.html +264 -0
  46. data/doc/Sequel.html +91 -0
  47. data/doc/Sequel/Model.html +243 -0
  48. data/doc/Settings.html +93 -0
  49. data/doc/Settings/Controllers.html +91 -0
  50. data/doc/Settings/Controllers/Settings.html +565 -0
  51. data/doc/Settings/Liquid.html +91 -0
  52. data/doc/Settings/Liquid/Setting.html +426 -0
  53. data/doc/Settings/Models.html +95 -0
  54. data/doc/Settings/Models/Setting.html +293 -0
  55. data/doc/Users.html +93 -0
  56. data/doc/Users/Controllers.html +93 -0
  57. data/doc/Users/Controllers/AccessRules.html +904 -0
  58. data/doc/Users/Controllers/UserGroups.html +879 -0
  59. data/doc/Users/Controllers/Users.html +1124 -0
  60. data/doc/Users/Liquid.html +93 -0
  61. data/doc/Users/Liquid/User.html +480 -0
  62. data/doc/Users/Liquid/Users.html +495 -0
  63. data/doc/Users/Models.html +97 -0
  64. data/doc/Users/Models/AccessRule.html +257 -0
  65. data/doc/Users/Models/User.html +649 -0
  66. data/doc/Users/Models/UserGroup.html +267 -0
  67. data/doc/Zen.html +391 -0
  68. data/doc/Zen/Bin.html +113 -0
  69. data/doc/Zen/Bin/Base.html +727 -0
  70. data/doc/Zen/Controllers.html +115 -0
  71. data/doc/Zen/Controllers/AdminController.html +298 -0
  72. data/doc/Zen/Controllers/BaseController.html +272 -0
  73. data/doc/Zen/Controllers/FrontendController.html +164 -0
  74. data/doc/Zen/Controllers/MainController.html +421 -0
  75. data/doc/Zen/Database.html +498 -0
  76. data/doc/Zen/Language.html +660 -0
  77. data/doc/Zen/Liquid.html +117 -0
  78. data/doc/Zen/Liquid/ControllerBehavior.html +448 -0
  79. data/doc/Zen/Liquid/General.html +444 -0
  80. data/doc/Zen/Liquid/Redirect.html +435 -0
  81. data/doc/Zen/Liquid/Strip.html +447 -0
  82. data/doc/Zen/Logger.html +393 -0
  83. data/doc/Zen/Package.html +909 -0
  84. data/doc/_index.html +724 -0
  85. data/doc/class_list.html +36 -0
  86. data/doc/css/common.css +1 -0
  87. data/doc/css/full_list.css +53 -0
  88. data/doc/css/style.css +310 -0
  89. data/doc/file.README.html +86 -0
  90. data/doc/file_list.html +38 -0
  91. data/doc/frames.html +13 -0
  92. data/doc/index.html +86 -0
  93. data/doc/js/app.js +203 -0
  94. data/doc/js/full_list.js +149 -0
  95. data/doc/js/jquery.js +154 -0
  96. data/doc/method_list.html +1139 -0
  97. data/doc/top-level-namespace.html +88 -0
  98. data/lib/zen.rb +77 -0
  99. data/lib/zen/base/database.rb +105 -0
  100. data/lib/zen/base/language.rb +132 -0
  101. data/lib/zen/base/logger.rb +54 -0
  102. data/lib/zen/base/package.rb +233 -0
  103. data/lib/zen/base/version.rb +11 -0
  104. data/lib/zen/bin/zen_binary.rb +173 -0
  105. data/lib/zen/controller/admin_controller.rb +60 -0
  106. data/lib/zen/controller/base_controller.rb +39 -0
  107. data/lib/zen/controller/frontend_controller.rb +16 -0
  108. data/lib/zen/controller/main_controller.rb +93 -0
  109. data/lib/zen/helper/acl.rb +124 -0
  110. data/lib/zen/helper/asset.rb +104 -0
  111. data/lib/zen/helper/breadcrumb.rb +71 -0
  112. data/lib/zen/helper/common.rb +157 -0
  113. data/lib/zen/language/en/zen_general.rb +21 -0
  114. data/lib/zen/language/en/zen_models.rb +39 -0
  115. data/lib/zen/layout/admin.xhtml +72 -0
  116. data/lib/zen/layout/login.xhtml +44 -0
  117. data/lib/zen/liquid/controller_behavior.rb +55 -0
  118. data/lib/zen/liquid/general.rb +69 -0
  119. data/lib/zen/liquid/redirect.rb +47 -0
  120. data/lib/zen/liquid/strip.rb +58 -0
  121. data/lib/zen/model/methods.rb +26 -0
  122. data/lib/zen/model/settings.rb +27 -0
  123. data/lib/zen/packages/categories/LICENSE +19 -0
  124. data/lib/zen/packages/categories/README.textile +0 -0
  125. data/lib/zen/packages/categories/lib/categories.rb +24 -0
  126. data/lib/zen/packages/categories/lib/categories/controller/categories.rb +202 -0
  127. data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +173 -0
  128. data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +38 -0
  129. data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +37 -0
  130. data/lib/zen/packages/categories/lib/categories/model/category.rb +42 -0
  131. data/lib/zen/packages/categories/lib/categories/model/category_group.rb +29 -0
  132. data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
  133. data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +36 -0
  134. data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +70 -0
  135. data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
  136. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +7 -0
  137. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +18 -0
  138. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +72 -0
  139. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +7 -0
  140. data/lib/zen/packages/categories/migrations/.gitkeep +0 -0
  141. data/lib/zen/packages/categories/migrations/1295282303_create_schema.rb +40 -0
  142. data/lib/zen/packages/comments/LICENSE +19 -0
  143. data/lib/zen/packages/comments/README.textile +0 -0
  144. data/lib/zen/packages/comments/lib/comments.rb +26 -0
  145. data/lib/zen/packages/comments/lib/comments/controller/comments.rb +157 -0
  146. data/lib/zen/packages/comments/lib/comments/controller/comments_form.rb +135 -0
  147. data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +52 -0
  148. data/lib/zen/packages/comments/lib/comments/liquid/comment_form.rb +97 -0
  149. data/lib/zen/packages/comments/lib/comments/liquid/comments.rb +115 -0
  150. data/lib/zen/packages/comments/lib/comments/model/comment.rb +34 -0
  151. data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
  152. data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +31 -0
  153. data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +74 -0
  154. data/lib/zen/packages/comments/migrations/.gitkeep +0 -0
  155. data/lib/zen/packages/comments/migrations/1295282202_create_schema.rb +24 -0
  156. data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +11 -0
  157. data/lib/zen/packages/custom_fields/LICENSE +19 -0
  158. data/lib/zen/packages/custom_fields/README.textile +0 -0
  159. data/lib/zen/packages/custom_fields/lib/custom_fields.rb +24 -0
  160. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +179 -0
  161. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +194 -0
  162. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +45 -0
  163. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +64 -0
  164. data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field.rb +41 -0
  165. data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_group.rb +32 -0
  166. data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_value.rb +20 -0
  167. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +7 -0
  168. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +18 -0
  169. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +88 -0
  170. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +7 -0
  171. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +7 -0
  172. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +50 -0
  173. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +75 -0
  174. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +7 -0
  175. data/lib/zen/packages/custom_fields/migrations/.gitkeep +0 -0
  176. data/lib/zen/packages/custom_fields/migrations/1295255665_create_schema.rb +53 -0
  177. data/lib/zen/packages/sections/LICENSE +19 -0
  178. data/lib/zen/packages/sections/README.textile +43 -0
  179. data/lib/zen/packages/sections/lib/sections.rb +33 -0
  180. data/lib/zen/packages/sections/lib/sections/controller/section_entries.rb +251 -0
  181. data/lib/zen/packages/sections/lib/sections/controller/sections.rb +205 -0
  182. data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +58 -0
  183. data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +63 -0
  184. data/lib/zen/packages/sections/lib/sections/liquid/section_entries.rb +209 -0
  185. data/lib/zen/packages/sections/lib/sections/liquid/sections.rb +76 -0
  186. data/lib/zen/packages/sections/lib/sections/model/section.rb +43 -0
  187. data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +43 -0
  188. data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +7 -0
  189. data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +54 -0
  190. data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +77 -0
  191. data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +7 -0
  192. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +7 -0
  193. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +147 -0
  194. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +74 -0
  195. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +7 -0
  196. data/lib/zen/packages/sections/migrations/.gitkeep +0 -0
  197. data/lib/zen/packages/sections/migrations/1295251836_create_schema.rb +35 -0
  198. data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +18 -0
  199. data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +11 -0
  200. data/lib/zen/packages/settings/LICENSE +0 -0
  201. data/lib/zen/packages/settings/README.textile +0 -0
  202. data/lib/zen/packages/settings/lib/settings.rb +22 -0
  203. data/lib/zen/packages/settings/lib/settings/controller/settings.rb +113 -0
  204. data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +56 -0
  205. data/lib/zen/packages/settings/lib/settings/liquid/setting.rb +56 -0
  206. data/lib/zen/packages/settings/lib/settings/model/setting.rb +38 -0
  207. data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +79 -0
  208. data/lib/zen/packages/settings/migrations/.gitkeep +0 -0
  209. data/lib/zen/packages/settings/migrations/1295597111_create_schema.rb +31 -0
  210. data/lib/zen/packages/users/LICENSE +19 -0
  211. data/lib/zen/packages/users/README.textile +0 -0
  212. data/lib/zen/packages/users/lib/users.rb +35 -0
  213. data/lib/zen/packages/users/lib/users/controller/access_rules.rb +186 -0
  214. data/lib/zen/packages/users/lib/users/controller/user_groups.rb +171 -0
  215. data/lib/zen/packages/users/lib/users/controller/users.rb +240 -0
  216. data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +49 -0
  217. data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +42 -0
  218. data/lib/zen/packages/users/lib/users/language/en/users.rb +63 -0
  219. data/lib/zen/packages/users/lib/users/liquid/user.rb +75 -0
  220. data/lib/zen/packages/users/lib/users/liquid/users.rb +80 -0
  221. data/lib/zen/packages/users/lib/users/model/access_rule.rb +29 -0
  222. data/lib/zen/packages/users/lib/users/model/user.rb +96 -0
  223. data/lib/zen/packages/users/lib/users/model/user_group.rb +38 -0
  224. data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +43 -0
  225. data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +7 -0
  226. data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +68 -0
  227. data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +85 -0
  228. data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +7 -0
  229. data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +7 -0
  230. data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +19 -0
  231. data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +69 -0
  232. data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +7 -0
  233. data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +7 -0
  234. data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +25 -0
  235. data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +73 -0
  236. data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +22 -0
  237. data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +7 -0
  238. data/lib/zen/packages/users/migrations/.gitkeep +0 -0
  239. data/lib/zen/packages/users/migrations/1295281013_create_schema.rb +54 -0
  240. data/lib/zen/public/admin/css/boilerplate.css +174 -0
  241. data/lib/zen/public/admin/css/general.css +485 -0
  242. data/lib/zen/public/admin/css/grid.css +119 -0
  243. data/lib/zen/public/admin/css/layout.css +111 -0
  244. data/lib/zen/public/admin/images/general/noise.jpg +0 -0
  245. data/lib/zen/public/admin/images/icons/accept.png +0 -0
  246. data/lib/zen/public/admin/images/icons/add.png +0 -0
  247. data/lib/zen/public/admin/images/icons/back.png +0 -0
  248. data/lib/zen/public/admin/images/icons/bold.png +0 -0
  249. data/lib/zen/public/admin/images/icons/close.png +0 -0
  250. data/lib/zen/public/admin/images/icons/delete.png +0 -0
  251. data/lib/zen/public/admin/images/icons/edit.png +0 -0
  252. data/lib/zen/public/admin/images/icons/error.png +0 -0
  253. data/lib/zen/public/admin/images/icons/help.png +0 -0
  254. data/lib/zen/public/admin/images/icons/info.png +0 -0
  255. data/lib/zen/public/admin/images/icons/italic.png +0 -0
  256. data/lib/zen/public/admin/images/icons/large/error.png +0 -0
  257. data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
  258. data/lib/zen/public/admin/images/icons/large/success.png +0 -0
  259. data/lib/zen/public/admin/images/icons/link.png +0 -0
  260. data/lib/zen/public/admin/images/icons/logout.png +0 -0
  261. data/lib/zen/public/admin/images/icons/ol.png +0 -0
  262. data/lib/zen/public/admin/images/icons/pdf.png +0 -0
  263. data/lib/zen/public/admin/images/icons/ul.png +0 -0
  264. data/lib/zen/public/admin/images/icons/user.png +0 -0
  265. data/lib/zen/public/admin/images/icons/view.png +0 -0
  266. data/lib/zen/public/admin/js/mootools/core.js +436 -0
  267. data/lib/zen/public/admin/js/mootools/more.js +288 -0
  268. data/lib/zen/public/admin/js/zen/editor/base.js +265 -0
  269. data/lib/zen/public/admin/js/zen/editor/drivers/html.js +104 -0
  270. data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +102 -0
  271. data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +102 -0
  272. data/lib/zen/public/admin/js/zen/init.js +57 -0
  273. data/lib/zen/public/admin/js/zen/modal.js +159 -0
  274. data/lib/zen/public/admin/js/zen/notification.js +213 -0
  275. data/lib/zen/public/admin/js/zen/tabs.js +263 -0
  276. data/lib/zen/tasks.rb +6 -0
  277. data/pkg/.gitkeep +0 -0
  278. data/proto/app/Rakefile +2 -0
  279. data/proto/app/app.rb +20 -0
  280. data/proto/app/config.ru +18 -0
  281. data/proto/app/config/config.rb +17 -0
  282. data/proto/app/config/database.rb +18 -0
  283. data/proto/app/config/middlewares.rb +23 -0
  284. data/proto/app/config/requires.rb +8 -0
  285. data/proto/app/logs/.gitkeep +0 -0
  286. data/proto/app/public/.gitkeep +0 -0
  287. data/proto/app/start.rb +22 -0
  288. data/proto/app/vendor/.gitkeep +0 -0
  289. data/proto/app/vendor/themes/.gitkeep +0 -0
  290. data/proto/migration.rb +11 -0
  291. data/proto/module/LICENSE +0 -0
  292. data/proto/module/README.textile +0 -0
  293. data/proto/module/lib/module.rb +15 -0
  294. data/proto/module/lib/module/controller/controllers.rb +86 -0
  295. data/proto/module/lib/module/language/en/languages.rb +3 -0
  296. data/proto/module/lib/module/model/model.rb +12 -0
  297. data/proto/module/lib/module/view/admin/edit.xhtml +0 -0
  298. data/proto/module/lib/module/view/admin/form.xhtml +0 -0
  299. data/proto/module/lib/module/view/admin/index.xhtml +0 -0
  300. data/proto/module/lib/module/view/admin/new.xhtml +0 -0
  301. data/proto/module/migrations/.gitkeep +0 -0
  302. data/spec/javascript/css/base.css +177 -0
  303. data/spec/javascript/css/style.css +204 -0
  304. data/spec/javascript/css/typography.css +70 -0
  305. data/spec/javascript/editor/index.html +65 -0
  306. data/spec/javascript/images/close.png +0 -0
  307. data/spec/javascript/images/info.png +0 -0
  308. data/spec/javascript/js/editor.js +16 -0
  309. data/spec/javascript/js/modal.js +12 -0
  310. data/spec/javascript/js/namespace.js +2 -0
  311. data/spec/javascript/js/notification.js +43 -0
  312. data/spec/javascript/js/tabs.js +8 -0
  313. data/spec/javascript/modal/index.html +45 -0
  314. data/spec/javascript/notification/index.html +48 -0
  315. data/spec/javascript/tabs/index.html +73 -0
  316. data/spec/javascript/tabs/tab_1.html +1 -0
  317. data/spec/javascript/tabs/tab_2.html +1 -0
  318. data/spec/zen/base/language.rb +31 -0
  319. data/spec/zen/base/logger.rb +34 -0
  320. data/spec/zen/base/package.rb +47 -0
  321. data/spec/zen/config/database.rb +8 -0
  322. data/spec/zen/helper/asset.rb +26 -0
  323. data/spec/zen/helper/breadcrumb.rb +24 -0
  324. data/spec/zen/language/en/general.rb +4 -0
  325. data/spec/zen/language/nl/general.rb +4 -0
  326. data/spec/zen/liquid/general.rb +42 -0
  327. data/spec/zen/logs/.gitkeep +0 -0
  328. data/spec/zen/spec.rb +9 -0
  329. data/spec/zen/spec_database.db +0 -0
  330. data/tasks/bacon.rake +99 -0
  331. data/tasks/build.rake +72 -0
  332. data/tasks/clean.rake +18 -0
  333. data/tasks/db.rake +81 -0
  334. data/tasks/doc.rake +5 -0
  335. data/tasks/extension.rake +65 -0
  336. data/tasks/proto.rake +37 -0
  337. data/tasks/theme.rake +63 -0
  338. metadata +512 -0
@@ -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,50 @@
1
+ <div class="tabs">
2
+ <ul>
3
+ <li>
4
+ <a href="#general" title="#{@fields_lang.tabs[:general]}">#{@fields_lang.tabs[:general]}</a>
5
+ </li>
6
+ <li>
7
+ <a href="#settings" title="#{@fields_lang.tabs[:settings]}">#{@fields_lang.tabs[:settings]}</a>
8
+ </li>
9
+ </ul>
10
+ </div>
11
+
12
+ #{
13
+ form_for(@custom_field, :method => :post, :action => @form_save_url) do |f|
14
+ f.input_hidden :id, @custom_field.id
15
+ f.input_hidden :custom_field_group_id, @custom_field_group_id
16
+ f.input_hidden :csrf_token, get_csrf_token
17
+
18
+ f.g.div :id => 'general' do
19
+ f.input_text @fields_lang.labels[:name], :name
20
+ f.input_text @fields_lang.labels[:slug], :slug
21
+
22
+ f.select @fields_lang.labels[:type], :type, :values => @fields_lang.special[:type_hash], :size => 1,
23
+ :selected => @custom_field.type
24
+
25
+ f.select @fields_lang.labels[:format], :format, :values => @fields_lang.special[:format_hash], :size => 1,
26
+ :selected => @custom_field.format
27
+
28
+ f.textarea @fields_lang.labels[:description] , :description, :rows => 8
29
+ f.textarea @fields_lang.labels[:possible_values], :possible_values, :rows => 8
30
+ end
31
+
32
+ f.g.div :id => 'settings' do
33
+ f.input_radio @fields_lang.labels[:required], :required, @custom_field.required,
34
+ :values => @fields_lang.special[:boolean_hash]
35
+
36
+ f.input_radio @fields_lang.labels[:visual_editor], :visual_editor, @custom_field.visual_editor,
37
+ :values => @fields_lang.special[:boolean_hash]
38
+
39
+ f.input_text @fields_lang.labels[:textarea_rows], :textarea_rows
40
+ f.input_text @fields_lang.labels[:text_limit], :text_limit
41
+ f.input_text @fields_lang.labels[:sort_order], :sort_order
42
+ end
43
+
44
+ f.g.div :class => "clearfix" do
45
+ f.g.div :class => "button" do
46
+ f.g.input :type => 'submit', :value => @fields_lang.buttons[:save_field]
47
+ end
48
+ end
49
+ end
50
+ }
@@ -0,0 +1,75 @@
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>#{@fields_lang.labels[:id]}</th>
22
+ <th>#{@fields_lang.labels[:name]}</th>
23
+ <th>#{@fields_lang.labels[:slug]}</th>
24
+ <th>#{@fields_lang.labels[:type]}</th>
25
+ <th>#{@fields_lang.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>#{anchor_to(field.name, "admin/custom_fields/edit/#{@custom_field_group_id}/#{field.id}", :title => field.name)}</td>
42
+ <?r else ?>
43
+ <td>#{field.name}</td>
44
+ <?r end ?>
45
+
46
+ <td>#{field.slug}</td>
47
+ <td>#{@fields_lang.special[:type_hash][field.type]}</td>
48
+ <td>#{@fields_lang.special[:format_hash][field.format]}</td>
49
+ </tr>
50
+ <?r end ?>
51
+ </tbody>
52
+ </table>
53
+
54
+ <?r else ?>
55
+
56
+ <p>#{@fields_lang.messages[:no_fields]}</p>
57
+
58
+ <?r end ?>
59
+
60
+ <div class="clearfix">
61
+ <?r if user_authorized?([:create]) ?>
62
+ <div class="button">
63
+ #{anchor_to(@fields_lang.buttons[:new_field], "admin/custom_fields/new/#{@custom_field_group_id}")}
64
+ </div>
65
+ <?r end ?>
66
+
67
+ <?r if user_authorized?([:delete]) and @custom_fields and !@custom_fields.empty? ?>
68
+ <div class="button">
69
+ <input type="submit" value="#{@fields_lang.buttons[:delete_fields]}" />
70
+ </div>
71
+ <?r end ?>
72
+
73
+ </div>
74
+ </form>
75
+ </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,53 @@
1
+ Sequel.migration do
2
+
3
+ up do
4
+ create_table :custom_field_groups do
5
+ primary_key :id
6
+
7
+ String :name, :null => false
8
+ String :description, :text => true
9
+ end
10
+
11
+ create_table :custom_fields do
12
+ primary_key :id
13
+
14
+ String :name, :null => false
15
+ String :slug, :null => false, :unique => true
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'
20
+ String :possible_values, :text => true
21
+
22
+ # Custom field settings
23
+ TrueClass :required, :null => false, :default => false
24
+ TrueClass :visual_editor, :null => false, :default => true
25
+ Integer :textarea_rows, :null => false, :default => 6
26
+ Integer :text_limit, :null => false, :default => 255
27
+
28
+ foreign_key :custom_field_group_id, :custom_field_groups, :on_delete => :cascade, :on_update => :cascade, :key => :id
29
+ end
30
+
31
+ create_table :custom_field_groups_sections do
32
+ foreign_key :custom_field_group_id, :custom_field_groups, :on_delete => :cascade, :on_update => :cascade, :key => :id
33
+ foreign_key :section_id, :sections, :on_delete => :cascade, :on_update => :cascade, :key => :id
34
+ end
35
+
36
+ create_table :custom_field_values do
37
+ primary_key :id
38
+
39
+ String :value, :text => true
40
+
41
+ foreign_key :custom_field_id, :custom_fields, :on_delete => :cascade, :on_update => :cascade, :key => :id
42
+ foreign_key :section_entry_id, :section_entries, :on_delete => :cascade, :on_update => :cascade, :key => :id
43
+ end
44
+ end
45
+
46
+ down do
47
+ drop_table :custom_field_values
48
+ drop_table :custom_field_groups_sections
49
+ drop_table :custom_fields
50
+ drop_table :custom_field_groups
51
+ end
52
+
53
+ end
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2011, Yorick Peterse
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -0,0 +1,43 @@
1
+ Sections are the bread and butter of Zen, they act a bit like mini applications inside your website.
2
+ Typical sections are Blogs, Pages, maybe a bugtracker, etc.
3
+ Creating a section is fairly straightforward and most of the work can be done with the admin panel.
4
+
5
+ h2. Requirements
6
+
7
+ Zen core, that's all :]
8
+
9
+ h2. Installation
10
+
11
+ Quite simple actually, the sections module should ship with Zen so there's no need to manually install it.
12
+ In case the module is missing it's best to re-install Zen by executing one of the following commands:
13
+
14
+ @$ gem uninstall zen; gem install zen@
15
+
16
+ or
17
+
18
+ @$ gem update zen@
19
+
20
+ h2. License
21
+
22
+ Just like the rest of the Zen this module is released under the MIT license.
23
+ This license can be shown below and can also be found in the "LICENSE" file.
24
+
25
+ Copyright (c) 2010, Yorick Peterse
26
+
27
+ Permission is hereby granted, free of charge, to any person obtaining a copy
28
+ of this software and associated documentation files (the "Software"), to deal
29
+ in the Software without restriction, including without limitation the rights
30
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
31
+ copies of the Software, and to permit persons to whom the Software is
32
+ furnished to do so, subject to the following conditions:
33
+
34
+ The above copyright notice and this permission notice shall be included in
35
+ all copies or substantial portions of the Software.
36
+
37
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
40
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
41
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
42
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
43
+ THE SOFTWARE.
@@ -0,0 +1,33 @@
1
+
2
+ # Load all the classes such as controllers, models and so on.
3
+ require __DIR__ 'sections/model/section'
4
+ require __DIR__ 'sections/model/section_entry'
5
+ require __DIR__ 'sections/controller/sections'
6
+ require __DIR__ 'sections/controller/section_entries'
7
+
8
+ # Load and register all our liquid tags
9
+ require __DIR__ 'sections/liquid/section_entries'
10
+ require __DIR__ 'sections/liquid/sections'
11
+
12
+ Liquid::Template.register_tag('sections', Sections::Liquid::Sections)
13
+ Liquid::Template.register_tag('section_entries', Sections::Liquid::SectionEntries)
14
+
15
+ # Describe what this extension is all about
16
+ Zen::Package.add do |p|
17
+ p.type = 'extension'
18
+ p.name = 'Sections'
19
+ p.author = 'Yorick Peterse'
20
+ p.url = 'http://yorickpeterse.com/'
21
+ p.version = 1.0
22
+ p.about = "The sections module allows users to create and manage sections.
23
+ Sections can be seen as small web applications that live inside the CMS.
24
+ For example, you could have a section for your blog and for your pages."
25
+
26
+ p.identifier = 'com.zen.sections'
27
+ p.directory = __DIR__('sections')
28
+
29
+ p.menu = [{
30
+ :title => "Sections",
31
+ :url => "admin"
32
+ }]
33
+ end
@@ -0,0 +1,251 @@
1
+ module Sections
2
+ module Controllers
3
+ ##
4
+ # Section entries can be seen as blog entries, products, all sorts of things.
5
+ # Each section belongs to a section and can't be created without one.
6
+ #
7
+ # @author Yorick Peterse
8
+ # @since 0.1
9
+ #
10
+ class SectionEntries < Zen::Controllers::AdminController
11
+ map '/admin/section_entries'
12
+
13
+ trait :extension_identifier => 'com.zen.sections'
14
+
15
+ include ::Sections::Models
16
+
17
+ before_all do
18
+ csrf_protection :save, :delete do
19
+ respond(@zen_general_lang.errors[:csrf], 401)
20
+ end
21
+ end
22
+
23
+ ##
24
+ # Constructor method, called upon initialization. It's used to set the
25
+ # URL to which forms send their data and load the language pack.
26
+ #
27
+ # @author Yorick Peterse
28
+ # @since 0.1
29
+ #
30
+ def initialize
31
+ super
32
+
33
+ @form_save_url = '/admin/section_entries/save'
34
+ @form_delete_url = '/admin/section_entries/delete'
35
+ @entries_lang = Zen::Language.load 'section_entries'
36
+ @sections_lang = Zen::Language.load 'sections'
37
+ @models_lang = Zen::Language.load 'zen_models'
38
+
39
+ # Set the page title
40
+ if !action.method.nil?
41
+ method = action.method.to_sym
42
+
43
+ if @entries_lang.titles.key? method
44
+ @page_title = @entries_lang.titles[method]
45
+ end
46
+ end
47
+ end
48
+
49
+ ##
50
+ # Show an overview of all entries for the current section
51
+ #
52
+ # @author Yorick Peterse
53
+ # @param [Integer] section_id The ID of the current section.
54
+ # @since 0.1
55
+ #
56
+ def index section_id
57
+ if !user_authorized?([:read])
58
+ respond(@zen_general_lang.errors[:not_authorized], 403)
59
+ end
60
+
61
+ set_breadcrumbs anchor_to(@sections_lang.titles[:index], "admin"),
62
+ @entries_lang.titles[:index]
63
+
64
+ section = Section[section_id]
65
+ @section_id = section_id
66
+ @entries = section.section_entries
67
+ end
68
+
69
+ ##
70
+ # Show a form that lets the user edit an existing section entry.
71
+ #
72
+ # @author Yorick Peterse
73
+ # @param [Integer] section_id The ID of the current section.
74
+ # @param [Integer] entry_id The ID of the current section entry.
75
+ # @since 0.1
76
+ #
77
+ def edit section_id, entry_id
78
+ if !user_authorized?([:read, :update])
79
+ respond(@zen_general_lang.errors[:not_authorized], 403)
80
+ end
81
+
82
+ set_breadcrumbs anchor_to(@sections_lang.titles[:index], "admin"),
83
+ anchor_to(@entries_lang.titles[:index], "admin/section_entries/index/#{section_id}"),
84
+ @entries_lang.titles[:edit]
85
+
86
+ @section_id = section_id
87
+ @entry = SectionEntry[entry_id]
88
+ @users_hash = {}
89
+
90
+ Users::Models::User.each do |u|
91
+ @users_hash[u.id] = u.name
92
+ end
93
+ end
94
+
95
+ ##
96
+ # Show a form that lets the user create a new section entry.
97
+ #
98
+ # @author Yorick Peterse
99
+ # @param [Integer] section_id The ID of the current section.
100
+ # @since 0.1
101
+ #
102
+ def new section_id
103
+ if !user_authorized?([:read, :create])
104
+ respond(@zen_general_lang.errors[:not_authorized], 403)
105
+ end
106
+
107
+ set_breadcrumbs anchor_to(@sections_lang.titles[:index], "admin"),
108
+ anchor_to(@entries_lang.titles[:index], "admin/section_entries/index/#{section_id}"),
109
+ @entries_lang.titles[:new]
110
+
111
+ @section_id = section_id
112
+ @entry = SectionEntry.new :section_id => @section_id
113
+ @users_hash = {}
114
+
115
+ Users::Models::User.each do |u|
116
+ @users_hash[u.id] = u.name
117
+ end
118
+ end
119
+
120
+ ##
121
+ # Method used for processing the form data and redirecting the user back to
122
+ # the proper URL. Based on the value of a hidden field named "id" we'll determine
123
+ # if the data will be used to create a new section or to update an existing one.
124
+ #
125
+ # @author Yorick Peterse
126
+ # @since 0.1
127
+ # @todo The way this method handles the creation of field values might require some
128
+ # patches as it executes quite a few queries. I'll keep it as it is for now.
129
+ #
130
+ def save
131
+ if !user_authorized?([:create, :save])
132
+ respond(@zen_general_lang.errors[:not_authorized], 403)
133
+ end
134
+
135
+ post = request.params.dup
136
+ section_id = post["section_id"]
137
+ field_values = post["custom_field_values"]
138
+ custom_field_errors = {}
139
+
140
+ post.delete("custom_field_values")
141
+
142
+ post.each do |key, value|
143
+ post.delete(key) if value.empty?
144
+ end
145
+
146
+ if !post["category_pks"].nil?
147
+ post["category_pks"].map! { |value| value.to_i }
148
+ else
149
+ post["category_pks"] = []
150
+ end
151
+
152
+ if post["id"] and !post["id"].empty?
153
+ @entry = SectionEntry[post["id"]]
154
+ save_action = :save
155
+
156
+ # Section entries aren't considered to be updated whenever a custom field value
157
+ # is modified, this solves that problem
158
+ post['updated_at'] = Time.new
159
+ else
160
+ @entry = SectionEntry.new
161
+ save_action = :new
162
+ end
163
+
164
+ flash_success = @entries_lang.success[save_action]
165
+ flash_error = @entries_lang.errors[save_action]
166
+
167
+ # Transactions ahoy!
168
+ begin
169
+ Zen::Database.handle.transaction do
170
+ # Update the entry itself
171
+ @entry.update(post)
172
+ notification(:success, @entries_lang.titles[:index], flash_success)
173
+
174
+ # Update the field values
175
+ field_values.each do |field_id, value|
176
+ field_value = CustomFields::Models::CustomFieldValue[:custom_field_id => field_id, :section_entry_id => @entry.id]
177
+
178
+ if field_value.nil?
179
+ field_value = @entry.add_custom_field_value(:section_entry_id => @entry.id, :custom_field_id => field_id)
180
+ end
181
+
182
+ # Get the custom field for the current value
183
+ custom_field = field_value.custom_field
184
+
185
+ if custom_field.required and value.empty?
186
+ custom_field_errors[:"custom_field_values[#{field_id}]"] = @models_lang.presence
187
+ end
188
+
189
+ # Validate the entry
190
+ if !custom_field_errors.empty?
191
+ # No need for a particular exception as Sequel will undo the changes anyway
192
+ raise
193
+ end
194
+
195
+ field_value.value = value
196
+ field_value.save
197
+ end
198
+ end
199
+
200
+ # The rescue statement is called whenever the following happens:
201
+ #
202
+ # 1. The fields for the section entry (title, slug, etc) are invalid
203
+ # 2. Any custom field marked as required didn't have a value
204
+ # 3. Something else went wrong, god knows what.
205
+ rescue
206
+ notification(:error, @entries_lang.titles[:index], flash_error)
207
+
208
+ flash[:form_errors] = @entry.errors.merge(custom_field_errors)
209
+ redirect_referrer
210
+ end
211
+
212
+ if @entry.id
213
+ redirect "/admin/section_entries/edit/#{section_id}/#{@entry.id}"
214
+ else
215
+ redirect_referrer
216
+ end
217
+ end
218
+
219
+ ##
220
+ # Delete a set of section entries based on the supplied POST
221
+ # field "section_entry_ids".
222
+ #
223
+ # @author Yorick Peterse
224
+ # @since 0.1
225
+ #
226
+ def delete
227
+ if !user_authorized?([:delete])
228
+ respond(@zen_general_lang.errors[:not_authorized], 403)
229
+ end
230
+
231
+ if !request.params["section_entry_ids"] or request.params["section_entry_ids"].empty?
232
+ notification(:error, @entries_lang.titles[:index], @entries_lang.errors[:no_delete])
233
+ redirect_referrer
234
+ end
235
+
236
+ request.params["section_entry_ids"].each do |id|
237
+ @entry = SectionEntry[id]
238
+
239
+ begin
240
+ @entry.delete
241
+ notification(:success, @entries_lang.titles[:index], @entries_lang.success[:delete] % id)
242
+ rescue
243
+ notification(:error, @entries_lang.titles[:index], @entries_lang.errors[:delete] % id)
244
+ end
245
+ end
246
+
247
+ redirect_referrer
248
+ end
249
+ end
250
+ end
251
+ end