Commit 530e66dde532ce3586b6f8bdce64703419918501
1 parent
f6dc326c
Exists in
master
and in
29 other branches
html_safe: fix action tracker description mess
Showing
7 changed files
with
122 additions
and
76 deletions
Show diff stats
app/controllers/public/profile_controller.rb
... | ... | @@ -6,6 +6,7 @@ class ProfileController < PublicController |
6 | 6 | before_filter :login_required, :only => [:add, :join, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_activities, :view_more_network_activities, :report_abuse, :register_report, :leave_comment_on_activity, :send_mail] |
7 | 7 | |
8 | 8 | helper TagsHelper |
9 | + helper ActionTrackerHelper | |
9 | 10 | |
10 | 11 | protect 'send_mail_to_members', :profile, :only => [:send_mail] |
11 | 12 | ... | ... |
... | ... | @@ -0,0 +1,70 @@ |
1 | +module ActionTrackerHelper | |
2 | + | |
3 | + def create_article_description ta | |
4 | + _('published an article: %{title}') % { title: link_to(truncate(ta.get_name), ta.get_url) } | |
5 | + end | |
6 | + | |
7 | + def new_friendship_description ta | |
8 | + n_('has made 1 new friend:<br />%{name}', 'has made %{num} new friends:<br />%{name}', ta.get_friend_name.size) % { | |
9 | + num: ta.get_friend_name.size, | |
10 | + name: ta.collect_group_with_index(:friend_name) do |n,i| | |
11 | + link_to image_tag(ta.get_friend_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/person-icon.png")), | |
12 | + ta.get_friend_url[i], title: n | |
13 | + end.join | |
14 | + } | |
15 | + end | |
16 | + | |
17 | + def join_community_description ta | |
18 | + n_('has joined 1 community:<br />%{name}', 'has joined %{num} communities:<br />%{name}', ta.get_resource_name.size) % { | |
19 | + num: ta.get_resource_name.size, | |
20 | + name: ta.collect_group_with_index(:resource_name) do |n,i| | |
21 | + link_to image_tag(ta.get_resource_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/community-icon.png")), | |
22 | + ta.get_resource_url[i], title: n | |
23 | + end.join | |
24 | + } | |
25 | + end | |
26 | + | |
27 | + def add_member_in_community_description ta | |
28 | + _('has joined the community.') | |
29 | + end | |
30 | + | |
31 | + def upload_image_description ta | |
32 | + total = ta.get_view_url.size | |
33 | + (n_('uploaded 1 image', 'uploaded %d images', total) % total) + | |
34 | + tag(:br) + | |
35 | + ta.collect_group_with_index(:thumbnail_path) do |t,i| | |
36 | + if total == 1 | |
37 | + link_to image_tag(t), ta.get_view_url[i], class: 'upimg' | |
38 | + else | |
39 | + pos = total-i; | |
40 | + morethen2 = pos>2 ? 'morethen2' : '' | |
41 | + morethen5 = pos>5 ? 'morethen5' : '' | |
42 | + t = t.gsub(/(.*)(display)(.*)/, '\\1thumb\\3') | |
43 | + | |
44 | + link_to ' '.html_safe, ta.get_view_url[i], | |
45 | + style: "background-image:url(#{t})", | |
46 | + class: "upimg pos#{pos} #{morethen2} #{morethen5}" | |
47 | + end | |
48 | + end.reverse.join + | |
49 | + if total <= 5 then ''.html_safe else content_tag :span, '…'.html_safe, | |
50 | + class: 'more', onclick: "this.parentNode.className+=' show-all'" end + | |
51 | + tag(:br, style: 'clear: both') | |
52 | + end | |
53 | + | |
54 | + def reply_scrap_description ta | |
55 | + _('sent a message to %{receiver}: <br /> "%{message}"') % { | |
56 | + receiver: link_to(ta.get_receiver_name, ta.get_receiver_url), | |
57 | + message: auto_link_urls(ta.get_content) | |
58 | + } | |
59 | + end | |
60 | + | |
61 | + alias :leave_scrap_description :reply_scrap_description | |
62 | + alias :reply_scrap_on_self_description :reply_scrap_description | |
63 | + | |
64 | + def leave_scrap_to_self_description ta | |
65 | + _('wrote: <br /> "%{text}"') % { | |
66 | + text: auto_link_urls(ta.get_content) | |
67 | + } | |
68 | + end | |
69 | + | |
70 | +end | ... | ... |
app/models/person_notifier.rb
app/views/person_notifier/mailer/_default_activity.html.erb
... | ... | @@ -4,7 +4,10 @@ |
4 | 4 | </td> |
5 | 5 | <td> |
6 | 6 | <p> |
7 | - <span style="font-size: 14px;"><%= link_to activity.user.name, activity.user.url %> <%= describe activity %></span> | |
7 | + <span style="font-size: 14px;"> | |
8 | + <%= link_to activity.user.name, activity.user.url %> | |
9 | + <%= describe activity %> | |
10 | + </span> | |
8 | 11 | <span style="font-size: 10px; color: #929292; float: right;"><%= time_ago_in_words(activity.created_at) %></span> |
9 | 12 | </p> |
10 | 13 | </td> | ... | ... |
config/initializers/action_tracker.rb
... | ... | @@ -2,64 +2,33 @@ require 'noosfero/i18n' |
2 | 2 | |
3 | 3 | # ActionTracker plugin stuff |
4 | 4 | |
5 | -@reply_scrap_description = proc { _('sent a message to %{receiver}: <br /> "%{message}"') % { :receiver => "{{link_to(ta.get_receiver_name, ta.get_receiver_url)}}", :message => "{{auto_link_urls(ta.get_content)}}" } } | |
6 | - | |
7 | 5 | ActionTrackerConfig.verbs = { |
8 | 6 | |
9 | - :create_article => { | |
10 | - :description => proc { _('published an article: %{title}') % { :title => '{{link_to(truncate(ta.get_name), ta.get_url)}}' } } | |
7 | + create_article: { | |
11 | 8 | }, |
12 | 9 | |
13 | - :new_friendship => { | |
14 | - :description => proc { n_('has made 1 new friend:<br />%{name}', 'has made %{num} new friends:<br />%{name}', get_friend_name.size) % { :num => get_friend_name.size, :name => '{{ta.collect_group_with_index(:friend_name){ |n,i| link_to(image_tag(ta.get_friend_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/person-icon.png")), ta.get_friend_url[i], :title => n)}.join}}' } }, | |
15 | - :type => :groupable | |
10 | + new_friendship: { | |
11 | + type: :groupable | |
16 | 12 | }, |
17 | 13 | |
18 | - :join_community => { | |
19 | - :description => proc { n_('has joined 1 community:<br />%{name}', 'has joined %{num} communities:<br />%{name}', get_resource_name.size) % { :num => get_resource_name.size, :name => '{{ta.collect_group_with_index(:resource_name){ |n,i| link_to(image_tag(ta.get_resource_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/community-icon.png")), ta.get_resource_url[i], :title => n)}.join}}' } }, | |
20 | - :type => :groupable | |
14 | + join_community: { | |
15 | + type: :groupable | |
21 | 16 | }, |
22 | 17 | |
23 | - :add_member_in_community => { | |
24 | - :description => proc { _('has joined the community.') }, | |
18 | + add_member_in_community: { | |
25 | 19 | }, |
26 | 20 | |
27 | - :upload_image => { | |
28 | - :description => proc do | |
29 | - total = get_view_url.size | |
30 | - n_('uploaded 1 image', 'uploaded %d images', total) % total + | |
31 | - '<br />{{'+ | |
32 | - 'ta.collect_group_with_index(:thumbnail_path) { |t,i|' + | |
33 | - " if ( #{total} == 1 );" + | |
34 | - ' link_to( image_tag(t), ta.get_view_url[i], :class => \'upimg\' );' + | |
35 | - ' else;' + | |
36 | - " pos = #{total}-i;" + | |
37 | - ' morethen2 = pos>2 ? \'morethen2\' : \'\';' + | |
38 | - ' morethen5 = pos>5 ? \'morethen5\' : \'\';' + | |
39 | - ' t = t.gsub(/(.*)(display)(.*)/, \'\\1thumb\\3\');' + | |
40 | - ' link_to( \' \', ta.get_view_url[i],' + | |
41 | - ' :style => "background-image:url(#{t})",' + | |
42 | - ' :class => "upimg pos#{pos} #{morethen2} #{morethen5}" );' + | |
43 | - ' end' + | |
44 | - '}.reverse.join}}' + | |
45 | - ( total > 5 ? | |
46 | - '<span class="more" onclick="this.parentNode.className+=\' show-all\'">' + | |
47 | - '…</span>' : '' ) + | |
48 | - '<br style="clear: both;" />' | |
49 | - end, | |
50 | - :type => :groupable | |
21 | + upload_image: { | |
22 | + type: :groupable | |
51 | 23 | }, |
52 | 24 | |
53 | - :leave_scrap => { | |
54 | - :description => @reply_scrap_description | |
25 | + leave_scrap: { | |
55 | 26 | }, |
56 | 27 | |
57 | - :leave_scrap_to_self => { | |
58 | - :description => proc { _('wrote: <br /> "%{text}"') % { :text => "{{auto_link_urls(ta.get_content)}}" } } | |
28 | + leave_scrap_to_self: { | |
59 | 29 | }, |
60 | 30 | |
61 | - :reply_scrap_on_self => { | |
62 | - :description => @reply_scrap_description | |
31 | + reply_scrap_on_self: { | |
63 | 32 | }, |
64 | 33 | } |
65 | 34 | ... | ... |
test/unit/person_notifier_test.rb
... | ... | @@ -162,23 +162,31 @@ class PersonNotifierTest < ActiveSupport::TestCase |
162 | 162 | |
163 | 163 | ActionTrackerConfig.verb_names.each do |verb| |
164 | 164 | should "render notification for verb #{verb}" do |
165 | - action = mock() | |
166 | - action.stubs(:verb).returns(verb) | |
167 | - action.stubs(:user).returns(@member) | |
168 | - action.stubs(:created_at).returns(DateTime.now) | |
169 | - action.stubs(:target).returns(fast_create(Forum)) | |
170 | - action.stubs(:comments_count).returns(0) | |
171 | - action.stubs(:comments).returns([]) | |
172 | - action.stubs(:params).returns({'name' => 'home', 'url' => '/', 'lead' => ''}) | |
173 | - action.stubs(:get_url).returns('') | |
174 | - | |
175 | - notifications = [] | |
176 | - notifications.stubs(:find).returns([action]) | |
177 | - Person.any_instance.stubs(:tracked_notifications).returns(notifications) | |
178 | - | |
179 | - notify | |
180 | - sent = ActionMailer::Base.deliveries.last | |
181 | - assert_no_match /cannot render notification for #{verb}/, sent.body.to_s | |
165 | + @member.tracked_notifications = [] | |
166 | + | |
167 | + a = @member.tracked_notifications.build | |
168 | + a.verb = verb | |
169 | + a.user = @member | |
170 | + a.created_at = @member.notifier.notify_from + 1.day | |
171 | + a.target = fast_create(Forum) | |
172 | + a.comments_count = 0 | |
173 | + a.params = { | |
174 | + 'name' => 'home', 'url' => '/', 'lead' => '', | |
175 | + 'receiver_url' => '/', 'content' => 'nothing', | |
176 | + 'friend_url' => '/', 'friend_profile_custom_icon' => [], 'friend_name' => ['joe'], | |
177 | + 'resource_name' => ['resource'], 'resource_profile_custom_icon' => [], 'resource_url' => ['/'], | |
178 | + 'view_url'=> ['/'], 'thumbnail_path' => ['1'], | |
179 | + } | |
180 | + a.get_url = '' | |
181 | + a.save! | |
182 | + n = @member.action_tracker_notifications.build | |
183 | + n.action_tracker = a | |
184 | + n.profile = @member | |
185 | + n.save! | |
186 | + | |
187 | + assert_nothing_raised do | |
188 | + notify | |
189 | + end | |
182 | 190 | end |
183 | 191 | end |
184 | 192 | ... | ... |
vendor/plugins/action_tracker/lib/action_tracker.rb
... | ... | @@ -8,21 +8,21 @@ module ActionTracker |
8 | 8 | base.send :user_stamp, ActionTracker::Record |
9 | 9 | base.send :extend, ClassMethods |
10 | 10 | end |
11 | - | |
11 | + | |
12 | 12 | module ClassMethods |
13 | 13 | |
14 | 14 | def track_actions_after(verb, options = {}, &block) |
15 | 15 | track_actions_by_time(verb, :after, options, &block) |
16 | 16 | end |
17 | - | |
17 | + | |
18 | 18 | def track_actions_before(verb, options = {}, &block) |
19 | 19 | track_actions_by_time(verb, :before, options, &block) |
20 | 20 | end |
21 | - | |
21 | + | |
22 | 22 | def track_actions(verb, options = {}, &block) |
23 | 23 | track_actions_by_time(verb, ActionTrackerConfig.default_filter_time, options, &block) |
24 | 24 | end |
25 | - | |
25 | + | |
26 | 26 | def track_actions_by_time(verb, time, options = {}, &block) |
27 | 27 | keep_params = options.delete(:keep_params) || options.delete('keep_params') || :all |
28 | 28 | send("#{time}_filter", options) do |x| |
... | ... | @@ -32,7 +32,7 @@ module ActionTracker |
32 | 32 | send :include, InstanceMethods |
33 | 33 | end |
34 | 34 | end |
35 | - | |
35 | + | |
36 | 36 | module InstanceMethods |
37 | 37 | def save_action_for_verb(verb, keep_params = :all) |
38 | 38 | if keep_params.is_a? Array |
... | ... | @@ -62,7 +62,7 @@ module ActionTracker |
62 | 62 | def self.included(base) |
63 | 63 | base.send :extend, ClassMethods |
64 | 64 | end |
65 | - | |
65 | + | |
66 | 66 | module ClassMethods |
67 | 67 | def track_actions(verb, callback, options = {}, &block) |
68 | 68 | keep_params = options.delete(:keep_params) || options.delete('keep_params') || :all |
... | ... | @@ -78,11 +78,11 @@ module ActionTracker |
78 | 78 | send :include, InstanceMethods |
79 | 79 | end |
80 | 80 | end |
81 | - | |
81 | + | |
82 | 82 | module InstanceMethods |
83 | 83 | def time_spent_doing(verb, conditions = {}) |
84 | 84 | time = 0 |
85 | - tracked_actions.all(:conditions => conditions.merge({ :verb => verb.to_s })).each do |t| | |
85 | + tracked_actions.all(:conditions => conditions.merge({ :verb => verb.to_s })).each do |t| | |
86 | 86 | time += t.updated_at - t.created_at |
87 | 87 | end |
88 | 88 | time.to_f |
... | ... | @@ -124,13 +124,7 @@ module ActionTracker |
124 | 124 | |
125 | 125 | module ViewHelper |
126 | 126 | def describe(ta) |
127 | - "".tap do |result| | |
128 | - if ta.is_a?(ActionTracker::Record) | |
129 | - result << ta.description.gsub(/\{\{(.*?)\}\}/) { eval $1 } | |
130 | - else | |
131 | - result << "" | |
132 | - end | |
133 | - end | |
127 | + send "#{ta.verb}_description", ta if ta.is_a? ActionTracker::Record | |
134 | 128 | end |
135 | 129 | end |
136 | 130 | ... | ... |