Commit 739d739dbce9d90434469dc066db8b4dce2ad8cb
Committed by
Antonio Terceiro
1 parent
d3bae473
Exists in
master
and in
29 other branches
ActionItem1160: cant register new community
* set environment when register new community * description duplicated in Community.fields model * remove duplicated code
Showing
12 changed files
with
137 additions
and
34 deletions
Show diff stats
app/controllers/my_profile/memberships_controller.rb
... | ... | @@ -8,9 +8,9 @@ class MembershipsController < MyProfileController |
8 | 8 | |
9 | 9 | def new_community |
10 | 10 | @community = Community.new(params[:community]) |
11 | + @community.environment = environment | |
11 | 12 | @wizard = params[:wizard].blank? ? false : params[:wizard] |
12 | 13 | if request.post? |
13 | - @community.environment = environment | |
14 | 14 | if @community.save |
15 | 15 | @community.add_admin(profile) |
16 | 16 | if @wizard | ... | ... |
app/helpers/application_helper.rb
... | ... | @@ -729,8 +729,16 @@ module ApplicationHelper |
729 | 729 | form_for(name, object, { :builder => NoosferoFormBuilder }.merge(options), &proc) |
730 | 730 | end |
731 | 731 | |
732 | - def optional_field(profile, name, field_html = nil, options = {}, &block) | |
732 | + def optional_field(profile, name, field_html = nil, only_required = false, &block) | |
733 | 733 | result = "" |
734 | + | |
735 | + is_required = false | |
736 | + if profile.required_fields.include?(name) | |
737 | + is_required = true | |
738 | + else | |
739 | + return result if only_required | |
740 | + end | |
741 | + | |
734 | 742 | if block |
735 | 743 | field_html ||= '' |
736 | 744 | field_html += capture(&block) |
... | ... | @@ -744,7 +752,7 @@ module ApplicationHelper |
744 | 752 | result = field_html |
745 | 753 | end |
746 | 754 | end |
747 | - if profile.required_fields.include?(name) | |
755 | + if is_required | |
748 | 756 | result = required(result) |
749 | 757 | end |
750 | 758 | ... | ... |
app/models/community.rb
app/models/environment.rb
... | ... | @@ -339,7 +339,7 @@ class Environment < ActiveRecord::Base |
339 | 339 | end |
340 | 340 | |
341 | 341 | def custom_community_fields=(values) |
342 | - self.settings[:custom_community_fields] = values.delete_if { |key, value| ! Community.fields.include?(key)} | |
342 | + self.settings[:custom_community_fields] = values.delete_if { |key, value| ! Community.fields.include?(key) } | |
343 | 343 | end |
344 | 344 | |
345 | 345 | def custom_community_field(field, status) | ... | ... |
app/views/memberships/new_community.rhtml
... | ... | @@ -10,10 +10,10 @@ |
10 | 10 | |
11 | 11 | <%= required f.text_field(:name, :style => 'width: 100%') %> |
12 | 12 | |
13 | - <%= f.text_area :description, :style => 'width: 100%; height: 150px;' %> | |
14 | - | |
15 | 13 | <%= hidden_field_tag :wizard, params[:wizard] %> |
16 | 14 | |
15 | + <%= render :partial => 'shared/custom_fields', :locals => { :f => f, :object_name => 'community', :profile => @community, :only_required => true } %> | |
16 | + | |
17 | 17 | <%= f.text_field('tag_list', :size => 64) %> |
18 | 18 | <%= content_tag( 'small', _('Separate tags with commas') ) %> |
19 | 19 | ... | ... |
app/views/profile_editor/_community_fields.rhtml
... | ... | @@ -1 +0,0 @@ |
1 | -<%= optional_field(@profile, 'language', f.text_field(:language)) %> |
app/views/profile_editor/_enterprise_fields.rhtml
... | ... | @@ -1,11 +0,0 @@ |
1 | -<%= optional_field(@profile, 'contact_phone', f.text_field(:contact_phone)) %> | |
2 | -<%= optional_field(@profile, 'address', labelled_form_field(_('Address (street and number)'), text_field(:profile_data, :address))) %> | |
3 | - | |
4 | -<%= optional_field(@profile, 'zip_code', labelled_form_field(_('ZIP code'), text_field(:profile_data, :zip_code))) %> | |
5 | -<%= optional_field(@profile, 'city', f.text_field(:city)) %> | |
6 | -<%= optional_field(@profile, 'state', f.text_field(:state)) %> | |
7 | -<%= optional_field(@profile, 'country', select_country(_('Country'), 'profile_data', 'country', {:class => 'type-select'})) %> | |
8 | -<%= optional_field(@profile, 'organization_website', f.text_field(:organization_website)) %> | |
9 | -<%= optional_field(@profile, 'historic_and_current_context', f.text_area(:historic_and_current_context, :rows => 5)) %> | |
10 | -<%= optional_field(@profile, 'activities_short_description', f.text_area(:activities_short_description, :rows => 5)) %> | |
11 | -<%= optional_field(@profile, 'management_information', f.text_area(:management_information, :rows => 5)) %> |
app/views/profile_editor/_organization.rhtml
... | ... | @@ -2,24 +2,12 @@ |
2 | 2 | |
3 | 3 | <%= required_fields_message if @profile.required_fields.any? %> |
4 | 4 | |
5 | -<div class="formfieldline"> | |
6 | - <label class="formlabel" for="profile_data_nickname"><%= _('Display name') %></label> | |
7 | - <div class="formfield type-text"> | |
8 | - <%= text_field_tag 'profile_data[nickname]', @profile_data.nickname, :id => 'profile_data_nickname', :size => 30, :maxlength => 16 %> | |
9 | - <em><%= _('A short name by which the organization is know.')%></em> | |
10 | -</div> | |
11 | - | |
12 | - </div> | |
13 | 5 | <%= f.text_field(:acronym) %> |
14 | 6 | <%= f.text_field(:foundation_year) %> |
15 | - <%= optional_field(@profile, 'contact_person', f.text_field(:contact_person)) %> | |
16 | - <%= optional_field(@profile, 'contact_email', f.text_field(:contact_email)) %> | |
17 | - <%= optional_field(@profile, 'economic_activity', f.text_field(:economic_activity)) %> | |
18 | - <%= optional_field(@profile, 'description', f.text_area(:description, :rows => 5)) if @profile.community? %> | |
7 | + | |
8 | + <%= render :partial => 'shared/custom_fields', :locals => { :f => f, :object_name => 'profile_data', :profile => @profile, :only_required => false } %> | |
9 | + | |
19 | 10 | <%= f.check_box(:enable_contact_us) if @profile.enterprise? %> |
20 | - | |
21 | - <%= render :partial => 'community_fields', :locals => { :f => f } if @profile.community? %> | |
22 | - <%= render :partial => 'enterprise_fields', :locals => { :f => f } if @profile.enterprise? %> | |
23 | 11 | |
24 | 12 | <h1><%= _('Moderation options') %></h1> |
25 | 13 | <div style='margin-bottom: 1em'> | ... | ... |
... | ... | @@ -0,0 +1,23 @@ |
1 | +<% if profile.community? %> | |
2 | + <%= optional_field(profile, 'nickname', labelled_form_field(_('Display name'), text_field(object_name, :nickname) + ' ' + content_tag('em', _('A short name by which the organization is know.'))), only_required) %> | |
3 | + <%= optional_field(profile, 'description', f.text_area(:description, :rows => 5)) %> | |
4 | + <%= optional_field(profile, 'language', f.text_field(:language), only_required) %> | |
5 | +<% end %> | |
6 | + | |
7 | +<%= optional_field(profile, 'contact_person', f.text_field(:contact_person), only_required) %> | |
8 | +<%= optional_field(profile, 'contact_email', f.text_field(:contact_email), only_required) %> | |
9 | +<%= optional_field(profile, 'contact_phone', f.text_field(:contact_phone), only_required) %> | |
10 | +<%= optional_field(profile, 'legal_form', f.text_field(:legal_form), only_required) %> | |
11 | +<%= optional_field(profile, 'economic_activity', f.text_field(:economic_activity), only_required) %> | |
12 | +<%= optional_field(profile, 'management_information', f.text_area(:management_information, :rows => 5), only_required) %> | |
13 | +<%= optional_field(profile, 'address', labelled_form_field(_('Address (street and number)'), text_field(object_name, :address)), only_required) %> | |
14 | + | |
15 | +<% if profile.enterprise? %> | |
16 | + <%= optional_field(profile, 'zip_code', labelled_form_field(_('ZIP code'), text_field(object_name, :zip_code)), only_required) %> | |
17 | + <%= optional_field(profile, 'city', f.text_field(:city), only_required) %> | |
18 | + <%= optional_field(profile, 'state', f.text_field(:state), only_required) %> | |
19 | + <%= optional_field(profile, 'country', select_country(_('Country'), object_name, 'country', {:class => 'type-select'}), only_required) %> | |
20 | + <%= optional_field(profile, 'organization_website', f.text_field(:organization_website), only_required) %> | |
21 | + <%= optional_field(profile, 'historic_and_current_context', f.text_area(:historic_and_current_context, :rows => 5), only_required) %> | |
22 | + <%= optional_field(profile, 'activities_short_description', f.text_area(:activities_short_description, :rows => 5), only_required) %> | |
23 | +<% end %> | ... | ... |
test/functional/memberships_controller_test.rb
... | ... | @@ -187,4 +187,49 @@ class MembershipsControllerTest < Test::Unit::TestCase |
187 | 187 | assert_equal 1, assigns(:community).boxes[0].blocks.size |
188 | 188 | end |
189 | 189 | |
190 | + should 'display only required fields when register new community' do | |
191 | + env = Environment.default | |
192 | + env.custom_community_fields = { | |
193 | + 'contact_email' => {'active' => 'true', 'required' => 'true'}, | |
194 | + 'contact_phone' => {'active' => 'true', 'required' => 'false'} | |
195 | + } | |
196 | + env.save! | |
197 | + | |
198 | + get :new_community, :profile => profile.identifier | |
199 | + | |
200 | + assert_tag :tag => 'input', :attributes => { :name => 'community[contact_email]' } | |
201 | + assert_no_tag :tag => 'input', :attributes => { :name => 'community[contact_phone]' } | |
202 | + end | |
203 | + | |
204 | + should 'display all required fields when register new community' do | |
205 | + env = Environment.default | |
206 | + env.custom_community_fields = { | |
207 | + 'contact_email' => {'active' => 'true', 'required' => 'true'}, | |
208 | + 'contact_phone' => {'active' => 'true', 'required' => 'true'} | |
209 | + } | |
210 | + env.save! | |
211 | + | |
212 | + get :new_community, :profile => profile.identifier | |
213 | + | |
214 | + env.required_community_fields.each do |field| | |
215 | + assert_tag :tag => 'input', :attributes => { :name => "community[#{field}]" } | |
216 | + end | |
217 | + end | |
218 | + | |
219 | + should 'set environment when render new community form' do | |
220 | + get :new_community, :profile => profile.identifier | |
221 | + | |
222 | + assert_not_nil assigns(:community).environment | |
223 | + end | |
224 | + | |
225 | + should 'not show description if isnt enabled when register new community' do | |
226 | + env = Environment.default | |
227 | + env.custom_community_fields = { :description => {:active => 'false', :required => 'false'} } | |
228 | + env.save! | |
229 | + | |
230 | + get :new_community, :profile => profile.identifier | |
231 | + | |
232 | + assert_no_tag :tag => 'textarea', :attributes => {:name => 'community[description]'} | |
233 | + end | |
234 | + | |
190 | 235 | end | ... | ... |
test/functional/profile_editor_controller_test.rb
... | ... | @@ -694,4 +694,49 @@ class ProfileEditorControllerTest < Test::Unit::TestCase |
694 | 694 | assert_template 'edit' |
695 | 695 | end |
696 | 696 | |
697 | + should 'show active fields when edit community' do | |
698 | + env = Environment.default | |
699 | + env.custom_community_fields = { | |
700 | + 'contact_email' => {'active' => 'true', 'required' => 'false'}, | |
701 | + 'contact_phone' => {'active' => 'true', 'required' => 'false'} | |
702 | + } | |
703 | + env.save! | |
704 | + community = Community.create(:name => 'test_profile') | |
705 | + | |
706 | + get :edit, :profile => community.identifier | |
707 | + | |
708 | + community.active_fields.each do |field| | |
709 | + assert_tag :tag => 'input', :attributes => { :name => "profile_data[#{field}]" } | |
710 | + end | |
711 | + end | |
712 | + | |
713 | + should 'not show disabled fields when edit community' do | |
714 | + env = Environment.default | |
715 | + env.custom_community_fields = { | |
716 | + 'contact_email' => {'active' => 'false', 'required' => 'false'}, | |
717 | + 'contact_phone' => {'active' => 'false', 'required' => 'false'} | |
718 | + } | |
719 | + env.save! | |
720 | + community = Community.create(:name => 'test_profile') | |
721 | + | |
722 | + get :edit, :profile => community.identifier | |
723 | + | |
724 | + (Community.fields - community.active_fields).each do |field| | |
725 | + assert_no_tag :tag => 'input', :attributes => { :name => "profile_data[#{field}]" } | |
726 | + end | |
727 | + end | |
728 | + | |
729 | + should 'display nickname field only if active when edit community' do | |
730 | + community = Community.create(:name => 'test_profile') | |
731 | + Environment.any_instance.stubs(:required_community_fields).returns([]) | |
732 | + | |
733 | + Environment.any_instance.stubs(:active_community_fields).returns(['description']) | |
734 | + get :edit, :profile => community.identifier | |
735 | + assert_no_tag :tag => 'input', :attributes => { :name => "profile_data[nickname]" } | |
736 | + | |
737 | + Environment.any_instance.stubs(:active_community_fields).returns(['nickname']) | |
738 | + get :edit, :profile => community.identifier | |
739 | + assert_tag :tag => 'input', :attributes => { :name => "profile_data[nickname]" } | |
740 | + end | |
741 | + | |
697 | 742 | end | ... | ... |
test/unit/application_helper_test.rb
... | ... | @@ -465,6 +465,13 @@ class ApplicationHelperTest < Test::Unit::TestCase |
465 | 465 | assert_equal "@import url(/designs/icons/default/style.css);", icon_theme_stylesheet_tag |
466 | 466 | end |
467 | 467 | |
468 | + should 'not display active field if only required' do | |
469 | + profile = mock | |
470 | + profile.expects(:required_fields).returns([]) | |
471 | + | |
472 | + assert_equal '', optional_field(profile, :field_name, '<html tags>', true) | |
473 | + end | |
474 | + | |
468 | 475 | protected |
469 | 476 | |
470 | 477 | def url_for(args = {}) | ... | ... |