zen 0.2.4.1 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. data/MANIFEST +42 -33
  2. data/README.md +14 -27
  3. data/ROADMAP.md +20 -2
  4. data/{Thorfile → Rakefile} +2 -3
  5. data/bin/zen +27 -5
  6. data/lib/zen.rb +70 -52
  7. data/lib/zen/asset.rb +258 -0
  8. data/lib/zen/bin/app.rb +42 -0
  9. data/lib/zen/controller/admin_controller.rb +53 -36
  10. data/lib/zen/controller/base_controller.rb +13 -8
  11. data/lib/zen/controller/frontend_controller.rb +4 -3
  12. data/lib/zen/controller/main_controller.rb +17 -33
  13. data/lib/zen/error/validation_error.rb +10 -0
  14. data/lib/zen/ext/string.rb +185 -0
  15. data/lib/zen/helper/acl.rb +120 -92
  16. data/lib/zen/helper/common.rb +1 -3
  17. data/lib/zen/helper/theme.rb +73 -0
  18. data/lib/zen/language.rb +66 -57
  19. data/lib/zen/layout/admin.xhtml +5 -48
  20. data/lib/zen/layout/login.xhtml +4 -44
  21. data/lib/zen/model/methods.rb +1 -1
  22. data/lib/zen/model/settings.rb +0 -3
  23. data/lib/zen/package.rb +101 -83
  24. data/lib/zen/package/base.rb +62 -0
  25. data/lib/zen/package/categories/lib/categories.rb +29 -10
  26. data/lib/zen/package/categories/lib/categories/controller/categories.rb +4 -5
  27. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +4 -5
  28. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +4 -3
  29. data/lib/zen/package/categories/lib/categories/model/category.rb +2 -2
  30. data/lib/zen/package/categories/lib/categories/model/category_group.rb +3 -3
  31. data/lib/zen/package/categories/lib/categories/plugin/categories.rb +130 -0
  32. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +1 -1
  33. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +2 -2
  34. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +11 -6
  35. data/lib/zen/package/comments/lib/comments.rb +23 -13
  36. data/lib/zen/package/comments/lib/comments/controller/comments.rb +4 -5
  37. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +7 -8
  38. data/lib/zen/package/comments/lib/comments/model/comment.rb +4 -4
  39. data/lib/zen/package/comments/lib/comments/plugin/comments.rb +111 -0
  40. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +2 -2
  41. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +3 -3
  42. data/lib/zen/package/custom_fields/lib/custom_fields.rb +18 -11
  43. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +4 -5
  44. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +4 -5
  45. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +2 -2
  46. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +3 -3
  47. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +3 -3
  48. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +9 -5
  49. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +1 -1
  50. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +3 -3
  51. data/lib/zen/package/menus/lib/menus.rb +25 -43
  52. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +5 -6
  53. data/lib/zen/package/menus/lib/menus/controller/menus.rb +9 -5
  54. data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +4 -4
  55. data/lib/zen/package/menus/lib/menus/model/menu.rb +2 -2
  56. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +4 -1
  57. data/lib/zen/package/menus/lib/menus/plugin/menus.rb +152 -0
  58. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +1 -1
  59. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +3 -3
  60. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +7 -7
  61. data/lib/zen/package/sections/lib/sections.rb +32 -16
  62. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +9 -18
  63. data/lib/zen/package/sections/lib/sections/controller/sections.rb +8 -9
  64. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +1 -1
  65. data/lib/zen/package/sections/lib/sections/model/section.rb +4 -4
  66. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +9 -10
  67. data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +224 -0
  68. data/lib/zen/package/sections/lib/sections/plugin/sections.rb +85 -0
  69. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +1 -1
  70. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +9 -5
  71. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +2 -2
  72. data/lib/zen/package/settings/lib/settings.rb +145 -10
  73. data/lib/zen/package/settings/lib/settings/controller/settings.rb +28 -24
  74. data/lib/zen/package/settings/lib/settings/language/en/settings.yml +10 -0
  75. data/lib/zen/package/settings/lib/settings/model/setting.rb +3 -64
  76. data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +40 -0
  77. data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +76 -0
  78. data/lib/zen/package/settings/lib/settings/plugin/settings.rb +236 -0
  79. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +20 -49
  80. data/lib/zen/package/settings/migrations/1295597111_create_schema.rb +0 -12
  81. data/lib/zen/package/settings/migrations/1303196915_settings_plugin.rb +31 -0
  82. data/lib/zen/package/users/lib/users.rb +18 -15
  83. data/lib/zen/package/users/lib/users/controller/access_rules.rb +44 -8
  84. data/lib/zen/package/users/lib/users/controller/user_groups.rb +4 -5
  85. data/lib/zen/package/users/lib/users/controller/users.rb +5 -6
  86. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +11 -9
  87. data/lib/zen/package/users/lib/users/model/access_rule.rb +7 -6
  88. data/lib/zen/package/users/lib/users/model/user.rb +4 -4
  89. data/lib/zen/package/users/lib/users/model/user_group.rb +3 -3
  90. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +50 -0
  91. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +32 -29
  92. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +8 -6
  93. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +3 -3
  94. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +2 -2
  95. data/lib/zen/package/users/migrations/1303510943_class_rules.rb +13 -0
  96. data/lib/zen/plugin.rb +110 -104
  97. data/lib/zen/plugin/base.rb +46 -0
  98. data/lib/zen/{liquid/controller_behavior.rb → plugin/controller.rb} +9 -7
  99. data/lib/zen/plugin/helper.rb +47 -0
  100. data/lib/zen/plugin/markup/lib/markup.rb +14 -0
  101. data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +6 -0
  102. data/lib/zen/plugin/markup/lib/markup/markup.rb +154 -0
  103. data/lib/zen/public/admin/css/forms.css +4 -0
  104. data/lib/zen/public/admin/css/general.css +15 -15
  105. data/lib/zen/public/admin/css/layout.css +10 -10
  106. data/lib/zen/public/admin/css/reset.css +123 -0
  107. data/lib/zen/public/admin/images/icons/accept.png +0 -0
  108. data/lib/zen/public/admin/images/icons/add.png +0 -0
  109. data/lib/zen/public/admin/images/icons/back.png +0 -0
  110. data/lib/zen/public/admin/images/icons/bold.png +0 -0
  111. data/lib/zen/public/admin/images/icons/close.png +0 -0
  112. data/lib/zen/public/admin/images/icons/delete.png +0 -0
  113. data/lib/zen/public/admin/images/icons/edit.png +0 -0
  114. data/lib/zen/public/admin/images/icons/error.png +0 -0
  115. data/lib/zen/public/admin/images/icons/help.png +0 -0
  116. data/lib/zen/public/admin/images/icons/info.png +0 -0
  117. data/lib/zen/public/admin/images/icons/italic.png +0 -0
  118. data/lib/zen/public/admin/images/icons/large/error.png +0 -0
  119. data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
  120. data/lib/zen/public/admin/images/icons/large/success.png +0 -0
  121. data/lib/zen/public/admin/images/icons/link.png +0 -0
  122. data/lib/zen/public/admin/images/icons/logout.png +0 -0
  123. data/lib/zen/public/admin/images/icons/ol.png +0 -0
  124. data/lib/zen/public/admin/images/icons/pdf.png +0 -0
  125. data/lib/zen/public/admin/images/icons/ul.png +0 -0
  126. data/lib/zen/public/admin/images/icons/user.png +0 -0
  127. data/lib/zen/public/admin/images/icons/view.png +0 -0
  128. data/lib/zen/public/admin/js/mootools/core.js +384 -333
  129. data/lib/zen/public/admin/js/mootools/more.js +256 -231
  130. data/lib/zen/public/admin/js/vendor/{datepicker/Picker.Date.js → datepicker.js} +447 -0
  131. data/lib/zen/public/admin/js/vendor/yepnope.js +1 -0
  132. data/lib/zen/public/admin/js/zen/editor/base.js +8 -1
  133. data/lib/zen/public/admin/js/zen/init.js +89 -26
  134. data/lib/zen/public/favicon.ico +0 -0
  135. data/lib/zen/task.rb +7 -0
  136. data/lib/zen/task/build.rake +60 -0
  137. data/lib/zen/task/clean.rake +27 -0
  138. data/lib/zen/task/db.rake +111 -0
  139. data/lib/zen/task/package.rake +67 -0
  140. data/lib/zen/task/plugin.rake +24 -0
  141. data/lib/zen/task/proto.rake +95 -0
  142. data/lib/zen/task/theme.rake +68 -0
  143. data/lib/zen/theme.rb +28 -55
  144. data/lib/zen/theme/base.rb +64 -0
  145. data/lib/zen/validation.rb +149 -0
  146. data/lib/zen/version.rb +1 -1
  147. data/lib/zen/view/bottom.xhtml +6 -0
  148. data/lib/zen/view/main.xhtml +32 -0
  149. data/proto/app/Rakefile +12 -0
  150. data/proto/app/app.rb +6 -6
  151. data/proto/app/config/config.rb +7 -14
  152. data/proto/app/config/database.rb +0 -20
  153. data/proto/app/start.rb +0 -1
  154. data/proto/app/{vendor/themes → task}/.gitkeep +0 -0
  155. data/proto/app/vendor/theme/.gitkeep +0 -0
  156. data/proto/package/lib/package.rb +8 -17
  157. data/proto/package/lib/package/controller/controllers.rb +4 -4
  158. data/proto/package/lib/package/language/en/languages.yml +3 -3
  159. data/proto/package/lib/package/model/model.rb +1 -1
  160. metadata +73 -73
  161. data/lib/zen/bin/base.rb +0 -109
  162. data/lib/zen/helper/asset.rb +0 -106
  163. data/lib/zen/liquid/general.rb +0 -94
  164. data/lib/zen/liquid/redirect.rb +0 -70
  165. data/lib/zen/liquid/strip.rb +0 -60
  166. data/lib/zen/package/categories/lib/categories/liquid/categories.rb +0 -16
  167. data/lib/zen/package/comments/lib/comments/liquid/comment_form.rb +0 -127
  168. data/lib/zen/package/comments/lib/comments/liquid/comments.rb +0 -115
  169. data/lib/zen/package/menus/lib/menus/liquid/menus.rb +0 -152
  170. data/lib/zen/package/sections/lib/sections/liquid/section_entries.rb +0 -228
  171. data/lib/zen/package/sections/lib/sections/liquid/sections.rb +0 -77
  172. data/lib/zen/package/settings/lib/settings/liquid/setting.rb +0 -58
  173. data/lib/zen/package/users/lib/users/liquid/user.rb +0 -77
  174. data/lib/zen/package/users/lib/users/liquid/users.rb +0 -82
  175. data/lib/zen/plugin/markup.rb +0 -30
  176. data/lib/zen/public/admin/css/boilerplate.css +0 -176
  177. data/lib/zen/public/admin/images/general/noise.jpg +0 -0
  178. data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +0 -137
  179. data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +0 -291
  180. data/lib/zen/public/admin/js/vendor/datepicker/README.md +0 -325
  181. data/lib/zen/public/admin/js/vendor/datepicker/locale.js +0 -16
  182. data/lib/zen/strict_struct.rb +0 -36
  183. data/lib/zen/task/build.rb +0 -123
  184. data/lib/zen/task/clean.rb +0 -46
  185. data/lib/zen/task/db.rb +0 -130
  186. data/lib/zen/task/package.rb +0 -87
  187. data/lib/zen/task/proto.rb +0 -116
  188. data/lib/zen/task/theme.rb +0 -88
  189. data/proto/app/Thorfile +0 -4
