goldberg_generator 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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