]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1767 fix violations viewer when a rule is selected and the param 'rule' is...
authorsimonbrandhof <simon.brandhof@gmail.com>
Wed, 29 Sep 2010 20:49:28 +0000 (20:49 +0000)
committersimonbrandhof <simon.brandhof@gmail.com>
Wed, 29 Sep 2010 20:49:28 +0000 (20:49 +0000)
sonar-server/src/main/webapp/WEB-INF/app/controllers/drilldown_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/models/rule.rb
sonar-server/src/main/webapp/WEB-INF/app/views/drilldown/violations.html.erb

index 3d509b54640b7413a308d76e3d0bc04f52ea0b2e..e838034a1bca0e462985220bdf34f54faea9b33c 100644 (file)
@@ -78,14 +78,17 @@ class DrilldownController < ApplicationController
 
 
     # options
-    options={}
+    @rule=Rule.by_key_or_id(params[:rule])
     @priority_id = (params[:priority] ? Sonar::RulePriority.id(params[:priority]) : nil)
     @categ_id = (params[:categ_id] ? params[:categ_id].to_i : nil)
-    @rule_id = Rule.to_i(params[:rule])
-    options[:rule_id]=@rule_id
+
+    options={}
     options[:rule_category_id]=@categ_id
     options[:rule_priority_id]=@priority_id
-
+    if @rule
+      params[:rule]=@rule.key  # workaround for SONAR-1767 : the javascript hash named "rp" in the HTML source must contain the rule key, but not the rule id
+      options[:rule_id]=@rule.id
+    end
 
     # load data
     @drilldown = Drilldown.new(@project, @metric, @selected_rids, options)
index be405edcc954d90ebadc1c230fe2b34f5ff13776..b2013b6f28d479946dad48673e120153915306e4 100644 (file)
@@ -86,6 +86,22 @@ class Rule < ActiveRecord::Base
     id>0 ? id : nil
   end
 
+  def self.by_key_or_id(key_or_id)
+    rule=nil
+    if key_or_id.present?
+      id=key_or_id.to_i
+      if id<=0
+        parts=key_or_id.split(':')
+        if parts.size==2
+          rule=Rule.find(:first, :conditions => {:plugin_name => parts[0], :plugin_rule_key => parts[1]})
+        end
+      else
+        rule=Rule.find(id)
+      end
+    end
+    rule
+  end
+
   def to_hash_json(profile)
     json = {'title' => name, 'key' => key, 'category' => rules_category.name, 'plugin' => plugin_name}
     json['description'] = description
index e61204eb5968a31c7839bccefd8c69597129c340..b7e501c889a5b53b9fdb391fe31300f335045dc3 100644 (file)
@@ -88,7 +88,7 @@
                      next if rule_measure.value==0
               rule=rules_hash[rule_measure.rule_id]
               clazz = cycle('even', 'odd', :name => 'rules')
-              clazz = clazz + ' selected' if @rule_id and @rule_id==rule_measure.rule_id
+              clazz = clazz + ' selected' if @rule && @rule.id==rule_measure.rule_id
               rule_index+=1
                   %>
                <tr class="<%= clazz -%>">
 <% else %>
 Any <%= @filter %>
 <% end %>&nbsp;&raquo;&nbsp;
-<% if @rule_id %>
-<%= h Rule.find(@rule_id).name %> <%= link_to 'clear', {:overwrite_params => {:rule => nil}} %>
+<% if @rule %>
+<%= h @rule.name %> <%= link_to 'clear', {:overwrite_params => {:rule => nil}} %>
 <% else %>
 Any rule
 <% end %>&nbsp;&raquo;&nbsp;