diff --git a/plugins/recent_activities/lib/recent_activities_plugin.rb b/plugins/recent_activities/lib/recent_activities_plugin.rb new file mode 100644 index 0000000..08cfa9d --- /dev/null +++ b/plugins/recent_activities/lib/recent_activities_plugin.rb @@ -0,0 +1,23 @@ +class RecentActivitiesPlugin < Noosfero::Plugin + def self.plugin_name + "RecentActivitiesPlugin" + end + + def self.plugin_description + _("Adds a block that lists recent profile activity.") + end + + def self.extra_blocks + { + RecentActivitiesPlugin::ActivitiesBlock => { type: [Community, Person] } + } + end + + def self.has_admin_url? + false + end + + def stylesheet? + true + end +end diff --git a/plugins/recent_activities/lib/recent_activities_plugin/activities_block.rb b/plugins/recent_activities/lib/recent_activities_plugin/activities_block.rb new file mode 100644 index 0000000..061c952 --- /dev/null +++ b/plugins/recent_activities/lib/recent_activities_plugin/activities_block.rb @@ -0,0 +1,37 @@ +class RecentActivitiesPlugin::ActivitiesBlock < Block + attr_accessible :limit + settings_items :limit, type: :integer, default: 5 + + def view_title + self.default_title + end + + def activities + list = self.limit.nil? ? owner.activities : owner.activities.limit(self.get_limit) + list.map(&:activity) + end + + def extra_option + { } + end + + def self.description + _('Display the latest activities by the owner of the context where the block is available.') + end + + def help + _('This block lists your latest activities.') + end + + def default_title + _('Recent activities') + end + + def api_content + Api::Entities::Activity.represent(activities).as_json + end + + def display_api_content_by_default? + false + end +end diff --git a/plugins/recent_activities/public/style.css b/plugins/recent_activities/public/style.css new file mode 100644 index 0000000..cbea430 --- /dev/null +++ b/plugins/recent_activities/public/style.css @@ -0,0 +1,29 @@ +.recent-activities-block ul { + padding: 0; +} + +.recent-activities-block li { + list-style: none; + border-bottom: 1px solid #ccc; +} + +.recent-activities-block time, +.recent-activities-block p { + margin: 10px 0; +} + +.recent-activities-block time { + display: block; + margin-bottom: 10px; + color: #ccc; +} + +.recent-activities-block img { + padding: 1px; + border: 1px solid #ccc; + margin: 3px 3px 0 0; +} + +.recent-activities-block p:first-letter { + text-transform: capitalize +} diff --git a/plugins/recent_activities/test/test_helper.rb b/plugins/recent_activities/test/test_helper.rb new file mode 100644 index 0000000..70322cf --- /dev/null +++ b/plugins/recent_activities/test/test_helper.rb @@ -0,0 +1 @@ +require_relative '../../../test/test_helper' diff --git a/plugins/recent_activities/test/unit/recent_activities_block_test.rb b/plugins/recent_activities/test/unit/recent_activities_block_test.rb new file mode 100644 index 0000000..cbee012 --- /dev/null +++ b/plugins/recent_activities/test/unit/recent_activities_block_test.rb @@ -0,0 +1,57 @@ +require_relative '../test_helper' + +class RecentActivitiesBlockTest < ActiveSupport::TestCase + should 'describe itself' do + assert_not_equal Block.description, RecentActivitiesPlugin::ActivitiesBlock.description + end + + should 'is editable' do + block = RecentActivitiesPlugin::ActivitiesBlock.new + assert block.editable? + end + + should 'return last activities' do + profile = create_user('testuser').person + a1 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) + a2 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) + ProfileActivity.create! profile_id: profile.id, activity: a1 + ProfileActivity.create! profile_id: profile.id, activity: a2 + + block = RecentActivitiesPlugin::ActivitiesBlock.new + block.stubs(:owner).returns(profile) + + assert_equal [a2, a1].map(&:id), block.activities.map(&:id) + end + + should 'return last activities with limit' do + profile = create_user('testuser').person + a1 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) + a2 = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) + ProfileActivity.create! profile_id: profile.id, activity: a1 + ProfileActivity.create! profile_id: profile.id, activity: a2 + + block = RecentActivitiesPlugin::ActivitiesBlock.new + block.stubs(:owner).returns(profile) + block.limit = 1 + + assert_equal [a2].map(&:id), block.activities.map(&:id) + end +end + +require 'boxes_helper' + +class RecentActivitiesBlockViewTest < ActionView::TestCase + include BoxesHelper + + should 'return activities in api_content' do + profile = create_user('testuser').person + + a = fast_create(ActionTracker::Record, user_id: profile.id, created_at: Time.now, updated_at: Time.now) + ProfileActivity.create! profile_id: profile.id, activity: a + + block = RecentActivitiesPlugin::ActivitiesBlock.new + block.stubs(:owner).returns(profile) + + assert_equal [a.id], block.api_content['activities'].map{ |a| a[:id] } + end +end diff --git a/plugins/recent_activities/views/blocks/activities.html.erb b/plugins/recent_activities/views/blocks/activities.html.erb new file mode 100644 index 0000000..03900e8 --- /dev/null +++ b/plugins/recent_activities/views/blocks/activities.html.erb @@ -0,0 +1,16 @@ +<%= block_title(block.view_title, block.subtitle) %> + +
<%= describe(activity).html_safe %>
+ +