@@ -0,0 +1,85 @@
1
+ #:nodoc:
2
+ module Sections
3
+ #:nodoc:
4
+ module Plugin
5
+ ##
6
+ # Plugin that can be used to display sections and their details. If you want to
7
+ # display section entries instead you should use the plugin
8
+ # Sections::Plugin::SectionEntries.
9
+ #
10
+ # ## Usage
11
+ #
12
+ # section = plugin(:sections, :section => 10)
13
+ # section.name # => "My Section"
14
+ #
15
+ # @author Yorick Peterse
16
+ # @since 0.2.5
17
+ #
18
+ class Sections
19
+ include ::Zen::Plugin::Helper
20
+ include ::Sections::Model
21
+
22
+ ##
23
+ # Creates a new instance of the plugin and saves/validates the given configuration
24
+ # options.
25
+ #
26
+ # @example
27
+ # plugin = Sections::Plugin::Sections.new(:section => 10)
28
+ #
29
+ # @author Yorick Peterse
30
+ # @since 0.2.5
31
+ # @param [Hash] options Hash with a set of configuration files to use.
32
+ #
33
+ def initialize(options = {})
34
+ @options = {
35
+ :limit => 20,
36
+ :offset => 0,
37
+ :section => nil
38
+ }.merge(options)
39
+
40
+ validate_type(@options[:limit] , :limit , [Fixnum, Integer])
41
+ validate_type(@options[:offset] , :offset , [Fixnum, Integer])
42
+ validate_type(@options[:section], :section, [NilClass, Integer, Fixnum, String])
43
+ end
44
+
45
+ ##
46
+ # Retrieves the section(s) based on the given configuration options. When multiple
47
+ # sections are retrieved they're returned as an array, otherwise a single instance
48
+ # of Sections::Model::Sections will be returned.
49
+ #
50
+ # @author Yorick Peterse
51
+ # @since 0.2.5
52
+ # @return [Array/Sections::Model::Section] List of all sections that were retrieved
53
+ # or an instance of Sections::Model::Section in case a specific section was retrieved
54
+ # from the database.
55
+ #
56
+ def call
57
+ # Retrieve a single section
58
+ if !@options[:section].nil?
59
+ # Retrieve a section by it's slug
60
+ if @options[:section].class == String
61
+ sections = Section[:slug => @options[:section]]
62
+ # Retrieve a section by it's ID
63
+ else
64
+ sections = Section[@options[:section]]
65
+ end
66
+ # Retrieve mutliple sections
67
+ else
68
+ sections = Section.limit(@options[:limit], @options[:offset]).all
69
+ end
70
+
71
+ # Convert every section to a hash
72
+ if sections.class == Array
73
+ sections.each_with_index do |section, index|
74
+ sections[index] = section.values
75
+ end
76
+ else
77
+ sections = sections.values
78
+ end
79
+
80
+ return sections
81
+ end
82
+
83
+ end
84
+ end
85
+ end
@@ -70,7 +70,7 @@ form_for(@section, :method => 'post', :action => @form_save_url, :id => :section
70
70
  f.select(
71
71
  lang('sections.labels.comment_format'),
72
72
  :comment_format,
73
- :values => @format_hash,
73
+ :values => Zen::Plugin::Markup::Engines,
74
74
  :selected => @section.comment_format,
75
75
  :size => 1
76
76
  )
@@ -22,7 +22,9 @@
22
22
  <th>#{lang('sections.labels.slug')}</th>
23
23
  <th>#{lang('sections.labels.comment_allow')}</th>
24
24
 
25
- <?r if user_authorized?([:create]) ?>
25
+ <?r if user_authorized?(
26
+ [:read], true, 'Sections::Controller::SectionEntries'
27
+ ) ?>
26
28
  <th></th>
27
29
  <?r end ?>
28
30
  </tr>
@@ -42,7 +44,7 @@
42
44
  <td>
43
45
  #{anchor_to(
44
46
  section.name,
45
- Sections::Controllers::Sections.r(:edit, section.id),
47
+ Sections::Controller::Sections.r(:edit, section.id),
46
48
  :title => section.name
47
49
  )}
