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.
- data/LICENSE +19 -0
- data/MANIFEST +337 -0
- data/README.textile +42 -0
- data/Rakefile +6 -0
- data/bin/zen +9 -0
- data/doc/Categories.html +93 -0
- data/doc/Categories/Controllers.html +93 -0
- data/doc/Categories/Controllers/Categories.html +995 -0
- data/doc/Categories/Controllers/CategoryGroups.html +878 -0
- data/doc/Categories/Models.html +97 -0
- data/doc/Categories/Models/Category.html +269 -0
- data/doc/Categories/Models/CategoryGroup.html +231 -0
- data/doc/Comments.html +93 -0
- data/doc/Comments/Controllers.html +93 -0
- data/doc/Comments/Controllers/Comments.html +797 -0
- data/doc/Comments/Controllers/CommentsForm.html +487 -0
- data/doc/Comments/Liquid.html +93 -0
- data/doc/Comments/Liquid/CommentForm.html +522 -0
- data/doc/Comments/Liquid/Comments.html +543 -0
- data/doc/Comments/Models.html +95 -0
- data/doc/Comments/Models/Comment.html +260 -0
- data/doc/CustomFields.html +93 -0
- data/doc/CustomFields/Controllers.html +93 -0
- data/doc/CustomFields/Controllers/CustomFieldGroups.html +902 -0
- data/doc/CustomFields/Controllers/CustomFields.html +974 -0
- data/doc/CustomFields/Models.html +97 -0
- data/doc/CustomFields/Models/CustomField.html +272 -0
- data/doc/CustomFields/Models/CustomFieldGroup.html +259 -0
- data/doc/CustomFields/Models/CustomFieldValue.html +154 -0
- data/doc/Ramaze.html +93 -0
- data/doc/Ramaze/Helper.html +93 -0
- data/doc/Ramaze/Helper/ACL.html +531 -0
- data/doc/Ramaze/Helper/Asset.html +617 -0
- data/doc/Ramaze/Helper/Breadcrumb.html +411 -0
- data/doc/Ramaze/Helper/Common.html +738 -0
- data/doc/Sections.html +93 -0
- data/doc/Sections/Controllers.html +93 -0
- data/doc/Sections/Controllers/SectionEntries.html +1100 -0
- data/doc/Sections/Controllers/Sections.html +953 -0
- data/doc/Sections/Liquid.html +93 -0
- data/doc/Sections/Liquid/SectionEntries.html +674 -0
- data/doc/Sections/Liquid/Sections.html +494 -0
- data/doc/Sections/Models.html +97 -0
- data/doc/Sections/Models/Section.html +272 -0
- data/doc/Sections/Models/SectionEntry.html +264 -0
- data/doc/Sequel.html +91 -0
- data/doc/Sequel/Model.html +243 -0
- data/doc/Settings.html +93 -0
- data/doc/Settings/Controllers.html +91 -0
- data/doc/Settings/Controllers/Settings.html +565 -0
- data/doc/Settings/Liquid.html +91 -0
- data/doc/Settings/Liquid/Setting.html +426 -0
- data/doc/Settings/Models.html +95 -0
- data/doc/Settings/Models/Setting.html +293 -0
- data/doc/Users.html +93 -0
- data/doc/Users/Controllers.html +93 -0
- data/doc/Users/Controllers/AccessRules.html +904 -0
- data/doc/Users/Controllers/UserGroups.html +879 -0
- data/doc/Users/Controllers/Users.html +1124 -0
- data/doc/Users/Liquid.html +93 -0
- data/doc/Users/Liquid/User.html +480 -0
- data/doc/Users/Liquid/Users.html +495 -0
- data/doc/Users/Models.html +97 -0
- data/doc/Users/Models/AccessRule.html +257 -0
- data/doc/Users/Models/User.html +649 -0
- data/doc/Users/Models/UserGroup.html +267 -0
- data/doc/Zen.html +391 -0
- data/doc/Zen/Bin.html +113 -0
- data/doc/Zen/Bin/Base.html +727 -0
- data/doc/Zen/Controllers.html +115 -0
- data/doc/Zen/Controllers/AdminController.html +298 -0
- data/doc/Zen/Controllers/BaseController.html +272 -0
- data/doc/Zen/Controllers/FrontendController.html +164 -0
- data/doc/Zen/Controllers/MainController.html +421 -0
- data/doc/Zen/Database.html +498 -0
- data/doc/Zen/Language.html +660 -0
- data/doc/Zen/Liquid.html +117 -0
- data/doc/Zen/Liquid/ControllerBehavior.html +448 -0
- data/doc/Zen/Liquid/General.html +444 -0
- data/doc/Zen/Liquid/Redirect.html +435 -0
- data/doc/Zen/Liquid/Strip.html +447 -0
- data/doc/Zen/Logger.html +393 -0
- data/doc/Zen/Package.html +909 -0
- data/doc/_index.html +724 -0
- data/doc/class_list.html +36 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +53 -0
- data/doc/css/style.css +310 -0
- data/doc/file.README.html +86 -0
- data/doc/file_list.html +38 -0
- data/doc/frames.html +13 -0
- data/doc/index.html +86 -0
- data/doc/js/app.js +203 -0
- data/doc/js/full_list.js +149 -0
- data/doc/js/jquery.js +154 -0
- data/doc/method_list.html +1139 -0
- data/doc/top-level-namespace.html +88 -0
- data/lib/zen.rb +77 -0
- data/lib/zen/base/database.rb +105 -0
- data/lib/zen/base/language.rb +132 -0
- data/lib/zen/base/logger.rb +54 -0
- data/lib/zen/base/package.rb +233 -0
- data/lib/zen/base/version.rb +11 -0
- data/lib/zen/bin/zen_binary.rb +173 -0
- data/lib/zen/controller/admin_controller.rb +60 -0
- data/lib/zen/controller/base_controller.rb +39 -0
- data/lib/zen/controller/frontend_controller.rb +16 -0
- data/lib/zen/controller/main_controller.rb +93 -0
- data/lib/zen/helper/acl.rb +124 -0
- data/lib/zen/helper/asset.rb +104 -0
- data/lib/zen/helper/breadcrumb.rb +71 -0
- data/lib/zen/helper/common.rb +157 -0
- data/lib/zen/language/en/zen_general.rb +21 -0
- data/lib/zen/language/en/zen_models.rb +39 -0
- data/lib/zen/layout/admin.xhtml +72 -0
- data/lib/zen/layout/login.xhtml +44 -0
- data/lib/zen/liquid/controller_behavior.rb +55 -0
- data/lib/zen/liquid/general.rb +69 -0
- data/lib/zen/liquid/redirect.rb +47 -0
- data/lib/zen/liquid/strip.rb +58 -0
- data/lib/zen/model/methods.rb +26 -0
- data/lib/zen/model/settings.rb +27 -0
- data/lib/zen/packages/categories/LICENSE +19 -0
- data/lib/zen/packages/categories/README.textile +0 -0
- data/lib/zen/packages/categories/lib/categories.rb +24 -0
- data/lib/zen/packages/categories/lib/categories/controller/categories.rb +202 -0
- data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +173 -0
- data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +38 -0
- data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +37 -0
- data/lib/zen/packages/categories/lib/categories/model/category.rb +42 -0
- data/lib/zen/packages/categories/lib/categories/model/category_group.rb +29 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +36 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +70 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +18 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +72 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +7 -0
- data/lib/zen/packages/categories/migrations/.gitkeep +0 -0
- data/lib/zen/packages/categories/migrations/1295282303_create_schema.rb +40 -0
- data/lib/zen/packages/comments/LICENSE +19 -0
- data/lib/zen/packages/comments/README.textile +0 -0
- data/lib/zen/packages/comments/lib/comments.rb +26 -0
- data/lib/zen/packages/comments/lib/comments/controller/comments.rb +157 -0
- data/lib/zen/packages/comments/lib/comments/controller/comments_form.rb +135 -0
- data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +52 -0
- data/lib/zen/packages/comments/lib/comments/liquid/comment_form.rb +97 -0
- data/lib/zen/packages/comments/lib/comments/liquid/comments.rb +115 -0
- data/lib/zen/packages/comments/lib/comments/model/comment.rb +34 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +31 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +74 -0
- data/lib/zen/packages/comments/migrations/.gitkeep +0 -0
- data/lib/zen/packages/comments/migrations/1295282202_create_schema.rb +24 -0
- data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +11 -0
- data/lib/zen/packages/custom_fields/LICENSE +19 -0
- data/lib/zen/packages/custom_fields/README.textile +0 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields.rb +24 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +179 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +194 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +45 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +64 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field.rb +41 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_group.rb +32 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_value.rb +20 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +18 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +88 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +50 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +75 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +7 -0
- data/lib/zen/packages/custom_fields/migrations/.gitkeep +0 -0
- data/lib/zen/packages/custom_fields/migrations/1295255665_create_schema.rb +53 -0
- data/lib/zen/packages/sections/LICENSE +19 -0
- data/lib/zen/packages/sections/README.textile +43 -0
- data/lib/zen/packages/sections/lib/sections.rb +33 -0
- data/lib/zen/packages/sections/lib/sections/controller/section_entries.rb +251 -0
- data/lib/zen/packages/sections/lib/sections/controller/sections.rb +205 -0
- data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +58 -0
- data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +63 -0
- data/lib/zen/packages/sections/lib/sections/liquid/section_entries.rb +209 -0
- data/lib/zen/packages/sections/lib/sections/liquid/sections.rb +76 -0
- data/lib/zen/packages/sections/lib/sections/model/section.rb +43 -0
- data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +43 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +54 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +77 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +147 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +74 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +7 -0
- data/lib/zen/packages/sections/migrations/.gitkeep +0 -0
- data/lib/zen/packages/sections/migrations/1295251836_create_schema.rb +35 -0
- data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +18 -0
- data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +11 -0
- data/lib/zen/packages/settings/LICENSE +0 -0
- data/lib/zen/packages/settings/README.textile +0 -0
- data/lib/zen/packages/settings/lib/settings.rb +22 -0
- data/lib/zen/packages/settings/lib/settings/controller/settings.rb +113 -0
- data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +56 -0
- data/lib/zen/packages/settings/lib/settings/liquid/setting.rb +56 -0
- data/lib/zen/packages/settings/lib/settings/model/setting.rb +38 -0
- data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +79 -0
- data/lib/zen/packages/settings/migrations/.gitkeep +0 -0
- data/lib/zen/packages/settings/migrations/1295597111_create_schema.rb +31 -0
- data/lib/zen/packages/users/LICENSE +19 -0
- data/lib/zen/packages/users/README.textile +0 -0
- data/lib/zen/packages/users/lib/users.rb +35 -0
- data/lib/zen/packages/users/lib/users/controller/access_rules.rb +186 -0
- data/lib/zen/packages/users/lib/users/controller/user_groups.rb +171 -0
- data/lib/zen/packages/users/lib/users/controller/users.rb +240 -0
- data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +49 -0
- data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +42 -0
- data/lib/zen/packages/users/lib/users/language/en/users.rb +63 -0
- data/lib/zen/packages/users/lib/users/liquid/user.rb +75 -0
- data/lib/zen/packages/users/lib/users/liquid/users.rb +80 -0
- data/lib/zen/packages/users/lib/users/model/access_rule.rb +29 -0
- data/lib/zen/packages/users/lib/users/model/user.rb +96 -0
- data/lib/zen/packages/users/lib/users/model/user_group.rb +38 -0
- data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +43 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +68 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +85 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +19 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +69 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +25 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +73 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +22 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +7 -0
- data/lib/zen/packages/users/migrations/.gitkeep +0 -0
- data/lib/zen/packages/users/migrations/1295281013_create_schema.rb +54 -0
- data/lib/zen/public/admin/css/boilerplate.css +174 -0
- data/lib/zen/public/admin/css/general.css +485 -0
- data/lib/zen/public/admin/css/grid.css +119 -0
- data/lib/zen/public/admin/css/layout.css +111 -0
- data/lib/zen/public/admin/images/general/noise.jpg +0 -0
- data/lib/zen/public/admin/images/icons/accept.png +0 -0
- data/lib/zen/public/admin/images/icons/add.png +0 -0
- data/lib/zen/public/admin/images/icons/back.png +0 -0
- data/lib/zen/public/admin/images/icons/bold.png +0 -0
- data/lib/zen/public/admin/images/icons/close.png +0 -0
- data/lib/zen/public/admin/images/icons/delete.png +0 -0
- data/lib/zen/public/admin/images/icons/edit.png +0 -0
- data/lib/zen/public/admin/images/icons/error.png +0 -0
- data/lib/zen/public/admin/images/icons/help.png +0 -0
- data/lib/zen/public/admin/images/icons/info.png +0 -0
- data/lib/zen/public/admin/images/icons/italic.png +0 -0
- data/lib/zen/public/admin/images/icons/large/error.png +0 -0
- data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
- data/lib/zen/public/admin/images/icons/large/success.png +0 -0
- data/lib/zen/public/admin/images/icons/link.png +0 -0
- data/lib/zen/public/admin/images/icons/logout.png +0 -0
- data/lib/zen/public/admin/images/icons/ol.png +0 -0
- data/lib/zen/public/admin/images/icons/pdf.png +0 -0
- data/lib/zen/public/admin/images/icons/ul.png +0 -0
- data/lib/zen/public/admin/images/icons/user.png +0 -0
- data/lib/zen/public/admin/images/icons/view.png +0 -0
- data/lib/zen/public/admin/js/mootools/core.js +436 -0
- data/lib/zen/public/admin/js/mootools/more.js +288 -0
- data/lib/zen/public/admin/js/zen/editor/base.js +265 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/html.js +104 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +102 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +102 -0
- data/lib/zen/public/admin/js/zen/init.js +57 -0
- data/lib/zen/public/admin/js/zen/modal.js +159 -0
- data/lib/zen/public/admin/js/zen/notification.js +213 -0
- data/lib/zen/public/admin/js/zen/tabs.js +263 -0
- data/lib/zen/tasks.rb +6 -0
- data/pkg/.gitkeep +0 -0
- data/proto/app/Rakefile +2 -0
- data/proto/app/app.rb +20 -0
- data/proto/app/config.ru +18 -0
- data/proto/app/config/config.rb +17 -0
- data/proto/app/config/database.rb +18 -0
- data/proto/app/config/middlewares.rb +23 -0
- data/proto/app/config/requires.rb +8 -0
- data/proto/app/logs/.gitkeep +0 -0
- data/proto/app/public/.gitkeep +0 -0
- data/proto/app/start.rb +22 -0
- data/proto/app/vendor/.gitkeep +0 -0
- data/proto/app/vendor/themes/.gitkeep +0 -0
- data/proto/migration.rb +11 -0
- data/proto/module/LICENSE +0 -0
- data/proto/module/README.textile +0 -0
- data/proto/module/lib/module.rb +15 -0
- data/proto/module/lib/module/controller/controllers.rb +86 -0
- data/proto/module/lib/module/language/en/languages.rb +3 -0
- data/proto/module/lib/module/model/model.rb +12 -0
- data/proto/module/lib/module/view/admin/edit.xhtml +0 -0
- data/proto/module/lib/module/view/admin/form.xhtml +0 -0
- data/proto/module/lib/module/view/admin/index.xhtml +0 -0
- data/proto/module/lib/module/view/admin/new.xhtml +0 -0
- data/proto/module/migrations/.gitkeep +0 -0
- data/spec/javascript/css/base.css +177 -0
- data/spec/javascript/css/style.css +204 -0
- data/spec/javascript/css/typography.css +70 -0
- data/spec/javascript/editor/index.html +65 -0
- data/spec/javascript/images/close.png +0 -0
- data/spec/javascript/images/info.png +0 -0
- data/spec/javascript/js/editor.js +16 -0
- data/spec/javascript/js/modal.js +12 -0
- data/spec/javascript/js/namespace.js +2 -0
- data/spec/javascript/js/notification.js +43 -0
- data/spec/javascript/js/tabs.js +8 -0
- data/spec/javascript/modal/index.html +45 -0
- data/spec/javascript/notification/index.html +48 -0
- data/spec/javascript/tabs/index.html +73 -0
- data/spec/javascript/tabs/tab_1.html +1 -0
- data/spec/javascript/tabs/tab_2.html +1 -0
- data/spec/zen/base/language.rb +31 -0
- data/spec/zen/base/logger.rb +34 -0
- data/spec/zen/base/package.rb +47 -0
- data/spec/zen/config/database.rb +8 -0
- data/spec/zen/helper/asset.rb +26 -0
- data/spec/zen/helper/breadcrumb.rb +24 -0
- data/spec/zen/language/en/general.rb +4 -0
- data/spec/zen/language/nl/general.rb +4 -0
- data/spec/zen/liquid/general.rb +42 -0
- data/spec/zen/logs/.gitkeep +0 -0
- data/spec/zen/spec.rb +9 -0
- data/spec/zen/spec_database.db +0 -0
- data/tasks/bacon.rake +99 -0
- data/tasks/build.rake +72 -0
- data/tasks/clean.rake +18 -0
- data/tasks/db.rake +81 -0
- data/tasks/doc.rake +5 -0
- data/tasks/extension.rake +65 -0
- data/tasks/proto.rake +37 -0
- data/tasks/theme.rake +63 -0
- metadata +512 -0
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
# Load all our classes
|
|
3
|
+
require __DIR__ 'comments/model/comment.rb'
|
|
4
|
+
require __DIR__ 'comments/controller/comments'
|
|
5
|
+
require __DIR__ 'comments/controller/comments_form'
|
|
6
|
+
require __DIR__ 'comments/liquid/comments'
|
|
7
|
+
require __DIR__ 'comments/liquid/comment_form'
|
|
8
|
+
|
|
9
|
+
Liquid::Template.register_tag('comments' , Comments::Liquid::Comments)
|
|
10
|
+
Liquid::Template.register_tag('comment_form', Comments::Liquid::CommentForm)
|
|
11
|
+
|
|
12
|
+
Zen::Package.add do |p|
|
|
13
|
+
p.type = 'extension'
|
|
14
|
+
p.name = 'Comments'
|
|
15
|
+
p.author = 'Yorick Peterse'
|
|
16
|
+
p.url = 'http://yorickpeterse.com/'
|
|
17
|
+
p.version = '0.1'
|
|
18
|
+
p.about = "Allow users to post comments on any given section entry (as long as the section allows it)."
|
|
19
|
+
p.identifier = 'com.zen.comments'
|
|
20
|
+
p.directory = __DIR__('comments')
|
|
21
|
+
|
|
22
|
+
p.menu = [{
|
|
23
|
+
:title => "Comments",
|
|
24
|
+
:url => "admin/comments"
|
|
25
|
+
}]
|
|
26
|
+
end
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
module Comments
|
|
2
|
+
module Controllers
|
|
3
|
+
##
|
|
4
|
+
# Controller used for managing comments. Administrations can't actually
|
|
5
|
+
# add new comments using the backend controller but can edit or delete them.
|
|
6
|
+
# Comments can be submitted to any section entry as long as the section
|
|
7
|
+
# allows it. When submitting a comment the user data such as the name and email
|
|
8
|
+
# will be retrieved from either the users table (if the user is logged in) or
|
|
9
|
+
# from the form that was submitted.
|
|
10
|
+
#
|
|
11
|
+
# @author Yorick Peterse
|
|
12
|
+
# @since 0.1
|
|
13
|
+
#
|
|
14
|
+
class Comments < Zen::Controllers::AdminController
|
|
15
|
+
map '/admin/comments'
|
|
16
|
+
|
|
17
|
+
trait :extension_identifier => 'com.zen.comments'
|
|
18
|
+
|
|
19
|
+
include ::Comments::Models
|
|
20
|
+
|
|
21
|
+
before_all do
|
|
22
|
+
csrf_protection :save, :delete do
|
|
23
|
+
respond("The specified request can't be executed without a valid CSRF token", 401)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Constructor method that pre-loads several variables.
|
|
29
|
+
#
|
|
30
|
+
# @author Yorick Peterse
|
|
31
|
+
# @since 0.1
|
|
32
|
+
#
|
|
33
|
+
def initialize
|
|
34
|
+
super
|
|
35
|
+
|
|
36
|
+
@form_save_url = '/admin/comments/save'
|
|
37
|
+
@form_delete_url = '/admin/comments/delete'
|
|
38
|
+
@comments_lang = Zen::Language.load 'comments'
|
|
39
|
+
|
|
40
|
+
# Set the page title
|
|
41
|
+
if !action.method.nil?
|
|
42
|
+
method = action.method.to_sym
|
|
43
|
+
|
|
44
|
+
if @comments_lang.titles.key? method
|
|
45
|
+
@page_title = @comments_lang.titles[method]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
##
|
|
51
|
+
# Shows an overview of all posted comments along with their status,
|
|
52
|
+
# author and so on.
|
|
53
|
+
#
|
|
54
|
+
# @author Yorick Peterse
|
|
55
|
+
# @since 0.1
|
|
56
|
+
#
|
|
57
|
+
def index
|
|
58
|
+
if !user_authorized?([:read])
|
|
59
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
set_breadcrumbs @comments_lang.titles[:index]
|
|
63
|
+
|
|
64
|
+
@comments = Comment.all
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
##
|
|
68
|
+
# Edits an existing comment based on the ID.
|
|
69
|
+
#
|
|
70
|
+
# @author Yorick Peterse
|
|
71
|
+
# @param [Integer] id The ID of the comment to retrieve so that we can edit it.
|
|
72
|
+
# @since 0.1
|
|
73
|
+
#
|
|
74
|
+
def edit id
|
|
75
|
+
if !user_authorized?([:read, :update])
|
|
76
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
set_breadcrumbs anchor_to(@comments_lang.titles[:index], "admin/comments"), @page_title
|
|
80
|
+
|
|
81
|
+
@comment = Comment[id]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
##
|
|
85
|
+
# Saves a comment based on the current POST data. Note that this
|
|
86
|
+
# method won't create a new comment as this can't be done using the backend.
|
|
87
|
+
#
|
|
88
|
+
# @author Yorick Peterse
|
|
89
|
+
# @since 0.1
|
|
90
|
+
#
|
|
91
|
+
def save
|
|
92
|
+
if !user_authorized?([:update])
|
|
93
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Copy the POST data so we can work with it without messing things up
|
|
97
|
+
post = request.params.dup
|
|
98
|
+
|
|
99
|
+
# Remove all empty fields
|
|
100
|
+
post.each do |key, value|
|
|
101
|
+
post.delete(key) if value.empty?
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
@comment = Comment[post["id"]]
|
|
105
|
+
|
|
106
|
+
begin
|
|
107
|
+
@comment.update(post)
|
|
108
|
+
notification(:success, @comments_lang.titles[:index], @comments_lang.success[:save])
|
|
109
|
+
rescue
|
|
110
|
+
notification(:error, @comments_lang.titles[:index], @comments_lang.errors[:save])
|
|
111
|
+
|
|
112
|
+
flash[:form_errors] = @comment.errors
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Redirect the user to the proper page.
|
|
116
|
+
if @comment.id
|
|
117
|
+
redirect "/admin/comments/edit/#{@comment.id}"
|
|
118
|
+
else
|
|
119
|
+
redirect_referrer
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
##
|
|
124
|
+
# Deletes a number of comments based on the comment IDs specified
|
|
125
|
+
# in the POST array "comment_ids".
|
|
126
|
+
#
|
|
127
|
+
# @author Yorick Peterse
|
|
128
|
+
# @since 0.1
|
|
129
|
+
#
|
|
130
|
+
def delete
|
|
131
|
+
if !user_authorized?([:delete])
|
|
132
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Obviously we'll require some IDs
|
|
136
|
+
if !request.params["comment_ids"] or request.params["comment_ids"].empty?
|
|
137
|
+
notification(:error, @comments_lang.titles[:index], @comments_lang.errors[:no_delete])
|
|
138
|
+
redirect_referrer
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Delete each section
|
|
142
|
+
request.params["comment_ids"].each do |id|
|
|
143
|
+
@comment = Comment[id]
|
|
144
|
+
|
|
145
|
+
begin
|
|
146
|
+
@comment.delete
|
|
147
|
+
notification(:success, @comments_lang.titles[:index], @comments_lang.success[:delete] % id)
|
|
148
|
+
rescue
|
|
149
|
+
notification(:error, @comments_lang.titles[:index], @comments_lang.errors[:delete] % id)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
redirect_referrer
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
module Comments
|
|
2
|
+
module Controllers
|
|
3
|
+
##
|
|
4
|
+
# Frontend controller for the comments system used for saving user-submitted comments.
|
|
5
|
+
# When the anti-spam system is enabled Zen will use Defensio to check if the comment is
|
|
6
|
+
# spam or ham.
|
|
7
|
+
#
|
|
8
|
+
# @author Yorick Peterse
|
|
9
|
+
# @since 0.1
|
|
10
|
+
#
|
|
11
|
+
class CommentsForm < Zen::Controllers::FrontendController
|
|
12
|
+
include ::Comments::Models
|
|
13
|
+
|
|
14
|
+
map '/comments_form'
|
|
15
|
+
trait :extension_identifier => 'com.zen.comments'
|
|
16
|
+
|
|
17
|
+
before_all do
|
|
18
|
+
csrf_protection :save do
|
|
19
|
+
respond(@zen_general_lang.errors[:csrf], 401)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
# Creates a new comment for the section entry. Once the comment has been saved
|
|
25
|
+
# the user will be redirected back to the previous page.
|
|
26
|
+
#
|
|
27
|
+
# @author Yorick Peterse
|
|
28
|
+
# @since 0.1
|
|
29
|
+
#
|
|
30
|
+
def save
|
|
31
|
+
comments_lang = Zen::Language.load('comments')
|
|
32
|
+
|
|
33
|
+
comment = Comment.new
|
|
34
|
+
post = request.params.dup
|
|
35
|
+
entry = ::Sections::Models::SectionEntry[h(post['section_entry']).to_i]
|
|
36
|
+
|
|
37
|
+
# Remove empty values
|
|
38
|
+
post.each { |k, v| post.delete(k) if v.empty? }
|
|
39
|
+
|
|
40
|
+
if post.key?('user_id')
|
|
41
|
+
comment.user_id = post['user_id']
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Set the comment data
|
|
45
|
+
comment.comment = post['comment']
|
|
46
|
+
|
|
47
|
+
if !post.key?('user_id')
|
|
48
|
+
['name', 'website', 'email'].each do |k|
|
|
49
|
+
if post.key?(k)
|
|
50
|
+
comment.send("#{k}=", post[k])
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
comment.section_entry_id = entry.id
|
|
56
|
+
|
|
57
|
+
# Validate the section entry
|
|
58
|
+
if entry.nil?
|
|
59
|
+
flash[:error] = comments_lang.errors[:invalid_entry]
|
|
60
|
+
redirect_referrer
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
section = entry.section
|
|
64
|
+
|
|
65
|
+
# Comments allowed?
|
|
66
|
+
if section.comment_allow == false
|
|
67
|
+
flash[:error] = comments_lang.errors[:comments_not_allowed]
|
|
68
|
+
redirect_referrer
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Comments require an account?
|
|
72
|
+
if section.comment_require_account == true and session[:user].nil?
|
|
73
|
+
flash[:error] = comments_lang.errors[:comments_require_account]
|
|
74
|
+
redirect_referrer
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Require moderation?
|
|
78
|
+
if section.comment_moderate == true
|
|
79
|
+
comment.status = 'closed'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Require anti-spam validation?
|
|
83
|
+
if session[:settings][:enable_antispam] == '1'
|
|
84
|
+
# Validate the comment
|
|
85
|
+
api_key = session[:settings][:defensio_key]
|
|
86
|
+
|
|
87
|
+
if api_key.nil?
|
|
88
|
+
flash[:error] = comments_lang.errors[:no_api_key]
|
|
89
|
+
redirect_referrer
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
defensio = ::Defensio.new(api_key)
|
|
93
|
+
status, response = defensio.post_document(
|
|
94
|
+
:content => post['comment'],
|
|
95
|
+
:platform => "zen",
|
|
96
|
+
:type => "comment"
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
if status != 200
|
|
100
|
+
flash[:error] = comments_lang.errors[:defensio_status]
|
|
101
|
+
redirect_referrer
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Time to validate the Defensio response
|
|
105
|
+
if response['allow'] == true and response['spaminess'] <= 0.85
|
|
106
|
+
if section.comment_moderate == true
|
|
107
|
+
comment.status = 'closed'
|
|
108
|
+
else
|
|
109
|
+
comment.status = 'open'
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
comment.defensio_signature = response['signature']
|
|
113
|
+
else
|
|
114
|
+
comment.status = 'spam'
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Save the comment
|
|
119
|
+
begin
|
|
120
|
+
comment.save
|
|
121
|
+
|
|
122
|
+
if section.comment_moderate == true
|
|
123
|
+
flash[:success] = comments_lang.success[:moderate]
|
|
124
|
+
else
|
|
125
|
+
flash[:success] = comments_lang.success[:new]
|
|
126
|
+
end
|
|
127
|
+
rescue
|
|
128
|
+
flash[:error] = comments_lang.errors[:new]
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
redirect_referrer
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Zen::Language.translation 'comments' do |item|
|
|
2
|
+
|
|
3
|
+
item.titles = {
|
|
4
|
+
:index => 'Comments',
|
|
5
|
+
:edit => 'Edit Comment'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
item.labels = {
|
|
9
|
+
:id => '#',
|
|
10
|
+
:website => 'Website',
|
|
11
|
+
:entry => 'Section entry',
|
|
12
|
+
:email => 'Email',
|
|
13
|
+
:status => 'Status',
|
|
14
|
+
:comment => 'Comment',
|
|
15
|
+
:name => 'Name',
|
|
16
|
+
:created_at => 'Created',
|
|
17
|
+
:updated_at => 'Updated',
|
|
18
|
+
:defensio_signature => 'Defensio signature'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
item.special = {
|
|
22
|
+
:status_hash => {'open' => 'Open', 'closed' => 'Closed', 'spam' => 'Spam'}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
item.messages = {
|
|
26
|
+
:no_comments => 'No comments have been added yet.'
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
item.errors = {
|
|
30
|
+
:new => "Failed to create a new comment.",
|
|
31
|
+
:save => "Failed to save the comment.",
|
|
32
|
+
:delete => "Failed to delete the comment with ID #%s",
|
|
33
|
+
:no_delete => "You haven't specified any comments to delete.",
|
|
34
|
+
:invalid_entry => "The specified section entry is invalid",
|
|
35
|
+
:comments_not_allowed => "Comments aren't allowed for this section",
|
|
36
|
+
:comments_require_account => "This section requires you to be logged in in order to post a comment",
|
|
37
|
+
:no_api_key => "You need to specify an API key for the Defension system in your settings panel.",
|
|
38
|
+
:defensio_status => "The comment could not be saved due to a problem with the Defensio server."
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
item.success = {
|
|
42
|
+
:new => "The new comment has been created.",
|
|
43
|
+
:save => "The comment has been modified.",
|
|
44
|
+
:delete => "The comment with ID #%s has been deleted.",
|
|
45
|
+
:moderate => "The comment has been posted but must be approved by an administrator before it's displayed."
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
item.buttons = {
|
|
49
|
+
:delete_comments => 'Delete selected comments',
|
|
50
|
+
:save_comment => 'Save comment'
|
|
51
|
+
}
|
|
52
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'ramaze/gestalt'
|
|
2
|
+
|
|
3
|
+
module Comments
|
|
4
|
+
module Liquid
|
|
5
|
+
##
|
|
6
|
+
# Describe...
|
|
7
|
+
#
|
|
8
|
+
# The following arguments can be used:
|
|
9
|
+
#
|
|
10
|
+
# * section_entry
|
|
11
|
+
# * section_entry_id
|
|
12
|
+
#
|
|
13
|
+
# @author Yorick Peterse
|
|
14
|
+
# @since 0.1
|
|
15
|
+
#
|
|
16
|
+
class CommentForm < ::Liquid::Block
|
|
17
|
+
include ::Zen::Liquid::General
|
|
18
|
+
include ::Zen::Liquid::ControllerBehavior
|
|
19
|
+
include ::Ramaze::Helper::CSRF
|
|
20
|
+
include ::Ramaze::Helper::BlueForm
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# Creates a new instance of the block and passes the tag name,
|
|
24
|
+
# all additional arguments and the HTML to the constructor method.
|
|
25
|
+
#
|
|
26
|
+
# @author Yorick Peterse
|
|
27
|
+
# @param [String] tag_name The name of the tag that was called.
|
|
28
|
+
# @param [String] arguments All additional arguments passed as a string.
|
|
29
|
+
# @param [String] html The HTML inside the block.
|
|
30
|
+
# @since 0.1
|
|
31
|
+
#
|
|
32
|
+
def initialize(tag_name, arguments, html)
|
|
33
|
+
super
|
|
34
|
+
|
|
35
|
+
@arguments = parse_key_values(arguments)
|
|
36
|
+
@args_parsed = false
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
# Renders the tag block.
|
|
41
|
+
#
|
|
42
|
+
# @author Yorick Peterse
|
|
43
|
+
# @since 0.1
|
|
44
|
+
#
|
|
45
|
+
def render(context)
|
|
46
|
+
if @args_parsed == false
|
|
47
|
+
@arguments.each do |k, v|
|
|
48
|
+
v = v.to_s
|
|
49
|
+
|
|
50
|
+
if context.has_key?(v)
|
|
51
|
+
@arguments[k] = h(context[v])
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
@args_parsed = true
|
|
57
|
+
g = Ramaze::Gestalt.new
|
|
58
|
+
user_html = ''
|
|
59
|
+
|
|
60
|
+
super(context).each do |h|
|
|
61
|
+
user_html += h
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Get our section to which this form belongs
|
|
65
|
+
if @arguments.key?('section_entry')
|
|
66
|
+
section_entry = ::Sections::Models::SectionEntry[:slug => @arguments['section_entry']]
|
|
67
|
+
else
|
|
68
|
+
section_entry = ::Sections::Models::SectionEntry[@arguments['section_entry_id'].to_i]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Get the section entry's ID
|
|
72
|
+
if !section_entry.nil?
|
|
73
|
+
section_entry_id = section_entry.id
|
|
74
|
+
else
|
|
75
|
+
section_entry_id = nil
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Get the user's ID if he/she is logged in
|
|
79
|
+
if !session[:user].nil?
|
|
80
|
+
user_id = session[:user].id
|
|
81
|
+
else
|
|
82
|
+
user_id = nil
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
g_html = form_for(nil, :method => :post, :action => "/comments_form/save") do |f|
|
|
86
|
+
f.input_hidden :csrf_token, get_csrf_token
|
|
87
|
+
f.input_hidden :section_entry, section_entry_id
|
|
88
|
+
f.input_hidden :user_id, user_id
|
|
89
|
+
|
|
90
|
+
user_html
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
return g_html
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|