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.
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
@@ -10,18 +10,6 @@ Sequel.migration do
10
10
  String :type , :default => 'textbox'
11
11
  String :value , :text => true
12
12
  end
13
-
14
- # Insert our default settings
15
- Zen::Database.handle[:settings].insert_multiple([
16
- {:key => 'website_name' , :group_key => 'general' , :default => 'Zen', :type => 'textbox'},
17
- {:key => 'website_description', :group_key => 'general' , :type => 'textarea'},
18
- {:key => 'website_enabled' , :group_key => 'general' , :default => '1', :type => 'radio'},
19
- {:key => 'language' , :group_key => 'general' , :default => 'en', :type => 'select'},
20
- {:key => 'default_section' , :group_key => 'general' , :type => 'select'},
21
- {:key => 'theme' , :group_key => 'general' , :type => 'select'},
22
- {:key => 'enable_antispam' , :group_key => 'security', :default => true, :type => 'radio'},
23
- {:key => 'defensio_key' , :group_key => 'security', :type => 'textbox'}
24
- ])
25
13
  end
26
14
 
27
15
  down do
@@ -0,0 +1,31 @@
1
+ Sequel.migration do
2
+
3
+ up do
4
+ rename_column(:settings, :key, :name, :unique => true)
5
+ rename_column(:settings, :group_key, :group)
6
+
7
+ drop_column(:settings, :language_key)
8
+ drop_column(:settings, :language_group_key)
9
+
10
+ # Ensure the identifiers are unique
11
+ #add_index(:settings, :key, :unique => true)
12
+
13
+ # Update the settings
14
+ Zen::Database.handle[:settings].all.each do |row|
15
+ name = row[:name].split('.').last
16
+ group = row[:group].split('.').last
17
+
18
+ Zen::Database.handle[:settings].filter(:id => row[:id])
19
+ .update(:name => name, :group => group)
20
+ end
21
+ end
22
+
23
+ down do
24
+ rename_column(:settings, :name , :key)
25
+ rename_column(:settings, :group, :group_key)
26
+
27
+ add_column(:settings, :language_key , String)
28
+ add_column(:settings, :language_group_key, String)
29
+ end
30
+
31
+ end
@@ -1,38 +1,41 @@
1
-
2
1
  require __DIR__('users/model/user')
3
2
  require __DIR__('users/model/user_group')
4
3
  require __DIR__('users/model/access_rule')
5
-
6
4
  require __DIR__('users/controller/users')
7
5
  require __DIR__('users/controller/user_groups')
8
6
  require __DIR__('users/controller/access_rules')
9
7
 
10
- require __DIR__('users/liquid/users')
11
- require __DIR__('users/liquid/user')
12
-
13
- Liquid::Template.register_tag('users', Users::Liquid::Users)
14
- Liquid::Template.register_tag('user' , Users::Liquid::User)
8
+ Zen::Language.options.paths.push(__DIR__('users'))
9
+ Zen::Language.load('users')
10
+ Zen::Language.load('user_groups')
11
+ Zen::Language.load('access_rules')
15
12
 
16
13
  # The trait for the User helper has to be specified in the constructor as
17
14
  # our user model is loaded after this class is loaded (but before it's initialized)
18
- Zen::Controllers::BaseController.trait(:user_model => Users::Models::User)
15
+ Zen::Controller::BaseController.trait(:user_model => Users::Model::User)
19
16
 
20
17
  Zen::Package.add do |p|
21
- p.name = 'Users'
18
+ p.name = 'users'
22
19
  p.author = 'Yorick Peterse'
23
20
  p.url = 'http://yorickpeterse.com/'
24
- p.about = "Module for managing users along with handling authentication and authorization."
21
+ p.about = "Module for managing users along with handling authentication and
22
+ authorization."
25
23
 
26
- p.identifier = 'com.zen.users'
27
24
  p.directory = __DIR__('users')
28
25
  p.migration_dir = __DIR__('../migrations')
