goldberg_generator 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. data/USAGE +34 -0
  2. data/goldberg_generator.rb +463 -0
  3. data/templates/README_GOLDBERG +22 -0
  4. data/templates/app/views/layouts/application.rhtml +80 -0
  5. data/templates/layouts/ewnf/README +8 -0
  6. data/templates/layouts/ewnf/app/views/layouts/application.rhtml +74 -0
  7. data/templates/layouts/ewnf/public/images/bg.gif +0 -0
  8. data/templates/layouts/ewnf/public/images/daddy_rightarrow.gif +0 -0
  9. data/templates/layouts/ewnf/public/images/sample.jpg +0 -0
  10. data/templates/layouts/ewnf/public/images/title_img.jpg +0 -0
  11. data/templates/layouts/ewnf/public/stylesheets/layout.css +223 -0
  12. data/templates/layouts/snooker/app/views/layouts/application.rhtml +74 -0
  13. data/templates/layouts/snooker/public/images/column_200.png +0 -0
  14. data/templates/layouts/snooker/public/images/daddy_rightarrow.gif +0 -0
  15. data/templates/layouts/snooker/public/images/footer_bg.png +0 -0
  16. data/templates/layouts/snooker/public/images/logo.jpg +0 -0
  17. data/templates/layouts/snooker/public/stylesheets/layout.css +183 -0
  18. data/templates/layouts/spoiled_brat/LICENSE.txt +211 -0
  19. data/templates/layouts/spoiled_brat/README +8 -0
  20. data/templates/layouts/spoiled_brat/app/views/layouts/application.rhtml +71 -0
  21. data/templates/layouts/spoiled_brat/public/images/blockquote-bg.gif +0 -0
  22. data/templates/layouts/spoiled_brat/public/images/body-bg.jpg +0 -0
  23. data/templates/layouts/spoiled_brat/public/images/centerColumn-bg.jpg +0 -0
  24. data/templates/layouts/spoiled_brat/public/images/daddy_leftarrow.gif +0 -0
  25. data/templates/layouts/spoiled_brat/public/images/h2-bg.gif +0 -0
  26. data/templates/layouts/spoiled_brat/public/images/h3-bg.gif +0 -0
  27. data/templates/layouts/spoiled_brat/public/images/header-bg.jpg +0 -0
  28. data/templates/layouts/spoiled_brat/public/images/hr-bg.jpg +0 -0
  29. data/templates/layouts/spoiled_brat/public/images/logo.jpg +0 -0
  30. data/templates/layouts/spoiled_brat/public/stylesheets/layout.css +379 -0
  31. data/templates/public/goldberg/images/action.png +0 -0
  32. data/templates/public/goldberg/images/add.png +0 -0
  33. data/templates/public/goldberg/images/bodybg.jpg +0 -0
  34. data/templates/public/goldberg/images/delete.png +0 -0
  35. data/templates/public/goldberg/images/down.png +0 -0
  36. data/templates/public/goldberg/images/footerbg.jpg +0 -0
  37. data/templates/public/goldberg/images/logo_right.jpg +0 -0
  38. data/templates/public/goldberg/images/menuhover.jpg +0 -0
  39. data/templates/public/goldberg/images/page.png +0 -0
  40. data/templates/public/goldberg/images/permission.png +0 -0
  41. data/templates/public/goldberg/images/role.png +0 -0
  42. data/templates/public/goldberg/images/up.png +0 -0
  43. data/templates/public/goldberg/javascripts/suckerfish.js +12 -0
  44. data/templates/public/goldberg/stylesheets/goldberg.css +142 -0
  45. data/templates/public/goldberg/stylesheets/layout.css +321 -0
  46. data/templates/public/goldberg/stylesheets/suckerfish.css +124 -0
  47. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/auth_controller.rb +104 -0
  48. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/content_pages_controller.rb +197 -0
  49. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/controller_actions_controller.rb +134 -0
  50. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/menu_items_controller.rb +184 -0
  51. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/permissions_controller.rb +60 -0
  52. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_controller.rb +85 -0
  53. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_permissions_controller.rb +65 -0
  54. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/site_controllers_controller.rb +157 -0
  55. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/system_settings_controller.rb +75 -0
  56. data/templates/vendor/plugins/goldberg/app/controllers/goldberg/users_controller.rb +293 -0
  57. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/auth_helper.rb +4 -0
  58. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/content_pages_helper.rb +23 -0
  59. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/controller_actions_helper.rb +5 -0
  60. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/menu_items_helper.rb +4 -0
  61. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/permissions_helper.rb +4 -0
  62. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_helper.rb +4 -0
  63. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_permissions_helper.rb +4 -0
  64. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/site_controllers_helper.rb +4 -0
  65. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/system_settings_helper.rb +4 -0
  66. data/templates/vendor/plugins/goldberg/app/helpers/goldberg/users_helper.rb +4 -0
  67. data/templates/vendor/plugins/goldberg/app/models/goldberg/content_page.rb +134 -0
  68. data/templates/vendor/plugins/goldberg/app/models/goldberg/controller_action.rb +86 -0
  69. data/templates/vendor/plugins/goldberg/app/models/goldberg/credentials.rb +128 -0
  70. data/templates/vendor/plugins/goldberg/app/models/goldberg/menu.rb +198 -0
  71. data/templates/vendor/plugins/goldberg/app/models/goldberg/menu_item.rb +127 -0
  72. data/templates/vendor/plugins/goldberg/app/models/goldberg/permission.rb +37 -0
  73. data/templates/vendor/plugins/goldberg/app/models/goldberg/role.rb +68 -0
  74. data/templates/vendor/plugins/goldberg/app/models/goldberg/roles_permission.rb +18 -0
  75. data/templates/vendor/plugins/goldberg/app/models/goldberg/site_controller.rb +59 -0
  76. data/templates/vendor/plugins/goldberg/app/models/goldberg/system_settings.rb +112 -0
  77. data/templates/vendor/plugins/goldberg/app/models/goldberg/user.rb +69 -0
  78. data/templates/vendor/plugins/goldberg/app/models/goldberg/user_mailer.rb +43 -0
  79. data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/_login.rhtml +15 -0
  80. data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/login.rhtml +22 -0
  81. data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/logout.rhtml +2 -0
  82. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_create_folder.rxml +6 -0
  83. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_files.rxml +19 -0
  84. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_form.rhtml +32 -0
  85. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/edit.rhtml +10 -0
  86. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/fck_speller_pages.rhtml +58 -0
  87. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/list.rhtml +22 -0
  88. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/new.rhtml +8 -0
  89. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/show.rhtml +57 -0
  90. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view.rhtml +1 -0
  91. data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view_default.rhtml +1 -0
  92. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/_form.rhtml +53 -0
  93. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/edit.rhtml +9 -0
  94. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/list.rhtml +27 -0
  95. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/new.rhtml +10 -0
  96. data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/show.rhtml +13 -0
  97. data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_js.rhtml +52 -0
  98. data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_list.rhtml +7 -0
  99. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_breadcrumbs.rhtml +5 -0
  100. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_form.rhtml +42 -0
  101. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_list.rhtml +52 -0
  102. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_parent_list.rhtml +15 -0
  103. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_menubar.rhtml +21 -0
  104. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_suckerfish.rhtml +14 -0
  105. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/edit.rhtml +10 -0
  106. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list-original.rhtml +27 -0
  107. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list.rhtml +16 -0
  108. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/new.rhtml +9 -0
  109. data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/show.rhtml +8 -0
  110. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/_form.rhtml +7 -0
  111. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/edit.rhtml +9 -0
  112. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/list.rhtml +14 -0
  113. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/new.rhtml +8 -0
  114. data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/show.rhtml +38 -0
  115. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/_form.rhtml +18 -0
  116. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/edit.rhtml +9 -0
  117. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/list.rhtml +21 -0
  118. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/new.rhtml +8 -0
  119. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/show.rhtml +79 -0
  120. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/_form.rhtml +13 -0
  121. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/edit.rhtml +9 -0
  122. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/list.rhtml +24 -0
  123. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new.rhtml +8 -0
  124. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new_permission_for_role.rhtml +8 -0
  125. data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/show.rhtml +8 -0
  126. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_form.rhtml +15 -0
  127. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_list.rhtml +26 -0
  128. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/edit.rhtml +9 -0
  129. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/list.rhtml +107 -0
  130. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/new.rhtml +8 -0
  131. data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/show.rhtml +38 -0
  132. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/_form.rhtml +71 -0
  133. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/edit.rhtml +9 -0
  134. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/list.rhtml +27 -0
  135. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/new.rhtml +8 -0
  136. data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/show.rhtml +189 -0
  137. data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/confirmation_request.rhtml +19 -0
  138. data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password.rhtml +17 -0
  139. data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password_request.rhtml +23 -0
  140. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/_form.rhtml +53 -0
  141. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration.rhtml +26 -0
  142. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration_submit.rhtml +4 -0
  143. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/create.rhtml +19 -0
  144. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/edit.rhtml +11 -0
  145. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password.rhtml +27 -0
  146. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password_submit.rhtml +4 -0
  147. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/list.rhtml +18 -0
  148. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/new.rhtml +19 -0
  149. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password.rhtml +11 -0
  150. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password_submit.rhtml +3 -0
  151. data/templates/vendor/plugins/goldberg/app/views/goldberg/users/show.rhtml +33 -0
  152. data/templates/vendor/plugins/goldberg/db/ContentPage.yml +466 -0
  153. data/templates/vendor/plugins/goldberg/db/ControllerAction.yml +162 -0
  154. data/templates/vendor/plugins/goldberg/db/MenuItem.yml +109 -0
  155. data/templates/vendor/plugins/goldberg/db/Permission.yml +21 -0
  156. data/templates/vendor/plugins/goldberg/db/Role.yml +493 -0
  157. data/templates/vendor/plugins/goldberg/db/RolesPermission.yml +26 -0
  158. data/templates/vendor/plugins/goldberg/db/SiteController.yml +61 -0
  159. data/templates/vendor/plugins/goldberg/db/SystemSettings.yml +21 -0
  160. data/templates/vendor/plugins/goldberg/db/User.yml +15 -0
  161. data/templates/vendor/plugins/goldberg/db/migrate/001_initial_setup.rb +128 -0
  162. data/templates/vendor/plugins/goldberg/db/migrate/002_menu_rest_items_users_cached_content_pages.rb +26 -0
  163. data/templates/vendor/plugins/goldberg/db/migrate/003_self_registration.rb +54 -0
  164. data/templates/vendor/plugins/goldberg/db/migrate/004_column_fixes.rb +119 -0
  165. data/templates/vendor/plugins/goldberg/init.rb +13 -0
  166. data/templates/vendor/plugins/goldberg/lib/goldberg.rb +37 -0
  167. data/templates/vendor/plugins/goldberg/lib/goldberg/controller.rb +11 -0
  168. data/templates/vendor/plugins/goldberg/lib/goldberg/filters.rb +197 -0
  169. data/templates/vendor/plugins/goldberg/lib/goldberg/helper.rb +66 -0
  170. data/templates/vendor/plugins/goldberg/lib/goldberg/migration.rb +113 -0
  171. data/templates/vendor/plugins/goldberg/lib/goldberg/migrator.rb +128 -0
  172. data/templates/vendor/plugins/goldberg/lib/goldberg/model.rb +110 -0
  173. data/templates/vendor/plugins/goldberg/lib/goldberg/routes.rb +49 -0
  174. data/templates/vendor/plugins/goldberg/lib/goldberg/test_helper.rb +82 -0
  175. data/templates/vendor/plugins/goldberg/tasks/goldberg_tasks.rake +47 -0
  176. data/templates/vendor/plugins/goldberg/test/functional/content_pages_controller_test.rb +31 -0
  177. data/templates/vendor/plugins/goldberg/test/integration/security_test.rb +134 -0
  178. data/templates/vendor/plugins/goldberg/test/test_helper.rb +40 -0
  179. data/templates/vendor/plugins/goldberg/test/unit/content_page_test.rb +87 -0
  180. data/templates/vendor/plugins/goldberg/test/unit/controller_action_test.rb +85 -0
  181. data/templates/vendor/plugins/goldberg/test/unit/menu_item_test.rb +46 -0
  182. data/templates/vendor/plugins/goldberg/test/unit/permission_test.rb +35 -0
  183. data/templates/vendor/plugins/goldberg/test/unit/site_controller_test.rb +53 -0
  184. data/templates/vendor/plugins/goldberg/test/unit/system_settings_test.rb +71 -0
  185. data/templates/vendor/plugins/goldberg/test/unit/user_test.rb +104 -0
  186. metadata +310 -0
@@ -0,0 +1,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,11 @@
1
+ module Goldberg
2
+ module Controller
3
+ def self.included(base)
4
+ base.class_eval do
5
+ base.view_paths =
6
+ ["#{RAILS_ROOT}/vendor/plugins/goldberg/app/views"]
7
+ base.layout "../../../../../app/views/layouts/application"
8
+ end
9
+ end
10
+ end
11
+ 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