48
50
  </td>
@@ -55,11 +57,13 @@
55
57
  #{@boolean_hash.invert[section.comment_allow]}
56
58
  </td>
57
59
 
58
- <?r if user_authorized?([:create]) ?>
60
+ <?r if user_authorized?(
61
+ [:read], true, 'Sections::Controller::SectionEntries'
62
+ ) ?>
59
63
  <td>
60
64
  #{anchor_to(
61
65
  lang('sections.labels.manage_entries'),
62
- Sections::Controllers::SectionEntries.r(:index, section.id)
66
+ Sections::Controller::SectionEntries.r(:index, section.id)
63
67
  )}
64
68
  </td>
65
69
  <?r end ?>
@@ -77,7 +81,7 @@
77
81
  <div class="button">
78
82
  #{anchor_to(
79
83
  lang('sections.buttons.new'),
80
- Sections::Controllers::Sections.r(:new)
84
+ Sections::Controller::Sections.r(:new)
81
85
  )}
82
86
  </div>
83
87
  <?r end ?>
@@ -40,7 +40,7 @@
40
40
  <td>
41
41
  #{anchor_to(
42
42
  entry.title,
43
- Sections::Controllers::SectionEntries.r(:edit, @section_id, entry.id)
43
+ Sections::Controller::SectionEntries.r(:edit, @section_id, entry.id)
44
44
  )}
