profile_controller.rb
7.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
class ProfileController < PublicController
needs_profile
before_filter :check_access_to_profile, :except => [:join, :index]
before_filter :store_before_join, :only => [:join]
before_filter :login_required, :only => [:join, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_scraps, :view_more_activities, :view_more_network_activities]
helper TagsHelper
def index
@activities = @profile.tracked_actions.paginate(:per_page => 30, :page => params[:page])
@network_activities = []
@wall_items = []
if !@profile.is_a?(Person)
@network_activities = @profile.tracked_notifications.paginate(:per_page => 30, :page => params[:page])
elsif logged_in? && current_person.follows?(@profile)
@network_activities = @profile.tracked_notifications.paginate(:per_page => 30, :page => params[:page])
@wall_items = @profile.scraps_received.not_replies.paginate(:per_page => 30, :page => params[:page]) if @profile.is_a?(Person)
end
@tags = profile.article_tags
unless profile.display_info_to?(user)
profile.visible? ? private_profile : invisible_profile
end
end
def tags
@tags_cache_key = "tags_profile_#{profile.id.to_s}"
if is_cache_expired?(@tags_cache_key, true)
@tags = profile.article_tags
end
end
def content_tagged
@tag = params[:id]
@tag_cache_key = "tag_#{CGI.escape(@tag.to_s)}_#{profile.id.to_s}_page_#{params[:npage]}"
if is_cache_expired?(@tag_cache_key, true)
@tagged = profile.find_tagged_with(@tag).paginate(:per_page => 20, :page => params[:npage])
end
end
def tag_feed
@tag = params[:id]
tagged = profile.articles.paginate(:per_page => 20, :page => 1, :order => 'published_at DESC', :include => :tags, :conditions => ['tags.name LIKE ?', @tag])
feed_writer = FeedWriter.new
data = feed_writer.write(
tagged,
:title => _("%s's contents tagged with \"%s\"") % [profile.name, @tag],
:description => _("%s's contents tagged with \"%s\"") % [profile.name, @tag],
:link => url_for(:action => 'tags')
)
render :text => data, :content_type => "text/xml"
end
def communities
if is_cache_expired?(profile.communities_cache_key(params))
@communities = profile.communities.paginate(:per_page => per_page, :page => params[:npage])
end
end
def enterprises
@enterprises = profile.enterprises
end
def friends
if is_cache_expired?(profile.friends_cache_key(params))
@friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage])
end
end
def members
if is_cache_expired?(profile.members_cache_key(params))
@members = profile.members.paginate(:per_page => members_per_page, :page => params[:npage])
end
end
def favorite_enterprises
@favorite_enterprises = profile.favorite_enterprises
end
def sitemap
@articles = profile.top_level_articles
end
def join
@wizard = params[:wizard]
if request.post? && params[:confirmation]
profile.add_member(current_user.person)
session[:notice] = _('%s administrator still needs to accept you as member.') % profile.name if profile.closed?
if @wizard
redirect_to :controller => 'search', :action => 'assets', :asset => 'communities', :wizard => true
else
redirect_to_before_join
end
else
if current_user.person.memberships.include?(profile)
session[:notice] = _('You are already a member of "%s"') % profile.name
redirect_to profile.url
return
end
if request.xhr?
render :layout => false
end
end
end
def leave
@wizard = params[:wizard]
@back_to = params[:back_to] || request.referer
if request.post? && params[:confirmation]
profile.remove_member(current_user.person)
if @wizard
redirect_to :controller => 'search', :action => 'assets', :asset => 'communities', :wizard => true
else
back = @back_to || profile.url
redirect_to back
end
else
if request.xhr?
render :layout => false
end
end
end
def unblock
if current_user.person.is_admin?(profile.environment)
profile.unblock
session[:notice] = _("You have unblocked %s successfully. ") % profile.name
redirect_to :controller => 'profile', :action => 'index'
else
message = __('You are not allowed to unblock enterprises in this environment.')
render_access_denied(message)
end
end
def leave_scrap
sender = params[:sender_id].nil? ? current_user.person : Person.find(params[:sender_id])
receiver = params[:receiver_id].nil? ? @profile : Person.find(params[:receiver_id])
@scrap = Scrap.new(params[:scrap])
@scrap.sender= sender
@scrap.receiver= receiver
@tab_action = params[:tab_action]
@message = @scrap.save ? _("Message successfully sent.") : _("You can't leave an empty message.")
@scraps = @profile.scraps_received.not_replies.paginate(:per_page => 30, :page => params[:page]) if params[:not_load_scraps].nil?
render :partial => 'leave_scrap'
end
def view_more_scraps
@scraps = @profile.scraps_received.not_replies.paginate(:per_page => 30, :page => params[:page])
render :partial => 'profile_scraps', :locals => {:scraps => @scraps}
end
def view_more_activities
@activities = @profile.tracked_actions.paginate(:per_page => 30, :page => params[:page])
render :partial => 'profile_activities', :locals => {:activities => @activities}
end
def view_more_network_activities
@activities = @profile.tracked_notifications.paginate(:per_page => 30, :page => params[:page])
render :partial => 'profile_network_activities', :locals => {:network_activities => @activities}
end
def remove_scrap
begin
scrap = current_user.person.scraps(params[:scrap_id])
scrap.destroy
render :text => _('Scrap successfully removed.')
rescue
render :text => _('You could not remove this scrap')
end
end
def remove_activity
begin
activity = current_person.tracked_actions.find(params[:activity_id])
activity.destroy
render :text => _('Activity successfully removed.')
rescue
render :text => _('You could not remove this activity')
end
end
protected
def check_access_to_profile
unless profile.display_info_to?(user)
redirect_to :action => 'index'
end
end
def store_before_join
if session[:before_join].nil?
session[:before_join] = request.referer
end
end
def redirect_to_before_join
back = session[:before_join]
if back
session[:before_join] = nil
redirect_to back
else
redirect_to profile.url
end
end
def private_profile
if profile.person?
@action = :add_friend
@message = _("The content here is available to %s's friends only." % profile.short_name)
else
@action = :join
@message = _('The contents in this community is available to members only.')
end
@no_design_blocks = true
end
def invisible_profile
render_access_denied(_("Sorry, this profile was defined as private by its owner. You'll not be able to view content here unless the profile owner adds adds you."), _("Oops ... you cannot go ahead here"))
end
def per_page
Noosfero::Constants::PROFILE_PER_PAGE
end
def members_per_page
20
end
end