zen 0.1a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +19 -0
- data/MANIFEST +337 -0
- data/README.textile +42 -0
- data/Rakefile +6 -0
- data/bin/zen +9 -0
- data/doc/Categories.html +93 -0
- data/doc/Categories/Controllers.html +93 -0
- data/doc/Categories/Controllers/Categories.html +995 -0
- data/doc/Categories/Controllers/CategoryGroups.html +878 -0
- data/doc/Categories/Models.html +97 -0
- data/doc/Categories/Models/Category.html +269 -0
- data/doc/Categories/Models/CategoryGroup.html +231 -0
- data/doc/Comments.html +93 -0
- data/doc/Comments/Controllers.html +93 -0
- data/doc/Comments/Controllers/Comments.html +797 -0
- data/doc/Comments/Controllers/CommentsForm.html +487 -0
- data/doc/Comments/Liquid.html +93 -0
- data/doc/Comments/Liquid/CommentForm.html +522 -0
- data/doc/Comments/Liquid/Comments.html +543 -0
- data/doc/Comments/Models.html +95 -0
- data/doc/Comments/Models/Comment.html +260 -0
- data/doc/CustomFields.html +93 -0
- data/doc/CustomFields/Controllers.html +93 -0
- data/doc/CustomFields/Controllers/CustomFieldGroups.html +902 -0
- data/doc/CustomFields/Controllers/CustomFields.html +974 -0
- data/doc/CustomFields/Models.html +97 -0
- data/doc/CustomFields/Models/CustomField.html +272 -0
- data/doc/CustomFields/Models/CustomFieldGroup.html +259 -0
- data/doc/CustomFields/Models/CustomFieldValue.html +154 -0
- data/doc/Ramaze.html +93 -0
- data/doc/Ramaze/Helper.html +93 -0
- data/doc/Ramaze/Helper/ACL.html +531 -0
- data/doc/Ramaze/Helper/Asset.html +617 -0
- data/doc/Ramaze/Helper/Breadcrumb.html +411 -0
- data/doc/Ramaze/Helper/Common.html +738 -0
- data/doc/Sections.html +93 -0
- data/doc/Sections/Controllers.html +93 -0
- data/doc/Sections/Controllers/SectionEntries.html +1100 -0
- data/doc/Sections/Controllers/Sections.html +953 -0
- data/doc/Sections/Liquid.html +93 -0
- data/doc/Sections/Liquid/SectionEntries.html +674 -0
- data/doc/Sections/Liquid/Sections.html +494 -0
- data/doc/Sections/Models.html +97 -0
- data/doc/Sections/Models/Section.html +272 -0
- data/doc/Sections/Models/SectionEntry.html +264 -0
- data/doc/Sequel.html +91 -0
- data/doc/Sequel/Model.html +243 -0
- data/doc/Settings.html +93 -0
- data/doc/Settings/Controllers.html +91 -0
- data/doc/Settings/Controllers/Settings.html +565 -0
- data/doc/Settings/Liquid.html +91 -0
- data/doc/Settings/Liquid/Setting.html +426 -0
- data/doc/Settings/Models.html +95 -0
- data/doc/Settings/Models/Setting.html +293 -0
- data/doc/Users.html +93 -0
- data/doc/Users/Controllers.html +93 -0
- data/doc/Users/Controllers/AccessRules.html +904 -0
- data/doc/Users/Controllers/UserGroups.html +879 -0
- data/doc/Users/Controllers/Users.html +1124 -0
- data/doc/Users/Liquid.html +93 -0
- data/doc/Users/Liquid/User.html +480 -0
- data/doc/Users/Liquid/Users.html +495 -0
- data/doc/Users/Models.html +97 -0
- data/doc/Users/Models/AccessRule.html +257 -0
- data/doc/Users/Models/User.html +649 -0
- data/doc/Users/Models/UserGroup.html +267 -0
- data/doc/Zen.html +391 -0
- data/doc/Zen/Bin.html +113 -0
- data/doc/Zen/Bin/Base.html +727 -0
- data/doc/Zen/Controllers.html +115 -0
- data/doc/Zen/Controllers/AdminController.html +298 -0
- data/doc/Zen/Controllers/BaseController.html +272 -0
- data/doc/Zen/Controllers/FrontendController.html +164 -0
- data/doc/Zen/Controllers/MainController.html +421 -0
- data/doc/Zen/Database.html +498 -0
- data/doc/Zen/Language.html +660 -0
- data/doc/Zen/Liquid.html +117 -0
- data/doc/Zen/Liquid/ControllerBehavior.html +448 -0
- data/doc/Zen/Liquid/General.html +444 -0
- data/doc/Zen/Liquid/Redirect.html +435 -0
- data/doc/Zen/Liquid/Strip.html +447 -0
- data/doc/Zen/Logger.html +393 -0
- data/doc/Zen/Package.html +909 -0
- data/doc/_index.html +724 -0
- data/doc/class_list.html +36 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +53 -0
- data/doc/css/style.css +310 -0
- data/doc/file.README.html +86 -0
- data/doc/file_list.html +38 -0
- data/doc/frames.html +13 -0
- data/doc/index.html +86 -0
- data/doc/js/app.js +203 -0
- data/doc/js/full_list.js +149 -0
- data/doc/js/jquery.js +154 -0
- data/doc/method_list.html +1139 -0
- data/doc/top-level-namespace.html +88 -0
- data/lib/zen.rb +77 -0
- data/lib/zen/base/database.rb +105 -0
- data/lib/zen/base/language.rb +132 -0
- data/lib/zen/base/logger.rb +54 -0
- data/lib/zen/base/package.rb +233 -0
- data/lib/zen/base/version.rb +11 -0
- data/lib/zen/bin/zen_binary.rb +173 -0
- data/lib/zen/controller/admin_controller.rb +60 -0
- data/lib/zen/controller/base_controller.rb +39 -0
- data/lib/zen/controller/frontend_controller.rb +16 -0
- data/lib/zen/controller/main_controller.rb +93 -0
- data/lib/zen/helper/acl.rb +124 -0
- data/lib/zen/helper/asset.rb +104 -0
- data/lib/zen/helper/breadcrumb.rb +71 -0
- data/lib/zen/helper/common.rb +157 -0
- data/lib/zen/language/en/zen_general.rb +21 -0
- data/lib/zen/language/en/zen_models.rb +39 -0
- data/lib/zen/layout/admin.xhtml +72 -0
- data/lib/zen/layout/login.xhtml +44 -0
- data/lib/zen/liquid/controller_behavior.rb +55 -0
- data/lib/zen/liquid/general.rb +69 -0
- data/lib/zen/liquid/redirect.rb +47 -0
- data/lib/zen/liquid/strip.rb +58 -0
- data/lib/zen/model/methods.rb +26 -0
- data/lib/zen/model/settings.rb +27 -0
- data/lib/zen/packages/categories/LICENSE +19 -0
- data/lib/zen/packages/categories/README.textile +0 -0
- data/lib/zen/packages/categories/lib/categories.rb +24 -0
- data/lib/zen/packages/categories/lib/categories/controller/categories.rb +202 -0
- data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +173 -0
- data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +38 -0
- data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +37 -0
- data/lib/zen/packages/categories/lib/categories/model/category.rb +42 -0
- data/lib/zen/packages/categories/lib/categories/model/category_group.rb +29 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +36 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +70 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +18 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +72 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +7 -0
- data/lib/zen/packages/categories/migrations/.gitkeep +0 -0
- data/lib/zen/packages/categories/migrations/1295282303_create_schema.rb +40 -0
- data/lib/zen/packages/comments/LICENSE +19 -0
- data/lib/zen/packages/comments/README.textile +0 -0
- data/lib/zen/packages/comments/lib/comments.rb +26 -0
- data/lib/zen/packages/comments/lib/comments/controller/comments.rb +157 -0
- data/lib/zen/packages/comments/lib/comments/controller/comments_form.rb +135 -0
- data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +52 -0
- data/lib/zen/packages/comments/lib/comments/liquid/comment_form.rb +97 -0
- data/lib/zen/packages/comments/lib/comments/liquid/comments.rb +115 -0
- data/lib/zen/packages/comments/lib/comments/model/comment.rb +34 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +31 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +74 -0
- data/lib/zen/packages/comments/migrations/.gitkeep +0 -0
- data/lib/zen/packages/comments/migrations/1295282202_create_schema.rb +24 -0
- data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +11 -0
- data/lib/zen/packages/custom_fields/LICENSE +19 -0
- data/lib/zen/packages/custom_fields/README.textile +0 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields.rb +24 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +179 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +194 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +45 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +64 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field.rb +41 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_group.rb +32 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_value.rb +20 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +18 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +88 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +50 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +75 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +7 -0
- data/lib/zen/packages/custom_fields/migrations/.gitkeep +0 -0
- data/lib/zen/packages/custom_fields/migrations/1295255665_create_schema.rb +53 -0
- data/lib/zen/packages/sections/LICENSE +19 -0
- data/lib/zen/packages/sections/README.textile +43 -0
- data/lib/zen/packages/sections/lib/sections.rb +33 -0
- data/lib/zen/packages/sections/lib/sections/controller/section_entries.rb +251 -0
- data/lib/zen/packages/sections/lib/sections/controller/sections.rb +205 -0
- data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +58 -0
- data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +63 -0
- data/lib/zen/packages/sections/lib/sections/liquid/section_entries.rb +209 -0
- data/lib/zen/packages/sections/lib/sections/liquid/sections.rb +76 -0
- data/lib/zen/packages/sections/lib/sections/model/section.rb +43 -0
- data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +43 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +54 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +77 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +147 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +74 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +7 -0
- data/lib/zen/packages/sections/migrations/.gitkeep +0 -0
- data/lib/zen/packages/sections/migrations/1295251836_create_schema.rb +35 -0
- data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +18 -0
- data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +11 -0
- data/lib/zen/packages/settings/LICENSE +0 -0
- data/lib/zen/packages/settings/README.textile +0 -0
- data/lib/zen/packages/settings/lib/settings.rb +22 -0
- data/lib/zen/packages/settings/lib/settings/controller/settings.rb +113 -0
- data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +56 -0
- data/lib/zen/packages/settings/lib/settings/liquid/setting.rb +56 -0
- data/lib/zen/packages/settings/lib/settings/model/setting.rb +38 -0
- data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +79 -0
- data/lib/zen/packages/settings/migrations/.gitkeep +0 -0
- data/lib/zen/packages/settings/migrations/1295597111_create_schema.rb +31 -0
- data/lib/zen/packages/users/LICENSE +19 -0
- data/lib/zen/packages/users/README.textile +0 -0
- data/lib/zen/packages/users/lib/users.rb +35 -0
- data/lib/zen/packages/users/lib/users/controller/access_rules.rb +186 -0
- data/lib/zen/packages/users/lib/users/controller/user_groups.rb +171 -0
- data/lib/zen/packages/users/lib/users/controller/users.rb +240 -0
- data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +49 -0
- data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +42 -0
- data/lib/zen/packages/users/lib/users/language/en/users.rb +63 -0
- data/lib/zen/packages/users/lib/users/liquid/user.rb +75 -0
- data/lib/zen/packages/users/lib/users/liquid/users.rb +80 -0
- data/lib/zen/packages/users/lib/users/model/access_rule.rb +29 -0
- data/lib/zen/packages/users/lib/users/model/user.rb +96 -0
- data/lib/zen/packages/users/lib/users/model/user_group.rb +38 -0
- data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +43 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +68 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +85 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +19 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +69 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +25 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +73 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +22 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +7 -0
- data/lib/zen/packages/users/migrations/.gitkeep +0 -0
- data/lib/zen/packages/users/migrations/1295281013_create_schema.rb +54 -0
- data/lib/zen/public/admin/css/boilerplate.css +174 -0
- data/lib/zen/public/admin/css/general.css +485 -0
- data/lib/zen/public/admin/css/grid.css +119 -0
- data/lib/zen/public/admin/css/layout.css +111 -0
- data/lib/zen/public/admin/images/general/noise.jpg +0 -0
- data/lib/zen/public/admin/images/icons/accept.png +0 -0
- data/lib/zen/public/admin/images/icons/add.png +0 -0
- data/lib/zen/public/admin/images/icons/back.png +0 -0
- data/lib/zen/public/admin/images/icons/bold.png +0 -0
- data/lib/zen/public/admin/images/icons/close.png +0 -0
- data/lib/zen/public/admin/images/icons/delete.png +0 -0
- data/lib/zen/public/admin/images/icons/edit.png +0 -0
- data/lib/zen/public/admin/images/icons/error.png +0 -0
- data/lib/zen/public/admin/images/icons/help.png +0 -0
- data/lib/zen/public/admin/images/icons/info.png +0 -0
- data/lib/zen/public/admin/images/icons/italic.png +0 -0
- data/lib/zen/public/admin/images/icons/large/error.png +0 -0
- data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
- data/lib/zen/public/admin/images/icons/large/success.png +0 -0
- data/lib/zen/public/admin/images/icons/link.png +0 -0
- data/lib/zen/public/admin/images/icons/logout.png +0 -0
- data/lib/zen/public/admin/images/icons/ol.png +0 -0
- data/lib/zen/public/admin/images/icons/pdf.png +0 -0
- data/lib/zen/public/admin/images/icons/ul.png +0 -0
- data/lib/zen/public/admin/images/icons/user.png +0 -0
- data/lib/zen/public/admin/images/icons/view.png +0 -0
- data/lib/zen/public/admin/js/mootools/core.js +436 -0
- data/lib/zen/public/admin/js/mootools/more.js +288 -0
- data/lib/zen/public/admin/js/zen/editor/base.js +265 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/html.js +104 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +102 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +102 -0
- data/lib/zen/public/admin/js/zen/init.js +57 -0
- data/lib/zen/public/admin/js/zen/modal.js +159 -0
- data/lib/zen/public/admin/js/zen/notification.js +213 -0
- data/lib/zen/public/admin/js/zen/tabs.js +263 -0
- data/lib/zen/tasks.rb +6 -0
- data/pkg/.gitkeep +0 -0
- data/proto/app/Rakefile +2 -0
- data/proto/app/app.rb +20 -0
- data/proto/app/config.ru +18 -0
- data/proto/app/config/config.rb +17 -0
- data/proto/app/config/database.rb +18 -0
- data/proto/app/config/middlewares.rb +23 -0
- data/proto/app/config/requires.rb +8 -0
- data/proto/app/logs/.gitkeep +0 -0
- data/proto/app/public/.gitkeep +0 -0
- data/proto/app/start.rb +22 -0
- data/proto/app/vendor/.gitkeep +0 -0
- data/proto/app/vendor/themes/.gitkeep +0 -0
- data/proto/migration.rb +11 -0
- data/proto/module/LICENSE +0 -0
- data/proto/module/README.textile +0 -0
- data/proto/module/lib/module.rb +15 -0
- data/proto/module/lib/module/controller/controllers.rb +86 -0
- data/proto/module/lib/module/language/en/languages.rb +3 -0
- data/proto/module/lib/module/model/model.rb +12 -0
- data/proto/module/lib/module/view/admin/edit.xhtml +0 -0
- data/proto/module/lib/module/view/admin/form.xhtml +0 -0
- data/proto/module/lib/module/view/admin/index.xhtml +0 -0
- data/proto/module/lib/module/view/admin/new.xhtml +0 -0
- data/proto/module/migrations/.gitkeep +0 -0
- data/spec/javascript/css/base.css +177 -0
- data/spec/javascript/css/style.css +204 -0
- data/spec/javascript/css/typography.css +70 -0
- data/spec/javascript/editor/index.html +65 -0
- data/spec/javascript/images/close.png +0 -0
- data/spec/javascript/images/info.png +0 -0
- data/spec/javascript/js/editor.js +16 -0
- data/spec/javascript/js/modal.js +12 -0
- data/spec/javascript/js/namespace.js +2 -0
- data/spec/javascript/js/notification.js +43 -0
- data/spec/javascript/js/tabs.js +8 -0
- data/spec/javascript/modal/index.html +45 -0
- data/spec/javascript/notification/index.html +48 -0
- data/spec/javascript/tabs/index.html +73 -0
- data/spec/javascript/tabs/tab_1.html +1 -0
- data/spec/javascript/tabs/tab_2.html +1 -0
- data/spec/zen/base/language.rb +31 -0
- data/spec/zen/base/logger.rb +34 -0
- data/spec/zen/base/package.rb +47 -0
- data/spec/zen/config/database.rb +8 -0
- data/spec/zen/helper/asset.rb +26 -0
- data/spec/zen/helper/breadcrumb.rb +24 -0
- data/spec/zen/language/en/general.rb +4 -0
- data/spec/zen/language/nl/general.rb +4 -0
- data/spec/zen/liquid/general.rb +42 -0
- data/spec/zen/logs/.gitkeep +0 -0
- data/spec/zen/spec.rb +9 -0
- data/spec/zen/spec_database.db +0 -0
- data/tasks/bacon.rake +99 -0
- data/tasks/build.rake +72 -0
- data/tasks/clean.rake +18 -0
- data/tasks/db.rake +81 -0
- data/tasks/doc.rake +5 -0
- data/tasks/extension.rake +65 -0
- data/tasks/proto.rake +37 -0
- data/tasks/theme.rake +63 -0
- metadata +512 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
module CustomFields
|
|
2
|
+
module Controllers
|
|
3
|
+
##
|
|
4
|
+
# Controller for managing custom fields. Custom fields are one of
|
|
5
|
+
# the most important elements in Zen. Custom fields can be used to
|
|
6
|
+
# create radio buttons, textareas, the whole shebang. Before
|
|
7
|
+
# being able to use a custom field you'll need to add it to a group
|
|
8
|
+
# and bind that group to a section.
|
|
9
|
+
#
|
|
10
|
+
# @author Yorick Peterse
|
|
11
|
+
# @since 0.1
|
|
12
|
+
#
|
|
13
|
+
class CustomFields < Zen::Controllers::AdminController
|
|
14
|
+
map '/admin/custom_fields'
|
|
15
|
+
|
|
16
|
+
trait :extension_identifier => 'com.zen.custom_fields'
|
|
17
|
+
|
|
18
|
+
include ::CustomFields::Models
|
|
19
|
+
|
|
20
|
+
before_all do
|
|
21
|
+
csrf_protection :save, :delete do
|
|
22
|
+
respond(@zen_general_lang.errors[:csrf], 401)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
##
|
|
27
|
+
# Constructor method, called upon initialization. It's used to set the
|
|
28
|
+
# URL to which forms send their data and load the language pack.
|
|
29
|
+
#
|
|
30
|
+
# @author Yorick Peterse
|
|
31
|
+
# @since 0.1
|
|
32
|
+
#
|
|
33
|
+
def initialize
|
|
34
|
+
super
|
|
35
|
+
|
|
36
|
+
@form_save_url = '/admin/custom_fields/save'
|
|
37
|
+
@form_delete_url = '/admin/custom_fields/delete'
|
|
38
|
+
@fields_lang = Zen::Language.load 'custom_fields'
|
|
39
|
+
@field_groups_lang = Zen::Language.load 'custom_field_groups'
|
|
40
|
+
|
|
41
|
+
# Set the page title
|
|
42
|
+
if !action.method.nil?
|
|
43
|
+
method = action.method.to_sym
|
|
44
|
+
|
|
45
|
+
if @fields_lang.titles.key? method
|
|
46
|
+
@page_title = @fields_lang.titles[method]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# Show an overview of all existing custom fields. Using this overview a user
|
|
53
|
+
# can manage an existing field, delete it or create a new one.
|
|
54
|
+
#
|
|
55
|
+
# @author Yorick Peterse
|
|
56
|
+
# @param [Integer] custom_field_group_id The ID of the custom field group to which all fields belong.
|
|
57
|
+
# @since 0.1
|
|
58
|
+
#
|
|
59
|
+
def index custom_field_group_id
|
|
60
|
+
if !user_authorized?([:read])
|
|
61
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
set_breadcrumbs anchor_to(@field_groups_lang.titles[:index], "admin/custom_field_groups"),
|
|
65
|
+
@fields_lang.titles[:index]
|
|
66
|
+
|
|
67
|
+
@custom_field_group_id = custom_field_group_id
|
|
68
|
+
@custom_fields = CustomFieldGroup[@custom_field_group_id].custom_fields
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
# Show a form that lets the user edit an existing custom field group.
|
|
73
|
+
#
|
|
74
|
+
# @author Yorick Peterse
|
|
75
|
+
# @param [Integer] custom_field_group_id The ID of the custom field group to which all fields belong.
|
|
76
|
+
# @param [Integer] id The ID of the custom field to retrieve so that we can edit it.
|
|
77
|
+
# @since 0.1
|
|
78
|
+
#
|
|
79
|
+
def edit custom_field_group_id, id
|
|
80
|
+
if !user_authorized?([:read, :update])
|
|
81
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
set_breadcrumbs anchor_to(@field_groups_lang.titles[:index], "admin/custom_field_groups"),
|
|
85
|
+
anchor_to(@fields_lang.titles[:index], "admin/custom_fields/#{custom_field_group_id}"),
|
|
86
|
+
@fields_lang.titles[:edit]
|
|
87
|
+
|
|
88
|
+
@custom_field_group_id = custom_field_group_id
|
|
89
|
+
@custom_field = CustomField[id]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
##
|
|
93
|
+
# Show a form that lets the user create a new custom field group.
|
|
94
|
+
#
|
|
95
|
+
# @author Yorick Peterse
|
|
96
|
+
# @param [Integer] custom_field_group_id The ID of the custom field group to which all fields belong.
|
|
97
|
+
# @since 0.1
|
|
98
|
+
#
|
|
99
|
+
def new custom_field_group_id
|
|
100
|
+
if !user_authorized?([:read, :create])
|
|
101
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
set_breadcrumbs anchor_to(@field_groups_lang.titles[:index], "admin/custom_field_groups"),
|
|
105
|
+
anchor_to(@fields_lang.titles[:index], "admin/custom_fields/#{custom_field_group_id}"),
|
|
106
|
+
@fields_lang.titles[:index]
|
|
107
|
+
|
|
108
|
+
@custom_field_group_id = custom_field_group_id
|
|
109
|
+
@custom_field = CustomField.new
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
##
|
|
113
|
+
# Method used for processing the form data and redirecting the user back to
|
|
114
|
+
# the proper URL. Based on the value of a hidden field named "id" we'll determine
|
|
115
|
+
# if the data will be used to create a new custom field or to update an existing one.
|
|
116
|
+
#
|
|
117
|
+
# @author Yorick Peterse
|
|
118
|
+
# @since 0.1
|
|
119
|
+
#
|
|
120
|
+
def save
|
|
121
|
+
if !user_authorized?([:create, :update])
|
|
122
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
post = request.params.dup
|
|
126
|
+
custom_field_group_id = post["custom_field_group_id"]
|
|
127
|
+
|
|
128
|
+
post.each do |key, value|
|
|
129
|
+
post.delete(key) if value.empty?
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Get or create a custom field group based on the ID from the hidden field.
|
|
133
|
+
if post["id"] and !post["id"].empty?
|
|
134
|
+
@custom_field = CustomField[post["id"]]
|
|
135
|
+
save_action = :save
|
|
136
|
+
else
|
|
137
|
+
@custom_field = CustomField.new
|
|
138
|
+
save_action = :new
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
flash_success = @fields_lang.success[save_action]
|
|
142
|
+
flash_error = @fields_lang.errors[save_action]
|
|
143
|
+
|
|
144
|
+
begin
|
|
145
|
+
@custom_field.update(post)
|
|
146
|
+
notification(:success, @fields_lang.titles[:index], flash_success)
|
|
147
|
+
rescue
|
|
148
|
+
notification(:error, @fields_lang.titles[:index], flash_error)
|
|
149
|
+
flash[:form_errors] = @custom_field.errors
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
if @custom_field.id
|
|
153
|
+
redirect "/admin/custom_fields/edit/#{custom_field_group_id}/#{@custom_field.id}"
|
|
154
|
+
else
|
|
155
|
+
redirect "/admin/custom_fields/new/#{custom_field_group_id}"
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
##
|
|
160
|
+
# Delete an existing custom field.
|
|
161
|
+
#
|
|
162
|
+
# In order to delete a custom field group you'll need to send a POST request that contains
|
|
163
|
+
# a field named "custom_field_ids[]". This field should contain the primary values of
|
|
164
|
+
# each field that has to be deleted.
|
|
165
|
+
#
|
|
166
|
+
# @author Yorick Peterse
|
|
167
|
+
# @since 0.1
|
|
168
|
+
#
|
|
169
|
+
def delete
|
|
170
|
+
if !user_authorized?([:delete])
|
|
171
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
if !request.params["custom_field_ids"] or request.params["custom_field_ids"].empty?
|
|
175
|
+
notification(:error, @fields_lang.titles[:index], @fields_lang.errors[:no_delete])
|
|
176
|
+
redirect "/admin/custom_fields/index/#{post['custom_field_group_id']}"
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
request.params["custom_field_ids"].each do |id|
|
|
180
|
+
@custom_field = CustomField[id]
|
|
181
|
+
|
|
182
|
+
begin
|
|
183
|
+
@custom_field.delete
|
|
184
|
+
notification(:success, @fields_lang.titles[:index], @fields_lang.success[:delete] % id)
|
|
185
|
+
rescue
|
|
186
|
+
notification(:error, @fields_lang.titles[:index], @fields_lang.errors[:delete] % id)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
redirect "/admin/custom_fields/index/#{request.params['custom_field_group_id']}"
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Zen::Language.translation 'custom_field_groups' do |item|
|
|
2
|
+
# Page titles
|
|
3
|
+
item.titles = {
|
|
4
|
+
:index => 'Custom Field Groups',
|
|
5
|
+
:edit => 'Edit Custom Field Group',
|
|
6
|
+
:new => 'Add Custom Field Group'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# Labels
|
|
10
|
+
item.labels = {
|
|
11
|
+
:id => '#',
|
|
12
|
+
:name => 'Name',
|
|
13
|
+
:description => 'Description',
|
|
14
|
+
:sections => 'Sections',
|
|
15
|
+
:manage_fields => 'Manage Custom Fields',
|
|
16
|
+
:none => 'None'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
# General messages
|
|
20
|
+
item.messages = {
|
|
21
|
+
:no_groups => 'It seems you haven\'t created any custom field groups yet.'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
# Error specific messages
|
|
25
|
+
item.errors = {
|
|
26
|
+
:new => "Failed to create a new custom field group.",
|
|
27
|
+
:save => "Failed to save the custom field group.",
|
|
28
|
+
:delete => "Failed to delete the custom field group with ID #%s",
|
|
29
|
+
:no_delete => "You haven't specified any custom field groups to delete."
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# Success messages
|
|
33
|
+
item.success = {
|
|
34
|
+
:new => "The new custom field group has been created.",
|
|
35
|
+
:save => "The custom field group has been modified.",
|
|
36
|
+
:delete => "The custom field group with ID #%s has been deleted."
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# Buttons
|
|
40
|
+
item.buttons = {
|
|
41
|
+
:new_group => 'New group',
|
|
42
|
+
:delete_groups => 'Delete selected groups',
|
|
43
|
+
:save_group => 'Save group'
|
|
44
|
+
}
|
|
45
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
Zen::Language.translation 'custom_fields' do |item|
|
|
2
|
+
# Page titles
|
|
3
|
+
item.titles = {
|
|
4
|
+
:index => 'Custom Fields',
|
|
5
|
+
:edit => 'Edit Custom Field',
|
|
6
|
+
:new => 'Add Custom Field'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# Labels
|
|
10
|
+
item.labels = {
|
|
11
|
+
:id => '#',
|
|
12
|
+
:name => 'Name',
|
|
13
|
+
:slug => 'Slug',
|
|
14
|
+
:type => 'Type',
|
|
15
|
+
:format => 'Format',
|
|
16
|
+
:description => 'Description',
|
|
17
|
+
:possible_values => 'Possible values (one value per line)',
|
|
18
|
+
:required => 'Requires a value',
|
|
19
|
+
:visual_editor => 'Enable the visual editor',
|
|
20
|
+
:textarea_rows => 'Textarea rows',
|
|
21
|
+
:text_limit => 'Character limit',
|
|
22
|
+
:sort_order => 'Sort order'
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
item.tabs = {
|
|
26
|
+
:general => 'General',
|
|
27
|
+
:settings => 'Settings'
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# General messages
|
|
31
|
+
item.messages = {
|
|
32
|
+
:no_fields => 'It seems you haven\'t created any custom fields yet.'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# Error specific messages
|
|
36
|
+
item.errors = {
|
|
37
|
+
:new => "Failed to create a new custom field.",
|
|
38
|
+
:save => "Failed to save the custom field.",
|
|
39
|
+
:delete => "Failed to delete the custom field with ID #%s",
|
|
40
|
+
:no_delete => "You haven't specified any custom fields to delete."
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# Success messages
|
|
44
|
+
item.success = {
|
|
45
|
+
:new => "The new custom field has been created.",
|
|
46
|
+
:save => "The custom field has been modified.",
|
|
47
|
+
:delete => "The custom field with ID #%s has been deleted."
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Special items such as hashes for field types
|
|
51
|
+
item.special = {
|
|
52
|
+
:format_hash => {"html" => "HTML", "textile" => "Textile", "markdown" => "Markdown", "plain" => "Plain"},
|
|
53
|
+
:type_hash => {"textbox" => "Textbox", "textarea" => "Textarea", "radio" => "Radio button",
|
|
54
|
+
"checkbox" => "Checkbox", "date" => "Date", "select" => "Select", "select_multiple" => "Multi select"},
|
|
55
|
+
:boolean_hash => {"Yes" => true, "No" => false}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# Buttons
|
|
59
|
+
item.buttons = {
|
|
60
|
+
:new_field => 'New field',
|
|
61
|
+
:delete_fields => 'Delete selected fields',
|
|
62
|
+
:save_field => 'Save field'
|
|
63
|
+
}
|
|
64
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module CustomFields
|
|
2
|
+
module Models
|
|
3
|
+
##
|
|
4
|
+
# Model that represents a single custom field. This model has the following
|
|
5
|
+
# relations:
|
|
6
|
+
#
|
|
7
|
+
# * custom field values (one to many)
|
|
8
|
+
#
|
|
9
|
+
# The following plugins are loaded:
|
|
10
|
+
#
|
|
11
|
+
# * sluggable (source: "name")
|
|
12
|
+
#
|
|
13
|
+
# When creating or saving a new custom field several validation rules are used.
|
|
14
|
+
# For more information on these rules see the validate() method of this model.
|
|
15
|
+
#
|
|
16
|
+
# @author Yorick Peterse
|
|
17
|
+
# @since 0.1
|
|
18
|
+
#
|
|
19
|
+
class CustomField < Sequel::Model
|
|
20
|
+
one_to_many :custom_field_values, :class => "CustomFields::Models::CustomFieldValue"
|
|
21
|
+
|
|
22
|
+
plugin :sluggable, :source => :name, :freeze => false
|
|
23
|
+
|
|
24
|
+
##
|
|
25
|
+
# Validates rules used whenever the model is created or saved.
|
|
26
|
+
#
|
|
27
|
+
# @author Yorick Peterse
|
|
28
|
+
# @since 0.1
|
|
29
|
+
#
|
|
30
|
+
def validate
|
|
31
|
+
validates_presence [:name, :type, :format, :required, :visual_editor]
|
|
32
|
+
validates_presence :slug unless new?
|
|
33
|
+
validates_max_length 255 , [:name]
|
|
34
|
+
validates_type TrueClass , [:required, :visual_editor]
|
|
35
|
+
validates_integer [:sort_order, :textarea_rows, :text_limit]
|
|
36
|
+
|
|
37
|
+
validates_unique :slug
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module CustomFields
|
|
2
|
+
module Models
|
|
3
|
+
##
|
|
4
|
+
# Model that represents a single custom field group. This model has
|
|
5
|
+
# the following relations:
|
|
6
|
+
#
|
|
7
|
+
# * custom fields (one to many, ordered by "sort_order")
|
|
8
|
+
# * sections (many to many)
|
|
9
|
+
#
|
|
10
|
+
# When creating or saving a group you are required to specify a "name" field.
|
|
11
|
+
# This field may also be no longer than 255 characters.
|
|
12
|
+
#
|
|
13
|
+
# @author Yorick Peterse
|
|
14
|
+
# @since 0.1
|
|
15
|
+
#
|
|
16
|
+
class CustomFieldGroup < Sequel::Model
|
|
17
|
+
one_to_many :custom_fields, :class => "CustomFields::Models::CustomField", :order => :sort_order
|
|
18
|
+
many_to_many :sections , :class => "Sections::Models::Section"
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# Validates rules used whenever the model is created or saved.
|
|
22
|
+
#
|
|
23
|
+
# @author Yorick Peterse
|
|
24
|
+
# @since 0.1
|
|
25
|
+
#
|
|
26
|
+
def validate
|
|
27
|
+
validates_presence [:name]
|
|
28
|
+
validates_max_length 255, [:name]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module CustomFields
|
|
2
|
+
module Models
|
|
3
|
+
##
|
|
4
|
+
# Model that represents a single custom field value. This model
|
|
5
|
+
# has the following relations:
|
|
6
|
+
#
|
|
7
|
+
# * custom field (many to one)
|
|
8
|
+
# * section entry (many to one)
|
|
9
|
+
#
|
|
10
|
+
# This model is basically just a join table with some extra columns.
|
|
11
|
+
#
|
|
12
|
+
# @author Yorick Peterse
|
|
13
|
+
# @since 0.1
|
|
14
|
+
#
|
|
15
|
+
class CustomFieldValue < Sequel::Model
|
|
16
|
+
many_to_one :custom_field , :class => "CustomFields::Models::CustomField"
|
|
17
|
+
many_to_one :section_entry, :class => "Sections::Models::SectionEntry"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#{
|
|
2
|
+
form_for(@field_group, :method => :post, :action => @form_save_url) do |f|
|
|
3
|
+
f.input_hidden :id, @field_group.id
|
|
4
|
+
f.input_hidden :csrf_token, get_csrf_token
|
|
5
|
+
|
|
6
|
+
f.g.div :id => 'general' do
|
|
7
|
+
f.input_text @field_groups_lang.labels[:name], :name
|
|
8
|
+
|
|
9
|
+
f.textarea @field_groups_lang.labels[:description], :description, :rows => 8
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
f.g.div :class => "clearfix" do
|
|
13
|
+
f.g.div :class => "button" do
|
|
14
|
+
f.g.input :type => 'submit', :value => @field_groups_lang.buttons[:save_group]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
}
|
data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<article>
|
|
2
|
+
<header>
|
|
3
|
+
<h1>#{get_breadcrumbs}</h1>
|
|
4
|
+
</header>
|
|
5
|
+
|
|
6
|
+
<form method="post" action="#{@form_delete_url}">
|
|
7
|
+
<input type="hidden" name="csrf_token" value="#{get_csrf_token}" />
|
|
8
|
+
|
|
9
|
+
<?r if @field_groups and !@field_groups.empty? ?>
|
|
10
|
+
|
|
11
|
+
<table class="table">
|
|
12
|
+
<thead>
|
|
13
|
+
<tr>
|
|
14
|
+
<?r if user_authorized?([:delete]) ?>
|
|
15
|
+
<th>
|
|
16
|
+
<input type="checkbox" />
|
|
17
|
+
</th>
|
|
18
|
+
<?r end ?>
|
|
19
|
+
|
|
20
|
+
<th>#{@field_groups_lang.labels[:id]}</th>
|
|
21
|
+
<th>#{@field_groups_lang.labels[:name]}</th>
|
|
22
|
+
<th>#{@field_groups_lang.labels[:sections]}</th>
|
|
23
|
+
|
|
24
|
+
<?r if user_authorized?([:create]) ?>
|
|
25
|
+
<th></th>
|
|
26
|
+
<?r end ?>
|
|
27
|
+
|
|
28
|
+
</tr>
|
|
29
|
+
</thead>
|
|
30
|
+
<tbody>
|
|
31
|
+
<?r @field_groups.each do |group| ?>
|
|
32
|
+
<tr>
|
|
33
|
+
<?r if user_authorized?([:delete]) ?>
|
|
34
|
+
<td>
|
|
35
|
+
<input type="checkbox" name="custom_field_group_ids[]" value="#{group.id}" />
|
|
36
|
+
</td>
|
|
37
|
+
<?r end ?>
|
|
38
|
+
|
|
39
|
+
<td>#{group.id}</td>
|
|
40
|
+
|
|
41
|
+
<?r if user_authorized?([:update]) ?>
|
|
42
|
+
<td>#{anchor_to(group.name, "admin/custom_field_groups/edit/#{group.id}", :title => group.name)}</td>
|
|
43
|
+
<?r else ?>
|
|
44
|
+
<td>#{group.name}</td>
|
|
45
|
+
<?r end ?>
|
|
46
|
+
|
|
47
|
+
<td>
|
|
48
|
+
<?r sections = group.sections.map { |s| s.name } ?>
|
|
49
|
+
|
|
50
|
+
<?r if !sections.empty? ?>
|
|
51
|
+
#{sections.join(', ')}
|
|
52
|
+
<?r else ?>
|
|
53
|
+
#{@field_groups_lang.labels[:none]}
|
|
54
|
+
<?r end ?>
|
|
55
|
+
</td>
|
|
56
|
+
|
|
57
|
+
<?r if user_authorized?([:create]) ?>
|
|
58
|
+
<td>#{anchor_to(@field_groups_lang.labels[:manage_fields], "admin/custom_fields/index/#{group.id}", :title => @field_groups_lang.labels[:manage_fields])}</td>
|
|
59
|
+
<?r end ?>
|
|
60
|
+
|
|
61
|
+
</tr>
|
|
62
|
+
<?r end ?>
|
|
63
|
+
</tbody>
|
|
64
|
+
</table>
|
|
65
|
+
|
|
66
|
+
<?r else ?>
|
|
67
|
+
|
|
68
|
+
<p>#{@field_groups_lang.messages[:no_groups]}</p>
|
|
69
|
+
|
|
70
|
+
<?r end ?>
|
|
71
|
+
|
|
72
|
+
<div class="clearfix">
|
|
73
|
+
|
|
74
|
+
<?r if user_authorized?([:create]) ?>
|
|
75
|
+
<div class="button">
|
|
76
|
+
#{anchor_to(@field_groups_lang.buttons[:new_group], "admin/custom_field_groups/new")}
|
|
77
|
+
</div>
|
|
78
|
+
<?r end ?>
|
|
79
|
+
|
|
80
|
+
<?r if user_authorized?([:delete]) and @field_groups and !@field_groups.empty? ?>
|
|
81
|
+
<div class="button">
|
|
82
|
+
<input type="submit" value="#{@field_groups_lang.buttons[:delete_groups]}" />
|
|
83
|
+
</div>
|
|
84
|
+
<?r end ?>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
</form>
|
|
88
|
+
</article>
|