Commit d4a4e68c59c4c6cda2bd90ae5941f26b0a71b8bd
1 parent
49c83e28
Exists in
master
and in
22 other branches
ActionItem117: still renaming
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@911 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
14 changed files
with
622 additions
and
622 deletions
Show diff stats
... | ... | @@ -0,0 +1,361 @@ |
1 | +class CmsController < MyProfileController | |
2 | + | |
3 | + define_option :page_class, Article | |
4 | + | |
5 | + protect 'post_content', :profile, :only => [:edit, :new, :reorder, :delete] | |
6 | + | |
7 | + protected | |
8 | + | |
9 | + def profile | |
10 | + Profile.find_by_identifier(params[:profile]) | |
11 | + end | |
12 | + | |
13 | + def user | |
14 | + current_user.person | |
15 | + end | |
16 | + | |
17 | + | |
18 | + public | |
19 | + | |
20 | + ############################################################# | |
21 | + # everything below was copied from comatose | |
22 | + ############################################################# | |
23 | + | |
24 | + define_option :original_template_root, nil | |
25 | + define_option :plugin_layout_path, File.join( '..', '..', '..', 'vendor', 'plugins', 'comatose', 'views', 'layouts' ) | |
26 | + | |
27 | + before_filter :handle_authorization | |
28 | + before_filter :set_content_type | |
29 | + | |
30 | + # Shows the page tree | |
31 | + def index | |
32 | + @root_pages = [fetch_root_page].flatten | |
33 | + end | |
34 | + | |
35 | + # Edit a specfic page (posts back) | |
36 | + def edit | |
37 | + # Clear the page cache for this page... ? | |
38 | + @page = page_class.find params[:id] | |
39 | + @root_pages = [fetch_root_page].flatten | |
40 | + if request.post? | |
41 | + @page.update_attributes(params[:page]) | |
42 | + @page.updated_on = Time.now | |
43 | + @page.author = fetch_author_name | |
44 | + if @page.save | |
45 | + expire_cms_page @page | |
46 | + expire_cms_fragment @page | |
47 | + flash[:notice] = "Saved changes to '#{@page.title}'" | |
48 | + redirect_to :controller=>self.controller_name, :action=>'index' | |
49 | + end | |
50 | + end | |
51 | + end | |
52 | + | |
53 | + # Create a new page (posts back) | |
54 | + def new | |
55 | + @root_pages = [fetch_root_page].flatten | |
56 | + if request.post? | |
57 | + @page = page_class.new params[:page] | |
58 | + @page.author = fetch_author_name | |
59 | + if @page.save | |
60 | + flash[:notice] = "Created page '#{@page.title}'" | |
61 | + redirect_to :controller=>self.controller_name, :action=>'index' | |
62 | + end | |
63 | + else | |
64 | + @page = page_class.new(:parent_id=>(params[:parent] || nil)) | |
65 | + end | |
66 | + end | |
67 | + | |
68 | + # Saves position of child pages | |
69 | + def reorder | |
70 | + # If it's AJAX, do our thing and move on... | |
71 | + if request.xhr? | |
72 | + params["page_list_#{params[:id]}"].each_with_index { |id,idx| page_class.update(id, :position => idx) } | |
73 | + expire_cms_page page_class.find(params[:id]) | |
74 | + render :text=>'Updated sort order', :layout=>false | |
75 | + else | |
76 | + @page = page_class.find params[:id] | |
77 | + if params.has_key? :cmd | |
78 | + @target = page_class.find params[:page] | |
79 | + case params[:cmd] | |
80 | + when 'up' then @target.move_higher | |
81 | + when 'down' then @target.move_lower | |
82 | + end | |
83 | + redirect_to :action=>'reorder', :id=>@page | |
84 | + end | |
85 | + end | |
86 | + end | |
87 | + | |
88 | + # Allows comparing between two versions of a page's content | |
89 | + def versions | |
90 | + @page = page_class.find params[:id] | |
91 | + @version_num = (params[:version] || @page.versions.length).to_i | |
92 | + @version = @page.find_version(@version_num) | |
93 | + end | |
94 | + | |
95 | + # Reverts a page to a specific version... | |
96 | + def set_version | |
97 | + if request.post? | |
98 | + @page = page_class.find params[:id] | |
99 | + @version_num = params[:version] | |
100 | + @page.revert_to!(@version_num) | |
101 | + end | |
102 | + redirect_to :controller=>self.controller_name, :action=>'index' | |
103 | + end | |
104 | + | |
105 | + # Deletes the specified page | |
106 | + def delete | |
107 | + @page = page_class.find params[:id] | |
108 | + if request.post? | |
109 | + expire_cms_pages_from_bottom @page | |
110 | + expire_cms_fragments_from_bottom @page | |
111 | + @page.destroy | |
112 | + flash[:notice] = "Deleted page '#{@page.title}'" | |
113 | + redirect_to :controller=>self.controller_name, :action=>'index' | |
114 | + end | |
115 | + end | |
116 | + | |
117 | + # Returns a preview of the page content... | |
118 | + def preview | |
119 | + begin | |
120 | + page = page_class.new(params[:page]) | |
121 | + page.author = fetch_author_name | |
122 | + if params.has_key? :version | |
123 | + content = page.to_html( {'params'=>params.stringify_keys, 'version'=>params[:version]} ) | |
124 | + else | |
125 | + content = page.to_html( {'params'=>params.stringify_keys} ) | |
126 | + end | |
127 | + rescue SyntaxError | |
128 | + content = "<p>There was an error generating the preview.</p><p><pre>#{$!.to_s.gsub(/\</, '<')}</pre></p>" | |
129 | + rescue | |
130 | + content = "<p>There was an error generating the preview.</p><p><pre>#{$!.to_s.gsub(/\</, '<')}</pre></p>" | |
131 | + end | |
132 | + render :text=>content, :layout => false | |
133 | + end | |
134 | + | |
135 | + # Expires the entire page cache | |
136 | + def expire_page_cache | |
137 | + expire_cms_pages_from_bottom( fetch_root_page ) | |
138 | + expire_cms_fragments_from_bottom( fetch_root_page ) | |
139 | + flash[:notice] = "Page cache has been flushed" | |
140 | + redirect_to :controller=>self.controller_name, :action=>'index' | |
141 | + end | |
142 | + | |
143 | + # Walks the page tree and generates HTML files in your /public | |
144 | + # folder... It will skip pages that have a 'nocache' keyword | |
145 | + # TODO: Make page cache generation work when in :plugin mode | |
146 | + def generate_page_cache | |
147 | + if runtime_mode == :plugin | |
148 | + @errors = ["Page cache cannot be generated in plugin mode"] | |
149 | + else | |
150 | + @errors = generate_all_pages_html(params) | |
151 | + end | |
152 | + if @errors.length == 0 | |
153 | + flash[:notice] = "Pages Cached Successfully" | |
154 | + else | |
155 | + flash[:notice] = "Pages Cache Error(s): #{@errors.join(', ')}" | |
156 | + flash[:cache_errors] = @errors | |
157 | + end | |
158 | + redirect_to :controller=>self.controller_name, :action=>'index' | |
159 | + end | |
160 | + | |
161 | + | |
162 | + protected | |
163 | + | |
164 | + def handle_authorization | |
165 | + if Comatose.config.admin_authorization.is_a? Proc | |
166 | + instance_eval &Comatose.config.admin_authorization | |
167 | + elsif Comatose.config.admin_authorization.is_a? Symbol | |
168 | + send(Comatose.config.admin_authorization) | |
169 | + elsif defined? authorize | |
170 | + authorize | |
171 | + else | |
172 | + true | |
173 | + end | |
174 | + end | |
175 | + | |
176 | + def fetch_author_name | |
177 | + if Comatose.config.admin_get_author.is_a? Proc | |
178 | + instance_eval &Comatose.config.admin_get_author | |
179 | + elsif Comatose.config.admin_get_author.is_a? Symbol | |
180 | + send(Comatose.config.admin_get_author) | |
181 | + elsif defined? get_author | |
182 | + get_author | |
183 | + end | |
184 | + end | |
185 | + | |
186 | + # Can be overridden -- return your root comtase page | |
187 | + def fetch_root_page | |
188 | + if Comatose.config.admin_get_root_page.is_a? Proc | |
189 | + instance_eval &Comatose.config.admin_get_root_page | |
190 | + elsif Comatose.config.admin_get_root_page.is_a? Symbol | |
191 | + send(Comatose.config.admin_get_root_page) | |
192 | + elsif defined? get_root_page | |
193 | + get_root_page | |
194 | + end | |
195 | + end | |
196 | + | |
197 | + # Sets the HTTP content-type header based on what's configured | |
198 | + # in Comatose.config.content_type | |
199 | + def set_content_type | |
200 | + response.headers["Content-Type"] = "text/html; charset=#{Comatose.config.content_type}" unless Comatose.config.content_type.nil? | |
201 | + end | |
202 | + | |
203 | + # Calls generate_page_html for each mount point.. | |
204 | + def generate_all_pages_html(params={}) | |
205 | + @errors = [] | |
206 | + @been_cached = [] | |
207 | + Comatose.mount_points.each do |root_info| | |
208 | + page_class.active_mount_info = root_info | |
209 | + generate_page_html(page_class.find_by_path( root_info[:index] ), root_info, params) | |
210 | + end | |
211 | + @errors | |
212 | + end | |
213 | + | |
214 | + # Accepts a Comatose Page and a root_info object to generate | |
215 | + # the page as a static HTML page -- using the layout that was | |
216 | + # defined on the mount point | |
217 | + def generate_page_html(page, root_info, params={}) | |
218 | + @been_cached ||= [] | |
219 | + unless page.has_keyword? :nocache or @been_cached.include? page.id | |
220 | + uri = page.uri | |
221 | + uri = "#{uri}/index".split('/').flatten.join('/') if page.full_path == root_info[:index] | |
222 | + @page = Comatose::PageWrapper.new(page) | |
223 | + begin | |
224 | + page_layout = get_page_layout(root_info) | |
225 | + #puts "mode = #{runtime_mode}, layout = #{page_layout}, template_root = #{template_root}, original_template_root = #{original_template_root}" | |
226 | + html = render_to_string( :text=>page.to_html({'params'=>params.stringify_keys}), :layout=>page_layout ) | |
227 | + cache_page( html, uri ) | |
228 | + rescue | |
229 | + logger.error "Comatose CMS Page Cache Exception: #{$!}" | |
230 | + @errors << "(#{page}/#{page.slug}) - #{$!}" | |
231 | + end | |
232 | + @been_cached << page.id | |
233 | + # recurse... | |
234 | + page.children.each do |child| | |
235 | + generate_page_html(child, root_info) | |
236 | + end | |
237 | + end | |
238 | + end | |
239 | + | |
240 | + # Calls the class methods of the same name... | |
241 | + def expire_cms_page(page) | |
242 | + self.class.expire_cms_page(page) | |
243 | + end | |
244 | + def expire_cms_pages_from_bottom(page) | |
245 | + self.class.expire_cms_pages_from_bottom(page) | |
246 | + end | |
247 | + | |
248 | + | |
249 | + # expire the page from the fragment cache | |
250 | + def expire_cms_fragment(page) | |
251 | + key = page.full_path.gsub(/\//, '+') | |
252 | + expire_fragment(key) | |
253 | + end | |
254 | + | |
255 | + # expire pages starting at a specific node | |
256 | + def expire_cms_fragments_from_bottom(page) | |
257 | + pages = page.is_a?(Array) ? page : [page] | |
258 | + pages.each do |page| | |
259 | + page.children.each {|c| expire_cms_fragments_from_bottom( c ) } if !page.children.empty? | |
260 | + expire_cms_fragment( page ) | |
261 | + end | |
262 | + end | |
263 | + | |
264 | + # Class Methods... | |
265 | + class << self | |
266 | + | |
267 | + # Walks all the way down, and back up the tree -- the allows the expire_cms_page | |
268 | + # to delete empty directories better | |
269 | + def expire_cms_pages_from_bottom(page) | |
270 | + pages = page.is_a?(Array) ? page : [page] | |
271 | + pages.each do |page| | |
272 | + page.children.each {|c| expire_cms_pages_from_bottom( c ) } if !page.children.empty? | |
273 | + expire_cms_page( page ) | |
274 | + end | |
275 | + end | |
276 | + | |
277 | + # Expire the page from all the mount points... | |
278 | + def expire_cms_page(page) | |
279 | + Comatose.mount_points.each do |path_info| | |
280 | + page_class.active_mount_info = path_info | |
281 | + expire_page(page.uri) | |
282 | + # If the page is the index page for the root, expire it too | |
283 | + if path_info[:root] == page.uri | |
284 | + expire_page("#{path_info[:root]}/index") | |
285 | + end | |
286 | + begin # I'm not sure this matters too much -- but it keeps things clean | |
287 | + dir_path = File.join(RAILS_ROOT, 'public', page.uri[1..-1]) | |
288 | + Dir.delete( dir_path ) if FileTest.directory?( dir_path ) and !page.parent.nil? | |
289 | + rescue | |
290 | + # It probably isn't empty -- just as well we leave it be | |
291 | + #STDERR.puts " - Couldn't delete dir #{dir_path} -> #{$!}" | |
292 | + end | |
293 | + end | |
294 | + end | |
295 | + | |
296 | + # Returns a path to plugin layout, if it's unspecified, otherwise | |
297 | + # a path to an application layout... | |
298 | + def get_page_layout(params) | |
299 | + if params[:layout] == 'comatose_content' | |
300 | + File.join(plugin_layout_path, params[:layout]) | |
301 | + else | |
302 | + params[:layout] | |
303 | + end | |
304 | + end | |
305 | + | |
306 | + def configure_template_root | |
307 | + if self.runtime_mode == :unknown | |
308 | + if FileTest.exist? File.join(RAILS_ROOT, 'public', 'javascripts', 'comatose_admin.js') | |
309 | + self.runtime_mode = :application | |
310 | + else | |
311 | + self.runtime_mode = :plugin | |
312 | + end | |
313 | + end | |
314 | + end | |
315 | + | |
316 | + def runtime_mode | |
317 | + @@runtime_mode ||= :unknown | |
318 | + end | |
319 | + | |
320 | + def runtime_mode=(mode) | |
321 | + case mode | |
322 | + when :plugin | |
323 | + self.original_template_root = self.template_root | |
324 | + self.template_root = File.join( File.dirname(__FILE__), '..', '..', 'views') | |
325 | + when :application | |
326 | + self.template_root = self.original_template_root if self.original_template_root | |
327 | + end | |
328 | + @@runtime_mode = mode | |
329 | + end | |
330 | + | |
331 | + end | |
332 | + | |
333 | + # Check to see if we are in 'embedded' mode, or are being 'customized' | |
334 | + # embedded = runtime_mode of :plugin | |
335 | + # customized = runtime_mode of :application | |
336 | + configure_template_root | |
337 | + | |
338 | + # | |
339 | + # Include any modules... | |
340 | + Comatose.config.admin_includes.each do |mod| | |
341 | + if mod.is_a? String | |
342 | + include mod.constantize | |
343 | + elsif mod.is_a? Symbol | |
344 | + include mod.to_s.classify.constantize | |
345 | + else | |
346 | + include mod | |
347 | + end | |
348 | + end | |
349 | + | |
350 | + # Include any helpers... | |
351 | + Comatose.config.admin_helpers.each do |mod| | |
352 | + if mod.is_a? String | |
353 | + helper mod.constantize | |
354 | + elsif mod.is_a? Symbol | |
355 | + helper mod.to_s.classify.constantize | |
356 | + else | |
357 | + helper mod | |
358 | + end | |
359 | + end | |
360 | + | |
361 | +end | ... | ... |
app/controllers/my_profile/enterprise_editor_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,47 @@ |
1 | +class EnterpriseEditorController < MyProfileController | |
2 | + protect 'edit_profile', :profile, :user, :except => :destroy | |
3 | + protect 'destroy_profile', :profile, :only => :destroy | |
4 | + | |
5 | + before_filter :check_enterprise | |
6 | + | |
7 | + # Show details about an enterprise | |
8 | + def index | |
9 | + end | |
10 | + | |
11 | + # Provides an interface to editing the enterprise details | |
12 | + def edit | |
13 | + @validation_entities = Organization.find(:all) - [@enterprise] | |
14 | + end | |
15 | + | |
16 | + # Saves the changes made in an enterprise | |
17 | + def update | |
18 | + if @enterprise.update_attributes(params[:enterprise]) && @enterprise.organization_info.update_attributes(params[:organization_info]) | |
19 | + redirect_to :action => 'index' | |
20 | + else | |
21 | + flash[:notice] = _('Could not update the enterprise') | |
22 | + @validation_entities = Organization.find(:all) - [@enterprise] | |
23 | + render :action => 'edit' | |
24 | + end | |
25 | + end | |
26 | + | |
27 | + # Elimitates the enterprise of the system | |
28 | + def destroy | |
29 | + #raise "bli" | |
30 | + if @enterprise.destroy | |
31 | + flash[:notice] = _('Enterprise sucessfully erased from the system') | |
32 | + redirect_to :controller => 'profile_editor', :action => 'index', :profile => current_user.login | |
33 | + else | |
34 | + redirect_to :action => 'index' | |
35 | + end | |
36 | + end | |
37 | + | |
38 | + protected | |
39 | + | |
40 | + def check_enterprise | |
41 | + if profile.is_a?(Enterprise) | |
42 | + @enterprise = profile | |
43 | + else | |
44 | + redirect_to :controller => 'account' #:controller => 'profile_editor', :profile => current_user.login and return | |
45 | + end | |
46 | + end | |
47 | +end | ... | ... |
app/controllers/my_profile/enterprise_validation_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,52 @@ |
1 | +class EnterpriseValidationController < MyProfileController | |
2 | + | |
3 | + def index | |
4 | + @pending_validations = profile.pending_validations | |
5 | + end | |
6 | + | |
7 | + def details | |
8 | + @pending = profile.find_pending_validation(params[:id]) | |
9 | + unless @pending | |
10 | + render_not_found | |
11 | + end | |
12 | + end | |
13 | + | |
14 | + post_only :approve | |
15 | + def approve | |
16 | + @pending = profile.find_pending_validation(params[:id]) | |
17 | + if @pending | |
18 | + @pending.approve | |
19 | + redirect_to :action => 'view_processed', :id => @pending.code | |
20 | + else | |
21 | + render_not_found | |
22 | + end | |
23 | + end | |
24 | + | |
25 | + post_only :reject | |
26 | + def reject | |
27 | + @pending = profile.find_pending_validation(params[:id]) | |
28 | + if @pending | |
29 | + @pending.reject_explanation = params[:reject_explanation] | |
30 | + begin | |
31 | + @pending.reject | |
32 | + redirect_to :action => 'view_processed', :id => @pending.code | |
33 | + rescue ActiveRecord::RecordInvalid | |
34 | + render :action => 'details' | |
35 | + end | |
36 | + else | |
37 | + render_not_found | |
38 | + end | |
39 | + end | |
40 | + | |
41 | + def list_processed | |
42 | + @processed_validations = profile.processed_validations | |
43 | + end | |
44 | + | |
45 | + def view_processed | |
46 | + @processed = profile.find_processed_validation(params[:id]) | |
47 | + unless @processed | |
48 | + render_not_found | |
49 | + end | |
50 | + end | |
51 | + | |
52 | +end | ... | ... |
app/controllers/my_profile/membership_editor_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,39 @@ |
1 | +class MembershipEditorController < MyProfileController | |
2 | + | |
3 | + before_filter :login_required | |
4 | + | |
5 | + def target | |
6 | + environment | |
7 | + end | |
8 | + | |
9 | + protect 'edit_profile', :profile, :only => [:index, :new_enterprise, :create_enterprise ] | |
10 | + | |
11 | + def index | |
12 | + @memberships = current_user.person.enterprise_memberships | |
13 | + end | |
14 | + | |
15 | + def new_enterprise | |
16 | + @enterprise = Enterprise.new() | |
17 | + @validation_entities = Organization.find(:all) | |
18 | + end | |
19 | + | |
20 | + def create_enterprise | |
21 | + @enterprise = Enterprise.new(params[:enterprise]) | |
22 | + @enterprise.organization_info = OrganizationInfo.new(params[:organization]) | |
23 | + if @enterprise.save | |
24 | + @enterprise.affiliate(current_user.person, Role.find(:all, :conditions => {:name => ['owner', 'member', 'moderator']})) | |
25 | + flash[:notice] = _('The enterprise was successfully created, the validation entity will cotact you as soon as your enterprise is approved') | |
26 | + redirect_to :action => 'index' | |
27 | + else | |
28 | + flash[:notice] = _('Enterprise was not created') | |
29 | + @validation_entities = Organization.find(:all) | |
30 | + render :action => 'register_form' | |
31 | + end | |
32 | + end | |
33 | + | |
34 | + # Search enterprises by name or tags | |
35 | + def search | |
36 | + @tagged_enterprises = Enterprise.search(params[:query]) | |
37 | + end | |
38 | + | |
39 | +end | ... | ... |
... | ... | @@ -0,0 +1,39 @@ |
1 | +class ProfileEditorController < MyProfileController | |
2 | + | |
3 | + #protect 'edit_profile', :profile, only => [:index, :edit] | |
4 | + | |
5 | + helper :profile | |
6 | + | |
7 | + | |
8 | + | |
9 | + design_editor :holder => 'profile', :autosave => true, :block_types => :block_types | |
10 | + | |
11 | + | |
12 | + def block_types | |
13 | + %w[ | |
14 | + FavouriteLinks | |
15 | + ] | |
16 | + end | |
17 | + | |
18 | +# FIXME Put other Blocks to works | |
19 | +# def block_types | |
20 | +# { | |
21 | +# 'ListBlock' => _("List of People"), | |
22 | +# 'EnterprisesBlock' => _("List of Enterprises"), | |
23 | +# 'LinkBlock' => _("Link Block"), | |
24 | +# 'RecentDocumentsBlock' => _("Recent documents block") | |
25 | +# } | |
26 | +# end | |
27 | + | |
28 | + # edits the profile info (posts back) | |
29 | + def edit | |
30 | + if request.post? | |
31 | + profile.info.update_attributes(params[:info]) | |
32 | + redirect_to :action => 'index' | |
33 | + else | |
34 | + @info = profile.info | |
35 | + render :action => @info.class.name.underscore | |
36 | + end | |
37 | + end | |
38 | +end | |
39 | + | ... | ... |
app/controllers/my_profile/profile_members_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,61 @@ |
1 | +class ProfileMembersController < MyProfileController | |
2 | + protect 'manage_memberships', :profile | |
3 | + | |
4 | + def index | |
5 | + @members = profile.members | |
6 | + end | |
7 | + | |
8 | + def change_roles | |
9 | + @member = Person.find(params[:id]) | |
10 | + @roles = Role.find(:all).select{ |r| r.has_kind?(:profile) } | |
11 | + end | |
12 | + | |
13 | + def update_roles | |
14 | + @roles = params[:roles] ? Role.find(params[:roles]) : [] | |
15 | + @person = Person.find(params[:person]) | |
16 | + if @person.define_roles(@roles, profile) | |
17 | + flash[:notice] = _('Roles successfuly updated') | |
18 | + else | |
19 | + flash[:notice] = _('Couldn\'t change the roles') | |
20 | + end | |
21 | + redirect_to :action => :index | |
22 | + end | |
23 | + | |
24 | + def change_role | |
25 | + @roles = Role.find(:all).select{ |r| r.has_kind?(:profile) } | |
26 | + @member = Person.find(params[:id]) | |
27 | + @associations = @member.find_roles(@profile) | |
28 | + end | |
29 | + | |
30 | + def add_role | |
31 | + @person = Person.find(params[:person]) | |
32 | + @role = Role.find(params[:role]) | |
33 | + if @profile.affiliate(@person, @role) | |
34 | + redirect_to :action => 'index' | |
35 | + else | |
36 | + @member = Person.find(params[:person]) | |
37 | + @roles = Role.find(:all).select{ |r| r.has_kind?(:profile) } | |
38 | + render :action => 'affiliate' | |
39 | + end | |
40 | + end | |
41 | + | |
42 | + def remove_role | |
43 | + @association = RoleAssignment.find(params[:id]) | |
44 | + if @association.destroy | |
45 | + flash[:notice] = 'Member succefully unassociated' | |
46 | + else | |
47 | + flash[:notice] = 'Failed to unassociate member' | |
48 | + end | |
49 | + redirect_to :aciton => 'index' | |
50 | + end | |
51 | + | |
52 | + def unassociate | |
53 | + @association = RoleAssignment.find(params[:id]) | |
54 | + if @association.destroy | |
55 | + flash[:notice] = 'Member succefully unassociated' | |
56 | + else | |
57 | + flash[:notice] = 'Failed to unassociate member' | |
58 | + end | |
59 | + redirect_to :aciton => 'index' | |
60 | + end | |
61 | +end | ... | ... |
... | ... | @@ -0,0 +1,23 @@ |
1 | +class MyProfileController < ApplicationController | |
2 | + | |
3 | + needs_profile | |
4 | + | |
5 | + # declares that the controller needs an specific type of profile. Example: | |
6 | + # | |
7 | + # class PersonDetailControlles < ProfileAdminController | |
8 | + # requires_profile_class Person | |
9 | + # end | |
10 | + # | |
11 | + # The above controller will reject every request to it unless the current | |
12 | + # profile (as indicated by the first URL component) is of class Person (or of | |
13 | + # a subclass of Person) | |
14 | + def self.requires_profile_class(some_class) | |
15 | + before_filter do |controller| | |
16 | + unless controller.send(:profile).kind_of?(some_class) | |
17 | + controller.instance_variable_set('@message', _("This action is not available for \"%s\".") % controller.send(:profile).name) | |
18 | + controller.render :file => File.join(RAILS_ROOT, 'app', 'views', 'shared', 'access_denied.rhtml'), :layout => true, :status => 403 | |
19 | + end | |
20 | + end | |
21 | + end | |
22 | + | |
23 | +end | ... | ... |
app/controllers/myprofile/cms_controller.rb
... | ... | @@ -1,361 +0,0 @@ |
1 | -class CmsController < MyProfileController | |
2 | - | |
3 | - define_option :page_class, Article | |
4 | - | |
5 | - protect 'post_content', :profile, :only => [:edit, :new, :reorder, :delete] | |
6 | - | |
7 | - protected | |
8 | - | |
9 | - def profile | |
10 | - Profile.find_by_identifier(params[:profile]) | |
11 | - end | |
12 | - | |
13 | - def user | |
14 | - current_user.person | |
15 | - end | |
16 | - | |
17 | - | |
18 | - public | |
19 | - | |
20 | - ############################################################# | |
21 | - # everything below was copied from comatose | |
22 | - ############################################################# | |
23 | - | |
24 | - define_option :original_template_root, nil | |
25 | - define_option :plugin_layout_path, File.join( '..', '..', '..', 'vendor', 'plugins', 'comatose', 'views', 'layouts' ) | |
26 | - | |
27 | - before_filter :handle_authorization | |
28 | - before_filter :set_content_type | |
29 | - | |
30 | - # Shows the page tree | |
31 | - def index | |
32 | - @root_pages = [fetch_root_page].flatten | |
33 | - end | |
34 | - | |
35 | - # Edit a specfic page (posts back) | |
36 | - def edit | |
37 | - # Clear the page cache for this page... ? | |
38 | - @page = page_class.find params[:id] | |
39 | - @root_pages = [fetch_root_page].flatten | |
40 | - if request.post? | |
41 | - @page.update_attributes(params[:page]) | |
42 | - @page.updated_on = Time.now | |
43 | - @page.author = fetch_author_name | |
44 | - if @page.save | |
45 | - expire_cms_page @page | |
46 | - expire_cms_fragment @page | |
47 | - flash[:notice] = "Saved changes to '#{@page.title}'" | |
48 | - redirect_to :controller=>self.controller_name, :action=>'index' | |
49 | - end | |
50 | - end | |
51 | - end | |
52 | - | |
53 | - # Create a new page (posts back) | |
54 | - def new | |
55 | - @root_pages = [fetch_root_page].flatten | |
56 | - if request.post? | |
57 | - @page = page_class.new params[:page] | |
58 | - @page.author = fetch_author_name | |
59 | - if @page.save | |
60 | - flash[:notice] = "Created page '#{@page.title}'" | |
61 | - redirect_to :controller=>self.controller_name, :action=>'index' | |
62 | - end | |
63 | - else | |
64 | - @page = page_class.new(:parent_id=>(params[:parent] || nil)) | |
65 | - end | |
66 | - end | |
67 | - | |
68 | - # Saves position of child pages | |
69 | - def reorder | |
70 | - # If it's AJAX, do our thing and move on... | |
71 | - if request.xhr? | |
72 | - params["page_list_#{params[:id]}"].each_with_index { |id,idx| page_class.update(id, :position => idx) } | |
73 | - expire_cms_page page_class.find(params[:id]) | |
74 | - render :text=>'Updated sort order', :layout=>false | |
75 | - else | |
76 | - @page = page_class.find params[:id] | |
77 | - if params.has_key? :cmd | |
78 | - @target = page_class.find params[:page] | |
79 | - case params[:cmd] | |
80 | - when 'up' then @target.move_higher | |
81 | - when 'down' then @target.move_lower | |
82 | - end | |
83 | - redirect_to :action=>'reorder', :id=>@page | |
84 | - end | |
85 | - end | |
86 | - end | |
87 | - | |
88 | - # Allows comparing between two versions of a page's content | |
89 | - def versions | |
90 | - @page = page_class.find params[:id] | |
91 | - @version_num = (params[:version] || @page.versions.length).to_i | |
92 | - @version = @page.find_version(@version_num) | |
93 | - end | |
94 | - | |
95 | - # Reverts a page to a specific version... | |
96 | - def set_version | |
97 | - if request.post? | |
98 | - @page = page_class.find params[:id] | |
99 | - @version_num = params[:version] | |
100 | - @page.revert_to!(@version_num) | |
101 | - end | |
102 | - redirect_to :controller=>self.controller_name, :action=>'index' | |
103 | - end | |
104 | - | |
105 | - # Deletes the specified page | |
106 | - def delete | |
107 | - @page = page_class.find params[:id] | |
108 | - if request.post? | |
109 | - expire_cms_pages_from_bottom @page | |
110 | - expire_cms_fragments_from_bottom @page | |
111 | - @page.destroy | |
112 | - flash[:notice] = "Deleted page '#{@page.title}'" | |
113 | - redirect_to :controller=>self.controller_name, :action=>'index' | |
114 | - end | |
115 | - end | |
116 | - | |
117 | - # Returns a preview of the page content... | |
118 | - def preview | |
119 | - begin | |
120 | - page = page_class.new(params[:page]) | |
121 | - page.author = fetch_author_name | |
122 | - if params.has_key? :version | |
123 | - content = page.to_html( {'params'=>params.stringify_keys, 'version'=>params[:version]} ) | |
124 | - else | |
125 | - content = page.to_html( {'params'=>params.stringify_keys} ) | |
126 | - end | |
127 | - rescue SyntaxError | |
128 | - content = "<p>There was an error generating the preview.</p><p><pre>#{$!.to_s.gsub(/\</, '<')}</pre></p>" | |
129 | - rescue | |
130 | - content = "<p>There was an error generating the preview.</p><p><pre>#{$!.to_s.gsub(/\</, '<')}</pre></p>" | |
131 | - end | |
132 | - render :text=>content, :layout => false | |
133 | - end | |
134 | - | |
135 | - # Expires the entire page cache | |
136 | - def expire_page_cache | |
137 | - expire_cms_pages_from_bottom( fetch_root_page ) | |
138 | - expire_cms_fragments_from_bottom( fetch_root_page ) | |
139 | - flash[:notice] = "Page cache has been flushed" | |
140 | - redirect_to :controller=>self.controller_name, :action=>'index' | |
141 | - end | |
142 | - | |
143 | - # Walks the page tree and generates HTML files in your /public | |
144 | - # folder... It will skip pages that have a 'nocache' keyword | |
145 | - # TODO: Make page cache generation work when in :plugin mode | |
146 | - def generate_page_cache | |
147 | - if runtime_mode == :plugin | |
148 | - @errors = ["Page cache cannot be generated in plugin mode"] | |
149 | - else | |
150 | - @errors = generate_all_pages_html(params) | |
151 | - end | |
152 | - if @errors.length == 0 | |
153 | - flash[:notice] = "Pages Cached Successfully" | |
154 | - else | |
155 | - flash[:notice] = "Pages Cache Error(s): #{@errors.join(', ')}" | |
156 | - flash[:cache_errors] = @errors | |
157 | - end | |
158 | - redirect_to :controller=>self.controller_name, :action=>'index' | |
159 | - end | |
160 | - | |
161 | - | |
162 | - protected | |
163 | - | |
164 | - def handle_authorization | |
165 | - if Comatose.config.admin_authorization.is_a? Proc | |
166 | - instance_eval &Comatose.config.admin_authorization | |
167 | - elsif Comatose.config.admin_authorization.is_a? Symbol | |
168 | - send(Comatose.config.admin_authorization) | |
169 | - elsif defined? authorize | |
170 | - authorize | |
171 | - else | |
172 | - true | |
173 | - end | |
174 | - end | |
175 | - | |
176 | - def fetch_author_name | |
177 | - if Comatose.config.admin_get_author.is_a? Proc | |
178 | - instance_eval &Comatose.config.admin_get_author | |
179 | - elsif Comatose.config.admin_get_author.is_a? Symbol | |
180 | - send(Comatose.config.admin_get_author) | |
181 | - elsif defined? get_author | |
182 | - get_author | |
183 | - end | |
184 | - end | |
185 | - | |
186 | - # Can be overridden -- return your root comtase page | |
187 | - def fetch_root_page | |
188 | - if Comatose.config.admin_get_root_page.is_a? Proc | |
189 | - instance_eval &Comatose.config.admin_get_root_page | |
190 | - elsif Comatose.config.admin_get_root_page.is_a? Symbol | |
191 | - send(Comatose.config.admin_get_root_page) | |
192 | - elsif defined? get_root_page | |
193 | - get_root_page | |
194 | - end | |
195 | - end | |
196 | - | |
197 | - # Sets the HTTP content-type header based on what's configured | |
198 | - # in Comatose.config.content_type | |
199 | - def set_content_type | |
200 | - response.headers["Content-Type"] = "text/html; charset=#{Comatose.config.content_type}" unless Comatose.config.content_type.nil? | |
201 | - end | |
202 | - | |
203 | - # Calls generate_page_html for each mount point.. | |
204 | - def generate_all_pages_html(params={}) | |
205 | - @errors = [] | |
206 | - @been_cached = [] | |
207 | - Comatose.mount_points.each do |root_info| | |
208 | - page_class.active_mount_info = root_info | |
209 | - generate_page_html(page_class.find_by_path( root_info[:index] ), root_info, params) | |
210 | - end | |
211 | - @errors | |
212 | - end | |
213 | - | |
214 | - # Accepts a Comatose Page and a root_info object to generate | |
215 | - # the page as a static HTML page -- using the layout that was | |
216 | - # defined on the mount point | |
217 | - def generate_page_html(page, root_info, params={}) | |
218 | - @been_cached ||= [] | |
219 | - unless page.has_keyword? :nocache or @been_cached.include? page.id | |
220 | - uri = page.uri | |
221 | - uri = "#{uri}/index".split('/').flatten.join('/') if page.full_path == root_info[:index] | |
222 | - @page = Comatose::PageWrapper.new(page) | |
223 | - begin | |
224 | - page_layout = get_page_layout(root_info) | |
225 | - #puts "mode = #{runtime_mode}, layout = #{page_layout}, template_root = #{template_root}, original_template_root = #{original_template_root}" | |
226 | - html = render_to_string( :text=>page.to_html({'params'=>params.stringify_keys}), :layout=>page_layout ) | |
227 | - cache_page( html, uri ) | |
228 | - rescue | |
229 | - logger.error "Comatose CMS Page Cache Exception: #{$!}" | |
230 | - @errors << "(#{page}/#{page.slug}) - #{$!}" | |
231 | - end | |
232 | - @been_cached << page.id | |
233 | - # recurse... | |
234 | - page.children.each do |child| | |
235 | - generate_page_html(child, root_info) | |
236 | - end | |
237 | - end | |
238 | - end | |
239 | - | |
240 | - # Calls the class methods of the same name... | |
241 | - def expire_cms_page(page) | |
242 | - self.class.expire_cms_page(page) | |
243 | - end | |
244 | - def expire_cms_pages_from_bottom(page) | |
245 | - self.class.expire_cms_pages_from_bottom(page) | |
246 | - end | |
247 | - | |
248 | - | |
249 | - # expire the page from the fragment cache | |
250 | - def expire_cms_fragment(page) | |
251 | - key = page.full_path.gsub(/\//, '+') | |
252 | - expire_fragment(key) | |
253 | - end | |
254 | - | |
255 | - # expire pages starting at a specific node | |
256 | - def expire_cms_fragments_from_bottom(page) | |
257 | - pages = page.is_a?(Array) ? page : [page] | |
258 | - pages.each do |page| | |
259 | - page.children.each {|c| expire_cms_fragments_from_bottom( c ) } if !page.children.empty? | |
260 | - expire_cms_fragment( page ) | |
261 | - end | |
262 | - end | |
263 | - | |
264 | - # Class Methods... | |
265 | - class << self | |
266 | - | |
267 | - # Walks all the way down, and back up the tree -- the allows the expire_cms_page | |
268 | - # to delete empty directories better | |
269 | - def expire_cms_pages_from_bottom(page) | |
270 | - pages = page.is_a?(Array) ? page : [page] | |
271 | - pages.each do |page| | |
272 | - page.children.each {|c| expire_cms_pages_from_bottom( c ) } if !page.children.empty? | |
273 | - expire_cms_page( page ) | |
274 | - end | |
275 | - end | |
276 | - | |
277 | - # Expire the page from all the mount points... | |
278 | - def expire_cms_page(page) | |
279 | - Comatose.mount_points.each do |path_info| | |
280 | - page_class.active_mount_info = path_info | |
281 | - expire_page(page.uri) | |
282 | - # If the page is the index page for the root, expire it too | |
283 | - if path_info[:root] == page.uri | |
284 | - expire_page("#{path_info[:root]}/index") | |
285 | - end | |
286 | - begin # I'm not sure this matters too much -- but it keeps things clean | |
287 | - dir_path = File.join(RAILS_ROOT, 'public', page.uri[1..-1]) | |
288 | - Dir.delete( dir_path ) if FileTest.directory?( dir_path ) and !page.parent.nil? | |
289 | - rescue | |
290 | - # It probably isn't empty -- just as well we leave it be | |
291 | - #STDERR.puts " - Couldn't delete dir #{dir_path} -> #{$!}" | |
292 | - end | |
293 | - end | |
294 | - end | |
295 | - | |
296 | - # Returns a path to plugin layout, if it's unspecified, otherwise | |
297 | - # a path to an application layout... | |
298 | - def get_page_layout(params) | |
299 | - if params[:layout] == 'comatose_content' | |
300 | - File.join(plugin_layout_path, params[:layout]) | |
301 | - else | |
302 | - params[:layout] | |
303 | - end | |
304 | - end | |
305 | - | |
306 | - def configure_template_root | |
307 | - if self.runtime_mode == :unknown | |
308 | - if FileTest.exist? File.join(RAILS_ROOT, 'public', 'javascripts', 'comatose_admin.js') | |
309 | - self.runtime_mode = :application | |
310 | - else | |
311 | - self.runtime_mode = :plugin | |
312 | - end | |
313 | - end | |
314 | - end | |
315 | - | |
316 | - def runtime_mode | |
317 | - @@runtime_mode ||= :unknown | |
318 | - end | |
319 | - | |
320 | - def runtime_mode=(mode) | |
321 | - case mode | |
322 | - when :plugin | |
323 | - self.original_template_root = self.template_root | |
324 | - self.template_root = File.join( File.dirname(__FILE__), '..', '..', 'views') | |
325 | - when :application | |
326 | - self.template_root = self.original_template_root if self.original_template_root | |
327 | - end | |
328 | - @@runtime_mode = mode | |
329 | - end | |
330 | - | |
331 | - end | |
332 | - | |
333 | - # Check to see if we are in 'embedded' mode, or are being 'customized' | |
334 | - # embedded = runtime_mode of :plugin | |
335 | - # customized = runtime_mode of :application | |
336 | - configure_template_root | |
337 | - | |
338 | - # | |
339 | - # Include any modules... | |
340 | - Comatose.config.admin_includes.each do |mod| | |
341 | - if mod.is_a? String | |
342 | - include mod.constantize | |
343 | - elsif mod.is_a? Symbol | |
344 | - include mod.to_s.classify.constantize | |
345 | - else | |
346 | - include mod | |
347 | - end | |
348 | - end | |
349 | - | |
350 | - # Include any helpers... | |
351 | - Comatose.config.admin_helpers.each do |mod| | |
352 | - if mod.is_a? String | |
353 | - helper mod.constantize | |
354 | - elsif mod.is_a? Symbol | |
355 | - helper mod.to_s.classify.constantize | |
356 | - else | |
357 | - helper mod | |
358 | - end | |
359 | - end | |
360 | - | |
361 | -end |
app/controllers/myprofile/enterprise_editor_controller.rb
... | ... | @@ -1,47 +0,0 @@ |
1 | -class EnterpriseEditorController < MyProfileController | |
2 | - protect 'edit_profile', :profile, :user, :except => :destroy | |
3 | - protect 'destroy_profile', :profile, :only => :destroy | |
4 | - | |
5 | - before_filter :check_enterprise | |
6 | - | |
7 | - # Show details about an enterprise | |
8 | - def index | |
9 | - end | |
10 | - | |
11 | - # Provides an interface to editing the enterprise details | |
12 | - def edit | |
13 | - @validation_entities = Organization.find(:all) - [@enterprise] | |
14 | - end | |
15 | - | |
16 | - # Saves the changes made in an enterprise | |
17 | - def update | |
18 | - if @enterprise.update_attributes(params[:enterprise]) && @enterprise.organization_info.update_attributes(params[:organization_info]) | |
19 | - redirect_to :action => 'index' | |
20 | - else | |
21 | - flash[:notice] = _('Could not update the enterprise') | |
22 | - @validation_entities = Organization.find(:all) - [@enterprise] | |
23 | - render :action => 'edit' | |
24 | - end | |
25 | - end | |
26 | - | |
27 | - # Elimitates the enterprise of the system | |
28 | - def destroy | |
29 | - #raise "bli" | |
30 | - if @enterprise.destroy | |
31 | - flash[:notice] = _('Enterprise sucessfully erased from the system') | |
32 | - redirect_to :controller => 'profile_editor', :action => 'index', :profile => current_user.login | |
33 | - else | |
34 | - redirect_to :action => 'index' | |
35 | - end | |
36 | - end | |
37 | - | |
38 | - protected | |
39 | - | |
40 | - def check_enterprise | |
41 | - if profile.is_a?(Enterprise) | |
42 | - @enterprise = profile | |
43 | - else | |
44 | - redirect_to :controller => 'account' #:controller => 'profile_editor', :profile => current_user.login and return | |
45 | - end | |
46 | - end | |
47 | -end |
app/controllers/myprofile/enterprise_validation_controller.rb
... | ... | @@ -1,52 +0,0 @@ |
1 | -class EnterpriseValidationController < MyProfileController | |
2 | - | |
3 | - def index | |
4 | - @pending_validations = profile.pending_validations | |
5 | - end | |
6 | - | |
7 | - def details | |
8 | - @pending = profile.find_pending_validation(params[:id]) | |
9 | - unless @pending | |
10 | - render_not_found | |
11 | - end | |
12 | - end | |
13 | - | |
14 | - post_only :approve | |
15 | - def approve | |
16 | - @pending = profile.find_pending_validation(params[:id]) | |
17 | - if @pending | |
18 | - @pending.approve | |
19 | - redirect_to :action => 'view_processed', :id => @pending.code | |
20 | - else | |
21 | - render_not_found | |
22 | - end | |
23 | - end | |
24 | - | |
25 | - post_only :reject | |
26 | - def reject | |
27 | - @pending = profile.find_pending_validation(params[:id]) | |
28 | - if @pending | |
29 | - @pending.reject_explanation = params[:reject_explanation] | |
30 | - begin | |
31 | - @pending.reject | |
32 | - redirect_to :action => 'view_processed', :id => @pending.code | |
33 | - rescue ActiveRecord::RecordInvalid | |
34 | - render :action => 'details' | |
35 | - end | |
36 | - else | |
37 | - render_not_found | |
38 | - end | |
39 | - end | |
40 | - | |
41 | - def list_processed | |
42 | - @processed_validations = profile.processed_validations | |
43 | - end | |
44 | - | |
45 | - def view_processed | |
46 | - @processed = profile.find_processed_validation(params[:id]) | |
47 | - unless @processed | |
48 | - render_not_found | |
49 | - end | |
50 | - end | |
51 | - | |
52 | -end |
app/controllers/myprofile/membership_editor_controller.rb
... | ... | @@ -1,39 +0,0 @@ |
1 | -class MembershipEditorController < MyProfileController | |
2 | - | |
3 | - before_filter :login_required | |
4 | - | |
5 | - def target | |
6 | - environment | |
7 | - end | |
8 | - | |
9 | - protect 'edit_profile', :profile, :only => [:index, :new_enterprise, :create_enterprise ] | |
10 | - | |
11 | - def index | |
12 | - @memberships = current_user.person.enterprise_memberships | |
13 | - end | |
14 | - | |
15 | - def new_enterprise | |
16 | - @enterprise = Enterprise.new() | |
17 | - @validation_entities = Organization.find(:all) | |
18 | - end | |
19 | - | |
20 | - def create_enterprise | |
21 | - @enterprise = Enterprise.new(params[:enterprise]) | |
22 | - @enterprise.organization_info = OrganizationInfo.new(params[:organization]) | |
23 | - if @enterprise.save | |
24 | - @enterprise.affiliate(current_user.person, Role.find(:all, :conditions => {:name => ['owner', 'member', 'moderator']})) | |
25 | - flash[:notice] = _('The enterprise was successfully created, the validation entity will cotact you as soon as your enterprise is approved') | |
26 | - redirect_to :action => 'index' | |
27 | - else | |
28 | - flash[:notice] = _('Enterprise was not created') | |
29 | - @validation_entities = Organization.find(:all) | |
30 | - render :action => 'register_form' | |
31 | - end | |
32 | - end | |
33 | - | |
34 | - # Search enterprises by name or tags | |
35 | - def search | |
36 | - @tagged_enterprises = Enterprise.search(params[:query]) | |
37 | - end | |
38 | - | |
39 | -end |
app/controllers/myprofile/profile_editor_controller.rb
... | ... | @@ -1,39 +0,0 @@ |
1 | -class ProfileEditorController < MyProfileController | |
2 | - | |
3 | - #protect 'edit_profile', :profile, only => [:index, :edit] | |
4 | - | |
5 | - helper :profile | |
6 | - | |
7 | - | |
8 | - | |
9 | - design_editor :holder => 'profile', :autosave => true, :block_types => :block_types | |
10 | - | |
11 | - | |
12 | - def block_types | |
13 | - %w[ | |
14 | - FavouriteLinks | |
15 | - ] | |
16 | - end | |
17 | - | |
18 | -# FIXME Put other Blocks to works | |
19 | -# def block_types | |
20 | -# { | |
21 | -# 'ListBlock' => _("List of People"), | |
22 | -# 'EnterprisesBlock' => _("List of Enterprises"), | |
23 | -# 'LinkBlock' => _("Link Block"), | |
24 | -# 'RecentDocumentsBlock' => _("Recent documents block") | |
25 | -# } | |
26 | -# end | |
27 | - | |
28 | - # edits the profile info (posts back) | |
29 | - def edit | |
30 | - if request.post? | |
31 | - profile.info.update_attributes(params[:info]) | |
32 | - redirect_to :action => 'index' | |
33 | - else | |
34 | - @info = profile.info | |
35 | - render :action => @info.class.name.underscore | |
36 | - end | |
37 | - end | |
38 | -end | |
39 | - |
app/controllers/myprofile/profile_members_controller.rb
... | ... | @@ -1,61 +0,0 @@ |
1 | -class ProfileMembersController < MyProfileController | |
2 | - protect 'manage_memberships', :profile | |
3 | - | |
4 | - def index | |
5 | - @members = profile.members | |
6 | - end | |
7 | - | |
8 | - def change_roles | |
9 | - @member = Person.find(params[:id]) | |
10 | - @roles = Role.find(:all).select{ |r| r.has_kind?(:profile) } | |
11 | - end | |
12 | - | |
13 | - def update_roles | |
14 | - @roles = params[:roles] ? Role.find(params[:roles]) : [] | |
15 | - @person = Person.find(params[:person]) | |
16 | - if @person.define_roles(@roles, profile) | |
17 | - flash[:notice] = _('Roles successfuly updated') | |
18 | - else | |
19 | - flash[:notice] = _('Couldn\'t change the roles') | |
20 | - end | |
21 | - redirect_to :action => :index | |
22 | - end | |
23 | - | |
24 | - def change_role | |
25 | - @roles = Role.find(:all).select{ |r| r.has_kind?(:profile) } | |
26 | - @member = Person.find(params[:id]) | |
27 | - @associations = @member.find_roles(@profile) | |
28 | - end | |
29 | - | |
30 | - def add_role | |
31 | - @person = Person.find(params[:person]) | |
32 | - @role = Role.find(params[:role]) | |
33 | - if @profile.affiliate(@person, @role) | |
34 | - redirect_to :action => 'index' | |
35 | - else | |
36 | - @member = Person.find(params[:person]) | |
37 | - @roles = Role.find(:all).select{ |r| r.has_kind?(:profile) } | |
38 | - render :action => 'affiliate' | |
39 | - end | |
40 | - end | |
41 | - | |
42 | - def remove_role | |
43 | - @association = RoleAssignment.find(params[:id]) | |
44 | - if @association.destroy | |
45 | - flash[:notice] = 'Member succefully unassociated' | |
46 | - else | |
47 | - flash[:notice] = 'Failed to unassociate member' | |
48 | - end | |
49 | - redirect_to :aciton => 'index' | |
50 | - end | |
51 | - | |
52 | - def unassociate | |
53 | - @association = RoleAssignment.find(params[:id]) | |
54 | - if @association.destroy | |
55 | - flash[:notice] = 'Member succefully unassociated' | |
56 | - else | |
57 | - flash[:notice] = 'Failed to unassociate member' | |
58 | - end | |
59 | - redirect_to :aciton => 'index' | |
60 | - end | |
61 | -end |
app/controllers/myprofile_controller.rb
... | ... | @@ -1,23 +0,0 @@ |
1 | -class MyProfileController < ApplicationController | |
2 | - | |
3 | - needs_profile | |
4 | - | |
5 | - # declares that the controller needs an specific type of profile. Example: | |
6 | - # | |
7 | - # class PersonDetailControlles < ProfileAdminController | |
8 | - # requires_profile_class Person | |
9 | - # end | |
10 | - # | |
11 | - # The above controller will reject every request to it unless the current | |
12 | - # profile (as indicated by the first URL component) is of class Person (or of | |
13 | - # a subclass of Person) | |
14 | - def self.requires_profile_class(some_class) | |
15 | - before_filter do |controller| | |
16 | - unless controller.send(:profile).kind_of?(some_class) | |
17 | - controller.instance_variable_set('@message', _("This action is not available for \"%s\".") % controller.send(:profile).name) | |
18 | - controller.render :file => File.join(RAILS_ROOT, 'app', 'views', 'shared', 'access_denied.rhtml'), :layout => true, :status => 403 | |
19 | - end | |
20 | - end | |
21 | - end | |
22 | - | |
23 | -end |