goldberg_generator 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/USAGE +34 -0
- data/goldberg_generator.rb +463 -0
- data/templates/README_GOLDBERG +22 -0
- data/templates/app/views/layouts/application.rhtml +80 -0
- data/templates/layouts/ewnf/README +8 -0
- data/templates/layouts/ewnf/app/views/layouts/application.rhtml +74 -0
- data/templates/layouts/ewnf/public/images/bg.gif +0 -0
- data/templates/layouts/ewnf/public/images/daddy_rightarrow.gif +0 -0
- data/templates/layouts/ewnf/public/images/sample.jpg +0 -0
- data/templates/layouts/ewnf/public/images/title_img.jpg +0 -0
- data/templates/layouts/ewnf/public/stylesheets/layout.css +223 -0
- data/templates/layouts/snooker/app/views/layouts/application.rhtml +74 -0
- data/templates/layouts/snooker/public/images/column_200.png +0 -0
- data/templates/layouts/snooker/public/images/daddy_rightarrow.gif +0 -0
- data/templates/layouts/snooker/public/images/footer_bg.png +0 -0
- data/templates/layouts/snooker/public/images/logo.jpg +0 -0
- data/templates/layouts/snooker/public/stylesheets/layout.css +183 -0
- data/templates/layouts/spoiled_brat/LICENSE.txt +211 -0
- data/templates/layouts/spoiled_brat/README +8 -0
- data/templates/layouts/spoiled_brat/app/views/layouts/application.rhtml +71 -0
- data/templates/layouts/spoiled_brat/public/images/blockquote-bg.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/body-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/centerColumn-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/daddy_leftarrow.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/h2-bg.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/h3-bg.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/header-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/hr-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/logo.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/stylesheets/layout.css +379 -0
- data/templates/public/goldberg/images/action.png +0 -0
- data/templates/public/goldberg/images/add.png +0 -0
- data/templates/public/goldberg/images/bodybg.jpg +0 -0
- data/templates/public/goldberg/images/delete.png +0 -0
- data/templates/public/goldberg/images/down.png +0 -0
- data/templates/public/goldberg/images/footerbg.jpg +0 -0
- data/templates/public/goldberg/images/logo_right.jpg +0 -0
- data/templates/public/goldberg/images/menuhover.jpg +0 -0
- data/templates/public/goldberg/images/page.png +0 -0
- data/templates/public/goldberg/images/permission.png +0 -0
- data/templates/public/goldberg/images/role.png +0 -0
- data/templates/public/goldberg/images/up.png +0 -0
- data/templates/public/goldberg/javascripts/suckerfish.js +12 -0
- data/templates/public/goldberg/stylesheets/goldberg.css +142 -0
- data/templates/public/goldberg/stylesheets/layout.css +321 -0
- data/templates/public/goldberg/stylesheets/suckerfish.css +124 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/auth_controller.rb +104 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/content_pages_controller.rb +197 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/controller_actions_controller.rb +134 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/menu_items_controller.rb +184 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/permissions_controller.rb +60 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_controller.rb +85 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_permissions_controller.rb +65 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/site_controllers_controller.rb +157 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/system_settings_controller.rb +75 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/users_controller.rb +293 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/auth_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/content_pages_helper.rb +23 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/controller_actions_helper.rb +5 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/menu_items_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/permissions_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_permissions_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/site_controllers_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/system_settings_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/users_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/content_page.rb +134 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/controller_action.rb +86 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/credentials.rb +128 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/menu.rb +198 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/menu_item.rb +127 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/permission.rb +37 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/role.rb +68 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/roles_permission.rb +18 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/site_controller.rb +59 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/system_settings.rb +112 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/user.rb +69 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/user_mailer.rb +43 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/_login.rhtml +15 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/login.rhtml +22 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/logout.rhtml +2 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_create_folder.rxml +6 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_files.rxml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_form.rhtml +32 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/edit.rhtml +10 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/fck_speller_pages.rhtml +58 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/list.rhtml +22 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/show.rhtml +57 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view.rhtml +1 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view_default.rhtml +1 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/_form.rhtml +53 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/list.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/new.rhtml +10 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/show.rhtml +13 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_js.rhtml +52 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_list.rhtml +7 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_breadcrumbs.rhtml +5 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_form.rhtml +42 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_list.rhtml +52 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_parent_list.rhtml +15 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_menubar.rhtml +21 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_suckerfish.rhtml +14 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/edit.rhtml +10 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list-original.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list.rhtml +16 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/new.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/show.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/_form.rhtml +7 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/list.rhtml +14 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/show.rhtml +38 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/_form.rhtml +18 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/list.rhtml +21 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/show.rhtml +79 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/_form.rhtml +13 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/list.rhtml +24 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new_permission_for_role.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/show.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_form.rhtml +15 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_list.rhtml +26 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/list.rhtml +107 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/show.rhtml +38 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/_form.rhtml +71 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/list.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/show.rhtml +189 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/confirmation_request.rhtml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password.rhtml +17 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password_request.rhtml +23 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/_form.rhtml +53 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration.rhtml +26 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration_submit.rhtml +4 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/create.rhtml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/edit.rhtml +11 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password_submit.rhtml +4 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/list.rhtml +18 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/new.rhtml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password.rhtml +11 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password_submit.rhtml +3 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/show.rhtml +33 -0
- data/templates/vendor/plugins/goldberg/db/ContentPage.yml +466 -0
- data/templates/vendor/plugins/goldberg/db/ControllerAction.yml +162 -0
- data/templates/vendor/plugins/goldberg/db/MenuItem.yml +109 -0
- data/templates/vendor/plugins/goldberg/db/Permission.yml +21 -0
- data/templates/vendor/plugins/goldberg/db/Role.yml +493 -0
- data/templates/vendor/plugins/goldberg/db/RolesPermission.yml +26 -0
- data/templates/vendor/plugins/goldberg/db/SiteController.yml +61 -0
- data/templates/vendor/plugins/goldberg/db/SystemSettings.yml +21 -0
- data/templates/vendor/plugins/goldberg/db/User.yml +15 -0
- data/templates/vendor/plugins/goldberg/db/migrate/001_initial_setup.rb +128 -0
- data/templates/vendor/plugins/goldberg/db/migrate/002_menu_rest_items_users_cached_content_pages.rb +26 -0
- data/templates/vendor/plugins/goldberg/db/migrate/003_self_registration.rb +54 -0
- data/templates/vendor/plugins/goldberg/db/migrate/004_column_fixes.rb +119 -0
- data/templates/vendor/plugins/goldberg/init.rb +13 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg.rb +37 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/controller.rb +11 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/filters.rb +197 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/helper.rb +66 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/migration.rb +113 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/migrator.rb +128 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/model.rb +110 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/routes.rb +49 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/test_helper.rb +82 -0
- data/templates/vendor/plugins/goldberg/tasks/goldberg_tasks.rake +47 -0
- data/templates/vendor/plugins/goldberg/test/functional/content_pages_controller_test.rb +31 -0
- data/templates/vendor/plugins/goldberg/test/integration/security_test.rb +134 -0
- data/templates/vendor/plugins/goldberg/test/test_helper.rb +40 -0
- data/templates/vendor/plugins/goldberg/test/unit/content_page_test.rb +87 -0
- data/templates/vendor/plugins/goldberg/test/unit/controller_action_test.rb +85 -0
- data/templates/vendor/plugins/goldberg/test/unit/menu_item_test.rb +46 -0
- data/templates/vendor/plugins/goldberg/test/unit/permission_test.rb +35 -0
- data/templates/vendor/plugins/goldberg/test/unit/site_controller_test.rb +53 -0
- data/templates/vendor/plugins/goldberg/test/unit/system_settings_test.rb +71 -0
- data/templates/vendor/plugins/goldberg/test/unit/user_test.rb +104 -0
- metadata +310 -0
@@ -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,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
|