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,40 +1,31 @@
|
|
|
1
|
-
Ramaze::HelpersHelper.options.paths.push(__DIR__('menus'))
|
|
2
|
-
|
|
3
|
-
require __DIR__('menus/model/menu')
|
|
4
|
-
require __DIR__('menus/model/menu_item')
|
|
5
|
-
require __DIR__('menus/controller/menus')
|
|
6
|
-
require __DIR__('menus/controller/menu_items')
|
|
7
|
-
require __DIR__('menus/plugin/menus')
|
|
8
|
-
|
|
9
|
-
Zen::Language.options.paths.push(__DIR__('menus'))
|
|
10
|
-
Zen::Language.load('menus')
|
|
11
|
-
Zen::Language.load('menu_items')
|
|
12
|
-
|
|
13
1
|
Zen::Package.add do |p|
|
|
14
|
-
p.name
|
|
15
|
-
p.
|
|
16
|
-
p.
|
|
17
|
-
p.
|
|
18
|
-
|
|
2
|
+
p.name = :menus
|
|
3
|
+
p.title = 'menus.titles.index'
|
|
4
|
+
p.author = 'Yorick Peterse'
|
|
5
|
+
p.url = 'http://zen-cms.com/'
|
|
6
|
+
p.about = 'menus.description'
|
|
7
|
+
p.root = __DIR__('menus')
|
|
8
|
+
p.migrations = __DIR__('../migrations')
|
|
19
9
|
|
|
20
|
-
p.
|
|
21
|
-
p.migration_dir = __DIR__('../migrations')
|
|
10
|
+
p.menu('menus.titles.index', '/admin/menus', :permission => :show_menu)
|
|
22
11
|
|
|
23
|
-
p.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
p.permission :show_menu , 'menus.permissions.show'
|
|
13
|
+
p.permission :edit_menu , 'menus.permissions.edit'
|
|
14
|
+
p.permission :new_menu , 'menus.permissions.new'
|
|
15
|
+
p.permission :delete_menu, 'menus.permissions.delete'
|
|
27
16
|
|
|
28
|
-
p.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
17
|
+
p.permission :show_menu_item , 'menu_items.permissions.show'
|
|
18
|
+
p.permission :edit_menu_item , 'menu_items.permissions.edit'
|
|
19
|
+
p.permission :new_menu_item , 'menu_items.permissions.new'
|
|
20
|
+
p.permission :delete_menu_item, 'menu_items.permissions.delete'
|
|
32
21
|
end
|
|
33
22
|
|
|
34
|
-
Zen::
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
23
|
+
Zen::Language.load('menus')
|
|
24
|
+
Zen::Language.load('menu_items')
|
|
25
|
+
|
|
26
|
+
require __DIR__('menus/model/menu')
|
|
27
|
+
require __DIR__('menus/model/menu_item')
|
|
28
|
+
require __DIR__('menus/controller/menus')
|
|
29
|
+
require __DIR__('menus/controller/menu_items')
|
|
30
|
+
|
|
31
|
+
Zen::Controller::FrontendController.helper(:menu_frontend)
|
|
@@ -1,62 +1,82 @@
|
|
|
1
|
-
#:nodoc:
|
|
2
1
|
module Menus
|
|
3
2
|
#:nodoc:
|
|
4
3
|
module Controller
|
|
5
4
|
##
|
|
6
|
-
#
|
|
5
|
+
# The MenuItems controller allows users to manage menu items of a menu
|
|
6
|
+
# group. In order to manage menu items you must first navigate to a menu
|
|
7
|
+
# group and click the link "Manage menu items" (see
|
|
8
|
+
# {Menus::Controller::Menus} for more information). Once you've reached this
|
|
9
|
+
# page you'll see an overview that looks like the image below.
|
|
10
|
+
#
|
|
11
|
+
# 
|
|
12
|
+
#
|
|
13
|
+
# Editing or creating a menu item can be done by either clicking the name of
|
|
14
|
+
# a menu item or by clicking the "Add menu item" button. In both cases
|
|
15
|
+
# you'll end up with a form looking like the one in the following image:
|
|
16
|
+
#
|
|
17
|
+
# 
|
|
18
|
+
#
|
|
19
|
+
# In this form you can specify the following fields:
|
|
20
|
+
#
|
|
21
|
+
# * **Name**: the name of the menu item.
|
|
22
|
+
# * **URL**: the URL of the menu item.
|
|
23
|
+
# * **Order**: a number that indicates the sort order when the menu is
|
|
24
|
+
# built.
|
|
25
|
+
# * **Parent**: a parent menu item. This allows you to easily create sub
|
|
26
|
+
# menus.
|
|
27
|
+
# * **HTML class**: a space separated list of classes to apply to the HTML
|
|
28
|
+
# element.
|
|
29
|
+
# * **HTML ID**: a single ID to apply to the HTML element.
|
|
30
|
+
#
|
|
31
|
+
# Note that the name, URL, HTML class and HTML ID fields have a maximum
|
|
32
|
+
# length of 255 characters.
|
|
33
|
+
#
|
|
34
|
+
# ## Used Permissions
|
|
35
|
+
#
|
|
36
|
+
# * show_menu_item
|
|
37
|
+
# * new_menu_item
|
|
38
|
+
# * edit_menu_item
|
|
39
|
+
# * delete_menu_item
|
|
40
|
+
#
|
|
41
|
+
# ## Events
|
|
42
|
+
#
|
|
43
|
+
# All events in this controller receive an instance of
|
|
44
|
+
# {Menus::Model::MenuItem}. Just like other packages the event
|
|
45
|
+
# ``delete_menu_item`` receives an instance that has already been destroyed.
|
|
46
|
+
#
|
|
47
|
+
# @example Automatically prefix URLs with http
|
|
48
|
+
# Zen::Event.listen(:new_menu_item) do |item|
|
|
49
|
+
# unless item.url =~ /^http/
|
|
50
|
+
# item.url = 'http://' + item.url
|
|
51
|
+
# item.save
|
|
52
|
+
# end
|
|
53
|
+
# end
|
|
7
54
|
#
|
|
8
|
-
# @author Yorick Peterse
|
|
9
55
|
# @since 0.2a
|
|
56
|
+
# @map /admin/menu-items
|
|
57
|
+
# @event before_new_menu_item
|
|
58
|
+
# @event after_new_menu_item
|
|
59
|
+
# @event before_edit_menu_item
|
|
60
|
+
# @event after_edit_menu_item
|
|
61
|
+
# @event before_delete_menu_item
|
|
62
|
+
# @event after_delete_menu_item
|
|
10
63
|
#
|
|
11
|
-
class MenuItems <
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
map '/admin/menu-items'
|
|
64
|
+
class MenuItems < Zen::Controller::AdminController
|
|
65
|
+
map '/admin/menu-items'
|
|
15
66
|
helper :menu
|
|
67
|
+
title 'menu_items.titles.%s'
|
|
16
68
|
|
|
17
|
-
|
|
18
|
-
csrf_protection(:save, :delete) do
|
|
19
|
-
respond(lang('zen_general.errors.csrf'), 403)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
##
|
|
24
|
-
# Initializes the class, loads all language packs and sets the form URLs.
|
|
25
|
-
#
|
|
26
|
-
# This method loads the following language files:
|
|
27
|
-
#
|
|
28
|
-
# * menus
|
|
29
|
-
# * menu_items
|
|
30
|
-
#
|
|
31
|
-
# @author Yorick Peterse
|
|
32
|
-
# @since 0.2a
|
|
33
|
-
#
|
|
34
|
-
def initialize
|
|
35
|
-
super
|
|
36
|
-
|
|
37
|
-
Zen::Language.load('menu_items')
|
|
38
|
-
Zen::Language.load('menus')
|
|
39
|
-
|
|
40
|
-
# Set the page title based on the current method
|
|
41
|
-
if !action.method.nil?
|
|
42
|
-
method = action.method.to_sym
|
|
43
|
-
@page_title = lang("menu_items.titles.#{method}") rescue nil
|
|
44
|
-
end
|
|
45
|
-
end
|
|
69
|
+
csrf_protection :save, :delete
|
|
46
70
|
|
|
47
71
|
##
|
|
48
|
-
#
|
|
72
|
+
# Shows an overview of all the menu items for a menu group.
|
|
49
73
|
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
# @author Yorick Peterse
|
|
55
|
-
# @since 0.2a
|
|
56
|
-
# @param [Integer] menu_id The ID of the current navigation menu.
|
|
74
|
+
# @since 0.2a
|
|
75
|
+
# @param [Fixnum] menu_id The ID of the current navigation menu.
|
|
76
|
+
# @permission show_menu_item
|
|
57
77
|
#
|
|
58
78
|
def index(menu_id)
|
|
59
|
-
|
|
79
|
+
authorize_user!(:show_menu_item)
|
|
60
80
|
|
|
61
81
|
menu = validate_menu(menu_id)
|
|
62
82
|
|
|
@@ -66,32 +86,35 @@ module Menus
|
|
|
66
86
|
)
|
|
67
87
|
|
|
68
88
|
@menu_id = menu_id
|
|
69
|
-
@menu_items =
|
|
89
|
+
@menu_items = search do |query|
|
|
90
|
+
::Menus::Model::MenuItem.search(query) \
|
|
91
|
+
.filter(:menu_id => menu_id) \
|
|
92
|
+
.order(:id.asc)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
@menu_items ||= ::Menus::Model::MenuItem \
|
|
96
|
+
.filter(:menu_id => menu_id) \
|
|
97
|
+
.order(:id.asc)
|
|
98
|
+
|
|
70
99
|
@menu_items = paginate(@menu_items)
|
|
71
100
|
end
|
|
72
101
|
|
|
73
102
|
##
|
|
74
|
-
# Allow the user to
|
|
75
|
-
#
|
|
76
|
-
# This method requires the following permissions:
|
|
77
|
-
#
|
|
78
|
-
# * read
|
|
79
|
-
# * update
|
|
103
|
+
# Allow the user to create a new menu item for the current menu.
|
|
80
104
|
#
|
|
81
|
-
# @
|
|
82
|
-
# @
|
|
83
|
-
# @
|
|
84
|
-
# @param [Integer] id The ID of the menu item to edit.
|
|
105
|
+
# @since 0.2a
|
|
106
|
+
# @param [Fixnum] menu_id The ID of the current navigation menu.
|
|
107
|
+
# @permission new_menu_item
|
|
85
108
|
#
|
|
86
|
-
def
|
|
87
|
-
|
|
109
|
+
def new(menu_id)
|
|
110
|
+
authorize_user!(:new_menu_item)
|
|
88
111
|
|
|
89
112
|
validate_menu(menu_id)
|
|
90
113
|
|
|
91
114
|
set_breadcrumbs(
|
|
92
115
|
Menus.a(lang('menus.titles.index'), :index),
|
|
93
116
|
MenuItems.a(lang('menu_items.titles.index'), :index, menu_id),
|
|
94
|
-
lang('menu_items.titles.
|
|
117
|
+
lang('menu_items.titles.new')
|
|
95
118
|
)
|
|
96
119
|
|
|
97
120
|
@menu_id = menu_id
|
|
@@ -99,37 +122,38 @@ module Menus
|
|
|
99
122
|
if flash[:form_data]
|
|
100
123
|
@menu_item = flash[:form_data]
|
|
101
124
|
else
|
|
102
|
-
@menu_item =
|
|
125
|
+
@menu_item = ::Menus::Model::MenuItem.new
|
|
103
126
|
end
|
|
104
127
|
|
|
105
128
|
render_view(:form)
|
|
106
129
|
end
|
|
107
130
|
|
|
108
131
|
##
|
|
109
|
-
# Allow the user to
|
|
110
|
-
#
|
|
111
|
-
# This method requires the following permissions:
|
|
112
|
-
#
|
|
113
|
-
# * read
|
|
114
|
-
# * create
|
|
132
|
+
# Allow the user to edit an existing navigation item.
|
|
115
133
|
#
|
|
116
|
-
# @
|
|
117
|
-
# @
|
|
118
|
-
# @param
|
|
134
|
+
# @since 0.2a
|
|
135
|
+
# @param [Fixnum] menu_id The ID of the current navigation menu.
|
|
136
|
+
# @param [Fixnum] id The ID of the menu item to edit.
|
|
137
|
+
# @permission edit_menu_item
|
|
119
138
|
#
|
|
120
|
-
def
|
|
121
|
-
|
|
139
|
+
def edit(menu_id, id)
|
|
140
|
+
authorize_user!(:edit_menu_item)
|
|
122
141
|
|
|
123
142
|
validate_menu(menu_id)
|
|
124
143
|
|
|
125
144
|
set_breadcrumbs(
|
|
126
145
|
Menus.a(lang('menus.titles.index'), :index),
|
|
127
146
|
MenuItems.a(lang('menu_items.titles.index'), :index, menu_id),
|
|
128
|
-
lang('menu_items.titles.
|
|
147
|
+
lang('menu_items.titles.edit')
|
|
129
148
|
)
|
|
130
149
|
|
|
131
|
-
@menu_id
|
|
132
|
-
|
|
150
|
+
@menu_id = menu_id
|
|
151
|
+
|
|
152
|
+
if flash[:form_data]
|
|
153
|
+
@menu_item = flash[:form_data]
|
|
154
|
+
else
|
|
155
|
+
@menu_item = validate_menu_item(id, menu_id)
|
|
156
|
+
end
|
|
133
157
|
|
|
134
158
|
render_view(:form)
|
|
135
159
|
end
|
|
@@ -138,13 +162,13 @@ module Menus
|
|
|
138
162
|
# Saves an existing menu iten or creates a new one using the supplied
|
|
139
163
|
# POST data.
|
|
140
164
|
#
|
|
141
|
-
#
|
|
142
|
-
#
|
|
143
|
-
#
|
|
144
|
-
#
|
|
145
|
-
#
|
|
146
|
-
# @
|
|
147
|
-
# @
|
|
165
|
+
# @since 0.2a
|
|
166
|
+
# @permission edit_menu_item (when editing an item)
|
|
167
|
+
# @permission new_menu_item (when creating an item)
|
|
168
|
+
# @event before_edit_menu_item
|
|
169
|
+
# @event after_edit_menu_item
|
|
170
|
+
# @event before_new_menu_item
|
|
171
|
+
# @event after_new_menu_item
|
|
148
172
|
#
|
|
149
173
|
def save
|
|
150
174
|
post = request.subset(
|
|
@@ -158,62 +182,67 @@ module Menus
|
|
|
158
182
|
:menu_id
|
|
159
183
|
)
|
|
160
184
|
|
|
161
|
-
if post['parent_id'].empty? or post['parent_id']
|
|
185
|
+
if post['parent_id'].empty? or post['parent_id'] == post['id']
|
|
162
186
|
post['parent_id'] = nil
|
|
163
187
|
end
|
|
164
188
|
|
|
165
189
|
# Determine if we're saving changes made to an existing menu item or
|
|
166
190
|
# if we're going to create a new one.
|
|
167
191
|
if post.key?('id') and !post['id'].empty?
|
|
168
|
-
|
|
192
|
+
authorize_user!(:edit_menu_item)
|
|
169
193
|
|
|
170
|
-
|
|
171
|
-
save_action
|
|
194
|
+
menu_item = validate_menu_item(post['id'], post['menu_id'])
|
|
195
|
+
save_action = :save
|
|
196
|
+
before_event = :before_edit_menu_item
|
|
197
|
+
after_event = :after_edit_menu_item
|
|
172
198
|
else
|
|
173
|
-
|
|
199
|
+
authorize_user!(:new_menu_item)
|
|
174
200
|
|
|
175
|
-
|
|
176
|
-
save_action
|
|
201
|
+
menu_item = ::Menus::Model::MenuItem.new
|
|
202
|
+
save_action = :new
|
|
203
|
+
before_event = :before_new_menu_item
|
|
204
|
+
after_event = :after_new_menu_item
|
|
177
205
|
end
|
|
178
206
|
|
|
179
207
|
post.delete('id')
|
|
180
208
|
|
|
181
209
|
# Set our notifications
|
|
182
|
-
|
|
183
|
-
|
|
210
|
+
success = lang("menu_items.success.#{save_action}")
|
|
211
|
+
error = lang("menu_items.errors.#{save_action}")
|
|
184
212
|
|
|
185
213
|
# Time to save the data
|
|
186
214
|
begin
|
|
187
|
-
|
|
188
|
-
|
|
215
|
+
post.each { |k, v| menu_item.send("#{k}=", v) }
|
|
216
|
+
Zen::Event.call(before_event, menu_item)
|
|
217
|
+
|
|
218
|
+
menu_item.save
|
|
189
219
|
rescue => e
|
|
190
220
|
Ramaze::Log.error(e.inspect)
|
|
191
|
-
message(:error,
|
|
221
|
+
message(:error, error)
|
|
192
222
|
|
|
193
|
-
flash[:form_data] =
|
|
194
|
-
flash[:form_errors] =
|
|
223
|
+
flash[:form_data] = menu_item
|
|
224
|
+
flash[:form_errors] = menu_item.errors
|
|
195
225
|
|
|
196
226
|
redirect_referrer
|
|
197
227
|
end
|
|
198
228
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
end
|
|
229
|
+
Zen::Event.call(after_event, menu_item)
|
|
230
|
+
|
|
231
|
+
message(:success, success)
|
|
232
|
+
redirect(MenuItems.r(:edit, menu_item.menu_id, menu_item.id))
|
|
204
233
|
end
|
|
205
234
|
|
|
206
235
|
##
|
|
207
236
|
# Delete all specified menu items based on the values in the POST array
|
|
208
|
-
# "menu_item_ids".
|
|
237
|
+
# "menu_item_ids".
|
|
209
238
|
#
|
|
210
|
-
#
|
|
211
|
-
#
|
|
212
|
-
# @
|
|
213
|
-
# @
|
|
239
|
+
# @since 0.2a
|
|
240
|
+
# @permission delete_menu_item
|
|
241
|
+
# @event before_delete_menu_item
|
|
242
|
+
# @event after_delete_menu_item
|
|
214
243
|
#
|
|
215
244
|
def delete
|
|
216
|
-
|
|
245
|
+
authorize_user!(:delete_menu_item)
|
|
217
246
|
|
|
218
247
|
post = request.subset(:menu_item_ids)
|
|
219
248
|
|
|
@@ -223,14 +252,21 @@ module Menus
|
|
|
223
252
|
end
|
|
224
253
|
|
|
225
254
|
post['menu_item_ids'].each do |id|
|
|
255
|
+
menu = ::Menus::Model::MenuItem[id]
|
|
256
|
+
|
|
257
|
+
next if menu.nil?
|
|
258
|
+
Zen::Event.call(:before_delete_menu_item, menu)
|
|
259
|
+
|
|
226
260
|
begin
|
|
227
|
-
|
|
261
|
+
menu.destroy
|
|
228
262
|
rescue => e
|
|
229
263
|
Ramaze::Log.error(e.inspect)
|
|
230
264
|
message(:error, lang('menu_items.errors.delete') % id)
|
|
231
265
|
|
|
232
266
|
redirect_referrer
|
|
233
267
|
end
|
|
268
|
+
|
|
269
|
+
Zen::Event.call(:after_delete_menu_item, menu)
|
|
234
270
|
end
|
|
235
271
|
|
|
236
272
|
message(:success, lang('menu_items.success.delete'))
|
|
@@ -1,137 +1,183 @@
|
|
|
1
|
-
|
|
1
|
+
##
|
|
2
|
+
# Package for managing menus and menu items.
|
|
3
|
+
#
|
|
4
|
+
# ## Controllers
|
|
5
|
+
#
|
|
6
|
+
# * {Menus::Controller::Menus}
|
|
7
|
+
# * {Menus::Controller::MenuItems}
|
|
8
|
+
#
|
|
9
|
+
# ## Helpers
|
|
10
|
+
#
|
|
11
|
+
# * {Ramaze::Helper::Menu}
|
|
12
|
+
# * {Ramaze::Helper::MenuFrontend}
|
|
13
|
+
#
|
|
14
|
+
# ## Models
|
|
15
|
+
#
|
|
16
|
+
# * {Menus::Model::Menu}
|
|
17
|
+
# * {Menus::Model::MenuItem}
|
|
18
|
+
#
|
|
2
19
|
module Menus
|
|
3
20
|
#:nodoc:
|
|
4
21
|
module Controller
|
|
5
22
|
##
|
|
6
|
-
#
|
|
7
|
-
#
|
|
23
|
+
# The Menus controller allows you to create custom menu groups. You can
|
|
24
|
+
# create large menu structures without having to write a single line of
|
|
25
|
+
# code. In order to start managing your menus you must first navigate to
|
|
26
|
+
# ``/admin/menus`` (there's a navigation item called "Menus" that you can
|
|
27
|
+
# also use). Once you've reached this page you'll see an overview of all
|
|
28
|
+
# your existing menus or a message telling you that no menus were found (if
|
|
29
|
+
# this is the case). An example of such an overview can be seen in the image
|
|
30
|
+
# below.
|
|
31
|
+
#
|
|
32
|
+
# 
|
|
33
|
+
#
|
|
34
|
+
# This overview allows you to edit, create or remove menu groups as well as
|
|
35
|
+
# managing the menu items of a group. Editing a group can be done by
|
|
36
|
+
# clicking the name of the group, creating a new one can be done by clicking
|
|
37
|
+
# the button "Add menu". In both cases you'll end up with the form shown in
|
|
38
|
+
# the image below.
|
|
39
|
+
#
|
|
40
|
+
# 
|
|
41
|
+
#
|
|
42
|
+
# In this form you can use the following fields:
|
|
43
|
+
#
|
|
44
|
+
# * **Name** (required): the name of the menu.
|
|
45
|
+
# * **Slug**: a URL friendly version of the name. If none is specified it
|
|
46
|
+
# will be generated automatically based on the name of the menu.
|
|
47
|
+
# * **HTML class**: a space separated list of classes to apply to the HTML
|
|
48
|
+
# element. The format of this field should match the regular exresspion
|
|
49
|
+
# ``^[a-zA-Z\-_0-9\s]*$``
|
|
50
|
+
# * **HTML ID**: an ID to apply to the HTML element. This value should match
|
|
51
|
+
# the regular expression ``^[a-zA-Z\-_0-9]*$``.
|
|
52
|
+
# * **Description**: the description of the menu.
|
|
53
|
+
#
|
|
54
|
+
# Note that all fields except the description field have a maximum length of
|
|
55
|
+
# 255 characters.
|
|
56
|
+
#
|
|
57
|
+
# ## Used Permissions
|
|
58
|
+
#
|
|
59
|
+
# * show_menu
|
|
60
|
+
# * new_menu
|
|
61
|
+
# * edit_menu
|
|
62
|
+
# * delete_menu
|
|
63
|
+
#
|
|
64
|
+
# ## Events
|
|
65
|
+
#
|
|
66
|
+
# All events in this controller receive an instance of {Menus::Model::Menu}.
|
|
67
|
+
# Just like other packages the event ``delete_menu`` receives an instance
|
|
68
|
+
# that has already been destroyed.
|
|
69
|
+
#
|
|
70
|
+
# @example Automatically add a menu item
|
|
71
|
+
# Zen::Event.listen(:new_menu) do |menu|
|
|
72
|
+
# menu.add_menu_item(:name => 'Home', :url => '/', :html_id => 'home')
|
|
73
|
+
# end
|
|
74
|
+
#
|
|
75
|
+
# @example Remove duplicate menu items when editing a menu
|
|
76
|
+
# Zen::Event.listen(:edit_menu) do |menu|
|
|
77
|
+
# urls = []
|
|
78
|
+
#
|
|
79
|
+
# menu.items.each do |item|
|
|
80
|
+
# if urls.include?(item.url)
|
|
81
|
+
# item.destroy
|
|
82
|
+
# else
|
|
83
|
+
# urls << item.url
|
|
84
|
+
# end
|
|
85
|
+
# end
|
|
86
|
+
# end
|
|
8
87
|
#
|
|
9
|
-
# @author Yorick Peterse
|
|
10
88
|
# @since 0.2a
|
|
89
|
+
# @map /admin/menus
|
|
90
|
+
# @event before_new_menu
|
|
91
|
+
# @event after_new_menu
|
|
92
|
+
# @event before_edit_menu
|
|
93
|
+
# @event after_edit_menu
|
|
94
|
+
# @event before_delete_menu
|
|
95
|
+
# @event after_delete_menu
|
|
11
96
|
#
|
|
12
97
|
class Menus < Zen::Controller::AdminController
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
map '/admin/menus'
|
|
98
|
+
map '/admin/menus'
|
|
16
99
|
helper :menu
|
|
100
|
+
title 'menus.titles.%s'
|
|
17
101
|
|
|
18
|
-
|
|
19
|
-
csrf_protection(:save, :delete) do
|
|
20
|
-
respond(lang('zen_general.errors.csrf'), 403)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
##
|
|
25
|
-
# Initializes the class and loads all required language packs.
|
|
26
|
-
#
|
|
27
|
-
# This method loads the following language files:
|
|
28
|
-
#
|
|
29
|
-
# * menus
|
|
30
|
-
#
|
|
31
|
-
# @author Yorick Peterse
|
|
32
|
-
# @since 0.2a
|
|
33
|
-
#
|
|
34
|
-
def initialize
|
|
35
|
-
super
|
|
36
|
-
|
|
37
|
-
Zen::Language.load('menus')
|
|
38
|
-
|
|
39
|
-
# Set the page title
|
|
40
|
-
if !action.method.nil?
|
|
41
|
-
method = action.method.to_sym
|
|
42
|
-
@page_title = lang("menus.titles.#{method}") rescue nil
|
|
43
|
-
end
|
|
44
|
-
end
|
|
102
|
+
csrf_protection :save, :delete
|
|
45
103
|
|
|
46
104
|
##
|
|
47
105
|
# Shows an overview of all exisitng menus and a few properties of these
|
|
48
106
|
# groups such as the name, slug and the amount of items in that group.
|
|
49
107
|
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
# * read
|
|
53
|
-
#
|
|
54
|
-
# @author Yorick Peterse
|
|
55
|
-
# @since 0.2a
|
|
108
|
+
# @since 0.2a
|
|
109
|
+
# @permission show_menu
|
|
56
110
|
#
|
|
57
111
|
def index
|
|
58
|
-
|
|
112
|
+
authorize_user!(:show_menu)
|
|
59
113
|
|
|
60
114
|
set_breadcrumbs(lang('menus.titles.index'))
|
|
61
115
|
|
|
62
|
-
@menus =
|
|
116
|
+
@menus = search do |query|
|
|
117
|
+
::Menus::Model::Menu.search(query).order(:id.asc)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
@menus ||= ::Menus::Model::Menu.order(:id.asc)
|
|
121
|
+
@menus = paginate(@menus)
|
|
63
122
|
end
|
|
64
123
|
|
|
65
124
|
##
|
|
66
|
-
# Show a form that
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
# This method requires the following permissions:
|
|
71
|
-
#
|
|
72
|
-
# * read
|
|
73
|
-
# * update
|
|
125
|
+
# Show a form that can be used to create a new menu group. Once a menu
|
|
126
|
+
# group has been created users can start adding navigation items to the
|
|
127
|
+
# group.
|
|
74
128
|
#
|
|
75
|
-
# @
|
|
76
|
-
# @
|
|
129
|
+
# @since 0.2a
|
|
130
|
+
# @permission new_menu
|
|
77
131
|
#
|
|
78
|
-
def
|
|
79
|
-
|
|
132
|
+
def new
|
|
133
|
+
authorize_user!(:new_menu)
|
|
80
134
|
|
|
81
135
|
set_breadcrumbs(
|
|
82
136
|
Menus.a(lang('menus.titles.index'), :index),
|
|
83
137
|
@page_title
|
|
84
138
|
)
|
|
85
139
|
|
|
86
|
-
|
|
87
|
-
@menu = flash[:form_data]
|
|
88
|
-
else
|
|
89
|
-
@menu = validate_menu(id)
|
|
90
|
-
end
|
|
140
|
+
@menu = ::Menus::Model::Menu.new
|
|
91
141
|
|
|
92
142
|
render_view(:form)
|
|
93
143
|
end
|
|
94
144
|
|
|
95
145
|
##
|
|
96
|
-
# Show a form that
|
|
97
|
-
#
|
|
98
|
-
# group.
|
|
99
|
-
#
|
|
100
|
-
# This method requires the following permissions:
|
|
101
|
-
#
|
|
102
|
-
# * create
|
|
103
|
-
# * read
|
|
146
|
+
# Show a form that allows the user to edit the details (such as the name
|
|
147
|
+
# and slug) of a menu group. This method can not be used to manage all
|
|
148
|
+
# menu items for this group.
|
|
104
149
|
#
|
|
105
|
-
# @
|
|
106
|
-
# @
|
|
150
|
+
# @since 0.2a
|
|
151
|
+
# @param [Fixnum] id The ID of the menu to edit.
|
|
152
|
+
# @permission edit_menu
|
|
107
153
|
#
|
|
108
|
-
def
|
|
109
|
-
|
|
154
|
+
def edit(id)
|
|
155
|
+
authorize_user!(:edit_menu)
|
|
110
156
|
|
|
111
157
|
set_breadcrumbs(
|
|
112
158
|
Menus.a(lang('menus.titles.index'), :index),
|
|
113
159
|
@page_title
|
|
114
160
|
)
|
|
115
161
|
|
|
116
|
-
|
|
162
|
+
if flash[:form_data]
|
|
163
|
+
@menu = flash[:form_data]
|
|
164
|
+
else
|
|
165
|
+
@menu = validate_menu(id)
|
|
166
|
+
end
|
|
117
167
|
|
|
118
168
|
render_view(:form)
|
|
119
169
|
end
|
|
120
170
|
|
|
121
171
|
##
|
|
122
|
-
# Saves
|
|
123
|
-
# using the supplied POST data. In order to detect this forms that contain
|
|
124
|
-
# data of an existing group should have a hidden field named "id", the
|
|
125
|
-
# value of this field is the primary value of the menu group of which the
|
|
126
|
-
# changes should be saved.
|
|
172
|
+
# Saves any changes made to an existing menu or creates a new menu.
|
|
127
173
|
#
|
|
128
|
-
#
|
|
129
|
-
#
|
|
130
|
-
#
|
|
131
|
-
#
|
|
132
|
-
#
|
|
133
|
-
# @
|
|
134
|
-
# @
|
|
174
|
+
# @since 0.2a
|
|
175
|
+
# @event before_edit_menu
|
|
176
|
+
# @event after_edit_menu
|
|
177
|
+
# @event before_new_menu
|
|
178
|
+
# @event after_new_menu
|
|
179
|
+
# @permission edit_menu (when editing an existing menu)
|
|
180
|
+
# @permission new_menu (when creating a new menu)
|
|
135
181
|
#
|
|
136
182
|
def save
|
|
137
183
|
post = request.subset(
|
|
@@ -145,45 +191,46 @@ module Menus
|
|
|
145
191
|
|
|
146
192
|
# Determine if we're creating a new group or modifying an existing one.
|
|
147
193
|
if post.key?('id') and !post['id'].empty?
|
|
148
|
-
|
|
194
|
+
authorize_user!(:edit_menu)
|
|
149
195
|
|
|
150
|
-
|
|
151
|
-
save_action
|
|
196
|
+
menu = validate_menu(post['id'])
|
|
197
|
+
save_action = :save
|
|
198
|
+
before_event = :before_edit_menu
|
|
199
|
+
after_event = :after_edit_menu
|
|
152
200
|
else
|
|
153
|
-
|
|
201
|
+
authorize_user!(:new_menu)
|
|
154
202
|
|
|
155
|
-
|
|
156
|
-
save_action
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
post.delete('slug') if post['slug'].empty?
|
|
203
|
+
menu = ::Menus::Model::Menu.new
|
|
204
|
+
save_action = :new
|
|
205
|
+
before_event = :before_new_menu
|
|
206
|
+
after_event = :after_new_menu
|
|
160
207
|
end
|
|
161
208
|
|
|
162
209
|
post.delete('id')
|
|
163
210
|
|
|
164
|
-
|
|
165
|
-
|
|
211
|
+
success = lang("menus.success.#{save_action}")
|
|
212
|
+
error = lang("menus.errors.#{save_action}")
|
|
166
213
|
|
|
167
214
|
# Let's see if we can insert/update the data
|
|
168
215
|
begin
|
|
169
|
-
|
|
170
|
-
|
|
216
|
+
post.each { |k, v| menu.send("#{k}=", v) }
|
|
217
|
+
Zen::Event.call(before_event, menu)
|
|
218
|
+
|
|
219
|
+
menu.save
|
|
171
220
|
rescue => e
|
|
172
221
|
Ramaze::Log.error(e.inspect)
|
|
173
|
-
message(:error,
|
|
222
|
+
message(:error, error)
|
|
174
223
|
|
|
175
|
-
flash[:form_data] =
|
|
176
|
-
flash[:form_errors] =
|
|
224
|
+
flash[:form_data] = menu
|
|
225
|
+
flash[:form_errors] = menu.errors
|
|
177
226
|
|
|
178
227
|
redirect_referrer
|
|
179
228
|
end
|
|
180
229
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
redirect_referrer
|
|
186
|
-
end
|
|
230
|
+
Zen::Event.call(after_event, menu)
|
|
231
|
+
|
|
232
|
+
message(:success, success)
|
|
233
|
+
redirect(Menus.r(:edit, menu.id))
|
|
187
234
|
end
|
|
188
235
|
|
|
189
236
|
##
|
|
@@ -191,19 +238,16 @@ module Menus
|
|
|
191
238
|
# values. These primary values should be stored in a POST array called
|
|
192
239
|
# "menu_ids".
|
|
193
240
|
#
|
|
194
|
-
#
|
|
195
|
-
#
|
|
196
|
-
#
|
|
197
|
-
#
|
|
198
|
-
# @author Yorick Peterse
|
|
199
|
-
# @since 0.2a
|
|
241
|
+
# @since 0.2a
|
|
242
|
+
# @event before_delete_menu
|
|
243
|
+
# @event after_delete_menu
|
|
244
|
+
# @permission delete_menu
|
|
200
245
|
#
|
|
201
246
|
def delete
|
|
202
|
-
|
|
247
|
+
authorize_user!(:delete_menu)
|
|
203
248
|
|
|
204
249
|
post = request.params.dup
|
|
205
250
|
|
|
206
|
-
# We always require a set of IDs
|
|
207
251
|
if !post['menu_ids'] or post['menu_ids'].empty?
|
|
208
252
|
message(:error, lang('menus.errors.no_delete'))
|
|
209
253
|
redirect_referrer
|
|
@@ -211,14 +255,21 @@ module Menus
|
|
|
211
255
|
|
|
212
256
|
# Time to delete all menus
|
|
213
257
|
post['menu_ids'].each do |id|
|
|
258
|
+
menu = ::Menus::Model::Menu[id]
|
|
259
|
+
|
|
260
|
+
next if menu.nil?
|
|
261
|
+
Zen::Event.call(:before_delete_menu, menu)
|
|
262
|
+
|
|
214
263
|
begin
|
|
215
|
-
|
|
264
|
+
menu.destroy
|
|
216
265
|
rescue => e
|
|
217
266
|
Ramaze::Log.error(e.inspect)
|
|
218
267
|
message(:error, lang('menus.errors.delete') % id)
|
|
219
268
|
|
|
220
269
|
redirect_referrer
|
|
221
270
|
end
|
|
271
|
+
|
|
272
|
+
Zen::Event.call(:after_delete_menu, menu)
|
|
222
273
|
end
|
|
223
274
|
|
|
224
275
|
message(:success, lang('menus.success.delete'))
|