45
45
  </td>
46
46
  <?r else ?>
@@ -66,7 +66,7 @@
66
66
  <div class="button">
67
67
  #{anchor_to(
68
68
  lang('section_entries.buttons.new'),
69
- Sections::Controllers::SectionEntries.r(:new, @section_id)
69
+ Sections::Controller::SectionEntries.r(:new, @section_id)
70
70
  )}
71
71
  </div>
72
72
  <?r end ?>
@@ -1,21 +1,156 @@
1
+ require __DIR__('settings/model/setting')
2
+ require __DIR__('settings/controller/settings')
3
+ require __DIR__('settings/plugin/settings')
1
4
 
2
- require __DIR__ 'settings/model/setting'
3
- require __DIR__ 'settings/controller/settings'
4
- require __DIR__ 'settings/liquid/setting'
5
-
6
- Liquid::Template.register_tag('setting', Settings::Liquid::Setting)
5
+ Zen::Language.options.paths.push(__DIR__('settings'))
6
+ Zen::Language.load('settings')
7
7
 
8
+ # Register the package
8
9
  Zen::Package.add do |p|
9
- p.name = 'Settings'
10
+ p.name = 'settings'
10
11
  p.author = 'Yorick Peterse'
11
12
  p.url = 'http://yorickpeterse.com/'
