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 | 167 | profile.public? && public_article |
| 168 | 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 | 180 | private |
| 171 | 181 | |
| 172 | 182 | def sanitize_tag_list | ... | ... |
app/models/profile.rb
| ... | ... | @@ -207,7 +207,7 @@ class Profile < ActiveRecord::Base |
| 207 | 207 | end |
| 208 | 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 | 211 | def template |
| 212 | 212 | nil |
| 213 | 213 | end |
| ... | ... | @@ -325,21 +325,38 @@ class Profile < ActiveRecord::Base |
| 325 | 325 | |
| 326 | 326 | after_create :insert_default_article_set |
| 327 | 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 | 360 | end |
| 344 | 361 | end |
| 345 | 362 | ... | ... |
test/unit/article_test.rb
| ... | ... | @@ -414,4 +414,23 @@ class ArticleTest < Test::Unit::TestCase |
| 414 | 414 | assert article.display_to?(friend) |
| 415 | 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 | 436 | end | ... | ... |
test/unit/community_test.rb
| ... | ... | @@ -82,24 +82,11 @@ class CommunityTest < Test::Unit::TestCase |
| 82 | 82 | assert !RoleAssignment.exists?(i.id) |
| 83 | 83 | end |
| 84 | 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 | 90 | end |
| 104 | 91 | |
| 105 | 92 | end | ... | ... |
test/unit/enterprise_test.rb
| ... | ... | @@ -205,23 +205,11 @@ class EnterpriseTest < Test::Unit::TestCase |
| 205 | 205 | assert_not_includes ent.blocks.map(&:class), ProductsBlock |
| 206 | 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 | 212 | end |
| 226 | 213 | |
| 214 | + | |
| 227 | 215 | end | ... | ... |
test/unit/person_test.rb
| ... | ... | @@ -279,23 +279,10 @@ class PersonTest < Test::Unit::TestCase |
| 279 | 279 | assert person.display_info_to?(friend) |
| 280 | 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 | 286 | end |
| 300 | - | |
| 287 | + | |
| 301 | 288 | end | ... | ... |
test/unit/profile_test.rb
| ... | ... | @@ -805,11 +805,43 @@ class ProfileTest < Test::Unit::TestCase |
| 805 | 805 | should 'create a initial private folder when a public profile is created' do |
| 806 | 806 | p1 = Profile.create!(:name => 'test profile 1', :identifier => 'test_profile1') |
| 807 | 807 | p2 = Profile.create!(:name => 'test profile 2', :identifier => 'test_profile2', :public_profile => false) |
| 808 | - | |
| 808 | + | |
| 809 | 809 | assert p1.articles.find(:first, :conditions => {:public_article => false}) |
| 810 | 810 | assert !p2.articles.find(:first, :conditions => {:public_article => false}) |
| 811 | 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 | 845 | private |
| 814 | 846 | |
| 815 | 847 | def assert_invalid_identifier(id) | ... | ... |