diff options
author | David Gageot <david@gageot.net> | 2012-10-08 18:29:05 +0200 |
---|---|---|
committer | David Gageot <david@gageot.net> | 2012-10-09 08:58:58 +0200 |
commit | 24113c81f88cbc7460a9a23fb3c6139b01c2ade9 (patch) | |
tree | 954d4269e1145d83af5094d9964f19f44df8dd58 /sonar-server | |
parent | 01db7e46f5b3d10030918f052c8aade3c3863e0a (diff) | |
download | sonarqube-24113c81f88cbc7460a9a23fb3c6139b01c2ade9.tar.gz sonarqube-24113c81f88cbc7460a9a23fb3c6139b01c2ade9.zip |
SONAR-3529 Better property sets
Diffstat (limited to 'sonar-server')
4 files changed, 36 insertions, 19 deletions
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb index 814c40f539d..ca3384ae025 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb @@ -56,26 +56,32 @@ class SettingsController < ApplicationController def update_property_sets(resource_id) (params[:property_sets] || []).each do |key, set_keys| - if params[key][:auto_generate] - set_keys = Array.new(set_keys.size - 1) { |i| i.to_s } - end - - update_property_set(key, set_keys, params[key], resource_id) + update_property_set(key, set_keys, params[key], resource_id, params[:auto_generate][key]) end end - def update_property_set(key, set_keys, fields_hash, resource_id) + def update_property_set(key, set_keys, fields_hash, resource_id, auto_generate) + set_keys = Array.new(set_keys.size) { |i| i.to_s } if auto_generate + + set_key_values = {} + fields_hash.each do |field_key, field_values| + field_values.zip(set_keys).each do |field_value, set_key| + set_key_values[set_key] ||= {} + set_key_values[set_key][field_key] = field_value + end + end + + set_keys.reject! { |set_key| set_key.blank? || (auto_generate && set_key_values[set_key].values.all?(&:blank?)) } + Property.transaction do Property.with_key_prefix(key + '.').with_resource(resource_id).delete_all update_property(key, set_keys, resource_id) set_keys.each do |set_key| - update_property("#{key}.#{set_key}.key", set_key, resource_id) - end + update_property("#{key}.#{set_key}.key", set_key, resource_id) unless auto_generate - fields_hash.each do |field_key, field_values| - field_values.zip(set_keys).each do |field_value, set_key| - update_property("#{key}.#{set_key}.#{field_key}", field_value, resource_id) if set_key + set_key_values[set_key].each do |field, value| + update_property("#{key}.#{set_key}.#{field}", value, resource_id) end end end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb index 167143441ec..e1297cc8c88 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb @@ -29,7 +29,7 @@ <% value = property_value(property) -%> <% if property.multi_values -%> <% value.each_with_index do |sub_value, index| -%> - <%= render "settings/multi_value", :property => property, :value => sub_value, :hide_delete => ((index == 0) || (value == 1)) -%> + <%= render "settings/multi_value", :property => property, :value => sub_value, :hide_delete => index == 0 -%> <% end -%> <div class="template" style="display:none;"> <%= render "settings/multi_value", :property => property, :value => nil, :hide_delete => false -%> @@ -67,12 +67,17 @@ <script> $j('.delete').live('click', function () { + var value_count = $j(this).parents('.property').find('.delete').size() - 2; + //if (0 == value_count) { + // var template = $j(this).parents('.property').find('.template').last(); + // template.clone().insertBefore(template).show(); + //} $j(this).parents('.multi_value').remove(); return false; }); $j('.add_value').live('click', function () { - $j('.delete').show(); + //$j(this).parents('.property').find('.delete').show(); var template = $j(this).parents('.property').find('.template').last(); template.clone().insertBefore(template).show(); diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb index 8650ff409a5..b11447eae4f 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb @@ -1,7 +1,7 @@ <% errors = [] -%> <% key_field = key_field(property) -%> -<tr class="top multi_value <%= 'template' unless set_key -%>" style="<%= 'display:none' unless set_key -%>"> +<tr class="top multi_value <%= 'template' unless set_key -%> odd" style="<%= 'display:none' unless set_key -%>"> <% if key_field -%> <td><%= render "settings/type_#{key_field.type}", :property => key_field, :field => key_field, :value => set_key, :name => "property_sets[#{property.key}][]", :id => "input_#{h key_field.key}", :size => key_field.indicativeSize -%></td> <% else -%> @@ -18,7 +18,11 @@ <td><%= render "settings/type_#{field.type}", :property => field, :field => field, :value => value, :name => "#{property.key}[#{field.key}][]", :id => "input_#{h field.key}", :size => field.indicativeSize -%></td> <% end -%> - <td><a href="#" class="delete link-action"><%= message('delete') -%></a></td> + <td style="width: 60px;"> + <% unless hide_delete -%> + <a href="#" class="delete link-action"><%= message('delete') -%></a> + <% end -%> + </td> </tr> <% unless errors.all?(&:blank?) -%> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb index ab21f5fc322..62b01211f99 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb @@ -6,7 +6,7 @@ <% if key_field(property) -%> <th><%= message('key') -%></th> <% else %> - <%= hidden_field_tag "#{property.key}[auto_generate]", true -%> + <%= hidden_field_tag "auto_generate[#{property.key}]", true -%> <% end -%> <% property.fields.reject { |field| field.key == 'key' }.each do |field| -%> <th> @@ -22,10 +22,12 @@ </thead> <tbody> - <% Property.values(property.key, resource_id).reject(&:blank?).each do |set_key| -%> - <%= render 'settings/set_instance', :property => property, :set_key => set_key, :resource_id => resource_id %> + <% set_keys = Property.values(property.key, resource_id) -%> + <% set_keys = [''] if set_keys.all?(&:blank?) -%> + <% set_keys.each_with_index do |set_key, index| -%> + <%= render 'settings/set_instance', :property => property, :set_key => set_key, :resource_id => resource_id, :hide_delete => (index == 0) %> <% end -%> - <%= render 'settings/set_instance', :property => property, :set_key => nil, :resource_id => resource_id %> + <%= render 'settings/set_instance', :property => property, :set_key => nil, :resource_id => resource_id, :hide_delete => false %> </tbody> <tfoot> |