12
- p.about = 'Module for managing settings such as the default module, whether or not to allow registration, etc.'
13
- p.identifier = 'com.zen.settings'
13
+ p.about = 'Module for managing settings such as the default module, whether or
14
+ not to allow registration, etc.'
15
+
14
16
  p.directory = __DIR__('settings')
15
17
  p.migration_dir = __DIR__('../migrations')
16
18
 
17
19
  p.menu = [{
18
- :title => "Settings",
19
- :url => "admin/settings"
20
+ :title => lang('settings.titles.index'),
21
+ :url => 'admin/settings'
20
22
  }]
23
+
24
+ p.controllers = {
25
+ lang('settings.titles.index') => Settings::Controller::Settings
26
+ }
27
+ end
28
+
29
+ # Create all variables required for the settings
30
+ section_hash = {}
31
+ theme_hash = {}
32
+
33
+ begin
34
+ Sections::Model::Section.select(:name, :slug).each do |s|
35
+ section_hash[s.slug] = s.name
36
+ end
37
+ rescue => e
38
+ Ramaze::Log.warn("The settings plugin failed to retrieve all sections: #{e.message}")
39
+ end
40
+
41
+ Zen::Theme::Registered.each do |name, theme|
42
+ name = name.to_s
43
+ theme_hash[name] = name
44
+ end
45
+
46
+ # ------
47
+
48
+ # Register the plugin
49
+ Zen::Plugin.add do |plugin|
50
+ plugin.name = 'settings'
51
+ plugin.author = 'Yorick Peterse'
52
+ plugin.url = 'http://yorickpeterse.com/'
53
+ plugin.about = 'Plugin that can be used to register, retrieve and migrate settings.'
54
+ plugin.plugin = Settings::Plugin::Settings
55
+ end
56
+
57
+ # Register all setting groups
58
+ plugin(:settings, :register_group) do |group|
59
+ group.title = 'General'
60
+ group.name = 'general'
61
+ end
62
+
63
+ plugin(:settings, :register_group) do |group|
64
+ group.title = 'Security'
65
+ group.name = 'security'
66
+ end
67
+
68
+ # Register all settings
69
+ plugin(:settings, :register) do |setting|
70
+ setting.title = lang('settings.labels.website_name')
71
+ setting.description = lang('settings.placeholders.website_name')
72
+ setting.name = 'website_name'
73
+ setting.group = 'general'
74
+ setting.default = 'Zen'
75
+ setting.type = 'textbox'
76
+ end
77
+
78
+ plugin(:settings, :register) do |setting|
79
+ setting.title = lang('settings.labels.website_description')
80
+ setting.description = lang('settings.placeholders.website_description')
81
+ setting.name = 'website_description'
82
+ setting.group = 'general'
83
+ setting.type = 'textarea'
84
+ end
85
+
86
+ plugin(:settings, :register) do |setting|
87
+ setting.title = lang('settings.labels.website_enabled')
88
+ setting.description = lang('settings.placeholders.website_enabled')
89
+ setting.name = 'website_enabled'
90
+ setting.group = 'general'
91
+ setting.type = 'radio'
92
+ setting.default = '1'
93
+ setting.values = {
94
+ lang('zen_general.special.boolean_hash.true') => '1',
95
+ lang('zen_general.special.boolean_hash.false') => '0'
96
+ }
97
+ end
98
+
99
+ plugin(:settings, :register) do |setting|
100
+ setting.title = lang('settings.labels.language')
101
+ setting.description = lang('settings.placeholders.language')
102
+ setting.name = 'language'
103
+ setting.group = 'general'
104
+ setting.default = 'en'
105
+ setting.type = 'select'
106
+ setting.values = {
107
+ 'en' => lang('zen_general.special.language_hash.en')
108
+ }
109
+ end
110
+
111
+ plugin(:settings, :register) do |setting|
112
+ setting.title = lang('settings.labels.default_section')
113
+ setting.description = lang('settings.placeholders.default_section')
114
+ setting.name = 'default_section'
115
+ setting.group = 'general'
116
+ setting.type = 'select'
117
+ setting.values = section_hash
118
+ end
119
+
120
+ plugin(:settings, :register) do |setting|
121
+ setting.title = lang('settings.labels.theme')
122
+ setting.description = lang('settings.placeholders.theme')
123
+ setting.name = 'theme'
124
+ setting.group = 'general'
125
+ setting.type = 'select'
126
+ setting.values = theme_hash
127
+ end
128
+
129
+ plugin(:settings, :register) do |setting|
130
+ setting.title = lang('settings.labels.enable_antispam')
131
+ setting.description = lang('settings.placeholders.enable_antispam')
132
+ setting.name = 'enable_antispam'
133
+ setting.group = 'security'
134
+ setting.type = 'radio'
135
+ setting.values = {
136
+ lang('zen_general.special.boolean_hash.true') => '1',
137
+ lang('zen_general.special.boolean_hash.false') => '0'
138
+ }
139
+ end
140
+
141
+ plugin(:settings, :register) do |setting|
142
+ setting.title = lang('settings.labels.defensio_key')
143
+ setting.description = lang('settings.placeholders.defensio_key')
144
+ setting.name = 'defensio_key'
145
+ setting.group = 'security'
146
+ setting.type = 'textbox'
147
+ end
148
+
149
+ # Migrate all settings
150
+ begin
151
+ plugin(:settings, :migrate)
152
+ rescue
153
+ Ramaze::Log.warn(
154
+ "Failed to migrate the current settings, make sure the database table is up to date."
155
+ )
21
156
  end
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Settings
3
3
  #:nodoc:
