Commit fd26529052b18f50d2db4483a6de41ae524169ef
1 parent
621630ae
Exists in
master
and in
29 other branches
ActionItem591: made new profiles coby articles from templates
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2414 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
7 changed files
with
109 additions
and
69 deletions
Show diff stats
app/models/article.rb
@@ -167,6 +167,16 @@ class Article < ActiveRecord::Base | @@ -167,6 +167,16 @@ class Article < ActiveRecord::Base | ||
167 | profile.public? && public_article | 167 | profile.public? && public_article |
168 | end | 168 | end |
169 | 169 | ||
170 | + def copy(options) | ||
171 | + attrs = attributes.reject! { |key, value| article_attr_blacklist.include?(key) } | ||
172 | + attrs.merge!(options) | ||
173 | + Article.create(attrs) | ||
174 | + end | ||
175 | + | ||
176 | + def article_attr_blacklist | ||
177 | + ['id', 'profile_id', 'parent_id', 'slug', 'path', 'updated_at', 'created_at', 'last_changed_by_id', 'version', 'lock_version', 'type', 'children_count', 'comments_count'] | ||
178 | + end | ||
179 | + | ||
170 | private | 180 | private |
171 | 181 | ||
172 | def sanitize_tag_list | 182 | def sanitize_tag_list |
app/models/profile.rb
@@ -207,7 +207,7 @@ class Profile < ActiveRecord::Base | @@ -207,7 +207,7 @@ class Profile < ActiveRecord::Base | ||
207 | end | 207 | end |
208 | end | 208 | end |
209 | 209 | ||
210 | - # this method should be override to provide the correct template | 210 | + # this method should be overwritten to provide the correct template |
211 | def template | 211 | def template |
212 | nil | 212 | nil |
213 | end | 213 | end |
@@ -325,21 +325,38 @@ class Profile < ActiveRecord::Base | @@ -325,21 +325,38 @@ class Profile < ActiveRecord::Base | ||
325 | 325 | ||
326 | after_create :insert_default_article_set | 326 | after_create :insert_default_article_set |
327 | def insert_default_article_set | 327 | def insert_default_article_set |
328 | - # a default homepage | ||
329 | - hp = default_homepage(:name => _("%s's home page") % self.name, :body => _("<p>This is a default homepage created for %s. It can be changed though the control panel.</p>") % self.name, :advertise => false) | ||
330 | - hp.profile = self | ||
331 | - hp.save! | ||
332 | - self.home_page = hp | ||
333 | - self.save! | ||
334 | - | ||
335 | - # a default rss feed | ||
336 | - feed = RssFeed.new(:name => 'feed') | ||
337 | - self.articles << feed | ||
338 | - | ||
339 | - # a default private folder if public | ||
340 | - if self.public? | ||
341 | - folder = Folder.new(:name => _("Intranet"), :public_article => false) | ||
342 | - self.articles << folder | 328 | + if template |
329 | + copy_articles_from template | ||
330 | + else | ||
331 | + # a default homepage | ||
332 | + hp = default_homepage(:name => _("My home page"), :body => _("<p>This is a default homepage created for me. It can be changed though the control panel.</p>"), :advertise => false) | ||
333 | + hp.profile = self | ||
334 | + hp.save! | ||
335 | + self.home_page = hp | ||
336 | + self.save! | ||
337 | + | ||
338 | + # a default rss feed | ||
339 | + feed = RssFeed.new(:name => 'feed') | ||
340 | + self.articles << feed | ||
341 | + | ||
342 | + # a default private folder if public | ||
343 | + if self.public? | ||
344 | + folder = Folder.new(:name => _("Intranet"), :public_article => false) | ||
345 | + self.articles << folder | ||
346 | + end | ||
347 | + end | ||
348 | + end | ||
349 | + | ||
350 | + def copy_articles_from other | ||
351 | + other.top_level_articles.each do |a| | ||
352 | + copy_article_tree a | ||
353 | + end | ||
354 | + end | ||
355 | + | ||
356 | + def copy_article_tree(article, parent=nil) | ||
357 | + article_copy = article.copy(:profile => self, :parent => parent) | ||
358 | + article.children.each do |a| | ||
359 | + copy_article_tree a, article_copy | ||
343 | end | 360 | end |
344 | end | 361 | end |
345 | 362 |
test/unit/article_test.rb
@@ -414,4 +414,23 @@ class ArticleTest < Test::Unit::TestCase | @@ -414,4 +414,23 @@ class ArticleTest < Test::Unit::TestCase | ||
414 | assert article.display_to?(friend) | 414 | assert article.display_to?(friend) |
415 | end | 415 | end |
416 | 416 | ||
417 | + should 'make a copy of the article as child of it' do | ||
418 | + person = create_user('test_user').person | ||
419 | + a = person.articles.create!(:name => 'test article', :body => 'some text') | ||
420 | + b = a.copy(:parent => a, :profile => a.profile) | ||
421 | + | ||
422 | + assert_includes a.children, b | ||
423 | + assert_equal 'some text', b.body | ||
424 | + end | ||
425 | + | ||
426 | + should 'make a copy of the article to other profile' do | ||
427 | + p1 = create_user('test_user1').person | ||
428 | + p2 = create_user('test_user2').person | ||
429 | + a = p1.articles.create!(:name => 'test article', :body => 'some text') | ||
430 | + b = a.copy(:parent => a, :profile => p2) | ||
431 | + | ||
432 | + assert_includes p2.articles, b | ||
433 | + assert_equal 'some text', b.body | ||
434 | + end | ||
435 | + | ||
417 | end | 436 | end |
test/unit/community_test.rb
@@ -82,24 +82,11 @@ class CommunityTest < Test::Unit::TestCase | @@ -82,24 +82,11 @@ class CommunityTest < Test::Unit::TestCase | ||
82 | assert !RoleAssignment.exists?(i.id) | 82 | assert !RoleAssignment.exists?(i.id) |
83 | end | 83 | end |
84 | end | 84 | end |
85 | - | ||
86 | - should 'copy set of boxes from community template' do | ||
87 | - template = Community.create!(:name => 'test template', :identifier => 'test_template') | ||
88 | - template.boxes.destroy_all | ||
89 | - template.boxes << Box.new | ||
90 | - template.boxes[0].blocks << Block.new | ||
91 | - template.save! | ||
92 | 85 | ||
93 | - env = Environment.create!(:name => 'test_env') | ||
94 | - env.settings[:community_template_id] = template.id | ||
95 | - env.save! | ||
96 | - | ||
97 | - assert_equal template, env.community_template | ||
98 | - | ||
99 | - com = Community.create!(:name => 'test ent', :identifier => 'test_ent', :environment => env) | ||
100 | - | ||
101 | - assert_equal 1, com.boxes.size | ||
102 | - assert_equal 1, com.boxes[0].blocks.size | 86 | + should 'have a community template' do |
87 | + env = Environment.create!(:name => 'test env') | ||
88 | + p = Community.create!(:name => 'test_com', :identifier => 'test_com', :environment => env) | ||
89 | + assert_kind_of Community, p.template | ||
103 | end | 90 | end |
104 | 91 | ||
105 | end | 92 | end |
test/unit/enterprise_test.rb
@@ -205,23 +205,11 @@ class EnterpriseTest < Test::Unit::TestCase | @@ -205,23 +205,11 @@ class EnterpriseTest < Test::Unit::TestCase | ||
205 | assert_not_includes ent.blocks.map(&:class), ProductsBlock | 205 | assert_not_includes ent.blocks.map(&:class), ProductsBlock |
206 | end | 206 | end |
207 | 207 | ||
208 | - should 'copy set of boxes from enterprise template' do | ||
209 | - template = Enterprise.create!(:name => 'test template', :identifier => 'test_template') | ||
210 | - template.boxes.destroy_all | ||
211 | - template.boxes << Box.new | ||
212 | - template.boxes[0].blocks << Block.new | ||
213 | - template.save! | ||
214 | - | ||
215 | - env = Environment.create!(:name => 'test_env') | ||
216 | - env.settings[:enterprise_template_id] = template.id | ||
217 | - env.save! | ||
218 | - | ||
219 | - assert_equal template, env.enterprise_template | ||
220 | - | ||
221 | - ent = Enterprise.create!(:name => 'test ent', :identifier => 'test_ent', :environment => env) | ||
222 | - | ||
223 | - assert_equal 1, ent.boxes.size | ||
224 | - assert_equal 1, ent.boxes[0].blocks.size | 208 | + should 'have a enterprise template' do |
209 | + env = Environment.create!(:name => 'test env') | ||
210 | + p = Enterprise.create!(:name => 'test_com', :identifier => 'test_com', :environment => env) | ||
211 | + assert_kind_of Enterprise, p.template | ||
225 | end | 212 | end |
226 | 213 | ||
214 | + | ||
227 | end | 215 | end |
test/unit/person_test.rb
@@ -279,23 +279,10 @@ class PersonTest < Test::Unit::TestCase | @@ -279,23 +279,10 @@ class PersonTest < Test::Unit::TestCase | ||
279 | assert person.display_info_to?(friend) | 279 | assert person.display_info_to?(friend) |
280 | end | 280 | end |
281 | 281 | ||
282 | - should 'copy set of boxes from person template' do | ||
283 | - template = create_user('test_template').person | ||
284 | - template.boxes.destroy_all | ||
285 | - template.boxes << Box.new | ||
286 | - template.boxes[0].blocks << Block.new | ||
287 | - template.save! | ||
288 | - | ||
289 | - env = Environment.create!(:name => 'test_env') | ||
290 | - env.settings[:person_template_id] = template.id | ||
291 | - env.save! | ||
292 | - | ||
293 | - assert_equal template, env.person_template | ||
294 | - | ||
295 | - person = create_user('test_user', :environment => env).person | ||
296 | - | ||
297 | - assert_equal 1, person.boxes.size | ||
298 | - assert_equal 1, person.boxes[0].blocks.size | 282 | + should 'have a person template' do |
283 | + env = Environment.create!(:name => 'test env') | ||
284 | + p = create_user('test_user', :environment => env).person | ||
285 | + assert_kind_of Person, p.template | ||
299 | end | 286 | end |
300 | - | 287 | + |
301 | end | 288 | end |
test/unit/profile_test.rb
@@ -805,11 +805,43 @@ class ProfileTest < Test::Unit::TestCase | @@ -805,11 +805,43 @@ class ProfileTest < Test::Unit::TestCase | ||
805 | should 'create a initial private folder when a public profile is created' do | 805 | should 'create a initial private folder when a public profile is created' do |
806 | p1 = Profile.create!(:name => 'test profile 1', :identifier => 'test_profile1') | 806 | p1 = Profile.create!(:name => 'test profile 1', :identifier => 'test_profile1') |
807 | p2 = Profile.create!(:name => 'test profile 2', :identifier => 'test_profile2', :public_profile => false) | 807 | p2 = Profile.create!(:name => 'test profile 2', :identifier => 'test_profile2', :public_profile => false) |
808 | - | 808 | + |
809 | assert p1.articles.find(:first, :conditions => {:public_article => false}) | 809 | assert p1.articles.find(:first, :conditions => {:public_article => false}) |
810 | assert !p2.articles.find(:first, :conditions => {:public_article => false}) | 810 | assert !p2.articles.find(:first, :conditions => {:public_article => false}) |
811 | end | 811 | end |
812 | 812 | ||
813 | + should 'copy set of articles from a template' do | ||
814 | + template = create_user('test_template').person | ||
815 | + template.articles.destroy_all | ||
816 | + a1 = template.articles.create(:name => 'some xyz article') | ||
817 | + a2 = template.articles.create(:name => 'some child article', :parent => a1) | ||
818 | + | ||
819 | + Profile.any_instance.stubs(:template).returns(template) | ||
820 | + | ||
821 | + p = Profile.create!(:name => 'test_profile', :identifier => 'test_profile') | ||
822 | + | ||
823 | + assert_equal 1, p.top_level_articles.size | ||
824 | + top_art = p.top_level_articles[0] | ||
825 | + assert_equal 'some xyz article', top_art.name | ||
826 | + assert_equal 1, top_art.children.size | ||
827 | + child_art = top_art.children[0] | ||
828 | + assert_equal 'some child article', child_art.name | ||
829 | + end | ||
830 | + | ||
831 | + should 'copy set of boxes from profile template' do | ||
832 | + template = Profile.create!(:name => 'test template', :identifier => 'test_template') | ||
833 | + template.boxes.destroy_all | ||
834 | + template.boxes << Box.new | ||
835 | + template.boxes[0].blocks << Block.new | ||
836 | + template.save! | ||
837 | + | ||
838 | + Profile.any_instance.stubs(:template).returns(template) | ||
839 | + | ||
840 | + p = Profile.create!(:name => 'test prof', :identifier => 'test_prof') | ||
841 | + | ||
842 | + assert_equal 1, p.boxes.size | ||
843 | + assert_equal 1, p.boxes[0].blocks.size | ||
844 | + end | ||
813 | private | 845 | private |
814 | 846 | ||
815 | def assert_invalid_identifier(id) | 847 | def assert_invalid_identifier(id) |