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,13 @@
|
|
1
|
+
# Set load paths to include the plugin /app directory
|
2
|
+
controller_path = "#{File.dirname(__FILE__)}/app/controllers"
|
3
|
+
model_path = "#{File.dirname(__FILE__)}/app/models"
|
4
|
+
helper_path = "#{File.dirname(__FILE__)}/app/helpers"
|
5
|
+
$LOAD_PATH << controller_path
|
6
|
+
$LOAD_PATH << model_path
|
7
|
+
Dependencies.load_paths += [ controller_path, model_path, helper_path ]
|
8
|
+
config.controller_paths << controller_path
|
9
|
+
|
10
|
+
# Goldberg's libraries
|
11
|
+
Dir["#{File.dirname(__FILE__)}/lib/**/*.rb"].each do |lib|
|
12
|
+
require lib
|
13
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# The module 'Goldberg' is the namespace for Goldberg's libraries. It
|
2
|
+
# also provides a number of class methods for convenient access to
|
3
|
+
# information about the system from Goldberg's perspective (the
|
4
|
+
# current user and the System Settings).
|
5
|
+
module Goldberg
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
# Accessor to attach the current user (if logged in)
|
10
|
+
attr_accessor :user
|
11
|
+
|
12
|
+
# Accessor to attach the session's credentials
|
13
|
+
attr_accessor :credentials
|
14
|
+
|
15
|
+
# Accessor to attach the session's menu
|
16
|
+
attr_accessor :menu
|
17
|
+
|
18
|
+
# return nil if there is no user
|
19
|
+
def user
|
20
|
+
begin @user rescue nil end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return Goldberg's System Settings
|
24
|
+
def settings
|
25
|
+
@settings ||= Goldberg::SystemSettings.find(:first)
|
26
|
+
end
|
27
|
+
|
28
|
+
def clear!
|
29
|
+
@user = nil
|
30
|
+
@credentials = nil
|
31
|
+
@menu = nil
|
32
|
+
@settings = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'goldberg/system_settings'
|
2
|
+
require 'goldberg/credentials'
|
3
|
+
require 'goldberg/menu'
|
4
|
+
require 'goldberg/user'
|
5
|
+
require 'goldberg/content_page'
|
6
|
+
require 'goldberg/role'
|
7
|
+
|
8
|
+
module Goldberg
|
9
|
+
module Filters
|
10
|
+
|
11
|
+
ERROR_SELF_REG_CONFIRMATION_REQUIRED =
|
12
|
+
[1, "Your registration has not yet been confirmed."]
|
13
|
+
ERROR_SESSION_EXPIRED =
|
14
|
+
[2, "Your session has expired. Please log in again."]
|
15
|
+
ERROR_NOT_FOUND =
|
16
|
+
[3, "The page or resource you requested was not found."]
|
17
|
+
ERROR_PERMISSION_DENIED =
|
18
|
+
[4, "You do not have permission to access that page or resource."]
|
19
|
+
|
20
|
+
def goldberg_security_up
|
21
|
+
if Goldberg.settings
|
22
|
+
session[:goldberg] ||= Hash.new
|
23
|
+
session[:goldberg][:path] = request.path
|
24
|
+
|
25
|
+
logger.debug "Setting user..."
|
26
|
+
set_user or return false
|
27
|
+
|
28
|
+
# Perform some preliminary checks for logged-in users.
|
29
|
+
if Goldberg.user
|
30
|
+
# Check that the user is not pending registration confirmation.
|
31
|
+
logger.debug "Check user not pending registration confirmation..."
|
32
|
+
check_not_pending or return false
|
33
|
+
# If the user's session has expired, kick out the user.
|
34
|
+
logger.debug "Check session not expired..."
|
35
|
+
check_not_expired or return false
|
36
|
+
end
|
37
|
+
|
38
|
+
# The default is false. check_page_exists() will set this to true if the current request is for a ContentPage.
|
39
|
+
@is_page_request = false
|
40
|
+
|
41
|
+
# If this is a page request check that it exists, and if not
|
42
|
+
# redirect to the "unknown" page.
|
43
|
+
logger.debug "Checking that page exists..."
|
44
|
+
check_page_exists or return false
|
45
|
+
|
46
|
+
|
47
|
+
# The default is false. check_permissions() will set this to true if the user is authorised for the current action.
|
48
|
+
@authorised = false
|
49
|
+
|
50
|
+
# Check whether the user is authorised for this page or action.
|
51
|
+
logger.debug "Checking permissions..."
|
52
|
+
check_permissions or return false
|
53
|
+
|
54
|
+
end # if Goldberg.settings
|
55
|
+
|
56
|
+
session[:last_time] = Time.now
|
57
|
+
|
58
|
+
return true
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
protected
|
63
|
+
|
64
|
+
def set_user
|
65
|
+
Goldberg.clear!
|
66
|
+
Goldberg::AuthController.set_user(session)
|
67
|
+
return true
|
68
|
+
end
|
69
|
+
|
70
|
+
def check_not_pending
|
71
|
+
if Goldberg.settings.self_reg_enabled and
|
72
|
+
Goldberg.user.self_reg_confirmation_required
|
73
|
+
logger.info "User not confirmed"
|
74
|
+
Goldberg::AuthController.logout(session)
|
75
|
+
respond_to do |format|
|
76
|
+
format.html do
|
77
|
+
redirect_to Goldberg.settings.self_reg_confirmation_error_page.url
|
78
|
+
end
|
79
|
+
format.js do
|
80
|
+
render :status => 400, :text =>
|
81
|
+
Goldberg.settings.self_reg_confirmation_error_page.content_html
|
82
|
+
end
|
83
|
+
format.xml do
|
84
|
+
render :status => 400, :xml =>
|
85
|
+
error_xml(*ERROR_SELF_REG_CONFIRMATION_REQUIRED)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
return false
|
89
|
+
end
|
90
|
+
|
91
|
+
return true
|
92
|
+
end
|
93
|
+
|
94
|
+
def check_not_expired
|
95
|
+
if Goldberg.settings.session_timeout > 0 and session[:last_time]
|
96
|
+
if (Time.now - session[:last_time]) > Goldberg.settings.session_timeout
|
97
|
+
logger.info "Session: time expired"
|
98
|
+
Goldberg::AuthController.logout(session)
|
99
|
+
respond_to do |format|
|
100
|
+
format.html do
|
101
|
+
redirect_to Goldberg.settings.session_expired_page.url
|
102
|
+
end
|
103
|
+
format.js do
|
104
|
+
render :status => 400, :text =>
|
105
|
+
Goldberg.settings.session_expired_page.content_html
|
106
|
+
end
|
107
|
+
format.xml do
|
108
|
+
render :status => 400, :xml =>
|
109
|
+
error_xml(*ERROR_SESSION_EXPIRED)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
return false
|
113
|
+
else
|
114
|
+
logger.info "Session: time NOT expired"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
return true
|
119
|
+
end
|
120
|
+
|
121
|
+
def check_page_exists
|
122
|
+
if params[:controller] == 'goldberg/content_pages' and
|
123
|
+
params[:action] == 'view'
|
124
|
+
@is_page_request = true
|
125
|
+
if not Goldberg.credentials.pages.has_key?(params[:page_name].join '/')
|
126
|
+
logger.warn "(Unknown page? #{params[:page_name].join '/'})"
|
127
|
+
respond_to do |format|
|
128
|
+
format.html do
|
129
|
+
redirect_to Goldberg.settings.not_found_page.url
|
130
|
+
end
|
131
|
+
format.js do
|
132
|
+
render :status => 404, :text => Goldberg.settings.not_found_page.content_html
|
133
|
+
end
|
134
|
+
format.xml do
|
135
|
+
render :status => 404, :xml => error_xml(*ERROR_NOT_FOUND)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
return false
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
return true
|
143
|
+
end
|
144
|
+
|
145
|
+
def check_permissions
|
146
|
+
if @is_page_request
|
147
|
+
@authorised =
|
148
|
+
Goldberg.credentials.page_authorised?(params[:page_name].join '/')
|
149
|
+
else
|
150
|
+
@authorised = Goldberg.credentials.action_authorised?(params[:controller],
|
151
|
+
params[:action])
|
152
|
+
end
|
153
|
+
if not @authorised
|
154
|
+
respond_to do |format|
|
155
|
+
format.html do
|
156
|
+
if Goldberg.user
|
157
|
+
redirect_to Goldberg.settings.permission_denied_page.url
|
158
|
+
else
|
159
|
+
session[:pending_request] = url_for(params)
|
160
|
+
redirect_to :controller => 'goldberg/auth', :action => 'login'
|
161
|
+
end
|
162
|
+
end
|
163
|
+
format.js do
|
164
|
+
render :status => 400, :text =>
|
165
|
+
Goldberg.settings.permission_denied_page.content_html
|
166
|
+
end
|
167
|
+
format.xml do
|
168
|
+
render :status => 400, :xml => error_xml(*ERROR_PERMISSION_DENIED)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
return false
|
172
|
+
end
|
173
|
+
|
174
|
+
return true
|
175
|
+
end
|
176
|
+
|
177
|
+
def error_xml(code, message)
|
178
|
+
target = ''
|
179
|
+
xml = Builder::XmlMarkup.new(:target => target)
|
180
|
+
xml.instruct!
|
181
|
+
xml.error do
|
182
|
+
xml.code(code)
|
183
|
+
xml.message(message)
|
184
|
+
Goldberg.user ? xml.user_id(Goldberg.user.id) : xml.user_id
|
185
|
+
xml.params(params.inspect)
|
186
|
+
end
|
187
|
+
return target
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
|
194
|
+
ActionController::Base.class_eval do
|
195
|
+
include Goldberg::Filters
|
196
|
+
prepend_before_filter :goldberg_security_up
|
197
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Goldberg
|
2
|
+
# Goldberg::Helper will be added as a helper to ActionController::Base,
|
3
|
+
# so its methods will be available in the views throughout all
|
4
|
+
# controllers (just as if they'd been added to ApplicationHelper).
|
5
|
+
module Helper
|
6
|
+
|
7
|
+
# Renders the title of the page: either the ContentPage.name or the
|
8
|
+
# current controller and action.
|
9
|
+
def goldberg_title
|
10
|
+
if params[:controller] == 'goldberg/content_pages' and
|
11
|
+
( params[:action] == 'view' or
|
12
|
+
params[:action] == 'view_default')
|
13
|
+
"#{@content_page.title}"
|
14
|
+
else
|
15
|
+
"#{params[:controller]} | #{params[:action]}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Renders a top (i.e. one level deep) static menu.
|
20
|
+
def goldberg_main_menu
|
21
|
+
render :file => "#{RAILS_ROOT}/vendor/plugins/goldberg/app/views/goldberg/menu_items/_menubar.rhtml", :use_full_path => false, :locals => {:level => 0, :depth => 0, :class_attr => nil}
|
22
|
+
end
|
23
|
+
|
24
|
+
# Renders a nested side menu, for all levels below the main menu.
|
25
|
+
def goldberg_left_menu
|
26
|
+
render :file => "#{RAILS_ROOT}/vendor/plugins/goldberg/app/views/goldberg/menu_items/_menubar.rhtml", :use_full_path => false,
|
27
|
+
:locals => {:level => 1, :depth => (Goldberg.settings.menu_depth - 2),
|
28
|
+
:class_attr => 'sidemenu'}
|
29
|
+
end
|
30
|
+
|
31
|
+
# Renders an entire multilevel suckerfish menu. Whether this is to
|
32
|
+
# be rendered along the top, left hand or right hand side of the
|
33
|
+
# page depends on the page's stylesheet. This code just returns the
|
34
|
+
# menu structure.
|
35
|
+
def goldberg_suckerfish_menu
|
36
|
+
render :file => "#{RAILS_ROOT}/vendor/plugins/goldberg/app/views/goldberg/menu_items/_suckerfish.rhtml", :use_full_path => false, :locals => {:items => Goldberg.menu.get_menu(0)}
|
37
|
+
end
|
38
|
+
|
39
|
+
# Renders the breadcrumbs (i.e. representing the user's current
|
40
|
+
# position in the menu hierarchy).
|
41
|
+
def goldberg_breadcrumbs
|
42
|
+
render :file => "#{RAILS_ROOT}/vendor/plugins/goldberg/app/views/goldberg/menu_items/_breadcrumbs.rhtml", :use_full_path => false, :locals => {:crumbs => Goldberg.menu.crumbs}
|
43
|
+
end
|
44
|
+
|
45
|
+
# Renders the login prompt. This changes depending on whether a
|
46
|
+
# user is logged in or not. If a user is logged in, a mini-form is
|
47
|
+
# presented with a button to log out. If not, a link to the
|
48
|
+
# auth/login page is presented.
|
49
|
+
def goldberg_login
|
50
|
+
render :file => "#{RAILS_ROOT}/vendor/plugins/goldberg/app/views/goldberg/auth/_login.rhtml", :use_full_path => false
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# You'd think this would work, but it only works on the first request
|
57
|
+
# after a server restart because helpers get reloaded on each request:
|
58
|
+
|
59
|
+
# ApplicationHelper.module_eval do
|
60
|
+
# include Goldberg::Helper
|
61
|
+
# end
|
62
|
+
|
63
|
+
# This works:
|
64
|
+
ActionController::Base.class_eval do
|
65
|
+
helper Goldberg::Helper
|
66
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
module Goldberg
|
2
|
+
module Migration
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.class_eval do
|
6
|
+
|
7
|
+
def self.prefix
|
8
|
+
if not @prefix
|
9
|
+
if self.pg_conn?
|
10
|
+
self.create_goldberg_schema
|
11
|
+
@prefix = 'goldberg.'
|
12
|
+
else
|
13
|
+
@prefix = 'goldberg_'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
@prefix
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.pg_conn?
|
20
|
+
ActiveRecord::Base.connection.class.to_s ==
|
21
|
+
'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter'
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.goldberg_schema_exists?
|
25
|
+
if self.pg_conn?
|
26
|
+
count = ActiveRecord::Base.connection.select_value <<-END
|
27
|
+
SELECT COUNT(*) FROM pg_namespace WHERE nspname = 'goldberg'
|
28
|
+
END
|
29
|
+
count.to_i > 0
|
30
|
+
else
|
31
|
+
false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.create_goldberg_schema
|
36
|
+
if self.pg_conn? and not self.goldberg_schema_exists?
|
37
|
+
ActiveRecord::Base.connection.execute <<-END
|
38
|
+
CREATE SCHEMA goldberg
|
39
|
+
END
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.drop_goldberg_schema
|
44
|
+
if self.pg_conn? and self.goldberg_schema_exists?
|
45
|
+
ActiveRecord::Base.connection.execute <<-END
|
46
|
+
DROP SCHEMA goldberg
|
47
|
+
END
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end # class_eval
|
52
|
+
end # self.included
|
53
|
+
|
54
|
+
|
55
|
+
def self.load_bootstrap
|
56
|
+
self.goldberg_classes.each do |klass|
|
57
|
+
self.load_for_class klass, "#{File.dirname(__FILE__)}/../../db"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.dump_bootstrap
|
62
|
+
# Before dumping a bootstrap configuration, copy the existing
|
63
|
+
# bootstrap to tst/fixtures (unless already exists)
|
64
|
+
fixtures_path = "#{File.dirname(__FILE__)}/../../test/fixtures"
|
65
|
+
unless File.exists?(fixtures_path)
|
66
|
+
Dir.mkdir(fixtures_path)
|
67
|
+
Dir["#{File.dirname(__FILE__)}/../../db/*.yml"].each do |fixture|
|
68
|
+
FileUtils.cp(fixture, fixtures_path)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
self.goldberg_classes.each do |klass|
|
72
|
+
self.dump_for_class klass, "#{File.dirname(__FILE__)}/../../db"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.goldberg_classes
|
77
|
+
return [ Goldberg::Permission, Goldberg::SiteController,
|
78
|
+
Goldberg::ContentPage, Goldberg::ControllerAction,
|
79
|
+
Goldberg::MenuItem, Goldberg::Role,
|
80
|
+
Goldberg::RolesPermission, Goldberg::SystemSettings,
|
81
|
+
Goldberg::User ]
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.dump_for_class(klass, dest)
|
85
|
+
filename = "#{dest}/#{klass.to_s.sub(/^Goldberg::/, '')}.yml"
|
86
|
+
records = klass.find(:all).collect do |record|
|
87
|
+
record.attributes
|
88
|
+
end
|
89
|
+
File.open(filename, 'w') do |out|
|
90
|
+
YAML.dump(records, out)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.load_for_class(klass, src)
|
95
|
+
filename = "#{src}/#{klass.to_s.sub(/^Goldberg::/, '')}.yml"
|
96
|
+
File.open(filename) do |src|
|
97
|
+
records = YAML::load(src)
|
98
|
+
records.each do |src_rec|
|
99
|
+
attrs = (src_rec.respond_to?(:attributes) ? src_rec.attributes :
|
100
|
+
src_rec)
|
101
|
+
record = klass.new(attrs)
|
102
|
+
record.id = attrs['id']
|
103
|
+
record.save!
|
104
|
+
end
|
105
|
+
end
|
106
|
+
# Reset table sequence if applicable (i.e. PostgreSQL)
|
107
|
+
if klass.connection.respond_to?(:reset_pk_sequence!)
|
108
|
+
klass.connection.reset_pk_sequence!(klass.table_name)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# Goldberg::Migrator is a plugin migration system based on
|
2
|
+
# PluginAWeek's (http://pluginaweek.org) plugin_migrations. It allows
|
3
|
+
# plugins to have their own migration streams. These can be made
|
4
|
+
# available as rake tasks that work similarly to Rails' "db:migrate"
|
5
|
+
# task, including respecting the VERSION environment variable. See
|
6
|
+
# Goldberg's "goldberg:migrate" task.
|
7
|
+
#
|
8
|
+
# This code is included in the Goldberg project in order to remove the
|
9
|
+
# dependency on the plugin_migrations gem, while retaining schema
|
10
|
+
# compatibilty so that users can use Goldberg alongside other plugins
|
11
|
+
# that utilise plugin_migrations.
|
12
|
+
|
13
|
+
module Goldberg
|
14
|
+
module SchemaStatements
|
15
|
+
def self.included(base) #:nodoc:
|
16
|
+
base.class_eval do
|
17
|
+
alias_method_chain :initialize_schema_information, :plugins
|
18
|
+
alias_method_chain :dump_schema_information, :plugins
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Creates the plugin schema info table
|
23
|
+
def initialize_schema_information_with_plugins
|
24
|
+
initialize_schema_information_without_plugins
|
25
|
+
|
26
|
+
begin
|
27
|
+
execute <<-EOS
|
28
|
+
CREATE TABLE #{Goldberg::Migrator.schema_info_table_name}
|
29
|
+
(plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:integer)})
|
30
|
+
EOS
|
31
|
+
rescue ActiveRecord::StatementInvalid
|
32
|
+
# Schema has already been initialised?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Dumps the plugin schema info table as well as information about the
|
37
|
+
# current plugin migrations
|
38
|
+
def dump_schema_information_with_plugins
|
39
|
+
schema_information = []
|
40
|
+
|
41
|
+
dump = dump_schema_information_without_plugins
|
42
|
+
dump && (schema_information << dump)
|
43
|
+
|
44
|
+
begin
|
45
|
+
plugins = ActiveRecord::Base.connection.select_all <<-EOS
|
46
|
+
SELECT * FROM #{Goldberg::Migrator.schema_info_table_name}
|
47
|
+
EOS
|
48
|
+
plugins.each do |plugin|
|
49
|
+
if (version = plugin['version'].to_i) > 0
|
50
|
+
plugin_esc = ActiveRecord::Base.quote_value(plugin['plugin_name'])
|
51
|
+
schema_information << %Q<
|
52
|
+
INSERT INTO #{Goldberg::Migrator.schema_info_table_name}
|
53
|
+
(plugin_name, version) VALUES (#{plugin_esc}, #{version})>
|
54
|
+
end
|
55
|
+
end
|
56
|
+
rescue ActiveRecord::StatementInvalid
|
57
|
+
# No Schema Info
|
58
|
+
end
|
59
|
+
|
60
|
+
schema_information.join(";\n")
|
61
|
+
end
|
62
|
+
end # module SchemaStatements
|
63
|
+
|
64
|
+
|
65
|
+
class Migrator < ActiveRecord::Migrator
|
66
|
+
class << self
|
67
|
+
# Set the plugin name before performing any migrations
|
68
|
+
attr_accessor :plugin_name
|
69
|
+
|
70
|
+
# Runs the migrations from a plugin, up (or down) to the version given
|
71
|
+
def migrate(version = nil)
|
72
|
+
ActiveRecord::ConnectionAdapters::SchemaStatements.class_eval do
|
73
|
+
include Goldberg::SchemaStatements
|
74
|
+
end
|
75
|
+
|
76
|
+
version && (version = version.to_i)
|
77
|
+
super("#{RAILS_ROOT}/vendor/plugins/#{plugin_name}/db/migrate", version)
|
78
|
+
end
|
79
|
+
|
80
|
+
def schema_info_table_name
|
81
|
+
ActiveRecord::Base.table_name_prefix + 'plugin_schema_info' +
|
82
|
+
ActiveRecord::Base.table_name_suffix
|
83
|
+
end
|
84
|
+
|
85
|
+
def current_version
|
86
|
+
begin
|
87
|
+
if result = ActiveRecord::Base.connection.select_one(%Q<
|
88
|
+
SELECT version FROM #{schema_info_table_name} WHERE plugin_name=#{plugin}>)
|
89
|
+
result['version'].to_i
|
90
|
+
else
|
91
|
+
# No such plugin migrated yet?
|
92
|
+
0
|
93
|
+
end
|
94
|
+
rescue ActiveRecord::StatementInvalid
|
95
|
+
# No migration info table, so never migrated
|
96
|
+
0
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Escape the current plugin name
|
101
|
+
def plugin
|
102
|
+
ActiveRecord::Base.quote_value(plugin_name)
|
103
|
+
end
|
104
|
+
end # class << self
|
105
|
+
|
106
|
+
# Sets the version of the current plugin
|
107
|
+
def set_schema_version(version)
|
108
|
+
version = down? ? version.to_i - 1 : version.to_i
|
109
|
+
|
110
|
+
if ActiveRecord::Base.connection.select_one <<-EOS
|
111
|
+
SELECT version FROM #{self.class.schema_info_table_name}
|
112
|
+
WHERE plugin_name = #{self.class.plugin}
|
113
|
+
EOS
|
114
|
+
ActiveRecord::Base.connection.update <<-EOS
|
115
|
+
UPDATE #{self.class.schema_info_table_name} SET version = #{version}
|
116
|
+
WHERE plugin_name = #{self.class.plugin}
|
117
|
+
EOS
|
118
|
+
else
|
119
|
+
# We need to create the entry since it doesn't exist yet
|
120
|
+
ActiveRecord::Base.connection.execute <<-EOS
|
121
|
+
INSERT INTO #{self.class.schema_info_table_name} (version, plugin_name)
|
122
|
+
VALUES (#{version}, #{self.class.plugin})
|
123
|
+
EOS
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end # class Migrator
|
128
|
+
end # module Goldberg
|