4
- module Controllers
4
+ module Controller
5
5
  ##
6
6
  # Controller for managing settings. Each setting is saved as a separate
7
7
  # row in the database, making management and retrieving them easier.
@@ -9,11 +9,10 @@ module Settings
9
9
  # @author Yorick Peterse
10
10
  # @since 0.1
11
11
  #
12
- class Settings < Zen::Controllers::AdminController
13
- include ::Settings::Models
12
+ class Settings < Zen::Controller::AdminController
13
+ include ::Settings::Model
14
14
 
15
- map "/admin/settings"
16
- trait :extension_identifier => 'com.zen.settings'
15
+ map('/admin/settings')
17
16
 
18
17
  before_all do
19
18
  csrf_protection(:save, :delete) do
@@ -36,8 +35,6 @@ module Settings
36
35
 
37
36
  @form_save_url = Settings.r(:save)
38
37
 
39
- Zen::Language.load('settings')
40
-
41
38
  # Set the page title
42
39
  if !action.method.nil?
43
40
  method = action.method.to_sym
@@ -66,17 +63,17 @@ module Settings
66
63
 
67
64
  set_breadcrumbs(lang('settings.titles.index'))
68
65
 
69
- settings = Setting.all
70
- @settings = {}
66
+ @settings_ordered = {}
67
+ @groups = ::Settings::Plugin::Settings::Registered[:groups]
71
68
 
