Commit fdf61a5a17b7b5bd0cfefcd349f780809a4eca98
Committed by
Daniela Feitosa
1 parent
0d563e00
Exists in
master
and in
28 other branches
[multiple-templates] Adding templates field and relations to profile
(ActionItem2378)
Showing
12 changed files
with
118 additions
and
14 deletions
Show diff stats
app/models/community.rb
app/models/enterprise.rb
... | ... | @@ -154,13 +154,14 @@ class Enterprise < Organization |
154 | 154 | true |
155 | 155 | end |
156 | 156 | |
157 | - def template | |
158 | - if enabled? | |
159 | - environment.enterprise_template | |
160 | - else | |
161 | - environment.inactive_enterprise_template | |
162 | - end | |
157 | + def default_template | |
158 | + environment.enterprise_template | |
159 | + end | |
160 | + | |
161 | + def template_with_inactive_enterprise | |
162 | + !enabled? ? environment.inactive_enterprise_template : template_without_inactive_enterprise | |
163 | 163 | end |
164 | + alias_method_chain :template, :inactive_enterprise | |
164 | 165 | |
165 | 166 | def control_panel_settings_button |
166 | 167 | {:title => __('Enterprise Info and settings'), :icon => 'edit-profile-enterprise'} | ... | ... |
app/models/environment.rb
... | ... | @@ -719,12 +719,12 @@ class Environment < ActiveRecord::Base |
719 | 719 | |
720 | 720 | def create_templates |
721 | 721 | pre = self.name.to_slug + '_' |
722 | - ent_id = Enterprise.create!(:name => 'Enterprise template', :identifier => pre + 'enterprise_template', :environment => self, :visible => false).id | |
723 | - inactive_enterprise_tmpl = Enterprise.create!(:name => 'Inactive Enterprise template', :identifier => pre + 'inactive_enterprise_template', :environment => self, :visible => false) | |
724 | - com_id = Community.create!(:name => 'Community template', :identifier => pre + 'community_template', :environment => self, :visible => false).id | |
722 | + ent_id = Enterprise.create!(:name => 'Enterprise template', :identifier => pre + 'enterprise_template', :environment => self, :visible => false, :is_template => true).id | |
723 | + inactive_enterprise_tmpl = Enterprise.create!(:name => 'Inactive Enterprise template', :identifier => pre + 'inactive_enterprise_template', :environment => self, :visible => false, :is_template => true) | |
724 | + com_id = Community.create!(:name => 'Community template', :identifier => pre + 'community_template', :environment => self, :visible => false, :is_template => true).id | |
725 | 725 | pass = Digest::MD5.hexdigest rand.to_s |
726 | 726 | user = User.create!(:login => (pre + 'person_template'), :email => (pre + 'template@template.noo'), :password => pass, :password_confirmation => pass, :environment => self).person |
727 | - user.update_attributes(:visible => false, :name => "Person template") | |
727 | + user.update_attributes(:visible => false, :name => "Person template", :is_template => true) | |
728 | 728 | usr_id = user.id |
729 | 729 | self.settings[:enterprise_template_id] = ent_id |
730 | 730 | self.inactive_enterprise_template = inactive_enterprise_tmpl | ... | ... |
app/models/organization.rb
app/models/person.rb
app/models/profile.rb
... | ... | @@ -65,6 +65,7 @@ class Profile < ActiveRecord::Base |
65 | 65 | #FIXME: these will work only if the subclass is already loaded |
66 | 66 | named_scope :enterprises, lambda { {:conditions => (Enterprise.send(:subclasses).map(&:name) << 'Enterprise').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} } |
67 | 67 | named_scope :communities, lambda { {:conditions => (Community.send(:subclasses).map(&:name) << 'Community').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} } |
68 | + named_scope :templates, :conditions => {:is_template => true} | |
68 | 69 | |
69 | 70 | def members |
70 | 71 | Person.members_of(self) |
... | ... | @@ -98,6 +99,7 @@ class Profile < ActiveRecord::Base |
98 | 99 | has_many :action_tracker_notifications, :foreign_key => 'profile_id' |
99 | 100 | has_many :tracked_notifications, :through => :action_tracker_notifications, :source => :action_tracker, :order => 'updated_at DESC' |
100 | 101 | has_many :scraps_received, :class_name => 'Scrap', :foreign_key => :receiver_id, :order => "updated_at DESC", :dependent => :destroy |
102 | + belongs_to :template, :class_name => 'Profile', :foreign_key => 'template_id' | |
101 | 103 | |
102 | 104 | # FIXME ugly workaround |
103 | 105 | def self.human_attribute_name(attrib) |
... | ... | @@ -274,8 +276,14 @@ class Profile < ActiveRecord::Base |
274 | 276 | validates_format_of :identifier, :with => IDENTIFIER_FORMAT, :if => lambda { |profile| !profile.identifier.blank? } |
275 | 277 | validates_exclusion_of :identifier, :in => RESERVED_IDENTIFIERS |
276 | 278 | validates_uniqueness_of :identifier, :scope => :environment_id |
277 | - | |
278 | 279 | validates_length_of :nickname, :maximum => 16, :allow_nil => true |
280 | + validate :valid_template | |
281 | + | |
282 | + def valid_template | |
283 | + if template_id.present? and !template.is_template | |
284 | + errors.add(:template, _('%{fn} is not a template.').fix_i18n) | |
285 | + end | |
286 | + end | |
279 | 287 | |
280 | 288 | before_create :set_default_environment |
281 | 289 | def set_default_environment |
... | ... | @@ -322,10 +330,15 @@ class Profile < ActiveRecord::Base |
322 | 330 | end |
323 | 331 | |
324 | 332 | # this method should be overwritten to provide the correct template |
325 | - def template | |
333 | + def default_template | |
326 | 334 | nil |
327 | 335 | end |
328 | 336 | |
337 | + def template_with_default | |
338 | + template_without_default || default_template | |
339 | + end | |
340 | + alias_method_chain :template, :default | |
341 | + | |
329 | 342 | def apply_template(template, options = {:copy_articles => true}) |
330 | 343 | copy_blocks_from(template) |
331 | 344 | copy_articles_from(template) if options[:copy_articles] | ... | ... |
db/migrate/20120710033223_add_template_and_is_template_fields.rb
0 → 100644
... | ... | @@ -0,0 +1,11 @@ |
1 | +class AddTemplateAndIsTemplateFields < ActiveRecord::Migration | |
2 | + def self.up | |
3 | + add_column :profiles, :is_template, :boolean, :default => false | |
4 | + add_column :profiles, :template_id, :integer | |
5 | + end | |
6 | + | |
7 | + def self.down | |
8 | + remove_column :profiles, :is_template | |
9 | + remove_column :profiles, :template_id | |
10 | + end | |
11 | +end | ... | ... |
db/migrate/20120710062802_fill_is_template_field_on_basic_templates.rb
0 → 100644
test/unit/community_test.rb
... | ... | @@ -85,6 +85,12 @@ class CommunityTest < ActiveSupport::TestCase |
85 | 85 | end |
86 | 86 | |
87 | 87 | should 'have a community template' do |
88 | + template = fast_create(Community, :is_template => true) | |
89 | + p = Community.create!(:name => 'test_com', :identifier => 'test_com', :template => template) | |
90 | + assert_equal template, p.template | |
91 | + end | |
92 | + | |
93 | + should 'have a default community template' do | |
88 | 94 | env = Environment.create!(:name => 'test env') |
89 | 95 | p = Community.create!(:name => 'test_com', :identifier => 'test_com', :environment => env) |
90 | 96 | assert_kind_of Community, p.template | ... | ... |
test/unit/enterprise_test.rb
... | ... | @@ -278,11 +278,30 @@ class EnterpriseTest < ActiveSupport::TestCase |
278 | 278 | end |
279 | 279 | |
280 | 280 | should 'have a enterprise template' do |
281 | + template = fast_create(Enterprise, :is_template => true) | |
282 | + p = fast_create(Enterprise, :name => 'test_com', :identifier => 'test_com', :template_id => template.id) | |
283 | + assert_equal template, p.template | |
284 | + end | |
285 | + | |
286 | + should 'have a default enterprise template' do | |
281 | 287 | env = Environment.create!(:name => 'test env') |
282 | 288 | p = fast_create(Enterprise, :name => 'test_com', :identifier => 'test_com', :environment_id => env.id) |
283 | 289 | assert_kind_of Enterprise, p.template |
284 | 290 | end |
285 | 291 | |
292 | + should 'have inactive_template even when there is a template set' do | |
293 | + another_template = fast_create(Enterprise, :is_template => true) | |
294 | + inactive_template = fast_create(Enterprise, :name => 'inactive enteprise template', :identifier => 'inactive_enterprise_template', :is_template => true) | |
295 | + | |
296 | + e = Environment.default | |
297 | + e.enable('enterprises_are_disabled_when_created') | |
298 | + e.inactive_enterprise_template = inactive_template | |
299 | + e.save! | |
300 | + | |
301 | + ent = Enterprise.create!(:name => 'test enteprise', :identifier => 'test_ent', :template => another_template, :environment => e) | |
302 | + assert_equal inactive_template, ent.template | |
303 | + end | |
304 | + | |
286 | 305 | should 'contact us enabled by default' do |
287 | 306 | e = fast_create(Enterprise, :name => 'test_com', :identifier => 'test_com', :environment_id => Environment.default.id) |
288 | 307 | assert e.enable_contact_us | ... | ... |
test/unit/person_test.rb
... | ... | @@ -357,6 +357,14 @@ class PersonTest < ActiveSupport::TestCase |
357 | 357 | end |
358 | 358 | |
359 | 359 | should 'have a person template' do |
360 | + template = fast_create(Person, :is_template => true) | |
361 | + p = create_user('test_user').person | |
362 | + p.template_id = template.id | |
363 | + p.save! | |
364 | + assert_equal template, p.template | |
365 | + end | |
366 | + | |
367 | + should 'have a default person template' do | |
360 | 368 | env = Environment.create!(:name => 'test env') |
361 | 369 | p = create_user('test_user', :environment => env).person |
362 | 370 | assert_kind_of Person, p.template | ... | ... |
test/unit/profile_test.rb
... | ... | @@ -1410,6 +1410,42 @@ class ProfileTest < ActiveSupport::TestCase |
1410 | 1410 | assert_equal "header customized", person.custom_header |
1411 | 1411 | end |
1412 | 1412 | |
1413 | + should 'not have a profile as a template if it is not defined as a template' do | |
1414 | + template = fast_create(Profile) | |
1415 | + profile = Profile.new(:template => template) | |
1416 | + !profile.valid? | |
1417 | + assert profile.errors.invalid?(:template) | |
1418 | + | |
1419 | + template.is_template = true | |
1420 | + template.save! | |
1421 | + profile.valid? | |
1422 | + assert !profile.errors.invalid?(:template) | |
1423 | + end | |
1424 | + | |
1425 | + should 'be able to have a template' do | |
1426 | + template = fast_create(Profile, :is_template => true) | |
1427 | + profile = fast_create(Profile, :template_id => template.id) | |
1428 | + assert_equal template, profile.template | |
1429 | + end | |
1430 | + | |
1431 | + should 'have a default template' do | |
1432 | + template = fast_create(Profile, :is_template => true) | |
1433 | + profile = fast_create(Profile) | |
1434 | + profile.stubs(:default_template).returns(template) | |
1435 | + | |
1436 | + assert_equal template, profile.template | |
1437 | + end | |
1438 | + | |
1439 | + should 'return a list of templates' do | |
1440 | + t1 = fast_create(Profile, :is_template => true) | |
1441 | + t2 = fast_create(Profile, :is_template => true) | |
1442 | + profile = fast_create(Profile) | |
1443 | + | |
1444 | + assert_includes Profile.templates, t1 | |
1445 | + assert_includes Profile.templates, t2 | |
1446 | + assert_not_includes Profile.templates, profile | |
1447 | + end | |
1448 | + | |
1413 | 1449 | should 'provide URL to leave' do |
1414 | 1450 | profile = build(Profile, :identifier => 'testprofile') |
1415 | 1451 | assert_equal({ :profile => 'testprofile', :controller => 'profile', :action => 'leave', :reload => false}, profile.leave_url) | ... | ... |