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,43 +1,88 @@
|
|
|
1
|
-
#:nodoc:
|
|
2
1
|
module CustomFields
|
|
3
2
|
#:nodoc:
|
|
4
3
|
module Controller
|
|
5
4
|
##
|
|
6
|
-
#
|
|
5
|
+
# Custom field types allow you to create your own types of fields. Being
|
|
6
|
+
# able to create your own field types without having to write any code can
|
|
7
|
+
# be very useful. For example, say you want to be able to create a textarea
|
|
8
|
+
# with a special class (maybe you can to use CKEditor), all you'd have to do
|
|
9
|
+
# is create a new field type, add the class and you're good to go.
|
|
10
|
+
#
|
|
11
|
+
# In order to manage field types you'll have to navigate to
|
|
12
|
+
# ``/admin/custom-field-types``. This can be done by either manually
|
|
13
|
+
# entering the URL into your browser's URL bar or by hovering over the
|
|
14
|
+
# "Custom fields" menu item, this will cause the menu to expand and show a
|
|
15
|
+
# URL called "Custom field types". Clicking this URL will take you to an
|
|
16
|
+
# overview of all existing field types.
|
|
17
|
+
#
|
|
18
|
+
# 
|
|
19
|
+
#
|
|
20
|
+
# ## Adding/Editing Field Types
|
|
21
|
+
#
|
|
22
|
+
# Editing a field type can be done by clicking on the name of the field
|
|
23
|
+
# type, creating a new one can be done by clicking the "Add field type"
|
|
24
|
+
# button. In both cases you'll end up at a form that looks like the image
|
|
25
|
+
# below.
|
|
26
|
+
#
|
|
27
|
+
# 
|
|
28
|
+
#
|
|
29
|
+
# In this form you can specify the following fields:
|
|
30
|
+
#
|
|
31
|
+
# * **Name** (required): the name of the custom field type. This name can be
|
|
32
|
+
# anything you like.
|
|
33
|
+
# * **Language string** (required): a valid language string that will result
|
|
34
|
+
# in a language specific block of text. This text will be used for the
|
|
35
|
+
# label.
|
|
36
|
+
# * **HTML Class**: a space separated list of HTML classes to apply to the
|
|
37
|
+
# field type. The format of this value has to match the regular expression
|
|
38
|
+
# ``/^[a-zA-Z\-_0-9\s]*$/``.
|
|
39
|
+
# * **Serialize**: whether or not the value of a field using this type
|
|
40
|
+
# should be serialized. Set this to "Yes" if a field takes multiple values
|
|
41
|
+
# such as a checkbox or a select element with the attribute
|
|
42
|
+
# ``multiple="multiple"``.
|
|
43
|
+
# * **Allow markup**: whether or not users can use markup, such as Markdown
|
|
44
|
+
# in a field using this type.
|
|
45
|
+
# * **Custom field method** (required): the name of a method in
|
|
46
|
+
# {CustomFields::BlueFormParameters}. This method will be used to generate
|
|
47
|
+
# all the parameters for the BlueForm helper.
|
|
48
|
+
#
|
|
49
|
+
# Note that the name, language string and HTML class can not be longer than
|
|
50
|
+
# 255 characters.
|
|
51
|
+
#
|
|
52
|
+
# ## Used Permissions
|
|
53
|
+
#
|
|
54
|
+
# * show_custom_field_type
|
|
55
|
+
# * edit_custom_field_type
|
|
56
|
+
# * new_custom_field_type
|
|
57
|
+
# * delete_custom_field_type
|
|
58
|
+
#
|
|
59
|
+
# ## Events
|
|
60
|
+
#
|
|
61
|
+
# All events in this controller will receive an instance of
|
|
62
|
+
# {CustomFields::Model::CustomFieldType}. Just like other packages the event
|
|
63
|
+
# ``after_delete_custom_field_type`` receives an instance that has already
|
|
64
|
+
# been destroyed. This means that this event can not be used to make changes
|
|
65
|
+
# to the object and save them.
|
|
7
66
|
#
|
|
8
|
-
# @author Yorick Peterse
|
|
9
67
|
# @since 0.2.8
|
|
68
|
+
# @map /admin/custom-field-types
|
|
69
|
+
# @event before_new_custom_field_type
|
|
70
|
+
# @event after_new_custom_field_type
|
|
71
|
+
# @event before_edit_custom_field_type
|
|
72
|
+
# @event after_edit_custom_field_type
|
|
73
|
+
# @event before_delete_custom_field_type
|
|
74
|
+
# @event after_delete_custom_field_type
|
|
10
75
|
#
|
|
11
76
|
class CustomFieldTypes < Zen::Controller::AdminController
|
|
12
|
-
include ::CustomFields::Model
|
|
13
|
-
|
|
14
77
|
map '/admin/custom-field-types'
|
|
15
78
|
helper :custom_field
|
|
79
|
+
title 'custom_field_types.titles.%s'
|
|
16
80
|
|
|
17
|
-
|
|
18
|
-
csrf_protection(:save, :delete) do
|
|
19
|
-
respond(lang('zen_general.errors.csrf'), 403)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
##
|
|
24
|
-
# Creates a new instance of the controller, loads all the required
|
|
25
|
-
# language files and sets the page title.
|
|
26
|
-
#
|
|
27
|
-
# @author Yorick Peterse
|
|
28
|
-
# @since 0.2.8
|
|
29
|
-
#
|
|
30
|
-
def initialize
|
|
31
|
-
super
|
|
32
|
-
|
|
33
|
-
Zen::Language.load('custom_field_types')
|
|
34
|
-
|
|
35
|
-
if !action.method.nil?
|
|
36
|
-
@page_title = lang(
|
|
37
|
-
"custom_field_types.titles.#{action.method}"
|
|
38
|
-
) rescue nil
|
|
39
|
-
end
|
|
81
|
+
csrf_protection :save, :delete
|
|
40
82
|
|
|
83
|
+
# Blck that's executed before CustomFieldTypes#edit() and
|
|
84
|
+
# CustomFieldTypes#new().
|
|
85
|
+
before(:index, :edit, :new) do
|
|
41
86
|
@boolean_hash = {
|
|
42
87
|
true => lang('zen_general.special.boolean_hash.true'),
|
|
43
88
|
false => lang('zen_general.special.boolean_hash.false')
|
|
@@ -49,86 +94,86 @@ module CustomFields
|
|
|
49
94
|
# user to create new ones, edit existing ones or delete a group of field
|
|
50
95
|
# types.
|
|
51
96
|
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
# @author Yorick Peterse
|
|
56
|
-
# @since 0.2.8
|
|
97
|
+
# @since 0.2.8
|
|
98
|
+
# @permission show_custom_field_type
|
|
57
99
|
#
|
|
58
100
|
def index
|
|
59
|
-
|
|
101
|
+
authorize_user!(:show_custom_field_type)
|
|
60
102
|
|
|
61
103
|
set_breadcrumbs(lang('custom_field_types.titles.index'))
|
|
62
104
|
|
|
63
|
-
@field_types =
|
|
105
|
+
@field_types = search do |query|
|
|
106
|
+
::CustomFields::Model::CustomFieldType.search(query).order(:id.asc)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
@field_types ||= ::CustomFields::Model::CustomFieldType \
|
|
110
|
+
.eager(:custom_field_method) \
|
|
111
|
+
.order(:id.asc)
|
|
112
|
+
|
|
113
|
+
@field_types = paginate(@field_types)
|
|
64
114
|
end
|
|
65
115
|
|
|
66
116
|
##
|
|
67
117
|
# Allows a user to edit an existing custom field type.
|
|
68
118
|
#
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
# * update
|
|
73
|
-
#
|
|
74
|
-
# @author Yorick Peterse
|
|
75
|
-
# @since 0.2.8
|
|
76
|
-
# @param [Fixnum] custom_field_type_id The ID of the custom field type to
|
|
77
|
-
# edit.
|
|
119
|
+
# @since 0.2.8
|
|
120
|
+
# @param [Fixnum] id The ID of the custom field type to edit.
|
|
121
|
+
# @permission edit_custom_field_type
|
|
78
122
|
#
|
|
79
|
-
def edit(
|
|
80
|
-
|
|
123
|
+
def edit(id)
|
|
124
|
+
authorize_user!(:edit_custom_field_type)
|
|
81
125
|
|
|
82
126
|
set_breadcrumbs(
|
|
83
127
|
CustomFieldTypes.a(lang('custom_field_types.titles.index'), :index),
|
|
84
128
|
lang('custom_field_types.titles.edit')
|
|
85
129
|
)
|
|
86
130
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
@custom_field_type = validate_custom_field_type(custom_field_type_id)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
@custom_field_methods = CustomFieldMethod.pk_hash(:name)
|
|
131
|
+
@custom_field_type = flash[:form_data] || validate_custom_field_type(id)
|
|
132
|
+
@custom_field_methods = ::CustomFields::Model::CustomFieldMethod \
|
|
133
|
+
.pk_hash(:name)
|
|
94
134
|
|
|
95
|
-
render_view
|
|
135
|
+
render_view(:form)
|
|
96
136
|
end
|
|
97
137
|
|
|
98
138
|
##
|
|
99
139
|
# Allows a user to add a new custom field type.
|
|
100
140
|
#
|
|
101
|
-
#
|
|
102
|
-
#
|
|
103
|
-
# * read
|
|
104
|
-
# * create
|
|
105
|
-
#
|
|
106
|
-
# @author Yorick Peterse
|
|
107
|
-
# @since 0.2.8
|
|
141
|
+
# @since 0.2.8
|
|
142
|
+
# @permission new_custom_field_type
|
|
108
143
|
#
|
|
109
144
|
def new
|
|
110
|
-
|
|
145
|
+
authorize_user!(:new_custom_field_type)
|
|
111
146
|
|
|
112
147
|
set_breadcrumbs(
|
|
113
148
|
CustomFieldTypes.a(lang('custom_field_types.titles.index'), :index),
|
|
114
149
|
lang('custom_field_types.titles.new')
|
|
115
150
|
)
|
|
116
151
|
|
|
117
|
-
@custom_field_methods = CustomFieldMethod
|
|
118
|
-
|
|
152
|
+
@custom_field_methods = ::CustomFields::Model::CustomFieldMethod \
|
|
153
|
+
.pk_hash(:name)
|
|
154
|
+
|
|
155
|
+
if flash[:form_data]
|
|
156
|
+
@custom_field_type = flash[:form_data]
|
|
157
|
+
else
|
|
158
|
+
@custom_field_type = ::CustomFields::Model::CustomFieldType.new
|
|
159
|
+
end
|
|
119
160
|
|
|
120
|
-
render_view
|
|
161
|
+
render_view(:form)
|
|
121
162
|
end
|
|
122
163
|
|
|
123
164
|
##
|
|
124
|
-
#
|
|
125
|
-
# CustomFieldTypes#add().
|
|
165
|
+
# Creates a new custom field type or edits an existing one.
|
|
126
166
|
#
|
|
127
167
|
# This method requires either create or update permissions based on the
|
|
128
168
|
# supplied data.
|
|
129
169
|
#
|
|
130
|
-
# @
|
|
131
|
-
# @
|
|
170
|
+
# @since 0.2.8
|
|
171
|
+
# @event before_edit_custom_field_type
|
|
172
|
+
# @event after_edit_custom_field_type
|
|
173
|
+
# @event before_new_custom_field_type
|
|
174
|
+
# @event after_new_custom_field_type
|
|
175
|
+
# @permission edit_custom_field_type (when editing a field type)
|
|
176
|
+
# @permission new_custom_field_type (when creating a field type)
|
|
132
177
|
#
|
|
133
178
|
def save
|
|
134
179
|
post = request.subset(
|
|
@@ -142,15 +187,19 @@ module CustomFields
|
|
|
142
187
|
)
|
|
143
188
|
|
|
144
189
|
if post['id'] and !post['id'].empty?
|
|
145
|
-
|
|
190
|
+
authorize_user!(:edit_custom_field_type)
|
|
146
191
|
|
|
147
|
-
field_type
|
|
148
|
-
save_action
|
|
192
|
+
field_type = validate_custom_field_type(post['id'])
|
|
193
|
+
save_action = :save
|
|
194
|
+
before_event = :before_edit_custom_field_type
|
|
195
|
+
after_event = :after_edit_custom_field_type
|
|
149
196
|
else
|
|
150
|
-
|
|
197
|
+
authorize_user!(:new_custom_field_type)
|
|
151
198
|
|
|
152
|
-
field_type
|
|
153
|
-
save_action
|
|
199
|
+
field_type = ::CustomFields::Model::CustomFieldType.new
|
|
200
|
+
save_action = :new
|
|
201
|
+
before_event = :before_new_custom_field_type
|
|
202
|
+
after_event = :after_new_custom_field_type
|
|
154
203
|
end
|
|
155
204
|
|
|
156
205
|
post.delete('id')
|
|
@@ -159,8 +208,10 @@ module CustomFields
|
|
|
159
208
|
error = lang("custom_field_types.errors.#{save_action}")
|
|
160
209
|
|
|
161
210
|
begin
|
|
162
|
-
field_type.
|
|
163
|
-
|
|
211
|
+
post.each { |k, v| field_type.send("#{k}=", v) }
|
|
212
|
+
Zen::Event.call(before_event, field_type)
|
|
213
|
+
|
|
214
|
+
field_type.save
|
|
164
215
|
rescue => e
|
|
165
216
|
Ramaze::Log.error(e.inspect)
|
|
166
217
|
message(:error, error)
|
|
@@ -171,24 +222,23 @@ module CustomFields
|
|
|
171
222
|
redirect_referrer
|
|
172
223
|
end
|
|
173
224
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
end
|
|
225
|
+
Zen::Event.call(after_event, field_type)
|
|
226
|
+
|
|
227
|
+
message(:success, success)
|
|
228
|
+
redirect(CustomFieldTypes.r(:edit, field_type.id))
|
|
179
229
|
end
|
|
180
230
|
|
|
181
231
|
##
|
|
182
|
-
# Deletes a number of custom field types.
|
|
183
|
-
#
|
|
184
|
-
# This method requires delete permissions for a user to be able to remove
|
|
185
|
-
# a number of database records.
|
|
232
|
+
# Deletes a number of custom field types. These types should be specified
|
|
233
|
+
# in the POST array "custom_field_type_ids".
|
|
186
234
|
#
|
|
187
|
-
# @
|
|
188
|
-
# @
|
|
235
|
+
# @since 0.2.8
|
|
236
|
+
# @event before_delete_custom_field_type
|
|
237
|
+
# @event after_delete_custom_field_type
|
|
238
|
+
# @permission delete_custom_field_type
|
|
189
239
|
#
|
|
190
240
|
def delete
|
|
191
|
-
|
|
241
|
+
authorize_user!(:delete_custom_field_type)
|
|
192
242
|
|
|
193
243
|
if !request.params['custom_field_type_ids'] \
|
|
194
244
|
or request.params['custom_field_type_ids'].empty?
|
|
@@ -197,14 +247,21 @@ module CustomFields
|
|
|
197
247
|
end
|
|
198
248
|
|
|
199
249
|
request.params['custom_field_type_ids'].each do |id|
|
|
250
|
+
type = ::CustomFields::Model::CustomFieldType[id]
|
|
251
|
+
|
|
252
|
+
next if type.nil?
|
|
253
|
+
Zen::Event.call(:before_delete_custom_field_type, type)
|
|
254
|
+
|
|
200
255
|
begin
|
|
201
|
-
|
|
256
|
+
type.destroy
|
|
202
257
|
rescue => e
|
|
203
258
|
Ramaze::Log.error(e.inspect)
|
|
204
259
|
message(:error, lang('custom_field_types.errors.delete') % id)
|
|
205
260
|
|
|
206
261
|
redirect_referrer
|
|
207
262
|
end
|
|
263
|
+
|
|
264
|
+
Zen::Event.call(:after_delete_custom_field_type, type)
|
|
208
265
|
end
|
|
209
266
|
|
|
210
267
|
message(:success, lang('custom_field_types.success.delete'))
|
|
@@ -1,67 +1,91 @@
|
|
|
1
|
-
#:nodoc:
|
|
2
1
|
module CustomFields
|
|
3
2
|
#:nodoc:
|
|
4
3
|
module Controller
|
|
5
4
|
##
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
5
|
+
# Custom fields allow you to create fields for your entries in their own
|
|
6
|
+
# format and with their own types. This means you're not restricted to the
|
|
7
|
+
# typical "Title" and "Body" fields you'd get when using other systems.
|
|
8
|
+
#
|
|
9
|
+
# Custom fields can be managed to by going to a custom field group and
|
|
10
|
+
# clicking the link "Manage custom fields" (see
|
|
11
|
+
# {CustomFields::Controller::CustomFieldGroups} for more information). Once
|
|
12
|
+
# you've reached this page you'll see an overview of all your custom fields
|
|
13
|
+
# or a message saying no fields were found (if this is the case).
|
|
14
|
+
#
|
|
15
|
+
# 
|
|
16
|
+
#
|
|
17
|
+
# Editing a custom field can be done by clicking on the name of the field,
|
|
18
|
+
# creating a new one can be done by clicking on the button "Add custom
|
|
19
|
+
# field". In both cases you'll be shown a form that looks like the one in
|
|
20
|
+
# the image below.
|
|
21
|
+
#
|
|
22
|
+
# 
|
|
23
|
+
# 
|
|
24
|
+
#
|
|
25
|
+
# In this form you can specify the following fields:
|
|
26
|
+
#
|
|
27
|
+
# * **Name** (required): the name of the custom field, can be anything you
|
|
28
|
+
# like. Examples are "Body" and "Date picker".
|
|
29
|
+
# * **Slug**: a URL friendly version of the name. If none is specified one
|
|
30
|
+
# will be generated automatically.
|
|
31
|
+
# * **Field type** (required): the type of custom field.
|
|
32
|
+
# * **Format** (required): the markup engine to use for the custom field. If
|
|
33
|
+
# a custom field type doesn't allow the use of markup this setting will
|
|
34
|
+
# be ignored.
|
|
35
|
+
# * **Description**: a description of the custom field.
|
|
36
|
+
# * **Possible values**: in case a custom field type allows you to specify
|
|
37
|
+
# multiple values (such as a checkbox) you can specify a value on each
|
|
38
|
+
# line. These values can be specified as following:
|
|
39
|
+
#
|
|
40
|
+
# key|value
|
|
41
|
+
#
|
|
42
|
+
# Example:
|
|
43
|
+
#
|
|
44
|
+
# Yes!|yes
|
|
45
|
+
#
|
|
46
|
+
# * **Requires a value**: whether or not this field requires a value.
|
|
47
|
+
# * **Enable a text editor**: when set to "Yes" the user can use the markup
|
|
48
|
+
# editor when adding/editing a value of a field.
|
|
49
|
+
# * **Textarea rows**: the amount of rows when the field type is a textarea.
|
|
50
|
+
# * **Character limit**: the maximum amount of characters a user can enter
|
|
51
|
+
# in the field.
|
|
52
|
+
# * **Sort order**: a number that indicates the sort order of the field.
|
|
53
|
+
#
|
|
54
|
+
# ## Used Permissions
|
|
55
|
+
#
|
|
56
|
+
# * show_custom_field
|
|
57
|
+
# * new_custom_field
|
|
58
|
+
# * edit_custom_field
|
|
59
|
+
# * delete_custom_field
|
|
60
|
+
#
|
|
61
|
+
# ## Events
|
|
62
|
+
#
|
|
63
|
+
# All events in this controller receive an instance of
|
|
64
|
+
# {CustomFields::Model::CustomField}. Just like other packages the event
|
|
65
|
+
# ``after_delete_custom_field`` receives an instance that has already been
|
|
66
|
+
# destroyed, thus you won't be able to make any changes to the object and
|
|
67
|
+
# save them in the database.
|
|
11
68
|
#
|
|
12
|
-
# @author Yorick Peterse
|
|
13
69
|
# @since 0.1
|
|
70
|
+
# @map /admin/custom-fields
|
|
71
|
+
# @event before_new_custom_field
|
|
72
|
+
# @event after_new_custom_field
|
|
73
|
+
# @event before_edit_custom_field
|
|
74
|
+
# @event after_edit_custom_field
|
|
75
|
+
# @event before_delete_custom_field
|
|
76
|
+
# @event after_delete_custom_field
|
|
14
77
|
#
|
|
15
78
|
class CustomFields < Zen::Controller::AdminController
|
|
16
|
-
include ::CustomFields::Model
|
|
17
|
-
|
|
18
79
|
helper :custom_field
|
|
19
80
|
map '/admin/custom-fields'
|
|
81
|
+
title 'custom_fields.titles.%s'
|
|
20
82
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
before_all do
|
|
25
|
-
csrf_protection(:save, :delete) do
|
|
26
|
-
respond(lang('zen_general.errors.csrf'), 403)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
83
|
+
csrf_protection :save; :delete
|
|
84
|
+
load_asset_group :tabs, [:edit, :new]
|
|
29
85
|
|
|
30
|
-
##
|
|
31
|
-
# Hook that is executed before the index(), edit() and new() methods.
|
|
32
|
-
#
|
|
33
|
-
# @author Yorick Peterse
|
|
34
|
-
# @since 0.2.8
|
|
35
|
-
#
|
|
36
86
|
before(:index, :edit, :new) do
|
|
37
|
-
@custom_field_types = CustomFieldType.type_hash
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
##
|
|
41
|
-
# Constructor method, called upon initialization. It's used to set the
|
|
42
|
-
# URL to which forms send their data and load the language pack.
|
|
43
|
-
#
|
|
44
|
-
# This method loads the following language files:
|
|
45
|
-
#
|
|
46
|
-
# * custom_fields
|
|
47
|
-
# * custom_field_groups
|
|
48
|
-
#
|
|
49
|
-
# @author Yorick Peterse
|
|
50
|
-
# @since 0.1
|
|
51
|
-
#
|
|
52
|
-
def initialize
|
|
53
|
-
super
|
|
54
|
-
|
|
55
|
-
Zen::Language.load('custom_fields')
|
|
56
|
-
Zen::Language.load('custom_field_groups')
|
|
57
|
-
|
|
58
|
-
# Set the page title
|
|
59
|
-
if !action.method.nil?
|
|
60
|
-
method = action.method.to_sym
|
|
61
|
-
@page_title = lang("custom_fields.titles.#{method}") rescue nil
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
@boolean_hash = {
|
|
87
|
+
@custom_field_types = ::CustomFields::Model::CustomFieldType.type_hash
|
|
88
|
+
@boolean_hash = {
|
|
65
89
|
true => lang('zen_general.special.boolean_hash.true'),
|
|
66
90
|
false => lang('zen_general.special.boolean_hash.false')
|
|
67
91
|
}
|
|
@@ -71,29 +95,31 @@ module CustomFields
|
|
|
71
95
|
# Show an overview of all existing custom fields. Using this overview a
|
|
72
96
|
# user can manage an existing field, delete it or create a new one.
|
|
73
97
|
#
|
|
74
|
-
# This method requires the following permissions:
|
|
75
|
-
#
|
|
76
|
-
# * read
|
|
77
|
-
#
|
|
78
|
-
# @author Yorick Peterse
|
|
79
98
|
# @param [Fixnum] custom_field_group_id The ID of the custom field group
|
|
80
|
-
#
|
|
81
|
-
# @since
|
|
99
|
+
# to which all fields belong.
|
|
100
|
+
# @since 0.1
|
|
101
|
+
# @permission show_custom_field
|
|
82
102
|
#
|
|
83
103
|
def index(custom_field_group_id)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
field_group = validate_custom_field_group(custom_field_group_id)
|
|
104
|
+
authorize_user!(:show_custom_field)
|
|
87
105
|
|
|
88
106
|
set_breadcrumbs(
|
|
89
107
|
CustomFieldGroups.a(lang('custom_field_groups.titles.index'), :index),
|
|
90
108
|
lang('custom_fields.titles.index')
|
|
91
109
|
)
|
|
92
110
|
|
|
111
|
+
field_group = validate_custom_field_group(custom_field_group_id)
|
|
93
112
|
@custom_field_group_id = custom_field_group_id
|
|
94
|
-
@custom_fields =
|
|
95
|
-
|
|
96
|
-
|
|
113
|
+
@custom_fields = search do |query|
|
|
114
|
+
::CustomFields::Model::CustomField \
|
|
115
|
+
.search(query) \
|
|
116
|
+
.filter(:custom_field_group_id => custom_field_group_id) \
|
|
117
|
+
.order(:id.asc)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
@custom_fields ||= ::CustomFields::Model::CustomField \
|
|
121
|
+
.filter(:custom_field_group_id => custom_field_group_id) \
|
|
122
|
+
.order(:id.asc)
|
|
97
123
|
|
|
98
124
|
@custom_fields = paginate(@custom_fields)
|
|
99
125
|
end
|
|
@@ -101,29 +127,27 @@ module CustomFields
|
|
|
101
127
|
##
|
|
102
128
|
# Show a form that lets the user edit an existing custom field group.
|
|
103
129
|
#
|
|
104
|
-
#
|
|
105
|
-
#
|
|
106
|
-
# * read
|
|
107
|
-
# * update
|
|
108
|
-
#
|
|
109
|
-
# @author Yorick Peterse
|
|
110
|
-
# @param [Fixnum] custom_field_group_id The ID of the custom field
|
|
111
|
-
# group to which all fields belong.
|
|
130
|
+
# @param [Fixnum] id The ID of the custom field
|
|
131
|
+
# group to which all fields belong.
|
|
112
132
|
# @param [Fixnum] id The ID of the custom field to retrieve so that we
|
|
113
|
-
#
|
|
114
|
-
# @since
|
|
133
|
+
# can edit it.
|
|
134
|
+
# @since 0.1
|
|
135
|
+
# @permission edit_custom_field
|
|
115
136
|
#
|
|
116
137
|
def edit(custom_field_group_id, id)
|
|
117
|
-
|
|
138
|
+
authorize_user!(:edit_custom_field)
|
|
118
139
|
|
|
119
140
|
validate_custom_field_group(custom_field_group_id)
|
|
120
141
|
|
|
121
142
|
set_breadcrumbs(
|
|
122
143
|
CustomFieldGroups.a(
|
|
123
|
-
lang('custom_field_groups.titles.index'),
|
|
144
|
+
lang('custom_field_groups.titles.index'),
|
|
145
|
+
:index
|
|
124
146
|
),
|
|
125
147
|
CustomFields.a(
|
|
126
|
-
lang('custom_fields.titles.index'),
|
|
148
|
+
lang('custom_fields.titles.index'),
|
|
149
|
+
:index,
|
|
150
|
+
custom_field_group_id
|
|
127
151
|
),
|
|
128
152
|
lang('custom_fields.titles.edit')
|
|
129
153
|
)
|
|
@@ -142,50 +166,50 @@ module CustomFields
|
|
|
142
166
|
##
|
|
143
167
|
# Show a form that lets the user create a new custom field group.
|
|
144
168
|
#
|
|
145
|
-
# This method requires the following permissions:
|
|
146
|
-
#
|
|
147
|
-
# * create
|
|
148
|
-
# * read
|
|
149
|
-
#
|
|
150
|
-
# @author Yorick Peterse
|
|
151
169
|
# @param [Fixnum] custom_field_group_id The ID of the custom field group
|
|
152
|
-
#
|
|
153
|
-
# @since
|
|
170
|
+
# to which all fields belong.
|
|
171
|
+
# @since 0.1
|
|
172
|
+
# @permission new_custom_field
|
|
154
173
|
#
|
|
155
174
|
def new(custom_field_group_id)
|
|
156
|
-
|
|
175
|
+
authorize_user!(:new_custom_field)
|
|
157
176
|
|
|
158
177
|
validate_custom_field_group(custom_field_group_id)
|
|
159
178
|
|
|
160
179
|
set_breadcrumbs(
|
|
161
180
|
CustomFieldGroups.a(
|
|
162
|
-
lang('custom_field_groups.titles.index'),
|
|
181
|
+
lang('custom_field_groups.titles.index'),
|
|
182
|
+
:index
|
|
163
183
|
),
|
|
164
184
|
CustomFields.a(
|
|
165
|
-
lang('custom_fields.titles.index'),
|
|
185
|
+
lang('custom_fields.titles.index'),
|
|
186
|
+
:index,
|
|
187
|
+
custom_field_group_id
|
|
166
188
|
),
|
|
167
189
|
lang('custom_fields.titles.new')
|
|
168
190
|
)
|
|
169
191
|
|
|
170
192
|
@custom_field_group_id = custom_field_group_id
|
|
171
|
-
|
|
193
|
+
|
|
194
|
+
if flash[:form_data]
|
|
195
|
+
@custom_field = flash[:form_data]
|
|
196
|
+
else
|
|
197
|
+
@custom_field = ::CustomFields::Model::CustomField.new
|
|
198
|
+
end
|
|
172
199
|
|
|
173
200
|
render_view(:form)
|
|
174
201
|
end
|
|
175
202
|
|
|
176
203
|
##
|
|
177
|
-
#
|
|
178
|
-
# to the proper URL. Based on the value of a hidden field named 'id' we'll
|
|
179
|
-
# determine if the data will be used to create a new custom field or to
|
|
180
|
-
# update an existing one.
|
|
181
|
-
#
|
|
182
|
-
# This method requires the following permissions:
|
|
204
|
+
# Saves the changes made by {#edit} and {#new}.
|
|
183
205
|
#
|
|
184
|
-
#
|
|
185
|
-
#
|
|
186
|
-
#
|
|
187
|
-
# @
|
|
188
|
-
# @
|
|
206
|
+
# @since 0.1
|
|
207
|
+
# @event before_new_custom_field
|
|
208
|
+
# @event after_new_custom_field
|
|
209
|
+
# @event before_edit_custom_field
|
|
210
|
+
# @event after_edit_custom_field
|
|
211
|
+
# @permission edit_custom_field (when editing a field)
|
|
212
|
+
# @permission new_custom_field (when creating a new field)
|
|
189
213
|
#
|
|
190
214
|
def save
|
|
191
215
|
post = request.subset(
|
|
@@ -209,32 +233,37 @@ module CustomFields
|
|
|
209
233
|
# Get or create a custom field group based on the ID from the hidden
|
|
210
234
|
# field.
|
|
211
235
|
if post['id'] and !post['id'].empty?
|
|
212
|
-
|
|
236
|
+
authorize_user!(:edit_custom_field)
|
|
213
237
|
|
|
214
238
|
custom_field = validate_custom_field(
|
|
215
239
|
post['id'], post['custom_field_group_id']
|
|
216
240
|
)
|
|
217
241
|
|
|
218
242
|
save_action = :save
|
|
243
|
+
before_event = :before_edit_custom_field
|
|
244
|
+
after_event = :after_edit_custom_field
|
|
219
245
|
else
|
|
220
|
-
|
|
246
|
+
authorize_user!(:new_custom_field)
|
|
221
247
|
|
|
222
|
-
custom_field = CustomField.new
|
|
248
|
+
custom_field = ::CustomFields::Model::CustomField.new
|
|
223
249
|
save_action = :new
|
|
250
|
+
before_event = :before_new_custom_field
|
|
251
|
+
after_event = :after_new_custom_field
|
|
224
252
|
end
|
|
225
253
|
|
|
226
|
-
post.delete('slug') if post['slug'].empty?
|
|
227
254
|
post.delete('id')
|
|
228
255
|
|
|
229
|
-
|
|
230
|
-
|
|
256
|
+
success = lang("custom_fields.success.#{save_action}")
|
|
257
|
+
error = lang("custom_fields.errors.#{save_action}")
|
|
231
258
|
|
|
232
259
|
begin
|
|
233
|
-
custom_field.
|
|
234
|
-
|
|
260
|
+
post.each { |k, v| custom_field.send("#{k}=", v) }
|
|
261
|
+
Zen::Event.call(before_event, custom_field)
|
|
262
|
+
|
|
263
|
+
custom_field.save
|
|
235
264
|
rescue => e
|
|
236
265
|
Ramaze::Log.error(e.inspect)
|
|
237
|
-
message(:error,
|
|
266
|
+
message(:error, error)
|
|
238
267
|
|
|
239
268
|
flash[:form_data] = custom_field
|
|
240
269
|
flash[:form_errors] = custom_field.errors
|
|
@@ -242,15 +271,12 @@ module CustomFields
|
|
|
242
271
|
redirect_referrer
|
|
243
272
|
end
|
|
244
273
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
else
|
|
252
|
-
redirect_referrer
|
|
253
|
-
end
|
|
274
|
+
Zen::Event.call(after_event, custom_field)
|
|
275
|
+
|
|
276
|
+
message(:success, success)
|
|
277
|
+
redirect(
|
|
278
|
+
CustomFields.r(:edit, post['custom_field_group_id'], custom_field.id)
|
|
279
|
+
)
|
|
254
280
|
end
|
|
255
281
|
|
|
256
282
|
##
|
|
@@ -260,36 +286,40 @@ module CustomFields
|
|
|
260
286
|
# request that contains a field named 'custom_field_ids[]'. This field
|
|
261
287
|
# should contain the primary values of each field that has to be deleted.
|
|
262
288
|
#
|
|
263
|
-
#
|
|
264
|
-
#
|
|
265
|
-
#
|
|
266
|
-
#
|
|
267
|
-
# @author Yorick Peterse
|
|
268
|
-
# @since 0.1
|
|
289
|
+
# @since 0.1
|
|
290
|
+
# @event before_delete_custom_field
|
|
291
|
+
# @event after_delete_custom_field
|
|
292
|
+
# @permission delete_custom_field
|
|
269
293
|
#
|
|
270
294
|
def delete
|
|
271
|
-
|
|
295
|
+
authorize_user!(:delete_custom_field)
|
|
272
296
|
|
|
273
|
-
post = request.subset(:custom_field_ids
|
|
297
|
+
post = request.subset(:custom_field_ids)
|
|
274
298
|
|
|
275
|
-
if
|
|
276
|
-
or request.params['custom_field_ids'].empty?
|
|
299
|
+
if post['custom_field_ids'].nil? or post['custom_field_ids'].empty?
|
|
277
300
|
message(:error, lang('custom_fields.errors.no_delete'))
|
|
278
|
-
|
|
301
|
+
redirect_referrer
|
|
279
302
|
end
|
|
280
303
|
|
|
281
304
|
request.params['custom_field_ids'].each do |id|
|
|
305
|
+
custom_field = ::CustomFields::Model::CustomField[id]
|
|
306
|
+
|
|
307
|
+
next if custom_field.nil?
|
|
308
|
+
Zen::Event.call(:before_delete_custom_field, custom_field)
|
|
309
|
+
|
|
282
310
|
begin
|
|
283
|
-
|
|
284
|
-
message(:success, lang('custom_fields.success.delete'))
|
|
311
|
+
custom_field.destroy
|
|
285
312
|
rescue => e
|
|
286
313
|
Ramaze::Log.error(e.inspect)
|
|
287
314
|
message(:error, lang('custom_fields.errors.delete') % id)
|
|
288
315
|
|
|
289
316
|
redirect_referrer
|
|
290
317
|
end
|
|
318
|
+
|
|
319
|
+
Zen::Event.call(:after_delete_custom_field, custom_field)
|
|
291
320
|
end
|
|
292
321
|
|
|
322
|
+
message(:success, lang('custom_fields.success.delete'))
|
|
293
323
|
redirect_referrer
|
|
294
324
|
end
|
|
295
325
|
end # CustomFields
|