29
26
 
30
27
  p.menu = [{
31
- :title => "Users",
32
- :url => "admin/users",
28
+ :title => lang('users.titles.index'),
29
+ :url => 'admin/users',
33
30
  :children => [
34
- {:title => "User Groups" , :url => "admin/user-groups" },
35
- {:title => "Access Rules", :url => "admin/access-rules"}
31
+ {:title => lang('user_groups.titles.index') , :url => 'admin/user-groups' },
32
+ {:title => lang('access_rules.titles.index'), :url => 'admin/access-rules'}
36
33
  ]
37
34
  }]
35
+
36
+ p.controllers = {
37
+ lang('users.titles.index') => Users::Controller::Users,
38
+ lang('user_groups.titles.index') => Users::Controller::UserGroups,
39
+ lang('access_rules.titles.index') => Users::Controller::AccessRules
40
+ }
38
41
  end
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Users
3
3
  #:nodoc:
4
- module Controllers
4
+ module Controller
5
5
  ##
6
6
  # Controller for managing access rules. Each access rule can be used
7
7
  # to specify whether or not a user can edit or create something.
@@ -16,11 +16,12 @@ module Users
16
16
  # @author Yorick Peterse
17
17
  # @since 0.1
18
18
  #
19
- class AccessRules < Zen::Controllers::AdminController
20
- include ::Users::Models
19
+ class AccessRules < Zen::Controller::AdminController
20
+ include ::Users::Model
21
21
 
22
- map '/admin/access-rules'
23
- trait :extension_identifier => 'com.zen.users'
22
+ map('/admin/access-rules')
23
+
24
+ javascript(['users/access_rules'])
24
25
 
25
26
  before_all do
26
27
  csrf_protection(:save, :delete) do
@@ -51,8 +52,6 @@ module Users
51
52
  @page_title = lang("access_rules.titles.#{method}") rescue nil
52
53
  end
53
54
 
