Commit 73abf8b8510f70264a3f8e30d6083fe56044afc9
Exists in
staging
and in
15 other branches
Merge branch 'recent-activities' into 'master'
Recent activities Adding a plugin "recent_activities" which adds a block that list the recent activities of the profile who owns it: ![76](/uploads/000199ff2aaf4dd40f8f905ce11d884d/76.png) See merge request !972
Showing
9 changed files
with
178 additions
and
0 deletions
Show diff stats
plugins/recent_activities/lib/recent_activities_plugin.rb
0 → 100644
... | ... | @@ -0,0 +1,25 @@ |
1 | +class RecentActivitiesPlugin < Noosfero::Plugin | |
2 | + def self.plugin_name | |
3 | + 'RecentActivitiesPlugin' | |
4 | + end | |
5 | + | |
6 | + def self.plugin_description | |
7 | + _('Adds a block that lists recent profile activity.') | |
8 | + end | |
9 | + | |
10 | + def self.extra_blocks | |
11 | + { | |
12 | + RecentActivitiesPlugin::ActivitiesBlock => { type: [Community, Person] } | |
13 | + } | |
14 | + end | |
15 | + | |
16 | + def self.has_admin_url? | |
17 | + false | |
18 | + end | |
19 | + | |
20 | + def stylesheet? | |
21 | + true | |
22 | + end | |
23 | +end | |
24 | + | |
25 | +ApplicationHelper.include ActionTrackerHelper | ... | ... |
plugins/recent_activities/lib/recent_activities_plugin/activities_block.rb
0 → 100644
... | ... | @@ -0,0 +1,45 @@ |
1 | +class RecentActivitiesPlugin::ActivitiesBlock < Block | |
2 | + attr_accessible :limit | |
3 | + settings_items :limit, type: :integer, default: 5 | |
4 | + | |
5 | + def view_title | |
6 | + self.default_title | |
7 | + end | |
8 | + | |
9 | + def activities | |
10 | + list = self.limit.nil? ? owner.activities : owner.activities.limit(self.get_limit) | |
11 | + list.map(&:activity) | |
12 | + end | |
13 | + | |
14 | + def extra_option | |
15 | + { } | |
16 | + end | |
17 | + | |
18 | + def self.description | |
19 | + _('Display the latest activities by the owner of the context where the block is available.') | |
20 | + end | |
21 | + | |
22 | + def help | |
23 | + _('This block lists your latest activities. By default, any user that goes to your profile will be able to see all activities. Configure the "Display to users" option if you don\'t want that.') | |
24 | + end | |
25 | + | |
26 | + def default_title | |
27 | + _('Recent activities') | |
28 | + end | |
29 | + | |
30 | + def api_content | |
31 | + Api::Entities::Activity.represent(activities).as_json | |
32 | + end | |
33 | + | |
34 | + def display_api_content_by_default? | |
35 | + false | |
36 | + end | |
37 | + | |
38 | + def timeout | |
39 | + 4.hours | |
40 | + end | |
41 | + | |
42 | + def self.expire_on | |
43 | + { profile: [:article] } | |
44 | + end | |
45 | +end | ... | ... |
... | ... | @@ -0,0 +1,29 @@ |
1 | +.recent-activities-block ul { | |
2 | + padding: 0; | |
3 | +} | |
4 | + | |
5 | +.recent-activities-block li { | |
6 | + list-style: none; | |
7 | + border-bottom: 1px solid #ccc; | |
8 | +} | |
9 | + | |
10 | +.recent-activities-block time, | |
11 | +.recent-activities-block p { | |
12 | + margin: 10px 0; | |
13 | +} | |
14 | + | |
15 | +.recent-activities-block time { | |
16 | + display: block; | |
17 | + margin-bottom: 10px; | |
18 | + color: #ccc; | |
19 | +} | |
20 | + | |
21 | +.recent-activities-block img { | |
22 | + padding: 1px; | |
23 | + border: 1px solid #ccc; | |
24 | + margin: 3px 3px 0 0; | |
25 | +} | |
26 | + | |
27 | +.recent-activities-block p:first-letter { | |
28 | + text-transform: capitalize | |
29 | +} | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +require_relative '../../../test/test_helper' | ... | ... |
plugins/recent_activities/test/unit/recent_activities_block_test.rb
0 → 100644
... | ... | @@ -0,0 +1,57 @@ |
1 | +require_relative '../test_helper' | |
2 | + | |
3 | +class RecentActivitiesBlockTest < ActiveSupport::TestCase | |
4 | + should 'describe itself' do | |
5 | + assert_not_equal Block.description, RecentActivitiesPlugin::ActivitiesBlock.description | |
6 | + end | |
7 | + | |
8 | + should 'is editable' do | |
9 | + block = RecentActivitiesPlugin::ActivitiesBlock.new | |
10 | + assert block.editable? | |
11 | + end | |
12 | + | |
13 | + should 'return last activities' do | |
14 | + profile = create_user('testuser').person | |
15 | + a1 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) | |
16 | + a2 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) | |
17 | + ProfileActivity.create! profile_id: profile.id, activity: a1 | |
18 | + ProfileActivity.create! profile_id: profile.id, activity: a2 | |
19 | + | |
20 | + block = RecentActivitiesPlugin::ActivitiesBlock.new | |
21 | + block.stubs(:owner).returns(profile) | |
22 | + | |
23 | + assert_equal [a2, a1].map(&:id), block.activities.map(&:id) | |
24 | + end | |
25 | + | |
26 | + should 'return last activities with limit' do | |
27 | + profile = create_user('testuser').person | |
28 | + a1 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) | |
29 | + a2 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) | |
30 | + ProfileActivity.create! profile_id: profile.id, activity: a1 | |
31 | + ProfileActivity.create! profile_id: profile.id, activity: a2 | |
32 | + | |
33 | + block = RecentActivitiesPlugin::ActivitiesBlock.new | |
34 | + block.stubs(:owner).returns(profile) | |
35 | + block.limit = 1 | |
36 | + | |
37 | + assert_equal [a2].map(&:id), block.activities.map(&:id) | |
38 | + end | |
39 | +end | |
40 | + | |
41 | +require 'boxes_helper' | |
42 | + | |
43 | +class RecentActivitiesBlockViewTest < ActionView::TestCase | |
44 | + include BoxesHelper | |
45 | + | |
46 | + should 'return activities in api_content' do | |
47 | + profile = create_user('testuser').person | |
48 | + | |
49 | + a = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) | |
50 | + ProfileActivity.create! profile_id: profile.id, activity: a | |
51 | + | |
52 | + block = RecentActivitiesPlugin::ActivitiesBlock.new | |
53 | + block.stubs(:owner).returns(profile) | |
54 | + | |
55 | + assert_equal [a.id], block.api_content['activities'].map{ |a| a[:id] } | |
56 | + end | |
57 | +end | ... | ... |
plugins/recent_activities/views/blocks/activities.html.erb
0 → 100644
... | ... | @@ -0,0 +1,16 @@ |
1 | +<%= block_title(block.view_title, block.subtitle) %> | |
2 | + | |
3 | +<div class="recent-activities-block"> | |
4 | + <% unless block.activities.size == 0 %> | |
5 | + <ul> | |
6 | + <% block.activities.each do |activity| %> | |
7 | + <li> | |
8 | + <p><%= describe(activity).html_safe %></p> | |
9 | + <time datetime="<%= activity.created_at %>"><%= time_ago_in_words(activity.created_at) %></time> | |
10 | + </li> | |
11 | + <% end %> | |
12 | + </ul> | |
13 | + <% else %> | |
14 | + <div class="recent-activities-block-none"><%= c_('None') %></div> | |
15 | + <% end %> | |
16 | +</div> | ... | ... |
plugins/recent_activities/views/box_organizer/recent_activities_plugin/_activities_block.html.erb
0 → 100644