72
69
  # Organize the settings so that each item is a child
73
70
  # item of it's group.
74
- settings.each do |s|
75
- if !@settings.key?(s.group_key)
76
- @settings[s.group_key.to_s] = []
71
+ ::Settings::Plugin::Settings::Registered[:settings].each do |name, setting|
72
+ if !@settings_ordered.key?(setting.group)
73
+ @settings_ordered[setting.group] = []
77
74
  end
78
75
 
79
- @settings[s.group_key.to_s].push(s)
76
+ @settings_ordered[setting.group].push(setting)
80
77
  end
81
78
  end
82
79
 
@@ -102,19 +99,26 @@ module Settings
102
99
 
103
100
  flash_success = lang('settings.success.save')
104
101
  flash_error = lang('settings.errors.save')
105
-
106
- begin
107
- post.each do |key, value|
108
- @setting = Setting[:key => key].update(:value => value)
102
+
103
+ # Update all settings
104
+ post.each do |key, value|
105
+ setting = Setting[:name => key]
106
+
107
+ begin
108
+ # Update the DB record
109
+ setting.update(:value => value)
110
+ notification(:success, lang('settings.titles.index'), flash_success)
111
+
112
+ # Update the internal settings
113
+ if ::Zen::Settings[key.to_sym] != value
114
+ ::Zen::Settings[key.to_sym] = value
115
+ end
116
+ rescue
117
+ notification(:error, lang('settings.titles.index'), flash_error)
118
+ flash[:form_errors] = setting.errors
109
119
  end
110
-
111
- notification(:success, lang('settings.titles.index'), flash_success)
112
- rescue
113
- notification(:error, lang('settings.titles.index'), flash_error)
114
-
115
- flash[:form_errors] = @setting.errors
116
120
  end
