Commit d50d9438612fa07c6a5326cf5c72bd31f0162e14
1 parent
3193dfa1
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
bug fixes
Showing
7 changed files
with
137 additions
and
112 deletions
Show diff stats
app/helpers/application_helper.rb
@@ -1301,11 +1301,23 @@ module ApplicationHelper | @@ -1301,11 +1301,23 @@ module ApplicationHelper | ||
1301 | end | 1301 | end |
1302 | 1302 | ||
1303 | def template_options(kind, field_name) | 1303 | def template_options(kind, field_name) |
1304 | - templates = environment.send(kind).templates | 1304 | + templates = environment.send(kind).templates.order('name') |
1305 | return '' if templates.count == 0 | 1305 | return '' if templates.count == 0 |
1306 | - return hidden_field_tag("#{field_name}[template_id]", templates.first.id) if templates.count == 1 | ||
1307 | - options = options_for_select(templates.collect{ |template| [template.name, template.id]}) | ||
1308 | - content_tag('div', content_tag('label', _('Profile organization'), :class => 'formlabel') + (select_tag 'profile_data[template_id]', options, :onchange => 'show_fields_for_template(this);')) | 1306 | + if templates.count == 1 |
1307 | + if templates.first.custom_fields == {} | ||
1308 | + return hidden_field_tag("#{field_name}[template_id]", templates.first.id) | ||
1309 | + else | ||
1310 | + custom_fields = "" | ||
1311 | + templates.first.custom_fields.each { |field, value| | ||
1312 | + custom_fields += content_tag('div', content_tag('label', value[:title].capitalize, :class => 'formlabel') + | ||
1313 | + content_tag('div', text_field_tag( "profile_data[custom_fields][#{field}][title]", ''), :class => 'formfield type-text'), :class => "formfieldline" ) if value[:signup] == 'on' | ||
1314 | + } | ||
1315 | + content_tag('div', custom_fields) | ||
1316 | + end | ||
1317 | + else | ||
1318 | + options = options_for_select(templates.collect{ |template| [template.name, template.id]}) | ||
1319 | + content_tag('div', content_tag('label', _('Profile organization'), :class => 'formlabel') + (select_tag 'profile_data[template_id]', options, :onchange => 'show_fields_for_template(this);')) | ||
1320 | + end | ||
1309 | end | 1321 | end |
1310 | 1322 | ||
1311 | def expirable_content_reference(content, action, text, url, options = {}) | 1323 | def expirable_content_reference(content, action, text, url, options = {}) |
app/models/profile.rb
@@ -26,7 +26,11 @@ class Profile < ActiveRecord::Base | @@ -26,7 +26,11 @@ class Profile < ActiveRecord::Base | ||
26 | settings_items :custom_fields, :default => {} | 26 | settings_items :custom_fields, :default => {} |
27 | 27 | ||
28 | def custom_field_value(field) | 28 | def custom_field_value(field) |
29 | - self.custom_fields[field][:value] | 29 | + if !self.custom_fields.blank? |
30 | + self.custom_fields[field][:value] | ||
31 | + else | ||
32 | + '' | ||
33 | + end | ||
30 | end | 34 | end |
31 | 35 | ||
32 | def custom_field_title(field) | 36 | def custom_field_title(field) |
app/views/account/_signup_form.html.erb
@@ -103,41 +103,9 @@ | @@ -103,41 +103,9 @@ | ||
103 | 103 | ||
104 | <div id="signup-form-profile"> | 104 | <div id="signup-form-profile"> |
105 | 105 | ||
106 | - <script> | ||
107 | - function show_fields_for_template(element) { | ||
108 | - jQuery('div#signup-form-profile div.formfieldline').remove(); | ||
109 | - var selected_template = element.options[element.selectedIndex].value; | ||
110 | - jQuery.ajax({ | ||
111 | - type: "GET", | ||
112 | - url: "<%= url_for :controller=>'account', :action=>'custom_fields_for_template' %>", | ||
113 | - dataType: 'json', | ||
114 | - data: { template_id : selected_template }, | ||
115 | - success: function(data) { | ||
116 | - if (data.ok) { | ||
117 | - data.custom_fields.each(function(field) { | ||
118 | - html = '<div class="formfieldline">' + | ||
119 | - '<label class="formlabel" for="profile_data_custom_fields_{#CUSTOM_FIELD_ID#}">{#CUSTOM_FIELD_NAME#}</label>' + | ||
120 | - '<input type="hidden" name="profile_data[custom_fields][{#CUSTOM_FIELD_ID#}][title]" id="profile_data_custom_fields_{#CUSTOM_FIELD_ID#}_title" value="{#CUSTOM_FIELD_NAME#}" />' + | ||
121 | - '<div class="formfield type-text">' + | ||
122 | - '<input type="text" name="profile_data[custom_fields][{#CUSTOM_FIELD_ID#}][value]" id="profile_data_custom_fields_{#CUSTOM_FIELD_ID#}_value" />' + | ||
123 | - '</div>' + | ||
124 | - '</div>'; | ||
125 | - | ||
126 | - html = html.replace( /{#CUSTOM_FIELD_ID#}/g, field.name ); | ||
127 | - html = html.replace( /{#CUSTOM_FIELD_NAME#}/g, field.title ); | ||
128 | - jQuery('div#signup-form-profile').append(html); | ||
129 | - }); | ||
130 | - }; | ||
131 | - } | ||
132 | - }); | ||
133 | - } | ||
134 | - </script> | ||
135 | - | ||
136 | - <%= template_options(:people, 'profile_data') %> | ||
137 | - | ||
138 | - <%#= labelled_fields_for :profile_data, @person do |f| %> | ||
139 | - <%#= render :partial => 'profile_editor/person_form', :locals => {:f => f} %> | ||
140 | - <%# end %> | 106 | + <%= labelled_fields_for :profile_data, @person do |f| %> |
107 | + <%= render :partial => 'profile_editor/person_form', :locals => {:f => f} %> | ||
108 | + <% end %> | ||
141 | 109 | ||
142 | <%= @plugins.dispatch(:signup_extra_contents).collect { |content| instance_eval(&content) }.join("") %> | 110 | <%= @plugins.dispatch(:signup_extra_contents).collect { |content| instance_eval(&content) }.join("") %> |
143 | 111 | ||
@@ -155,6 +123,11 @@ | @@ -155,6 +123,11 @@ | ||
155 | <% end %> | 123 | <% end %> |
156 | </div> | 124 | </div> |
157 | 125 | ||
126 | +<div id="signup-form-custom-fields"> | ||
127 | + <%= javascript_include_tag "manage-custom-fields" %> | ||
128 | + <%= template_options(:people, 'profile_data') %> | ||
129 | +</div> | ||
130 | + | ||
158 | <%= recaptcha_tags :ajax => true, :display => {:theme => 'clean'} if @block_bot %> | 131 | <%= recaptcha_tags :ajax => true, :display => {:theme => 'clean'} if @block_bot %> |
159 | 132 | ||
160 | <p style="text-align: center"> | 133 | <p style="text-align: center"> |
app/views/profile_editor/_person.html.erb
@@ -20,6 +20,8 @@ | @@ -20,6 +20,8 @@ | ||
20 | 20 | ||
21 | <%= render :partial => 'person_form', :locals => {:f => f} %> | 21 | <%= render :partial => 'person_form', :locals => {:f => f} %> |
22 | 22 | ||
23 | + <%= render :partial => 'person_form_custom_fields', :locals => {:f => f} %> | ||
24 | + | ||
23 | <h2><%= _('Notification options') %></h2> | 25 | <h2><%= _('Notification options') %></h2> |
24 | <div> | 26 | <div> |
25 | <%= select_tag 'profile_data[notification_time]', options_for_select([[_('Disabled'), 0], [_('Hourly'), 1], [_('Half Day'), 12], [_('Daily'), 24]], @profile.notification_time) %> | 27 | <%= select_tag 'profile_data[notification_time]', options_for_select([[_('Disabled'), 0], [_('Hourly'), 1], [_('Half Day'), 12], [_('Daily'), 24]], @profile.notification_time) %> |
app/views/profile_editor/_person_form.html.erb
@@ -64,74 +64,3 @@ | @@ -64,74 +64,3 @@ | ||
64 | <%= optional_field(@person, 'professional_activity', f.text_field(:professional_activity, :rel => _('Professional activity'))) %> | 64 | <%= optional_field(@person, 'professional_activity', f.text_field(:professional_activity, :rel => _('Professional activity'))) %> |
65 | <%= optional_field(@person, 'organization', f.text_field(:organization, :rel => _('Organization'))) %> | 65 | <%= optional_field(@person, 'organization', f.text_field(:organization, :rel => _('Organization'))) %> |
66 | <%= optional_field(@person, 'organization_website', f.text_field(:organization_website, :rel => _('Organization website'))) %> | 66 | <%= optional_field(@person, 'organization_website', f.text_field(:organization_website, :rel => _('Organization website'))) %> |
67 | - | ||
68 | -<br /> | ||
69 | - | ||
70 | -<div id="custom-fields-container"> | ||
71 | - | ||
72 | - <h2><%= _('Custom fields') %></h2> | ||
73 | - | ||
74 | - <% if @person.is_template? %> | ||
75 | - | ||
76 | - <%= javascript_include_tag "manage-custom-fields.js" %> | ||
77 | - | ||
78 | - <table border="0" style="display: none;"> | ||
79 | - <tr> | ||
80 | - <th align="left"><%= _('Field name') %></th> | ||
81 | - <th><%= _('Display on signup?') %></th> | ||
82 | - <th> </th> | ||
83 | - </tr> | ||
84 | - | ||
85 | - <% @person.custom_fields.each { |field,value| %> | ||
86 | - <tr> | ||
87 | - <td> | ||
88 | - <%= text_field_tag( "profile_data[custom_fields][#{field}][title]", value[:title], :style => "display:block") %> | ||
89 | - </td> | ||
90 | - <td align="center"> | ||
91 | - <%= check_box_tag "profile_data[custom_fields][#{field}][signup]", value['signup'], value['signup'], :onclick => "signup_action('profile_data[custom_fields][#{field}][active]','profile_data[custom_fields][#{field}][required]', 'profile_data[custom_fields][#{field}][signup]')" %> | ||
92 | - </td> | ||
93 | - <td align="center"> | ||
94 | - <%= link_to content_tag(:span, _('Delete')), '#', onclick: "return remove_custom_field(this);", title: "Delete", class: "button icon-delete" %> | ||
95 | - </td> | ||
96 | - </tr> | ||
97 | - <% } %> | ||
98 | - | ||
99 | - </table> | ||
100 | - | ||
101 | - <% if @person.custom_fields.length > 0 %> | ||
102 | - <script> | ||
103 | - jQuery('#custom-fields-container table').css('display', 'table'); | ||
104 | - </script> | ||
105 | - <% end %> | ||
106 | - | ||
107 | - <span> | ||
108 | - <%= link_to_function(_('Add field'), "add_new_field('person');", :class => 'button icon-add with-text') %> | ||
109 | - </span> | ||
110 | - | ||
111 | - <% else %> | ||
112 | - | ||
113 | - <% @person.custom_fields_template.each { |field,value| %> | ||
114 | - | ||
115 | - <div class="field-with-privacy-selector"> | ||
116 | - <div class="formfieldline"> | ||
117 | - | ||
118 | - <span style="display: block;"> | ||
119 | - <%= label_tag @person.custom_fields_template_title(field) %> | ||
120 | - </span> | ||
121 | - | ||
122 | - <div class="formfield type-text" style="display: inline-block;"> | ||
123 | - <%= hidden_field_tag "profile_data[custom_fields][#{field}[title]", @person.custom_fields_template_title(field) %> | ||
124 | - <%= text_field_tag( "profile_data[custom_fields][#{field}][value]", @person.custom_field_value(field), :size => 30 ) %> | ||
125 | - </div> | ||
126 | - | ||
127 | - </div> | ||
128 | - | ||
129 | - <%= profile_field_privacy_selector @person, field %> | ||
130 | - | ||
131 | - </div> | ||
132 | - | ||
133 | - <% } %> | ||
134 | - | ||
135 | - <% end %> | ||
136 | - | ||
137 | -</div> |
app/views/profile_editor/_person_form_custom_fields.html.erb
0 → 100644
@@ -0,0 +1,76 @@ | @@ -0,0 +1,76 @@ | ||
1 | +<% @person ||= @profile %> | ||
2 | + | ||
3 | +<% if @person.custom_fields_template != {} || @person.is_template? %> | ||
4 | + | ||
5 | +<br /> | ||
6 | + | ||
7 | +<div id="custom-fields-container"> | ||
8 | + | ||
9 | + <h2><%= _('Custom fields') %></h2> | ||
10 | + | ||
11 | + <% if @person.is_template? %> | ||
12 | + | ||
13 | + <%= javascript_include_tag "manage-custom-fields.js" %> | ||
14 | + | ||
15 | + <table border="0" style="display: none;"> | ||
16 | + <tr> | ||
17 | + <th align="left"><%= _('Field name') %></th> | ||
18 | + <th><%= _('Display on signup?') %></th> | ||
19 | + <th> </th> | ||
20 | + </tr> | ||
21 | + | ||
22 | + <% @person.custom_fields.each { |field,value| %> | ||
23 | + <tr> | ||
24 | + <td> | ||
25 | + <%= text_field_tag( "profile_data[custom_fields][#{field}][title]", value[:title], :style => "display:block", :size => 30, :maxlength => 30) %> | ||
26 | + </td> | ||
27 | + <td align="center"> | ||
28 | + <%= check_box_tag "profile_data[custom_fields][#{field}][signup]", value['signup'], value['signup'], :onclick => "signup_action('profile_data[custom_fields][#{field}][active]','profile_data[custom_fields][#{field}][required]', 'profile_data[custom_fields][#{field}][signup]')" %> | ||
29 | + </td> | ||
30 | + <td align="center"> | ||
31 | + <%= link_to content_tag(:span, _('Delete')), '#', onclick: "return remove_custom_field(this);", title: "Delete", class: "button icon-delete" %> | ||
32 | + </td> | ||
33 | + </tr> | ||
34 | + <% } %> | ||
35 | + | ||
36 | + </table> | ||
37 | + | ||
38 | + <% if @person.custom_fields.length > 0 %> | ||
39 | + <script> | ||
40 | + jQuery('#custom-fields-container table').css('display', 'table'); | ||
41 | + </script> | ||
42 | + <% end %> | ||
43 | + | ||
44 | + <span> | ||
45 | + <%= link_to_function(_('Add field'), "add_new_field('person');", :class => 'button icon-add with-text') %> | ||
46 | + </span> | ||
47 | + | ||
48 | + <% else %> | ||
49 | + | ||
50 | + <% @person.custom_fields_template.each { |field,value| %> | ||
51 | + | ||
52 | + <div class="field-with-privacy-selector"> | ||
53 | + <div class="formfieldline"> | ||
54 | + | ||
55 | + <span style="display: block;"> | ||
56 | + <%= label_tag @person.custom_fields_template_title(field) %> | ||
57 | + </span> | ||
58 | + | ||
59 | + <div class="formfield type-text" style="display: inline-block;"> | ||
60 | + <%= hidden_field_tag "profile_data[custom_fields][#{field}[title]", @person.custom_fields_template_title(field) %> | ||
61 | + <%= text_field_tag( "profile_data[custom_fields][#{field}][value]", @person.custom_field_value(field), :size => 30) %> | ||
62 | + </div> | ||
63 | + | ||
64 | + </div> | ||
65 | + | ||
66 | + <%= profile_field_privacy_selector @person, field %> | ||
67 | + | ||
68 | + </div> | ||
69 | + | ||
70 | + <% } %> | ||
71 | + | ||
72 | + <% end %> | ||
73 | + | ||
74 | +</div> | ||
75 | + | ||
76 | +<% end %> |
public/javascripts/manage-custom-fields.js
@@ -58,7 +58,7 @@ function add_new_field() { | @@ -58,7 +58,7 @@ function add_new_field() { | ||
58 | new_custom_field = '' + | 58 | new_custom_field = '' + |
59 | '<tr>' + | 59 | '<tr>' + |
60 | '<td>' + | 60 | '<td>' + |
61 | - '<input id="profile_data_custom_fields_custom_field_' + next_custom_field_id + '_title" name="profile_data[custom_fields][custom_field_' + next_custom_field_id + '][title]" style="display:block" type="text" value="">' + | 61 | + '<input id="profile_data_custom_fields_custom_field_' + next_custom_field_id + '_title" name="profile_data[custom_fields][custom_field_' + next_custom_field_id + '][title]" style="display:block" type="text" value="" maxlength="30" size="30">' + |
62 | '</td>' + | 62 | '</td>' + |
63 | '<td align="center">' + | 63 | '<td align="center">' + |
64 | '<input id="profile_data_custom_fields_custom_field_' + next_custom_field_id + '_signup" name="profile_data[custom_fields][custom_field_' + next_custom_field_id + '][signup]" onclick="signup_action("profile_data[custom_fields][custom_field_' + next_custom_field_id + '][active]","profile_data[custom_fields][custom_field_' + next_custom_field_id + '][required]", "profile_data[custom_fields][custom_field_' + next_custom_field_id + '][signup]")" type="checkbox">' + | 64 | '<input id="profile_data_custom_fields_custom_field_' + next_custom_field_id + '_signup" name="profile_data[custom_fields][custom_field_' + next_custom_field_id + '][signup]" onclick="signup_action("profile_data[custom_fields][custom_field_' + next_custom_field_id + '][active]","profile_data[custom_fields][custom_field_' + next_custom_field_id + '][required]", "profile_data[custom_fields][custom_field_' + next_custom_field_id + '][signup]")" type="checkbox">' + |
@@ -70,3 +70,32 @@ function add_new_field() { | @@ -70,3 +70,32 @@ function add_new_field() { | ||
70 | 70 | ||
71 | jQuery('#custom-fields-container tbody').append(new_custom_field); | 71 | jQuery('#custom-fields-container tbody').append(new_custom_field); |
72 | } | 72 | } |
73 | + | ||
74 | +function show_fields_for_template(element) { | ||
75 | + jQuery('div#signup-form-custom-fields div.formfieldline').remove(); | ||
76 | + var selected_template = element.options[element.selectedIndex].value; | ||
77 | + jQuery.ajax({ | ||
78 | + type: "GET", | ||
79 | + url: "/account/custom_fields_for_template", | ||
80 | + dataType: 'json', | ||
81 | + data: { template_id : selected_template }, | ||
82 | + success: function(data) { | ||
83 | + if (data.ok) { | ||
84 | + data.custom_fields.each(function(field) { | ||
85 | + html = '<div class="formfieldline">' + | ||
86 | + '<label class="formlabel" for="profile_data_custom_fields_{#CUSTOM_FIELD_ID#}">{#CUSTOM_FIELD_NAME#}</label>' + | ||
87 | + '<input type="hidden" name="profile_data[custom_fields][{#CUSTOM_FIELD_ID#}][title]" id="profile_data_custom_fields_{#CUSTOM_FIELD_ID#}_title" value="{#CUSTOM_FIELD_NAME#}" />' + | ||
88 | + '<div class="formfield type-text">' + | ||
89 | + '<input type="text" name="profile_data[custom_fields][{#CUSTOM_FIELD_ID#}][value]" id="profile_data_custom_fields_{#CUSTOM_FIELD_ID#}_value" />' + | ||
90 | + '</div>' + | ||
91 | + '</div>'; | ||
92 | + | ||
93 | + html = html.replace( /{#CUSTOM_FIELD_ID#}/g, field.name ); | ||
94 | + html = html.replace( /{#CUSTOM_FIELD_NAME#}/g, field.title ); | ||
95 | + jQuery('div#signup-form-custom-fields').append(html); | ||
96 | + }); | ||
97 | + }; | ||
98 | + } | ||
99 | + }); | ||
100 | +} | ||
101 | + |