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,4 @@
1
+ module Goldberg
2
+ module AuthHelper
3
+ end
4
+ end
@@ -0,0 +1,23 @@
1
+ module Goldberg
2
+ module ContentPagesHelper
3
+ def fckeditor_text_area(replace_id)
4
+ return <<-END
5
+ #{ javascript_include_tag '/fckeditor/fckeditor.js' }
6
+ <script type="text/javascript">
7
+ window.onload = function()
8
+ {
9
+ var oFCKeditor = new FCKeditor('#{ replace_id }') ;
10
+ oFCKeditor.Width = '100%' ;
11
+ oFCKeditor.Height = 400 ;
12
+ oFCKeditor.Config['LinkBrowserURL'] = '/fckeditor/editor/filemanager/browser/default/browser.html?Connector=/goldberg/content_pages/fck_filemanager' ;
13
+ oFCKeditor.Config['ImageBrowserURL'] = '/fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=/goldberg/content_pages/fck_filemanager' ;
14
+ oFCKeditor.Config['FlashBrowserURL'] = '/fckeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=/goldberg/content_pages/fck_filemanager' ;
15
+ oFCKeditor.Config['SpellChecker'] = 'SpellerPages' ;
16
+ oFCKeditor.Config['SpellerPagesServerScript'] = '/goldberg/content_pages/fck_speller_pages' ;
17
+ oFCKeditor.ReplaceTextarea() ;
18
+ }
19
+ </script>
20
+ END
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ module Goldberg
2
+ module ControllerActionsHelper
3
+ end
4
+ end
5
+
@@ -0,0 +1,4 @@
1
+ module Goldberg
2
+ module MenuItemsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Goldberg
2
+ module PermissionsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Goldberg
2
+ module RolesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Goldberg
2
+ module RolesPermissionsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Goldberg
2
+ module SiteControllersHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Goldberg
2
+ module SystemSettingsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Goldberg
2
+ module UsersHelper
3
+ end
4
+ end
@@ -0,0 +1,134 @@
1
+ require 'cgi'
2
+ # Load RedCloth if available
3
+ begin require 'redcloth' rescue nil end
4
+
5
+ module Goldberg
6
+ class ContentPage < ActiveRecord::Base
7
+ include Goldberg::Model
8
+
9
+ belongs_to :permission
10
+ validates_presence_of :name, :title, :permission_id
11
+ validates_uniqueness_of :name
12
+ attr_accessor :content_html
13
+
14
+ class << self
15
+ def markup_styles
16
+ if not @markup_styles
17
+ @markup_styles = []
18
+ # If FCKeditor is installed, allow it.
19
+ if File.directory?(File.join RAILS_ROOT, 'public', 'fckeditor')
20
+ @markup_styles << 'FCKeditor'
21
+ end
22
+ # These are the basic styles.
23
+ @markup_styles += ['Raw HTML', 'Plain text']
24
+ # If redcloth is available add Textile and Markdown,
25
+ # otherwise trap the exception.
26
+ begin
27
+ RedCloth
28
+ @markup_styles += ['Textile', 'Markdown']
29
+ rescue MissingSourceFile
30
+ nil
31
+ end
32
+ end
33
+ return @markup_styles
34
+ end
35
+
36
+ def find_for_permission(p_ids)
37
+ if p_ids.blank?
38
+ return []
39
+ else
40
+ return find(:all,
41
+ :conditions => ['permission_id in (?)', p_ids],
42
+ :order => 'name')
43
+ end
44
+ end
45
+
46
+ def speller_pages(text)
47
+ opts = '-a --encoding=utf-8 -H 2>&1'
48
+ if RUBY_PLATFORM =~ /mswin/i
49
+ cmd = '"C:\Program Files\aspell\bin\aspell" ' + opts
50
+ else
51
+ cmd = "aspell #{opts}"
52
+ end
53
+
54
+ results = []
55
+ IO.popen(cmd, 'r+') do |io|
56
+ io.puts text
57
+ io.close_write
58
+ while not io.eof?
59
+ line = io.readline.chomp
60
+ if line =~ /^\&/
61
+ parts = line.split(' ', 5)
62
+ word = parts[1]
63
+ suggestions = parts[4].split(', ').collect do |suggestion|
64
+ "'#{javascript_esc(suggestion)}'"
65
+ end
66
+ results << [javascript_esc(word), suggestions.join(', ')]
67
+ end
68
+ end
69
+ end
70
+
71
+ return results
72
+ end
73
+
74
+ def javascript_esc(string)
75
+ string.gsub(/'/, "\\'")
76
+ end
77
+
78
+ end # class << self
79
+
80
+ def url
81
+ return "/#{self.name}"
82
+ end
83
+
84
+ def fullname
85
+ "#{ERB::Util.html_escape(self.name)}" <<
86
+ (self.title ? " -- #{ERB::Util.html_escape(self.title)}" : '')
87
+ end
88
+
89
+ def content=(new_content)
90
+ write_attribute(:content, new_content)
91
+ self.content_cache = nil
92
+ end
93
+
94
+
95
+ def before_save
96
+ self.content_cache = self.markup_content
97
+ end
98
+
99
+ def content_html
100
+ self.content_cache ||= self.markup_content
101
+ end
102
+
103
+
104
+ protected
105
+
106
+ def markup_content
107
+ content_html = nil
108
+
109
+ case self.markup_style
110
+ when 'Plain text'
111
+ content_html = "<pre class=\"plain_text\">#{ CGI::escapeHTML(self.content) }</pre>"
112
+
113
+ when 'Textile'
114
+ begin
115
+ content_html = RedCloth.new(self.content).to_html(:textile)
116
+ rescue
117
+ nil
118
+ end
119
+
120
+ when 'Markdown'
121
+ begin
122
+ content_html = RedCloth.new(self.content).to_html(:markdown)
123
+ rescue
124
+ nil
125
+ end
126
+
127
+ end
128
+
129
+ # If none of the above, then raw content.
130
+ content_html ||= self.content
131
+ end
132
+
133
+ end
134
+ end
@@ -0,0 +1,86 @@
1
+ module Goldberg
2
+ class ControllerAction < ActiveRecord::Base
3
+ include Goldberg::Model
4
+
5
+ belongs_to :site_controller
6
+ belongs_to :permission
7
+
8
+ validates_presence_of :name, :site_controller_id
9
+ validates_uniqueness_of :name, :scope => 'site_controller_id'
10
+
11
+ attr_accessor :allowed, :specific_name
12
+
13
+ def effective_permission
14
+ self.permission || self.site_controller.permission
15
+ end
16
+
17
+ def fullname
18
+ if self.site_controller_id and self.site_controller_id > 0
19
+ return "#{self.site_controller.name}: #{self.name}"
20
+ else
21
+ return "#{self.name}"
22
+ end
23
+ end
24
+
25
+ def url
26
+ @url ||= "/#{self.site_controller.name}/#{self.name}"
27
+ end
28
+
29
+ def menu_items
30
+ if self.id
31
+ MenuItem.find_all_by_controller_action_id(self.id, :order => 'label')
32
+ else
33
+ []
34
+ end
35
+ end
36
+
37
+ def before_destroy
38
+ if self.menu_items.length > 0
39
+ self.errors.add(:id, "Cannot delete an Action that is in the menu!")
40
+ return false
41
+ else
42
+ return true
43
+ end
44
+ end
45
+
46
+ def self.actions_allowed(permission_ids)
47
+ # Hash for faster & easier lookups
48
+ if permission_ids
49
+ perms = {}
50
+ for id in permission_ids do
51
+ perms[id] = true
52
+ end
53
+ end
54
+
55
+ actions = ControllerAction.find(:all)
56
+ for action in actions do
57
+ if action.permission_id
58
+ if perms.has_key?(action.permission_id)
59
+ action.allowed = 1
60
+ else
61
+ action.allowed = 0
62
+ end
63
+ else # Controller's permission
64
+ if perms.has_key?(action.site_controller.permission_id)
65
+ action.allowed = 1
66
+ else
67
+ action.allowed = 0
68
+ end
69
+ end
70
+ end
71
+
72
+ return actions
73
+ end
74
+
75
+ def self.find_for_permission(p_ids)
76
+ if p_ids and p_ids.length > 0
77
+ return find(:all,
78
+ :conditions => ['permission_id in (?)', p_ids],
79
+ :order => 'name')
80
+ else
81
+ return Array.new
82
+ end
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,128 @@
1
+ module Goldberg
2
+ class Credentials
3
+
4
+ attr_accessor :role_id, :updated_at, :role_ids
5
+ attr_accessor :permission_ids
6
+ attr_accessor :controllers, :actions, :pages
7
+ attr_accessor :user
8
+
9
+ # Create a new credentials object for the given role
10
+ def initialize(role_id)
11
+ @role_id = role_id
12
+
13
+ role = Role.find(@role_id)
14
+ @updated_at = role.updated_at
15
+
16
+ roles = role.get_parents
17
+ @role_ids = Array.new
18
+ for r in roles do
19
+ @role_ids << r.id
20
+ end
21
+
22
+ permissions = Permission.find_for_role(@role_ids)
23
+ @permission_ids = Array.new
24
+ for p in permissions do
25
+ @permission_ids << p.id
26
+ end
27
+
28
+ if @permission_ids.length < 1
29
+ @permission_ids << 0
30
+ end
31
+
32
+ actions = ControllerAction.actions_allowed(@permission_ids)
33
+ @actions = Hash.new
34
+ for a in actions do
35
+ @actions[a.site_controller.name] ||= Hash.new
36
+ if a.allowed.to_i == 1
37
+ @actions[a.site_controller.name][a.name] = true
38
+ else
39
+ @actions[a.site_controller.name][a.name] = false
40
+ end
41
+ end
42
+
43
+ sc = SiteController.table_name
44
+ controllers = SiteController.find_by_sql ["select sc.*, (case when permission_id in (?) then 1 else 0 end) as allowed from #{sc} sc", @permission_ids]
45
+ @controllers = Hash.new
46
+ for c in controllers do
47
+ if c.allowed.to_i == 1
48
+ @controllers[c.name] = true
49
+ else
50
+ @controllers[c.name] = false
51
+ end
52
+ end
53
+
54
+ cp = ContentPage.table_name
55
+ pages = ContentPage.find_by_sql ["select id, name, permission_id, (case when permission_id in (?) then 1 else 0 end) as allowed from #{cp}", @permission_ids]
56
+ @pages = Hash.new
57
+ for p in pages do
58
+ if p.allowed.to_i == 1
59
+ @pages[p.name] = true
60
+ else
61
+ @pages[p.name] = false
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+ def controller_authorised?(controller)
68
+ authorised = false # default
69
+ if @controllers.has_key?(controller)
70
+ if @controllers[controller]
71
+ # logger.info "Controller: authorised"
72
+ authorised = true
73
+ else
74
+ # logger.info "Controller: NOT authorised"
75
+ end
76
+ else
77
+ end
78
+ return authorised
79
+ end
80
+
81
+ def action_authorised?(controller, action)
82
+ authorised = false # default
83
+ check_controller = false
84
+
85
+ # Check if there's a specific permission for an action
86
+ if @actions.has_key?(controller)
87
+ if @actions[controller].has_key?(action)
88
+ if @actions[controller][action]
89
+ # logger.info "Action: authorised"
90
+ authorised = true
91
+ else
92
+ # logger.info "Action: NOT authorised"
93
+ end
94
+ else
95
+ check_controller = true
96
+ end
97
+ else
98
+ check_controller = true
99
+ end
100
+
101
+ # Check if there's a general permission for a controller
102
+ if check_controller
103
+ authorised = controller_authorised?(controller)
104
+ end
105
+
106
+ # logger.info "Authorised? #{authorised.to_s}"
107
+ return authorised
108
+ end
109
+
110
+ def page_authorised?(page)
111
+ authorised = false # default
112
+
113
+ if page and @pages.has_key?(page.to_s)
114
+ if @pages[page.to_s] == true
115
+ # logger.info "Page: authorised"
116
+ authorised = true
117
+ else
118
+ # logger.info "Page: NOT authorised"
119
+ end
120
+ else
121
+ # logger.warn "(Unknown page? #{page})"
122
+ end
123
+
124
+ return authorised
125
+ end
126
+
127
+ end
128
+ end
@@ -0,0 +1,198 @@
1
+ module Goldberg
2
+ class Menu
3
+
4
+ class Node
5
+ attr_accessor :parent, :parent_id, :children
6
+ attr_accessor :site_controller_id, :controller_action_id, :content_page_id
7
+ attr_accessor :id, :name, :label, :url
8
+
9
+ def initialize()
10
+ @parent = nil
11
+ end
12
+
13
+ def setup(item)
14
+ @parent_id = item.parent_id
15
+ @name = item.name
16
+ @id = item.id
17
+ @label = item.label
18
+
19
+ if item.controller_action
20
+ @site_controller_id = item.controller_action.site_controller.id
21
+ @controller_action_id = item.controller_action.id
22
+ else
23
+ @site_controller_id = nil
24
+ @controller_action_id = nil
25
+ end
26
+
27
+ if item.content_page
28
+ @content_page_id = item.content_page.id
29
+ else
30
+ @content_page_id = nil
31
+ end
32
+
33
+ @url = String.new
34
+ if item.controller_action
35
+ if item.controller_action.url_to_use and
36
+ item.controller_action.url_to_use.length > 0
37
+ @url = item.controller_action.url_to_use
38
+ else
39
+ @url = "/#{item.controller_action.site_controller.name}/#{item.controller_action.name}"
40
+ end
41
+ else
42
+ @url = "/#{item.content_page.name}"
43
+ end
44
+
45
+ end
46
+
47
+ def site_controller
48
+ if not @site_controller
49
+ if @site_controller_id
50
+ @site_controller = SiteController.find(@site_controller_id)
51
+ end
52
+ end
53
+ end
54
+
55
+ def controller_action
56
+ if not @controller_action
57
+ if @controller_action_id
58
+ @controller_action = ControllerAction.find(@controller_action_id)
59
+ end
60
+ end
61
+ end
62
+
63
+ def content_page
64
+ if not @content_page
65
+ if @content_page_id
66
+ @content_page = ContentPage.find(@content_page_id)
67
+ end
68
+ end
69
+ end
70
+
71
+ def add_child(child)
72
+ @children ||= Array.new
73
+ @children << child.id
74
+ end
75
+
76
+
77
+ end # class Node
78
+
79
+
80
+ attr_accessor :root, :selected
81
+
82
+ def initialize(role = nil)
83
+ @root = Node.new
84
+ @by_id = Hash.new
85
+ @by_name = Hash.new
86
+ @selected = Hash.new
87
+ @vector = Array.new
88
+ @crumbs = Array.new
89
+
90
+ items = nil
91
+
92
+ if role
93
+ if role.cache[:credentials].permission_ids.size > 0
94
+ items = MenuItem.items_for_permissions(role.cache[:credentials].permission_ids)
95
+ else # role has no permissions
96
+ # (items will remain as nil: the only node will be the root)
97
+ end
98
+ else # No role given: build menu of everything
99
+ items = MenuItem.items_for_permissions
100
+ end
101
+
102
+ if items
103
+ if items.size > 0
104
+ # Build hashes of items by name and id
105
+ for item in items do
106
+ node = Node.new
107
+ node.setup(item)
108
+ @by_id[item.id] = node
109
+ @by_name[item.name] = node
110
+ end
111
+
112
+ # Then build tree of items
113
+ for item in items do
114
+ node = @by_id[item.id]
115
+ p_id = node.parent_id
116
+ if p_id
117
+ if @by_id.has_key?(p_id)
118
+ @by_id[p_id].add_child(node)
119
+ end
120
+ else
121
+ @root.add_child(node)
122
+ end
123
+ end
124
+ end # if items.size > 0
125
+
126
+ self.select(nil)
127
+ end # if items
128
+
129
+ end
130
+
131
+
132
+ # Selects the menu item for the given name, if it exists in this
133
+ # menu. If not returns nil.
134
+
135
+ def select(name)
136
+ if name and @by_name.has_key?(name)
137
+ node = @by_name[name]
138
+ @selected = Hash.new
139
+ @vector = Array.new
140
+ @crumbs = Array.new
141
+
142
+ while node and node.id
143
+ @selected[node.id] = node
144
+ @vector.unshift node
145
+ @crumbs.unshift node.id
146
+ node = @by_id[node.parent_id]
147
+ end
148
+ @vector.unshift @root
149
+ return @by_name[name]
150
+ else
151
+ if @root.children and @root.children.length > 0
152
+ select(@by_id[@root.children[0]].name)
153
+ end
154
+ end
155
+ end
156
+
157
+ def get_item(item_id)
158
+ return @by_id[item_id]
159
+ end
160
+
161
+ # Returns the array of items at the given level.
162
+ def get_menu(level)
163
+ if @vector.length > level
164
+ return @vector[level].children
165
+ else
166
+ return nil
167
+ end
168
+ end
169
+
170
+
171
+ # Returns the name of the currently-selected item
172
+ # or nil if no item is selected.
173
+ def selected
174
+ if @vector.length > 0
175
+ return @vector[@vector.length - 1].name
176
+ else
177
+ return nil
178
+ end
179
+ end
180
+
181
+
182
+ # Returns true if the specified item is selected; false if otherwise.
183
+ def selected?(menu_id)
184
+ @selected.has_key?(menu_id) ? true : false
185
+ end
186
+
187
+ def crumbs
188
+ crumbs = Array.new
189
+ for crumb in @crumbs do
190
+ item = get_item(crumb)
191
+ crumbs << item
192
+ end
193
+
194
+ return crumbs
195
+ end
196
+
197
+ end
198
+ end