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,205 @@
1
+ module Sections
2
+ module Controllers
3
+ ##
4
+ # Sections can be seen as mini applications inside your website.
5
+ # Examples of sections can be a blog, pages, a products listing, etc.
6
+ # Before being able to properly add section entries you need to assign
7
+ # the following data to a section:
8
+ #
9
+ # * a category group
10
+ # * a custom field group
11
+ #
12
+ # @author Yorick Peterse
13
+ # @since 0.1
14
+ #
15
+ class Sections < Zen::Controllers::AdminController
16
+ map '/admin'
17
+
18
+ trait :extension_identifier => 'com.zen.sections'
19
+
20
+ include ::Sections::Models
21
+
22
+ before_all do
23
+ csrf_protection :save, :delete do
24
+ respond(@zen_general_lang.errors[:csrf], 401)
25
+ end
26
+ end
27
+
28
+ ##
29
+ # Constructor method, called upon initialization. It's used to set the
30
+ # URL to which forms send their data and load the language pack.
31
+ #
32
+ # @author Yorick Peterse
33
+ # @since 0.1
34
+ #
35
+ def initialize
36
+ super
37
+
38
+ @form_save_url = '/admin/save'
39
+ @form_delete_url = '/admin/delete'
40
+ @sections_lang = Zen::Language.load 'sections'
41
+
42
+ # Set the page title
43
+ if !action.method.nil?
44
+ method = action.method.to_sym
45
+
46
+ if @sections_lang.titles.key? method
47
+ @page_title = @sections_lang.titles[method]
48
+ end
49
+ end
50
+ end
51
+
52
+ ##
53
+ # Show an overview of all existing sections. Using this overview a user
54
+ # can manage an existing section, delete it or create a new one.
55
+ #
56
+ # @author Yorick Peterse
57
+ # @since 0.1
58
+ #
59
+ def index
60
+ if !user_authorized?([:read])
61
+ respond(@zen_general_lang.errors[:not_authorized], 403)
62
+ end
63
+
64
+ set_breadcrumbs @sections_lang.titles[:index]
65
+
66
+ @sections = Section.all
67
+ end
68
+
69
+ ##
70
+ # Show a form that lets the user edit an existing section.
71
+ #
72
+ # @author Yorick Peterse
73
+ # @param [Integer] id The ID of the section to retrieve so that we can edit it.
74
+ # @since 0.1
75
+ #
76
+ def edit id
77
+ if !user_authorized?([:read, :update])
78
+ respond(@zen_general_lang.errors[:not_authorized], 403)
79
+ end
80
+
81
+ set_breadcrumbs anchor_to(@sections_lang.titles[:index], "admin"), @page_title
82
+
83
+ @custom_field_group_pk_hash = CustomFields::Models::CustomFieldGroup.pk_hash(:name)
84
+ @category_group_pk_hash = Categories::Models::CategoryGroup.pk_hash(:name)
85
+ @section = Section[id]
86
+ end
87
+
88
+ ##
89
+ # Show a form that lets the user create a new section.
90
+ #
91
+ # @author Yorick Peterse
92
+ # @since 0.1
93
+ #
94
+ def new
95
+ if !user_authorized?([:create, :read])
96
+ respond(@zen_general_lang.errors[:not_authorized], 403)
97
+ end
98
+
99
+ set_breadcrumbs anchor_to(@sections_lang.titles[:index], "admin"), @page_title
100
+
101
+ @custom_field_group_pk_hash = CustomFields::Models::CustomFieldGroup.pk_hash(:name)
102
+ @category_group_pk_hash = Categories::Models::CategoryGroup.pk_hash(:name)
103
+ @section = Section.new
104
+ end
105
+
106
+ ##
107
+ # Method used for processing the form data and redirecting the user back to
108
+ # the proper URL. Based on the value of a hidden field named "id" we'll determine
109
+ # if the data will be used to create a new section or to update an existing one.
110
+ #
111
+ # @author Yorick Peterse
112
+ # @since 0.1
113
+ #
114
+ def save
115
+ if !user_authorized?([:create, :update])
116
+ respond(@zen_general_lang.errors[:not_authorized], 403)
117
+ end
118
+
119
+ post = request.params.dup
120
+
121
+ post.each do |key, value|
122
+ post.delete(key) if value.empty?
123
+ end
124
+
125
+ if post["id"] and !post["id"].empty?
126
+ @section = Section[post["id"]]
127
+ save_action = :save
128
+ else
129
+ @section = Section.new
130
+ save_action = :new
131
+ end
132
+
133
+ flash_success = @sections_lang.success[save_action]
134
+ flash_error = @sections_lang.errors[save_action]
135
+
136
+ # The primary keys have to be integers otherwise Sequel will soil it's pants
137
+ if !post["custom_field_group_pks"].nil?
138
+ post["custom_field_group_pks"].map! { |value| value.to_i }
139
+ else
140
+ post["custom_field_group_pks"] = []
141
+ end
142
+
143
+ if !post["category_group_pks"].nil?
144
+ post["category_group_pks"].map! { |value| value.to_i }
145
+ else
146
+ post["category_group_pks"] = []
147
+ end
148
+
149
+ begin
150
+ @section.update(post)
151
+
152
+ if save_action == :new
153
+ @section.custom_field_group_pks = post['custom_field_group_pks']
154
+ @section.category_group_pks = post['category_group_pks']
155
+ end
156
+
157
+ notification(:success, @sections_lang.titles[:index], flash_success)
158
+ rescue
159
+ notification(:error, @sections_lang.titles[:index], flash_error)
160
+
161
+ flash[:form_errors] = @section.errors
162
+ end
163
+
164
+ if @section.id
165
+ redirect "/admin/edit/#{@section.id}"
166
+ else
167
+ redirect_referrer
168
+ end
169
+ end
170
+
171
+ ##
172
+ # Delete an existing section. Poor section, what did he do wrong?
173
+ # In order to delete a section you'll need to send a POST request that contains
174
+ # a field named "section_ids[]". This field should contain the primary values of
175
+ # each section that has to be deleted.
176
+ #
177
+ # @author Yorick Peterse
178
+ # @since 0.1
179
+ #
180
+ def delete
181
+ if !user_authorized?([:delete])
182
+ respond(@zen_general_lang.errors[:not_authorized], 403)
183
+ end
184
+
185
+ if !request.params["section_ids"] or request.params["section_ids"].empty?
186
+ notification(:error, @sections_lang.titles[:index], @sections_lang.errors[:no_delete])
187
+ redirect_referrer
188
+ end
189
+
190
+ request.params["section_ids"].each do |id|
191
+ @section = Section[id]
192
+
193
+ begin
194
+ @section.delete
195
+ notification(:success, @sections_lang.titles[:index], @sections_lang.success[:delete] % id)
196
+ rescue
197
+ notification(:error, @sections_lang.titles[:index], @sections_lang.errors[:delete] % id)
198
+ end
199
+ end
200
+
201
+ redirect_referrer
202
+ end
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,58 @@
1
+ Zen::Language.translation 'section_entries' do |item|
2
+ # Page titles
3
+ item.titles = {
4
+ :index => 'Entries',
5
+ :edit => 'Edit Entry',
6
+ :new => 'Add Entry'
7
+ }
8
+
9
+ # Labels
10
+ item.labels = {
11
+ :id => '#',
12
+ :title => 'Title',
13
+ :slug => 'Slug',
14
+ :status => 'Status',
15
+ :created => 'Created at',
16
+ :updated => 'Updated at',
17
+ :author => 'Author'
18
+ }
19
+
20
+ # Special items such as sub hashes and such
21
+ item.special = {
22
+ :status_hash => {"draft" => "Draft", "published" => "Published"},
23
+ }
24
+
25
+ # Tabs
26
+ item.tabs = {
27
+ :basic => 'Basic',
28
+ :categories => 'Categories'
29
+ }
30
+
31
+ # General messages
32
+ item.messages = {
33
+ :no_entries => 'No section entries have been created yet.',
34
+ :no_categories => 'No categories have been assigned to the current section.'
35
+ }
36
+
37
+ # Error specific messages
38
+ item.errors = {
39
+ :new => "Failed to create a new entry.",
40
+ :save => "Failed to save the entry.",
41
+ :delete => "Failed to delete the entry with ID #%s",
42
+ :no_delete => "You haven't specified any entries to delete."
43
+ }
44
+
45
+ # Success messages
46
+ item.success = {
47
+ :new => "The new entry has been created.",
48
+ :save => "The entry has been modified.",
49
+ :delete => "The entry with ID #%s has been deleted."
50
+ }
51
+
52
+ # Buttons
53
+ item.buttons = {
54
+ :new_entry => 'New entry',
55
+ :delete_entries => 'Delete selected entries',
56
+ :save_entry => 'Save entry'
57
+ }
58
+ end
@@ -0,0 +1,63 @@
1
+ Zen::Language.translation 'sections' do |item|
2
+ # Page titles
3
+ item.titles = {
4
+ :index => 'Sections',
5
+ :edit => 'Edit Section',
6
+ :new => 'Add Section'
7
+ }
8
+
9
+ # Labels
10
+ item.labels = {
11
+ :id => '#',
12
+ :name => 'Name',
13
+ :slug => 'Slug',
14
+ :description => 'Description',
15
+ :comment_allow => 'Allow comments',
16
+ :comment_require_account => 'Comments require an account',
17
+ :comment_moderate => 'Moderate comments',
18
+ :comment_format => 'Comment format',
19
+ :custom_field_groups => 'Custom field groups',
20
+ :category_groups => 'Category groups',
21
+ :manage_entries => 'Manage entries'
22
+ }
23
+
24
+ # Special items such as sub hashes and such
25
+ item.special = {
26
+ :boolean_hash => {"Yes" => true, "No" => false},
27
+ :format_hash => {"plain" => "Plain", "html" => "HTML", "textile" => "Textile", "markdown" => "Markdown"}
28
+ }
29
+
30
+ # Tabs
31
+ item.tabs = {
32
+ :general => 'General',
33
+ :comment_settings => 'Comment Settings',
34
+ :group_assignments => 'Group Assignments'
35
+ }
36
+
37
+ # General messages
38
+ item.messages = {
39
+ :no_sections => 'It seems you haven\'t created any sections yet.'
40
+ }
41
+
42
+ # Error specific messages
43
+ item.errors = {
44
+ :new => "Failed to create a new section.",
45
+ :save => "Failed to save the section.",
46
+ :delete => "Failed to delete the section with ID #%s",
47
+ :no_delete => "You haven't specified any sections to delete."
48
+ }
49
+
50
+ # Success messages
51
+ item.success = {
52
+ :new => "The new section has been created.",
53
+ :save => "The section has been modified.",
54
+ :delete => "The section with ID #%s has been deleted."
55
+ }
56
+
57
+ # Buttons
58
+ item.buttons = {
59
+ :new_section => 'New section',
60
+ :delete_sections => 'Delete selected sections',
61
+ :save_section => 'Save section'
62
+ }
63
+ end
@@ -0,0 +1,209 @@
1
+ module Sections
2
+ module Liquid
3
+ ##
4
+ # The SectionEntries tag can be used to retrieve all section entries
5
+ # for the given section. A basic example of this looks like the following:
6
+ #
7
+ # bc. {% section_entries section="blog" %}
8
+ # Do something in here
9
+ # {% endsection_entries %}
10
+ #
11
+ # When using this tag you can specify the following optionally arguments:
12
+ #
13
+ # * section: the slug of the section for which to retrieve all entries
14
+ # * limit: the amount of entries to retrieve
15
+ # * offset: the offset from which to start selecting entries
16
+ # * section_entry: the slug of the section entry to select
17
+ # * order: the sort order type
18
+ # * order_by: the name of the column to sort on
19
+ #
20
+ # These arguments can be specified as following:
21
+ #
22
+ # bc. {% section_entries section="blog" limit="10" offset="20" %}
23
+ # Do something in here
24
+ # {% endsection_entries %}
25
+ #
26
+ # Inside this block you can output the values of your custom fields by
27
+ # calling the variable tag containing the name of the custom field. For example,
28
+ # if you have a field called "body" you can output it for each entry as following:
29
+ #
30
+ # bc. {% section_entries section="blog" limit="10" offset="20" %}
31
+ # {{body}}
32
+ # {% endsection_entries %}
33
+ #
34
+ # The following variables are available by default:
35
+ #
36
+ # * id: the ID of the section entry
37
+ # * title: the entry title
38
+ # * slug: the entry slug
39
+ # * status: the status of the entry
40
+ # * created_at
41
+ # * updated_at
42
+ # * section_id: the ID of the section to which this entry belongs
43
+ #
44
+ # @example
45
+ #
46
+ # {% section_entries section="blog" limit="10" offset="20" %}
47
+ # <article>
48
+ # <header>
49
+ # <h1>{{title}}</h1>
50
+ # </header>
51
+ #
52
+ # {{body}}
53
+ # </article>
54
+ # {% endsection_entries %}
55
+ #
56
+ # @author Yorick Peterse
57
+ # @since 0.1
58
+ #
59
+ class SectionEntries < ::Liquid::Block
60
+ include ::Ramaze::Helper::CGI
61
+ include ::Zen::Liquid::General
62
+
63
+ ##
64
+ # Creates a new instance of the block and passes the tag name,
65
+ # all additional arguments and the HTML to the constructor method.
66
+ #
67
+ # @author Yorick Peterse
68
+ # @since 0.1
69
+ # @param [String] tag_name The name of the tag that was called.
70
+ # @param [String] arguments All additional arguments passed as a string.
71
+ # @param [String] html The HTML inside the block.
72
+ #
73
+ def initialize tag_name, arguments, html
74
+ super
75
+
76
+ @arguments = {
77
+ 'limit' => nil,
78
+ 'offset' => nil,
79
+ 'section' => Zen::Controllers::FrontendController.session[:settings][:default_section],
80
+ 'order' => 'desc',
81
+ 'order_by'=> 'id'
82
+ }.merge(parse_key_values(arguments))
83
+
84
+ @args_parsed = false
85
+ end
86
+
87
+ ##
88
+ # Processes that arguments, retrieves all data and renders the tag block.
89
+ # When outputting data inside the tag block you can always use the following
90
+ # variables:
91
+ #
92
+ # * total_rows: the amount of rows retrieved
93
+ # * index: the current index
94
+ #
95
+ # Depending on whether you have any entries or not you can use the following
96
+ # values as well:
97
+ #
98
+ # * comments: array containing all comments for each entry
99
+ # * categories: array of all categories for each entry
100
+ # * user: data about the author of each entry
101
+ #
102
+ # On top of that you can of course also use your own custom values. Each value
103
+ # can be accessed by it's slug.
104
+ #
105
+ # @author Yorick Peterse
106
+ # @since 0.1
107
+ #
108
+ def render context
109
+ # Check if any of the given arguments in @arguments exist in our context.
110
+ if @args_parsed == false
111
+ @arguments.each do |k, v|
112
+ v = v.to_s
113
+
114
+ if context.has_key?(v)
115
+ @arguments[k] = h(context[v])
116
+ end
117
+ end
118
+ end
119
+
120
+ @args_parsed = true
121
+ result = []
122
+ entries = []
123
+ filter_hash = {:status => 'published'}
124
+
125
+ if @arguments.key?('section_entry')
126
+ if @arguments['section_entry'].empty?
127
+ raise ArgumentError, "You need to specify a section entry to retrieve"
128
+ end
129
+
130
+ filter_hash[:slug] = @arguments['section_entry']
131
+
132
+ else
133
+ if @arguments['section'].empty?
134
+ raise ArgumentError, "You need to specify a section for which to retrieve all entries"
135
+ end
136
+
137
+ section = ::Sections::Models::Section[:slug => @arguments['section']]
138
+
139
+ return result if section.nil?
140
+ filter_hash[:section_id] = section.id
141
+ end
142
+
143
+ entries = ::Sections::Models::SectionEntry
144
+ .eager(:custom_field_values, :categories, :comments, :section, :user)
145
+ .filter(filter_hash)
146
+ .order(@arguments['order_by'].to_sym.send(@arguments['order']))
147
+ .limit(@arguments['limit'], @arguments['offset'])
148
+
149
+ context['total_rows'] = entries.count
150
+
151
+ entries.each_with_index do |entry, index|
152
+ entry.values.each do |k, v|
153
+ context[k.to_s] = v
154
+ end
155
+
156
+ context['index'] = index
157
+ context['categories'] = []
158
+ context['comments'] = []
159
+ context['user'] = {}
160
+
161
+ # Retrieve all categories
162
+ entry.categories.each do |c|
163
+ values = {}
164
+
165
+ c.values.each { |k, v| values[k.to_s] = v }
166
+ context['categories'].push(values)
167
+ end
168
+
169
+ # Get the user for the current entry
170
+ if !entry.user.nil?
171
+ entry.user.values.each { |k, v| context['user'][k.to_s] = v }
172
+ end
173
+
174
+ # Retrieve all comments
175
+ entry.comments.each do |c|
176
+ values = {}
177
+
178
+ c.values.each { |k, v| values[k.to_s] = v }
179
+
180
+ # Pull the Email, name and website fields from the user table in case the comment
181
+ # was posted by somebody who was logged in to the backend.
182
+ ['email', 'name', 'website'].each do |m|
183
+ if values[m].nil? or values[m].empty?
184
+ values[m] = c.user.send(m)
185
+ end
186
+ end
187
+
188
+ values['comment'] = markup_to_html(values['comment'], entry.section.comment_format)
189
+ context['comments'].push(values)
190
+ end
191
+
192
+ # Get all our custom fields
193
+ entry.custom_field_values.each do |field_value|
194
+ field = field_value.custom_field
195
+ name = field.slug
196
+ value = markup_to_html(field_value.value, field.format.to_sym)
197
+
198
+ context[name.to_s] = value
199
+ end
200
+
201
+ result << render_all(@nodelist, context)
202
+ end
203
+
204
+ result << render_all(@nodelist, context) if result.empty?
205
+ return result
206
+ end
207
+ end
208
+ end
209
+ end