54
- require_js 'users/access_rules'
55
-
56
55
  @rule_applies_hash = {
57
56
  lang('access_rules.labels.user') => 'div_user_id',
58
57
  lang('access_rules.labels.user_group') => 'div_user_group_id'
@@ -80,6 +79,39 @@ module Users
80
79
  @access_rules = AccessRule.all
81
80
  end
82
81
 
82
+ ##
83
+ # Hook that's executed before the edit and new method. This hook is used to
84
+ # pre-process some data used in the form.
85
+ #
86
+ # @author Yorick Peterse
87
+ # @since 0.2.5
88
+ #
89
+ before(:index, :edit, :new) do
90
+ @form_users = {}
91
+ @form_groups = {}
92
+ @form_packages = {}
93
+ @form_controllers = {}
94
+
95
+ ::Users::Model::User.select(:id, :name).each do |user|
96
+ @form_users[user.id.to_s] = user.name
97
+ end
98
+
99
+ # Build the list of available packages and controllers
100
+ ::Zen::Package::Registered.each do |name, pkg|
101
+ name = name.to_s
102
+ @form_packages[name] = name
103
+ @form_controllers[name] ||= {lang('access_rules.labels.all_controllers') => '*'}
104
+
105
+ pkg.controllers.each do |key, value|
106
+ @form_controllers[name][key] = value.to_s
107
+ end
108
+ end
109
+
110
+ ::Users::Model::UserGroup.select(:id, :name).each do |group|
111
+ @form_groups[group.id.to_s] = group.name
112
+ end
113
+ end
114
+
83
115
  ##
84
116
  # Edit an existing access rule.
85
117
  #
@@ -151,7 +183,7 @@ module Users
151
183
 
152
184
  post = request.params.dup
153
185
 
154
- if post['rule_applies'] == 'div_user_id'
186
+ if post['rule_applies'] === 'div_user_id'
155
187
  post['user_group_id'] = nil
156
188
  else
157
189
  post['user_id'] = nil
@@ -172,6 +204,9 @@ module Users
172
204
 
173
205
  begin
174
206
  @access_rule.update(post)
207
+
208
+ # Flush the existing rules from the session
209
+ session.delete(:access_rules)
175
210
  notification(:success, lang('access_rules.titles.index'), flash_success)
176
211
  rescue
177
212
  notification(:error, lang('access_rules.titles.index'), flash_error)
@@ -217,6 +252,7 @@ module Users
217
252
 
218
253
  begin
219
254
  @access_rule.delete
255
+ session.delete(:access_rules)
220
256
  notification(
221
257
  :success,
222
258
  lang('access_rules.titles.index'),
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Users
3
3
  #:nodoc:
4
- module Controllers
4
+ module Controller
5
5
  ##
6
6
  # Controller for managing all user groups. It's not
7
7
  # required to add a user to a group but it can certainly
@@ -11,11 +11,10 @@ module Users
11
11
  # @author Yorick Peterse
12
12
  # @since 0.1
13
13
  #
14
- class UserGroups < Zen::Controllers::AdminController
15
- include ::Users::Models
14
+ class UserGroups < Zen::Controller::AdminController
15
+ include ::Users::Model
16
16
 
17
- map '/admin/user-groups'
18
- trait :extension_identifier => 'com.zen.users'
17
+ map('/admin/user-groups')
19
18
 
20
19
  before_all do
21
20
  csrf_protection(:save, :delete) do
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Users
3
3
  #:nodoc:
4
- module Controllers
4
+ module Controller
5
5
  ##
6
6
  # Controller for managing users. Users in this case are people
7
7
  # that have access to the backend. However, users might be able
@@ -14,11 +14,10 @@ module Users
14
14
  # @author Yorick Peterse
15
15
  # @since 0.1
16
16
  #
17
- class Users < Zen::Controllers::AdminController
18
- include ::Users::Models
17
+ class Users < Zen::Controller::AdminController
18
+ include ::Users::Model
19
19
 
20
- map '/admin/users'
21
- trait :extension_identifier => 'com.zen.users'
20
+ map('/admin/users')
22
21
 
23
22
  before_all do
24
23
  csrf_protection(:save, :delete) do
@@ -158,7 +157,7 @@ module Users
158
157
  User[:email => request.params['email']].update(:last_login => Time.new)
159
158
 
160
159
  notification(:success, lang('users.titles.index'), lang('users.success.login'))
161
- redirect(::Sections::Controllers::Sections.r(:index))
160
+ redirect(::Sections::Controller::Sections.r(:index))
162
161
  else
163
162
  notification(:error, lang('users.titles.index'), lang('users.errors.login'))
164
163
  end
@@ -5,15 +5,17 @@ titles:
5
5
  new : 'Add Access Rule'
6
6
 
7
7
  labels:
8
- id : '#'
9
- extension : 'Extension'
10
- rule_applies : 'Rule applies to'
11
- create : 'Create'
12
- read : 'Read'
13
- update : 'Update'
14
- delete : 'Delete'
15
- user : 'User'
16
- user_group : 'User group'
8
+ id : '#'
9
+ package : 'Package'
10
+ controller : 'Controller'
11
+ rule_applies : 'Rule applies to'
12
+ create : 'Create'
13
+ read : 'Read'
14
+ update : 'Update'
15
+ delete : 'Delete'
16
+ user : 'User'
17
+ user_group : 'User group'
18
+ all_controllers: 'All controllers'
17
19
 
18
20
  messages:
19
21
  no_rules: 'No access rules have been added yet.'
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Users
3
3
  #:nodoc:
4
- module Models
4
+ module Model
5
5
  ##
6
6
  # Model that represents a single access rule. This model has the following
7
7
  # relations:
@@ -13,8 +13,8 @@ module Users
13
13
  # @since 0.1
14
14
  #
15
15
  class AccessRule < Sequel::Model
16
- many_to_one :user , :class => "Users::Models::User"
17
- many_to_one :user_group, :class => "Users::Models::UserGroup"
16
+ many_to_one :user , :class => "Users::Model::User"
17
+ many_to_one :user_group, :class => "Users::Model::UserGroup"
18
18
 
19
19
  ##
20
20
  # Validation rules used when creating or updating an access rule.
@@ -23,9 +23,10 @@ module Users
23
23
  # @since 0.1
24
24
  #
25
25
  def validate
26
- validates_presence(
27
- [:extension, :create_access, :read_access, :update_access, :delete_access]
28
- )
26
+ validates_presence([
27
+ :package, :controller, :create_access, :read_access, :update_access,
28
+ :delete_access
29
+ ])
29
30
 
30
31
  validates_type(
31
32
  TrueClass,
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Users
3
3
  #:nodoc:
4
- module Models
4
+ module Model
5
5
  ##
6
6
  # Model that represents the very important user. This model
7
7
  # can be used for both CRUD actions as well as authenticating a user.
@@ -22,8 +22,8 @@ module Users
22
22
  class User < Sequel::Model
23
23
  plugin :timestamps, :create => :created_at, :update => :updated_at
24
24
 
25
- many_to_many :user_groups, :class => "Users::Models::UserGroup", :eager => [:access_rules]
26
- one_to_many :access_rules, :class => "Users::Models::AccessRule"
25
+ many_to_many :user_groups, :class => "Users::Model::UserGroup", :eager => [:access_rules]
26
+ one_to_many :access_rules, :class => "Users::Model::AccessRule"
27
27
 
28
28
  ##
29
29
  # Try to authenticate the user based on the specified credentials.
@@ -49,7 +49,7 @@ module Users
49
49
  user = self[:email => email]
50
50
 
51
51
  if !user.nil? and user.password == password and user.status == 'open'
52
- ::Zen::Controllers::BaseController.session[:user] = user
52
+ ::Zen::Controller::BaseController.session[:user] = user
53
53
  return user
54
54
  else
55
55
  return false
@@ -1,7 +1,7 @@
1
1
  #:nodoc:
2
2
  module Users
3
3
  #:nodoc:
4
- module Models
4
+ module Model
5
5
  ##
6
6
  # Model that represents a single user group. This model has the following
7
7
  # relations:
@@ -17,8 +17,8 @@ module Users
17
17
  # @since 0.1
18
18
  #
19
19
  class UserGroup < Sequel::Model
20
- many_to_many(:users , :class => "Users::Models::User")
21
- one_to_many(:access_rules, :class => "Users::Models::AccessRule")
20
+ many_to_many(:users , :class => "Users::Model::User")
21
+ one_to_many(:access_rules, :class => "Users::Model::AccessRule")
22
22
 
23
23
  plugin :sluggable , :source => :name, :freeze => false
24
24
 
@@ -1,3 +1,33 @@
1
+ /**
2
+ * Function that toggles a given select element from the list of elements.
3
+ *
4
+ * @author Yorick Peterse
5
+ * @since 0.2.5
6
+ * @param {array} controllers A list of select boxes containing all controllers.
7
+ * @param {string} selected The ID of the select element that has to be displayed.
8
+ *
9
+ */
10
+ function toggleSelect(controllers, selected)
11
+ {
12
+ // Show the correct box and hide all others
13
+ controllers.each(function(element)
14
+ {
15
+ if ( element.id === selected )
16
+ {
17
+ element.removeClass('hidden').set('disabled', false);
18
+ }
19
+ else
20
+ {
21
+ if ( !element.hasClass('hidden') )
22
+ {
23
+ element.addClass('hidden');
24
+ }
25
+
26
+ element.set('disabled', true);
27
+ }
28
+ });
29
+ }
30
+
1
31
  window.addEvent('domready', function()
2
32
  {
3
33
  // Hide the fields that allow a user to pick a user or group
@@ -39,4 +69,24 @@ window.addEvent('domready', function()
39
69
  });
40
70
  });
41
71
  });
