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,240 @@
1
+ module Users
2
+ module Controllers
3
+ ##
4
+ # Controller for managing users. Users in this case are people
5
+ # that have access to the backend. However, users might be able
6
+ # to access the backend but that doesn't mean they can actuall use it.
7
+ # The permission system will block anybody that don't have the correct
8
+ # permissions for each module. In case of a module like a forum it's
9
+ # probably better to add some additional checks to ensure people
10
+ # can't mess around with your system.
11
+ #
12
+ # @author Yorick Peterse
13
+ # @since 0.1
14
+ #
15
+ class Users < Zen::Controllers::AdminController
16
+ map '/admin/users'
17
+
18
+ trait :extension_identifier => 'com.zen.users'
19
+ include ::Users::Models
20
+
21
+ before_all do
22
+ csrf_protection :save, :delete do
23
+ respond(@zen_general_lang.errors[:csrf], 401)
24
+ end
25
+ end
26
+
27
+ # Every action should use the admin layout except the "login" method,
28
+ # that one will use a trimmed down version of the admin layout.
29
+ layout do |path, format|
30
+ if path == 'login'
31
+ :login
32
+ else
33
+ :admin
34
+ end
35
+ end
36
+
37
+ ##
38
+ # Load our language packs, set the form URLs and define our page title.
39
+ #
40
+ # @author Yorick Peterse
41
+ # @since 0.1
42
+ #
43
+ def initialize
44
+ super
45
+
46
+ @form_save_url = '/admin/users/save'
47
+ @form_delete_url = '/admin/users/delete'
48
+ @form_login_url = '/admin/users/login'
49
+ @users_lang = Zen::Language.load 'users'
50
+
51
+ # Set the page title
52
+ if !action.method.nil?
53
+ method = action.method.to_sym
54
+
55
+ if @users_lang.titles.key? method
56
+ @page_title = @users_lang.titles[method]
57
+ end
58
+ end
59
+ end
60
+
61
+ ##
62
+ # Show an overview of all users and allow the current user
63
+ # to manage these users.
64
+ #
65
+ # @author Yorick Peterse
66
+ # @since 0.1
67
+ #
68
+ def index
69
+ if !user_authorized?([:read])
70
+ respond(@zen_general_lang.errors[:not_authorized], 403)
71
+ end
72
+
73
+ set_breadcrumbs @users_lang.titles[:index]
74
+
75
+ @users = User.all
76
+ end
77
+
78
+ ##
79
+ # Edit an existing user based on the ID.
80
+ #
81
+ # @author Yorick Peterse
82
+ # @since 0.1
83
+ #
84
+ def edit id
85
+ if !user_authorized?([:read, :update])
86
+ respond(@zen_general_lang.errors[:not_authorized], 403)
87
+ end
88
+
89
+ set_breadcrumbs anchor_to(@users_lang.titles[:index], "admin/users"), @users_lang.titles[:edit]
90
+
91
+ @user = User[id]
92
+ @user_group_pks = UserGroup.pk_hash(:name)
93
+ end
94
+
95
+ ##
96
+ # Create a new user.
97
+ #
98
+ # @author Yorick Peterse
99
+ # @since 0.1
100
+ #
101
+ def new
102
+ if !user_authorized?([:read, :create])
103
+ respond(@zen_general_lang.errors[:not_authorized], 403)
104
+ end
105
+
106
+ set_breadcrumbs anchor_to(@users_lang.titles[:index], "admin/users"), @users_lang.titles[:new]
107
+
108
+ @user = User.new
109
+ @user_group_pks = UserGroup.pk_hash(:name)
110
+ end
111
+
112
+ ##
113
+ # Show a form that allows a user to log in.
114
+ #
115
+ # @author Yorick Peterse
116
+ # @since 0.1
117
+ #
118
+ def login
119
+ if request.post?
120
+ # Let's see if we can authenticate
121
+ if user_login(request.subset(:email, :password))
122
+ # Update the last time the user logged in
123
+ User[:email => request.params['email']].update(:last_login => Time.new)
124
+
125
+ notification :success, @users_lang.titles[:index], @users_lang.success[:login]
126
+ redirect "admin"
127
+ else
128
+ notification :error, @users_lang.titles[:index], @users_lang.errors[:login]
129
+ end
130
+ end
131
+ end
132
+
133
+ ##
134
+ # Logout and destroy the user's session.
135
+ #
136
+ # @author Yorick Peterse
137
+ # @since 0.1
138
+ #
139
+ def logout
140
+ user_logout
141
+
142
+ notification :success, @users_lang.titles[:index], @users_lang.success[:logout]
143
+ redirect "admin/users/login"
144
+ end
145
+
146
+ ##
147
+ # Saves or creates a new user based on the POST data and a field named "id".
148
+ #
149
+ # @author Yorick Peterse
150
+ # @since 0.1
151
+ #
152
+ def save
153
+ if !user_authorized?([:update, :create])
154
+ respond(@zen_general_lang.errors[:not_authorized], 403)
155
+ end
156
+
157
+ post = request.params.dup
158
+
159
+ post.each do |key, value|
160
+ post.delete(key) if value.empty?
161
+ end
162
+
163
+ if post["id"] and !post["id"].empty?
164
+ @user = User[post["id"]]
165
+ save_action = :save
166
+ else
167
+ @user = User.new
168
+ save_action = :new
169
+ end
170
+
171
+ if !post['new_password'].nil? and !post['new_password'].empty?
172
+ if post['new_password'] != post['confirm_password']
173
+ notification :error, @users_lang.titles[:index], @users_lang.errors[:no_password_match]
174
+ redirect_referrer
175
+ else
176
+ post['password'] = post['new_password']
177
+
178
+ post.delete 'new_password'
179
+ post.delete 'confirm_password'
180
+ end
181
+ end
182
+
183
+ # User group pks have to be integers
184
+ if !post["user_group_pks"].nil?
185
+ post["user_group_pks"].map! { |value| value.to_i }
186
+ else
187
+ post["user_group_pks"] = []
188
+ end
189
+
190
+ flash_success = @users_lang.success[save_action]
191
+ flash_error = @users_lang.errors[save_action]
192
+
193
+ begin
194
+ @user.update(post)
195
+ notification(:success, @users_lang.titles[:index], flash_success)
196
+ rescue
197
+ notification(:error, @users_lang.titles[:index], flash_error)
198
+
199
+ flash[:form_errors] = @user.errors
200
+ end
201
+
202
+ if @user.id
203
+ redirect "/admin/users/edit/#{@user.id}"
204
+ else
205
+ redirect_referrer
206
+ end
207
+ end
208
+
209
+ ##
210
+ # Delete all specified users.
211
+ #
212
+ # @author Yorick Peterse
213
+ # @since 0.1
214
+ #
215
+ def delete
216
+ if !user_authorized?([:delete])
217
+ respond(@zen_general_lang.errors[:not_authorized], 403)
218
+ end
219
+
220
+ if !request.params["user_ids"] or request.params["user_ids"].empty?
221
+ notification(:error, @users_lang.titles[:index], @users_lang.errors[:no_delete])
222
+ redirect_referrer
223
+ end
224
+
225
+ request.params["user_ids"].each do |id|
226
+ @user = User[id]
227
+
228
+ begin
229
+ @user.delete
230
+ notification(:success, @users_lang.titles[:index], @users_lang.success[:delete] % id)
231
+ rescue
232
+ notification(:error, @users_lang.titles[:index], @users_lang.errors[:delete] % id)
233
+ end
234
+ end
235
+
236
+ redirect_referrer
237
+ end
238
+ end
239
+ end
240
+ end
@@ -0,0 +1,49 @@
1
+ Zen::Language.translation 'access_rules' do |item|
2
+
3
+ item.titles = {
4
+ :index => 'Access Rules',
5
+ :edit => 'Edit Access Rule',
6
+ :new => 'Add Access Rule'
7
+ }
8
+
9
+ item.labels = {
10
+ :id => '#',
11
+ :extension => 'Extension',
12
+ :rule_applies => 'Rule applies to',
13
+ :create => 'Create',
14
+ :read => 'Read',
15
+ :update => 'Update',
16
+ :delete => 'Delete',
17
+ :user => 'User',
18
+ :user_group => 'User group'
19
+ }
20
+
21
+ item.special = {
22
+ :boolean_hash => {true => "Yes", false => "No"},
23
+ :rule_applies_hash => {"Users" => "div_user_id", "User groups" => "div_user_group_id"}
24
+ }
25
+
26
+ item.messages = {
27
+ :no_rules => 'No access rules have been added yet'
28
+ }
29
+
30
+ item.errors = {
31
+ :new => "Failed to create a new access rule.",
32
+ :save => "Failed to save the access rule.",
33
+ :delete => "Failed to delete the access rule with ID #%s",
34
+ :no_delete => "You haven't specified any access rules to delete."
35
+ }
36
+
37
+ item.success = {
38
+ :new => "The new access rule has been created.",
39
+ :save => "The access rule has been modified.",
40
+ :delete => "The access rule with ID #%s has been deleted."
41
+ }
42
+
43
+ item.buttons = {
44
+ :new => 'New rule',
45
+ :delete => 'Delete selected rules',
46
+ :save => 'Save rule'
47
+ }
48
+
49
+ end
@@ -0,0 +1,42 @@
1
+ Zen::Language.translation 'user_groups' do |item|
2
+ item.titles = {
3
+ :index => 'User Groups',
4
+ :edit => 'Edit User Group',
5
+ :new => 'Add User Group'
6
+ }
7
+
8
+ item.labels = {
9
+ :id => '#',
10
+ :name => 'Name',
11
+ :slug => 'Slug',
12
+ :description => 'Description',
13
+ :super_group => 'Super group'
14
+ }
15
+
16
+ item.special = {
17
+ :boolean_hash => {true => "Yes", false => "No"}
18
+ }
19
+
20
+ item.messages = {
21
+ :no_user_groups => 'No user groups have been added yet'
22
+ }
23
+
24
+ item.errors = {
25
+ :new => "Failed to create a new user group.",
26
+ :save => "Failed to save the user group.",
27
+ :delete => "Failed to delete the user group with ID #%s",
28
+ :no_delete => "You haven't specified any user groups to delete."
29
+ }
30
+
31
+ item.success = {
32
+ :new => "The new user group has been created.",
33
+ :save => "The user group has been modified.",
34
+ :delete => "The user group with ID #%s has been deleted."
35
+ }
36
+
37
+ item.buttons = {
38
+ :new_group => 'New group',
39
+ :delete_groups => 'Delete selected groups',
40
+ :save_group => 'Save group'
41
+ }
42
+ end
@@ -0,0 +1,63 @@
1
+ Zen::Language.translation 'users' do |item|
2
+ # Page titles
3
+ item.titles = {
4
+ :index => 'Users',
5
+ :edit => 'Edit User',
6
+ :new => 'Add User',
7
+ :login => 'Login'
8
+ }
9
+
10
+ # Labels
11
+ item.labels = {
12
+ :id => '#',
13
+ :email => 'Email',
14
+ :name => 'Name',
15
+ :website => 'Website',
16
+ :password => 'Password',
17
+ :new_password => 'New password',
18
+ :confirm_password => 'Confirm password',
19
+ :status => 'Status',
20
+ :created_at => 'Created',
21
+ :updated_at => 'Updated',
22
+ :last_login => 'Last login',
23
+ :user_groups => 'User groups'
24
+ }
25
+
26
+ # Special items such as sub hashes and such
27
+ item.special = {
28
+ :status_hash => {'open' => 'Open', 'closed' => 'Closed'}
29
+ }
30
+
31
+ # General messages
32
+ item.messages = {
33
+ :no_users => 'No users have been added yet'
34
+ }
35
+
36
+ # Error specific messages
37
+ item.errors = {
38
+ :new => "Failed to create a new users.",
39
+ :save => "Failed to save the user.",
40
+ :delete => "Failed to delete the user with ID #%s",
41
+ :no_delete => "You haven't specified any users to delete.",
42
+ :no_password_match => 'The specified passwords didn\'t match.',
43
+ :login => "Failed to login with the specified details",
44
+ :logout => "Failed to log out, what the hell is going on?"
45
+ }
46
+
47
+ # Success messages
48
+ item.success = {
49
+ :new => "The new user has been created.",
50
+ :save => "The user has been modified.",
51
+ :delete => "The user with ID #%s has been deleted.",
52
+ :login => "You've been successfully logged in.",
53
+ :logout => "You've been successfully logged out."
54
+ }
55
+
56
+ # Buttons
57
+ item.buttons = {
58
+ :login => 'Login',
59
+ :new_user => 'New user',
60
+ :delete_users => 'Delete selected users',
61
+ :save_user => 'Save user'
62
+ }
63
+ end
@@ -0,0 +1,75 @@
1
+ module Users
2
+ module Liquid
3
+ ##
4
+ # Tag that can be used to retrieve details about a single user. When using this
5
+ # tag you can use the database table's column names as the keys, multiple keys
6
+ # will result in multiple WHERE/AND clauses. In order to retrieve a user with
7
+ # the Email address "me@awesome.com" you'd do the following:
8
+ #
9
+ # bc. {% user email="me@awesome.com" %}
10
+ # {{name}}
11
+ # {% enduser %}
12
+ #
13
+ # If you want to add an extra condition simply do the following:
14
+ #
15
+ # bc. {% user email="me@awesome.com" status="open" %}
16
+ # {{name}}
17
+ # {% enduser %}
18
+ #
19
+ # Note that this class is a Liquid block, not a tag. This means that you'll have to
20
+ # specify the closing tag. The reason for this is that there are multiple columns
21
+ # for the user table and using a tag in combination of a variable would result in
22
+ # more code.
23
+ #
24
+ # @author Yorick Peterse
25
+ # @since 0.1
26
+ #
27
+ class User < ::Liquid::Block
28
+ include ::Zen::Liquid::General
29
+
30
+ ##
31
+ # Initializes the class, parses the tag and retrieves the user for the specified tag.
32
+ #
33
+ # @author Yorick Peterse
34
+ # @param [String] tag_name The name of the tag that was called.
35
+ # @param [String] arguments All additional arguments passed as a string.
36
+ # @param [String] html The HTML inside the block.
37
+ # @since 0.1
38
+ #
39
+ def initialize tag_name, arguments, markup
40
+ super
41
+
42
+ @arguments = {}
43
+ arguments = parse_key_values(arguments)
44
+
45
+ arguments.each do |k, v|
46
+ @arguments[k.to_sym] = v
47
+ end
48
+
49
+ @user = {}
50
+ user = ::Users::Models::User[@arguments]
51
+
52
+ if !user.nil?
53
+ user.values.each do |k, v|
54
+ @user[k.to_s] = v
55
+ end
56
+ end
57
+ end
58
+
59
+ ##
60
+ # Renders the tag
61
+ #
62
+ # @author Yorick Peterse
63
+ # @param [Object] context The Liquid context for the current tag.
64
+ # @return [Array]
65
+ #
66
+ def render context
67
+ @user.each do |k, v|
68
+ context[k] = v
69
+ end
70
+
71
+ render_all(@nodelist, context)
72
+ end
73
+ end
74
+ end
75
+ end