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,194 @@
1
+ module CustomFields
2
+ module Controllers
3
+ ##
4
+ # Controller for managing custom fields. Custom fields are one of
5
+ # the most important elements in Zen. Custom fields can be used to
6
+ # create radio buttons, textareas, the whole shebang. Before
7
+ # being able to use a custom field you'll need to add it to a group
8
+ # and bind that group to a section.
9
+ #
10
+ # @author Yorick Peterse
11
+ # @since 0.1
12
+ #
13
+ class CustomFields < Zen::Controllers::AdminController
14
+ map '/admin/custom_fields'
15
+
16
+ trait :extension_identifier => 'com.zen.custom_fields'
17
+
18
+ include ::CustomFields::Models
19
+
20
+ before_all do
21
+ csrf_protection :save, :delete do
22
+ respond(@zen_general_lang.errors[:csrf], 401)
23
+ end
24
+ end
25
+
26
+ ##
27
+ # Constructor method, called upon initialization. It's used to set the
28
+ # URL to which forms send their data and load the language pack.
29
+ #
30
+ # @author Yorick Peterse
31
+ # @since 0.1
32
+ #
33
+ def initialize
34
+ super
35
+
36
+ @form_save_url = '/admin/custom_fields/save'
37
+ @form_delete_url = '/admin/custom_fields/delete'
38
+ @fields_lang = Zen::Language.load 'custom_fields'
39
+ @field_groups_lang = Zen::Language.load 'custom_field_groups'
40
+
41
+ # Set the page title
42
+ if !action.method.nil?
43
+ method = action.method.to_sym
44
+
45
+ if @fields_lang.titles.key? method
46
+ @page_title = @fields_lang.titles[method]
47
+ end
48
+ end
49
+ end
50
+
51
+ ##
52
+ # Show an overview of all existing custom fields. Using this overview a user
53
+ # can manage an existing field, delete it or create a new one.
54
+ #
55
+ # @author Yorick Peterse
56
+ # @param [Integer] custom_field_group_id The ID of the custom field group to which all fields belong.
57
+ # @since 0.1
58
+ #
59
+ def index custom_field_group_id
60
+ if !user_authorized?([:read])
61
+ respond(@zen_general_lang.errors[:not_authorized], 403)
62
+ end
63
+
64
+ set_breadcrumbs anchor_to(@field_groups_lang.titles[:index], "admin/custom_field_groups"),
65
+ @fields_lang.titles[:index]
66
+
67
+ @custom_field_group_id = custom_field_group_id
68
+ @custom_fields = CustomFieldGroup[@custom_field_group_id].custom_fields
69
+ end
70
+
71
+ ##
72
+ # Show a form that lets the user edit an existing custom field group.
73
+ #
74
+ # @author Yorick Peterse
75
+ # @param [Integer] custom_field_group_id The ID of the custom field group to which all fields belong.
76
+ # @param [Integer] id The ID of the custom field to retrieve so that we can edit it.
77
+ # @since 0.1
78
+ #
79
+ def edit custom_field_group_id, id
80
+ if !user_authorized?([:read, :update])
81
+ respond(@zen_general_lang.errors[:not_authorized], 403)
82
+ end
83
+
84
+ set_breadcrumbs anchor_to(@field_groups_lang.titles[:index], "admin/custom_field_groups"),
85
+ anchor_to(@fields_lang.titles[:index], "admin/custom_fields/#{custom_field_group_id}"),
86
+ @fields_lang.titles[:edit]
87
+
88
+ @custom_field_group_id = custom_field_group_id
89
+ @custom_field = CustomField[id]
90
+ end
91
+
92
+ ##
93
+ # Show a form that lets the user create a new custom field group.
94
+ #
95
+ # @author Yorick Peterse
96
+ # @param [Integer] custom_field_group_id The ID of the custom field group to which all fields belong.
97
+ # @since 0.1
98
+ #
99
+ def new custom_field_group_id
100
+ if !user_authorized?([:read, :create])
101
+ respond(@zen_general_lang.errors[:not_authorized], 403)
102
+ end
103
+
104
+ set_breadcrumbs anchor_to(@field_groups_lang.titles[:index], "admin/custom_field_groups"),
105
+ anchor_to(@fields_lang.titles[:index], "admin/custom_fields/#{custom_field_group_id}"),
106
+ @fields_lang.titles[:index]
107
+
108
+ @custom_field_group_id = custom_field_group_id
109
+ @custom_field = CustomField.new
110
+ end
111
+
112
+ ##
113
+ # Method used for processing the form data and redirecting the user back to
114
+ # the proper URL. Based on the value of a hidden field named "id" we'll determine
115
+ # if the data will be used to create a new custom field or to update an existing one.
116
+ #
117
+ # @author Yorick Peterse
118
+ # @since 0.1
119
+ #
120
+ def save
121
+ if !user_authorized?([:create, :update])
122
+ respond(@zen_general_lang.errors[:not_authorized], 403)
123
+ end
124
+
125
+ post = request.params.dup
126
+ custom_field_group_id = post["custom_field_group_id"]
127
+
128
+ post.each do |key, value|
129
+ post.delete(key) if value.empty?
130
+ end
131
+
132
+ # Get or create a custom field group based on the ID from the hidden field.
133
+ if post["id"] and !post["id"].empty?
134
+ @custom_field = CustomField[post["id"]]
135
+ save_action = :save
136
+ else
137
+ @custom_field = CustomField.new
138
+ save_action = :new
139
+ end
140
+
141
+ flash_success = @fields_lang.success[save_action]
142
+ flash_error = @fields_lang.errors[save_action]
143
+
144
+ begin
145
+ @custom_field.update(post)
146
+ notification(:success, @fields_lang.titles[:index], flash_success)
147
+ rescue
148
+ notification(:error, @fields_lang.titles[:index], flash_error)
149
+ flash[:form_errors] = @custom_field.errors
150
+ end
151
+
152
+ if @custom_field.id
153
+ redirect "/admin/custom_fields/edit/#{custom_field_group_id}/#{@custom_field.id}"
154
+ else
155
+ redirect "/admin/custom_fields/new/#{custom_field_group_id}"
156
+ end
157
+ end
158
+
159
+ ##
160
+ # Delete an existing custom field.
161
+ #
162
+ # In order to delete a custom field group you'll need to send a POST request that contains
163
+ # a field named "custom_field_ids[]". This field should contain the primary values of
164
+ # each field that has to be deleted.
165
+ #
166
+ # @author Yorick Peterse
167
+ # @since 0.1
168
+ #
169
+ def delete
170
+ if !user_authorized?([:delete])
171
+ respond(@zen_general_lang.errors[:not_authorized], 403)
172
+ end
173
+
174
+ if !request.params["custom_field_ids"] or request.params["custom_field_ids"].empty?
175
+ notification(:error, @fields_lang.titles[:index], @fields_lang.errors[:no_delete])
176
+ redirect "/admin/custom_fields/index/#{post['custom_field_group_id']}"
177
+ end
178
+
179
+ request.params["custom_field_ids"].each do |id|
180
+ @custom_field = CustomField[id]
181
+
182
+ begin
183
+ @custom_field.delete
184
+ notification(:success, @fields_lang.titles[:index], @fields_lang.success[:delete] % id)
185
+ rescue
186
+ notification(:error, @fields_lang.titles[:index], @fields_lang.errors[:delete] % id)
187
+ end
188
+ end
189
+
190
+ redirect "/admin/custom_fields/index/#{request.params['custom_field_group_id']}"
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,45 @@
1
+ Zen::Language.translation 'custom_field_groups' do |item|
2
+ # Page titles
3
+ item.titles = {
4
+ :index => 'Custom Field Groups',
5
+ :edit => 'Edit Custom Field Group',
6
+ :new => 'Add Custom Field Group'
7
+ }
8
+
9
+ # Labels
10
+ item.labels = {
11
+ :id => '#',
12
+ :name => 'Name',
13
+ :description => 'Description',
14
+ :sections => 'Sections',
15
+ :manage_fields => 'Manage Custom Fields',
16
+ :none => 'None'
17
+ }
18
+
19
+ # General messages
20
+ item.messages = {
21
+ :no_groups => 'It seems you haven\'t created any custom field groups yet.'
22
+ }
23
+
24
+ # Error specific messages
25
+ item.errors = {
26
+ :new => "Failed to create a new custom field group.",
27
+ :save => "Failed to save the custom field group.",
28
+ :delete => "Failed to delete the custom field group with ID #%s",
29
+ :no_delete => "You haven't specified any custom field groups to delete."
30
+ }
31
+
32
+ # Success messages
33
+ item.success = {
34
+ :new => "The new custom field group has been created.",
35
+ :save => "The custom field group has been modified.",
36
+ :delete => "The custom field group with ID #%s has been deleted."
37
+ }
38
+
39
+ # Buttons
40
+ item.buttons = {
41
+ :new_group => 'New group',
42
+ :delete_groups => 'Delete selected groups',
43
+ :save_group => 'Save group'
44
+ }
45
+ end
@@ -0,0 +1,64 @@
1
+ Zen::Language.translation 'custom_fields' do |item|
2
+ # Page titles
3
+ item.titles = {
4
+ :index => 'Custom Fields',
5
+ :edit => 'Edit Custom Field',
6
+ :new => 'Add Custom Field'
7
+ }
8
+
9
+ # Labels
10
+ item.labels = {
11
+ :id => '#',
12
+ :name => 'Name',
13
+ :slug => 'Slug',
14
+ :type => 'Type',
15
+ :format => 'Format',
16
+ :description => 'Description',
17
+ :possible_values => 'Possible values (one value per line)',
18
+ :required => 'Requires a value',
19
+ :visual_editor => 'Enable the visual editor',
20
+ :textarea_rows => 'Textarea rows',
21
+ :text_limit => 'Character limit',
22
+ :sort_order => 'Sort order'
23
+ }
24
+
25
+ item.tabs = {
26
+ :general => 'General',
27
+ :settings => 'Settings'
28
+ }
29
+
30
+ # General messages
31
+ item.messages = {
32
+ :no_fields => 'It seems you haven\'t created any custom fields yet.'
33
+ }
34
+
35
+ # Error specific messages
36
+ item.errors = {
37
+ :new => "Failed to create a new custom field.",
38
+ :save => "Failed to save the custom field.",
39
+ :delete => "Failed to delete the custom field with ID #%s",
40
+ :no_delete => "You haven't specified any custom fields to delete."
41
+ }
42
+
43
+ # Success messages
44
+ item.success = {
45
+ :new => "The new custom field has been created.",
46
+ :save => "The custom field has been modified.",
47
+ :delete => "The custom field with ID #%s has been deleted."
48
+ }
49
+
50
+ # Special items such as hashes for field types
51
+ item.special = {
52
+ :format_hash => {"html" => "HTML", "textile" => "Textile", "markdown" => "Markdown", "plain" => "Plain"},
53
+ :type_hash => {"textbox" => "Textbox", "textarea" => "Textarea", "radio" => "Radio button",
54
+ "checkbox" => "Checkbox", "date" => "Date", "select" => "Select", "select_multiple" => "Multi select"},
55
+ :boolean_hash => {"Yes" => true, "No" => false}
56
+ }
57
+
58
+ # Buttons
59
+ item.buttons = {
60
+ :new_field => 'New field',
61
+ :delete_fields => 'Delete selected fields',
62
+ :save_field => 'Save field'
63
+ }
64
+ end
@@ -0,0 +1,41 @@
1
+ module CustomFields
2
+ module Models
3
+ ##
4
+ # Model that represents a single custom field. This model has the following
5
+ # relations:
6
+ #
7
+ # * custom field values (one to many)
8
+ #
9
+ # The following plugins are loaded:
10
+ #
11
+ # * sluggable (source: "name")
12
+ #
13
+ # When creating or saving a new custom field several validation rules are used.
14
+ # For more information on these rules see the validate() method of this model.
15
+ #
16
+ # @author Yorick Peterse
17
+ # @since 0.1
18
+ #
19
+ class CustomField < Sequel::Model
20
+ one_to_many :custom_field_values, :class => "CustomFields::Models::CustomFieldValue"
21
+
22
+ plugin :sluggable, :source => :name, :freeze => false
23
+
24
+ ##
25
+ # Validates rules used whenever the model is created or saved.
26
+ #
27
+ # @author Yorick Peterse
28
+ # @since 0.1
29
+ #
30
+ def validate
31
+ validates_presence [:name, :type, :format, :required, :visual_editor]
32
+ validates_presence :slug unless new?
33
+ validates_max_length 255 , [:name]
34
+ validates_type TrueClass , [:required, :visual_editor]
35
+ validates_integer [:sort_order, :textarea_rows, :text_limit]
36
+
37
+ validates_unique :slug
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module CustomFields
2
+ module Models
3
+ ##
4
+ # Model that represents a single custom field group. This model has
5
+ # the following relations:
6
+ #
7
+ # * custom fields (one to many, ordered by "sort_order")
8
+ # * sections (many to many)
9
+ #
10
+ # When creating or saving a group you are required to specify a "name" field.
11
+ # This field may also be no longer than 255 characters.
12
+ #
13
+ # @author Yorick Peterse
14
+ # @since 0.1
15
+ #
16
+ class CustomFieldGroup < Sequel::Model
17
+ one_to_many :custom_fields, :class => "CustomFields::Models::CustomField", :order => :sort_order
18
+ many_to_many :sections , :class => "Sections::Models::Section"
19
+
20
+ ##
21
+ # Validates rules used whenever the model is created or saved.
22
+ #
23
+ # @author Yorick Peterse
24
+ # @since 0.1
25
+ #
26
+ def validate
27
+ validates_presence [:name]
28
+ validates_max_length 255, [:name]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,20 @@
1
+ module CustomFields
2
+ module Models
3
+ ##
4
+ # Model that represents a single custom field value. This model
5
+ # has the following relations:
6
+ #
7
+ # * custom field (many to one)
8
+ # * section entry (many to one)
9
+ #
10
+ # This model is basically just a join table with some extra columns.
11
+ #
12
+ # @author Yorick Peterse
13
+ # @since 0.1
14
+ #
15
+ class CustomFieldValue < Sequel::Model
16
+ many_to_one :custom_field , :class => "CustomFields::Models::CustomField"
17
+ many_to_one :section_entry, :class => "Sections::Models::SectionEntry"
18
+ end
19
+ end
20
+ end
@@ -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,18 @@
1
+ #{
2
+ form_for(@field_group, :method => :post, :action => @form_save_url) do |f|
3
+ f.input_hidden :id, @field_group.id
4
+ f.input_hidden :csrf_token, get_csrf_token
5
+
6
+ f.g.div :id => 'general' do
7
+ f.input_text @field_groups_lang.labels[:name], :name
8
+
9
+ f.textarea @field_groups_lang.labels[:description], :description, :rows => 8
10
+ end
11
+
12
+ f.g.div :class => "clearfix" do
13
+ f.g.div :class => "button" do
14
+ f.g.input :type => 'submit', :value => @field_groups_lang.buttons[:save_group]
15
+ end
16
+ end
17
+ end
18
+ }
@@ -0,0 +1,88 @@
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>#{@field_groups_lang.labels[:id]}</th>
21
+ <th>#{@field_groups_lang.labels[:name]}</th>
22
+ <th>#{@field_groups_lang.labels[:sections]}</th>
23
+
24
+ <?r if user_authorized?([:create]) ?>
25
+ <th></th>
26
+ <?r end ?>
27
+
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ <?r @field_groups.each do |group| ?>
32
+ <tr>
33
+ <?r if user_authorized?([:delete]) ?>
34
+ <td>
35
+ <input type="checkbox" name="custom_field_group_ids[]" value="#{group.id}" />
36
+ </td>
37
+ <?r end ?>
38
+
39
+ <td>#{group.id}</td>
40
+
41
+ <?r if user_authorized?([:update]) ?>
42
+ <td>#{anchor_to(group.name, "admin/custom_field_groups/edit/#{group.id}", :title => group.name)}</td>
43
+ <?r else ?>
44
+ <td>#{group.name}</td>
45
+ <?r end ?>
46
+
47
+ <td>
48
+ <?r sections = group.sections.map { |s| s.name } ?>
49
+
50
+ <?r if !sections.empty? ?>
51
+ #{sections.join(', ')}
52
+ <?r else ?>
53
+ #{@field_groups_lang.labels[:none]}
54
+ <?r end ?>
55
+ </td>
56
+
57
+ <?r if user_authorized?([:create]) ?>
58
+ <td>#{anchor_to(@field_groups_lang.labels[:manage_fields], "admin/custom_fields/index/#{group.id}", :title => @field_groups_lang.labels[:manage_fields])}</td>
59
+ <?r end ?>
60
+
61
+ </tr>
62
+ <?r end ?>
63
+ </tbody>
64
+ </table>
65
+
66
+ <?r else ?>
67
+
68
+ <p>#{@field_groups_lang.messages[:no_groups]}</p>
69
+
70
+ <?r end ?>
71
+
72
+ <div class="clearfix">
73
+
74
+ <?r if user_authorized?([:create]) ?>
75
+ <div class="button">
76
+ #{anchor_to(@field_groups_lang.buttons[:new_group], "admin/custom_field_groups/new")}
77
+ </div>
78
+ <?r end ?>
79
+
80
+ <?r if user_authorized?([:delete]) and @field_groups and !@field_groups.empty? ?>
81
+ <div class="button">
82
+ <input type="submit" value="#{@field_groups_lang.buttons[:delete_groups]}" />
83
+ </div>
84
+ <?r end ?>
85
+ </div>
86
+
87
+ </form>
88
+ </article>