goldberg_generator 0.2.2

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 (186) hide show
  1. data/USAGE +34 -0
  2. data/goldberg_generator.rb +463 -0
  3. data/templates/README_GOLDBERG +22 -0
  4. data/templates/app/views/layouts/application.rhtml +80 -0
  5. data/templates/layouts/ewnf/README +8 -0
  6. data/templates/layouts/ewnf/app/views/layouts/application.rhtml +74 -0
  7. data/templates/layouts/ewnf/public/images/bg.gif +0 -0
  8. data/templates/layouts/ewnf/public/images/daddy_rightarrow.gif +0 -0
  9. data/templates/layouts/ewnf/public/images/sample.jpg +0 -0
  10. data/templates/layouts/ewnf/public/images/title_img.jpg +0 -0
  11. data/templates/layouts/ewnf/public/stylesheets/layout.css +223 -0
  12. data/templates/layouts/snooker/app/views/layouts/application.rhtml +74 -0
  13. data/templates/layouts/snooker/public/images/column_200.png +0 -0
  14. data/templates/layouts/snooker/public/images/daddy_rightarrow.gif +0 -0
  15. data/templates/layouts/snooker/public/images/footer_bg.png +0 -0
  16. data/templates/layouts/snooker/public/images/logo.jpg +0 -0
  17. data/templates/layouts/snooker/public/stylesheets/layout.css +183 -0
  18. data/templates/layouts/spoiled_brat/LICENSE.txt +211 -0
  19. data/templates/layouts/spoiled_brat/README +8 -0
  20. data/templates/layouts/spoiled_brat/app/views/layouts/application.rhtml +71 -0
  21. data/templates/layouts/spoiled_brat/public/images/blockquote-bg.gif +0 -0
  22. data/templates/layouts/spoiled_brat/public/images/body-bg.jpg +0 -0
  23. data/templates/layouts/spoiled_brat/public/images/centerColumn-bg.jpg +0 -0
  24. data/templates/layouts/spoiled_brat/public/images/daddy_leftarrow.gif +0 -0
  25. data/templates/layouts/spoiled_brat/public/images/h2-bg.gif +0 -0
  26. data/templates/layouts/spoiled_brat/public/images/h3-bg.gif +0 -0
  27. data/templates/layouts/spoiled_brat/public/images/header-bg.jpg +0 -0
  28. data/templates/layouts/spoiled_brat/public/images/hr-bg.jpg +0 -0
  29. data/templates/layouts/spoiled_brat/public/images/logo.jpg +0 -0
  30. data/templates/layouts/spoiled_brat/public/stylesheets/layout.css +379 -0
  31. data/templates/public/goldberg/images/action.png +0 -0
  32. data/templates/public/goldberg/images/add.png +0 -0
  33. data/templates/public/goldberg/images/bodybg.jpg +0 -0
  34. data/templates/public/goldberg/images/delete.png +0 -0
  35. data/templates/public/goldberg/images/down.png +0 -0
  36. data/templates/public/goldberg/images/footerbg.jpg +0 -0
  37. data/templates/public/goldberg/images/logo_right.jpg +0 -0
  38. data/templates/public/goldberg/images/menuhover.jpg +0 -0
  39. data/templates/public/goldberg/images/page.png +0 -0
  40. data/templates/public/goldberg/images/permission.png +0 -0
  41. data/templates/public/goldberg/images/role.png +0 -0
  42. data/templates/public/goldberg/images/up.png +0 -0
  43. data/templates/public/goldberg/javascripts/suckerfish.js +12 -0
  44. data/templates/public/goldberg/stylesheets/goldberg.css +142 -0
  45. data/templates/public/goldberg/stylesheets/layout.css +321 -0
  46. data/templates/public/goldberg/stylesheets/suckerfish.css +124 -0
  47. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/auth_controller.rb +104 -0
  48. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/content_pages_controller.rb +197 -0
  49. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/controller_actions_controller.rb +134 -0
  50. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/menu_items_controller.rb +184 -0
  51. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/permissions_controller.rb +60 -0
  52. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_controller.rb +85 -0
  53. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_permissions_controller.rb +65 -0
  54. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/site_controllers_controller.rb +157 -0
  55. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/system_settings_controller.rb +75 -0
  56. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/users_controller.rb +293 -0
  57. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/auth_helper.rb +4 -0
  58. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/content_pages_helper.rb +23 -0
  59. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/controller_actions_helper.rb +5 -0
  60. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/menu_items_helper.rb +4 -0
  61. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/permissions_helper.rb +4 -0
  62. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_helper.rb +4 -0
  63. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_permissions_helper.rb +4 -0
  64. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/site_controllers_helper.rb +4 -0
  65. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/system_settings_helper.rb +4 -0
  66. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/users_helper.rb +4 -0
  67. data/templates/vendor/plugins/goldberg/app/models/goldberg/content_page.rb +134 -0
  68. data/templates/vendor/plugins/goldberg/app/models/goldberg/controller_action.rb +86 -0
  69. data/templates/vendor/plugins/goldberg/app/models/goldberg/credentials.rb +128 -0
  70. data/templates/vendor/plugins/goldberg/app/models/goldberg/menu.rb +198 -0
  71. data/templates/vendor/plugins/goldberg/app/models/goldberg/menu_item.rb +127 -0
  72. data/templates/vendor/plugins/goldberg/app/models/goldberg/permission.rb +37 -0
  73. data/templates/vendor/plugins/goldberg/app/models/goldberg/role.rb +68 -0
  74. data/templates/vendor/plugins/goldberg/app/models/goldberg/roles_permission.rb +18 -0
  75. data/templates/vendor/plugins/goldberg/app/models/goldberg/site_controller.rb +59 -0
  76. data/templates/vendor/plugins/goldberg/app/models/goldberg/system_settings.rb +112 -0
  77. data/templates/vendor/plugins/goldberg/app/models/goldberg/user.rb +69 -0
  78. data/templates/vendor/plugins/goldberg/app/models/goldberg/user_mailer.rb +43 -0
  79. data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/_login.rhtml +15 -0
  80. data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/login.rhtml +22 -0
  81. data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/logout.rhtml +2 -0
  82. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_create_folder.rxml +6 -0
  83. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_files.rxml +19 -0
  84. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_form.rhtml +32 -0
  85. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/edit.rhtml +10 -0
  86. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/fck_speller_pages.rhtml +58 -0
  87. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/list.rhtml +22 -0
  88. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/new.rhtml +8 -0
  89. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/show.rhtml +57 -0
  90. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view.rhtml +1 -0
  91. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view_default.rhtml +1 -0
  92. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/_form.rhtml +53 -0
  93. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/edit.rhtml +9 -0
  94. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/list.rhtml +27 -0
  95. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/new.rhtml +10 -0
  96. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/show.rhtml +13 -0
  97. data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_js.rhtml +52 -0
  98. data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_list.rhtml +7 -0
  99. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_breadcrumbs.rhtml +5 -0
  100. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_form.rhtml +42 -0
  101. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_list.rhtml +52 -0
  102. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_parent_list.rhtml +15 -0
  103. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_menubar.rhtml +21 -0
  104. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_suckerfish.rhtml +14 -0
  105. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/edit.rhtml +10 -0
  106. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list-original.rhtml +27 -0
  107. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list.rhtml +16 -0
  108. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/new.rhtml +9 -0
  109. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/show.rhtml +8 -0
  110. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/_form.rhtml +7 -0
  111. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/edit.rhtml +9 -0
  112. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/list.rhtml +14 -0
  113. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/new.rhtml +8 -0
  114. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/show.rhtml +38 -0
  115. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/_form.rhtml +18 -0
  116. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/edit.rhtml +9 -0
  117. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/list.rhtml +21 -0
  118. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/new.rhtml +8 -0
  119. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/show.rhtml +79 -0
  120. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/_form.rhtml +13 -0
  121. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/edit.rhtml +9 -0
  122. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/list.rhtml +24 -0
  123. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new.rhtml +8 -0
  124. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new_permission_for_role.rhtml +8 -0
  125. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/show.rhtml +8 -0
  126. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_form.rhtml +15 -0
  127. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_list.rhtml +26 -0
  128. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/edit.rhtml +9 -0
  129. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/list.rhtml +107 -0
  130. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/new.rhtml +8 -0
  131. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/show.rhtml +38 -0
  132. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/_form.rhtml +71 -0
  133. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/edit.rhtml +9 -0
  134. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/list.rhtml +27 -0
  135. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/new.rhtml +8 -0
  136. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/show.rhtml +189 -0
  137. data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/confirmation_request.rhtml +19 -0
  138. data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password.rhtml +17 -0
  139. data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password_request.rhtml +23 -0
  140. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/_form.rhtml +53 -0
  141. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration.rhtml +26 -0
  142. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration_submit.rhtml +4 -0
  143. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/create.rhtml +19 -0
  144. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/edit.rhtml +11 -0
  145. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password.rhtml +27 -0
  146. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password_submit.rhtml +4 -0
  147. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/list.rhtml +18 -0
  148. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/new.rhtml +19 -0
  149. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password.rhtml +11 -0
  150. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password_submit.rhtml +3 -0
  151. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/show.rhtml +33 -0
  152. data/templates/vendor/plugins/goldberg/db/ContentPage.yml +466 -0
  153. data/templates/vendor/plugins/goldberg/db/ControllerAction.yml +162 -0
  154. data/templates/vendor/plugins/goldberg/db/MenuItem.yml +109 -0
  155. data/templates/vendor/plugins/goldberg/db/Permission.yml +21 -0
  156. data/templates/vendor/plugins/goldberg/db/Role.yml +493 -0
  157. data/templates/vendor/plugins/goldberg/db/RolesPermission.yml +26 -0
  158. data/templates/vendor/plugins/goldberg/db/SiteController.yml +61 -0
  159. data/templates/vendor/plugins/goldberg/db/SystemSettings.yml +21 -0
  160. data/templates/vendor/plugins/goldberg/db/User.yml +15 -0
  161. data/templates/vendor/plugins/goldberg/db/migrate/001_initial_setup.rb +128 -0
  162. data/templates/vendor/plugins/goldberg/db/migrate/002_menu_rest_items_users_cached_content_pages.rb +26 -0
  163. data/templates/vendor/plugins/goldberg/db/migrate/003_self_registration.rb +54 -0
  164. data/templates/vendor/plugins/goldberg/db/migrate/004_column_fixes.rb +119 -0
  165. data/templates/vendor/plugins/goldberg/init.rb +13 -0
  166. data/templates/vendor/plugins/goldberg/lib/goldberg.rb +37 -0
  167. data/templates/vendor/plugins/goldberg/lib/goldberg/controller.rb +11 -0
  168. data/templates/vendor/plugins/goldberg/lib/goldberg/filters.rb +197 -0
  169. data/templates/vendor/plugins/goldberg/lib/goldberg/helper.rb +66 -0
  170. data/templates/vendor/plugins/goldberg/lib/goldberg/migration.rb +113 -0
  171. data/templates/vendor/plugins/goldberg/lib/goldberg/migrator.rb +128 -0
  172. data/templates/vendor/plugins/goldberg/lib/goldberg/model.rb +110 -0
  173. data/templates/vendor/plugins/goldberg/lib/goldberg/routes.rb +49 -0
  174. data/templates/vendor/plugins/goldberg/lib/goldberg/test_helper.rb +82 -0
  175. data/templates/vendor/plugins/goldberg/tasks/goldberg_tasks.rake +47 -0
  176. data/templates/vendor/plugins/goldberg/test/functional/content_pages_controller_test.rb +31 -0
  177. data/templates/vendor/plugins/goldberg/test/integration/security_test.rb +134 -0
  178. data/templates/vendor/plugins/goldberg/test/test_helper.rb +40 -0
  179. data/templates/vendor/plugins/goldberg/test/unit/content_page_test.rb +87 -0
  180. data/templates/vendor/plugins/goldberg/test/unit/controller_action_test.rb +85 -0
  181. data/templates/vendor/plugins/goldberg/test/unit/menu_item_test.rb +46 -0
  182. data/templates/vendor/plugins/goldberg/test/unit/permission_test.rb +35 -0
  183. data/templates/vendor/plugins/goldberg/test/unit/site_controller_test.rb +53 -0
  184. data/templates/vendor/plugins/goldberg/test/unit/system_settings_test.rb +71 -0
  185. data/templates/vendor/plugins/goldberg/test/unit/user_test.rb +104 -0
  186. metadata +310 -0
