]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3529 Edition of property sets
authorDavid Gageot <david@gageot.net>
Sat, 29 Sep 2012 11:36:13 +0000 (13:36 +0200)
committerDavid Gageot <david@gageot.net>
Sat, 29 Sep 2012 11:37:04 +0000 (13:37 +0200)
sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/helpers/settings_helper.rb
sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb

index d0d1791bf3fb1ed227f38aa669270071db061c7c..255294383cf08cd1e0c6b9d110828d787e575ea3 100644 (file)
@@ -38,12 +38,40 @@ class SettingsController < ApplicationController
     access_denied if (@resource.nil? && !is_admin?)
 
     load_properties()
+    save_properties(resource_id)
+    save_property_sets(resource_id)
 
+    render :partial => 'settings/properties'
+  end
+
+  private
+
+  # TODO: Validation
+  def save_property_sets(resource_id)
+    params[:property_sets].each do |key, value|
+      value = drop_trailing_blank_values(value)
+
+      # TODO: clear all
+      Property.set(key, value.map { |v| v.gsub(',', '%2C') }.join(','), resource_id)
+
+      fields = params[key]
+
+      fields.each do |field_key, field_values|
+        field_values.each_with_index do |field_value, index|
+          set_key = value[index]
+          if set_key
+            Property.set(key + "." + set_key + "." + field_key, field_value, resource_id)
+          end
+        end
+      end
+    end
+  end
+
+  def save_properties(resource_id)
     @updated_properties = {}
-    @definitions.map(&:key).each do |key|
-      value = params[key]
+    params[:settings].each do |key, value|
       if value.kind_of? Array
-        value = value.reverse.drop_while(&:blank?).reverse
+        value = drop_trailing_blank_values(value)
       end
 
       if value.blank?
@@ -52,11 +80,11 @@ class SettingsController < ApplicationController
         @updated_properties[key] = Property.set(key, value, resource_id)
       end
     end
-
-    render :partial => 'settings/properties'
   end
 
-  private
+  def drop_trailing_blank_values(array)
+    array.reverse.drop_while(&:blank?).reverse
+  end
 
   def load_properties
     @category = params[:category] || 'general'
index ca9c3da81890098ba6c0245c53d0f7a3bccd1942..c97111ef077fe0d16a574f59656dff7f043cc1b9 100644 (file)
@@ -55,6 +55,6 @@ module SettingsHelper
   end
 
   def input_name(property)
-    h(property.key) + (property.multi_values ? '[]' : '')
+    "settings[#{h property.key}#{property.multi_values ? '[]' : ''}]"
   end
 end
index 22777ac090fff43efbba50da63882667af06850b..029762ae2a7ecab7c70eb9779c7772e38036e1aa 100644 (file)
@@ -1,17 +1,43 @@
-<% Property.set('sonar.test.jira.servers', 'jira1,jira2') -%>
-<% Property.set('sonar.test.jira.servers.jira1.url', 'http://url1') -%>
-<% Property.set('sonar.test.jira.servers.jira1.port', '1234') -%>
-<% Property.set('sonar.test.jira.servers.jira2.url', 'http://url2') -%>
-<% Property.set('sonar.test.jira.servers.jira2.port', '9999') -%>
+<% if Property.value('sonar.test.jira.servers').blank? -%>
+  <% Property.set('sonar.test.jira.servers', 'jira1,jira2') -%>
+  <% Property.set('sonar.test.jira.servers.jira1.url', 'http://url1') -%>
+  <% Property.set('sonar.test.jira.servers.jira1.port', '1234') -%>
+  <% Property.set('sonar.test.jira.servers.jira2.url', 'http://url2') -%>
+  <% Property.set('sonar.test.jira.servers.jira2.port', '9999') -%>
+<% end -%>
+
+<% resource_id = @resource.id if @resource -%>
 
-<% Property.values(property.key).reject(&:blank?).each do |set_key| -%>
-  <h3><%= set_key -%></h3>
+<% Property.values(property.key, resource_id).reject(&:blank?).each do |set_key| -%>
+  <div class="multi_value">
+    <label>Key: </label><br/>
+    <input name="property_sets[<%= property.key -%>][]" value="<%= set_key -%>"/><br/>
 
-  <% property.fields.each do |field| -%>
-    <label><%= field.key -%>: </label><input type="text" value="<%= Property.value([property.key, set_key, field.key].join('.')) -%>"/><br/>
-  <% end -%>
+    <% property.fields.each do |field| -%>
+      <label><%= field.key -%>: </label><br/>
+      <input type="text" name="<%= property.key -%>[<%= field.key -%>][]" value="<%= Property.value("#{property.key}.#{set_key}.#{field.key}", resource_id) -%>"/>
+      <br/>
+    <% end -%>
 
-  <a href="#" class="delete link-action"><%= message('delete') -%></a>
+    <a href="#" class="delete link-action"><%= message('delete') -%></a>
+    <br/><br/>
+  </div>
 <% end -%>
 
+<div class="template" style="display:none;">
+  <div class="multi_value">
+    <label>Key: </label><br/>
+    <input name="property_sets[<%= property.key -%>][]" value=""/><br/>
+
+    <% property.fields.each do |field| -%>
+      <label><%= field.key -%>: </label><br/>
+      <input type="text" name="<%= property.key -%>[<%= field.key -%>][]" value=""/>
+      <br/>
+    <% end -%>
+
+    <a href="#" class="delete link-action"><%= message('delete') -%></a>
+    <br/><br/>
+  </div>
+</div>
+
 <button class="add_value"><%= message('settings.add') -%></button>