zen 0.2.4.1 → 0.2.5
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/MANIFEST +42 -33
- data/README.md +14 -27
- data/ROADMAP.md +20 -2
- data/{Thorfile → Rakefile} +2 -3
- data/bin/zen +27 -5
- data/lib/zen.rb +70 -52
- data/lib/zen/asset.rb +258 -0
- data/lib/zen/bin/app.rb +42 -0
- data/lib/zen/controller/admin_controller.rb +53 -36
- data/lib/zen/controller/base_controller.rb +13 -8
- data/lib/zen/controller/frontend_controller.rb +4 -3
- data/lib/zen/controller/main_controller.rb +17 -33
- data/lib/zen/error/validation_error.rb +10 -0
- data/lib/zen/ext/string.rb +185 -0
- data/lib/zen/helper/acl.rb +120 -92
- data/lib/zen/helper/common.rb +1 -3
- data/lib/zen/helper/theme.rb +73 -0
- data/lib/zen/language.rb +66 -57
- data/lib/zen/layout/admin.xhtml +5 -48
- data/lib/zen/layout/login.xhtml +4 -44
- data/lib/zen/model/methods.rb +1 -1
- data/lib/zen/model/settings.rb +0 -3
- data/lib/zen/package.rb +101 -83
- data/lib/zen/package/base.rb +62 -0
- data/lib/zen/package/categories/lib/categories.rb +29 -10
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +4 -5
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +4 -5
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +4 -3
- data/lib/zen/package/categories/lib/categories/model/category.rb +2 -2
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +3 -3
- data/lib/zen/package/categories/lib/categories/plugin/categories.rb +130 -0
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +1 -1
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +2 -2
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +11 -6
- data/lib/zen/package/comments/lib/comments.rb +23 -13
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +4 -5
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +7 -8
- data/lib/zen/package/comments/lib/comments/model/comment.rb +4 -4
- data/lib/zen/package/comments/lib/comments/plugin/comments.rb +111 -0
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +2 -2
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +18 -11
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +4 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +4 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +2 -2
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +9 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +1 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +3 -3
- data/lib/zen/package/menus/lib/menus.rb +25 -43
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +5 -6
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +9 -5
- data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +4 -4
- data/lib/zen/package/menus/lib/menus/model/menu.rb +2 -2
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +4 -1
- data/lib/zen/package/menus/lib/menus/plugin/menus.rb +152 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +1 -1
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +3 -3
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +7 -7
- data/lib/zen/package/sections/lib/sections.rb +32 -16
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +9 -18
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +8 -9
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +1 -1
- data/lib/zen/package/sections/lib/sections/model/section.rb +4 -4
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +9 -10
- data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +224 -0
- data/lib/zen/package/sections/lib/sections/plugin/sections.rb +85 -0
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +1 -1
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +9 -5
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +2 -2
- data/lib/zen/package/settings/lib/settings.rb +145 -10
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +28 -24
- data/lib/zen/package/settings/lib/settings/language/en/settings.yml +10 -0
- data/lib/zen/package/settings/lib/settings/model/setting.rb +3 -64
- data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +40 -0
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +76 -0
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +236 -0
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +20 -49
- data/lib/zen/package/settings/migrations/1295597111_create_schema.rb +0 -12
- data/lib/zen/package/settings/migrations/1303196915_settings_plugin.rb +31 -0
- data/lib/zen/package/users/lib/users.rb +18 -15
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +44 -8
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +4 -5
- data/lib/zen/package/users/lib/users/controller/users.rb +5 -6
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +11 -9
- data/lib/zen/package/users/lib/users/model/access_rule.rb +7 -6
- data/lib/zen/package/users/lib/users/model/user.rb +4 -4
- data/lib/zen/package/users/lib/users/model/user_group.rb +3 -3
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +50 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +32 -29
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +8 -6
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +3 -3
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +2 -2
- data/lib/zen/package/users/migrations/1303510943_class_rules.rb +13 -0
- data/lib/zen/plugin.rb +110 -104
- data/lib/zen/plugin/base.rb +46 -0
- data/lib/zen/{liquid/controller_behavior.rb → plugin/controller.rb} +9 -7
- data/lib/zen/plugin/helper.rb +47 -0
- data/lib/zen/plugin/markup/lib/markup.rb +14 -0
- data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +6 -0
- data/lib/zen/plugin/markup/lib/markup/markup.rb +154 -0
- data/lib/zen/public/admin/css/forms.css +4 -0
- data/lib/zen/public/admin/css/general.css +15 -15
- data/lib/zen/public/admin/css/layout.css +10 -10
- data/lib/zen/public/admin/css/reset.css +123 -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 +384 -333
- data/lib/zen/public/admin/js/mootools/more.js +256 -231
- data/lib/zen/public/admin/js/vendor/{datepicker/Picker.Date.js → datepicker.js} +447 -0
- data/lib/zen/public/admin/js/vendor/yepnope.js +1 -0
- data/lib/zen/public/admin/js/zen/editor/base.js +8 -1
- data/lib/zen/public/admin/js/zen/init.js +89 -26
- data/lib/zen/public/favicon.ico +0 -0
- data/lib/zen/task.rb +7 -0
- data/lib/zen/task/build.rake +60 -0
- data/lib/zen/task/clean.rake +27 -0
- data/lib/zen/task/db.rake +111 -0
- data/lib/zen/task/package.rake +67 -0
- data/lib/zen/task/plugin.rake +24 -0
- data/lib/zen/task/proto.rake +95 -0
- data/lib/zen/task/theme.rake +68 -0
- data/lib/zen/theme.rb +28 -55
- data/lib/zen/theme/base.rb +64 -0
- data/lib/zen/validation.rb +149 -0
- data/lib/zen/version.rb +1 -1
- data/lib/zen/view/bottom.xhtml +6 -0
- data/lib/zen/view/main.xhtml +32 -0
- data/proto/app/Rakefile +12 -0
- data/proto/app/app.rb +6 -6
- data/proto/app/config/config.rb +7 -14
- data/proto/app/config/database.rb +0 -20
- data/proto/app/start.rb +0 -1
- data/proto/app/{vendor/themes → task}/.gitkeep +0 -0
- data/proto/app/vendor/theme/.gitkeep +0 -0
- data/proto/package/lib/package.rb +8 -17
- data/proto/package/lib/package/controller/controllers.rb +4 -4
- data/proto/package/lib/package/language/en/languages.yml +3 -3
- data/proto/package/lib/package/model/model.rb +1 -1
- metadata +73 -73
- data/lib/zen/bin/base.rb +0 -109
- data/lib/zen/helper/asset.rb +0 -106
- data/lib/zen/liquid/general.rb +0 -94
- data/lib/zen/liquid/redirect.rb +0 -70
- data/lib/zen/liquid/strip.rb +0 -60
- data/lib/zen/package/categories/lib/categories/liquid/categories.rb +0 -16
- data/lib/zen/package/comments/lib/comments/liquid/comment_form.rb +0 -127
- data/lib/zen/package/comments/lib/comments/liquid/comments.rb +0 -115
- data/lib/zen/package/menus/lib/menus/liquid/menus.rb +0 -152
- data/lib/zen/package/sections/lib/sections/liquid/section_entries.rb +0 -228
- data/lib/zen/package/sections/lib/sections/liquid/sections.rb +0 -77
- data/lib/zen/package/settings/lib/settings/liquid/setting.rb +0 -58
- data/lib/zen/package/users/lib/users/liquid/user.rb +0 -77
- data/lib/zen/package/users/lib/users/liquid/users.rb +0 -82
- data/lib/zen/plugin/markup.rb +0 -30
- data/lib/zen/public/admin/css/boilerplate.css +0 -176
- data/lib/zen/public/admin/images/general/noise.jpg +0 -0
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +0 -137
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +0 -291
- data/lib/zen/public/admin/js/vendor/datepicker/README.md +0 -325
- data/lib/zen/public/admin/js/vendor/datepicker/locale.js +0 -16
- data/lib/zen/strict_struct.rb +0 -36
- data/lib/zen/task/build.rb +0 -123
- data/lib/zen/task/clean.rb +0 -46
- data/lib/zen/task/db.rb +0 -130
- data/lib/zen/task/package.rb +0 -87
- data/lib/zen/task/proto.rb +0 -116
- data/lib/zen/task/theme.rb +0 -88
- data/proto/app/Thorfile +0 -4
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#:nodoc:
|
|
2
|
+
module Settings
|
|
3
|
+
#:nodoc:
|
|
4
|
+
module Plugin
|
|
5
|
+
##
|
|
6
|
+
# Base class used for setting groups.
|
|
7
|
+
#
|
|
8
|
+
# @author Yorick Peterse
|
|
9
|
+
# @since 0.2.5
|
|
10
|
+
#
|
|
11
|
+
class GroupBase
|
|
12
|
+
include ::Zen::Validation
|
|
13
|
+
|
|
14
|
+
# The name of the group
|
|
15
|
+
attr_accessor :name
|
|
16
|
+
|
|
17
|
+
# The title of the group, displayed in the GUI
|
|
18
|
+
attr_accessor :title
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# Validates all attributes of this class.
|
|
22
|
+
#
|
|
23
|
+
# @author Yorick Peterse
|
|
24
|
+
# @since 0.2.5
|
|
25
|
+
#
|
|
26
|
+
def validate
|
|
27
|
+
validates_presence([:name, :title])
|
|
28
|
+
validates_format(:name, /[a-z0-9_\-]+/)
|
|
29
|
+
|
|
30
|
+
if ::Settings::Plugin::Settings::Registered[:groups].key?(name)
|
|
31
|
+
raise(
|
|
32
|
+
::Zen::ValidationError,
|
|
33
|
+
"The setting group #{name} has already been registered."
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#:nodoc:
|
|
2
|
+
module Settings
|
|
3
|
+
#:nodoc:
|
|
4
|
+
module Plugin
|
|
5
|
+
##
|
|
6
|
+
# Base class used for individual settings.
|
|
7
|
+
#
|
|
8
|
+
# @author Yorick Peterse
|
|
9
|
+
# @since 0.2.5
|
|
10
|
+
#
|
|
11
|
+
class SettingBase
|
|
12
|
+
include ::Zen::Validation
|
|
13
|
+
|
|
14
|
+
##
|
|
15
|
+
# Array containing all possible setting types.
|
|
16
|
+
#
|
|
17
|
+
# @author Yorick Peterse
|
|
18
|
+
# @since 0.2.5
|
|
19
|
+
#
|
|
20
|
+
Types = [
|
|
21
|
+
'textbox', 'textarea', 'radio', 'checkbox', 'date', 'select', 'select_multiple'
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
# The name of the setting
|
|
25
|
+
attr_accessor :name
|
|
26
|
+
|
|
27
|
+
# The title of the setting, displayed in the GUI
|
|
28
|
+
attr_accessor :title
|
|
29
|
+
|
|
30
|
+
# A small description about the setting
|
|
31
|
+
attr_accessor :description
|
|
32
|
+
|
|
33
|
+
# The name of the settings group this setting belongs to
|
|
34
|
+
attr_accessor :group
|
|
35
|
+
|
|
36
|
+
# The type of setting (e.g. textbox)
|
|
37
|
+
attr_accessor :type
|
|
38
|
+
|
|
39
|
+
# The possible values for the setting
|
|
40
|
+
attr_accessor :values
|
|
41
|
+
|
|
42
|
+
# The default value of the setting
|
|
43
|
+
attr_accessor :default
|
|
44
|
+
|
|
45
|
+
##
|
|
46
|
+
# Validates all attributes of this class.
|
|
47
|
+
#
|
|
48
|
+
# @author Yorick Peterse
|
|
49
|
+
# @since 0.2.5
|
|
50
|
+
#
|
|
51
|
+
def validate
|
|
52
|
+
validates_presence([:name, :title, :group, :type])
|
|
53
|
+
|
|
54
|
+
# Validate the setting type
|
|
55
|
+
if !Types.include?(type)
|
|
56
|
+
raise(::Zen::ValidationError, "The setting type #{type} is invalid.")
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Check if the setting hasn't been registered yet
|
|
60
|
+
if ::Settings::Plugin::Settings::Registered[:settings].key?(name)
|
|
61
|
+
raise(
|
|
62
|
+
::Zen::ValidationError,
|
|
63
|
+
"The setting #{name} has already been registered"
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Validate the group
|
|
68
|
+
if !::Settings::Plugin::Settings::Registered[:groups].key?(group)
|
|
69
|
+
raise(::Zen::ValidationError, "The settings group #{group} doesn't exist.")
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
require __DIR__('group_base')
|
|
2
|
+
require __DIR__('setting_base')
|
|
3
|
+
|
|
4
|
+
#:nodoc:
|
|
5
|
+
module Settings
|
|
6
|
+
#:nodoc:
|
|
7
|
+
module Plugin
|
|
8
|
+
##
|
|
9
|
+
# The settings plugin is a plugin that can be used to register and migrate settings
|
|
10
|
+
# without having to manually insert the data. Previously you'd have to manually insert
|
|
11
|
+
# the data into the settings table at some point and the process of loading
|
|
12
|
+
# translation keys and possible values was a pain. This this plugin was created to
|
|
13
|
+
# solve most of those problems.
|
|
14
|
+
#
|
|
15
|
+
# ## Adding Settings
|
|
16
|
+
#
|
|
17
|
+
# In order to add a setting you'll first need to ensure there's at least a single
|
|
18
|
+
# setting group available. These groups don't add any extra features or whatsoever but
|
|
19
|
+
# are used to display settings in different tabs in the backend interface. In order to
|
|
20
|
+
# register a new group you'd write the following code:
|
|
21
|
+
#
|
|
22
|
+
# plugin(:settings, :register_group) do |group|
|
|
23
|
+
# group.title = 'My Group'
|
|
24
|
+
# group.name = 'my_group'
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# When registering a group you only need to specify a title and a name. The name is
|
|
28
|
+
# used to associate a setting with it's group and thus should always be unique. The
|
|
29
|
+
# title is displayed in the tab for the specific settings group.
|
|
30
|
+
#
|
|
31
|
+
# Once a setting group has been added we can add a setting as following:
|
|
32
|
+
#
|
|
33
|
+
# plugin(:settings, :register) do |setting|
|
|
34
|
+
# setting.title = 'My Setting'
|
|
35
|
+
# setting.description = 'This is my setting!'
|
|
36
|
+
# setting.name = 'my_setting'
|
|
37
|
+
# setting.group = 'my_group'
|
|
38
|
+
# setting.type = 'select'
|
|
39
|
+
# setting.values = ['yorick', 'zen']
|
|
40
|
+
# setting.default = 'yorick'
|
|
41
|
+
# end
|
|
42
|
+
#
|
|
43
|
+
# Note that the values array (or hash) is used to determine the possible values for
|
|
44
|
+
# a field. These values will only be used for elements that only allow a user to
|
|
45
|
+
# choose a single value (e.g. a checkbox). For the type getter/setter you can use
|
|
46
|
+
# any of the following values:
|
|
47
|
+
#
|
|
48
|
+
# * textbox
|
|
49
|
+
# * textarea
|
|
50
|
+
# * radio
|
|
51
|
+
# * checkbox
|
|
52
|
+
# * date
|
|
53
|
+
# * select
|
|
54
|
+
# * select_multiple
|
|
55
|
+
#
|
|
56
|
+
# ## Migrating Settings
|
|
57
|
+
#
|
|
58
|
+
# Once a setting has been added you still have to migrate it. Zen takes care of this
|
|
59
|
+
# so usually you don't need to manually migrate your settings. If you do want to
|
|
60
|
+
# migrate them however you can simple execute the following code:
|
|
61
|
+
#
|
|
62
|
+
# plugin(:settings, :migrate)
|
|
63
|
+
#
|
|
64
|
+
# ## Removing Settings
|
|
65
|
+
#
|
|
66
|
+
# If you ever need to remove a setting both from the database and the system you can
|
|
67
|
+
# do so as following:
|
|
68
|
+
#
|
|
69
|
+
# plugin(:settings, :remove, ['name1', 'name2'])
|
|
70
|
+
#
|
|
71
|
+
# You don't have to specify an array of names, you can also specify the name of a
|
|
72
|
+
# single setting to delete.
|
|
73
|
+
#
|
|
74
|
+
# @author Yorick Peterse
|
|
75
|
+
# @since 0.2.5
|
|
76
|
+
#
|
|
77
|
+
class Settings
|
|
78
|
+
include ::Zen::Plugin::Helper
|
|
79
|
+
include ::Settings::Model
|
|
80
|
+
|
|
81
|
+
##
|
|
82
|
+
# Hash containing all registered settings and setting groups.
|
|
83
|
+
#
|
|
84
|
+
# @author Yorick Peterse
|
|
85
|
+
# @since 0.2.5
|
|
86
|
+
#
|
|
87
|
+
Registered = {
|
|
88
|
+
:groups => {},
|
|
89
|
+
:settings => {}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
##
|
|
93
|
+
# Creates a new instance of the plugin and saves the given arguments as instance
|
|
94
|
+
# variables so they can be used by Settings::Plugin::Settings.call.
|
|
95
|
+
#
|
|
96
|
+
# @author Yorick Peterse
|
|
97
|
+
# @since 0.2.5
|
|
98
|
+
# @param [Symbol/String] action The action (method) to execute.
|
|
99
|
+
# @param [Array] args Array containing all additional arguments.
|
|
100
|
+
# @param [Proc] block An optional block containing extra details.
|
|
101
|
+
# a setting.
|
|
102
|
+
#
|
|
103
|
+
def initialize(action, *args, &block)
|
|
104
|
+
# Validate the given action
|
|
105
|
+
if !respond_to?(action)
|
|
106
|
+
raise(ArgumentError, "The action #{action} does not exist.")
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
validate_type(action, :action, [Symbol, String])
|
|
110
|
+
|
|
111
|
+
@action, @args, @block = action, args, block
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
##
|
|
115
|
+
# Executes the action set in the construct and returns the results.
|
|
116
|
+
#
|
|
117
|
+
# @author Yorick Peterse
|
|
118
|
+
# @since 0.2.5
|
|
119
|
+
# @return [Mixed]
|
|
120
|
+
#
|
|
121
|
+
def call
|
|
122
|
+
return send(@action, *@args, &@block)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
##
|
|
126
|
+
# Registers a new setting group using the specified block.
|
|
127
|
+
#
|
|
128
|
+
# @example
|
|
129
|
+
# plugin(:settings, :register_group) do |group|
|
|
130
|
+
# group.name = 'example'
|
|
131
|
+
# group.title = 'Example group'
|
|
132
|
+
# end
|
|
133
|
+
#
|
|
134
|
+
# @author Yorick Peterse
|
|
135
|
+
# @since 0.2.5
|
|
136
|
+
#
|
|
137
|
+
def register_group
|
|
138
|
+
group = GroupBase.new
|
|
139
|
+
|
|
140
|
+
yield group
|
|
141
|
+
|
|
142
|
+
# Validate the group
|
|
143
|
+
group.validate
|
|
144
|
+
|
|
145
|
+
# Store the group
|
|
146
|
+
Registered[:groups][group.name] = group
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
##
|
|
150
|
+
# Registers a new setting using the specified block.
|
|
151
|
+
#
|
|
152
|
+
# @example
|
|
153
|
+
# plugin(:settings, :register) do |setting|
|
|
154
|
+
# setting.name = 'example'
|
|
155
|
+
# setting.title = 'Example setting'
|
|
156
|
+
# setting.group = 'example'
|
|
157
|
+
# setting.type = 'select'
|
|
158
|
+
# setting.value = ['yorick', 'chuck']
|
|
159
|
+
# end
|
|
160
|
+
#
|
|
161
|
+
# @author Yorick Peterse
|
|
162
|
+
# @since 0.2.5
|
|
163
|
+
#
|
|
164
|
+
def register
|
|
165
|
+
setting = SettingBase.new
|
|
166
|
+
|
|
167
|
+
yield setting
|
|
168
|
+
|
|
169
|
+
# Validate all attributes
|
|
170
|
+
setting.validate
|
|
171
|
+
|
|
172
|
+
Registered[:settings][setting.name] = setting
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
##
|
|
176
|
+
# Gets the setting for the given name.
|
|
177
|
+
#
|
|
178
|
+
# @author Yorick Peterse
|
|
179
|
+
# @since 0.2.5
|
|
180
|
+
# @param [String] name The name of the setting to retrieve.
|
|
181
|
+
# @return [Zen::StrictStruct]
|
|
182
|
+
#
|
|
183
|
+
def get(name)
|
|
184
|
+
validate_type(name, :name, [String])
|
|
185
|
+
|
|
186
|
+
if !Registered[:settings].key?(name)
|
|
187
|
+
raise(ArgumentError, "The setting #{name} doesn't exist.")
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
return Registered[:settings][name]
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
##
|
|
194
|
+
# Inserts all settings into the database. This method will ignore the settings that
|
|
195
|
+
# have already been inserted into the database.
|
|
196
|
+
#
|
|
197
|
+
# @author Yorick Peterse
|
|
198
|
+
# @since 0.2.5
|
|
199
|
+
#
|
|
200
|
+
def migrate
|
|
201
|
+
settings = Setting.all.map { |s| s.name }
|
|
202
|
+
|
|
203
|
+
Registered[:settings].each do |name, setting|
|
|
204
|
+
if !settings.include?(name)
|
|
205
|
+
# Insert the new setting
|
|
206
|
+
Setting.new(
|
|
207
|
+
:name => setting.name , :group => setting.group,
|
|
208
|
+
:default => setting.default, :type => setting.type
|
|
209
|
+
).save
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
##
|
|
215
|
+
# Removes the settings who's names match those specified in the array. The values
|
|
216
|
+
# of these settings will also be removed from the database.
|
|
217
|
+
#
|
|
218
|
+
# @author Yorick Peterse
|
|
219
|
+
# @since 0.2.5
|
|
220
|
+
# @param [Array] namese An array with setting names to remove.
|
|
221
|
+
#
|
|
222
|
+
def remove(names)
|
|
223
|
+
if names.class != Array
|
|
224
|
+
names = [names]
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
names.each do |i|
|
|
228
|
+
Registered[:settings].delete(i)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
Setting.filter(:name => names).delete
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
@@ -5,99 +5,70 @@
|
|
|
5
5
|
|
|
6
6
|
<div class="tabs">
|
|
7
7
|
<ul>
|
|
8
|
-
<?r @
|
|
9
|
-
<?r
|
|
10
|
-
begin
|
|
11
|
-
group_label = lang(items[0].language_group_key)
|
|
12
|
-
rescue
|
|
13
|
-
group_label = group
|
|
14
|
-
end
|
|
15
|
-
?>
|
|
8
|
+
<?r @groups.each do |name, group| ?>
|
|
16
9
|
<li>
|
|
17
|
-
<a href="#group_#{group}">#{
|
|
10
|
+
<a href="#group_#{group.name}">#{group.title}</a>
|
|
18
11
|
</li>
|
|
19
12
|
<?r end ?>
|
|
20
13
|
</ul>
|
|
21
14
|
</div>
|
|
22
|
-
|
|
23
15
|
#{
|
|
24
|
-
form_for(@
|
|
16
|
+
form_for(@settings_ordered, :method => :post, :action => @form_save_url, :id => :setting_form) do |f|
|
|
25
17
|
f.input_hidden(:csrf_token, get_csrf_token)
|
|
26
18
|
|
|
27
|
-
@
|
|
28
|
-
|
|
19
|
+
@settings_ordered.each do |group, items|
|
|
29
20
|
f.g.div(:id => "group_#{group}") do
|
|
30
|
-
|
|
31
21
|
items.each do |s|
|
|
32
|
-
# Get the label from the language pack
|
|
33
|
-
name = s.key.to_sym
|
|
34
|
-
|
|
35
|
-
begin
|
|
36
|
-
label = lang(s.language_key)
|
|
37
|
-
rescue
|
|
38
|
-
label = s.key
|
|
39
|
-
end
|
|
40
|
-
|
|
41
22
|
# Get the value from either the value or default getter
|
|
42
|
-
if s.
|
|
23
|
+
if ::Zen::Settings[s.name.to_sym].nil?
|
|
43
24
|
value = s.default
|
|
44
25
|
else
|
|
45
|
-
value = s.
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Get all possible values for the current setting from the language pack
|
|
49
|
-
begin
|
|
50
|
-
values = Settings::Models::Setting.send("get_#{s.key}_values")
|
|
51
|
-
rescue
|
|
52
|
-
values = {}
|
|
26
|
+
value = ::Zen::Settings[s.name.to_sym]
|
|
53
27
|
end
|
|
54
28
|
|
|
55
29
|
case s.type
|
|
56
30
|
when 'textbox'
|
|
57
31
|
f.input_text(
|
|
58
|
-
|
|
59
|
-
name,
|
|
32
|
+
s.title,
|
|
33
|
+
s.name,
|
|
60
34
|
:value => value
|
|
61
35
|
)
|
|
62
36
|
|
|
63
37
|
when 'textarea'
|
|
64
38
|
f.textarea(
|
|
65
|
-
|
|
66
|
-
name,
|
|
39
|
+
s.title,
|
|
40
|
+
s.name,
|
|
67
41
|
:value => value,
|
|
68
42
|
:rows => 8
|
|
69
43
|
)
|
|
70
44
|
|
|
71
45
|
when 'radio'
|
|
72
46
|
f.input_radio(
|
|
73
|
-
|
|
74
|
-
name,
|
|
47
|
+
s.title,
|
|
48
|
+
s.name,
|
|
75
49
|
value,
|
|
76
|
-
:values => values
|
|
50
|
+
:values => s.values
|
|
77
51
|
)
|
|
78
52
|
|
|
79
53
|
when 'checkbox'
|
|
80
54
|
f.input_checkbox(
|
|
81
|
-
|
|
82
|
-
name,
|
|
55
|
+
s.title,
|
|
56
|
+
s.name,
|
|
83
57
|
value,
|
|
84
|
-
:values => values
|
|
58
|
+
:values => s.values
|
|
85
59
|
)
|
|
86
60
|
|
|
87
61
|
when 'select'
|
|
88
62
|
f.select(
|
|
89
|
-
|
|
90
|
-
name,
|
|
91
|
-
:values => values,
|
|
63
|
+
s.title,
|
|
64
|
+
s.name,
|
|
65
|
+
:values => s.values,
|
|
92
66
|
:size => 1,
|
|
93
67
|
:selected => value
|
|
94
|
-
)
|
|
95
|
-
|
|
68
|
+
)
|
|
96
69
|
end
|
|
97
70
|
end
|
|
98
|
-
|
|
99
71
|
end
|
|
100
|
-
|
|
101
72
|
end
|
|
102
73
|
|
|
103
74
|
f.g.div(:class => 'clearfix') do
|