117
-
121
+
118
122
  redirect_referrer
119
123
  end
120
124
  end
@@ -12,6 +12,16 @@ labels:
12
12
  enable_antispam : 'Enable anti-spam'
13
13
  defensio_key : 'Defensio API key'
14
14
 
15
+ placeholders:
16
+ website_name : 'The name of the website.'
17
+ website_description : 'The description of the website.'
18
+ website_enabled : 'Whether or not the website is available to non admins.'
19
+ language : 'The language to use for the system.'
20
+ default_section : 'The default section to use on the homepage.'
21
+ theme : 'The frontend theme to use.'
22
+ enable_antispam : "Whether or not Defensio's anti-spam system should be used."
23
+ defensio_key : 'The API key to use for the Defensio anti-spam system.'
24
+
15
25
  tabs:
16
26
  general : 'General'
17
27
  security : 'Security'
@@ -1,12 +1,12 @@
1
1
  #:nodoc:
2
2
  module Settings
3
3
  #:nodoc:
4
- module Models
4
+ module Model
5
5
  ##
6
6
  # Model that represents a single setting. This model is also used to retrieve
7
7
  # all possible values for a certain settngs. This is done by calling a method
8
8
  # that matches the format get_SETTING-NAME_values. For example, a setting named "theme"
9
- # would result in a call to Settings::Models::Setting#get_theme_values.
9
+ # would result in a call to Settings::Model::Setting#get_theme_values.
10
10
  #
11
11
  # In order to add new method you'll have to monkey patch this model as following:
12
12
  #
@@ -23,7 +23,6 @@ module Settings
23
23
  # idea to refactor this and put it in it's own class/plugin/whatever.
24
24
  #
25
25
  class Setting < Sequel::Model
26
- include ::Zen::Language
27
26
 
28
27
  ##
29
28
  # Retrieves all settings and returns them as a key/value hash.
@@ -42,72 +41,12 @@ module Settings
42
41
  value = s.value
43
42
  end
44
43
 
45
- settings[s.key.to_sym] = value
44
+ settings[s.name.to_sym] = value
46
45
  end
47
46
 
48
47
  return settings
49
48
  end
50
49
 
51
- ##
52
- # Generates the possible values for the setting "website_enabled".
53
- #
54
- # @author Yorick Peterse
55
- # @since 0.2
56
- # @return [Hash]
57
- #
58
- def self.get_website_enabled_values
59
- hash = {
60
- lang('zen_general.special.boolean_hash.true') => '1',
61
- lang('zen_general.special.boolean_hash.false') => '0'
62
- }
63
-
64
- return hash
65
- end
66
-
67
- ##
68
- # Generates the possible values for the setting "language".
69
- #
70
- # @author Yorick Peterse
71
- # @since 0.2
72
- # @return [Hash]
73
- #
74
- def self.get_language_values
75
- return ::Zen.languages
76
- end
77
-
78
- ##
79
- # Generates the possible values for the setting "default_section".
80
- #
81
- # @author Yorick Peterse
82
- # @since 0.2
83
- # @return [Hash]
84
- #
85
- def self.get_default_section_values
86
- section_hash = {}
87
-
88
- ::Sections::Models::Section.select(:name, :slug).each do |s|
89
- section_hash[s.slug] = s.name
90
- end
91
-
92
- return section_hash
93
- end
94
-
95
- ##
96
- # Generates the possible values for the setting "theme".
97
- #
98
- # @author Yorick Peterse
99
- # @since 0.2
100
- # @return [Hash]
101
- #
102
- def self.get_theme_values
103
- theme_hash = {}
104
-
105
- Zen::Theme.themes.each do |ident, theme|
106
- theme_hash[ident] = theme.name
107
- end
108
-
109
- return theme_hash
110
- end
111
50
  end
112
51
  end
113
52
  end