72
+
73
+ var package_select = $('form_package');
74
+
75
+ if ( package_select )
76
+ {
77
+ // Hide all the controller select boxes and only show the ones that belong to the
78
+ // currently selected package.
79
+ var controllers = $$('select.controllers');
80
+
81
+ // Show the first box by default
82
+ toggleSelect(controllers, package_select.get('value') + '_controllers');
83
+
84
+ // When the select element's value is changed the correct controller box should
85
+ // be displayed and the old one should be hidden
86
+ package_select.addEvent('change', function()
87
+ {
88
+ var selected = this.get('value') + '_controllers';
89
+ toggleSelect(controllers, selected);
90
+ });
91
+ }
42
92
  });
@@ -3,31 +3,12 @@
3
3
  @access_rule, :method => :post, :action => @form_save_url, :id => :access_rule_form
4
4
  ) do |f|
5
5
 
6
- users = {}
7
- groups = {}
8
- extensions = {}
9
- rule_applies = ''
10
-
11
6
  if !@access_rule.user_id.nil?
12
7
  rule_applies = 'div_user_id'
13
8
  else
14
9
  rule_applies = 'div_user_group_id'
15
10
  end
16
11
 
17
- Users::Models::User.select(:id, :name).each do |user|
18
- users[user.id.to_s] = user.name
19
- end
20
-
21
- Zen::Package.packages.each do |ident, ext|
22
- extensions[ident] = ext.name
23
- end
24
-
25
- Users::Models::UserGroup.select(:id, :name).each do |group|
26
- groups[group.id.to_s] = group.name
27
- end
28
-
29
- # ---------------------
30
-
31
12
  f.input_hidden(:id, @access_rule.id)