@@ -0,0 +1,127 @@
1
+ module Goldberg
2
+ class MenuItem < ActiveRecord::Base
3
+ include Goldberg::Model
4
+
5
+ validates_presence_of :name, :label
6
+ validates_uniqueness_of :name
7
+
8
+ attr_accessor :controller_action, :content_page
9
+
10
+ def above
11
+ if self.parent_id
12
+ conditions =
13
+ ["parent_id = ? and seq = ?", self.parent_id, self.seq - 1]
14
+ else
15
+ conditions =
16
+ ["parent_id is null and seq = ?", self.seq - 1]
17
+ end
18
+
19
+ return MenuItem.find(:first,
20
+ :conditions => conditions)
21
+ end
22
+
23
+
24
+ def below
25
+ if self.parent_id
26
+ conditions =
27
+ ["parent_id = ? and seq = ?", self.parent_id, self.seq + 1]
28
+ else
29
+ conditions =
30
+ ["parent_id is null and seq = ?", self.seq + 1]
31
+ end
32
+
33
+ return MenuItem.find(:first,
34
+ :conditions => conditions)
35
+ end
36
+
37
+
38
+ def MenuItem.repack(repack_id)
39
+ if repack_id
40
+ items = MenuItem.find(:all,
41
+ :conditions => "parent_id = #{repack_id}",
42
+ :order => 'seq')
43
+ else
44
+ items = MenuItem.find(:all,
45
+ :conditions => "parent_id is null",
46
+ :order => 'seq')
47
+ end
48
+
49
+ seq = 1
50
+ for item in items do
51
+ item.seq = seq
52
+ item.save!
53
+ seq += 1
54
+ end
55
+ end
56
+
57
+
58
+ def MenuItem.next_seq(parent_id)
59
+ if parent_id and parent_id.to_i > 0
60
+ next_seq = MenuItem.find_by_sql("select coalesce(max(seq) + 1, 1) as seq from #{prefix}menu_items where parent_id = #{parent_id}")
61
+ else
62
+ next_seq = MenuItem.find_by_sql("select coalesce(max(seq) + 1, 1) as seq from #{prefix}menu_items where parent_id is null")
63
+ end
64
+
65
+ if next_seq
66
+ return next_seq[0].seq
67
+ else
68
+ return 1
69
+ end
70
+ end
71
+
72
+
73
+ def MenuItem.items_for_permissions(permission_ids = nil)
74
+ # Hash for faster & easier lookups
75
+ if permission_ids
76
+ perms = {}
77
+ for id in permission_ids do
78
+ perms[id] = true
79
+ end
80
+ end
81
+
82
+ # List of items to return
83
+ items = []
84
+
85
+ menu_items = self.find(:all,
86
+ :order => 'parent_id, seq, id')
87
+ for item in menu_items do
88
+ if item.controller_action_id.to_i > 0
89
+ item.controller_action =
90
+ ControllerAction.find(item.controller_action_id)
91
+ if perms
92
+ if perms.has_key?(item.controller_action.effective_permission.id)
93
+ items << item
94
+ end
95
+ else
96
+ items << item
97
+ end
98
+ elsif item.content_page_id.to_i > 0
99
+ item.content_page =
100
+ ContentPage.find(item.content_page_id)
101
+ if perms
102
+ if perms.has_key?(item.content_page.permission_id)
103
+ items << item
104
+ end
105
+ else
106
+ items << item
107
+ end
108
+ end
109
+ end
110
+
111
+ return items
112
+ end
113
+
114
+
115
+ protected
116
+
117
+
118
+ def validate
119
+ unless self.content_page_id.to_i != 0 || controller_action_id.to_i != 0
120
+ errors.add(:content_page_id, 'A menu item must be attached to either a content page or a controller / action')
121
+ errors.add(:controller_action_id, 'A menu item must be attached to either a content page or a controller / action')
122
+ end
123
+ end
124
+
125
+
126
+ end
127
+ end
@@ -0,0 +1,37 @@
1
+ module Goldberg
2
+ class Permission < ActiveRecord::Base
3
+ include Goldberg::Model
4
+
5
+ has_many :content_pages
6
+ has_many :site_controllers
7
+ has_many :controller_actions
8
+
9
+ validates_presence_of :name
10
+ validates_uniqueness_of :name
11
+
12
+ class << self
13
+ # Find Permissions for a Role ID or an array of Role IDs.
14
+ def find_for_role(role_ids)
15
+ return find_by_sql( ["select p.* from #{prefix}permissions p inner join #{prefix}roles_permissions rp on p.id = rp.permission_id where role_id in (?) order by p.name", role_ids] )
16
+ end
17
+
18
+
19
+ # Find all Permissions for a Role. This method gets the hierarchy
20
+ # for the given Role and uses that to get all the Permissions for
21
+ # the Role and its ancestors.
22
+ def find_all_for_role(role)
23
+ roles = role.get_parents
24
+ roles << role
25
+ return find_for_role(roles.collect(&:id))
26
+ end
27
+
28
+
29
+ # Find Permissions that are not already associated with the given
30
+ # Role ID.
31
+ def find_not_for_role(role_id)
32
+ return find_by_sql( ["select p.* from #{prefix}permissions p where id not in (select permission_id from #{prefix}roles_permissions rp where role_id in (?)) order by name", role_id] )
33
+ end
34
+
35
+ end # class << self
36
+ end
37
+ end
@@ -0,0 +1,68 @@
1
+ require "goldberg/credentials"
2
+ require "goldberg/menu"
3
+
4
+ module Goldberg
5
+ class Role < ActiveRecord::Base
6
+ include Goldberg::Model
7
+
8
+ has_many :users
9
+
10
+ validates_presence_of :name
11
+ validates_uniqueness_of :name
12
+
13
+ serialize :cache
14
+
15
+ class << self
16
+ def Role.rebuild_cache
17
+ roles = Role.find(:all)
18
+
19
+ for role in roles do
20
+ role.cache = nil ; role.save # we have to do this to clear it
21
+
22
+ role.cache = Hash.new
23
+ role.rebuild_credentials
24
+ role.rebuild_menu
25
+ role.save
26
+ end
27
+ end
28
+ end # class << self
29
+
30
+ def rebuild_credentials
31
+ self.cache[:credentials] = Credentials.new(self.id)
32
+ end
33
+
34
+ def rebuild_menu
35
+ menu = Menu.new(self)
36
+ self.cache[:menu] = menu
37
+ end
38
+
39
+ def get_parents
40
+ parents = Array.new
41
+ seen = Hash.new
42
+
43
+ current = self.id
44
+
45
+ while current
46
+ role = Role.find(current)
47
+ if role
48
+ if not seen.has_key?(role.id)
49
+ parents << role
50
+ seen[role.id] = true
51
+ current = role.parent_id
52
+ else
53
+ current = nil
54
+ end
55
+ else
56
+ current = nil
57
+ end
58
+ end
59
+
60
+ return parents
61
+ end
62
+
63
+ def get_start_path
64
+ self.start_path || Goldberg.settings.get_start_path
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,18 @@
1
+ module Goldberg
2
+ class RolesPermission < ActiveRecord::Base
3
+ include Goldberg::Model
4
+
5
+ validates_presence_of :role_id, :permission_id
6
+
7
+ def RolesPermission.find_for_role(role_ids)
8
+ querystr = <<-END
9
+ select rp.*, p.name
10
+ from #{prefix}roles_permissions rp inner join #{prefix}permissions p
11
+ on rp.permission_id = p.id
12
+ where role_id in (?) order by p.name
13
+ END
14
+ return find_by_sql([querystr, role_ids])
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,59 @@
1
+ module Goldberg
2
+ class SiteController < ActiveRecord::Base
3
+ include Goldberg::Model
4
+
5
+ belongs_to :permission
6
+ has_many :controller_actions, :order => 'name', :dependent => :destroy
7
+
8
+ validates_presence_of :name, :permission_id
9
+ validates_uniqueness_of :name
10
+
11
+ def self.classes
12
+ for path in ActionController::Routing.controller_paths do
13
+ self.load_class_files(path)
14
+ end
15
+
16
+ classes = Hash.new
17
+
18
+ ObjectSpace.each_object(Class) do |klass|
19
+ if klass.respond_to? :controller_path
20
+ if (klass.to_s != ApplicationController.to_s and
21
+ klass.ancestors.map{|c|c.to_s}.include?(ApplicationController.to_s))
22
+ classes[klass.controller_path] = klass
23
+ end
24
+ end
25
+ end
26
+
27
+ return classes
28
+ end
29
+
30
+
31
+ def self.load_class_files(path)
32
+ prereqs = []
33
+ files = []
34
+ dirs = []
35
+ for file in Dir.glob("#{path}/*").sort do
36
+ if file.match /_controller\.rb$/
37
+ files << file
38
+ elsif file.match /\.rb$/
39
+ prereqs << file
40
+ elsif File.directory? file
41
+ dirs << file
42
+ end
43
+ end
44
+
45
+ (prereqs + files).each do |file|
46
+ begin
47
+ load file
48
+ rescue
49
+ logger.info "Couldn't load file '#{file}' (already loaded?)"
50
+ end
51
+ end
52
+
53
+ dirs.each do |dir|
54
+ self.load_class_files(dir)
55
+ end
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,112 @@
1
+ module Goldberg
2
+ class SystemSettings < ActiveRecord::Base
3
+ set_table_name 'system_settings'
4
+ include Goldberg::Model
5
+
6
+ attr_accessor :public_role, :default_markup_style
7
+ attr_accessor :site_default_page, :not_found_page, :permission_denied_page,
8
+ :session_expired_page
9
+
10
+ # Make sure that all the standard pages have been set.
11
+ validates_presence_of :public_role_id, :site_default_page_id, :not_found_page_id,
12
+ :permission_denied_page_id, :session_expired_page_id
13
+
14
+ # If self-reg is enabled, ensure there is a self-reg role set.
15
+ validates_each :self_reg_enabled do |record, attr, value|
16
+ result = true
17
+ if value and not (record.self_reg_role_id and record.self_reg_role_id > 0)
18
+ record.errors.add attr, <<-END
19
+ If self-registration is enabled, you must specify the default Role to
20
+ assign to self-registered users.
21
+ END
22
+ result = false
23
+ end
24
+
25
+ if value and not (record.self_reg_confirmation_error_page_id and
26
+ record.self_reg_confirmation_error_page_id > 0)
27
+ record.errors.add attr, <<-END
28
+ If self-registration is enabled, you must specify an error page to be
29
+ displayed to any users who try to access the site, but who are not yet
30
+ confirmed.
31
+ END
32
+ result = false
33
+ end
34
+ result
35
+ end
36
+
37
+ def public_role
38
+ @public_role ||= Role.find(self.public_role_id)
39
+ end
40
+
41
+ def site_default_page
42
+ @site_default_page ||= ContentPage.find(self.site_default_page_id)
43
+ end
44
+
45
+ def not_found_page
46
+ @not_found_page ||= ContentPage.find(self.not_found_page_id)
47
+ end
48
+
49
+ def permission_denied_page
50
+ @permission_denied_page ||= ContentPage.find(self.permission_denied_page_id)
51
+ end
52
+
53
+ def session_expired_page
54
+ @session_expired_page ||= ContentPage.find(self.session_expired_page_id)
55
+ end
56
+
57
+ def self_reg_confirmation_error_page
58
+ @self_reg_confirmation_error_page ||=
59
+ ContentPage.find(self.self_reg_confirmation_error_page_id)
60
+ end
61
+
62
+ # Returns an array of system page settings for a given page,
63
+ # or nil if the page is not a system page.
64
+ def system_pages(pageid)
65
+ pages = Array.new
66
+
67
+ if self.site_default_page_id == pageid
68
+ pages << "Site default page"
69
+ end
70
+ if self.not_found_page_id == pageid
71
+ pages << "Not found page"
72
+ end
73
+ if self.permission_denied_page_id == pageid
74
+ pages << "Permission denied page"
75
+ end
76
+ if self.session_expired_page_id == pageid
77
+ pages << "Session expired page"
78
+ end
79
+
80
+ if self.self_reg_confirmation_error_page_id == pageid
81
+ pages << "Self-registration confirmation error page"
82
+ end
83
+
84
+ if pages.length > 0
85
+ return pages
86
+ else
87
+ return nil
88
+ end
89
+ end
90
+
91
+ def get_start_path
92
+ if self.start_path and self.start_path.length > 0
93
+ self.start_path
94
+ else
95
+ "/"
96
+ end
97
+ end
98
+
99
+ def self_reg_role
100
+ @self_reg_role ||= self.self_reg_role_id ? Role.find(self.self_reg_role_id) :
101
+ Role.new(:id => nil, :name => '(none)')
102
+ end
103
+
104
+ def self_reg_confirmation_error_page
105
+ @self_reg_confirmation_error_page ||= (self.self_reg_confirmation_error_page_id ?
106
+ ContentPage.find(self.self_reg_confirmation_error_page_id) :
107
+ ContentPage.new(:id => nil, :name => '(none)')
108
+ )
109
+ end
110
+
111
+ end
112
+ end
@@ -0,0 +1,69 @@
1
+ require 'digest/sha1'
2
+
3
+ module Goldberg
4
+ class User < ActiveRecord::Base
5
+ include Goldberg::Model
6
+
7
+ belongs_to :role
8
+
9
+ validates_presence_of :name, :role_id, :password
10
+ validates_uniqueness_of :name
11
+
12
+ attr_accessor :clear_password
13
+ attr_accessor :confirm_password
14
+
15
+ def before_validation
16
+ if self.clear_password # Only update password if changed
17
+ self.password_salt = self.object_id.to_s + rand.to_s
18
+ self.password = Digest::SHA1.hexdigest(self.password_salt +
19
+ self.clear_password)
20
+ end
21
+ end
22
+
23
+ def before_save
24
+ if self.self_reg_confirmation_required
25
+ self.set_confirmation_key
26
+ end
27
+ end
28
+
29
+ def after_save
30
+ self.clear_password = nil
31
+ end
32
+
33
+ def check_password(clear_password)
34
+ self.password == Digest::SHA1.hexdigest(self.password_salt.to_s +
35
+ clear_password)
36
+ end
37
+
38
+ def set_confirmation_key
39
+ self.confirmation_key = Digest::SHA1.hexdigest(self.object_id.to_s +
40
+ rand.to_s)
41
+ end
42
+
43
+ def email_valid?
44
+ self.email &&
45
+ self.email.length > 0 &&
46
+ # http://regexlib.com/DisplayPatterns.aspx
47
+ self.email =~ /\A.+@[^\.].*\.[a-z]{2,}\z/
48
+ end
49
+
50
+ def get_start_path
51
+ if self.start_path and self.start_path.length > 0
52
+ self.start_path
53
+ else
54
+ self.role.get_start_path
55
+ end
56
+ end
57
+
58
+ class << self
59
+ def random_password
60
+ letters = ('A' .. 'Z').to_a + ('a' .. 'z').to_a
61
+ password = (1 .. 6).collect do
62
+ letters[ (rand * letters.length).to_i ]
63
+ end
64
+ password.to_s
65
+ end
66
+ end # class methods
67
+
68
+ end
69
+ end