Commit d27a79ec04bd611e328d30a976bef7c8ad02526f
Committed by
Antonio Terceiro
1 parent
8f09db6a
Exists in
master
and in
29 other branches
Feed articles are listed even in private profiles
The access to the feed must be controlled by the content viewer access logic, not by the feed. P.S.: I'm not pretty sure if my solution have performance issues! (ActionItem1619)
Showing
3 changed files
with
32 additions
and
4 deletions
Show diff stats
app/models/profile.rb
... | ... | @@ -332,6 +332,16 @@ class Profile < ActiveRecord::Base |
332 | 332 | self.articles.recent(limit, options) |
333 | 333 | end |
334 | 334 | |
335 | + def last_articles(limit = 10, options = {}) | |
336 | + options = { :limit => limit, | |
337 | + :conditions => ["advertise = ? AND published = ? AND | |
338 | + ((articles.type != ? and articles.type != ? and articles.type != ?) OR | |
339 | + articles.type is NULL)", | |
340 | + true, true, 'UploadedFile', 'RssFeed', 'Blog'], | |
341 | + :order => 'articles.published_at desc, articles.id desc' }.merge(options) | |
342 | + self.articles.find(:all, options) | |
343 | + end | |
344 | + | |
335 | 345 | class << self |
336 | 346 | |
337 | 347 | # finds a profile by its identifier. This method is a shortcut to | ... | ... |
app/models/rss_feed.rb
test/unit/rss_feed_test.rb
... | ... | @@ -58,7 +58,7 @@ class RssFeedTest < Test::Unit::TestCase |
58 | 58 | feed = RssFeed.new |
59 | 59 | feed.expects(:profile).returns(profile).at_least_once |
60 | 60 | array = [] |
61 | - profile.expects(:recent_documents).returns(array) | |
61 | + profile.expects(:last_articles).returns(array) | |
62 | 62 | feed.data |
63 | 63 | end |
64 | 64 | |
... | ... | @@ -150,11 +150,11 @@ class RssFeedTest < Test::Unit::TestCase |
150 | 150 | feed.profile = profile |
151 | 151 | feed.save! |
152 | 152 | |
153 | - feed.profile.expects(:recent_documents).with(10).returns([]).once | |
153 | + feed.profile.expects(:last_articles).with(10).returns([]).once | |
154 | 154 | feed.data |
155 | 155 | |
156 | 156 | feed.limit = 5 |
157 | - feed.profile.expects(:recent_documents).with(5).returns([]).once | |
157 | + feed.profile.expects(:last_articles).with(5).returns([]).once | |
158 | 158 | feed.data |
159 | 159 | end |
160 | 160 | |
... | ... | @@ -218,4 +218,22 @@ class RssFeedTest < Test::Unit::TestCase |
218 | 218 | assert_match published_article.to_html, feed.data |
219 | 219 | end |
220 | 220 | |
221 | + should 'display articles even within a private profile' do | |
222 | + profile = create_user('testuser').person | |
223 | + profile.public_profile = false | |
224 | + profile.save! | |
225 | + a1 = profile.articles.build(:name => 'article 1'); a1.save! | |
226 | + a2 = profile.articles.build(:name => 'article 2'); a2.save! | |
227 | + a3 = profile.articles.build(:name => 'article 3'); a3.save! | |
228 | + | |
229 | + feed = RssFeed.new(:name => 'testfeed') | |
230 | + feed.profile = profile | |
231 | + feed.save! | |
232 | + | |
233 | + rss = feed.data | |
234 | + assert_match /<item><title>article 1<\/title>/, rss | |
235 | + assert_match /<item><title>article 2<\/title>/, rss | |
236 | + assert_match /<item><title>article 3<\/title>/, rss | |
237 | + end | |
238 | + | |
221 | 239 | end | ... | ... |