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,205 @@
|
|
|
1
|
+
module Sections
|
|
2
|
+
module Controllers
|
|
3
|
+
##
|
|
4
|
+
# Sections can be seen as mini applications inside your website.
|
|
5
|
+
# Examples of sections can be a blog, pages, a products listing, etc.
|
|
6
|
+
# Before being able to properly add section entries you need to assign
|
|
7
|
+
# the following data to a section:
|
|
8
|
+
#
|
|
9
|
+
# * a category group
|
|
10
|
+
# * a custom field group
|
|
11
|
+
#
|
|
12
|
+
# @author Yorick Peterse
|
|
13
|
+
# @since 0.1
|
|
14
|
+
#
|
|
15
|
+
class Sections < Zen::Controllers::AdminController
|
|
16
|
+
map '/admin'
|
|
17
|
+
|
|
18
|
+
trait :extension_identifier => 'com.zen.sections'
|
|
19
|
+
|
|
20
|
+
include ::Sections::Models
|
|
21
|
+
|
|
22
|
+
before_all do
|
|
23
|
+
csrf_protection :save, :delete do
|
|
24
|
+
respond(@zen_general_lang.errors[:csrf], 401)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Constructor method, called upon initialization. It's used to set the
|
|
30
|
+
# URL to which forms send their data and load the language pack.
|
|
31
|
+
#
|
|
32
|
+
# @author Yorick Peterse
|
|
33
|
+
# @since 0.1
|
|
34
|
+
#
|
|
35
|
+
def initialize
|
|
36
|
+
super
|
|
37
|
+
|
|
38
|
+
@form_save_url = '/admin/save'
|
|
39
|
+
@form_delete_url = '/admin/delete'
|
|
40
|
+
@sections_lang = Zen::Language.load 'sections'
|
|
41
|
+
|
|
42
|
+
# Set the page title
|
|
43
|
+
if !action.method.nil?
|
|
44
|
+
method = action.method.to_sym
|
|
45
|
+
|
|
46
|
+
if @sections_lang.titles.key? method
|
|
47
|
+
@page_title = @sections_lang.titles[method]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
##
|
|
53
|
+
# Show an overview of all existing sections. Using this overview a user
|
|
54
|
+
# can manage an existing section, delete it or create a new one.
|
|
55
|
+
#
|
|
56
|
+
# @author Yorick Peterse
|
|
57
|
+
# @since 0.1
|
|
58
|
+
#
|
|
59
|
+
def index
|
|
60
|
+
if !user_authorized?([:read])
|
|
61
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
set_breadcrumbs @sections_lang.titles[:index]
|
|
65
|
+
|
|
66
|
+
@sections = Section.all
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
##
|
|
70
|
+
# Show a form that lets the user edit an existing section.
|
|
71
|
+
#
|
|
72
|
+
# @author Yorick Peterse
|
|
73
|
+
# @param [Integer] id The ID of the section to retrieve so that we can edit it.
|
|
74
|
+
# @since 0.1
|
|
75
|
+
#
|
|
76
|
+
def edit id
|
|
77
|
+
if !user_authorized?([:read, :update])
|
|
78
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
set_breadcrumbs anchor_to(@sections_lang.titles[:index], "admin"), @page_title
|
|
82
|
+
|
|
83
|
+
@custom_field_group_pk_hash = CustomFields::Models::CustomFieldGroup.pk_hash(:name)
|
|
84
|
+
@category_group_pk_hash = Categories::Models::CategoryGroup.pk_hash(:name)
|
|
85
|
+
@section = Section[id]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
##
|
|
89
|
+
# Show a form that lets the user create a new section.
|
|
90
|
+
#
|
|
91
|
+
# @author Yorick Peterse
|
|
92
|
+
# @since 0.1
|
|
93
|
+
#
|
|
94
|
+
def new
|
|
95
|
+
if !user_authorized?([:create, :read])
|
|
96
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
set_breadcrumbs anchor_to(@sections_lang.titles[:index], "admin"), @page_title
|
|
100
|
+
|
|
101
|
+
@custom_field_group_pk_hash = CustomFields::Models::CustomFieldGroup.pk_hash(:name)
|
|
102
|
+
@category_group_pk_hash = Categories::Models::CategoryGroup.pk_hash(:name)
|
|
103
|
+
@section = Section.new
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
##
|
|
107
|
+
# Method used for processing the form data and redirecting the user back to
|
|
108
|
+
# the proper URL. Based on the value of a hidden field named "id" we'll determine
|
|
109
|
+
# if the data will be used to create a new section or to update an existing one.
|
|
110
|
+
#
|
|
111
|
+
# @author Yorick Peterse
|
|
112
|
+
# @since 0.1
|
|
113
|
+
#
|
|
114
|
+
def save
|
|
115
|
+
if !user_authorized?([:create, :update])
|
|
116
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
post = request.params.dup
|
|
120
|
+
|
|
121
|
+
post.each do |key, value|
|
|
122
|
+
post.delete(key) if value.empty?
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
if post["id"] and !post["id"].empty?
|
|
126
|
+
@section = Section[post["id"]]
|
|
127
|
+
save_action = :save
|
|
128
|
+
else
|
|
129
|
+
@section = Section.new
|
|
130
|
+
save_action = :new
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
flash_success = @sections_lang.success[save_action]
|
|
134
|
+
flash_error = @sections_lang.errors[save_action]
|
|
135
|
+
|
|
136
|
+
# The primary keys have to be integers otherwise Sequel will soil it's pants
|
|
137
|
+
if !post["custom_field_group_pks"].nil?
|
|
138
|
+
post["custom_field_group_pks"].map! { |value| value.to_i }
|
|
139
|
+
else
|
|
140
|
+
post["custom_field_group_pks"] = []
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
if !post["category_group_pks"].nil?
|
|
144
|
+
post["category_group_pks"].map! { |value| value.to_i }
|
|
145
|
+
else
|
|
146
|
+
post["category_group_pks"] = []
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
begin
|
|
150
|
+
@section.update(post)
|
|
151
|
+
|
|
152
|
+
if save_action == :new
|
|
153
|
+
@section.custom_field_group_pks = post['custom_field_group_pks']
|
|
154
|
+
@section.category_group_pks = post['category_group_pks']
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
notification(:success, @sections_lang.titles[:index], flash_success)
|
|
158
|
+
rescue
|
|
159
|
+
notification(:error, @sections_lang.titles[:index], flash_error)
|
|
160
|
+
|
|
161
|
+
flash[:form_errors] = @section.errors
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
if @section.id
|
|
165
|
+
redirect "/admin/edit/#{@section.id}"
|
|
166
|
+
else
|
|
167
|
+
redirect_referrer
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
##
|
|
172
|
+
# Delete an existing section. Poor section, what did he do wrong?
|
|
173
|
+
# In order to delete a section you'll need to send a POST request that contains
|
|
174
|
+
# a field named "section_ids[]". This field should contain the primary values of
|
|
175
|
+
# each section that has to be deleted.
|
|
176
|
+
#
|
|
177
|
+
# @author Yorick Peterse
|
|
178
|
+
# @since 0.1
|
|
179
|
+
#
|
|
180
|
+
def delete
|
|
181
|
+
if !user_authorized?([:delete])
|
|
182
|
+
respond(@zen_general_lang.errors[:not_authorized], 403)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
if !request.params["section_ids"] or request.params["section_ids"].empty?
|
|
186
|
+
notification(:error, @sections_lang.titles[:index], @sections_lang.errors[:no_delete])
|
|
187
|
+
redirect_referrer
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
request.params["section_ids"].each do |id|
|
|
191
|
+
@section = Section[id]
|
|
192
|
+
|
|
193
|
+
begin
|
|
194
|
+
@section.delete
|
|
195
|
+
notification(:success, @sections_lang.titles[:index], @sections_lang.success[:delete] % id)
|
|
196
|
+
rescue
|
|
197
|
+
notification(:error, @sections_lang.titles[:index], @sections_lang.errors[:delete] % id)
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
redirect_referrer
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Zen::Language.translation 'section_entries' do |item|
|
|
2
|
+
# Page titles
|
|
3
|
+
item.titles = {
|
|
4
|
+
:index => 'Entries',
|
|
5
|
+
:edit => 'Edit Entry',
|
|
6
|
+
:new => 'Add Entry'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# Labels
|
|
10
|
+
item.labels = {
|
|
11
|
+
:id => '#',
|
|
12
|
+
:title => 'Title',
|
|
13
|
+
:slug => 'Slug',
|
|
14
|
+
:status => 'Status',
|
|
15
|
+
:created => 'Created at',
|
|
16
|
+
:updated => 'Updated at',
|
|
17
|
+
:author => 'Author'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# Special items such as sub hashes and such
|
|
21
|
+
item.special = {
|
|
22
|
+
:status_hash => {"draft" => "Draft", "published" => "Published"},
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# Tabs
|
|
26
|
+
item.tabs = {
|
|
27
|
+
:basic => 'Basic',
|
|
28
|
+
:categories => 'Categories'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# General messages
|
|
32
|
+
item.messages = {
|
|
33
|
+
:no_entries => 'No section entries have been created yet.',
|
|
34
|
+
:no_categories => 'No categories have been assigned to the current section.'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Error specific messages
|
|
38
|
+
item.errors = {
|
|
39
|
+
:new => "Failed to create a new entry.",
|
|
40
|
+
:save => "Failed to save the entry.",
|
|
41
|
+
:delete => "Failed to delete the entry with ID #%s",
|
|
42
|
+
:no_delete => "You haven't specified any entries to delete."
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# Success messages
|
|
46
|
+
item.success = {
|
|
47
|
+
:new => "The new entry has been created.",
|
|
48
|
+
:save => "The entry has been modified.",
|
|
49
|
+
:delete => "The entry with ID #%s has been deleted."
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# Buttons
|
|
53
|
+
item.buttons = {
|
|
54
|
+
:new_entry => 'New entry',
|
|
55
|
+
:delete_entries => 'Delete selected entries',
|
|
56
|
+
:save_entry => 'Save entry'
|
|
57
|
+
}
|
|
58
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
Zen::Language.translation 'sections' do |item|
|
|
2
|
+
# Page titles
|
|
3
|
+
item.titles = {
|
|
4
|
+
:index => 'Sections',
|
|
5
|
+
:edit => 'Edit Section',
|
|
6
|
+
:new => 'Add Section'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# Labels
|
|
10
|
+
item.labels = {
|
|
11
|
+
:id => '#',
|
|
12
|
+
:name => 'Name',
|
|
13
|
+
:slug => 'Slug',
|
|
14
|
+
:description => 'Description',
|
|
15
|
+
:comment_allow => 'Allow comments',
|
|
16
|
+
:comment_require_account => 'Comments require an account',
|
|
17
|
+
:comment_moderate => 'Moderate comments',
|
|
18
|
+
:comment_format => 'Comment format',
|
|
19
|
+
:custom_field_groups => 'Custom field groups',
|
|
20
|
+
:category_groups => 'Category groups',
|
|
21
|
+
:manage_entries => 'Manage entries'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
# Special items such as sub hashes and such
|
|
25
|
+
item.special = {
|
|
26
|
+
:boolean_hash => {"Yes" => true, "No" => false},
|
|
27
|
+
:format_hash => {"plain" => "Plain", "html" => "HTML", "textile" => "Textile", "markdown" => "Markdown"}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# Tabs
|
|
31
|
+
item.tabs = {
|
|
32
|
+
:general => 'General',
|
|
33
|
+
:comment_settings => 'Comment Settings',
|
|
34
|
+
:group_assignments => 'Group Assignments'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# General messages
|
|
38
|
+
item.messages = {
|
|
39
|
+
:no_sections => 'It seems you haven\'t created any sections yet.'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Error specific messages
|
|
43
|
+
item.errors = {
|
|
44
|
+
:new => "Failed to create a new section.",
|
|
45
|
+
:save => "Failed to save the section.",
|
|
46
|
+
:delete => "Failed to delete the section with ID #%s",
|
|
47
|
+
:no_delete => "You haven't specified any sections to delete."
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Success messages
|
|
51
|
+
item.success = {
|
|
52
|
+
:new => "The new section has been created.",
|
|
53
|
+
:save => "The section has been modified.",
|
|
54
|
+
:delete => "The section with ID #%s has been deleted."
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# Buttons
|
|
58
|
+
item.buttons = {
|
|
59
|
+
:new_section => 'New section',
|
|
60
|
+
:delete_sections => 'Delete selected sections',
|
|
61
|
+
:save_section => 'Save section'
|
|
62
|
+
}
|
|
63
|
+
end
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
module Sections
|
|
2
|
+
module Liquid
|
|
3
|
+
##
|
|
4
|
+
# The SectionEntries tag can be used to retrieve all section entries
|
|
5
|
+
# for the given section. A basic example of this looks like the following:
|
|
6
|
+
#
|
|
7
|
+
# bc. {% section_entries section="blog" %}
|
|
8
|
+
# Do something in here
|
|
9
|
+
# {% endsection_entries %}
|
|
10
|
+
#
|
|
11
|
+
# When using this tag you can specify the following optionally arguments:
|
|
12
|
+
#
|
|
13
|
+
# * section: the slug of the section for which to retrieve all entries
|
|
14
|
+
# * limit: the amount of entries to retrieve
|
|
15
|
+
# * offset: the offset from which to start selecting entries
|
|
16
|
+
# * section_entry: the slug of the section entry to select
|
|
17
|
+
# * order: the sort order type
|
|
18
|
+
# * order_by: the name of the column to sort on
|
|
19
|
+
#
|
|
20
|
+
# These arguments can be specified as following:
|
|
21
|
+
#
|
|
22
|
+
# bc. {% section_entries section="blog" limit="10" offset="20" %}
|
|
23
|
+
# Do something in here
|
|
24
|
+
# {% endsection_entries %}
|
|
25
|
+
#
|
|
26
|
+
# Inside this block you can output the values of your custom fields by
|
|
27
|
+
# calling the variable tag containing the name of the custom field. For example,
|
|
28
|
+
# if you have a field called "body" you can output it for each entry as following:
|
|
29
|
+
#
|
|
30
|
+
# bc. {% section_entries section="blog" limit="10" offset="20" %}
|
|
31
|
+
# {{body}}
|
|
32
|
+
# {% endsection_entries %}
|
|
33
|
+
#
|
|
34
|
+
# The following variables are available by default:
|
|
35
|
+
#
|
|
36
|
+
# * id: the ID of the section entry
|
|
37
|
+
# * title: the entry title
|
|
38
|
+
# * slug: the entry slug
|
|
39
|
+
# * status: the status of the entry
|
|
40
|
+
# * created_at
|
|
41
|
+
# * updated_at
|
|
42
|
+
# * section_id: the ID of the section to which this entry belongs
|
|
43
|
+
#
|
|
44
|
+
# @example
|
|
45
|
+
#
|
|
46
|
+
# {% section_entries section="blog" limit="10" offset="20" %}
|
|
47
|
+
# <article>
|
|
48
|
+
# <header>
|
|
49
|
+
# <h1>{{title}}</h1>
|
|
50
|
+
# </header>
|
|
51
|
+
#
|
|
52
|
+
# {{body}}
|
|
53
|
+
# </article>
|
|
54
|
+
# {% endsection_entries %}
|
|
55
|
+
#
|
|
56
|
+
# @author Yorick Peterse
|
|
57
|
+
# @since 0.1
|
|
58
|
+
#
|
|
59
|
+
class SectionEntries < ::Liquid::Block
|
|
60
|
+
include ::Ramaze::Helper::CGI
|
|
61
|
+
include ::Zen::Liquid::General
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
# Creates a new instance of the block and passes the tag name,
|
|
65
|
+
# all additional arguments and the HTML to the constructor method.
|
|
66
|
+
#
|
|
67
|
+
# @author Yorick Peterse
|
|
68
|
+
# @since 0.1
|
|
69
|
+
# @param [String] tag_name The name of the tag that was called.
|
|
70
|
+
# @param [String] arguments All additional arguments passed as a string.
|
|
71
|
+
# @param [String] html The HTML inside the block.
|
|
72
|
+
#
|
|
73
|
+
def initialize tag_name, arguments, html
|
|
74
|
+
super
|
|
75
|
+
|
|
76
|
+
@arguments = {
|
|
77
|
+
'limit' => nil,
|
|
78
|
+
'offset' => nil,
|
|
79
|
+
'section' => Zen::Controllers::FrontendController.session[:settings][:default_section],
|
|
80
|
+
'order' => 'desc',
|
|
81
|
+
'order_by'=> 'id'
|
|
82
|
+
}.merge(parse_key_values(arguments))
|
|
83
|
+
|
|
84
|
+
@args_parsed = false
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
##
|
|
88
|
+
# Processes that arguments, retrieves all data and renders the tag block.
|
|
89
|
+
# When outputting data inside the tag block you can always use the following
|
|
90
|
+
# variables:
|
|
91
|
+
#
|
|
92
|
+
# * total_rows: the amount of rows retrieved
|
|
93
|
+
# * index: the current index
|
|
94
|
+
#
|
|
95
|
+
# Depending on whether you have any entries or not you can use the following
|
|
96
|
+
# values as well:
|
|
97
|
+
#
|
|
98
|
+
# * comments: array containing all comments for each entry
|
|
99
|
+
# * categories: array of all categories for each entry
|
|
100
|
+
# * user: data about the author of each entry
|
|
101
|
+
#
|
|
102
|
+
# On top of that you can of course also use your own custom values. Each value
|
|
103
|
+
# can be accessed by it's slug.
|
|
104
|
+
#
|
|
105
|
+
# @author Yorick Peterse
|
|
106
|
+
# @since 0.1
|
|
107
|
+
#
|
|
108
|
+
def render context
|
|
109
|
+
# Check if any of the given arguments in @arguments exist in our context.
|
|
110
|
+
if @args_parsed == false
|
|
111
|
+
@arguments.each do |k, v|
|
|
112
|
+
v = v.to_s
|
|
113
|
+
|
|
114
|
+
if context.has_key?(v)
|
|
115
|
+
@arguments[k] = h(context[v])
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
@args_parsed = true
|
|
121
|
+
result = []
|
|
122
|
+
entries = []
|
|
123
|
+
filter_hash = {:status => 'published'}
|
|
124
|
+
|
|
125
|
+
if @arguments.key?('section_entry')
|
|
126
|
+
if @arguments['section_entry'].empty?
|
|
127
|
+
raise ArgumentError, "You need to specify a section entry to retrieve"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
filter_hash[:slug] = @arguments['section_entry']
|
|
131
|
+
|
|
132
|
+
else
|
|
133
|
+
if @arguments['section'].empty?
|
|
134
|
+
raise ArgumentError, "You need to specify a section for which to retrieve all entries"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
section = ::Sections::Models::Section[:slug => @arguments['section']]
|
|
138
|
+
|
|
139
|
+
return result if section.nil?
|
|
140
|
+
filter_hash[:section_id] = section.id
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
entries = ::Sections::Models::SectionEntry
|
|
144
|
+
.eager(:custom_field_values, :categories, :comments, :section, :user)
|
|
145
|
+
.filter(filter_hash)
|
|
146
|
+
.order(@arguments['order_by'].to_sym.send(@arguments['order']))
|
|
147
|
+
.limit(@arguments['limit'], @arguments['offset'])
|
|
148
|
+
|
|
149
|
+
context['total_rows'] = entries.count
|
|
150
|
+
|
|
151
|
+
entries.each_with_index do |entry, index|
|
|
152
|
+
entry.values.each do |k, v|
|
|
153
|
+
context[k.to_s] = v
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context['index'] = index
|
|
157
|
+
context['categories'] = []
|
|
158
|
+
context['comments'] = []
|
|
159
|
+
context['user'] = {}
|
|
160
|
+
|
|
161
|
+
# Retrieve all categories
|
|
162
|
+
entry.categories.each do |c|
|
|
163
|
+
values = {}
|
|
164
|
+
|
|
165
|
+
c.values.each { |k, v| values[k.to_s] = v }
|
|
166
|
+
context['categories'].push(values)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Get the user for the current entry
|
|
170
|
+
if !entry.user.nil?
|
|
171
|
+
entry.user.values.each { |k, v| context['user'][k.to_s] = v }
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# Retrieve all comments
|
|
175
|
+
entry.comments.each do |c|
|
|
176
|
+
values = {}
|
|
177
|
+
|
|
178
|
+
c.values.each { |k, v| values[k.to_s] = v }
|
|
179
|
+
|
|
180
|
+
# Pull the Email, name and website fields from the user table in case the comment
|
|
181
|
+
# was posted by somebody who was logged in to the backend.
|
|
182
|
+
['email', 'name', 'website'].each do |m|
|
|
183
|
+
if values[m].nil? or values[m].empty?
|
|
184
|
+
values[m] = c.user.send(m)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
values['comment'] = markup_to_html(values['comment'], entry.section.comment_format)
|
|
189
|
+
context['comments'].push(values)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Get all our custom fields
|
|
193
|
+
entry.custom_field_values.each do |field_value|
|
|
194
|
+
field = field_value.custom_field
|
|
195
|
+
name = field.slug
|
|
196
|
+
value = markup_to_html(field_value.value, field.format.to_sym)
|
|
197
|
+
|
|
198
|
+
context[name.to_s] = value
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
result << render_all(@nodelist, context)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
result << render_all(@nodelist, context) if result.empty?
|
|
205
|
+
return result
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|