zen 0.2.8 → 0.3b
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/.gems +20 -0
- data/.mailmap +3 -2
- data/.rvmrc +1 -1
- data/.travis.yml +13 -2
- data/.yardopts +13 -0
- data/AUTHORS +1 -1
- data/README.md +115 -77
- data/Rakefile +6 -7
- data/bin/zen +12 -5
- data/guide/_static/categories/categories.png +0 -0
- data/guide/_static/categories/category_groups.png +0 -0
- data/guide/_static/categories/new_category.png +0 -0
- data/guide/_static/categories/new_category_group.png +0 -0
- data/guide/_static/comments/comments.png +0 -0
- data/guide/_static/comments/edit_comment.png +0 -0
- data/guide/_static/custom_fields/custom_field_groups.png +0 -0
- data/guide/_static/custom_fields/custom_field_types.png +0 -0
- data/guide/_static/custom_fields/custom_fields.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
- data/guide/_static/menus/edit_menu.png +0 -0
- data/guide/_static/menus/edit_menu_item.png +0 -0
- data/guide/_static/menus/menu_items.png +0 -0
- data/guide/_static/menus/menus.png +0 -0
- data/guide/_static/sections/edit_entry.png +0 -0
- data/guide/_static/sections/edit_entry_categories.png +0 -0
- data/guide/_static/sections/edit_entry_general.png +0 -0
- data/guide/_static/sections/edit_entry_meta.png +0 -0
- data/guide/_static/sections/edit_section_comments.png +0 -0
- data/guide/_static/sections/edit_section_general.png +0 -0
- data/guide/_static/sections/edit_section_groups.png +0 -0
- data/guide/_static/sections/entries.png +0 -0
- data/guide/_static/sections/sections.png +0 -0
- data/guide/_static/settings/overview_general.png +0 -0
- data/guide/_static/settings/overview_security.png +0 -0
- data/guide/_static/settings/overview_user.png +0 -0
- data/guide/_static/users/edit_user.png +0 -0
- data/guide/_static/users/edit_user_group.png +0 -0
- data/guide/_static/users/edit_user_group_permissions.png +0 -0
- data/guide/_static/users/edit_user_permissions.png +0 -0
- data/guide/_static/users/overview.png +0 -0
- data/guide/_static/users/user_groups_overview.png +0 -0
- data/guide/asset_management.md +117 -0
- data/{CHANGELOG.md → guide/changelog.md} +42 -0
- data/guide/css/common.css +20 -0
- data/guide/getting_started.md +61 -0
- data/guide/hacking.md +52 -0
- data/guide/installation.md +44 -0
- data/guide/javascript.md +352 -0
- data/lib/vendor/sequel_sluggable.rb +137 -0
- data/lib/yard/tags.rb +13 -0
- data/lib/zen.rb +148 -78
- data/lib/zen/asset_groups.rb +85 -0
- data/lib/zen/bin/create.rb +267 -56
- data/lib/zen/bin/default.rb +84 -0
- data/lib/zen/controller/admin_controller.rb +1 -82
- data/lib/zen/controller/base_controller.rb +9 -5
- data/lib/zen/controller/frontend_controller.rb +0 -1
- data/lib/zen/controller/main_controller.rb +30 -42
- data/lib/zen/controller/preview.rb +9 -8
- data/lib/zen/controller/translations.rb +49 -0
- data/lib/zen/error.rb +17 -0
- data/lib/zen/event.rb +118 -0
- data/lib/zen/helper/asset.rb +63 -0
- data/lib/zen/helper/breadcrumb.rb +1 -4
- data/lib/zen/helper/controller.rb +73 -0
- data/lib/zen/helper/locale.rb +42 -0
- data/lib/zen/helper/message.rb +0 -3
- data/lib/zen/helper/search.rb +54 -0
- data/lib/zen/helper/stacked_aspect.rb +249 -0
- data/lib/zen/helper/theme.rb +3 -10
- data/lib/zen/language.rb +356 -181
- data/lib/zen/language/en/zen_general.rb +52 -0
- data/lib/zen/language/en/zen_models.rb +19 -0
- data/lib/zen/language/nl/zen_general.rb +57 -0
- data/lib/zen/language/nl/zen_models.rb +22 -0
- data/lib/zen/language/translation.rb +132 -0
- data/lib/zen/languages.rb +9 -0
- data/lib/zen/layout/admin.xhtml +3 -3
- data/lib/zen/layout/login.xhtml +1 -1
- data/lib/zen/markup.rb +189 -0
- data/lib/zen/model/helper.rb +65 -0
- data/lib/zen/model/init.rb +62 -0
- data/lib/zen/model/methods.rb +6 -7
- data/lib/zen/package.rb +312 -201
- data/lib/zen/package/all.rb +4 -3
- data/lib/zen/package/categories/lib/categories.rb +29 -41
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +185 -130
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +172 -102
- data/lib/zen/package/categories/lib/categories/helper/category.rb +4 -9
- data/lib/zen/package/categories/lib/categories/helper/category_frontend.rb +86 -0
- data/lib/zen/package/categories/lib/categories/language/en/categories.rb +40 -0
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.rb +39 -0
- data/lib/zen/package/categories/lib/categories/language/nl/categories.rb +42 -0
- data/lib/zen/package/categories/lib/categories/language/nl/category_groups.rb +42 -0
- data/lib/zen/package/categories/lib/categories/model/category.rb +21 -25
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +21 -15
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +25 -26
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +24 -24
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +18 -20
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +21 -18
- data/lib/zen/package/comments/lib/comments.rb +30 -50
- data/lib/zen/package/comments/lib/comments/anti_spam.rb +138 -0
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +159 -92
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +122 -34
- data/lib/zen/package/comments/lib/comments/helper/comment.rb +0 -3
- data/lib/zen/package/comments/lib/comments/helper/comment_frontend.rb +90 -0
- data/lib/zen/package/comments/lib/comments/language/en/comments.rb +57 -0
- data/lib/zen/package/comments/lib/comments/language/nl/comments.rb +61 -0
- data/lib/zen/package/comments/lib/comments/model/comment.rb +147 -49
- data/lib/zen/package/comments/lib/comments/model/comment_status.rb +0 -2
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +37 -40
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +23 -42
- data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +12 -4
- data/lib/zen/package/comments/migrations/1313851786_remove_defensio_signature.rb +11 -0
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +40 -43
- data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +72 -17
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +154 -118
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +147 -90
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +161 -131
- data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +4 -9
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +42 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.rb +51 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.rb +60 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.rb +41 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.rb +49 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.rb +61 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +18 -23
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +20 -19
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +1 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +19 -9
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +18 -15
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +18 -18
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +30 -24
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +15 -10
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +24 -19
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +18 -13
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +30 -20
- data/lib/zen/package/extensions/lib/extensions.rb +20 -0
- data/lib/zen/package/extensions/lib/extensions/controller/extensions.rb +41 -0
- data/lib/zen/package/extensions/lib/extensions/language/en/extensions.rb +23 -0
- data/lib/zen/package/extensions/lib/extensions/language/nl/extensions.rb +25 -0
- data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +86 -0
- data/lib/zen/package/menu.rb +109 -0
- data/lib/zen/package/menus/lib/menus.rb +25 -34
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +143 -107
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +166 -115
- data/lib/zen/package/menus/lib/menus/helper/menu.rb +2 -8
- data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +114 -0
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/en/menus.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/nl/menu_items.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/nl/menus.rb +50 -0
- data/lib/zen/package/menus/lib/menus/model/menu.rb +24 -17
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +37 -13
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +32 -25
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +23 -17
- data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +31 -26
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +20 -22
- data/lib/zen/package/sections/lib/sections.rb +25 -68
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +178 -138
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +173 -140
- data/lib/zen/package/sections/lib/sections/helper/section.rb +3 -6
- data/lib/zen/package/sections/lib/sections/helper/section_frontend.rb +146 -0
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +50 -0
- data/lib/zen/package/sections/lib/sections/language/en/sections.rb +55 -0
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +50 -0
- data/lib/zen/package/sections/lib/sections/language/nl/sections.rb +55 -0
- data/lib/zen/package/sections/lib/sections/model/section.rb +36 -36
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +52 -59
- data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -2
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +24 -21
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +24 -26
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +33 -31
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +24 -25
- data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +14 -10
- data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +12 -6
- data/lib/zen/package/settings/lib/settings.rb +25 -120
- data/lib/zen/package/settings/lib/settings/blue_form_parameters.rb +157 -0
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +94 -69
- data/lib/zen/package/settings/lib/settings/language/en/settings.rb +41 -0
- data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +41 -0
- data/lib/zen/package/settings/lib/settings/model/setting.rb +0 -2
- data/lib/zen/package/settings/lib/settings/setting.rb +379 -0
- data/lib/zen/package/settings/lib/settings/setting_groups.rb +11 -0
- data/lib/zen/package/settings/lib/settings/settings.rb +83 -0
- data/lib/zen/package/settings/lib/settings/settings_group.rb +84 -0
- data/lib/zen/package/settings/lib/settings/singleton_methods.rb +35 -0
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +15 -57
- data/lib/zen/package/settings/migrations/1321197919_remove_unused_columns.rb +17 -0
- data/lib/zen/package/users/lib/users.rb +51 -36
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +133 -98
- data/lib/zen/package/users/lib/users/controller/users.rb +253 -136
- data/lib/zen/package/users/lib/users/helper/access.rb +102 -0
- data/lib/zen/package/users/lib/users/helper/acl.rb +113 -0
- data/lib/zen/package/users/lib/users/helper/users.rb +41 -24
- data/lib/zen/package/users/lib/users/language/en/permissions.rb +16 -0
- data/lib/zen/package/users/lib/users/language/en/user_groups.rb +39 -0
- data/lib/zen/package/users/lib/users/language/en/users.rb +73 -0
- data/lib/zen/package/users/lib/users/language/nl/permissions.rb +16 -0
- data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +41 -0
- data/lib/zen/package/users/lib/users/language/nl/users.rb +74 -0
- data/lib/zen/package/users/lib/users/model/permission.rb +28 -0
- data/lib/zen/package/users/lib/users/model/user.rb +104 -65
- data/lib/zen/package/users/lib/users/model/user_group.rb +28 -24
- data/lib/zen/package/users/lib/users/model/user_status.rb +27 -0
- data/lib/zen/package/users/lib/users/public/admin/css/users/permissions.css +22 -0
- data/lib/zen/package/users/lib/users/public/admin/js/users/permissions.js +33 -0
- data/lib/zen/package/users/lib/users/settings.rb +19 -0
- data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +58 -28
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +19 -15
- data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +93 -62
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +23 -36
- data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +13 -6
- data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +33 -0
- data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +52 -0
- data/lib/zen/package/users/migrations/1313786058_update_default_date.rb +41 -0
- data/lib/zen/package/users/migrations/1316432327_permissions.rb +36 -0
- data/lib/zen/package/users/migrations/1320272365_status_ids.rb +67 -0
- data/lib/zen/public/admin/css/zen/buttons.css +3 -11
- data/lib/zen/public/admin/css/zen/datepicker.css +23 -13
- data/lib/zen/public/admin/css/zen/editor.css +6 -14
- data/lib/zen/public/admin/css/zen/forms.css +19 -12
- data/lib/zen/public/admin/css/zen/general.css +22 -18
- data/lib/zen/public/admin/css/zen/grid.css +1 -20
- data/lib/zen/public/admin/css/zen/layout.css +26 -11
- data/lib/zen/public/admin/css/zen/messages.css +3 -10
- data/lib/zen/public/admin/css/zen/reset.css +13 -15
- data/lib/zen/public/admin/css/zen/tables.css +8 -10
- data/lib/zen/public/admin/css/zen/tabs.css +2 -10
- data/lib/zen/public/admin/css/zen/window.css +2 -8
- data/lib/zen/public/admin/js/vendor/datepicker.js +540 -240
- data/lib/zen/public/admin/js/vendor/mootools/core.js +273 -283
- data/lib/zen/public/admin/js/vendor/mootools/more.js +131 -136
- data/lib/zen/public/admin/js/zen/index.js +8 -14
- data/lib/zen/public/admin/js/zen/lib/editor.js +36 -33
- data/lib/zen/public/admin/js/zen/lib/editor/markdown.js +0 -6
- data/lib/zen/public/admin/js/zen/lib/editor/textile.js +0 -6
- data/lib/zen/public/admin/js/zen/lib/html_table.js +0 -5
- data/lib/zen/public/admin/js/zen/lib/tabs.js +22 -79
- data/lib/zen/public/admin/js/zen/lib/window.js +12 -22
- data/lib/zen/spec/bacon/color_output.rb +1 -1
- data/lib/zen/spec/helper.rb +6 -11
- data/lib/zen/spec/simplecov.rb +3 -3
- data/lib/zen/task.rb +0 -1
- data/lib/zen/task/build.rake +46 -26
- data/lib/zen/task/clean.rake +14 -7
- data/lib/zen/task/db.rake +31 -29
- data/lib/zen/task/package.rake +19 -23
- data/lib/zen/task/proto.rake +3 -5
- data/lib/zen/task/setup.rake +4 -0
- data/lib/zen/task/test.rake +31 -6
- data/lib/zen/task/theme.rake +13 -19
- data/lib/zen/theme.rb +377 -52
- data/lib/zen/validation.rb +22 -30
- data/lib/zen/version.rb +1 -2
- data/lib/zen/view/bottom.xhtml +9 -1
- data/lib/zen/view/head.xhtml +1 -1
- data/lib/zen/view/main.xhtml +1 -1
- data/lib/zen/view/search.xhtml +9 -0
- data/proto/app/Rakefile +0 -1
- data/proto/app/app.rb +21 -16
- data/proto/app/config/config.rb.erb +41 -0
- data/proto/app/config/{database.rb → database.rb.erb} +17 -14
- data/proto/app/config/middlewares.rb +1 -1
- data/proto/app/theme/default/index.xhtml +25 -0
- data/proto/app/theme/theme.rb +19 -0
- data/proto/app/{log/database/dev → tmp}/.gitkeep +0 -0
- data/proto/migration.rb +3 -5
- data/proto/rack/thin.yml +41 -0
- data/proto/rack/unicorn.rb +38 -0
- data/spec/Rakefile +15 -11
- data/spec/fixtures/zen/helper/controller.rb +13 -0
- data/spec/fixtures/zen/helper/locale.rb +7 -0
- data/spec/fixtures/zen/helper/message.rb +0 -4
- data/spec/fixtures/zen/language.rb +31 -0
- data/spec/fixtures/zen/language/en/spec.rb +11 -0
- data/spec/fixtures/zen/language/nl/spec.rb +11 -0
- data/spec/fixtures/zen/package.rb +0 -10
- data/spec/fixtures/zen/package/categories/helper/category_frontend.rb +16 -0
- data/spec/fixtures/zen/package/comments/helper/comment_frontend.rb +16 -0
- data/spec/fixtures/zen/package/sections/helper/section_frontend.rb +16 -0
- data/spec/fixtures/zen/package/settings/controller/settings.rb +17 -0
- data/spec/fixtures/zen/package/users/helper/access.rb +18 -0
- data/spec/fixtures/zen/package/users/helper/acl.rb +23 -0
- data/spec/fixtures/zen/theme/{default-section → default}/index.xhtml +0 -0
- data/spec/helper.rb +12 -27
- data/{proto/app/log/database/live → spec/public}/.gitkeep +0 -0
- data/spec/zen/controller/admin_controller.rb +5 -6
- data/spec/zen/controller/main_controller.rb +29 -35
- data/spec/zen/controller/preview.rb +9 -10
- data/spec/zen/event.rb +44 -0
- data/spec/zen/helper/breadcrumb.rb +4 -5
- data/spec/zen/helper/controller.rb +21 -0
- data/spec/zen/helper/locale.rb +25 -0
- data/spec/zen/helper/message.rb +4 -11
- data/spec/zen/helper/theme.rb +11 -14
- data/spec/zen/language.rb +48 -22
- data/spec/zen/markup.rb +39 -0
- data/spec/zen/package.rb +48 -11
- data/spec/zen/package/categories/controller/categories.rb +99 -45
- data/spec/zen/package/categories/controller/category_groups.rb +109 -33
- data/spec/zen/package/categories/helper/category.rb +19 -32
- data/spec/zen/package/categories/helper/category_frontend.rb +61 -0
- data/spec/zen/package/comments/anti_spam.rb +50 -0
- data/spec/zen/package/comments/controller/comments.rb +121 -61
- data/spec/zen/package/comments/controller/comments_form.rb +120 -94
- data/spec/zen/package/comments/helper/comment.rb +13 -13
- data/spec/zen/package/comments/helper/comment_frontend.rb +92 -0
- data/spec/zen/package/custom_fields/blue_form_parameters.rb +50 -50
- data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +135 -43
- data/spec/zen/package/custom_fields/controller/custom_field_types.rb +153 -48
- data/spec/zen/package/custom_fields/controller/custom_fields.rb +130 -51
- data/spec/zen/package/custom_fields/helper/custom_field.rb +8 -8
- data/spec/zen/package/extensions/controller/extensions.rb +38 -0
- data/spec/zen/package/menus/controller/menu_items.rb +121 -42
- data/spec/zen/package/menus/controller/menus.rb +125 -38
- data/spec/zen/package/menus/helper/menu.rb +26 -26
- data/spec/zen/package/menus/helper/menu_frontend.rb +104 -0
- data/spec/zen/package/sections/controller/section_entries.rb +145 -89
- data/spec/zen/package/sections/controller/sections.rb +130 -35
- data/spec/zen/package/sections/helper/section.rb +27 -38
- data/spec/zen/package/sections/helper/section_frontend.rb +160 -0
- data/spec/zen/package/settings/controller/settings.rb +73 -8
- data/spec/zen/package/settings/settings.rb +119 -0
- data/spec/zen/package/users/controller/user_groups.rb +134 -34
- data/spec/zen/package/users/controller/users.rb +189 -44
- data/spec/zen/package/users/helper/access.rb +29 -0
- data/spec/zen/package/users/helper/acl.rb +46 -0
- data/spec/zen/package/users/helper/users.rb +20 -64
- data/spec/zen/theme.rb +7 -9
- data/spec/zen/validation.rb +1 -2
- data/zen.gemspec +25 -22
- metadata +303 -222
- data/lib/zen/asset.rb +0 -292
- data/lib/zen/bin/runner.rb +0 -118
- data/lib/zen/error/language_error.rb +0 -10
- data/lib/zen/error/package_error.rb +0 -10
- data/lib/zen/error/plugin_error.rb +0 -10
- data/lib/zen/error/theme_error.rb +0 -10
- data/lib/zen/error/validation_error.rb +0 -10
- data/lib/zen/helper/acl.rb +0 -182
- data/lib/zen/helper/blue_form_vendor.rb +0 -689
- data/lib/zen/language/en/zen_general.yml +0 -25
- data/lib/zen/language/en/zen_models.yml +0 -13
- data/lib/zen/language/nl/zen_general.yml +0 -25
- data/lib/zen/language/nl/zen_models.yml +0 -13
- data/lib/zen/model/settings.rb +0 -78
- data/lib/zen/package/base.rb +0 -62
- data/lib/zen/package/categories/lib/categories/language/en/categories.yml +0 -36
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +0 -34
- data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +0 -40
- data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +0 -34
- data/lib/zen/package/categories/lib/categories/plugin/categories.rb +0 -141
- data/lib/zen/package/comments/lib/comments/language/en/comments.yml +0 -48
- data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +0 -50
- data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +0 -156
- data/lib/zen/package/comments/lib/comments/plugin/comments.rb +0 -115
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +0 -33
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +0 -40
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +0 -54
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +0 -33
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +0 -40
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +0 -54
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +0 -41
- data/lib/zen/package/menus/lib/menus/language/en/menus.yml +0 -40
- data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +0 -41
- data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +0 -40
- data/lib/zen/package/menus/lib/menus/plugin/menus.rb +0 -152
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +0 -44
- data/lib/zen/package/sections/lib/sections/language/en/sections.yml +0 -48
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +0 -44
- data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +0 -48
- data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +0 -244
- data/lib/zen/package/sections/lib/sections/plugin/sections.rb +0 -87
- data/lib/zen/package/settings/lib/settings/language/en/settings.yml +0 -36
- data/lib/zen/package/settings/lib/settings/language/nl/settings.yml +0 -37
- data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +0 -39
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +0 -133
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +0 -251
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +0 -284
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +0 -38
- data/lib/zen/package/users/lib/users/language/en/user_groups.yml +0 -32
- data/lib/zen/package/users/lib/users/language/en/users.yml +0 -57
- data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +0 -38
- data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +0 -32
- data/lib/zen/package/users/lib/users/language/nl/users.yml +0 -57
- data/lib/zen/package/users/lib/users/model/access_rule.rb +0 -42
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +0 -65
- data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +0 -49
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +0 -120
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +0 -102
- data/lib/zen/plugin.rb +0 -182
- data/lib/zen/plugin/base.rb +0 -46
- data/lib/zen/plugin/helper.rb +0 -47
- data/lib/zen/plugin/markup/lib/markup.rb +0 -14
- data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +0 -6
- data/lib/zen/plugin/markup/lib/markup/markup.rb +0 -165
- data/lib/zen/public/admin/js/zen/lib/asset.js +0 -111
- data/lib/zen/task/plugin.rake +0 -18
- data/lib/zen/theme/base.rb +0 -65
- data/proto/app/config/config.rb +0 -18
- data/spec/fixtures/zen/language/en/spec.yml +0 -10
- data/spec/fixtures/zen/language/nl/spec.yml +0 -7
- data/spec/fixtures/zen/package/settings/plugin/settings.rb +0 -20
- data/spec/zen/asset.rb +0 -97
- data/spec/zen/bin/create.rb +0 -89
- data/spec/zen/bin/runner.rb +0 -47
- data/spec/zen/helper/acl.rb +0 -149
- data/spec/zen/package/categories/plugin/categories.rb +0 -92
- data/spec/zen/package/comments/plugin/anti_spam.rb +0 -59
- data/spec/zen/package/comments/plugin/comments.rb +0 -107
- data/spec/zen/package/menus/plugin/menus.rb +0 -120
- data/spec/zen/package/sections/plugin/section_entries.rb +0 -161
- data/spec/zen/package/sections/plugin/sections.rb +0 -75
- data/spec/zen/package/settings/plugin/settings.rb +0 -33
- data/spec/zen/package/users/controller/access_rules.rb +0 -90
- data/spec/zen/plugin.rb +0 -64
- data/spec/zen/plugin/helper.rb +0 -11
- data/spec/zen/plugin/markup.rb +0 -44
|
@@ -1,38 +1,36 @@
|
|
|
1
|
-
<
|
|
1
|
+
<section>
|
|
2
2
|
<header>
|
|
3
3
|
<h1>#{get_breadcrumbs}</h1>
|
|
4
4
|
</header>
|
|
5
|
-
|
|
6
|
-
#{
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
:
|
|
10
|
-
:action => Categories::Controller::CategoryGroups.r(:save),
|
|
5
|
+
|
|
6
|
+
#{form_for(
|
|
7
|
+
@category_group,
|
|
8
|
+
:method => :post,
|
|
9
|
+
:action => Categories::Controller::CategoryGroups.r(:save),
|
|
11
10
|
:id => :category_group_form
|
|
12
11
|
) do |f|
|
|
13
12
|
f.input_hidden(:id , @category_group.id)
|
|
14
13
|
f.input_hidden(:csrf_token, get_csrf_token)
|
|
15
|
-
|
|
14
|
+
|
|
16
15
|
f.input_text(
|
|
17
|
-
lang('category_groups.labels.name'),
|
|
18
|
-
:name,
|
|
19
|
-
:
|
|
20
|
-
:required
|
|
21
|
-
:maxlength
|
|
16
|
+
lang('category_groups.labels.name'),
|
|
17
|
+
:name,
|
|
18
|
+
:title => lang('category_groups.descriptions.name'),
|
|
19
|
+
:required => :required,
|
|
20
|
+
:maxlength => 255
|
|
22
21
|
)
|
|
23
22
|
|
|
24
23
|
f.textarea(
|
|
25
|
-
lang('category_groups.labels.description'),
|
|
26
|
-
:description,
|
|
24
|
+
lang('category_groups.labels.description'),
|
|
25
|
+
:description,
|
|
27
26
|
:rows => 8
|
|
28
27
|
)
|
|
29
|
-
|
|
28
|
+
|
|
30
29
|
f.g.div(:class => 'button') do
|
|
31
30
|
f.g.input(
|
|
32
|
-
:type => 'submit',
|
|
31
|
+
:type => 'submit',
|
|
33
32
|
:value => lang('category_groups.buttons.save')
|
|
34
33
|
)
|
|
35
34
|
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
</article>
|
|
35
|
+
end}
|
|
36
|
+
</section>
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
<
|
|
1
|
+
<section>
|
|
2
|
+
#{render_search_form(::Categories::Controller::CategoryGroups.r(:index))}
|
|
3
|
+
|
|
2
4
|
<header>
|
|
3
5
|
<h1>#{get_breadcrumbs}</h1>
|
|
4
6
|
</header>
|
|
@@ -8,10 +10,11 @@
|
|
|
8
10
|
<input type="hidden" name="csrf_token" value="#{get_csrf_token}" />
|
|
9
11
|
|
|
10
12
|
<?r if !@category_groups.empty? ?>
|
|
13
|
+
|
|
11
14
|
<table>
|
|
12
15
|
<thead>
|
|
13
16
|
<tr>
|
|
14
|
-
<?r if user_authorized?(
|
|
17
|
+
<?r if user_authorized?(:delete_category_group) ?>
|
|
15
18
|
<th class="no_sort">
|
|
16
19
|
<input type="checkbox" />
|
|
17
20
|
</th>
|
|
@@ -20,9 +23,7 @@
|
|
|
20
23
|
<th>#{lang('category_groups.labels.id')}</th>
|
|
21
24
|
<th>#{lang('category_groups.labels.name')}</th>
|
|
22
25
|
|
|
23
|
-
<?r if user_authorized?(
|
|
24
|
-
[:read], true, 'Categories::Controller::Categories'
|
|
25
|
-
) ?>
|
|
26
|
+
<?r if user_authorized?(:show_category) ?>
|
|
26
27
|
<th></th>
|
|
27
28
|
<?r end ?>
|
|
28
29
|
</tr>
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
<tbody>
|
|
31
32
|
<?r @category_groups.each do |group| ?>
|
|
32
33
|
<tr>
|
|
33
|
-
<?r if user_authorized?(
|
|
34
|
+
<?r if user_authorized?(:delete_category_group) ?>
|
|
34
35
|
<td>
|
|
35
36
|
<input type="checkbox" name="category_group_ids[]"
|
|
36
37
|
value="#{group.id}" />
|
|
@@ -39,19 +40,21 @@
|
|
|
39
40
|
|
|
40
41
|
<td>#{group.id}</td>
|
|
41
42
|
|
|
42
|
-
<?r if user_authorized?(
|
|
43
|
+
<?r if user_authorized?(:edit_category_group) ?>
|
|
44
|
+
|
|
43
45
|
<td>
|
|
44
46
|
#{Categories::Controller::CategoryGroups.a(
|
|
45
47
|
group.name, :edit, group.id
|
|
46
48
|
)}
|
|
47
49
|
</td>
|
|
50
|
+
|
|
48
51
|
<?r else ?>
|
|
52
|
+
|
|
49
53
|
<td>#{group.name}</td>
|
|
54
|
+
|
|
50
55
|
<?r end ?>
|
|
51
56
|
|
|
52
|
-
<?r if user_authorized?(
|
|
53
|
-
[:read], true, 'Categories::Controller::Categories'
|
|
54
|
-
) ?>
|
|
57
|
+
<?r if user_authorized?(:show_category) ?>
|
|
55
58
|
<td>
|
|
56
59
|
#{Categories::Controller::Categories.a(
|
|
57
60
|
lang('category_groups.labels.manage'),
|
|
@@ -60,24 +63,23 @@
|
|
|
60
63
|
)}
|
|
61
64
|
</td>
|
|
62
65
|
<?r end ?>
|
|
63
|
-
|
|
64
66
|
</tr>
|
|
65
67
|
<?r end ?>
|
|
66
68
|
</tbody>
|
|
67
69
|
</table>
|
|
68
70
|
|
|
69
|
-
#{
|
|
70
|
-
if @category_groups.respond_to?(:navigation) \
|
|
71
|
+
#{if @category_groups.respond_to?(:navigation) \
|
|
71
72
|
and @category_groups.page_count > 1
|
|
72
73
|
@category_groups.navigation
|
|
73
|
-
end
|
|
74
|
-
}
|
|
74
|
+
end}
|
|
75
75
|
|
|
76
76
|
<?r else ?>
|
|
77
|
+
|
|
77
78
|
<p>#{lang('category_groups.messages.no_groups')}</p>
|
|
79
|
+
|
|
78
80
|
<?r end ?>
|
|
79
81
|
|
|
80
|
-
<?r if user_authorized?(
|
|
82
|
+
<?r if user_authorized?(:new_category_group) ?>
|
|
81
83
|
<div class="button">
|
|
82
84
|
#{Categories::Controller::CategoryGroups.a(
|
|
83
85
|
lang('category_groups.buttons.new'), :new
|
|
@@ -85,11 +87,12 @@
|
|
|
85
87
|
</div>
|
|
86
88
|
<?r end ?>
|
|
87
89
|
|
|
88
|
-
<?r if user_authorized?(
|
|
90
|
+
<?r if user_authorized?(:delete_category_group) \
|
|
91
|
+
and !@category_groups.empty? ?>
|
|
89
92
|
<div class="button">
|
|
90
93
|
<input type="submit"
|
|
91
94
|
value="#{lang('category_groups.buttons.delete')}" />
|
|
92
95
|
</div>
|
|
93
96
|
<?r end ?>
|
|
94
97
|
</form>
|
|
95
|
-
</
|
|
98
|
+
</section>
|
|
@@ -1,66 +1,46 @@
|
|
|
1
|
-
|
|
1
|
+
Zen::Package.add do |p|
|
|
2
|
+
p.name = :comments
|
|
3
|
+
p.title = 'comments.titles.index'
|
|
4
|
+
p.author = 'Yorick Peterse'
|
|
5
|
+
p.url = 'http://zen-cms.com/'
|
|
6
|
+
p.about = 'comments.description'
|
|
7
|
+
p.root = __DIR__('comments')
|
|
8
|
+
p.migrations = __DIR__('../migrations')
|
|
9
|
+
|
|
10
|
+
p.menu(
|
|
11
|
+
'comments.titles.index',
|
|
12
|
+
'/admin/comments',
|
|
13
|
+
:permission => :show_comment
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
p.permission :show_comment , 'comments.permissions.show'
|
|
17
|
+
p.permission :edit_comment , 'comments.permissions.edit'
|
|
18
|
+
p.permission :delete_comment, 'comments.permissions.delete'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Zen::Language.load('comments')
|
|
2
22
|
|
|
3
23
|
require __DIR__('comments/model/comment_status')
|
|
4
24
|
require __DIR__('comments/model/comment')
|
|
5
25
|
require __DIR__('comments/controller/comments')
|
|
6
26
|
require __DIR__('comments/controller/comments_form')
|
|
7
|
-
require __DIR__('comments/
|
|
8
|
-
require __DIR__('comments/plugin/anti_spam')
|
|
9
|
-
|
|
10
|
-
Zen::Language.options.paths.push(__DIR__('comments'))
|
|
11
|
-
Zen::Language.load('comments')
|
|
12
|
-
|
|
13
|
-
Zen::Package.add do |p|
|
|
14
|
-
p.name = 'comments'
|
|
15
|
-
p.author = 'Yorick Peterse'
|
|
16
|
-
p.url = 'http://yorickpeterse.com/'
|
|
17
|
-
p.about = "Allow users to post comments on any given section entry (as long as
|
|
18
|
-
the section allows it)."
|
|
27
|
+
require __DIR__('comments/anti_spam')
|
|
19
28
|
|
|
20
|
-
|
|
21
|
-
p.migration_dir = __DIR__('../migrations')
|
|
22
|
-
|
|
23
|
-
p.menu = [{
|
|
24
|
-
:title => lang('comments.titles.index'),
|
|
25
|
-
:url => "admin/comments"
|
|
26
|
-
}]
|
|
27
|
-
|
|
28
|
-
p.controllers = {
|
|
29
|
-
lang('comments.titles.index') => Comments::Controller::Comments
|
|
30
|
-
}
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
Zen::Plugin.add do |p|
|
|
34
|
-
p.name = 'comments'
|
|
35
|
-
p.author = 'Yorick Peterse'
|
|
36
|
-
p.url = 'http://yorickpeterse.com/'
|
|
37
|
-
p.about = 'Plugin that can be used to retrieve comments.'
|
|
38
|
-
p.plugin = Comments::Plugin::Comments
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
Zen::Plugin.add do |p|
|
|
42
|
-
p.name = 'anti_spam'
|
|
43
|
-
p.author = 'Yorick Peterse'
|
|
44
|
-
p.url = 'http://yorickpeterse.com/'
|
|
45
|
-
p.about = 'Plugin used for checking if a comment is spam or ham.'
|
|
46
|
-
p.plugin = Comments::Plugin::AntiSpam
|
|
47
|
-
end
|
|
29
|
+
Zen::Controller::FrontendController.helper(:comment_frontend)
|
|
48
30
|
|
|
49
|
-
|
|
50
|
-
setting.title =
|
|
51
|
-
setting.description =
|
|
31
|
+
Settings::Setting.add do |setting|
|
|
32
|
+
setting.title = 'comments.labels.anti_spam_system'
|
|
33
|
+
setting.description = 'comments.descriptions.anti_spam_system'
|
|
52
34
|
setting.name = 'anti_spam_system'
|
|
53
35
|
setting.group = 'security'
|
|
54
36
|
setting.type = 'select'
|
|
55
37
|
setting.default = 'defensio'
|
|
56
|
-
setting.values = {
|
|
57
|
-
'defensio' => lang('comments.labels.defensio')
|
|
58
|
-
}
|
|
38
|
+
setting.values = lambda { Comments::AntiSpam::REGISTERED }
|
|
59
39
|
end
|
|
60
40
|
|
|
61
|
-
|
|
62
|
-
setting.title =
|
|
63
|
-
setting.description =
|
|
41
|
+
Settings::Setting.add do |setting|
|
|
42
|
+
setting.title = 'comments.labels.defensio_key'
|
|
43
|
+
setting.description = 'comments.descriptions.defensio_key'
|
|
64
44
|
setting.name = 'defensio_key'
|
|
65
45
|
setting.group = 'security'
|
|
66
46
|
setting.type = 'textbox'
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
module Comments
|
|
2
|
+
##
|
|
3
|
+
# {Comments::AntiSpam} is a module that can be used to verify if a comment is
|
|
4
|
+
# spam or ham. In order to validate a comment you'll have to call
|
|
5
|
+
# {Comments::AntiSpam.validate} and pass a set of parameters to it (see the
|
|
6
|
+
# documentation of {Comments::AntiSpam.validate} for more information). An
|
|
7
|
+
# example of validating a comment using Defensio looks like the following:
|
|
8
|
+
#
|
|
9
|
+
# spam = Comments::AntiSpam.validate(
|
|
10
|
+
# :defensio,
|
|
11
|
+
# nil,
|
|
12
|
+
# nil,
|
|
13
|
+
# nil,
|
|
14
|
+
# 'This is a comment that has to be validated'
|
|
15
|
+
# )
|
|
16
|
+
#
|
|
17
|
+
# ## Supported Systems
|
|
18
|
+
#
|
|
19
|
+
# By default only Defensio is supported.
|
|
20
|
+
#
|
|
21
|
+
# ## Adding Systems
|
|
22
|
+
#
|
|
23
|
+
# Adding a new anti spam system is done in two steps. First you must add the
|
|
24
|
+
# name of the method to {Comments::AntiSpam::REGISTERED} (the method should be
|
|
25
|
+
# a symbol). This constant is a hash of which the keys are the method names of
|
|
26
|
+
# the engines to invoke and the values the labels to display in the admin
|
|
27
|
+
# panel. Without this the {Comments::AntiSpam.validate} method will raise an
|
|
28
|
+
# error. This check is put in place to ensure that the user can't potentially
|
|
29
|
+
# exploit the system.
|
|
30
|
+
#
|
|
31
|
+
# Once the method has been added to the list you must actually implement it as
|
|
32
|
+
# a class method. The syntax of such a method looks like the following:
|
|
33
|
+
#
|
|
34
|
+
# def self.method_name(author, email, url, comment)
|
|
35
|
+
#
|
|
36
|
+
# end
|
|
37
|
+
#
|
|
38
|
+
# The return value should be a boolean that indicates whether or not the
|
|
39
|
+
# comment is spam. A return value of ``true`` indicates that the comment is
|
|
40
|
+
# spam, anything that evaluates to ``false`` indicates that the comment is
|
|
41
|
+
# valid.
|
|
42
|
+
#
|
|
43
|
+
# In order to add your method you simply add it like you normally would with
|
|
44
|
+
# any other class:
|
|
45
|
+
#
|
|
46
|
+
# module Comments
|
|
47
|
+
# module AntiSpam
|
|
48
|
+
# private
|
|
49
|
+
#
|
|
50
|
+
# def self.custom_method(author, email, url, comment)
|
|
51
|
+
#
|
|
52
|
+
# end
|
|
53
|
+
# end
|
|
54
|
+
# end
|
|
55
|
+
#
|
|
56
|
+
#
|
|
57
|
+
# @since 0.3
|
|
58
|
+
#
|
|
59
|
+
module AntiSpam
|
|
60
|
+
# Array containing the method names of the various supported engines and
|
|
61
|
+
# their labels to display in the admin interface.
|
|
62
|
+
REGISTERED = {
|
|
63
|
+
:defensio => lang('comments.labels.defensio')
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
class << self
|
|
67
|
+
##
|
|
68
|
+
# Validates a comment to see if it's spam or ham using a given engine.
|
|
69
|
+
# Defensio only validates the comment itself.
|
|
70
|
+
#
|
|
71
|
+
# @example
|
|
72
|
+
# Comments::AntiSpam.validate(
|
|
73
|
+
# :defensio,
|
|
74
|
+
# 'Chuch Norris',
|
|
75
|
+
# 'chuck@chucknorris.com',
|
|
76
|
+
# 'http://chucknorris.com/',
|
|
77
|
+
# '.....'
|
|
78
|
+
# )
|
|
79
|
+
#
|
|
80
|
+
# @since 0.3
|
|
81
|
+
# @param [#to_sym] engine The name of the anti spam engine to use.
|
|
82
|
+
# @param [String] author The name of the author of the comment.
|
|
83
|
+
# @param [String] email The Email address of the author.
|
|
84
|
+
# @param [String] url The URL that points to the user's website
|
|
85
|
+
# (optional).
|
|
86
|
+
# @param [String] comment The comment to validate.
|
|
87
|
+
# @return [TrueClass|FalseClass]
|
|
88
|
+
#
|
|
89
|
+
def validate(engine, author, email, url, comment)
|
|
90
|
+
engine = engine.to_sym
|
|
91
|
+
|
|
92
|
+
unless REGISTERED.key?(engine)
|
|
93
|
+
raise(ArgumentError, "The engine \"#{engine}\" is invalid")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
return send(engine, author, email, url, comment)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
##
|
|
100
|
+
# Validates a comment using Defensio.
|
|
101
|
+
#
|
|
102
|
+
# @since 0.3
|
|
103
|
+
# @see Comments::AntiSpam.validate
|
|
104
|
+
#
|
|
105
|
+
def defensio(author, email, url, comment)
|
|
106
|
+
if !Kernel.const_defined?(:Defensio)
|
|
107
|
+
Ramaze.setup(:verbose => false) do
|
|
108
|
+
gem 'defensio'
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
spam = true
|
|
113
|
+
api_key = get_setting(:defensio_key).value
|
|
114
|
+
|
|
115
|
+
if api_key.nil? or api_key.empty?
|
|
116
|
+
raise('You need to specify an API key for the defensio system')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
client = Defensio.new(api_key)
|
|
120
|
+
status, response = client.post_document(
|
|
121
|
+
:content => comment,
|
|
122
|
+
:platform => 'zen',
|
|
123
|
+
:type => 'comment'
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
return spam if status != 200
|
|
127
|
+
|
|
128
|
+
if response['allow'] == true and response['spaminess'] <= 0.85
|
|
129
|
+
spam = false
|
|
130
|
+
else
|
|
131
|
+
spam = true
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
return spam
|
|
135
|
+
end
|
|
136
|
+
end # class << self
|
|
137
|
+
end # AntiSpam
|
|
138
|
+
end # Comments
|
|
@@ -1,114 +1,176 @@
|
|
|
1
|
-
|
|
1
|
+
##
|
|
2
|
+
# Package that allows users to manage and submit comments.
|
|
3
|
+
#
|
|
4
|
+
# ## Controllers
|
|
5
|
+
#
|
|
6
|
+
# * {Comments::Controller::Comments}
|
|
7
|
+
# * {Comments::Controller::CommentsForm}
|
|
8
|
+
#
|
|
9
|
+
# ## Helpers
|
|
10
|
+
#
|
|
11
|
+
# * {Ramaze::Helper::Comment}
|
|
12
|
+
# * {Ramaze::Helper::CommentFrontend}
|
|
13
|
+
#
|
|
14
|
+
# ## Models
|
|
15
|
+
#
|
|
16
|
+
# * {Comments::Model::Comment}
|
|
17
|
+
# * {Comments::Model::CommentStatus}
|
|
18
|
+
#
|
|
19
|
+
# ## Generic Modules & Classes
|
|
20
|
+
#
|
|
21
|
+
# * {Comments::AntiSpam}
|
|
22
|
+
#
|
|
23
|
+
# @since 0.1
|
|
24
|
+
#
|
|
2
25
|
module Comments
|
|
3
26
|
#:nodoc:
|
|
4
27
|
module Controller
|
|
5
28
|
##
|
|
6
|
-
# Controller
|
|
7
|
-
# add
|
|
8
|
-
# Comments can be submitted to any section entry as long as the section
|
|
9
|
-
# allows it. When submitting a comment the user data such as the name and
|
|
10
|
-
# email will be retrieved from either the users table (if the user is logged
|
|
11
|
-
# in) or from the form that was submitted.
|
|
29
|
+
# Controller for managing existing comments. When logged in a user can not
|
|
30
|
+
# add a comment, for that they'd have to use the frontend.
|
|
12
31
|
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
32
|
+
# Depending on the settings of a section the comments belong to (via a
|
|
33
|
+
# section entry) users may have to meet certain requirements in order to be
|
|
34
|
+
# able to post a comment. For example, a section might require users to be
|
|
35
|
+
# logged in in order to post comments. If this is the case and the user
|
|
36
|
+
# tries to submit a comment a message will be displayed and the HTTP status
|
|
37
|
+
# code is changed to 403. See {Comments::Controller::CommentsForm} for more
|
|
38
|
+
# information.
|
|
39
|
+
#
|
|
40
|
+
# In order to manage existing comments you'll have to navigate to
|
|
41
|
+
# ``/admin/comments``. This page will show an overview of all existing
|
|
42
|
+
# comments (or a message if no comments were found).
|
|
43
|
+
#
|
|
44
|
+
# 
|
|
45
|
+
#
|
|
46
|
+
# Comments can be edited by clicking on their name. Deleting comments can be
|
|
47
|
+
# done by checking the checkboxes in each row followed by clicking the
|
|
48
|
+
# "Delete selected comments" button.
|
|
49
|
+
#
|
|
50
|
+
# ## Editing Comments
|
|
51
|
+
#
|
|
52
|
+
# 
|
|
53
|
+
#
|
|
54
|
+
# When editing a comment you can specify/update the following fields:
|
|
55
|
+
#
|
|
56
|
+
# * **Name**: the name of the author. This field can only be changed if the
|
|
57
|
+
# comment was posted by somebody that wasn't logged in.
|
|
58
|
+
# * **Website**: the website of the author that posted the comment.
|
|
59
|
+
# * **Email**: the Email address of the author. If the comment was posted by
|
|
60
|
+
# a user that wasn't logged in then this field is required.
|
|
61
|
+
# * **Status**: the status of a comment, can be "Open", "Closed" or "Spam".
|
|
62
|
+
# If the status is something other than "Open" it will be hidden when the
|
|
63
|
+
# comments plugin is used.
|
|
64
|
+
# * **Comment** (required): the actual comment. Based on a section's
|
|
65
|
+
# settings these are formatted using Markdown, Textile or any of the other
|
|
66
|
+
# available markup processors.
|
|
67
|
+
#
|
|
68
|
+
# Note that if a comment was posted by a user that was logged in you won't
|
|
69
|
+
# be able to change the name of the author.
|
|
70
|
+
#
|
|
71
|
+
# ## Used Permissions
|
|
72
|
+
#
|
|
73
|
+
# This controller uses the following permissions:
|
|
74
|
+
#
|
|
75
|
+
# * show_comment
|
|
76
|
+
# * edit_comment
|
|
77
|
+
# * new_comment
|
|
78
|
+
# * delete_comment
|
|
79
|
+
#
|
|
80
|
+
# ## Events
|
|
81
|
+
#
|
|
82
|
+
# All events called in this controller receive an instance of
|
|
83
|
+
# {Comments::Model::Comment}. However, just like all other controllers the
|
|
84
|
+
# ``delete_comment`` receives an instance of this model that has already
|
|
85
|
+
# been destroyed.
|
|
86
|
+
#
|
|
87
|
+
# An example of using one of these events is to notify a user when his
|
|
88
|
+
# comment has been marked as spam:
|
|
89
|
+
#
|
|
90
|
+
# require 'mail'
|
|
91
|
+
#
|
|
92
|
+
# Zen::Event.call(:after_edit_comment) do |comment|
|
|
93
|
+
# email = comment.user.email
|
|
94
|
+
# spam = Comments::Model::CommentStatus[:name => 'spam']
|
|
95
|
+
#
|
|
96
|
+
# if comment.comment_status_id == spam.id
|
|
97
|
+
# Mail.deliver do
|
|
98
|
+
# from 'example@domain.tld'
|
|
99
|
+
# to email
|
|
100
|
+
# subject 'Your comment has been marked as spam'
|
|
101
|
+
# body "Dear #{comment.user.name}, your comment has been " \
|
|
102
|
+
# "marked as spam"
|
|
103
|
+
# end
|
|
104
|
+
# end
|
|
105
|
+
# end
|
|
106
|
+
#
|
|
107
|
+
# @since 0.1
|
|
108
|
+
# @map /admin/comments
|
|
109
|
+
# @event before_edit_comment
|
|
110
|
+
# @event after_edit_comment
|
|
111
|
+
# @event beore_delete_comment
|
|
112
|
+
# @event after_delete_comment
|
|
15
113
|
#
|
|
16
114
|
class Comments < Zen::Controller::AdminController
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
map '/admin/comments'
|
|
115
|
+
map '/admin/comments'
|
|
20
116
|
helper :comment
|
|
117
|
+
title 'comments.titles.%s'
|
|
21
118
|
|
|
22
|
-
|
|
23
|
-
csrf_protection(:save, :delete) do
|
|
24
|
-
respond(lang('zen_general.errors.csrf'), 403)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
119
|
+
csrf_protection :save, :delete
|
|
27
120
|
|
|
28
121
|
##
|
|
29
|
-
#
|
|
30
|
-
#
|
|
122
|
+
# Shows an overview of all existing comments and allows the user to edit
|
|
123
|
+
# or remove these comments.
|
|
31
124
|
#
|
|
32
|
-
#
|
|
125
|
+
# @since 0.1
|
|
126
|
+
# @permission show_comment
|
|
33
127
|
#
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
def initialize
|
|
38
|
-
super
|
|
128
|
+
def index
|
|
129
|
+
authorize_user!(:show_comment)
|
|
39
130
|
|
|
40
|
-
|
|
131
|
+
set_breadcrumbs(lang('comments.titles.index'))
|
|
41
132
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
method = action.method.to_s
|
|
45
|
-
@page_title = lang("comments.titles.#{method}") rescue nil
|
|
133
|
+
@comments = search do |query|
|
|
134
|
+
::Comments::Model::Comment.search(query).order(:comments__id.asc)
|
|
46
135
|
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
##
|
|
50
|
-
# Shows an overview of all posted comments along with their status,
|
|
51
|
-
# author and so on.
|
|
52
|
-
#
|
|
53
|
-
# This method requires the following permissions:
|
|
54
|
-
#
|
|
55
|
-
# * read
|
|
56
|
-
#
|
|
57
|
-
# @author Yorick Peterse
|
|
58
|
-
# @since 0.1
|
|
59
|
-
#
|
|
60
|
-
def index
|
|
61
|
-
require_permissions(:read)
|
|
62
136
|
|
|
63
|
-
|
|
137
|
+
@comments ||= ::Comments::Model::Comment \
|
|
138
|
+
.eager(:comment_status, :user) \
|
|
139
|
+
.order(:id.asc)
|
|
64
140
|
|
|
65
|
-
@comments = paginate(
|
|
141
|
+
@comments = paginate(@comments)
|
|
66
142
|
end
|
|
67
143
|
|
|
68
144
|
##
|
|
69
|
-
#
|
|
145
|
+
# Allows a user to edit an existing comment.
|
|
70
146
|
#
|
|
71
|
-
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
# * update
|
|
75
|
-
#
|
|
76
|
-
# @author Yorick Peterse
|
|
77
|
-
# @param [Integer] id The ID of the comment to retrieve so that we can
|
|
78
|
-
# edit it.
|
|
79
|
-
# @since 0.1
|
|
147
|
+
# @param [Fixnum] id The ID of the comment to edit.
|
|
148
|
+
# @since 0.1
|
|
149
|
+
# @permission edit_comment
|
|
80
150
|
#
|
|
81
151
|
def edit(id)
|
|
82
|
-
|
|
152
|
+
authorize_user!(:edit_comment)
|
|
83
153
|
|
|
84
154
|
set_breadcrumbs(
|
|
85
155
|
Comments.a(lang('comments.titles.index'), :index),
|
|
86
156
|
@page_title
|
|
87
157
|
)
|
|
88
158
|
|
|
89
|
-
|
|
90
|
-
@comment = flash[:form_data]
|
|
91
|
-
else
|
|
92
|
-
@comment = validate_comment(id)
|
|
93
|
-
end
|
|
159
|
+
@comment = flash[:form_data] || validate_comment(id)
|
|
94
160
|
|
|
95
161
|
render_view(:form)
|
|
96
162
|
end
|
|
97
163
|
|
|
98
164
|
##
|
|
99
|
-
# Saves
|
|
100
|
-
# method won't create a new comment as this can't be done using the
|
|
101
|
-
# backend.
|
|
165
|
+
# Saves the changes made to an existing comment.
|
|
102
166
|
#
|
|
103
|
-
#
|
|
104
|
-
#
|
|
105
|
-
#
|
|
106
|
-
#
|
|
107
|
-
# @author Yorick Peterse
|
|
108
|
-
# @since 0.1
|
|
167
|
+
# @since 0.1
|
|
168
|
+
# @permission edit_comment
|
|
169
|
+
# @event before_edit_comment
|
|
170
|
+
# @event after_edit_comment
|
|
109
171
|
#
|
|
110
172
|
def save
|
|
111
|
-
|
|
173
|
+
authorize_user!(:edit_comment)
|
|
112
174
|
|
|
113
175
|
# Copy the POST data so we can work with it without messing things up
|
|
114
176
|
post = request.subset(
|
|
@@ -127,8 +189,10 @@ module Comments
|
|
|
127
189
|
post.delete('id')
|
|
128
190
|
|
|
129
191
|
begin
|
|
130
|
-
comment.
|
|
131
|
-
|
|
192
|
+
post.each { |k, v| comment.send("#{k}=", v) }
|
|
193
|
+
Zen::Event.call(:before_edit_comment, comment)
|
|
194
|
+
|
|
195
|
+
comment.save
|
|
132
196
|
rescue => e
|
|
133
197
|
Ramaze::Log.error(e.inspect)
|
|
134
198
|
message(:error, lang('comments.errors.save'))
|
|
@@ -139,27 +203,23 @@ module Comments
|
|
|
139
203
|
redirect_referrer
|
|
140
204
|
end
|
|
141
205
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
redirect_referrer
|
|
147
|
-
end
|
|
206
|
+
Zen::Event.call(:after_edit_comment, comment)
|
|
207
|
+
|
|
208
|
+
message(:success, lang('comments.success.save'))
|
|
209
|
+
redirect(Comments.r(:edit, comment.id))
|
|
148
210
|
end
|
|
149
211
|
|
|
150
212
|
##
|
|
151
|
-
# Deletes a number of comments
|
|
152
|
-
# in the
|
|
213
|
+
# Deletes a number of comments. The IDs of these comments should be
|
|
214
|
+
# specified in the POSt array "comment_ids".
|
|
153
215
|
#
|
|
154
|
-
#
|
|
155
|
-
#
|
|
156
|
-
#
|
|
157
|
-
#
|
|
158
|
-
# @author Yorick Peterse
|
|
159
|
-
# @since 0.1
|
|
216
|
+
# @since 0.1
|
|
217
|
+
# @permission delete_comment
|
|
218
|
+
# @event before_delete_comment
|
|
219
|
+
# @event after_delete_comment
|
|
160
220
|
#
|
|
161
221
|
def delete
|
|
162
|
-
|
|
222
|
+
authorize_user!(:delete_comment)
|
|
163
223
|
|
|
164
224
|
# Obviously we'll require some IDs
|
|
165
225
|
if !request.params['comment_ids'] \
|
|
@@ -170,17 +230,24 @@ module Comments
|
|
|
170
230
|
|
|
171
231
|
# Delete each section
|
|
172
232
|
request.params['comment_ids'].each do |id|
|
|
233
|
+
comment = ::Comments::Model::Comment[id]
|
|
234
|
+
|
|
235
|
+
next if comment.nil?
|
|
236
|
+
Zen::Event.call(:before_delete_comment, comment)
|
|
237
|
+
|
|
173
238
|
begin
|
|
174
|
-
|
|
175
|
-
message(:success, lang('comments.success.delete'))
|
|
239
|
+
comment.destroy
|
|
176
240
|
rescue => e
|
|
177
241
|
Ramaze::Log.error(e.inspect)
|
|
178
242
|
message(:error, lang('comments.errors.delete') % id)
|
|
179
243
|
|
|
180
244
|
redirect_referrer
|
|
181
245
|
end
|
|
246
|
+
|
|
247
|
+
Zen::Event.call(:after_delete_comment, comment)
|
|
182
248
|
end
|
|
183
249
|
|
|
250
|
+
message(:success, lang('comments.success.delete'))
|
|
184
251
|
redirect_referrer
|
|
185
252
|
end
|
|
186
253
|
end # Comments
|