Browse Source

SONAR-4501 Make properties (sub)categories case insensitives

tags/3.7
Julien HENRY 11 years ago
parent
commit
3c972b4cb5

+ 3
- 3
plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties View File

@@ -1551,9 +1551,9 @@ email_configuration.test.email_was_sent_to_x=Email was sent to {0}
# LICENSES & SERVER KEY CONFIGURATION
#
#------------------------------------------------------------------------------
property.category.Licenses=Licenses
property.category.Licenses.description=In case of any issue or question about licenses, please send an email to contact@sonarsource.com.
property.category.Licenses.server_id=Server ID
property.category.licenses=Licenses
property.category.licenses.description=In case of any issue or question about licenses, please send an email to contact@sonarsource.com.
property.category.licenses.server_id=Server ID
server_id_configuration.generate_button=Generate ID
server_id_configuration.generating_button=Generating ID...
server_id_configuration.bad_key=The ID is not valid anymore. Please check the organisation and the IP address.

+ 5
- 0
sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java View File

@@ -72,6 +72,11 @@ public interface CoreProperties {
*/
String CATEGORY_EXCLUSIONS = "exclusions";

/**
* @since 3.7
*/
String CATEGORY_LICENSES = "licenses";

/* Global settings */
String SONAR_HOME = "SONAR_HOME";
String PROJECT_BRANCH_PROPERTY = "sonar.branch";

+ 73
- 0
sonar-plugin-api/src/main/java/org/sonar/api/config/Category.java View File

@@ -0,0 +1,73 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2013 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.config;

import org.apache.commons.lang.StringUtils;

import java.util.Locale;

/**
* @since 3.7
*/
public class Category {

private final String originalKey;
private final boolean special;

public Category(String originalKey) {
this(originalKey, false);
}

Category(String originalKey, boolean special) {
this.originalKey = originalKey;
this.special = special;
}

public String originalKey() {
return originalKey;
}

public String key() {
return StringUtils.lowerCase(originalKey, Locale.ENGLISH);
}

public boolean isSpecial() {
return special;
}

@Override
public int hashCode() {
return key().hashCode();
}

@Override
public boolean equals(Object obj) {
if (!(obj instanceof Category)) {
return false;
}
return StringUtils.equalsIgnoreCase(((Category) obj).originalKey, this.originalKey);
}

@Override
public String toString() {
return this.originalKey;
}

}

+ 45
- 6
sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinitions.java View File

@@ -23,6 +23,7 @@ import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.BatchComponent;
import org.sonar.api.CoreProperties;
import org.sonar.api.Properties;
import org.sonar.api.Property;
import org.sonar.api.ServerComponent;
@@ -44,8 +45,8 @@ import java.util.Map;
public final class PropertyDefinitions implements BatchComponent, ServerComponent {

private final Map<String, PropertyDefinition> definitions = Maps.newHashMap();
private final Map<String, String> categories = Maps.newHashMap();
private final Map<String, String> subcategories = Maps.newHashMap();
private final Map<String, Category> categories = Maps.newHashMap();
private final Map<String, SubCategory> subcategories = Maps.newHashMap();

// deprecated key -> new key
private final Map<String, String> deprecatedKeys = Maps.newHashMap();
@@ -107,8 +108,9 @@ public final class PropertyDefinitions implements BatchComponent, ServerComponen
if (!definitions.containsKey(definition.key())) {
definitions.put(definition.key(), definition);
String category = StringUtils.defaultIfBlank(definition.category(), defaultCategory);
categories.put(definition.key(), category);
subcategories.put(definition.key(), StringUtils.defaultIfBlank(definition.subCategory(), category));
categories.put(definition.key(), new Category(category));
String subcategory = StringUtils.defaultIfBlank(definition.subCategory(), category);
subcategories.put(definition.key(), new SubCategory(subcategory));
if (!Strings.isNullOrEmpty(definition.deprecatedKey()) && !definition.deprecatedKey().equals(definition.key())) {
deprecatedKeys.put(definition.deprecatedKey(), definition.key());
}
@@ -130,7 +132,9 @@ public final class PropertyDefinitions implements BatchComponent, ServerComponen

/**
* @since 3.6
* @deprecated since 3.7 use {@link #propertiesByCategory(String)}
*/
@Deprecated
public Map<String, Map<String, Collection<PropertyDefinition>>> getPropertiesByCategory(@Nullable String qualifier) {
Map<String, Map<String, Collection<PropertyDefinition>>> byCategory = new HashMap<String, Map<String, Collection<PropertyDefinition>>>();

@@ -151,10 +155,45 @@ public final class PropertyDefinitions implements BatchComponent, ServerComponen
return byCategory;
}

/**
* @since 3.6
* @deprecated since 3.7 use {@link #propertiesByCategory(String)}
*/
@Deprecated
public Map<String, Map<String, Collection<PropertyDefinition>>> getPropertiesByCategory() {
return getPropertiesByCategory(null);
}

/**
* @since 3.7
*/
public Map<Category, Map<SubCategory, Collection<PropertyDefinition>>> propertiesByCategory(@Nullable String qualifier) {
Map<Category, Map<SubCategory, Collection<PropertyDefinition>>> byCategory = new HashMap<Category, Map<SubCategory, Collection<PropertyDefinition>>>();
if (qualifier == null) {
// Special categories on global page
byCategory.put(new Category("email", true), new HashMap<SubCategory, Collection<PropertyDefinition>>());
byCategory.put(new Category("encryption", true), new HashMap<SubCategory, Collection<PropertyDefinition>>());
HashMap<SubCategory, Collection<PropertyDefinition>> licenseSubCategories = new HashMap<SubCategory, Collection<PropertyDefinition>>();
licenseSubCategories.put(new SubCategory("server_id", true), new ArrayList<PropertyDefinition>());
byCategory.put(new Category(CoreProperties.CATEGORY_LICENSES, false), licenseSubCategories);
}
for (PropertyDefinition definition : getAll()) {
if (qualifier == null ? definition.global() : definition.qualifiers().contains(qualifier)) {
Category category = categories.get(definition.key());
if (!byCategory.containsKey(category)) {
byCategory.put(category, new HashMap<SubCategory, Collection<PropertyDefinition>>());
}
SubCategory subCategory = subcategories.get(definition.key());
if (!byCategory.get(category).containsKey(subCategory)) {
byCategory.get(category).put(subCategory, new ArrayList<PropertyDefinition>());
}
byCategory.get(category).get(subCategory).add(definition);
}
}

return byCategory;
}

public String getDefaultValue(String key) {
PropertyDefinition def = get(key);
if (def == null) {
@@ -164,11 +203,11 @@ public final class PropertyDefinitions implements BatchComponent, ServerComponen
}

public String getCategory(String key) {
return categories.get(validKey(key));
return categories.get(validKey(key)).toString();
}

public String getSubCategory(String key) {
return subcategories.get(validKey(key));
return subcategories.get(validKey(key)).toString();
}

public String getCategory(Property prop) {

+ 35
- 0
sonar-plugin-api/src/main/java/org/sonar/api/config/SubCategory.java View File

@@ -0,0 +1,35 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2013 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.config;

/**
* @since 3.7
*/
public class SubCategory extends Category {

public SubCategory(String originalKey) {
super(originalKey);
}

SubCategory(String originalKey, boolean special) {
super(originalKey, special);
}

}

+ 37
- 0
sonar-plugin-api/src/test/java/org/sonar/api/config/CategoryTest.java View File

@@ -0,0 +1,37 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2013 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.config;

import org.junit.Test;

import static org.fest.assertions.Assertions.assertThat;

public class CategoryTest {

@Test
public void category_key_is_case_insentive() {
assertThat(new Category("Licenses")).isEqualTo(new Category("licenses"));
}

@Test
public void should_preserve_original_key() {
assertThat(new Category("Licenses").originalKey()).isEqualTo("Licenses");
}
}

+ 45
- 19
sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionsTest.java View File

@@ -34,10 +34,10 @@ public class PropertyDefinitionsTest {
@Test
public void should_build_with_predefined_list_of_definitions() {
List<PropertyDefinition> list = Arrays.asList(
PropertyDefinition.builder("foo").name("Foo").build(),
PropertyDefinition.builder("one").name("One").build(),
PropertyDefinition.builder("two").name("Two").defaultValue("2").build()
);
PropertyDefinition.builder("foo").name("Foo").build(),
PropertyDefinition.builder("one").name("One").build(),
PropertyDefinition.builder("two").name("Two").defaultValue("2").build()
);
PropertyDefinitions def = new PropertyDefinitions(list);

assertProperties(def);
@@ -46,9 +46,9 @@ public class PropertyDefinitionsTest {
@Test
public void should_inspect_plugin_objects() {
PropertyDefinitions def = new PropertyDefinitions(
PropertyDefinition.builder("foo").name("Foo").build(),
PropertyDefinition.builder("one").name("One").build(),
PropertyDefinition.builder("two").name("Two").defaultValue("2").build()
PropertyDefinition.builder("foo").name("Foo").build(),
PropertyDefinition.builder("one").name("One").build(),
PropertyDefinition.builder("two").name("Two").defaultValue("2").build()
);

assertProperties(def);
@@ -71,8 +71,8 @@ public class PropertyDefinitionsTest {
@Test
public void test_categories() {
PropertyDefinitions def = new PropertyDefinitions(
PropertyDefinition.builder("inCateg").name("In Categ").category("categ").build(),
PropertyDefinition.builder("noCateg").name("No categ").build()
PropertyDefinition.builder("inCateg").name("In Categ").category("categ").build(),
PropertyDefinition.builder("noCateg").name("No categ").build()
);

assertThat(def.getCategory("inCateg")).isEqualTo("categ");
@@ -105,15 +105,25 @@ public class PropertyDefinitionsTest {
assertThat(def.getCategory("noCateg")).isEqualTo("default");
}

@Test
public void should_return_special_categories() {
PropertyDefinitions def = new PropertyDefinitions();

assertThat(def.propertiesByCategory(null).keySet()).containsOnly(new Category("encryption"), new Category("email"), new Category("licenses"));
assertThat(def.propertiesByCategory(null).keySet().iterator().next().isSpecial()).isTrue();
assertThat(def.propertiesByCategory(null).get(new Category("licenses")).keySet()).containsOnly(new SubCategory("server_id"));
assertThat(def.propertiesByCategory(null).get(new Category("licenses")).keySet().iterator().next().isSpecial()).isTrue();
}

@Test
public void should_group_by_category() {
PropertyDefinitions def = new PropertyDefinitions(
PropertyDefinition.builder("global1").name("Global1").category("catGlobal1").build(),
PropertyDefinition.builder("global2").name("Global2").category("catGlobal1").build(),
PropertyDefinition.builder("global3").name("Global3").category("catGlobal2").build(),
PropertyDefinition.builder("project").name("Project").category("catProject").onlyOnQualifiers(Qualifiers.PROJECT).build(),
PropertyDefinition.builder("module").name("Module").category("catModule").onlyOnQualifiers(Qualifiers.MODULE).build(),
PropertyDefinition.builder("view").name("View").category("catView").onlyOnQualifiers(Qualifiers.VIEW).build()
PropertyDefinition.builder("global1").name("Global1").category("catGlobal1").build(),
PropertyDefinition.builder("global2").name("Global2").category("catGlobal1").build(),
PropertyDefinition.builder("global3").name("Global3").category("catGlobal2").build(),
PropertyDefinition.builder("project").name("Project").category("catProject").onlyOnQualifiers(Qualifiers.PROJECT).build(),
PropertyDefinition.builder("module").name("Module").category("catModule").onlyOnQualifiers(Qualifiers.MODULE).build(),
PropertyDefinition.builder("view").name("View").category("catView").onlyOnQualifiers(Qualifiers.VIEW).build()
);

assertThat(def.getPropertiesByCategory(null).keySet()).containsOnly("catGlobal1", "catGlobal2");
@@ -121,19 +131,30 @@ public class PropertyDefinitionsTest {
assertThat(def.getPropertiesByCategory(Qualifiers.MODULE).keySet()).containsOnly("catModule");
assertThat(def.getPropertiesByCategory(Qualifiers.VIEW).keySet()).containsOnly("catView");
assertThat(def.getPropertiesByCategory("Unkown").keySet()).isEmpty();

assertThat(def.propertiesByCategory(null).keySet()).containsOnly(new Category("encryption"), new Category("email"), new Category("licenses"), new Category("catGlobal1"),
new Category("catGlobal2"));
assertThat(def.propertiesByCategory(Qualifiers.PROJECT).keySet()).containsOnly(new Category("catProject"));
assertThat(def.propertiesByCategory(Qualifiers.MODULE).keySet()).containsOnly(new Category("catModule"));
assertThat(def.propertiesByCategory(Qualifiers.VIEW).keySet()).containsOnly(new Category("catView"));
assertThat(def.propertiesByCategory("Unkown").keySet()).isEmpty();
}

@Test
public void should_group_by_subcategory() {
PropertyDefinitions def = new PropertyDefinitions(
PropertyDefinition.builder("global1").name("Global1").category("catGlobal1").subCategory("sub1").build(),
PropertyDefinition.builder("global2").name("Global2").category("catGlobal1").subCategory("sub2").build(),
PropertyDefinition.builder("global3").name("Global3").category("catGlobal1").build(),
PropertyDefinition.builder("global4").name("Global4").category("catGlobal2").build()
PropertyDefinition.builder("global1").name("Global1").category("catGlobal1").subCategory("sub1").build(),
PropertyDefinition.builder("global2").name("Global2").category("catGlobal1").subCategory("sub2").build(),
PropertyDefinition.builder("global3").name("Global3").category("catGlobal1").build(),
PropertyDefinition.builder("global4").name("Global4").category("catGlobal2").build()
);

assertThat(def.getPropertiesByCategory(null).get("catGlobal1").keySet()).containsOnly("catGlobal1", "sub1", "sub2");
assertThat(def.getPropertiesByCategory(null).get("catGlobal2").keySet()).containsOnly("catGlobal2");

assertThat(def.propertiesByCategory(null).get(new Category("catGlobal1")).keySet()).containsOnly(new SubCategory("catGlobal1"), new SubCategory("sub1"),
new SubCategory("sub2"));
assertThat(def.propertiesByCategory(null).get(new Category("catGlobal2")).keySet()).containsOnly(new SubCategory("catGlobal2"));
}

@Test
@@ -143,6 +164,11 @@ public class PropertyDefinitionsTest {
assertThat(def.getPropertiesByCategory().keySet()).containsOnly("catGlobal1", "catGlobal2");
assertThat(def.getPropertiesByCategory(Qualifiers.PROJECT).keySet()).containsOnly("catProject");
assertThat(def.getPropertiesByCategory(Qualifiers.MODULE).keySet()).containsOnly("catModule");

assertThat(def.propertiesByCategory(null).keySet()).containsOnly(new Category("encryption"), new Category("email"), new Category("licenses"), new Category("catglobal1"),
new Category("catglobal2"));
assertThat(def.propertiesByCategory(Qualifiers.PROJECT).keySet()).containsOnly(new Category("catproject"));
assertThat(def.propertiesByCategory(Qualifiers.MODULE).keySet()).containsOnly(new Category("catmodule"));
}

private void assertProperties(PropertyDefinitions definitions) {

+ 42
- 2
sonar-server/src/main/webapp/WEB-INF/app/controllers/application_controller.rb View File

@@ -258,11 +258,51 @@ class ApplicationController < ActionController::Base
end

def category_name(category)
message("property.category.#{category}", :default => category)
# Try with lowercase key then with original key for backward compatibility
message("property.category.#{category.key}", :default => message("property.category.#{category.originalKey}", :default => category.originalKey))
end

def subcategory_name(category, subcategory)
message("property.category.#{category}.#{subcategory}", :default => subcategory)
if (category.key == subcategory.key)
# If subcategory == category then it is the default one
category_name(category)
else
# Try with lowercase key then with original key for backward compatibility
message("property.category.#{category.key}.#{subcategory.key}",
:default => message("property.category.#{category.originalKey}.#{subcategory.originalKey}", :default => subcategory.originalKey))
end
end

def processProperties(definitions_per_category)
@categories = by_category_name(definitions_per_category.keys)

default_category = @categories.empty? ? nil : @categories[0]

if params[:category].nil?
default_category = @categories.empty? ? nil : @categories[0]
@category = default_category
else
@category = @categories.select {|c| c == Java::OrgSonarApiConfig::Category.new(params[:category])}.first
not_found('category') if @category.nil?
end

unless @category.isSpecial then
@subcategories_per_categories = {}
definitions_per_category.each {|category, definitions_per_subcategories| @subcategories_per_categories.store(category, by_subcategory_name(category, definitions_per_subcategories.keys)) }

if params[:subcategory].nil?
default_subcategory =
@subcategories_per_categories[@category].nil? ? nil :
((@subcategories_per_categories[@category].include? @category) ? @category : @subcategories_per_categories[@category][0])
@subcategory = default_subcategory
else
@subcategory = @subcategories_per_categories[@category].select {|s| s == Java::OrgSonarApiConfig::SubCategory.new(params[:subcategory])}.first
not_found('subcategory') if @subcategory.nil?
end

@definitions = definitions_per_category[@category] || {}
@definitions = @definitions[@subcategory] || []
end
end

end

+ 3
- 21
sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb View File

@@ -239,30 +239,12 @@ class ProjectController < ApplicationController
@resource = get_current_project(params[:id])

@snapshot = @resource.last_snapshot
if @resource && !java_facade.getResourceTypeBooleanProperty(@resource.qualifier, 'configurable')
if !java_facade.getResourceTypeBooleanProperty(@resource.qualifier, 'configurable')
redirect_to :action => 'index', :id => params[:id]
end

definitions_per_category = java_facade.propertyDefinitions.getPropertiesByCategory(@resource ? @resource.qualifier : nil)
@categories = definitions_per_category.keys || []
@categories = by_category_name(@categories)

default_category = nil
default_category = @categories[0] if !@categories.empty?
@category = params[:category] || default_category

not_found('category') unless @categories.include? @category

@subcategories_per_categories = {}
definitions_per_category.each {|category, definitions_per_subcategories| @subcategories_per_categories.store(category, by_subcategory_name(category, definitions_per_subcategories.keys)) }

default_subcategory =
@subcategories_per_categories[@category].nil? ? nil :
((@subcategories_per_categories[@category].include? @category) ? @category : @subcategories_per_categories[@category][0])
@subcategory = params[:subcategory] || default_subcategory

@definitions = definitions_per_category[@category] || {}
@definitions = @definitions[@subcategory] || []
definitions_per_category = java_facade.propertyDefinitions.propertiesByCategory(@resource.qualifier)
processProperties(definitions_per_category)
end

def update_version

+ 3
- 30
sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb View File

@@ -21,11 +21,6 @@ class SettingsController < ApplicationController

SECTION=Navigation::SECTION_CONFIGURATION

LICENSES_CATEGORY='Licenses'
SERVER_ID_SUBCATEGORY='server_id'
SPECIAL_CATEGORIES=%w(email encryption) + [LICENSES_CATEGORY]


verify :method => :post, :only => %w(update), :redirect_to => {:action => :index}
before_filter :admin_required, :only => %w(index)

@@ -103,30 +98,8 @@ class SettingsController < ApplicationController
end

def load_properties
definitions_per_category = java_facade.propertyDefinitions.getPropertiesByCategory(@resource ? @resource.qualifier : nil)
@categories = definitions_per_category.keys + SPECIAL_CATEGORIES
@categories = by_category_name(@categories.uniq)

default_category = @categories.empty? ? nil : @categories[0]
@category = params[:category] || default_category

not_found('category') unless @categories.include? @category

@subcategories_per_categories = {}
definitions_per_category.each {|category, definitions_per_subcategories| @subcategories_per_categories.store(category, by_subcategory_name(category, definitions_per_subcategories.keys)) }

if (@subcategories_per_categories[LICENSES_CATEGORY].nil?)
@subcategories_per_categories.store(LICENSES_CATEGORY, [SERVER_ID_SUBCATEGORY])
else
@subcategories_per_categories[LICENSES_CATEGORY].push(SERVER_ID_SUBCATEGORY)
end

default_subcategory =
@subcategories_per_categories[@category].nil? ? nil :
((@subcategories_per_categories[@category].include? @category) ? @category : @subcategories_per_categories[@category][0])
@subcategory = params[:subcategory] || default_subcategory

@definitions = definitions_per_category[@category] || {}
@definitions = @definitions[@subcategory] || []
definitions_per_category = java_facade.propertyDefinitions.propertiesByCategory(nil)
processProperties(definitions_per_category)
end

end

+ 8
- 5
sonar-server/src/main/webapp/WEB-INF/app/helpers/settings_helper.rb View File

@@ -21,15 +21,18 @@ module SettingsHelper
include PropertiesHelper

def category_name(category)
message("property.category.#{category}", :default => category)
# Try with lowercase key then with original key for backward compatibility
message("property.category.#{category.key}", :default => message("property.category.#{category.originalKey}", :default => category.originalKey))
end

def subcategory_name(category, subcategory)
if (category == subcategory)
if (category.key == subcategory.key)
# If subcategory == category then it is the default one
category_name(category)
else
message("property.category.#{category}.#{subcategory}", :default => subcategory)
# Try with lowercase key then with original key for backward compatibility
message("property.category.#{category.key}.#{subcategory.key}",
:default => message("property.category.#{category.originalKey}.#{subcategory.originalKey}", :default => subcategory.originalKey))
end
end

@@ -62,11 +65,11 @@ module SettingsHelper
end

def category_desc(category)
message("property.category.#{category}.description", :default => '')
message("property.category.#{category.key}.description", :default => '')
end

def subcategory_desc(category, subcategory)
message("property.category.#{category}.#{subcategory}.description", :default => '')
message("property.category.#{category.key}.#{subcategory.key}.description", :default => '')
end

def property_value(property)

+ 8
- 8
sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb View File

@@ -1,7 +1,7 @@
<% if SettingsController::SPECIAL_CATEGORIES.include?(@category) && @category != SettingsController::LICENSES_CATEGORY -%>
<%= render 'special', :url => url_for(:controller => "#{@category}_configuration") -%>
<% if @category.isSpecial -%>
<%= render 'special', :url => url_for(:controller => "#{@category.key}_configuration") -%>
<% else -%>
<% form_remote_tag :url => {:controller => 'settings', :action => 'update', :category => @category, :subcategory => @subcategory, :resource_id => @resource ? @resource.id : nil},
<% form_remote_tag :url => {:controller => 'settings', :action => 'update', :category => @category.key, :subcategory => @subcategory.key, :resource_id => @resource ? @resource.id : nil},
:method => :post,
:before => "$('submit_settings').hide();$('loading_settings').show();",
:update => 'properties',
@@ -10,21 +10,21 @@
<ul class="tabs2">
<% subcategories.each do |subcategory| -%>
<li>
<%= link_to subcategory_name(@category, subcategory), {:controller => @resource ? 'project' : 'settings', :action => @resource ? 'settings' : 'index', :category => @category, :subcategory => subcategory, :id => @resource ? @resource.id : nil}, :class => @subcategory==subcategory ? 'selected' : nil -%>
<%= link_to subcategory_name(@category, subcategory), {:controller => @resource ? 'project' : 'settings', :action => @resource ? 'settings' : 'index', :category => @category.key, :subcategory => subcategory.key, :id => @resource ? @resource.id : nil}, :class => @subcategory==subcategory ? 'selected' : nil -%>
</li>
<% end -%>
</ul>
<% if @category == SettingsController::LICENSES_CATEGORY && @subcategory == SettingsController::SERVER_ID_SUBCATEGORY %>
<%= render 'special', :url => url_for(:controller => "#{SettingsController::SERVER_ID_SUBCATEGORY}_configuration") -%>
<% if @subcategory.isSpecial %>
<%= render 'special', :url => url_for(:controller => "#{@subcategory.key}_configuration") -%>
<% else %>
<table class="data marginbottom10">
<thead>
<% if @subcategory == @category && !category_desc(@category).blank? -%>
<% if @subcategory.key == @category.key && !category_desc(@category).blank? -%>
<tr>
<td class="categoryDescription"><%= category_desc(@category) -%> </td>
</tr>
<% end -%>
<% if @subcategory != @category && !subcategory_desc(@category, @subcategory).blank? -%>
<% if @subcategory.key != @category.key && !subcategory_desc(@category, @subcategory).blank? -%>
<tr>
<td><%= subcategory_desc(@category, @subcategory) -%> </td>
</tr>

+ 2
- 2
sonar-server/src/main/webapp/WEB-INF/app/views/settings/_settings.html.erb View File

@@ -12,8 +12,8 @@
</thead>
<tbody>
<% @categories.each do |category| -%>
<tr id="select_<%= category -%>" class="select <%= cycle('even', 'odd', :name => 'category') -%> <%= 'selected' if @category==category -%>">
<td class="category"><%= link_to category_name(category), :category => category -%></td>
<tr id="select_<%= category.key -%>" class="select <%= cycle('even', 'odd', :name => 'category') -%> <%= 'selected' if @category.key==category.key -%>">
<td class="category"><%= link_to category_name(category), :category => category.key -%></td>
</tr>
<% end -%>
</tbody>

Loading…
Cancel
Save