diff --git a/app/helpers/boxes_helper.rb b/app/helpers/boxes_helper.rb
index c8e9457..2b948cd 100644
--- a/app/helpers/boxes_helper.rb
+++ b/app/helpers/boxes_helper.rb
@@ -81,8 +81,8 @@ module BoxesHelper
box_decorator == DontMoveBlocks
end
- def display_block_content(block, main_content = nil)
- content = block.main? ? wrap_main_content(main_content) : block.content
+ def display_block_content(block, person, main_content = nil)
+ content = block.main? ? wrap_main_content(main_content) : block.content({:person => person})
result = extract_block_content(content)
footer_content = extract_block_content(block.footer)
unless footer_content.blank?
diff --git a/app/models/article_block.rb b/app/models/article_block.rb
index dabaa3f..bb802be 100644
--- a/app/models/article_block.rb
+++ b/app/models/article_block.rb
@@ -8,7 +8,7 @@ class ArticleBlock < Block
_('This block displays one of your articles. You can edit the block to select which one of your articles is going to be displayed in the block.')
end
- def content
+ def content(args={})
block = self
lambda do
block_title(block.title) +
diff --git a/app/models/block.rb b/app/models/block.rb
index ca5e19b..cd4378b 100644
--- a/app/models/block.rb
+++ b/app/models/block.rb
@@ -81,7 +81,7 @@ class Block < ActiveRecord::Base
# The method can also return nil, which means "no content".
#
# See BoxesHelper#extract_block_content for implementation details.
- def content
+ def content(args={})
"This is block number %d" % self.id
end
diff --git a/app/models/blog_archives_block.rb b/app/models/blog_archives_block.rb
index 7d04790..814e543 100644
--- a/app/models/blog_archives_block.rb
+++ b/app/models/blog_archives_block.rb
@@ -20,11 +20,15 @@ class BlogArchivesBlock < Block
blog_id && owner.blogs.exists?(blog_id) ? owner.blogs.find(blog_id) : owner.blog
end
- def content
+ def visible_posts(person)
+ blog.posts.native_translations.select {|post| post.display_to?(person)}
+ end
+
+ def content(args={})
owner_blog = self.blog
return nil unless owner_blog
results = ''
- owner_blog.posts.native_translations.group_by {|i| i.published_at.year }.sort_by { |year,count| -year }.each do |year, results_by_year|
+ visible_posts(args[:person]).group_by {|i| i.published_at.year }.sort_by { |year,count| -year }.each do |year, results_by_year|
results << content_tag('li', content_tag('strong', "#{year} (#{results_by_year.size})"))
results << "
"
results_by_year.group_by{|i| [ ('%02d' % i.published_at.month()), gettext(MONTHS[i.published_at.month() - 1])]}.sort.reverse.each do |month, results_by_month|
diff --git a/app/models/categories_block.rb b/app/models/categories_block.rb
index 6c71cd4..9de3b39 100644
--- a/app/models/categories_block.rb
+++ b/app/models/categories_block.rb
@@ -28,7 +28,7 @@ class CategoriesBlock < Block
Category.top_level_for(self.owner).from_types(self.category_types)
end
- def content
+ def content(args={})
block = self
lambda do
render :file => 'blocks/categories', :locals => { :block => block }
diff --git a/app/models/disabled_enterprise_message_block.rb b/app/models/disabled_enterprise_message_block.rb
index 1de47a3..d9882f3 100644
--- a/app/models/disabled_enterprise_message_block.rb
+++ b/app/models/disabled_enterprise_message_block.rb
@@ -12,7 +12,7 @@ class DisabledEnterpriseMessageBlock < Block
_('Message')
end
- def content
+ def content(args={})
message = self.owner.environment.message_for_disabled_enterprise || ''
lambda do
render :file => 'blocks/disabled_enterprise_message', :locals => {:message => message}
diff --git a/app/models/environment_statistics_block.rb b/app/models/environment_statistics_block.rb
index fd8d3b4..598edf7 100644
--- a/app/models/environment_statistics_block.rb
+++ b/app/models/environment_statistics_block.rb
@@ -12,7 +12,7 @@ class EnvironmentStatisticsBlock < Block
_('This block presents some statistics about your environment.')
end
- def content
+ def content(args={})
users = owner.people.visible.count
enterprises = owner.enterprises.visible.count
communities = owner.communities.visible.count
diff --git a/app/models/featured_products_block.rb b/app/models/featured_products_block.rb
index e8dbfd3..c2a6bda 100644
--- a/app/models/featured_products_block.rb
+++ b/app/models/featured_products_block.rb
@@ -25,7 +25,7 @@ class FeaturedProductsBlock < Block
self.owner.highlighted_products_with_image
end
- def content
+ def content(args={})
block = self
lambda do
render :file => 'blocks/featured_products', :locals => { :block => block }
diff --git a/app/models/feed_reader_block.rb b/app/models/feed_reader_block.rb
index 6c2ad76..3ab06ff 100644
--- a/app/models/feed_reader_block.rb
+++ b/app/models/feed_reader_block.rb
@@ -78,7 +78,7 @@ class FeedReaderBlock < Block
self.save!
end
- def content
+ def content(args={})
block_title(title) + formatted_feed_content
end
diff --git a/app/models/highlights_block.rb b/app/models/highlights_block.rb
index 8fa4570..80e6ceb 100644
--- a/app/models/highlights_block.rb
+++ b/app/models/highlights_block.rb
@@ -28,7 +28,7 @@ class HighlightsBlock < Block
shuffle ? block_images.shuffle : block_images
end
- def content
+ def content(args={})
block = self
lambda do
render :file => 'blocks/highlights', :locals => { :block => block }
diff --git a/app/models/link_list_block.rb b/app/models/link_list_block.rb
index 4cb7500..586f844 100644
--- a/app/models/link_list_block.rb
+++ b/app/models/link_list_block.rb
@@ -47,7 +47,7 @@ class LinkListBlock < Block
_('This block can be used to create a menu of links. You can add, remove and update the links as you wish.')
end
- def content
+ def content(args={})
block_title(title) +
content_tag('ul',
links.select{|i| !i[:name].blank? and !i[:address].blank?}.map{|i| content_tag('li', link_html(i))}
diff --git a/app/models/location_block.rb b/app/models/location_block.rb
index bf6f115..5c89300 100644
--- a/app/models/location_block.rb
+++ b/app/models/location_block.rb
@@ -11,7 +11,7 @@ class LocationBlock < Block
_('Shows where the profile is on the material world.')
end
- def content
+ def content(args={})
profile = self.owner
title = self.title
if profile.lat
diff --git a/app/models/login_block.rb b/app/models/login_block.rb
index 9c16390..1ab82da 100644
--- a/app/models/login_block.rb
+++ b/app/models/login_block.rb
@@ -8,7 +8,7 @@ class LoginBlock < Block
_('This block presents a login/logout block.')
end
- def content
+ def content(args={})
lambda do
render :file => 'blocks/login_block'
end
diff --git a/app/models/main_block.rb b/app/models/main_block.rb
index e6e5666..3b2bd10 100644
--- a/app/models/main_block.rb
+++ b/app/models/main_block.rb
@@ -8,7 +8,7 @@ class MainBlock < Block
_('This block presents the main content of your pages.')
end
- def content
+ def content(args={})
nil
end
diff --git a/app/models/my_network_block.rb b/app/models/my_network_block.rb
index 4c63835..4268778 100644
--- a/app/models/my_network_block.rb
+++ b/app/models/my_network_block.rb
@@ -14,7 +14,7 @@ class MyNetworkBlock < Block
_('This block displays some info about your networking.')
end
- def content
+ def content(args={})
block = self
lambda do
render :file => 'blocks/my_network', :locals => {
diff --git a/app/models/products_block.rb b/app/models/products_block.rb
index fb804a9..1b429b8 100644
--- a/app/models/products_block.rb
+++ b/app/models/products_block.rb
@@ -16,7 +16,7 @@ class ProductsBlock < Block
_('This block presents a list of your products.')
end
- def content
+ def content(args={})
block_title(title) +
content_tag(
'ul',
diff --git a/app/models/profile_image_block.rb b/app/models/profile_image_block.rb
index f34c4c6..9599d89 100644
--- a/app/models/profile_image_block.rb
+++ b/app/models/profile_image_block.rb
@@ -10,7 +10,7 @@ class ProfileImageBlock < Block
_('This block presents the profile image')
end
- def content
+ def content(args={})
block = self
s = show_name
lambda do
diff --git a/app/models/profile_info_block.rb b/app/models/profile_info_block.rb
index 6f16380..d558587 100644
--- a/app/models/profile_info_block.rb
+++ b/app/models/profile_info_block.rb
@@ -8,7 +8,7 @@ class ProfileInfoBlock < Block
_('Basic information about %{user}: how long %{user} is part of %{env} and useful links.') % { :user => self.owner.name(), :env => self.owner.environment.name() }
end
- def content
+ def content(args={})
block = self
lambda do
render :file => 'blocks/profile_info', :locals => { :block => block }
diff --git a/app/models/profile_list_block.rb b/app/models/profile_list_block.rb
index 9ad6ee0..102e249 100644
--- a/app/models/profile_list_block.rb
+++ b/app/models/profile_list_block.rb
@@ -37,7 +37,7 @@ class ProfileListBlock < Block
_('Clicking on the people or groups will take you to their home page.')
end
- def content
+ def content(args={})
profiles = self.profile_list
title = self.view_title
nl = "\n"
diff --git a/app/models/profile_search_block.rb b/app/models/profile_search_block.rb
index 41767a6..7e8eba3 100644
--- a/app/models/profile_search_block.rb
+++ b/app/models/profile_search_block.rb
@@ -4,7 +4,7 @@ class ProfileSearchBlock < Block
_('Display a form to search the profile')
end
- def content
+ def content(args={})
title = self.title
lambda do
render :file => 'blocks/profile_search', :locals => { :title => title }
diff --git a/app/models/raw_html_block.rb b/app/models/raw_html_block.rb
index 366c87a..91de1d4 100644
--- a/app/models/raw_html_block.rb
+++ b/app/models/raw_html_block.rb
@@ -6,7 +6,7 @@ class RawHTMLBlock < Block
settings_items :html, :type => :text
- def content
+ def content(args={})
(title.blank? ? '' : block_title(title)) + html.to_s
end
diff --git a/app/models/recent_documents_block.rb b/app/models/recent_documents_block.rb
index aa2dae9..7b3fc7f 100644
--- a/app/models/recent_documents_block.rb
+++ b/app/models/recent_documents_block.rb
@@ -15,7 +15,7 @@ class RecentDocumentsBlock < Block
settings_items :limit, :type => :integer, :default => 5
include ActionController::UrlWriter
- def content
+ def content(args={})
docs = self.limit.nil? ? owner.recent_documents : owner.recent_documents(self.limit)
block_title(title) +
diff --git a/app/models/sellers_search_block.rb b/app/models/sellers_search_block.rb
index f4ec9e7..617ca27 100644
--- a/app/models/sellers_search_block.rb
+++ b/app/models/sellers_search_block.rb
@@ -16,7 +16,7 @@ class SellersSearchBlock < Block
_('This block presents a search engine for products.')
end
- def content
+ def content(args={})
title = self.title
lambda do
render :file => 'search/_sellers_form', :locals => { :title => title }
diff --git a/app/models/slideshow_block.rb b/app/models/slideshow_block.rb
index 29ab012..61eadd4 100644
--- a/app/models/slideshow_block.rb
+++ b/app/models/slideshow_block.rb
@@ -31,7 +31,7 @@ class SlideshowBlock < Block
gallery.images.reject {|item| item.folder?}
end
- def content
+ def content(args={})
block = self
if gallery
images = block_images
diff --git a/app/models/tags_block.rb b/app/models/tags_block.rb
index ef4d093..c034dc6 100644
--- a/app/models/tags_block.rb
+++ b/app/models/tags_block.rb
@@ -19,7 +19,7 @@ class TagsBlock < Block
Try to add some tags to some articles and you'l see your tag cloud growing.")
end
- def content
+ def content(args={})
tags = owner.article_tags
return '' if tags.empty?
diff --git a/app/views/shared/block.rhtml b/app/views/shared/block.rhtml
index fad4f05..0f7c837 100644
--- a/app/views/shared/block.rhtml
+++ b/app/views/shared/block.rhtml
@@ -1,7 +1,7 @@
<% if block.cacheable? && use_cache %>
<% cache_timeout(block.cache_key, block.timeout.from_now) do %>
- <%= display_block_content(block, main_content) %>
+ <%= display_block_content(block, user, main_content) %>
<% end %>
<% else %>
- <%= display_block_content(block, main_content) %>
+ <%= display_block_content(block, user, main_content) %>
<% end %>
diff --git a/test/unit/blog_archives_block_test.rb b/test/unit/blog_archives_block_test.rb
index 0cbf96c..da117de 100644
--- a/test/unit/blog_archives_block_test.rb
+++ b/test/unit/blog_archives_block_test.rb
@@ -157,4 +157,21 @@ class BlogArchivesBlockTest < ActiveSupport::TestCase
end
end
+ should 'not count articles if the user can\'t see them' do
+ person = create_user('testuser').person
+ blog = fast_create(Blog, :profile_id => profile.id, :path => 'blog_path')
+ block = fast_create(BlogArchivesBlock)
+
+ feed = mock()
+ feed.stubs(:url).returns('feed_url')
+ blog.stubs(:feed).returns(feed)
+ block.stubs(:blog).returns(blog)
+ block.stubs(:owner).returns(profile)
+
+ public_post = fast_create(TextileArticle, :profile_id => profile.id, :parent_id => blog.id, :published => true, :published_at => Time.mktime(2012, 'jan'))
+ private_post = fast_create(TextileArticle, :profile_id => profile.id, :parent_id => blog.id, :published => false, :published_at => Time.mktime(2012, 'jan'))
+
+ assert_match /January \(1\)/, block.content({:person => person})
+ assert_match /January \(2\)/, block.content({:person => profile})
+ end
end
--
libgit2 0.21.2