aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2011-08-15 19:36:19 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2011-08-15 19:36:19 +0200
commit04cde730a288fc1dd0de91e3ee0cd0c96ed41919 (patch)
tree45345155d06fadb02c37734fc3f8eb1fe6c443ca /sonar-server
parent0dbee87afa49c3c5f75f045e1ac5bf1ec171e5b7 (diff)
downloadsonarqube-04cde730a288fc1dd0de91e3ee0cd0c96ed41919.tar.gz
sonarqube-04cde730a288fc1dd0de91e3ee0cd0c96ed41919.zip
SONAR-2694 Provide a new optional 'category' attribute on the @Property annotation
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb13
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb43
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_delete_project.html.erb2
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_exclusions.html.erb2
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_links.html.erb2
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb227
6 files changed, 157 insertions, 132 deletions
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb
index 79ae8f0ed59..d5c5bceae45 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb
@@ -71,6 +71,19 @@ class ProjectController < ApplicationController
if !@project.project? && !@project.module?
redirect_to :action => 'index', :id => params[:id]
end
+
+ @category=params[:category] ||= 'General'
+ @properties_per_category={}
+ java_facade.getPluginsMetadata().each do |plugin|
+ properties=java_facade.getPluginProperties(plugin).select { |property|
+ (@project.module? && property.module()) || (@project.project? && property.project())
+ }
+ properties.each do |property|
+ category = (property.category().present? ? property.category() : plugin.name())
+ @properties_per_category[category]||=[]
+ @properties_per_category[category]<<property
+ end
+ end
end
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 854c5f746db..a936793ac29 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
@@ -21,25 +21,28 @@ class SettingsController < ApplicationController
SECTION=Navigation::SECTION_CONFIGURATION
- verify :method => :post, :only => ['update'], :redirect_to => { :action => :index }
+ verify :method => :post, :only => ['update'], :redirect_to => {:action => :index}
def index
- return access_denied unless is_admin?
+ return access_denied unless is_admin?
+ load_properties()
+ @category ||= 'General'
end
def update
if params[:resource_id]
project=Project.by_key(params[:resource_id])
- return access_denied unless is_admin?(project)
+ return access_denied unless (project && is_admin?(project))
resource_id=project.id
else
return access_denied unless is_admin?
+ resource_id=nil
end
- plugins = java_facade.getPluginsMetadata()
- plugins.each do |plugin|
- properties=java_facade.getPluginProperties(plugin)
- properties.each do |property|
+ load_properties()
+
+ if @category && @properties_per_category[@category]
+ @properties_per_category[@category].each do |property|
value=params[property.key()]
persisted_property = Property.find(:first, :conditions => {:prop_key=> property.key(), :resource_id => resource_id, :user_id => nil})
@@ -48,20 +51,34 @@ class SettingsController < ApplicationController
Property.delete_all('prop_key' => property.key(), 'resource_id' => resource_id, 'user_id' => nil)
elsif persisted_property.text_value != value.to_s
persisted_property.text_value = value.to_s
- persisted_property.save
+ persisted_property.save!
end
- elsif !value.blank?
+ elsif !value.blank?
Property.create(:prop_key => property.key(), :text_value => value.to_s, :resource_id => resource_id)
end
end
+ java_facade.reloadConfiguration()
+ flash[:notice] = 'Parameters updated'
end
- java_facade.reloadConfiguration()
- flash[:notice] = 'Parameters updated.'
if resource_id
- redirect_to :controller => 'project', :action => 'settings', :id => resource_id
+ redirect_to :controller => 'project', :action => 'settings', :id => resource_id, :category => @category
else
- redirect_to :action => 'index'
+ redirect_to :controller => 'settings', :action => 'index', :category => @category
+ end
+ end
+
+ private
+
+ def load_properties
+ @category=params[:category]
+ @properties_per_category={}
+ java_facade.getPluginsMetadata().each do |plugin|
+ java_facade.getPluginProperties(plugin).select { |property| property.global }.each do |property|
+ category = (property.category().present? ? property.category() : plugin.name())
+ @properties_per_category[category]||=[]
+ @properties_per_category[category]<<property
+ end
end
end
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_delete_project.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_delete_project.html.erb
index 7e89d570273..282a23c7627 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_delete_project.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_delete_project.html.erb
@@ -1,5 +1,5 @@
<% if @snapshot.root? %>
-<h2>Delete project</h2>
+<h1>Delete project</h1>
<div class="yui-g widget" id="widget_delete_project">
<div class="warning">
This operation can not be undone.
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_exclusions.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_exclusions.html.erb
index 2e315bc8248..b2208db0f2b 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_exclusions.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_exclusions.html.erb
@@ -1,4 +1,4 @@
-<h2>Exclude sources from code analysis</h2>
+<h1>Exclude sources from code analysis</h1>
<div class="yui-g widget" id="widget_exclusions">
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_links.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_links.html.erb
index 4ae38c09f8d..8f79d83807e 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_links.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings/_links.html.erb
@@ -1,4 +1,4 @@
-<h2>Project links</h2>
+<h1>Project links</h1>
<div class="yui-g widget" id="widget_links">
<% form_for( 'set_links', :url => { :action => 'set_links', :project_id => @project.id } ) do |form|
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb
index d0d7ad83c44..59e305d9573 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb
@@ -1,130 +1,125 @@
<style type="text/css">
-#plugins .plugin {
+ #plugins .plugin {
padding: 5px;
border: 1px solid #ddd;
background-color: #fff;
- }
-#plugins .plugin h2 {
- margin-left: 10px;
- font-size: 122%;
- color: #333;
-}
-#plugins .plugin h3 {
- margin-left: 5px;
-}
-#plugins .plugin p {
- padding: 5px 5px;
- }
-#plugins .plugin img {
- padding: 5px 0 0 5px;
- }
-</style>
-<div id="plugins">
- <% form_tag :controller => :settings, :action => :update do
- plugins = controller.java_facade.getPluginsMetadata().sort {|p1,p2| p1.getName() <=> p2.getName()}
- plugin_properties={}
- plugins.each do |plugin|
- properties = controller.java_facade.getPluginProperties(plugin).select do |property|
- (project && project.module? && property.module()) or (project && project.project? && property.project()) or (project.nil? && property.global)
- end
- plugin_properties[plugin]=properties
- end
-
- %>
- <% if project %>
- <input type="hidden" name="resource_id" value="<%= project.id -%>" ></input>
- <% end %>
- <table width="100%">
- <tr>
- <td width="1%" nowrap class="column first">
- <table class="data selector">
- <thead><tr><th>
- <span>Select plugin</span>
- </th></tr></thead>
- <tbody>
- <% plugins.each do |plugin|
- if plugin_properties[plugin].empty?
- # we display only plugins with properties
- next
- end
- %>
- <tr class="select <%= cycle('even', 'odd', :name => 'plugins') -%>" id="select_<%= plugin.getKey() -%>">
- <td><a href="#" onclick="showPlugin('<%= plugin.getKey() -%>')"><%= h(plugin.getName()) -%></a></td>
- </tr>
- <% end %>
- </tbody>
- </table>
- <br/>
- <%= submit_tag('Save parameters') %>
- </td>
- <td class="column">
-
- <%
- values = Property.hash(project ? project.id : nil)
- plugins.each do |plugin|
- properties = plugin_properties[plugin]
- %>
- <div class="plugin" id="plugin_<%= plugin.getKey() -%>" style="display: none;">
- <table class="spaced">
- <% unless plugin.getDescription().blank? %>
- <tr><td class="odd">
- <p><%= plugin.getDescription() %></p>
- </td></tr>
- <% end %>
+ }
+ #plugins .plugin h2 {
+ margin-left: 10px;
+ font-size: 122%;
+ color: #333;
+ }
- <% properties.each do |property|
- value= values[property.key()] || ''
- css = cycle('even', 'odd', :name => plugin.getKey())
- %>
- <tr class="<%= css -%>">
- <td>
- <h3><%= property.name() %> <% if property.project() %><span class="note">[<%= property.key() -%>]</span><% end %></h3>
- <p><%= property.description() %></p>
- <p>
- <% span_id = "text_" + property.key().gsub('.', '_') %>
- <% textfield = text_field_tag property.key(), value, :size => '20' %>
- <% textfield += link_to_function(image_tag("zoom.png"), "replaceTextField('#{span_id}', '#{property.key()}')", :id => "toggle_text", :class => 'nolink') %>
- <% textarea = text_area_tag property.key(), value, :size => "100x10" %>
- <span id="<%= span_id %>"><%= (value.length < 50) ? textfield : textarea %></span>
+ #plugins .plugin h3 {
+ margin-left: 5px;
+ }
- <% unless property.defaultValue().blank? %>
- <% if project.nil? %>
- <span class="note">Default : <%= h property.defaultValue() -%></span>
- <% else %>
- <span class="note">Default : <%= h Property.value(property.key(), nil, property.defaultValue()) -%></span>
- <% end %>
- <% end %>
- </p>
- </td>
- </tr>
-
- <% end %>
- </table>
- </div>
- <% end %>
- </td>
- </tr>
- </table>
- <% end %>
-</div>
+ #plugins .plugin p {
+ padding: 5px 5px;
+ }
+ #plugins .plugin img {
+ padding: 5px 0 0 5px;
+ }
+</style>
<script type="text/javascript">
function replaceTextField(span_id, key) {
var text_field_value = $F(key);
var text_area = '<textarea cols="100" id="' + key + '" name="' + key + '" rows="10">' + text_field_value + '</textarea>';
$(span_id).replace(text_area);
}
- function showPlugin(id) {
- $$('.plugin').each(function(element) {
- element.hide();
- });
- $$('.select').each(function(element) {
- element.removeClassName('selected');
- });
- $('plugin_' + id).show();
- $('select_' + id).addClassName('selected');
- return false;
- }
- showPlugin('core');
-</script> \ No newline at end of file
+</script>
+<div id="plugins">
+ <table width="100%">
+ <tr>
+ <td width="1%" nowrap class="column first">
+ <table class="data selector">
+ <thead>
+ <tr>
+ <th>
+ <span>Category</span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <%
+ @properties_per_category.keys.sort.each do |category|
+ unless @properties_per_category[category].empty?
+ %>
+ <tr class="select <%= cycle('even', 'odd', :name => 'category') -%> <%= 'selected' if @category==category -%>" id="select_<%= category -%>">
+ <td><%= link_to h(category), :overwrite_params => {:category => category} -%></td>
+ </tr>
+ <% end
+ end
+ %>
+ </tbody>
+ </table>
+ <br/>
+ </td>
+
+ <td class="column">
+ <% if @category
+ category_name = message("settings.category.#{@category}", :default => @category)
+ %>
+
+ <% form_tag :controller => :settings, :action => :update do %>
+ <%= hidden_field_tag('category', @category) -%>
+ <% if @project %>
+ <input type="hidden" name="resource_id" value="<%= @project.id -%>"/>
+ <% end %>
+ <table class="data marginbottom10">
+ <thead>
+ <tr>
+ <th>
+ <span><%= h(category_name) -%></span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <%
+ if @properties_per_category[@category]
+ @properties_per_category[@category].each do |property|
+ value = Property.value(property.key(), (@project ? @project.id : nil), '')
+ %>
+ <tr class="<%= cycle('even', 'odd', :name => 'properties') -%>">
+ <td style="padding: 10px">
+ <h3>
+ <%= h(property.name()) -%>
+ <% if property.project() %>
+ <br/><span class="note"><%= property.key() -%></span>
+ <% end %>
+ </h3>
+ <% if property.description.present? %>
+ <p class="marginbottom10"><%= property.description -%></p>
+ <% end %>
+ <p>
+ <% span_id = "text_" + property.key().gsub('.', '_') %>
+ <% textfield = text_field_tag property.key(), value, :size => '20' %>
+ <% textfield += link_to_function(image_tag("zoom.png"), "replaceTextField('#{span_id}', '#{property.key()}')", :id => "toggle_text", :class => 'nolink') %>
+ <% textarea = text_area_tag property.key(), value, :size => "100x10" %>
+ <span id="<%= span_id %>"><%= (value.length < 50) ? textfield : textarea %></span>
+
+ <% unless property.defaultValue().blank? %>
+ <% if @project %>
+ <span class="note">Default : <%= h Property.value(property.key(), nil, property.defaultValue()) -%></span>
+ <% else %>
+ <span class="note">Default : <%= h property.defaultValue() -%></span>
+ <% end %>
+ <% end %>
+ </p>
+ </td>
+ </tr>
+ <% end
+ end
+ %>
+ </tbody>
+ </table>
+ <% save_message=message('settings.save_category', :params => [category_name]) %>
+ <%= submit_tag(save_message, :disable_with => save_message, :id => 'save') -%>
+ <% end %>
+ <% end %>
+ </td>
+ </tr>
+ </table>
+</div>