32
13
  f.input_hidden(:csrf_token, get_csrf_token)
33
14
 
@@ -39,37 +20,59 @@
39
20
  )
40
21
 
41
22
  f.g.div(:id => 'div_user_id') do
42
-
43
23
  f.select(
44
24
  lang('access_rules.labels.user'),
45
25
  :user_id,
46
- :values => users,
26
+ :values => @form_users,
47
27
  :selected => @access_rule.user_id,
48
28
  :size => 1
49
29
  )
50
-
51
30
  end
52
31
 
53
32
  f.g.div(:id => 'div_user_group_id') do
54
-
55
33
  f.select(
56
34
  lang('access_rules.labels.user_group'),
57
35
  :user_group_id,
58
- :values => groups,
36
+ :values => @form_groups,
59
37
  :selected => @access_rule.user_group_id,
60
38
  :size => 1
61
39
  )
62
-
63
40
  end
64
41
 
65
42
  f.select(
66
- lang('access_rules.labels.extension'),
67
- :extension,
68
- :values => extensions,
69
- :selected => @access_rule.extension,
43
+ lang('access_rules.labels.package'),
44
+ :package,
45
+ :values => @form_packages,
46
+ :selected => @access_rule.package,
70
47
  :size => 1
71
48
  )
72
49
 
50
+ # Build the select boxes for all controllers
51
+ f.g.p do
52
+ f.g.label { lang('access_rules.labels.controller') }
53
+ @form_controllers.each do |pkg, controllers|
54
+ f.g.select(
55
+ :id => "#{pkg}_controllers", :class => 'controllers hidden', :name => 'controller'
56
+ ) do
57
+ # Show all the options
58
+ controllers.each do |key, value|
59
+ args = {:value => value}
60
+
61
+ # Is it selected?
62
+ if value === @access_rule.controller
63
+ args[:selected] = 'selected'
64
+ else
65
+ args.delete(:selected)
66
+ end
67
+
68
+ f.g.option(args) do
69
+ key
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+
73
76
  f.input_radio(
74
77
  lang('access_rules.labels.create'),
75
78
  :create_access,