zen 0.2.8 → 0.3b
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
# ![Comments](../../_static/comments/comments.png)
|
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
|
+
# ![Edit Comment](../../_static/comments/edit_comment.png)
|
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
|