goldberg_generator 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|